commit 59dd711ab3a58c3386165160e44d78026e99017b Author: Jesse Malotaux Date: Fri Apr 4 11:52:48 2025 +0200 Redundant commit: only to switch branches. Can be removed. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/Screenshot 2025-03-08 004134.jpg b/Screenshot 2025-03-08 004134.jpg new file mode 100644 index 0000000..7ae5098 Binary files /dev/null and b/Screenshot 2025-03-08 004134.jpg differ diff --git a/be/app/api.go b/be/app/api.go new file mode 100644 index 0000000..41535e3 --- /dev/null +++ b/be/app/api.go @@ -0,0 +1,99 @@ +package app + +import ( + "be/app/helper" + "log" + "mime" + "net/http" + "path/filepath" + "strings" +) + +func ApiCORS(w http.ResponseWriter, r *http.Request) (http.ResponseWriter, *http.Request) { + origin := r.Header.Get("Origin") + + w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") + + if strings.HasPrefix(r.Host, "192.168.") { + log.Println("lan device") + w.Header().Set("Access-Control-Allow-Origin", origin) + } + + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Accept, Accept-Language, Accept-Encoding") + + return w, r +} + +func ApiGet(w http.ResponseWriter, r *http.Request) { + file := "" // base directory + + if r.URL.Path != "/" { + file = "../public" + r.URL.Path // request + } + contentType := mime.TypeByExtension(filepath.Ext(file)) // get content type + + if contentType != "" { + w.Header().Set("Content-Type", contentType) // set content type header + } + + if contentType == "" { + file = "../public/index.html" // default + } + + // log.Println("GET:", file) + + http.ServeFile(w, r, file) // serve file +} + +func ApiPost(w http.ResponseWriter, r *http.Request) { + + access, data := helper.EndpointAccess(w, r) + + if !access { + return + } + + log.Println("api post", data == "") + if data != "" { + ApiAuth(data, w, r) + return + } + + switch r.URL.Path { + case "/macro/record": + SaveMacro(w, r) + case "/macro/list": + ListMacros(w, r) + case "/macro/delete": + DeleteMacro(w, r) + case "/macro/play": + PlayMacro("", w, r) + case "/device/list": + DeviceList(w, r) + case "/device/access/check": + DeviceAccessCheck(w, r) + case "/device/access/request": + DeviceAccessRequest(w, r) + case "/device/link/ping": + PingLink(w, r) + case "/device/link/start": + StartLink(w, r) + case "/device/link/poll": + PollLink(w, r) + case "/device/link/remove": + RemoveLink("", w, r) + case "/device/handshake": + Handshake(w, r) + } +} + +func ApiAuth(data string, w http.ResponseWriter, r *http.Request) { + log.Println("apiauth", data != "") + switch r.URL.Path { + case "/macro/play": + PlayMacro(data, w, r) + case "/device/link/remove": + RemoveLink(data, w, r) + } +} diff --git a/be/app/device.go b/be/app/device.go new file mode 100644 index 0000000..90165db --- /dev/null +++ b/be/app/device.go @@ -0,0 +1,245 @@ +package app + +import ( + "be/app/helper" + "be/app/structs" + "encoding/json" + "fmt" + "log" + "math/rand" + "net/http" + "os" + "path/filepath" + "strings" + "time" +) + +func DeviceList(w http.ResponseWriter, r *http.Request) { + log.Println("device list") + dir := "devices" + files, err := os.ReadDir(dir) + if err != nil { + log.Fatal(err) + } + + devices := make(map[string]map[string]interface{}) + + for _, file := range files { + filePath := dir + "/" + file.Name() + ext := filepath.Ext(filePath) + device := strings.TrimSuffix(file.Name(), ext) + + log.Println(device, ext) + + if _, ok := devices[device]; !ok { + devices[device] = make(map[string]interface{}) + } + + if ext == ".json" { + devices[device]["settings"] = readDeviceSettings(filePath) + } + if ext == ".key" { + devices[device]["key"] = true + } + } + + result := map[string]interface{}{ + "devices": devices, + } + + json.NewEncoder(w).Encode(result) +} + +func readDeviceSettings(filepath string) (settings structs.Settings) { + data, err := os.ReadFile(filepath) + if err != nil { + log.Println(err) + } + + err = json.Unmarshal(data, &settings) + if err != nil { + log.Println(err) + } + log.Println(settings) + return settings +} + +func DeviceAccessCheck(w http.ResponseWriter, r *http.Request) { + log.Println("device access check") + var req structs.Check + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + _, errSett := os.Stat("devices/" + req.Uuid + ".json") + _, errKey := os.Stat("devices/" + req.Uuid + ".key") + + if (errSett == nil) && (errKey == nil) { + log.Println("authorized") + json.NewEncoder(w).Encode("authorized") + } else if (errSett == nil) && (errKey != nil) { + log.Println("unauthorized") + json.NewEncoder(w).Encode("unauthorized") + } else { + log.Println("unauthorized") + json.NewEncoder(w).Encode("unlinked") + } + + return +} + +func DeviceAccessRequest(w http.ResponseWriter, r *http.Request) { + var req structs.Request + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + deviceSettings := structs.Settings{Name: req.Name, Type: req.Type} + + settingsJSON, err := json.Marshal(deviceSettings) + if err != nil { + log.Println(err) + return + } + + err = os.WriteFile("devices/"+req.Uuid+".json", settingsJSON, 0644) + + if err != nil { + log.Println(err) + return + } + + json.NewEncoder(w).Encode("unauthorized") +} + +func PingLink(w http.ResponseWriter, r *http.Request) { + log.Println("ping link") + var req structs.Check + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + json.NewEncoder(w).Encode(false) + return + } + + key, keyErr := os.ReadFile("devices/" + req.Uuid + ".key") + pin, pinErr := os.ReadFile("devices/" + req.Uuid + ".tmp") + + encryptedKey, encErr := helper.EncryptAES(string(pin), string(key)) + + log.Println(encryptedKey, string(pin), string(key)) + + if keyErr == nil && pinErr == nil && encErr == nil { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(encryptedKey)) + return + } + + json.NewEncoder(w).Encode(false) +} + +func StartLink(w http.ResponseWriter, r *http.Request) { + log.Println("start link") + var req structs.Check + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + pin := fmt.Sprintf("%04d", rand.Intn(10000)) + + deviceKey := helper.GenerateKey() + + err = helper.SaveDeviceKey(req.Uuid, deviceKey) + + if err == nil && helper.TempPinFile(req.Uuid, pin) { + json.NewEncoder(w).Encode(pin) + } + + return +} + +func PollLink(w http.ResponseWriter, r *http.Request) { + var req structs.Check + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + json.NewEncoder(w).Encode(false) + return + } + + if helper.CheckPinFile(req.Uuid) { + json.NewEncoder(w).Encode(true) + return + } + + json.NewEncoder(w).Encode(false) +} + +func RemoveLink(data string, w http.ResponseWriter, r *http.Request) { + req := &structs.Check{} + _, err := helper.ParseRequest(req, data, r) + + if err != nil { + json.NewEncoder(w).Encode(false) + return + } + + err = os.Remove("devices/" + req.Uuid + ".key") + + if err != nil { + json.NewEncoder(w).Encode(false) + return + } + + json.NewEncoder(w).Encode(true) +} + +func Handshake(w http.ResponseWriter, r *http.Request) { + var req structs.Handshake + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + return + } + + deviceKey, err := helper.GetKeyByUuid(req.Uuid) + + if err != nil { + json.NewEncoder(w).Encode(false) + return + } + + decryptShake, _ := helper.DecryptAES(deviceKey, req.Shake) + + if decryptShake == getDateStr() { + os.Remove("devices/" + req.Uuid + ".tmp") + + json.NewEncoder(w).Encode(true) + return + } else { + os.Remove("devices/" + req.Uuid + ".key") + } + + json.NewEncoder(w).Encode(false) +} + +func getDateStr() string { + date := time.Now() + year, month, day := date.Date() + formattedDate := fmt.Sprintf("%04d%02d%02d", year, month, day) + return formattedDate +} diff --git a/be/app/helper/api-helper.go b/be/app/helper/api-helper.go new file mode 100644 index 0000000..8adacde --- /dev/null +++ b/be/app/helper/api-helper.go @@ -0,0 +1,102 @@ +package helper + +import ( + "encoding/json" + "log" + "net" + "net/http" + "strings" + + "be/app/structs" + . "be/app/structs" +) + +func EndpointAccess(w http.ResponseWriter, r *http.Request) (bool, string) { + ip, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + log.Fatal(err) + } + + if (isLocal(ip) && isEndpointAllowed("Local", r.URL.Path)) || + (isLanRemote(ip) && isEndpointAllowed("Remote", r.URL.Path)) { + log.Println(r.URL.Path, "endpoint access: accessible") + return true, "" + } else if isLanRemote(ip) && isEndpointAllowed("Auth", r.URL.Path) { + log.Println(r.URL.Path, "endpoint access: authorized") + + data := decryptAuth(r) + + return data != "", data + } + + log.Println(r.URL.Path, "endpoint access: not authorized or accessible") + + return false, "" +} + +func isLocal(ip string) bool { + return ip == "127.0.0.1" || ip == "::1" +} + +func isLanRemote(ip string) bool { + return strings.HasPrefix(ip, "192.168.") +} + +func isEndpointAllowed(source string, endpoint string) bool { + var endpoints, err = getAllowedEndpoints(source) + if err != "" { + log.Println(err) + } + + if (endpoints != nil) && (len(endpoints) > 0) { + for _, e := range endpoints { + if e == endpoint { + return true + } + } + } + + return false +} + +func getAllowedEndpoints(source string) (endpoints []string, err string) { + if source == "Local" { + return Endpoints.Local, "" + } + if source == "Remote" { + return Endpoints.Remote, "" + } + if source == "Auth" { + return Endpoints.Auth, "" + } + + return []string{}, "No allowed endpoints" +} + +func decryptAuth(r *http.Request) string { + var req structs.Authcall + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil || req.Uuid == "" || req.Data == "" { + return "" + } + + deviceKey, errKey := GetKeyByUuid(req.Uuid) + decryptData, errDec := DecryptAES(deviceKey, req.Data) + + if errKey != nil && errDec != nil || decryptData == "" { + return "" + } + + return decryptData +} + +func ParseRequest(req interface{}, data string, r *http.Request) (d interface{}, err error) { + if data != "" { + dataBytes := []byte(data) + return req, json.Unmarshal(dataBytes, &req) + } else { + return req, json.NewDecoder(r.Body).Decode(&req) + } +} diff --git a/be/app/helper/browser-helper.go b/be/app/helper/browser-helper.go new file mode 100644 index 0000000..579bc9e --- /dev/null +++ b/be/app/helper/browser-helper.go @@ -0,0 +1,23 @@ +package helper + +import ( + "os/exec" + "runtime" +) + +func OpenBrowser(url string) bool { + var args []string + + switch runtime.GOOS { + case "darwin": + args = []string{"open"} + case "windows": + args = []string{"cmd", "/c", "start"} + default: + args = []string{"xdg-open"} + } + + cmd := exec.Command(args[0], append(args[1:], url)...) + + return cmd.Start() == nil +} diff --git a/be/app/helper/device-helper.go b/be/app/helper/device-helper.go new file mode 100644 index 0000000..38db5ba --- /dev/null +++ b/be/app/helper/device-helper.go @@ -0,0 +1,46 @@ +package helper + +import ( + "log" + "os" + "time" +) + +func TempPinFile(Uuid string, pin string) bool { + log.Println("temp pin file", Uuid, pin) + err := os.WriteFile("devices/"+Uuid+".tmp", []byte(pin), 0644) + if err != nil { + log.Println(err) + return false + } + + time.AfterFunc(1*time.Minute, func() { + log.Println("deleting", Uuid, pin) + os.Remove("devices/" + Uuid + ".tmp") + }) + + return true +} + +func CheckPinFile(Uuid string) bool { + _, err := os.Stat("devices/" + Uuid + ".tmp") + return err == nil +} + +func SaveDeviceKey(Uuid string, key string) error { + err := os.WriteFile("devices/"+Uuid+".key", []byte(key), 0644) + + if err != nil { + return err + } + + return nil +} + +func GetKeyByUuid(Uuid string) (string, error) { + data, err := os.ReadFile("devices/" + Uuid + ".key") + if err != nil { + return "", err + } + return string(data), nil +} diff --git a/be/app/helper/encrypt-helper.go b/be/app/helper/encrypt-helper.go new file mode 100644 index 0000000..f5a6f91 --- /dev/null +++ b/be/app/helper/encrypt-helper.go @@ -0,0 +1,105 @@ +package helper + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "encoding/base64" + "errors" + "strings" +) + +func EncryptAES(key string, plaintext string) (string, error) { + origData := []byte(plaintext) + + // Create AES cipher + block, err := aes.NewCipher(keyToBytes(key)) + if err != nil { + return "", err + } + blockSize := block.BlockSize() + + origData = PKCS5Padding(origData, blockSize) + + iv := []byte(EnvGet("MCRM__IV")) + blockMode := cipher.NewCBCEncrypter(block, iv) + + crypted := make([]byte, len(origData)) + blockMode.CryptBlocks(crypted, origData) + + cryptedString := base64.StdEncoding.EncodeToString(crypted) + + return cryptedString, nil +} + +func DecryptAES(key string, cryptedText string) (string, error) { + crypted, err := base64.StdEncoding.DecodeString(cryptedText) + + if err != nil { + return "", err + } + + block, err := aes.NewCipher(keyToBytes(key)) + if err != nil { + return "", err + } + + iv := []byte(EnvGet("MCRM__IV")) + blockMode := cipher.NewCBCDecrypter(block, iv) + + origData := make([]byte, len(crypted)) + + blockMode.CryptBlocks(origData, crypted) + origData, err = PKCS5UnPadding(origData) + + if err != nil || len(origData) <= 3 { + return "", errors.New("invalid key") + } + + origDataString := string(origData) + + return origDataString, nil +} + +func generateRandomString(length int) string { + b := make([]byte, length) + _, err := rand.Read(b) + if err != nil { + panic(err) + } + return base64.StdEncoding.EncodeToString(b) +} + +func GenerateKey() string { + return strings.Replace(generateRandomString(24), "=", "", -1) +} + +func keyToBytes(key string) []byte { + // Convert key to bytes + keyBytes := []byte(key) + + // If key is 4 characters, append salt + if len(key) == 4 { + keyBytes = []byte(key + EnvGet("MCRM__SALT")) + } + + return keyBytes +} + +func PKCS5Padding(ciphertext []byte, blockSize int) []byte { + padding := blockSize - len(ciphertext)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(ciphertext, padtext...) +} + +func PKCS5UnPadding(origData []byte) ([]byte, error) { + length := len(origData) + unpadding := int(origData[length-1]) + + if (unpadding >= length) || (unpadding == 0) { + return nil, errors.New("unpadding error") + } + + return origData[:(length - unpadding)], nil +} diff --git a/be/app/helper/env-helper.go b/be/app/helper/env-helper.go new file mode 100644 index 0000000..0c58023 --- /dev/null +++ b/be/app/helper/env-helper.go @@ -0,0 +1,16 @@ +package helper + +import ( + "log" + "os" + + "github.com/joho/godotenv" +) + +func EnvGet(key string) string { + err := godotenv.Load("../.env") + if err != nil { + log.Fatal("Error loading .env file") + } + return os.Getenv("VITE_" + key) +} diff --git a/be/app/helper/macro-helper.go b/be/app/helper/macro-helper.go new file mode 100644 index 0000000..ec6a94a --- /dev/null +++ b/be/app/helper/macro-helper.go @@ -0,0 +1,64 @@ +package helper + +import ( + "encoding/json" + "log" + "os" + "regexp" + "strings" + "time" + + "be/app/structs" + + "github.com/go-vgo/robotgo" +) + +func FormatMacroFileName(s string) string { + // Remove invalid characters + re := regexp.MustCompile(`[\/\?\*\>\<\:\\"\|\n]`) + s = re.ReplaceAllString(s, "") + + // Replace spaces with underscores + s = strings.ReplaceAll(s, " ", "_") + + // Remove special characters + re = regexp.MustCompile(`[!@#$%^&\(\)\[\]\{\}\~]`) + s = re.ReplaceAllString(s, "") + + // Truncate the string + if len(s) > 255 { + s = s[:255] + } + + return s +} + +func ReadMacroFile(filename string) (steps []structs.Step, err error) { + log.Println(filename) + + content, err := os.ReadFile(filename) + + if err != nil { + log.Fatal("Error when opening file: ", err) + } + + err = json.Unmarshal(content, &steps) + + return steps, err +} + +func RunMacroSteps(steps []structs.Step) { + for _, step := range steps { + // log.Println(step) + switch step.Type { + case "key": + robotgo.KeyToggle(step.Key, step.Direction) + // log.Println("Toggling", step.Key, "to", step.Direction) + case "delay": + time.Sleep(time.Duration(step.Location) * time.Millisecond) + // log.Println("Sleeping for", step.Value, "milliseconds") + default: + log.Println("Unknown step type:", step.Type) + } + } +} diff --git a/be/app/macro.go b/be/app/macro.go new file mode 100644 index 0000000..4b82e5a --- /dev/null +++ b/be/app/macro.go @@ -0,0 +1,88 @@ +package app + +import ( + "encoding/json" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "strings" + + "be/app/helper" + "be/app/structs" +) + +func SaveMacro(w http.ResponseWriter, r *http.Request) { + var newMacro structs.NewMacro + + body, err := io.ReadAll(r.Body) + if err != nil { + panic(err) + } + + log.Println(string(body)) + + err = json.Unmarshal(body, &newMacro) + if err != nil { + panic(err) + } + + stepsJSON, err := json.Marshal(newMacro.Steps) + if err != nil { + panic(err) + } + + err = os.WriteFile("../macros/"+helper.FormatMacroFileName(newMacro.Name)+".json", stepsJSON, 0644) + if err != nil { + panic(err) + } +} + +func ListMacros(w http.ResponseWriter, r *http.Request) { + log.Println("listing macros") + dir := "../macros" + files, err := os.ReadDir(dir) + if err != nil { + log.Println(err) + } + + var fileNames []string + + for _, file := range files { + filename := filepath.Base(file.Name()) + filename = strings.TrimSuffix(filename, filepath.Ext(filename)) + filename = strings.Replace(filename, "_", " ", -1) + + fileNames = append(fileNames, filename) + } + + json.NewEncoder(w).Encode(fileNames) +} + +func DeleteMacro(w http.ResponseWriter, r *http.Request) {} + +func PlayMacro(data string, w http.ResponseWriter, r *http.Request) { + req := &structs.MacroRequest{} + _, err := helper.ParseRequest(req, data, r) + + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + macro := req.Macro + + var filename = helper.FormatMacroFileName(macro) + var filepath = fmt.Sprintf("../macros/%s.json", filename) + + macroFile, err := helper.ReadMacroFile(filepath) + if err != nil { + fmt.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + helper.RunMacroSteps(macroFile) +} diff --git a/be/app/structs/api-struct.go b/be/app/structs/api-struct.go new file mode 100644 index 0000000..774bbad --- /dev/null +++ b/be/app/structs/api-struct.go @@ -0,0 +1,37 @@ +package structs + +type Allowed struct { + Local []string + Remote []string + Auth []string +} + +var Endpoints = Allowed{ + Local: []string{ + "/macro/record", + "/macro/list", + "/macro/delete", + "/macro/play", + "/device/list", + "/device/access/check", + "/device/access/request", + "/device/link/ping", + "/device/link/start", + "/device/link/poll", + "/device/link/remove", + "/device/handshake", + }, + Remote: []string{ + "/macro/list", + "/device/access/check", + "/device/access/request", + "/device/link/ping", + "/device/link/end", + "/device/handshake", + "/device/auth", + }, + Auth: []string{ + "/macro/play", + "/device/link/remove", + }, +} diff --git a/be/app/structs/device-struct.go b/be/app/structs/device-struct.go new file mode 100644 index 0000000..39586cd --- /dev/null +++ b/be/app/structs/device-struct.go @@ -0,0 +1,31 @@ +package structs + +type Settings struct { + Name string `json:"name"` + Type string `json:"type"` +} + +type RemoteWebhook struct { + Event string `json:"event"` + Data string `json:"data"` +} + +type Check struct { + Uuid string `json:"uuid"` +} + +type Request struct { + Uuid string `json:"uuid"` + Name string `json:"name"` + Type string `json:"type"` +} + +type Handshake struct { + Uuid string `json:"uuid"` + Shake string `json:"shake"` +} + +type Authcall struct { + Uuid string `json:"uuid"` + Data string `json:"d"` +} diff --git a/be/app/structs/macro-struct.go b/be/app/structs/macro-struct.go new file mode 100644 index 0000000..a22fa1b --- /dev/null +++ b/be/app/structs/macro-struct.go @@ -0,0 +1,19 @@ +package structs + +type MacroRequest struct { + Macro string `json:"macro"` +} + +type Step struct { + Type string `json:"type"` + Key string `json:"key"` + Code string `json:"code"` + Location int `json:"location"` + Direction string `json:"direction"` + Value int `json:"value"` +} + +type NewMacro struct { + Name string `json:"name"` + Steps []Step `json:"steps"` +} diff --git a/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.json b/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.json new file mode 100644 index 0000000..e0eb582 --- /dev/null +++ b/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.json @@ -0,0 +1 @@ +{"name":"Unknown desktop","type":"desktop"} \ No newline at end of file diff --git a/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.key b/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.key new file mode 100644 index 0000000..5bb53d8 --- /dev/null +++ b/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.key @@ -0,0 +1 @@ +3JYxP8LOq1Y2fhpgEtpXVJ3v4s3qdML3 \ No newline at end of file diff --git a/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.json b/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.json new file mode 100644 index 0000000..203fbb3 --- /dev/null +++ b/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.json @@ -0,0 +1 @@ +{"name":"Unknown mobile","type":"mobile"} \ No newline at end of file diff --git a/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.key b/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.key new file mode 100644 index 0000000..4aa4e7a --- /dev/null +++ b/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.key @@ -0,0 +1 @@ +4MqIbBoPsHizsWCyeqg6gd/wpQzfhc7e \ No newline at end of file diff --git a/be/go.mod b/be/go.mod new file mode 100644 index 0000000..abe1604 --- /dev/null +++ b/be/go.mod @@ -0,0 +1,38 @@ +module be + +go 1.24.0 + +require ( + github.com/go-vgo/robotgo v0.110.6 + github.com/joho/godotenv v1.5.1 +) + +require ( + github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e // indirect + github.com/ebitengine/purego v0.8.2 // indirect + github.com/gen2brain/shm v0.1.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/jezek/xgb v1.1.1 // indirect + github.com/kbinani/screenshot v0.0.0-20250118074034-a3924b7bbc8c // indirect + github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect + github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect + github.com/otiai10/gosseract v2.2.1+incompatible // indirect + github.com/otiai10/mint v1.6.3 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/robotn/xgb v0.10.0 // indirect + github.com/robotn/xgbutil v0.10.0 // indirect + github.com/shirou/gopsutil/v4 v4.25.1 // indirect + github.com/tailscale/win v0.0.0-20250213223159-5992cb43ca35 // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.9.0 // indirect + github.com/vcaesar/gops v0.40.0 // indirect + github.com/vcaesar/imgo v0.40.2 // indirect + github.com/vcaesar/keycode v0.10.1 // indirect + github.com/vcaesar/tt v0.20.1 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + golang.org/x/exp v0.0.0-20250215185904-eff6e970281f // indirect + golang.org/x/image v0.24.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sys v0.31.0 // indirect +) diff --git a/be/go.sum b/be/go.sum new file mode 100644 index 0000000..27c1608 --- /dev/null +++ b/be/go.sum @@ -0,0 +1,80 @@ +github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ= +github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966/go.mod h1:Mid70uvE93zn9wgF92A/r5ixgnvX8Lh68fxp9KQBaI0= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e h1:L+XrFvD0vBIBm+Wf9sFN6aU395t7JROoai0qXZraA4U= +github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e/go.mod h1:SUxUaAK/0UG5lYyZR1L1nC4AaYYvSSYTWQSH3FPcxKU= +github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= +github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/gen2brain/shm v0.1.1 h1:1cTVA5qcsUFixnDHl14TmRoxgfWEEZlTezpUj1vm5uQ= +github.com/gen2brain/shm v0.1.1/go.mod h1:UgIcVtvmOu+aCJpqJX7GOtiN7X2ct+TKLg4RTxwPIUA= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-vgo/robotgo v0.110.6 h1:1tOxlmTXYg6F3Xs8IT++331MxY2nZ+Q3B6eW312llbo= +github.com/go-vgo/robotgo v0.110.6/go.mod h1:eBUjTHY1HYjzdi1+UWJUbxB+b9gE+l4Ei7vQU/9SnLw= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4= +github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/kbinani/screenshot v0.0.0-20250118074034-a3924b7bbc8c h1:1IlzDla/ZATV/FsRn1ETf7ir91PHS2mrd4VMunEtd9k= +github.com/kbinani/screenshot v0.0.0-20250118074034-a3924b7bbc8c/go.mod h1:Pmpz2BLf55auQZ67u3rvyI2vAQvNetkK/4zYUmpauZQ= +github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0= +github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/otiai10/gosseract v2.2.1+incompatible h1:Ry5ltVdpdp4LAa2bMjsSJH34XHVOV7XMi41HtzL8X2I= +github.com/otiai10/gosseract v2.2.1+incompatible/go.mod h1:XrzWItCzCpFRZ35n3YtVTgq5bLAhFIkascoRo8G32QE= +github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= +github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/robotn/xgb v0.0.0-20190912153532-2cb92d044934/go.mod h1:SxQhJskUJ4rleVU44YvnrdvxQr0tKy5SRSigBrCgyyQ= +github.com/robotn/xgb v0.10.0 h1:O3kFbIwtwZ3pgLbp1h5slCQ4OpY8BdwugJLrUe6GPIM= +github.com/robotn/xgb v0.10.0/go.mod h1:SxQhJskUJ4rleVU44YvnrdvxQr0tKy5SRSigBrCgyyQ= +github.com/robotn/xgbutil v0.10.0 h1:gvf7mGQqCWQ68aHRtCxgdewRk+/KAJui6l3MJQQRCKw= +github.com/robotn/xgbutil v0.10.0/go.mod h1:svkDXUDQjUiWzLrA0OZgHc4lbOts3C+uRfP6/yjwYnU= +github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= +github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tailscale/win v0.0.0-20250213223159-5992cb43ca35 h1:wAZbkTZkqDzWsqxPh2qkBd3KvFU7tcxV0BP0Rnhkxog= +github.com/tailscale/win v0.0.0-20250213223159-5992cb43ca35/go.mod h1:aMd4yDHLjbOuYP6fMxj1d9ACDQlSWwYztcpybGHCQc8= +github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= +github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= +github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= +github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo= +github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI= +github.com/vcaesar/gops v0.40.0 h1:I+1RCGiV+LkZJUYNzAd373xs0uM2UyeFdZBmow8HfCM= +github.com/vcaesar/gops v0.40.0/go.mod h1:3u/USW7JovqUK6i13VOD3qWfvXXd2TIIKE4PYIv4TOM= +github.com/vcaesar/imgo v0.40.2 h1:5GWScRLdBCMtO1v2I1bs+ZmDLZFINxYSMZ+mtUw5qPM= +github.com/vcaesar/imgo v0.40.2/go.mod h1:MVCl+FxHI2gTgmiHoi0n5xNCbYcfv9SVtdEOUC92+eo= +github.com/vcaesar/keycode v0.10.1 h1:0DesGmMAPWpYTCYddOFiCMKCDKgNnwiQa2QXindVUHw= +github.com/vcaesar/keycode v0.10.1/go.mod h1:JNlY7xbKsh+LAGfY2j4M3znVrGEm5W1R8s/Uv6BJcfQ= +github.com/vcaesar/tt v0.20.1 h1:D/jUeeVCNbq3ad8M7hhtB3J9x5RZ6I1n1eZ0BJp7M+4= +github.com/vcaesar/tt v0.20.1/go.mod h1:cH2+AwGAJm19Wa6xvEa+0r+sXDJBT0QgNQey6mwqLeU= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/exp v0.0.0-20250215185904-eff6e970281f h1:oFMYAjX0867ZD2jcNiLBrI9BdpmEkvPyi5YrBGXbamg= +golang.org/x/exp v0.0.0-20250215185904-eff6e970281f/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= +golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= +golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/be/index.html b/be/index.html new file mode 100644 index 0000000..bc22877 --- /dev/null +++ b/be/index.html @@ -0,0 +1,23 @@ + + + + + + 404 - BALLS + + + +

Balls found

+ So not the content you're looking for. + + diff --git a/be/macroOLD/macro.go b/be/macroOLD/macro.go new file mode 100644 index 0000000..4abe231 --- /dev/null +++ b/be/macroOLD/macro.go @@ -0,0 +1,162 @@ +package macro + +import ( + "encoding/json" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "regexp" + "strings" + "time" + + "github.com/go-vgo/robotgo" +) + +type Step struct { + Type string `json:"type"` + Key string `json:"key"` + Code string `json:"code"` + Location int `json:"location"` + Direction string `json:"direction"` + Value int `json:"value"` +} + +var newMacro struct { + Name string `json:"name"` + Steps []Step `json:"steps"` +} + +func Save(w http.ResponseWriter, r *http.Request) { + body, err := io.ReadAll(r.Body) + + if err != nil { + panic(err) + } + + log.Println(string(body)) + + err = json.Unmarshal(body, &newMacro) + + if err != nil { + panic(err) + } + + stepsJSON, err := json.Marshal(newMacro.Steps) + if err != nil { + panic(err) + } + + err = os.WriteFile("../macros/"+makeValidFilename(newMacro.Name)+".json", stepsJSON, 0644) + if err != nil { + panic(err) + } +} + +func makeValidFilename(s string) string { + // Remove invalid characters + re := regexp.MustCompile(`[\/\?\*\>\<\:\\"\|\n]`) + s = re.ReplaceAllString(s, "") + + // Replace spaces with underscores + s = strings.ReplaceAll(s, " ", "_") + + // Remove special characters + re = regexp.MustCompile(`[!@#$%^&\(\)\[\]\{\}\~]`) + s = re.ReplaceAllString(s, "") + + // Truncate the string + if len(s) > 255 { + s = s[:255] + } + + return s +} + +func List(w http.ResponseWriter, r *http.Request) { + log.Println("listing macros") + dir := "../macros" + files, err := os.ReadDir(dir) + if err != nil { + log.Fatal(err) + } + + var fileNames []string + + for _, file := range files { + filename := filepath.Base(file.Name()) + filename = strings.TrimSuffix(filename, filepath.Ext(filename)) + filename = strings.Replace(filename, "_", " ", -1) + + fileNames = append(fileNames, filename) + } + + json.NewEncoder(w).Encode(fileNames) +} + +func Delete(w http.ResponseWriter, r *http.Request) {} + +func Play(w http.ResponseWriter, r *http.Request) { + type MacroRequest struct { + Macro string `json:"macro"` + } + + var req MacroRequest + + err := json.NewDecoder(r.Body).Decode(&req) + + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + macro := req.Macro + + macroFile, err := readMacroFile(fmt.Sprintf("../macros/%s.json", makeValidFilename(macro))) + + if err != nil { + fmt.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + playMacro(macroFile) + // fmt.Println(macroFile) +} + +func readMacroFile(filename string) (steps []Step, err error) { + + log.Println(filename) + // Let's first read the `config.json` file + content, err := os.ReadFile(filename) + if err != nil { + log.Fatal("Error when opening file: ", err) + } + + // Now let's unmarshall the data into `steps` + err = json.Unmarshal(content, &steps) + if err != nil { + log.Fatal("Error during Unmarshal(): ", err) + } + + return steps, nil +} + +func playMacro(steps []Step) { + for _, step := range steps { + // log.Println(step) + switch step.Type { + case "key": + robotgo.KeyToggle(step.Key, step.Direction) + // log.Println("Toggling", step.Key, "to", step.Direction) + case "delay": + time.Sleep(time.Duration(step.Location) * time.Millisecond) + // log.Println("Sleeping for", step.Value, "milliseconds") + default: + log.Println("Unknown step type:", step.Type) + } + } + +} diff --git a/be/main.go b/be/main.go new file mode 100644 index 0000000..6c02643 --- /dev/null +++ b/be/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "log" + "net/http" + + "be/app" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + apiInit(w, r) + }) + + log.Println(http.ListenAndServe(":6970", nil)) +} + +func apiInit(w http.ResponseWriter, r *http.Request) { + app.ApiCORS(w, r) + + if r.Method == "GET" { + app.ApiGet(w, r) + } else if r.Method == "POST" { + app.ApiPost(w, r) + } +} diff --git a/be/tmp/build-errors.log b/be/tmp/build-errors.log new file mode 100644 index 0000000..d4bc9c7 --- /dev/null +++ b/be/tmp/build-errors.log @@ -0,0 +1 @@ +exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file diff --git a/be/tmp/main.exe b/be/tmp/main.exe new file mode 100644 index 0000000..86c4c25 Binary files /dev/null and b/be/tmp/main.exe differ diff --git a/fe/README.md b/fe/README.md new file mode 100644 index 0000000..ae6174c --- /dev/null +++ b/fe/README.md @@ -0,0 +1,35 @@ +# fe + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/fe/assets/main.css b/fe/assets/main.css new file mode 100644 index 0000000..1b2d914 --- /dev/null +++ b/fe/assets/main.css @@ -0,0 +1,4 @@ +html, +body { + background-color: white; +} diff --git a/fe/eslint.config.js b/fe/eslint.config.js new file mode 100644 index 0000000..76c70ec --- /dev/null +++ b/fe/eslint.config.js @@ -0,0 +1,19 @@ +import js from '@eslint/js' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +export default [ + { + name: 'app/files-to-lint', + files: ['**/*.{js,mjs,jsx,vue}'], + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], + }, + + js.configs.recommended, + ...pluginVue.configs['flat/essential'], + skipFormatting, +] diff --git a/fe/index.html b/fe/index.html new file mode 100644 index 0000000..70978ff --- /dev/null +++ b/fe/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Vite + Vue + + +
+ + + diff --git a/fe/jsconfig.json b/fe/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/fe/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/fe/package-lock.json b/fe/package-lock.json new file mode 100644 index 0000000..2e9404d --- /dev/null +++ b/fe/package-lock.json @@ -0,0 +1,5454 @@ +{ + "name": "fe", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fe", + "version": "0.0.0", + "dependencies": { + "@tabler/icons-vue": "^3.30.0", + "@tailwindcss/vite": "^4.0.9", + "vue": "^3.5.13", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@basitcodeenv/vue3-device-detect": "^1.0.3", + "@eslint/js": "^9.20.0", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^10.2.0", + "axios": "^1.8.3", + "crypto-js": "^4.2.0", + "eslint": "^9.20.1", + "eslint-plugin-vue": "^9.32.0", + "pinia": "^3.0.1", + "prettier": "^3.5.1", + "sass-embedded": "^1.85.1", + "tailwindcss": "^4.0.9", + "uuid": "^11.1.0", + "vite": "^6.1.0", + "vite-plugin-vue-devtools": "^7.7.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@basitcodeenv/vue3-device-detect": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@basitcodeenv/vue3-device-detect/-/vue3-device-detect-1.0.3.tgz", + "integrity": "sha512-BDHoM2KYJx/PrEyEzgYOLEVSTxQmvd1PR7UqRQSMClgnM7O1cGoagG/5K0CZy6LUHGifyU5qnrQdC3Sy9nt3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ua-parser-js": "^1.0.37", + "vue": "^3.0.0-0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.5.tgz", + "integrity": "sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==", + "devOptional": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.0.tgz", + "integrity": "sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", + "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", + "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", + "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", + "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", + "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", + "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", + "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", + "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", + "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", + "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", + "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", + "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", + "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", + "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", + "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", + "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", + "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", + "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", + "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", + "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tabler/icons": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.31.0.tgz", + "integrity": "sha512-dblAdeKY3+GA1U+Q9eziZ0ooVlZMHsE8dqP0RkwvRtEsAULoKOYaCUOcJ4oW1DjWegdxk++UAt2SlQVnmeHv+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-vue": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-vue/-/icons-vue-3.31.0.tgz", + "integrity": "sha512-a6kMUSakgjHhyDiQvi+nLh0uign8xEkzpOzmXpNF+tVyUA6Y9dCeK8c3o67onYZdPZPg22RpvQuX3K6bAuV/oA==", + "license": "MIT", + "dependencies": { + "@tabler/icons": "3.31.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.0.tgz", + "integrity": "sha512-mfgxGxFaxbsUbaGwKIAQXUSm7Qoojw53FftpoKwo4ANwr9wnDaByz4vi1gMti/xfJvmQ5lzA1DvPiX5yCHtBkQ==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.29.2", + "tailwindcss": "4.1.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.0.tgz", + "integrity": "sha512-A33oyZKpPFH08d7xkl13Dc8OTsbPhsuls0z9gUCxIHvn8c1BsUACddQxL6HwaeJR1fSYyXZUw8bdWcD8bVawpQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.0", + "@tailwindcss/oxide-darwin-arm64": "4.1.0", + "@tailwindcss/oxide-darwin-x64": "4.1.0", + "@tailwindcss/oxide-freebsd-x64": "4.1.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.0", + "@tailwindcss/oxide-linux-x64-musl": "4.1.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.0.tgz", + "integrity": "sha512-UredFljuHey2Kh5qyYfQVBr0Xfq70ZE5Df6i5IubNYQGs2JXXT4VL0SIUjwzHx5W9T6t7dT7banunlV6lthGPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.0.tgz", + "integrity": "sha512-QHQ/46lRVwH9zEBNiRk8AJ3Af4pMq6DuZAI//q323qrPOXjsRdrhLsH9LUO3mqBfHr5EZNUxN3Am5vpO89sntw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.0.tgz", + "integrity": "sha512-lEMgYHCvQQ6x2KOZ4FwnPprwfnc+UnjzwXRqEYIhB/NlYvXQD1QMf7oKEDRqy94DiZaYox9ZRfG2YJOBgM0UkA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.0.tgz", + "integrity": "sha512-9fdImTc+2lA5yHqJ61oeTXfCtzylNOzJVFhyWwVQAJESJJbVCPnj6f+b+Zf/AYAdKQfS6FCThbPEahkQrDCgLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.0.tgz", + "integrity": "sha512-HB0bTkUOuTLLSdadyRhKE9yps4/ZBjrojbHTPMSvvf/8yBLZRPpWb+A6IgW5R+2A2AL4KhVPgLwWfoXsErxJFg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.0.tgz", + "integrity": "sha512-+QtYCwvKLjC46h6RikKkpELJWrpiMMtgyK0aaqhwPLEx1icGgIhwz8dqrkAiqbFRE0KiRrE2aenhYoEkplyRmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.0.tgz", + "integrity": "sha512-nApadFKM9GauzuPZPlt6TKfELavMHqJ0gVd+GYkYBTwr2t9KhgCAb2sKiFDDIhs1a7gOjsU7P1lEauv3iKFp+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.0.tgz", + "integrity": "sha512-cp0Rf9Wit2kZHhrV8HIoDFD8dxU2+ZTCFCFbDj3a07pGyyPwLCJm5H5VipKXgYrBaLmlYu73ERidW0S5sdEXEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.0.tgz", + "integrity": "sha512-4/wf42XWBJGXsOS6BhgPhdQbg/qyfdZ1nZvTL9sJoxYN+Ah+cfY5Dd7R0smzI8hmgCRt3TD1lYb72ChTyIA59w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.0.tgz", + "integrity": "sha512-caXJJ0G6NwGbcoxEYdH3MZYN84C3PldaMdAEPMU6bjJXURQlKdSlQ/Ecis7/nSgBkMkicZyhqWmb36Tw/BFSIw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.0.tgz", + "integrity": "sha512-ZHXRXRxB7HBmkUE8U13nmkGGYfR1I2vsuhiYjeDDUFIYpk1BL6caU8hvzkSlL/X5CAQNdIUUJRGom5I0ZyfJOA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.0.tgz", + "integrity": "sha512-IszG0h/o8jOGheY0f7v41a9qyDymZ5eU8qm4koTypMKagBhaQA06Keip13wch6sz7rG3cvIG7A3/ytdfRh2BUw==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.0", + "@tailwindcss/oxide": "4.1.0", + "tailwindcss": "4.1.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz", + "integrity": "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.2.tgz", + "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.2" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.2.tgz", + "integrity": "sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "mitt": "^3.0.1", + "nanoid": "^5.0.9", + "pathe": "^2.0.2", + "vite-hot-client": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", + "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.2", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", + "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz", + "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "devOptional": true, + "license": "MIT/X11" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.129", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz", + "integrity": "sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz", + "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.5.tgz", + "integrity": "sha512-IKKP8R87pJyMl7WWamLgPkloB16dagPIdd2FjBDbyRYPKo93wS/NbCOPh6gH+ieNLC+XZrhJt/kWj0PS/DFdmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.10.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.1.tgz", + "integrity": "sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", + "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.38.0", + "@rollup/rollup-android-arm64": "4.38.0", + "@rollup/rollup-darwin-arm64": "4.38.0", + "@rollup/rollup-darwin-x64": "4.38.0", + "@rollup/rollup-freebsd-arm64": "4.38.0", + "@rollup/rollup-freebsd-x64": "4.38.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", + "@rollup/rollup-linux-arm-musleabihf": "4.38.0", + "@rollup/rollup-linux-arm64-gnu": "4.38.0", + "@rollup/rollup-linux-arm64-musl": "4.38.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-musl": "4.38.0", + "@rollup/rollup-linux-s390x-gnu": "4.38.0", + "@rollup/rollup-linux-x64-gnu": "4.38.0", + "@rollup/rollup-linux-x64-musl": "4.38.0", + "@rollup/rollup-win32-arm64-msvc": "4.38.0", + "@rollup/rollup-win32-ia32-msvc": "4.38.0", + "@rollup/rollup-win32-x64-msvc": "4.38.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass-embedded": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.86.1.tgz", + "integrity": "sha512-LMJvytHh7lIUtmjGCqpM4cRdIDvPllLJKznNIK4L7EZJ77BLeUFoOSRXEOHq4G4gqy5CVhHUKlHslzCANkDOhQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.86.1", + "sass-embedded-android-arm64": "1.86.1", + "sass-embedded-android-ia32": "1.86.1", + "sass-embedded-android-riscv64": "1.86.1", + "sass-embedded-android-x64": "1.86.1", + "sass-embedded-darwin-arm64": "1.86.1", + "sass-embedded-darwin-x64": "1.86.1", + "sass-embedded-linux-arm": "1.86.1", + "sass-embedded-linux-arm64": "1.86.1", + "sass-embedded-linux-ia32": "1.86.1", + "sass-embedded-linux-musl-arm": "1.86.1", + "sass-embedded-linux-musl-arm64": "1.86.1", + "sass-embedded-linux-musl-ia32": "1.86.1", + "sass-embedded-linux-musl-riscv64": "1.86.1", + "sass-embedded-linux-musl-x64": "1.86.1", + "sass-embedded-linux-riscv64": "1.86.1", + "sass-embedded-linux-x64": "1.86.1", + "sass-embedded-win32-arm64": "1.86.1", + "sass-embedded-win32-ia32": "1.86.1", + "sass-embedded-win32-x64": "1.86.1" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.86.1.tgz", + "integrity": "sha512-bcmKB67uCb9znune+QsE6cWIiKAHE9P+24/9vDPHwwN3BmmH1B/4mznNKKakdYMuxpgbeLrPcEScHEpQbdrIpA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.86.1.tgz", + "integrity": "sha512-SMY79YhNfq/gdz8MHqwEsnf/IjSnQFAmSEGDDv0vjL0yy9VZC/zhsxpsho8vbFEvTSEGFFlkGgPdzDuoozRrOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.86.1.tgz", + "integrity": "sha512-AX6I5qS8GbgcbBJ1o3uKVI5/7tq6evg/BO/wa0XaNqnzP4i/PojBaGh7EcZrg/spl//SfpS55eA18a0/AOi71w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.86.1.tgz", + "integrity": "sha512-Af6ZzRTRfIfx6KICJZ19je6OjOXhxo+v6z/lf/SXm5/1EaHGpGC5xIw4ivtj4nNINNoqkykfIDCjpzm1qWEPPQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.86.1.tgz", + "integrity": "sha512-GW47z1AH8gXB7IG6EUbC5aDBDtiITeP5nUfEenE6vaaN0H17mBjIwSnEcKPPA1IdxzDpj+4bE/SGfiF0W/At4g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.86.1.tgz", + "integrity": "sha512-grBnDW5Rg+mEmZM7I9hJySS4MMXDwLMd+RyegQnr+SIJ3WA807Cw830+raALxgDY+UKKKhVEoq3FgbTo40Awgw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.86.1.tgz", + "integrity": "sha512-XxSCMcmeADNouiJAr8G1oRnEhkivHKVLV5DRpfFnUK5FqtFCuSk3K18I+xIfpQDeZnjRL3t2VjsmEJuFiBYV8w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.86.1.tgz", + "integrity": "sha512-Z57ZUcWPuoOHpnl3TiUf/x9wWF2dFtkjdv7hZQpFXYwK5eudHFeBErK6KNCos6jkif1KyeFELXT/HWOznitU/w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.86.1.tgz", + "integrity": "sha512-zchms0BtaOrkvfvjRnl1PDWK931DxAeYEY2yKQceO/0OFtcBz1r480Kh/RjIffTNreJqIr9Mx4wFdP+icKwLpg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.86.1.tgz", + "integrity": "sha512-WHntVnCgpiJPCmTeQrn5rtl1zJdd693TwpNGAFPzKD4FILPcVBKtWutl7COL6bKe/mKTf9OW0t6GBJ6mav2hAA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.86.1.tgz", + "integrity": "sha512-DlPpyp3bIL8YMtxR22hkWBtuZY6ch3KAmQvqIONippPv96WTHi1iq5jclbE1YXpDtI8Wcus0x6apoDSKq8o95g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.86.1.tgz", + "integrity": "sha512-CwuHMRWSJFByHpgqcVtCSt29dMWhr0lpUTjaBCh9xOl0Oyz89dIqOxA0aMq+XU+thaDtOziJtMIfW6l35ZeykQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.86.1.tgz", + "integrity": "sha512-yjvVpAW1YS0VQNnIUtZTf0IrRDMa0wRjFWUtsLthVIxuXyjLy44+YULlfduxqcZe3rvI4+EqT7GorvviWo9NfQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.86.1.tgz", + "integrity": "sha512-0zCUOMwX/hwPV1zimxM46dq/MdATSqbw6G646DwQ3/2V2Db1t9lfXBZqSavx8p/cqRp1JYTUPbJQV1gT4J7NYw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.86.1.tgz", + "integrity": "sha512-8KJ6kEj1N16V9E0g5PDSd4aVe1LwcVKROJcVqnzTKPMa/4j2VuNWep7D81OYchdQMm9Egn1RqV0jCwm0b2aSHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.86.1.tgz", + "integrity": "sha512-rNJ1EfIkQpvBfMS1fBdyb+Gsji4yK0AwsV1T7NEcy21yDxDt7mdCgkAJiaN9qf7UEXuCuueQoed7WZoDaSpjww==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.86.1.tgz", + "integrity": "sha512-DGCdUoYRRUKzRZz/q7plbB5Nean2+Uk4CqKF4RWAU0v1tHnDKKWmYfETryhWdB2WJM8QSn7O8qRebe6FCobB5g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.86.1.tgz", + "integrity": "sha512-qRLZR3yLuk/3y64YhcltkwGclhPoK6EdiLP1e5SVw5+kughcs+mNUZ3rdvSAmCSA4vDv+XOiOjRpjxmpeon95Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.86.1.tgz", + "integrity": "sha512-o860a7/YGHZnGeY3l/e6yt3+ZMeDdDHmthTaKnw2wpJNEq0nmytYLTJQmjWPxEMz7O8AQ0LtcbDDrhivSog+KQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.86.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.86.1.tgz", + "integrity": "sha512-7Z3wsVKfseJodmv689dDEV/JrXJH5TAclWNvHrEYW5BtoViOTU2pIDxRgLYzdKU9teIw5g6R0nJZb9M105oIKA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/synckit": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.10.3.tgz", + "integrity": "sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.0.tgz", + "integrity": "sha512-vBYstoFnvUZCDxaauNGQQEvJNQgCd1vSMDRYuZZMH1xRRcTboOk1rJrW5yFkEabU9X6Yx1C4LQ+QvPOvQj4Daw==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "devOptional": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.2.tgz", + "integrity": "sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.2", + "@vue/devtools-kit": "^7.7.2", + "@vue/devtools-shared": "^7.7.2", + "execa": "^9.5.1", + "sirv": "^3.0.0", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/fe/package.json b/fe/package.json new file mode 100644 index 0000000..20b8cbe --- /dev/null +++ b/fe/package.json @@ -0,0 +1,36 @@ +{ + "name": "fe", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --profile", + "build": "vite build --emptyOutDir", + "preview": "vite preview", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "@tabler/icons-vue": "^3.30.0", + "@tailwindcss/vite": "^4.0.9", + "vue": "^3.5.13", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@basitcodeenv/vue3-device-detect": "^1.0.3", + "@eslint/js": "^9.20.0", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^10.2.0", + "axios": "^1.8.3", + "crypto-js": "^4.2.0", + "eslint": "^9.20.1", + "eslint-plugin-vue": "^9.32.0", + "pinia": "^3.0.1", + "prettier": "^3.5.1", + "sass-embedded": "^1.85.1", + "tailwindcss": "^4.0.9", + "uuid": "^11.1.0", + "vite": "^6.1.0", + "vite-plugin-vue-devtools": "^7.7.2" + } +} diff --git a/fe/public/assets/index-CNkZ911J.js b/fe/public/assets/index-CNkZ911J.js new file mode 100644 index 0000000..45f0626 --- /dev/null +++ b/fe/public/assets/index-CNkZ911J.js @@ -0,0 +1,25 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Qn(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const X={},_t=[],He=()=>{},Mi=()=>!1,hn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Yn=e=>e.startsWith("onUpdate:"),oe=Object.assign,Jn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Fi=Object.prototype.hasOwnProperty,k=(e,t)=>Fi.call(e,t),D=Array.isArray,Tt=e=>dn(e)==="[object Map]",Ni=e=>dn(e)==="[object Set]",B=e=>typeof e=="function",ne=e=>typeof e=="string",wt=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",ar=e=>(ee(e)||B(e))&&B(e.then)&&B(e.catch),Hi=Object.prototype.toString,dn=e=>Hi.call(e),Li=e=>dn(e).slice(8,-1),$i=e=>dn(e)==="[object Object]",Xn=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,It=Qn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),pn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Di=/-(\w)/g,et=pn(e=>e.replace(Di,(t,n)=>n?n.toUpperCase():"")),ji=/\B([A-Z])/g,ut=pn(e=>e.replace(ji,"-$1").toLowerCase()),hr=pn(e=>e.charAt(0).toUpperCase()+e.slice(1)),En=pn(e=>e?`on${hr(e)}`:""),Ze=(e,t)=>!Object.is(e,t),wn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Bi=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let bs;const gn=()=>bs||(bs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Zn(e){if(D(e)){const t={};for(let n=0;n{if(n){const s=n.split(Vi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function es(e){let t="";if(ne(e))t=e;else if(D(e))for(let n=0;n0)return;if(Ft){let t=Ft;for(Ft=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Mt;){let t=Mt;for(Mt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function yr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function br(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ss(s),Qi(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Hn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(xr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function xr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Bt))return;e.globalVersion=Bt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Hn(e)){e.flags&=-3;return}const n=J,s=xe;J=e,xe=!0;try{yr(e);const r=e.fn(e._value);(t.version===0||Ze(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{J=n,xe=s,br(e),e.flags&=-3}}function ss(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)ss(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Qi(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let xe=!0;const Er=[];function tt(){Er.push(xe),xe=!1}function nt(){const e=Er.pop();xe=e===void 0?!0:e}function xs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=J;J=void 0;try{t()}finally{J=n}}}let Bt=0;class Yi{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class rs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!J||!xe||J===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==J)n=this.activeLink=new Yi(J,this),J.deps?(n.prevDep=J.depsTail,J.depsTail.nextDep=n,J.depsTail=n):J.deps=J.depsTail=n,wr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=J.depsTail,n.nextDep=void 0,J.depsTail.nextDep=n,J.depsTail=n,J.deps===n&&(J.deps=s)}return n}trigger(t){this.version++,Bt++,this.notify(t)}notify(t){ts();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ns()}}}function wr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)wr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Ln=new WeakMap,lt=Symbol(""),$n=Symbol(""),Ut=Symbol("");function re(e,t,n){if(xe&&J){let s=Ln.get(e);s||Ln.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new rs),r.map=s,r.key=n),r.track()}}function Ve(e,t,n,s,r,i){const o=Ln.get(e);if(!o){Bt++;return}const c=l=>{l&&l.trigger()};if(ts(),t==="clear")o.forEach(c);else{const l=D(e),d=l&&Xn(n);if(l&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Ut||!wt(g)&&g>=a)&&c(h)})}else switch((n!==void 0||o.has(void 0))&&c(o.get(n)),d&&c(o.get(Ut)),t){case"add":l?d&&c(o.get("length")):(c(o.get(lt)),Tt(e)&&c(o.get($n)));break;case"delete":l||(c(o.get(lt)),Tt(e)&&c(o.get($n)));break;case"set":Tt(e)&&c(o.get(lt));break}}ns()}function pt(e){const t=W(e);return t===e?t:(re(t,"iterate",Ut),Ee(e)?t:t.map(ce))}function is(e){return re(e=W(e),"iterate",Ut),e}const Ji={__proto__:null,[Symbol.iterator](){return Rn(this,Symbol.iterator,ce)},concat(...e){return pt(this).concat(...e.map(t=>D(t)?pt(t):t))},entries(){return Rn(this,"entries",e=>(e[1]=ce(e[1]),e))},every(e,t){return De(this,"every",e,t,void 0,arguments)},filter(e,t){return De(this,"filter",e,t,n=>n.map(ce),arguments)},find(e,t){return De(this,"find",e,t,ce,arguments)},findIndex(e,t){return De(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return De(this,"findLast",e,t,ce,arguments)},findLastIndex(e,t){return De(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return De(this,"forEach",e,t,void 0,arguments)},includes(...e){return Pn(this,"includes",e)},indexOf(...e){return Pn(this,"indexOf",e)},join(e){return pt(this).join(e)},lastIndexOf(...e){return Pn(this,"lastIndexOf",e)},map(e,t){return De(this,"map",e,t,void 0,arguments)},pop(){return Pt(this,"pop")},push(...e){return Pt(this,"push",e)},reduce(e,...t){return Es(this,"reduce",e,t)},reduceRight(e,...t){return Es(this,"reduceRight",e,t)},shift(){return Pt(this,"shift")},some(e,t){return De(this,"some",e,t,void 0,arguments)},splice(...e){return Pt(this,"splice",e)},toReversed(){return pt(this).toReversed()},toSorted(e){return pt(this).toSorted(e)},toSpliced(...e){return pt(this).toSpliced(...e)},unshift(...e){return Pt(this,"unshift",e)},values(){return Rn(this,"values",ce)}};function Rn(e,t,n){const s=is(e),r=s[t]();return s!==e&&!Ee(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Xi=Array.prototype;function De(e,t,n,s,r,i){const o=is(e),c=o!==e&&!Ee(e),l=o[t];if(l!==Xi[t]){const h=l.apply(e,i);return c?ce(h):h}let d=n;o!==e&&(c?d=function(h,g){return n.call(this,ce(h),g,e)}:n.length>2&&(d=function(h,g){return n.call(this,h,g,e)}));const a=l.call(o,d,s);return c&&r?r(a):a}function Es(e,t,n,s){const r=is(e);let i=n;return r!==e&&(Ee(e)?n.length>3&&(i=function(o,c,l){return n.call(this,o,c,l,e)}):i=function(o,c,l){return n.call(this,o,ce(c),l,e)}),r[t](i,...s)}function Pn(e,t,n){const s=W(e);re(s,"iterate",Ut);const r=s[t](...n);return(r===-1||r===!1)&&cs(n[0])?(n[0]=W(n[0]),s[t](...n)):r}function Pt(e,t,n=[]){tt(),ts();const s=W(e)[t].apply(e,n);return ns(),nt(),s}const Zi=Qn("__proto__,__v_isRef,__isVue"),Sr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(wt));function eo(e){wt(e)||(e=String(e));const t=W(this);return re(t,"has",e),t.hasOwnProperty(e)}class Rr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?uo:Ar:i?Or:Cr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=D(t);if(!r){let l;if(o&&(l=Ji[n]))return l;if(n==="hasOwnProperty")return eo}const c=Reflect.get(t,n,ie(t)?t:s);return(wt(n)?Sr.has(n):Zi(n))||(r||re(t,"get",n),i)?c:ie(c)?o&&Xn(n)?c:c.value:ee(c)?r?Ir(c):mn(c):c}}class Pr extends Rr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const l=ft(i);if(!Ee(s)&&!ft(s)&&(i=W(i),s=W(s)),!D(t)&&ie(i)&&!ie(s))return l?!1:(i.value=s,!0)}const o=D(t)&&Xn(n)?Number(n)e,Jt=e=>Reflect.getPrototypeOf(e);function io(e,t,n){return function(...s){const r=this.__v_raw,i=W(r),o=Tt(i),c=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,d=r[e](...s),a=n?Dn:t?jn:ce;return!t&&re(i,"iterate",l?$n:lt),{next(){const{value:h,done:g}=d.next();return g?{value:h,done:g}:{value:c?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xt(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function oo(e,t){const n={get(r){const i=this.__v_raw,o=W(i),c=W(r);e||(Ze(r,c)&&re(o,"get",r),re(o,"get",c));const{has:l}=Jt(o),d=t?Dn:e?jn:ce;if(l.call(o,r))return d(i.get(r));if(l.call(o,c))return d(i.get(c));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&re(W(r),"iterate",lt),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=W(i),c=W(r);return e||(Ze(r,c)&&re(o,"has",r),re(o,"has",c)),r===c?i.has(r):i.has(r)||i.has(c)},forEach(r,i){const o=this,c=o.__v_raw,l=W(c),d=t?Dn:e?jn:ce;return!e&&re(l,"iterate",lt),c.forEach((a,h)=>r.call(i,d(a),d(h),o))}};return oe(n,e?{add:Xt("add"),set:Xt("set"),delete:Xt("delete"),clear:Xt("clear")}:{add(r){!t&&!Ee(r)&&!ft(r)&&(r=W(r));const i=W(this);return Jt(i).has.call(i,r)||(i.add(r),Ve(i,"add",r,r)),this},set(r,i){!t&&!Ee(i)&&!ft(i)&&(i=W(i));const o=W(this),{has:c,get:l}=Jt(o);let d=c.call(o,r);d||(r=W(r),d=c.call(o,r));const a=l.call(o,r);return o.set(r,i),d?Ze(i,a)&&Ve(o,"set",r,i):Ve(o,"add",r,i),this},delete(r){const i=W(this),{has:o,get:c}=Jt(i);let l=o.call(i,r);l||(r=W(r),l=o.call(i,r)),c&&c.call(i,r);const d=i.delete(r);return l&&Ve(i,"delete",r,void 0),d},clear(){const r=W(this),i=r.size!==0,o=r.clear();return i&&Ve(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=io(r,e,t)}),n}function os(e,t){const n=oo(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(k(n,r)&&r in s?n:s,r,i)}const lo={get:os(!1,!1)},co={get:os(!1,!0)},fo={get:os(!0,!1)};const Cr=new WeakMap,Or=new WeakMap,Ar=new WeakMap,uo=new WeakMap;function ao(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ho(e){return e.__v_skip||!Object.isExtensible(e)?0:ao(Li(e))}function mn(e){return ft(e)?e:ls(e,!1,no,lo,Cr)}function Tr(e){return ls(e,!1,ro,co,Or)}function Ir(e){return ls(e,!0,so,fo,Ar)}function ls(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=ho(e);if(o===0)return e;const c=new Proxy(e,o===2?s:n);return r.set(e,c),c}function Nt(e){return ft(e)?Nt(e.__v_raw):!!(e&&e.__v_isReactive)}function ft(e){return!!(e&&e.__v_isReadonly)}function Ee(e){return!!(e&&e.__v_isShallow)}function cs(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function Mr(e){return!k(e,"__v_skip")&&Object.isExtensible(e)&&dr(e,"__v_skip",!0),e}const ce=e=>ee(e)?mn(e):e,jn=e=>ee(e)?Ir(e):e;function ie(e){return e?e.__v_isRef===!0:!1}function Fr(e){return Nr(e,!1)}function po(e){return Nr(e,!0)}function Nr(e,t){return ie(e)?e:new go(e,t)}class go{constructor(t,n){this.dep=new rs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:W(t),this._value=n?t:ce(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Ee(t)||ft(t);t=s?t:W(t),Ze(t,n)&&(this._rawValue=t,this._value=s?t:ce(t),this.dep.trigger())}}function ct(e){return ie(e)?e.value:e}const mo={get:(e,t,n)=>t==="__v_raw"?e:ct(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ie(r)&&!ie(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Hr(e){return Nt(e)?e:new Proxy(e,mo)}class _o{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new rs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Bt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&J!==this)return vr(this,!0),!0}get value(){const t=this.dep.track();return xr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function vo(e,t,n=!1){let s,r;return B(e)?s=e:(s=e.get,r=e.set),new _o(s,r,n)}const Zt={},rn=new WeakMap;let ot;function yo(e,t=!1,n=ot){if(n){let s=rn.get(n);s||rn.set(n,s=[]),s.push(e)}}function bo(e,t,n=X){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:c,call:l}=n,d=T=>r?T:Ee(T)||r===!1||r===0?Xe(T,1):Xe(T);let a,h,g,m,O=!1,A=!1;if(ie(e)?(h=()=>e.value,O=Ee(e)):Nt(e)?(h=()=>d(e),O=!0):D(e)?(A=!0,O=e.some(T=>Nt(T)||Ee(T)),h=()=>e.map(T=>{if(ie(T))return T.value;if(Nt(T))return d(T);if(B(T))return l?l(T,2):T()})):B(e)?t?h=l?()=>l(e,2):e:h=()=>{if(g){tt();try{g()}finally{nt()}}const T=ot;ot=a;try{return l?l(e,3,[m]):e(m)}finally{ot=T}}:h=He,t&&r){const T=h,z=r===!0?1/0:r;h=()=>Xe(T(),z)}const j=zi(),N=()=>{a.stop(),j&&j.active&&Jn(j.effects,a)};if(i&&t){const T=t;t=(...z)=>{T(...z),N()}}let M=A?new Array(e.length).fill(Zt):Zt;const H=T=>{if(!(!(a.flags&1)||!a.dirty&&!T))if(t){const z=a.run();if(r||O||(A?z.some((se,Z)=>Ze(se,M[Z])):Ze(z,M))){g&&g();const se=ot;ot=a;try{const Z=[z,M===Zt?void 0:A&&M[0]===Zt?[]:M,m];l?l(t,3,Z):t(...Z),M=z}finally{ot=se}}}else a.run()};return c&&c(H),a=new mr(h),a.scheduler=o?()=>o(H,!1):H,m=T=>yo(T,!1,a),g=a.onStop=()=>{const T=rn.get(a);if(T){if(l)l(T,4);else for(const z of T)z();rn.delete(a)}},t?s?H(!0):M=a.run():o?o(H.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function Xe(e,t=1/0,n){if(t<=0||!ee(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ie(e))Xe(e.value,t,n);else if(D(e))for(let s=0;s{Xe(s,t,n)});else if($i(e)){for(const s in e)Xe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Xe(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function zt(e,t,n,s){try{return s?e(...s):e()}catch(r){_n(r,t,n)}}function Le(e,t,n,s){if(B(e)){const r=zt(e,t,n,s);return r&&ar(r)&&r.catch(i=>{_n(i,t,n)}),r}if(D(e)){const r=[];for(let i=0;i>>1,r=fe[s],i=Vt(r);i=Vt(n)?fe.push(e):fe.splice(Eo(t),0,e),e.flags|=1,Dr()}}function Dr(){on||(on=Lr.then(Br))}function wo(e){D(e)?vt.push(...e):Qe&&e.id===-1?Qe.splice(gt+1,0,e):e.flags&1||(vt.push(e),e.flags|=1),Dr()}function ws(e,t,n=Me+1){for(;nVt(n)-Vt(s));if(vt.length=0,Qe){Qe.push(...t);return}for(Qe=t,gt=0;gte.id==null?e.flags&2?-1:1/0:e.id;function Br(e){try{for(Me=0;Me{s._d&&Ms(-1);const i=ln(t);let o;try{o=e(...r)}finally{ln(i),s._d&&Ms(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function rt(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;oe.__isTeleport;function us(e,t){e.shapeFlag&6&&e.component?(e.transition=t,us(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}/*! #__NO_SIDE_EFFECTS__ */function Vr(e,t){return B(e)?oe({name:e.name},t,{setup:e}):e}function Kr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function cn(e,t,n,s,r=!1){if(D(e)){e.forEach((O,A)=>cn(O,t&&(D(t)?t[A]:t),n,s,r));return}if(Ht(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&cn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ps(s.component):s.el,o=r?null:i,{i:c,r:l}=e,d=t&&t.r,a=c.refs===X?c.refs={}:c.refs,h=c.setupState,g=W(h),m=h===X?()=>!1:O=>k(g,O);if(d!=null&&d!==l&&(ne(d)?(a[d]=null,m(d)&&(h[d]=null)):ie(d)&&(d.value=null)),B(l))zt(l,c,12,[o,a]);else{const O=ne(l),A=ie(l);if(O||A){const j=()=>{if(e.f){const N=O?m(l)?h[l]:a[l]:l.value;r?D(N)&&Jn(N,i):D(N)?N.includes(i)||N.push(i):O?(a[l]=[i],m(l)&&(h[l]=a[l])):(l.value=[i],e.k&&(a[e.k]=l.value))}else O?(a[l]=o,m(l)&&(h[l]=o)):A&&(l.value=o,e.k&&(a[e.k]=o))};o?(j.id=-1,ge(j,n)):j()}}}gn().requestIdleCallback;gn().cancelIdleCallback;const Ht=e=>!!e.type.__asyncLoader,Wr=e=>e.type.__isKeepAlive;function Co(e,t){kr(e,"a",t)}function Oo(e,t){kr(e,"da",t)}function kr(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(vn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Wr(r.parent.vnode)&&Ao(s,t,n,r),r=r.parent}}function Ao(e,t,n,s){const r=vn(t,e,s,!0);qr(()=>{Jn(s[t],r)},n)}function vn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{tt();const c=Qt(n),l=Le(t,n,e,o);return c(),nt(),l});return s?r.unshift(i):r.push(i),i}}const We=e=>(t,n=ue)=>{(!kt||e==="sp")&&vn(e,(...s)=>t(...s),n)},To=We("bm"),Io=We("m"),Mo=We("bu"),Fo=We("u"),No=We("bum"),qr=We("um"),Ho=We("sp"),Lo=We("rtg"),$o=We("rtc");function Do(e,t=ue){vn("ec",e,t)}const jo=Symbol.for("v-ndc"),Bn=e=>e?pi(e)?ps(e):Bn(e.parent):null,Lt=oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Bn(e.parent),$root:e=>Bn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>zr(e),$forceUpdate:e=>e.f||(e.f=()=>{fs(e.update)}),$nextTick:e=>e.n||(e.n=$r.bind(e.proxy)),$watch:e=>ol.bind(e)}),Cn=(e,t)=>e!==X&&!e.__isScriptSetup&&k(e,t),Bo={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:c,appContext:l}=e;let d;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Cn(s,t))return o[t]=1,s[t];if(r!==X&&k(r,t))return o[t]=2,r[t];if((d=e.propsOptions[0])&&k(d,t))return o[t]=3,i[t];if(n!==X&&k(n,t))return o[t]=4,n[t];Un&&(o[t]=0)}}const a=Lt[t];let h,g;if(a)return t==="$attrs"&&re(e.attrs,"get",""),a(e);if((h=c.__cssModules)&&(h=h[t]))return h;if(n!==X&&k(n,t))return o[t]=4,n[t];if(g=l.config.globalProperties,k(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Cn(r,t)?(r[t]=n,!0):s!==X&&k(s,t)?(s[t]=n,!0):k(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let c;return!!n[o]||e!==X&&k(e,o)||Cn(t,o)||(c=i[0])&&k(c,o)||k(s,o)||k(Lt,o)||k(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:k(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ss(e){return D(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Un=!0;function Uo(e){const t=zr(e),n=e.proxy,s=e.ctx;Un=!1,t.beforeCreate&&Rs(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:c,provide:l,inject:d,created:a,beforeMount:h,mounted:g,beforeUpdate:m,updated:O,activated:A,deactivated:j,beforeDestroy:N,beforeUnmount:M,destroyed:H,unmounted:T,render:z,renderTracked:se,renderTriggered:Z,errorCaptured:Se,serverPrefetch:ke,expose:Re,inheritAttrs:qe,components:st,directives:Pe,filters:St}=t;if(d&&Vo(d,s,null),o)for(const G in o){const V=o[G];B(V)&&(s[G]=V.bind(n))}if(r){const G=r.call(n,n);ee(G)&&(e.data=mn(G))}if(Un=!0,i)for(const G in i){const V=i[G],$e=B(V)?V.bind(n,n):B(V.get)?V.get.bind(n,n):He,Ge=!B(V)&&B(V.set)?V.set.bind(n):He,Ce=be({get:$e,set:Ge});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>Ce.value,set:ae=>Ce.value=ae})}if(c)for(const G in c)Gr(c[G],s,n,G);if(l){const G=B(l)?l.call(n):l;Reflect.ownKeys(G).forEach(V=>{en(V,G[V])})}a&&Rs(a,e,"c");function te(G,V){D(V)?V.forEach($e=>G($e.bind(n))):V&&G(V.bind(n))}if(te(To,h),te(Io,g),te(Mo,m),te(Fo,O),te(Co,A),te(Oo,j),te(Do,Se),te($o,se),te(Lo,Z),te(No,M),te(qr,T),te(Ho,ke),D(Re))if(Re.length){const G=e.exposed||(e.exposed={});Re.forEach(V=>{Object.defineProperty(G,V,{get:()=>n[V],set:$e=>n[V]=$e})})}else e.exposed||(e.exposed={});z&&e.render===He&&(e.render=z),qe!=null&&(e.inheritAttrs=qe),st&&(e.components=st),Pe&&(e.directives=Pe),ke&&Kr(e)}function Vo(e,t,n=He){D(e)&&(e=Vn(e));for(const s in e){const r=e[s];let i;ee(r)?"default"in r?i=Ke(r.from||s,r.default,!0):i=Ke(r.from||s):i=Ke(r),ie(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Rs(e,t,n){Le(D(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Gr(e,t,n,s){let r=s.includes(".")?ci(n,s):()=>n[s];if(ne(e)){const i=t[e];B(i)&&tn(r,i)}else if(B(e))tn(r,e.bind(n));else if(ee(e))if(D(e))e.forEach(i=>Gr(i,t,n,s));else{const i=B(e.handler)?e.handler.bind(n):t[e.handler];B(i)&&tn(r,i,e)}}function zr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,c=i.get(t);let l;return c?l=c:!r.length&&!n&&!s?l=t:(l={},r.length&&r.forEach(d=>fn(l,d,o,!0)),fn(l,t,o)),ee(t)&&i.set(t,l),l}function fn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&fn(e,i,n,!0),r&&r.forEach(o=>fn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const c=Ko[o]||n&&n[o];e[o]=c?c(e[o],t[o]):t[o]}return e}const Ko={data:Ps,props:Cs,emits:Cs,methods:At,computed:At,beforeCreate:le,created:le,beforeMount:le,mounted:le,beforeUpdate:le,updated:le,beforeDestroy:le,beforeUnmount:le,destroyed:le,unmounted:le,activated:le,deactivated:le,errorCaptured:le,serverPrefetch:le,components:At,directives:At,watch:ko,provide:Ps,inject:Wo};function Ps(e,t){return t?e?function(){return oe(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function Wo(e,t){return At(Vn(e),Vn(t))}function Vn(e){if(D(e)){const t={};for(let n=0;n1)return n&&B(t)?t.call(s&&s.proxy):t}}const Yr={},Jr=()=>Object.create(Yr),Xr=e=>Object.getPrototypeOf(e)===Yr;function zo(e,t,n,s=!1){const r={},i=Jr();e.propsDefaults=Object.create(null),Zr(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Tr(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Qo(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,c=W(r),[l]=e.propsOptions;let d=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{l=!0;const[g,m]=ei(h,t,!0);oe(o,g),m&&c.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!l)return ee(e)&&s.set(e,_t),_t;if(D(i))for(let a=0;ae[0]==="_"||e==="$stable",as=e=>D(e)?e.map(Fe):[Fe(e)],Jo=(e,t,n)=>{if(t._n)return t;const s=So((...r)=>as(t(...r)),n);return s._c=!1,s},ni=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ti(r))continue;const i=e[r];if(B(i))t[r]=Jo(r,i,s);else if(i!=null){const o=as(i);t[r]=()=>o}}},si=(e,t)=>{const n=as(t);e.slots.default=()=>n},ri=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Xo=(e,t,n)=>{const s=e.slots=Jr();if(e.vnode.shapeFlag&32){const r=t._;r?(ri(s,t,n),n&&dr(s,"_",r,!0)):ni(t,s)}else t&&si(e,t)},Zo=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const c=t._;c?n&&c===1?i=!1:ri(r,t,n):(i=!t.$stable,ni(t,r)),o=t}else t&&(si(e,t),o={default:1});if(i)for(const c in r)!ti(c)&&o[c]==null&&delete r[c]},ge=dl;function el(e){return tl(e)}function tl(e,t){const n=gn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:c,createComment:l,setText:d,setElementText:a,parentNode:h,nextSibling:g,setScopeId:m=He,insertStaticContent:O}=e,A=(f,u,p,_=null,b=null,y=null,S=void 0,w=null,E=!!u.dynamicChildren)=>{if(f===u)return;f&&!Ct(f,u)&&(_=v(f),ae(f,b,y,!0),f=null),u.patchFlag===-2&&(E=!1,u.dynamicChildren=null);const{type:x,ref:L,shapeFlag:P}=u;switch(x){case bn:j(f,u,p,_);break;case Kt:N(f,u,p,_);break;case An:f==null&&M(u,p,_,S);break;case Ue:st(f,u,p,_,b,y,S,w,E);break;default:P&1?z(f,u,p,_,b,y,S,w,E):P&6?Pe(f,u,p,_,b,y,S,w,E):(P&64||P&128)&&x.process(f,u,p,_,b,y,S,w,E,I)}L!=null&&b&&cn(L,f&&f.ref,y,u||f,!u)},j=(f,u,p,_)=>{if(f==null)s(u.el=c(u.children),p,_);else{const b=u.el=f.el;u.children!==f.children&&d(b,u.children)}},N=(f,u,p,_)=>{f==null?s(u.el=l(u.children||""),p,_):u.el=f.el},M=(f,u,p,_)=>{[f.el,f.anchor]=O(f.children,u,p,_,f.el,f.anchor)},H=({el:f,anchor:u},p,_)=>{let b;for(;f&&f!==u;)b=g(f),s(f,p,_),f=b;s(u,p,_)},T=({el:f,anchor:u})=>{let p;for(;f&&f!==u;)p=g(f),r(f),f=p;r(u)},z=(f,u,p,_,b,y,S,w,E)=>{u.type==="svg"?S="svg":u.type==="math"&&(S="mathml"),f==null?se(u,p,_,b,y,S,w,E):ke(f,u,b,y,S,w,E)},se=(f,u,p,_,b,y,S,w)=>{let E,x;const{props:L,shapeFlag:P,transition:F,dirs:$}=f;if(E=f.el=o(f.type,y,L&&L.is,L),P&8?a(E,f.children):P&16&&Se(f.children,E,null,_,b,On(f,y),S,w),$&&rt(f,null,_,"created"),Z(E,f,f.scopeId,S,_),L){for(const Y in L)Y!=="value"&&!It(Y)&&i(E,Y,null,L[Y],y,_);"value"in L&&i(E,"value",null,L.value,y),(x=L.onVnodeBeforeMount)&&Ie(x,_,f)}$&&rt(f,null,_,"beforeMount");const U=nl(b,F);U&&F.beforeEnter(E),s(E,u,p),((x=L&&L.onVnodeMounted)||U||$)&&ge(()=>{x&&Ie(x,_,f),U&&F.enter(E),$&&rt(f,null,_,"mounted")},b)},Z=(f,u,p,_,b)=>{if(p&&m(f,p),_)for(let y=0;y<_.length;y++)m(f,_[y]);if(b){let y=b.subTree;if(u===y||ui(y.type)&&(y.ssContent===u||y.ssFallback===u)){const S=b.vnode;Z(f,S,S.scopeId,S.slotScopeIds,b.parent)}}},Se=(f,u,p,_,b,y,S,w,E=0)=>{for(let x=E;x{const w=u.el=f.el;let{patchFlag:E,dynamicChildren:x,dirs:L}=u;E|=f.patchFlag&16;const P=f.props||X,F=u.props||X;let $;if(p&&it(p,!1),($=F.onVnodeBeforeUpdate)&&Ie($,p,u,f),L&&rt(u,f,p,"beforeUpdate"),p&&it(p,!0),(P.innerHTML&&F.innerHTML==null||P.textContent&&F.textContent==null)&&a(w,""),x?Re(f.dynamicChildren,x,w,p,_,On(u,b),y):S||V(f,u,w,null,p,_,On(u,b),y,!1),E>0){if(E&16)qe(w,P,F,p,b);else if(E&2&&P.class!==F.class&&i(w,"class",null,F.class,b),E&4&&i(w,"style",P.style,F.style,b),E&8){const U=u.dynamicProps;for(let Y=0;Y{$&&Ie($,p,u,f),L&&rt(u,f,p,"updated")},_)},Re=(f,u,p,_,b,y,S)=>{for(let w=0;w{if(u!==p){if(u!==X)for(const y in u)!It(y)&&!(y in p)&&i(f,y,u[y],null,b,_);for(const y in p){if(It(y))continue;const S=p[y],w=u[y];S!==w&&y!=="value"&&i(f,y,w,S,b,_)}"value"in p&&i(f,"value",u.value,p.value,b)}},st=(f,u,p,_,b,y,S,w,E)=>{const x=u.el=f?f.el:c(""),L=u.anchor=f?f.anchor:c("");let{patchFlag:P,dynamicChildren:F,slotScopeIds:$}=u;$&&(w=w?w.concat($):$),f==null?(s(x,p,_),s(L,p,_),Se(u.children||[],p,L,b,y,S,w,E)):P>0&&P&64&&F&&f.dynamicChildren?(Re(f.dynamicChildren,F,p,b,y,S,w),(u.key!=null||b&&u===b.subTree)&&ii(f,u,!0)):V(f,u,p,L,b,y,S,w,E)},Pe=(f,u,p,_,b,y,S,w,E)=>{u.slotScopeIds=w,f==null?u.shapeFlag&512?b.ctx.activate(u,p,_,S,E):St(u,p,_,b,y,S,E):at(f,u,E)},St=(f,u,p,_,b,y,S)=>{const w=f.component=El(f,_,b);if(Wr(f)&&(w.ctx.renderer=I),wl(w,!1,S),w.asyncDep){if(b&&b.registerDep(w,te,S),!f.el){const E=w.subTree=ye(Kt);N(null,E,u,p)}}else te(w,f,u,p,b,y,S)},at=(f,u,p)=>{const _=u.component=f.component;if(al(f,u,p))if(_.asyncDep&&!_.asyncResolved){G(_,u,p);return}else _.next=u,_.update();else u.el=f.el,_.vnode=u},te=(f,u,p,_,b,y,S)=>{const w=()=>{if(f.isMounted){let{next:P,bu:F,u:$,parent:U,vnode:Y}=f;{const Ae=oi(f);if(Ae){P&&(P.el=Y.el,G(f,P,S)),Ae.asyncDep.then(()=>{f.isUnmounted||w()});return}}let q=P,de;it(f,!1),P?(P.el=Y.el,G(f,P,S)):P=Y,F&&wn(F),(de=P.props&&P.props.onVnodeBeforeUpdate)&&Ie(de,U,P,Y),it(f,!0);const he=Ts(f),Oe=f.subTree;f.subTree=he,A(Oe,he,h(Oe.el),v(Oe),f,b,y),P.el=he.el,q===null&&hl(f,he.el),$&&ge($,b),(de=P.props&&P.props.onVnodeUpdated)&&ge(()=>Ie(de,U,P,Y),b)}else{let P;const{el:F,props:$}=u,{bm:U,m:Y,parent:q,root:de,type:he}=f,Oe=Ht(u);it(f,!1),U&&wn(U),!Oe&&(P=$&&$.onVnodeBeforeMount)&&Ie(P,q,u),it(f,!0);{de.ce&&de.ce._injectChildStyle(he);const Ae=f.subTree=Ts(f);A(null,Ae,p,_,f,b,y),u.el=Ae.el}if(Y&&ge(Y,b),!Oe&&(P=$&&$.onVnodeMounted)){const Ae=u;ge(()=>Ie(P,q,Ae),b)}(u.shapeFlag&256||q&&Ht(q.vnode)&&q.vnode.shapeFlag&256)&&f.a&&ge(f.a,b),f.isMounted=!0,u=p=_=null}};f.scope.on();const E=f.effect=new mr(w);f.scope.off();const x=f.update=E.run.bind(E),L=f.job=E.runIfDirty.bind(E);L.i=f,L.id=f.uid,E.scheduler=()=>fs(L),it(f,!0),x()},G=(f,u,p)=>{u.component=f;const _=f.vnode.props;f.vnode=u,f.next=null,Qo(f,u.props,_,p),Zo(f,u.children,p),tt(),ws(f),nt()},V=(f,u,p,_,b,y,S,w,E=!1)=>{const x=f&&f.children,L=f?f.shapeFlag:0,P=u.children,{patchFlag:F,shapeFlag:$}=u;if(F>0){if(F&128){Ge(x,P,p,_,b,y,S,w,E);return}else if(F&256){$e(x,P,p,_,b,y,S,w,E);return}}$&8?(L&16&&ve(x,b,y),P!==x&&a(p,P)):L&16?$&16?Ge(x,P,p,_,b,y,S,w,E):ve(x,b,y,!0):(L&8&&a(p,""),$&16&&Se(P,p,_,b,y,S,w,E))},$e=(f,u,p,_,b,y,S,w,E)=>{f=f||_t,u=u||_t;const x=f.length,L=u.length,P=Math.min(x,L);let F;for(F=0;FL?ve(f,b,y,!0,!1,P):Se(u,p,_,b,y,S,w,E,P)},Ge=(f,u,p,_,b,y,S,w,E)=>{let x=0;const L=u.length;let P=f.length-1,F=L-1;for(;x<=P&&x<=F;){const $=f[x],U=u[x]=E?Ye(u[x]):Fe(u[x]);if(Ct($,U))A($,U,p,null,b,y,S,w,E);else break;x++}for(;x<=P&&x<=F;){const $=f[P],U=u[F]=E?Ye(u[F]):Fe(u[F]);if(Ct($,U))A($,U,p,null,b,y,S,w,E);else break;P--,F--}if(x>P){if(x<=F){const $=F+1,U=$F)for(;x<=P;)ae(f[x],b,y,!0),x++;else{const $=x,U=x,Y=new Map;for(x=U;x<=F;x++){const pe=u[x]=E?Ye(u[x]):Fe(u[x]);pe.key!=null&&Y.set(pe.key,x)}let q,de=0;const he=F-U+1;let Oe=!1,Ae=0;const Rt=new Array(he);for(x=0;x=he){ae(pe,b,y,!0);continue}let Te;if(pe.key!=null)Te=Y.get(pe.key);else for(q=U;q<=F;q++)if(Rt[q-U]===0&&Ct(pe,u[q])){Te=q;break}Te===void 0?ae(pe,b,y,!0):(Rt[Te-U]=x+1,Te>=Ae?Ae=Te:Oe=!0,A(pe,u[Te],p,null,b,y,S,w,E),de++)}const vs=Oe?sl(Rt):_t;for(q=vs.length-1,x=he-1;x>=0;x--){const pe=U+x,Te=u[pe],ys=pe+1{const{el:y,type:S,transition:w,children:E,shapeFlag:x}=f;if(x&6){Ce(f.component.subTree,u,p,_);return}if(x&128){f.suspense.move(u,p,_);return}if(x&64){S.move(f,u,p,I);return}if(S===Ue){s(y,u,p);for(let P=0;Pw.enter(y),b);else{const{leave:P,delayLeave:F,afterLeave:$}=w,U=()=>s(y,u,p),Y=()=>{P(y,()=>{U(),$&&$()})};F?F(y,U,Y):Y()}else s(y,u,p)},ae=(f,u,p,_=!1,b=!1)=>{const{type:y,props:S,ref:w,children:E,dynamicChildren:x,shapeFlag:L,patchFlag:P,dirs:F,cacheIndex:$}=f;if(P===-2&&(b=!1),w!=null&&cn(w,null,p,f,!0),$!=null&&(u.renderCache[$]=void 0),L&256){u.ctx.deactivate(f);return}const U=L&1&&F,Y=!Ht(f);let q;if(Y&&(q=S&&S.onVnodeBeforeUnmount)&&Ie(q,u,f),L&6)Yt(f.component,p,_);else{if(L&128){f.suspense.unmount(p,_);return}U&&rt(f,null,u,"beforeUnmount"),L&64?f.type.remove(f,u,p,I,_):x&&!x.hasOnce&&(y!==Ue||P>0&&P&64)?ve(x,u,p,!1,!0):(y===Ue&&P&384||!b&&L&16)&&ve(E,u,p),_&&ht(f)}(Y&&(q=S&&S.onVnodeUnmounted)||U)&&ge(()=>{q&&Ie(q,u,f),U&&rt(f,null,u,"unmounted")},p)},ht=f=>{const{type:u,el:p,anchor:_,transition:b}=f;if(u===Ue){dt(p,_);return}if(u===An){T(f);return}const y=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(f.shapeFlag&1&&b&&!b.persisted){const{leave:S,delayLeave:w}=b,E=()=>S(p,y);w?w(f.el,y,E):E()}else y()},dt=(f,u)=>{let p;for(;f!==u;)p=g(f),r(f),f=p;r(u)},Yt=(f,u,p)=>{const{bum:_,scope:b,job:y,subTree:S,um:w,m:E,a:x}=f;As(E),As(x),_&&wn(_),b.stop(),y&&(y.flags|=8,ae(S,f,u,p)),w&&ge(w,u),ge(()=>{f.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},ve=(f,u,p,_=!1,b=!1,y=0)=>{for(let S=y;S{if(f.shapeFlag&6)return v(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const u=g(f.anchor||f.el),p=u&&u[Ro];return p?g(p):u};let C=!1;const R=(f,u,p)=>{f==null?u._vnode&&ae(u._vnode,null,null,!0):A(u._vnode||null,f,u,null,null,null,p),u._vnode=f,C||(C=!0,ws(),jr(),C=!1)},I={p:A,um:ae,m:Ce,r:ht,mt:St,mc:Se,pc:V,pbc:Re,n:v,o:e};return{render:R,hydrate:void 0,createApp:Go(R)}}function On({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function it({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function nl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ii(e,t,n=!1){const s=e.children,r=t.children;if(D(s)&&D(r))for(let i=0;i>1,e[n[c]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function oi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:oi(t)}function As(e){if(e)for(let t=0;tKe(rl);function tn(e,t,n){return li(e,t,n)}function li(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,c=oe({},n),l=t&&s||!t&&i!=="post";let d;if(kt){if(i==="sync"){const m=il();d=m.__watcherHandles||(m.__watcherHandles=[])}else if(!l){const m=()=>{};return m.stop=He,m.resume=He,m.pause=He,m}}const a=ue;c.call=(m,O,A)=>Le(m,a,O,A);let h=!1;i==="post"?c.scheduler=m=>{ge(m,a&&a.suspense)}:i!=="sync"&&(h=!0,c.scheduler=(m,O)=>{O?m():fs(m)}),c.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,a&&(m.id=a.uid,m.i=a))};const g=bo(e,t,c);return kt&&(d?d.push(g):l&&g()),g}function ol(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?ci(s,e):()=>s[e]:e.bind(s,s);let i;B(t)?i=t:(i=t.handler,n=t);const o=Qt(this),c=li(r,i.bind(s),n);return o(),c}function ci(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${et(t)}Modifiers`]||e[`${ut(t)}Modifiers`];function cl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&ll(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>ne(a)?a.trim():a)),o.number&&(r=n.map(Bi)));let c,l=s[c=En(t)]||s[c=En(et(t))];!l&&i&&(l=s[c=En(ut(t))]),l&&Le(l,e,6,r);const d=s[c+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,Le(d,e,6,r)}}function fi(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},c=!1;if(!B(e)){const l=d=>{const a=fi(d,t,!0);a&&(c=!0,oe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!i&&!c?(ee(e)&&s.set(e,null),null):(D(i)?i.forEach(l=>o[l]=null):oe(o,i),ee(e)&&s.set(e,o),o)}function yn(e,t){return!e||!hn(t)?!1:(t=t.slice(2).replace(/Once$/,""),k(e,t[0].toLowerCase()+t.slice(1))||k(e,ut(t))||k(e,t))}function Ts(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:c,emit:l,render:d,renderCache:a,props:h,data:g,setupState:m,ctx:O,inheritAttrs:A}=e,j=ln(e);let N,M;try{if(n.shapeFlag&4){const T=r||s,z=T;N=Fe(d.call(z,T,a,h,m,g,O)),M=c}else{const T=t;N=Fe(T.length>1?T(h,{attrs:c,slots:o,emit:l}):T(h,null)),M=t.props?c:fl(c)}}catch(T){$t.length=0,_n(T,e,1),N=ye(Kt)}let H=N;if(M&&A!==!1){const T=Object.keys(M),{shapeFlag:z}=H;T.length&&z&7&&(i&&T.some(Yn)&&(M=ul(M,i)),H=bt(H,M,!1,!0))}return n.dirs&&(H=bt(H,null,!1,!0),H.dirs=H.dirs?H.dirs.concat(n.dirs):n.dirs),n.transition&&us(H,n.transition),N=H,ln(j),N}const fl=e=>{let t;for(const n in e)(n==="class"||n==="style"||hn(n))&&((t||(t={}))[n]=e[n]);return t},ul=(e,t)=>{const n={};for(const s in e)(!Yn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function al(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:c,patchFlag:l}=t,d=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return s?Is(s,o,d):!!o;if(l&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function dl(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):wo(e)}const Ue=Symbol.for("v-fgt"),bn=Symbol.for("v-txt"),Kt=Symbol.for("v-cmt"),An=Symbol.for("v-stc"),$t=[];let _e=null;function ai(e=!1){$t.push(_e=e?null:[])}function pl(){$t.pop(),_e=$t[$t.length-1]||null}let Wt=1;function Ms(e,t=!1){Wt+=e,e<0&&_e&&t&&(_e.hasOnce=!0)}function gl(e){return e.dynamicChildren=Wt>0?_e||_t:null,pl(),Wt>0&&_e&&_e.push(e),e}function hi(e,t,n,s,r,i){return gl(hs(e,t,n,s,r,i,!0))}function un(e){return e?e.__v_isVNode===!0:!1}function Ct(e,t){return e.type===t.type&&e.key===t.key}const di=({key:e})=>e??null,nn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||ie(e)||B(e)?{i:Ne,r:e,k:t,f:!!n}:e:null);function hs(e,t=null,n=null,s=0,r=null,i=e===Ue?0:1,o=!1,c=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&di(t),ref:t&&nn(t),scopeId:Ur,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ne};return c?(ds(l,n),i&128&&e.normalize(l)):n&&(l.shapeFlag|=ne(n)?8:16),Wt>0&&!o&&_e&&(l.patchFlag>0||i&6)&&l.patchFlag!==32&&_e.push(l),l}const ye=ml;function ml(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===jo)&&(e=Kt),un(e)){const c=bt(e,t,!0);return n&&ds(c,n),Wt>0&&!i&&_e&&(c.shapeFlag&6?_e[_e.indexOf(e)]=c:_e.push(c)),c.patchFlag=-2,c}if(Cl(e)&&(e=e.__vccOpts),t){t=_l(t);let{class:c,style:l}=t;c&&!ne(c)&&(t.class=es(c)),ee(l)&&(cs(l)&&!D(l)&&(l=oe({},l)),t.style=Zn(l))}const o=ne(e)?1:ui(e)?128:Po(e)?64:ee(e)?4:B(e)?2:0;return hs(e,t,n,s,r,o,i,!0)}function _l(e){return e?cs(e)||Xr(e)?oe({},e):e:null}function bt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:c,transition:l}=e,d=t?yl(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:d,key:d&&di(d),ref:t&&t.ref?n&&i?D(i)?i.concat(nn(t)):[i,nn(t)]:nn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:c,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ue?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&bt(e.ssContent),ssFallback:e.ssFallback&&bt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&s&&us(a,l.clone(a)),a}function vl(e=" ",t=0){return ye(bn,null,e,t)}function Fe(e){return e==null||typeof e=="boolean"?ye(Kt):D(e)?ye(Ue,null,e.slice()):un(e)?Ye(e):ye(bn,null,String(e))}function Ye(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:bt(e)}function ds(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(D(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ds(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Xr(t)?t._ctx=Ne:r===3&&Ne&&(Ne.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else B(t)?(t={default:t,_ctx:Ne},n=32):(t=String(t),s&64?(n=16,t=[vl(t)]):n=8);e.children=t,e.shapeFlag|=n}function yl(...e){const t={};for(let n=0;n{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};an=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Wn=t("__VUE_SSR_SETTERS__",n=>kt=n)}const Qt=e=>{const t=ue;return an(e),e.scope.on(),()=>{e.scope.off(),an(t)}},Fs=()=>{ue&&ue.scope.off(),an(null)};function pi(e){return e.vnode.shapeFlag&4}let kt=!1;function wl(e,t=!1,n=!1){t&&Wn(t);const{props:s,children:r}=e.vnode,i=pi(e);zo(e,s,i,t),Xo(e,r,n);const o=i?Sl(e,t):void 0;return t&&Wn(!1),o}function Sl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bo);const{setup:s}=n;if(s){tt();const r=e.setupContext=s.length>1?Pl(e):null,i=Qt(e),o=zt(s,e,0,[e.props,r]),c=ar(o);if(nt(),i(),(c||e.sp)&&!Ht(e)&&Kr(e),c){if(o.then(Fs,Fs),t)return o.then(l=>{Ns(e,l)}).catch(l=>{_n(l,e,0)});e.asyncDep=o}else Ns(e,o)}else gi(e)}function Ns(e,t,n){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Hr(t)),gi(e)}function gi(e,t,n){const s=e.type;e.render||(e.render=s.render||He);{const r=Qt(e);tt();try{Uo(e)}finally{nt(),r()}}}const Rl={get(e,t){return re(e,"get",""),e[t]}};function Pl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Rl),slots:e.slots,emit:e.emit,expose:t}}function ps(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hr(Mr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Cl(e){return B(e)&&"__vccOpts"in e}const be=(e,t)=>vo(e,t,kt);function mi(e,t,n){const s=arguments.length;return s===2?ee(t)&&!D(t)?un(t)?ye(e,null,[t]):ye(e,t):ye(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&un(n)&&(n=[n]),ye(e,t,n))}const Ol="3.5.13";/** +* @vue/runtime-dom v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let kn;const Hs=typeof window<"u"&&window.trustedTypes;if(Hs)try{kn=Hs.createPolicy("vue",{createHTML:e=>e})}catch{}const _i=kn?e=>kn.createHTML(e):e=>e,Al="http://www.w3.org/2000/svg",Tl="http://www.w3.org/1998/Math/MathML",Be=typeof document<"u"?document:null,Ls=Be&&Be.createElement("template"),Il={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Be.createElementNS(Al,e):t==="mathml"?Be.createElementNS(Tl,e):n?Be.createElement(e,{is:n}):Be.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Be.createTextNode(e),createComment:e=>Be.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Be.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Ls.innerHTML=_i(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const c=Ls.content;if(s==="svg"||s==="mathml"){const l=c.firstChild;for(;l.firstChild;)c.appendChild(l.firstChild);c.removeChild(l)}t.insertBefore(c,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ml=Symbol("_vtc");function Fl(e,t,n){const s=e[Ml];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const $s=Symbol("_vod"),Nl=Symbol("_vsh"),Hl=Symbol(""),Ll=/(^|;)\s*display\s*:/;function $l(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const c=o.slice(0,o.indexOf(":")).trim();n[c]==null&&sn(s,c,"")}else for(const o in t)n[o]==null&&sn(s,o,"");for(const o in n)o==="display"&&(i=!0),sn(s,o,n[o])}else if(r){if(t!==n){const o=s[Hl];o&&(n+=";"+o),s.cssText=n,i=Ll.test(n)}}else t&&e.removeAttribute("style");$s in e&&(e[$s]=i?s.display:"",e[Nl]&&(s.display="none"))}const Ds=/\s*!important$/;function sn(e,t,n){if(D(n))n.forEach(s=>sn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Dl(e,t);Ds.test(n)?e.setProperty(ut(s),n.replace(Ds,""),"important"):e[s]=n}}const js=["Webkit","Moz","ms"],Tn={};function Dl(e,t){const n=Tn[t];if(n)return n;let s=et(t);if(s!=="filter"&&s in e)return Tn[t]=s;s=hr(s);for(let r=0;rIn||(Kl.then(()=>In=0),In=Date.now());function kl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Le(ql(s,n.value),t,5,[s])};return n.value=e,n.attached=Wl(),n}function ql(e,t){if(D(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ks=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Gl=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Fl(e,s,o):t==="style"?$l(e,n,s):hn(t)?Yn(t)||Ul(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):zl(e,t,s,o))?(Vs(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Us(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ne(s))?Vs(e,et(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Us(e,t,s,o))};function zl(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ks(t)&&B(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ks(t)&&ne(n)?!1:t in e}const Ql=oe({patchProp:Gl},Il);let qs;function Yl(){return qs||(qs=el(Ql))}const Jl=(...e)=>{const t=Yl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Zl(s);if(!r)return;const i=t._component;!B(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Xl(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function Xl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Zl(e){return ne(e)?document.querySelector(e):e}/*! + * pinia v3.0.1 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */const ec=Symbol();var Gs;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Gs||(Gs={}));function tc(){const e=Gi(!0),t=e.run(()=>Fr({}));let n=[],s=[];const r=Mr({install(i){r._a=i,i.provide(ec,r),i.config.globalProperties.$pinia=r,s.forEach(o=>n.push(o)),s=[]},use(i){return this._a?n.push(i):s.push(i),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}/*! + * vue-router v4.5.0 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */const mt=typeof document<"u";function vi(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function nc(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&vi(e.default)}const K=Object.assign;function Mn(e,t){const n={};for(const s in t){const r=t[s];n[s]=we(r)?r.map(e):e(r)}return n}const Dt=()=>{},we=Array.isArray,yi=/#/g,sc=/&/g,rc=/\//g,ic=/=/g,oc=/\?/g,bi=/\+/g,lc=/%5B/g,cc=/%5D/g,xi=/%5E/g,fc=/%60/g,Ei=/%7B/g,uc=/%7C/g,wi=/%7D/g,ac=/%20/g;function gs(e){return encodeURI(""+e).replace(uc,"|").replace(lc,"[").replace(cc,"]")}function hc(e){return gs(e).replace(Ei,"{").replace(wi,"}").replace(xi,"^")}function qn(e){return gs(e).replace(bi,"%2B").replace(ac,"+").replace(yi,"%23").replace(sc,"%26").replace(fc,"`").replace(Ei,"{").replace(wi,"}").replace(xi,"^")}function dc(e){return qn(e).replace(ic,"%3D")}function pc(e){return gs(e).replace(yi,"%23").replace(oc,"%3F")}function gc(e){return e==null?"":pc(e).replace(rc,"%2F")}function qt(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const mc=/\/$/,_c=e=>e.replace(mc,"");function Fn(e,t,n="/"){let s,r={},i="",o="";const c=t.indexOf("#");let l=t.indexOf("?");return c=0&&(l=-1),l>-1&&(s=t.slice(0,l),i=t.slice(l+1,c>-1?c:t.length),r=e(i)),c>-1&&(s=s||t.slice(0,c),o=t.slice(c,t.length)),s=xc(s??t,n),{fullPath:s+(i&&"?")+i+o,path:s,query:r,hash:qt(o)}}function vc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function zs(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function yc(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&xt(t.matched[s],n.matched[r])&&Si(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function xt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Si(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!bc(e[n],t[n]))return!1;return!0}function bc(e,t){return we(e)?Qs(e,t):we(t)?Qs(t,e):e===t}function Qs(e,t){return we(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function xc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,c;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const ze={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Gt;(function(e){e.pop="pop",e.push="push"})(Gt||(Gt={}));var jt;(function(e){e.back="back",e.forward="forward",e.unknown=""})(jt||(jt={}));function Ec(e){if(!e)if(mt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),_c(e)}const wc=/^[^#]+#/;function Sc(e,t){return e.replace(wc,"#")+t}function Rc(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const xn=()=>({left:window.scrollX,top:window.scrollY});function Pc(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Rc(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ys(e,t){return(history.state?history.state.position-t:-1)+e}const Gn=new Map;function Cc(e,t){Gn.set(e,t)}function Oc(e){const t=Gn.get(e);return Gn.delete(e),t}let Ac=()=>location.protocol+"//"+location.host;function Ri(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let c=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(c);return l[0]!=="/"&&(l="/"+l),zs(l,"")}return zs(n,e)+s+r}function Tc(e,t,n,s){let r=[],i=[],o=null;const c=({state:g})=>{const m=Ri(e,location),O=n.value,A=t.value;let j=0;if(g){if(n.value=m,t.value=g,o&&o===O){o=null;return}j=A?g.position-A.position:0}else s(m);r.forEach(N=>{N(n.value,O,{delta:j,type:Gt.pop,direction:j?j>0?jt.forward:jt.back:jt.unknown})})};function l(){o=n.value}function d(g){r.push(g);const m=()=>{const O=r.indexOf(g);O>-1&&r.splice(O,1)};return i.push(m),m}function a(){const{history:g}=window;g.state&&g.replaceState(K({},g.state,{scroll:xn()}),"")}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",c),window.removeEventListener("beforeunload",a)}return window.addEventListener("popstate",c),window.addEventListener("beforeunload",a,{passive:!0}),{pauseListeners:l,listen:d,destroy:h}}function Js(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?xn():null}}function Ic(e){const{history:t,location:n}=window,s={value:Ri(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(l,d,a){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+l:Ac()+e+l;try{t[a?"replaceState":"pushState"](d,"",g),r.value=d}catch(m){console.error(m),n[a?"replace":"assign"](g)}}function o(l,d){const a=K({},t.state,Js(r.value.back,l,r.value.forward,!0),d,{position:r.value.position});i(l,a,!0),s.value=l}function c(l,d){const a=K({},r.value,t.state,{forward:l,scroll:xn()});i(a.current,a,!0);const h=K({},Js(s.value,l,null),{position:a.position+1},d);i(l,h,!1),s.value=l}return{location:s,state:r,push:c,replace:o}}function Mc(e){e=Ec(e);const t=Ic(e),n=Tc(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:Sc.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Fc(e){return typeof e=="string"||e&&typeof e=="object"}function Pi(e){return typeof e=="string"||typeof e=="symbol"}const Ci=Symbol("");var Xs;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Xs||(Xs={}));function Et(e,t){return K(new Error,{type:e,[Ci]:!0},t)}function je(e,t){return e instanceof Error&&Ci in e&&(t==null||!!(e.type&t))}const Zs="[^/]+?",Nc={sensitive:!1,strict:!1,start:!0,end:!0},Hc=/[.+*?^${}()[\]/\\]/g;function Lc(e,t){const n=K({},Nc,t),s=[];let r=n.start?"^":"";const i=[];for(const d of e){const a=d.length?[]:[90];n.strict&&!d.length&&(r+="/");for(let h=0;ht.length?t.length===1&&t[0]===80?1:-1:0}function Oi(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Dc={type:0,value:""},jc=/[a-zA-Z0-9_]/;function Bc(e){if(!e)return[[]];if(e==="/")return[[Dc]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${d}": ${m}`)}let n=0,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let c=0,l,d="",a="";function h(){d&&(n===0?i.push({type:0,value:d}):n===1||n===2||n===3?(i.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${d}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:d,regexp:a,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),d="")}function g(){d+=l}for(;c{o(H)}:Dt}function o(h){if(Pi(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function c(){return n}function l(h){const g=kc(h,n);n.splice(g,0,h),h.record.name&&!sr(h)&&s.set(h.record.name,h)}function d(h,g){let m,O={},A,j;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw Et(1,{location:h});j=m.record.name,O=K(tr(g.params,m.keys.filter(H=>!H.optional).concat(m.parent?m.parent.keys.filter(H=>H.optional):[]).map(H=>H.name)),h.params&&tr(h.params,m.keys.map(H=>H.name))),A=m.stringify(O)}else if(h.path!=null)A=h.path,m=n.find(H=>H.re.test(A)),m&&(O=m.parse(A),j=m.record.name);else{if(m=g.name?s.get(g.name):n.find(H=>H.re.test(g.path)),!m)throw Et(1,{location:h,currentLocation:g});j=m.record.name,O=K({},g.params,h.params),A=m.stringify(O)}const N=[];let M=m;for(;M;)N.unshift(M.record),M=M.parent;return{name:j,path:A,params:O,matched:N,meta:Wc(N)}}e.forEach(h=>i(h));function a(){n.length=0,s.clear()}return{addRoute:i,resolve:d,removeRoute:o,clearRoutes:a,getRoutes:c,getRecordMatcher:r}}function tr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function nr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Kc(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Kc(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function sr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wc(e){return e.reduce((t,n)=>K(t,n.meta),{})}function rr(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function kc(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;Oi(e,t[i])<0?s=i:n=i+1}const r=qc(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qc(e){let t=e;for(;t=t.parent;)if(Ai(t)&&Oi(e,t)===0)return t}function Ai({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Gc(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ri&&qn(i)):[s&&qn(s)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function zc(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=we(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Qc=Symbol(""),or=Symbol(""),ms=Symbol(""),Ti=Symbol(""),zn=Symbol("");function Ot(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Je(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((c,l)=>{const d=g=>{g===!1?l(Et(4,{from:n,to:t})):g instanceof Error?l(g):Fc(g)?l(Et(2,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),c())},a=i(()=>e.call(s&&s.instances[r],t,n,d));let h=Promise.resolve(a);e.length<3&&(h=h.then(d)),h.catch(g=>l(g))})}function Nn(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const c in o.components){let l=o.components[c];if(!(t!=="beforeRouteEnter"&&!o.instances[c]))if(vi(l)){const a=(l.__vccOpts||l)[t];a&&i.push(Je(a,n,s,o,c,r))}else{let d=l();i.push(()=>d.then(a=>{if(!a)throw new Error(`Couldn't resolve component "${c}" at "${o.path}"`);const h=nc(a)?a.default:a;o.mods[c]=a,o.components[c]=h;const m=(h.__vccOpts||h)[t];return m&&Je(m,n,s,o,c,r)()}))}}return i}function lr(e){const t=Ke(ms),n=Ke(Ti),s=be(()=>{const l=ct(e.to);return t.resolve(l)}),r=be(()=>{const{matched:l}=s.value,{length:d}=l,a=l[d-1],h=n.matched;if(!a||!h.length)return-1;const g=h.findIndex(xt.bind(null,a));if(g>-1)return g;const m=cr(l[d-2]);return d>1&&cr(a)===m&&h[h.length-1].path!==m?h.findIndex(xt.bind(null,l[d-2])):g}),i=be(()=>r.value>-1&&ef(n.params,s.value.params)),o=be(()=>r.value>-1&&r.value===n.matched.length-1&&Si(n.params,s.value.params));function c(l={}){if(Zc(l)){const d=t[ct(e.replace)?"replace":"push"](ct(e.to)).catch(Dt);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>d),d}return Promise.resolve()}return{route:s,href:be(()=>s.value.href),isActive:i,isExactActive:o,navigate:c}}function Yc(e){return e.length===1?e[0]:e}const Jc=Vr({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:lr,setup(e,{slots:t}){const n=mn(lr(e)),{options:s}=Ke(ms),r=be(()=>({[fr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[fr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&Yc(t.default(n));return e.custom?i:mi("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Xc=Jc;function Zc(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ef(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!we(r)||r.length!==s.length||s.some((i,o)=>i!==r[o]))return!1}return!0}function cr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const fr=(e,t,n)=>e??t??n,tf=Vr({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ke(zn),r=be(()=>e.route||s.value),i=Ke(or,0),o=be(()=>{let d=ct(i);const{matched:a}=r.value;let h;for(;(h=a[d])&&!h.components;)d++;return d}),c=be(()=>r.value.matched[o.value]);en(or,be(()=>o.value+1)),en(Qc,c),en(zn,r);const l=Fr();return tn(()=>[l.value,c.value,e.name],([d,a,h],[g,m,O])=>{a&&(a.instances[h]=d,m&&m!==a&&d&&d===g&&(a.leaveGuards.size||(a.leaveGuards=m.leaveGuards),a.updateGuards.size||(a.updateGuards=m.updateGuards))),d&&a&&(!m||!xt(a,m)||!g)&&(a.enterCallbacks[h]||[]).forEach(A=>A(d))},{flush:"post"}),()=>{const d=r.value,a=e.name,h=c.value,g=h&&h.components[a];if(!g)return ur(n.default,{Component:g,route:d});const m=h.props[a],O=m?m===!0?d.params:typeof m=="function"?m(d):m:null,j=mi(g,K({},O,t,{onVnodeUnmounted:N=>{N.component.isUnmounted&&(h.instances[a]=null)},ref:l}));return ur(n.default,{Component:j,route:d})||j}}});function ur(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ii=tf;function nf(e){const t=Vc(e.routes,e),n=e.parseQuery||Gc,s=e.stringifyQuery||ir,r=e.history,i=Ot(),o=Ot(),c=Ot(),l=po(ze);let d=ze;mt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const a=Mn.bind(null,v=>""+v),h=Mn.bind(null,gc),g=Mn.bind(null,qt);function m(v,C){let R,I;return Pi(v)?(R=t.getRecordMatcher(v),I=C):I=v,t.addRoute(I,R)}function O(v){const C=t.getRecordMatcher(v);C&&t.removeRoute(C)}function A(){return t.getRoutes().map(v=>v.record)}function j(v){return!!t.getRecordMatcher(v)}function N(v,C){if(C=K({},C||l.value),typeof v=="string"){const p=Fn(n,v,C.path),_=t.resolve({path:p.path},C),b=r.createHref(p.fullPath);return K(p,_,{params:g(_.params),hash:qt(p.hash),redirectedFrom:void 0,href:b})}let R;if(v.path!=null)R=K({},v,{path:Fn(n,v.path,C.path).path});else{const p=K({},v.params);for(const _ in p)p[_]==null&&delete p[_];R=K({},v,{params:h(p)}),C.params=h(C.params)}const I=t.resolve(R,C),Q=v.hash||"";I.params=a(g(I.params));const f=vc(s,K({},v,{hash:hc(Q),path:I.path})),u=r.createHref(f);return K({fullPath:f,hash:Q,query:s===ir?zc(v.query):v.query||{}},I,{redirectedFrom:void 0,href:u})}function M(v){return typeof v=="string"?Fn(n,v,l.value.path):K({},v)}function H(v,C){if(d!==v)return Et(8,{from:C,to:v})}function T(v){return Z(v)}function z(v){return T(K(M(v),{replace:!0}))}function se(v){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:R}=C;let I=typeof R=="function"?R(v):R;return typeof I=="string"&&(I=I.includes("?")||I.includes("#")?I=M(I):{path:I},I.params={}),K({query:v.query,hash:v.hash,params:I.path!=null?{}:v.params},I)}}function Z(v,C){const R=d=N(v),I=l.value,Q=v.state,f=v.force,u=v.replace===!0,p=se(R);if(p)return Z(K(M(p),{state:typeof p=="object"?K({},Q,p.state):Q,force:f,replace:u}),C||R);const _=R;_.redirectedFrom=C;let b;return!f&&yc(s,I,R)&&(b=Et(16,{to:_,from:I}),Ce(I,I,!0,!1)),(b?Promise.resolve(b):Re(_,I)).catch(y=>je(y)?je(y,2)?y:Ge(y):V(y,_,I)).then(y=>{if(y){if(je(y,2))return Z(K({replace:u},M(y.to),{state:typeof y.to=="object"?K({},Q,y.to.state):Q,force:f}),C||_)}else y=st(_,I,!0,u,Q);return qe(_,I,y),y})}function Se(v,C){const R=H(v,C);return R?Promise.reject(R):Promise.resolve()}function ke(v){const C=dt.values().next().value;return C&&typeof C.runWithContext=="function"?C.runWithContext(v):v()}function Re(v,C){let R;const[I,Q,f]=sf(v,C);R=Nn(I.reverse(),"beforeRouteLeave",v,C);for(const p of I)p.leaveGuards.forEach(_=>{R.push(Je(_,v,C))});const u=Se.bind(null,v,C);return R.push(u),ve(R).then(()=>{R=[];for(const p of i.list())R.push(Je(p,v,C));return R.push(u),ve(R)}).then(()=>{R=Nn(Q,"beforeRouteUpdate",v,C);for(const p of Q)p.updateGuards.forEach(_=>{R.push(Je(_,v,C))});return R.push(u),ve(R)}).then(()=>{R=[];for(const p of f)if(p.beforeEnter)if(we(p.beforeEnter))for(const _ of p.beforeEnter)R.push(Je(_,v,C));else R.push(Je(p.beforeEnter,v,C));return R.push(u),ve(R)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),R=Nn(f,"beforeRouteEnter",v,C,ke),R.push(u),ve(R))).then(()=>{R=[];for(const p of o.list())R.push(Je(p,v,C));return R.push(u),ve(R)}).catch(p=>je(p,8)?p:Promise.reject(p))}function qe(v,C,R){c.list().forEach(I=>ke(()=>I(v,C,R)))}function st(v,C,R,I,Q){const f=H(v,C);if(f)return f;const u=C===ze,p=mt?history.state:{};R&&(I||u?r.replace(v.fullPath,K({scroll:u&&p&&p.scroll},Q)):r.push(v.fullPath,Q)),l.value=v,Ce(v,C,R,u),Ge()}let Pe;function St(){Pe||(Pe=r.listen((v,C,R)=>{if(!Yt.listening)return;const I=N(v),Q=se(I);if(Q){Z(K(Q,{replace:!0,force:!0}),I).catch(Dt);return}d=I;const f=l.value;mt&&Cc(Ys(f.fullPath,R.delta),xn()),Re(I,f).catch(u=>je(u,12)?u:je(u,2)?(Z(K(M(u.to),{force:!0}),I).then(p=>{je(p,20)&&!R.delta&&R.type===Gt.pop&&r.go(-1,!1)}).catch(Dt),Promise.reject()):(R.delta&&r.go(-R.delta,!1),V(u,I,f))).then(u=>{u=u||st(I,f,!1),u&&(R.delta&&!je(u,8)?r.go(-R.delta,!1):R.type===Gt.pop&&je(u,20)&&r.go(-1,!1)),qe(I,f,u)}).catch(Dt)}))}let at=Ot(),te=Ot(),G;function V(v,C,R){Ge(v);const I=te.list();return I.length?I.forEach(Q=>Q(v,C,R)):console.error(v),Promise.reject(v)}function $e(){return G&&l.value!==ze?Promise.resolve():new Promise((v,C)=>{at.add([v,C])})}function Ge(v){return G||(G=!v,St(),at.list().forEach(([C,R])=>v?R(v):C()),at.reset()),v}function Ce(v,C,R,I){const{scrollBehavior:Q}=e;if(!mt||!Q)return Promise.resolve();const f=!R&&Oc(Ys(v.fullPath,0))||(I||!R)&&history.state&&history.state.scroll||null;return $r().then(()=>Q(v,C,f)).then(u=>u&&Pc(u)).catch(u=>V(u,v,C))}const ae=v=>r.go(v);let ht;const dt=new Set,Yt={currentRoute:l,listening:!0,addRoute:m,removeRoute:O,clearRoutes:t.clearRoutes,hasRoute:j,getRoutes:A,resolve:N,options:e,push:T,replace:z,go:ae,back:()=>ae(-1),forward:()=>ae(1),beforeEach:i.add,beforeResolve:o.add,afterEach:c.add,onError:te.add,isReady:$e,install(v){const C=this;v.component("RouterLink",Xc),v.component("RouterView",Ii),v.config.globalProperties.$router=C,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>ct(l)}),mt&&!ht&&l.value===ze&&(ht=!0,T(r.location).catch(Q=>{}));const R={};for(const Q in ze)Object.defineProperty(R,Q,{get:()=>l.value[Q],enumerable:!0});v.provide(ms,C),v.provide(Ti,Tr(R)),v.provide(zn,l);const I=v.unmount;dt.add(v),v.unmount=function(){dt.delete(v),dt.size<1&&(d=ze,Pe&&Pe(),Pe=null,l.value=ze,ht=!1,G=!1),I()}}};function ve(v){return v.reduce((C,R)=>C.then(()=>ke(R)),Promise.resolve())}return Yt}function sf(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oxt(d,c))?s.push(c):n.push(c));const l=e.matched[o];l&&(t.matched.find(d=>xt(d,l))||r.push(l))}return[n,s,r]}const rf={__name:"App",setup(e){return console.log("app.vue loaded"),(t,n)=>(ai(),hi("div",null,[ye(ct(Ii))]))}},of=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},lf={};function cf(e,t){return ai(),hi("div",null,t[0]||(t[0]=[hs("h1",null,"Home",-1)]))}const ff=of(lf,[["render",cf]]),uf=nf({history:Mc("/"),routes:[{path:"/",name:"home",component:ff}]}),_s=Jl(rf);_s.use(tc());_s.use(uf);_s.mount("#app"); diff --git a/fe/public/assets/index-zqIqfzzx.css b/fe/public/assets/index-zqIqfzzx.css new file mode 100644 index 0000000..37e59bc --- /dev/null +++ b/fe/public/assets/index-zqIqfzzx.css @@ -0,0 +1 @@ +:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media (prefers-color-scheme: dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{max-width:1280px;margin:0 auto;padding:2rem;font-weight:400}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media (hover: hover){a:hover{background-color:#00bd7e33}}@media (min-width: 1024px){body{display:flex;place-items:center}#app{display:grid;grid-template-columns:1fr 1fr;padding:0 2rem}} diff --git a/fe/public/index.html b/fe/public/index.html new file mode 100644 index 0000000..a29aefd --- /dev/null +++ b/fe/public/index.html @@ -0,0 +1,14 @@ + + + + + + + Vite + Vue + + + + +
+ + diff --git a/fe/src/App.vue b/fe/src/App.vue new file mode 100644 index 0000000..7ec4c05 --- /dev/null +++ b/fe/src/App.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/fe/src/assets/img/Macrame-Logo-duo.svg b/fe/src/assets/img/Macrame-Logo-duo.svg new file mode 100644 index 0000000..41b172e --- /dev/null +++ b/fe/src/assets/img/Macrame-Logo-duo.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/fe/src/assets/img/Macrame-Logo-gradient.svg b/fe/src/assets/img/Macrame-Logo-gradient.svg new file mode 100644 index 0000000..af3a5fe --- /dev/null +++ b/fe/src/assets/img/Macrame-Logo-gradient.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fe/src/assets/img/Macrame-Logo-white.svg b/fe/src/assets/img/Macrame-Logo-white.svg new file mode 100644 index 0000000..5be1bf9 --- /dev/null +++ b/fe/src/assets/img/Macrame-Logo-white.svg @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/fe/src/assets/img/bg-gradient.svg b/fe/src/assets/img/bg-gradient.svg new file mode 100644 index 0000000..889a57e --- /dev/null +++ b/fe/src/assets/img/bg-gradient.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fe/src/assets/main.css b/fe/src/assets/main.css new file mode 100644 index 0000000..a025e37 --- /dev/null +++ b/fe/src/assets/main.css @@ -0,0 +1,89 @@ +@import "./style/_macro.css"; +@import "./style/_mcrm-block.css"; +@import "./style/_panel.css"; + +@import "tailwindcss"; + +@variant dark (&:where(.dark, .dark *)); + +@theme { + --font-sans: "Roboto", sans-serif; + --font-mono: "Fira Code", monospace; +} + +body { + @apply font-sans + font-light + tracking-wide + bg-slate-900 + text-slate-50; +} + +h1, +h2 { + @apply font-mono + font-bold; +} + +h3, +h4, +h5, +h6 { + @apply font-semibold; +} + +h1 { + @apply text-4xl; +} + +h2 { + @apply text-3xl; +} + +h3 { + @apply text-2xl; +} + +h4 { + @apply text-xl; +} + +h5 { + @apply text-lg; +} + +input { + @apply w-full + px-2 py-1 + border + border-slate-400 + text-white + rounded-md + bg-black/20; +} + +:has(> input + span) { + @apply flex; + + input { + @apply rounded-r-none; + } + + span { + @apply flex + items-center + px-2 + rounded-r-md + text-white + bg-slate-400; + } +} + +ul { + @apply list-disc + list-inside; +} + +strong { + @apply font-bold; +} diff --git a/fe/src/assets/style/_macro.css b/fe/src/assets/style/_macro.css new file mode 100644 index 0000000..ff78db0 --- /dev/null +++ b/fe/src/assets/style/_macro.css @@ -0,0 +1,28 @@ +/* @reference "main"; */ +hr.spacer { + @apply relative + w-6 + border + border-gray-300 + opacity-80 + overflow-visible; + + &::before, + &::after { + @apply content-[''] + absolute + top-1/2 + -translate-y-1/2 + size-2 + bg-gray-300 + rounded-full; + } + + &::before { + @apply -left-1; + } + + &::after { + @apply -right-1; + } +} diff --git a/fe/src/assets/style/_mcrm-block.css b/fe/src/assets/style/_mcrm-block.css new file mode 100644 index 0000000..b2202ae --- /dev/null +++ b/fe/src/assets/style/_mcrm-block.css @@ -0,0 +1,107 @@ +.mcrm-block { + @apply relative + p-6 + gap-x-6 + gap-y-2 + backdrop-blur-lg + rounded-2xl + overflow-hidden; + + &::before { + @apply content-[''] + absolute + inset-0 + p-px + rounded-2xl + size-full + bg-gradient-to-br + to-transparent + z-[-1]; + + mask: + linear-gradient(#000 0 0) exclude, + linear-gradient(#000 0 0) content-box; + } + + &.block__light { + @apply bg-white/20; + + &::before { + @apply from-white/20; + } + } + + &.block__dark { + @apply bg-slate-900/70; + + &::before { + @apply from-slate-400/40; + } + } + + &.block__primary { + @apply bg-sky-300/40; + + &::before { + @apply from-sky-100/40; + } + } + + &.block__secondary { + @apply bg-amber-300/40; + + &::before { + @apply from-amber-100/40; + } + } + + &.block__success { + @apply bg-emerald-300/40; + + &::before { + @apply from-emerald-100/40; + } + } + + &.block__warning { + @apply bg-orange-300/40; + + &::before { + @apply from-orange-100/40; + } + } + + &.block__danger { + @apply bg-rose-300/40; + + &::before { + @apply from-rose-100/40; + } + } + + &.block-spacing__sm, + &.block-size__sm { + @apply p-4 gap-x-4 gap-y-2; + } + + &.block-size__sm { + @apply rounded-lg; + + &::before { + @apply rounded-lg; + } + } + + &.block-spacing__lg, + &.block-size__lg { + @apply p-8 gap-x-8 gap-y-4; + } + + &.block-size__lg { + @apply rounded-3xl; + + &::before { + @apply rounded-3xl; + } + } +} diff --git a/fe/src/assets/style/_panel.css b/fe/src/assets/style/_panel.css new file mode 100644 index 0000000..4e80541 --- /dev/null +++ b/fe/src/assets/style/_panel.css @@ -0,0 +1,42 @@ +.panel { + @apply grid + grid-rows-[auto_1fr] + fixed + top-2 + left-4 sm:left-16 + right-4 sm:right-16 + bottom-2 + overflow-hidden; + + > .panel__header, + > .panel__title { + @apply px-4 py-2; + + /* &:first-child { + @apply pt-4; + } + + &:last-child { + @apply pb-4; + } */ + } + + .panel__title { + @apply bg-gradient-to-r + w-fit + from-amber-300 + to-white/50 + pt-3 + pl-16 sm:pl-4 + bg-clip-text + text-transparent; + } + + .panel__content { + @apply grid + h-full + pt-4 sm:pt-0 + pl-0 sm:pl-4 + overflow-auto; + } +} diff --git a/fe/src/components/base/AccordionComp.vue b/fe/src/components/base/AccordionComp.vue new file mode 100644 index 0000000..e8b64ec --- /dev/null +++ b/fe/src/components/base/AccordionComp.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/fe/src/components/base/AlertComp.vue b/fe/src/components/base/AlertComp.vue new file mode 100644 index 0000000..1070185 --- /dev/null +++ b/fe/src/components/base/AlertComp.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/fe/src/components/base/ButtonComp.vue b/fe/src/components/base/ButtonComp.vue new file mode 100644 index 0000000..3f3e331 --- /dev/null +++ b/fe/src/components/base/ButtonComp.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/fe/src/components/base/ButtonGroup.vue b/fe/src/components/base/ButtonGroup.vue new file mode 100644 index 0000000..c468606 --- /dev/null +++ b/fe/src/components/base/ButtonGroup.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/fe/src/components/base/ContextMenu.vue b/fe/src/components/base/ContextMenu.vue new file mode 100644 index 0000000..5009a15 --- /dev/null +++ b/fe/src/components/base/ContextMenu.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/fe/src/components/base/DialogComp.vue b/fe/src/components/base/DialogComp.vue new file mode 100644 index 0000000..fc2b716 --- /dev/null +++ b/fe/src/components/base/DialogComp.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/fe/src/components/base/MainMenu.vue b/fe/src/components/base/MainMenu.vue new file mode 100644 index 0000000..6ed6c49 --- /dev/null +++ b/fe/src/components/base/MainMenu.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/fe/src/components/devices/RemoteView.vue b/fe/src/components/devices/RemoteView.vue new file mode 100644 index 0000000..f70b40f --- /dev/null +++ b/fe/src/components/devices/RemoteView.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/fe/src/components/devices/ServerView.vue b/fe/src/components/devices/ServerView.vue new file mode 100644 index 0000000..ec56f18 --- /dev/null +++ b/fe/src/components/devices/ServerView.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/fe/src/components/icons/IconCommunity.vue b/fe/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/fe/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/fe/src/components/icons/IconDocumentation.vue b/fe/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/fe/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/fe/src/components/icons/IconEcosystem.vue b/fe/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/fe/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/fe/src/components/icons/IconSupport.vue b/fe/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/fe/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/fe/src/components/icons/IconTooling.vue b/fe/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/fe/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/fe/src/components/macros/MacroOverview.vue b/fe/src/components/macros/MacroOverview.vue new file mode 100644 index 0000000..2f17a95 --- /dev/null +++ b/fe/src/components/macros/MacroOverview.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/fe/src/components/macros/MacroRecorder.vue b/fe/src/components/macros/MacroRecorder.vue new file mode 100644 index 0000000..50b63a7 --- /dev/null +++ b/fe/src/components/macros/MacroRecorder.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/fe/src/components/macros/components/DelaySpan.vue b/fe/src/components/macros/components/DelaySpan.vue new file mode 100644 index 0000000..141b860 --- /dev/null +++ b/fe/src/components/macros/components/DelaySpan.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/fe/src/components/macros/components/DeleteKeyDialog.vue b/fe/src/components/macros/components/DeleteKeyDialog.vue new file mode 100644 index 0000000..d86ab67 --- /dev/null +++ b/fe/src/components/macros/components/DeleteKeyDialog.vue @@ -0,0 +1,38 @@ + + + + + +' diff --git a/fe/src/components/macros/components/EditDelayDialog.vue b/fe/src/components/macros/components/EditDelayDialog.vue new file mode 100644 index 0000000..8c5fe01 --- /dev/null +++ b/fe/src/components/macros/components/EditDelayDialog.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/fe/src/components/macros/components/EditKeyDialog.vue b/fe/src/components/macros/components/EditKeyDialog.vue new file mode 100644 index 0000000..2aa02db --- /dev/null +++ b/fe/src/components/macros/components/EditKeyDialog.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/fe/src/components/macros/components/FixedDelayMenu.vue b/fe/src/components/macros/components/FixedDelayMenu.vue new file mode 100644 index 0000000..d963d7b --- /dev/null +++ b/fe/src/components/macros/components/FixedDelayMenu.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/fe/src/components/macros/components/InsertKeyDialog.vue b/fe/src/components/macros/components/InsertKeyDialog.vue new file mode 100644 index 0000000..8165869 --- /dev/null +++ b/fe/src/components/macros/components/InsertKeyDialog.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/fe/src/components/macros/components/MacroKey.vue b/fe/src/components/macros/components/MacroKey.vue new file mode 100644 index 0000000..5a8ca3a --- /dev/null +++ b/fe/src/components/macros/components/MacroKey.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/fe/src/components/macros/components/ValidationErrorDialog.vue b/fe/src/components/macros/components/ValidationErrorDialog.vue new file mode 100644 index 0000000..a3cd022 --- /dev/null +++ b/fe/src/components/macros/components/ValidationErrorDialog.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/fe/src/components/macros/parts/EditDialogs.vue b/fe/src/components/macros/parts/EditDialogs.vue new file mode 100644 index 0000000..4a789f4 --- /dev/null +++ b/fe/src/components/macros/parts/EditDialogs.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/fe/src/components/macros/parts/RecorderFooter.vue b/fe/src/components/macros/parts/RecorderFooter.vue new file mode 100644 index 0000000..79307d2 --- /dev/null +++ b/fe/src/components/macros/parts/RecorderFooter.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/fe/src/components/macros/parts/RecorderHeader.vue b/fe/src/components/macros/parts/RecorderHeader.vue new file mode 100644 index 0000000..8687fa3 --- /dev/null +++ b/fe/src/components/macros/parts/RecorderHeader.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/fe/src/components/macros/parts/RecorderInput.vue b/fe/src/components/macros/parts/RecorderInput.vue new file mode 100644 index 0000000..cb40c44 --- /dev/null +++ b/fe/src/components/macros/parts/RecorderInput.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/fe/src/components/macros/parts/RecorderOutput.vue b/fe/src/components/macros/parts/RecorderOutput.vue new file mode 100644 index 0000000..e5514c8 --- /dev/null +++ b/fe/src/components/macros/parts/RecorderOutput.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/fe/src/main.js b/fe/src/main.js new file mode 100644 index 0000000..69e5c57 --- /dev/null +++ b/fe/src/main.js @@ -0,0 +1,15 @@ +// import './assets/jemx.scss' +import "@/assets/main.css"; + +import { createApp } from "vue"; +import { createPinia } from "pinia"; + +import App from "@/App.vue"; +import router from "@/router"; + +const app = createApp(App); + +app.use(createPinia()); +app.use(router); + +app.mount("#app"); diff --git a/fe/src/router/index.js b/fe/src/router/index.js new file mode 100644 index 0000000..19f03ec --- /dev/null +++ b/fe/src/router/index.js @@ -0,0 +1,43 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + }, + { + path: '/panels', + name: 'panels', + component: () => import('../views/PanelsView.vue'), + }, + { + path: '/macros', + name: 'macros', + component: () => import('../views/MacrosView.vue'), + }, + { + path: '/devices', + name: 'devices', + component: () => import('../views/DevicesView.vue'), + }, + { + path: '/settings', + name: 'settings', + component: () => import('../views/SettingsView.vue'), + }, + // { + // path: '/about', + // name: 'about', + // // route level code-splitting + // // this generates a separate chunk (About.[hash].js) for this route + // // which is lazy-loaded when the route is visited. + // component: () => import('../views/AboutView.vue'), + // }, + ], +}) + +export default router diff --git a/fe/src/services/ApiService.js b/fe/src/services/ApiService.js new file mode 100644 index 0000000..863ad3a --- /dev/null +++ b/fe/src/services/ApiService.js @@ -0,0 +1,19 @@ +import CryptoJS from 'crypto-js' + +export const appUrl = () => { + return window.location.port !== 6970 ? `http://${window.location.hostname}:6970` : '' +} + +export const isLocal = () => { + return window.location.hostname === '127.0.0.1' || window.location.hostname === 'localhost' +} + +export const encrypt = (data, key = false) => { + const pk = !key ? localStorage.getItem('Macrame__pk') : key + + if (pk) { + return CryptoJS.RSA.encrypt(JSON.stringify(data), pk).toString() + } else { + return false + } +} diff --git a/fe/src/services/EncryptService.js b/fe/src/services/EncryptService.js new file mode 100644 index 0000000..a654ac3 --- /dev/null +++ b/fe/src/services/EncryptService.js @@ -0,0 +1,51 @@ +import { useDeviceStore } from '@/stores/device' +import { AES, enc, pad } from 'crypto-js' + +export const encryptAES = (key, str) => { + key = keyPad(key) + + let iv = enc.Utf8.parse(import.meta.env.VITE_MCRM__IV) + let encrypted = AES.encrypt(str, key, { + iv: iv, + padding: pad.Pkcs7, + }) + return encrypted.toString() +} + +export const decryptAES = (key, str) => { + key = keyPad(key) + + let iv = enc.Utf8.parse(import.meta.env.VITE_MCRM__IV) + let encrypted = AES.decrypt(str.toString(), key, { + iv: iv, + padding: pad.Pkcs7, + }) + return encrypted.toString(enc.Utf8) +} + +export const AuthCall = (data) => { + const device = useDeviceStore() + + return { + uuid: device.uuid(), + d: encryptAES(device.key(), JSON.stringify(data)), + } +} + +function keyPad(key) { + let returnKey = key + + if (key.length == 4) { + returnKey = key + import.meta.env.VITE_MCRM__SALT + } + + return enc.Utf8.parse(returnKey) +} + +export const getDateStr = () => { + const date = new Date() + const year = date.getFullYear() + const month = String(date.getMonth() + 1).padStart(2, '0') + const day = String(date.getDate()).padStart(2, '0') + return `${year}${month}${day}` +} diff --git a/fe/src/services/MacroRecordService.js b/fe/src/services/MacroRecordService.js new file mode 100644 index 0000000..5ab7a37 --- /dev/null +++ b/fe/src/services/MacroRecordService.js @@ -0,0 +1,127 @@ +const keyMap = { + // Modifier keys + Control: 'Ctrl', + Shift: 'Shift', + Alt: 'Alt', + Meta: 'Win', + CapsLock: 'Caps', + // Special keys + PageUp: 'PgUp', + PageDown: 'PgDn', + ScrollLock: 'Scr Lk', + Insert: 'Ins', + Delete: 'Del', + Escape: 'Esc', + Space: 'Space', + // Symbol keys + Backquote: '`', + Backslash: '\\', + BracketLeft: '[', + BracketRight: ']', + Comma: ',', + Equal: '=', + Minus: '-', + Period: '.', + Quote: "'", + Semicolon: ';', + Slash: '/', + // Arrow keys + ArrowUp: '▲', + ArrowRight: '▶', + ArrowDown: '▼', + ArrowLeft: '◀', + // Media keys + MediaPlayPause: 'Play', + MediaStop: 'Stop', + MediaTrackNext: 'Next', + MediaTrackPrevious: 'Prev', + MediaVolumeDown: 'Down', + MediaVolumeUp: 'Up', + AudioVolumeMute: 'Mute', + AudioVolumeDown: 'Down', + AudioVolumeUp: 'Up', +} + +/** + * Filters a keyboard event and returns an object with two properties: + * loc (optional) and str. + * loc is the location of the key (either 'left', 'right', or 'num'). + * str is the string representation of the key (e.g. 'a', 'A', 'Enter', etc.). + * If the key is a modifier key, it is represented by its name (e.g. 'Ctrl', 'Shift', etc.). + * If the key is not a modifier key, it is represented by its character (e.g. 'a', 'A', etc.). + * If the key is not a character key, it is represented by its symbol (e.g. ',', '.', etc.). + * @param {KeyboardEvent} e - The keyboard event to filter. + * @return {Object} An object with two properties: loc (optional) and str. + */ +export const filterKey = (e) => { + const k = {} // Object k (key) + + // If location is set, set loc (location) + if (e.location === 1) k.loc = 'left' + if (e.location === 2) k.loc = 'right' + if (e.location === 3) k.loc = 'num' + + if (e.key.includes('Media') || e.key.includes('Audio')) k.loc = mediaPrefix(e) + + // If code is in keyMap, set str by code + if (keyMap[e.code] || keyMap[e.key]) { + k.str = keyMap[e.code] || keyMap[e.key] + } else { + // If code is not in keyMap, set str by e.key + k.str = e.key.toLowerCase() + } + + // return k object + return k +} + +/** + * Returns a string prefix for the given media key. + * @param {KeyboardEvent} e - The keyboard event to get the prefix for. + * @return {string} The prefix for the key (either 'Media' or 'Volume'). + */ +const mediaPrefix = (e) => { + switch (e.key) { + case 'MediaPlayPause': + case 'MediaStop': + case 'MediaTrackNext': + case 'MediaTrackPrevious': + return 'Media' + case 'MediaVolumeDown': + case 'MediaVolumeUp': + case 'AudioVolumeDown': + case 'AudioVolumeUp': + case 'AudioVolumeMute': + return 'Volume' + } +} + +export const isRepeat = (lastStep, e, direction) => { + return ( + lastStep && + lastStep.type === 'key' && + lastStep.code === e.code && + lastStep.direction === direction + ) +} + +export const invalidMacro = (steps) => { + const downKeys = [] + const upKeys = [] + + Object.keys(steps).forEach((stepKey) => { + const step = steps[stepKey] + + if (step.type !== 'key') return + + if (step.direction == 'down') downKeys.push(step.key) + if (step.direction == 'up') { + if (!downKeys.includes(step.key)) upKeys.push(step.key) + else downKeys.splice(downKeys.indexOf(step.key), 1) + } + }) + + if (upKeys.length === 0 && downKeys.length === 0) return false + + return { down: downKeys, up: upKeys } +} diff --git a/fe/src/services/RobotKeys.md b/fe/src/services/RobotKeys.md new file mode 100644 index 0000000..58f82de --- /dev/null +++ b/fe/src/services/RobotKeys.md @@ -0,0 +1,117 @@ + "A-Z a-z 0-9" + + "backspace" + "delete" + "enter" + "tab" + "esc" + "escape" + "up" Up arrow key + "down" Down arrow key + "right" Right arrow key + "left" Left arrow key + "home" + "end" + "pageup" + "pagedown" + + "f1" + "f2" + "f3" + "f4" + "f5" + "f6" + "f7" + "f8" + "f9" + "f10" + "f11" + "f12" + "f13" + "f14" + "f15" + "f16" + "f17" + "f18" + "f19" + "f20" + "f21" + "f22" + "f23" + "f24" + + "cmd" is the "win" key for windows + "lcmd" left command + "rcmd" right command + // "command" + "alt" + "lalt" left alt + "ralt" right alt + "ctrl" + "lctrl" left ctrl + "rctrl" right ctrl + "control" + "shift" + "lshift" left shift + "rshift" right shift + // "right_shift" + "capslock" + "space" + "print" + "printscreen" // No Mac support + "insert" + "menu" Windows only + + "audio_mute" Mute the volume + "audio_vol_down" Lower the volume + "audio_vol_up" Increase the volume + "audio_play" + "audio_stop" + "audio_pause" + "audio_prev" Previous Track + "audio_next" Next Track + "audio_rewind" Linux only + "audio_forward" Linux only + "audio_repeat" Linux only + "audio_random" Linux only + + + "num0" + "num1" + "num2" + "num3" + "num4" + "num5" + "num6" + "num7" + "num8" + "num9" + "num_lock" + + "num." + "num+" + "num-" + "num*" + "num/" + "num_clear" + "num_enter" + "num_equal" + + // // "numpad_0" No Linux support + // "numpad_0" + // "numpad_1" + // "numpad_2" + // "numpad_3" + // "numpad_4" + // "numpad_5" + // "numpad_6" + // "numpad_7" + // "numpad_8" + // "numpad_9" + // "numpad_lock" + + "lights_mon_up" Turn up monitor brightness No Windows support + "lights_mon_down" Turn down monitor brightness No Windows support + "lights_kbd_toggle" Toggle keyboard backlight on/off No Windows support + "lights_kbd_up" Turn up keyboard backlight brightness No Windows support + "lights_kbd_down" Turn down keyboard backlight brightness No Windows support diff --git a/fe/src/stores/counter.js b/fe/src/stores/counter.js new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/fe/src/stores/counter.js @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/fe/src/stores/device.js b/fe/src/stores/device.js new file mode 100644 index 0000000..863cbad --- /dev/null +++ b/fe/src/stores/device.js @@ -0,0 +1,118 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' +import axios from 'axios' +import { appUrl, encrypt } from '@/services/ApiService' +import { v4 as uuidv4 } from 'uuid' +import { encryptAES, getDateStr } from '@/services/EncryptService' + +export const useDeviceStore = defineStore('device', () => { + // Properties - State values + const current = ref({ + uuid: false, + key: false, + }) + + const remote = ref([]) + const server = ref({ + status: false, + }) + + // Current device + const uuid = () => { + if (!current.value.uuid && localStorage.getItem('deviceId')) { + current.value.uuid = localStorage.getItem('deviceId') + } else if (!current.value.uuid) { + current.value.uuid = setDeviceId() + } + return current.value.uuid + } + + const setDeviceId = () => { + const uuid = uuidv4() + localStorage.setItem('deviceId', uuid) + return uuid + } + + const key = () => { + if (!current.value.key && localStorage.getItem('deviceKey')) { + current.value.key = localStorage.getItem('deviceKey') + } + return current.value.key + } + + const setDeviceKey = (key) => { + current.value.key = key + localStorage.setItem('deviceKey', key) + } + + const removeDeviceKey = () => { + current.value.key = false + localStorage.removeItem('deviceKey') + } + + // Server application + const serverGetRemotes = async (remoteUuid) => { + axios.post(appUrl() + '/device/list', { uuid: remoteUuid }).then((data) => { + if (data.data.devices) remote.value = data.data.devices + }) + } + + const serverStartLink = async (deviceUuid) => { + const request = await axios.post(appUrl() + '/device/link/start', { uuid: deviceUuid }) + return request.data + } + + // Remote application + const remoteCheckServerAccess = async () => { + const check = await axios.post(appUrl() + '/device/access/check', { uuid: uuid() }) + server.value.access = check.data + return check.data + } + + const remoteRequestServerAccess = async (deviceName, deviceType) => { + const request = await axios.post(appUrl() + '/device/access/request', { + uuid: uuid(), + name: deviceName, + type: deviceType, + }) + return request + } + const remotePingLink = async (cb) => { + // const linkRequest = await axios.post(appUrl() + '/device/link/ping', { uuid: deviceUuid }) + // if (linkRequest.data) + const pingInterval = setInterval(() => { + axios.post(appUrl() + '/device/link/ping', { uuid: uuid() }).then((data) => { + if (data.data) { + clearInterval(pingInterval) + cb(data.data) + } + }) + }, 1000) + } + + const remoteHandshake = async (key) => { + const handshake = await axios.post(appUrl() + '/device/handshake', { + uuid: uuid(), + shake: encryptAES(key, getDateStr()), + }) + console.log(handshake) + + return handshake.data + } + + return { + remote, + server, + uuid, + setDeviceId, + key, + setDeviceKey, + removeDeviceKey, + serverGetRemotes, + serverStartLink, + remoteCheckServerAccess, + remoteRequestServerAccess, + remotePingLink, + remoteHandshake, + } +}) diff --git a/fe/src/stores/macrorecorder.js b/fe/src/stores/macrorecorder.js new file mode 100644 index 0000000..54cfa64 --- /dev/null +++ b/fe/src/stores/macrorecorder.js @@ -0,0 +1,206 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' + +import { filterKey, isRepeat, invalidMacro } from '../services/MacroRecordService' +import axios from 'axios' +import { appUrl } from '@/services/ApiService' + +export const useMacroRecorderStore = defineStore('macrorecorder', () => { + // Properties - State values + const state = ref({ + record: false, + edit: false, + editKey: false, + editDelay: false, + validationErrors: false, + }) + + const macroName = ref('') + + const steps = ref([]) + + const delay = ref({ + start: 0, + fixed: false, + }) + + // Getters - Computed values + const getEditKey = () => steps.value[state.value.editKey] + const getAdjacentKey = (pos, includeDelay = false) => { + let returnVal = false + + const mod = pos == 'before' ? -1 : 1 + const keyIndex = state.value.editKey + 2 * mod + const delayIndex = includeDelay ? state.value.editKey + 1 * mod : false + + if (steps.value[keyIndex]) returnVal = steps.value[keyIndex] + if (delayIndex && steps.value[delayIndex]) + returnVal = { + delay: steps.value[delayIndex], + key: steps.value[keyIndex], + delayIndex: delayIndex, + } + + return returnVal + } + + const getEditDelay = () => steps.value[state.value.editDelay] + + // Setters - Actions + const recordStep = (e, direction = false, key = false) => { + const lastStep = steps.value[steps.value.length - 1] + + let stepVal = {} + + if (typeof e === 'object' && !isRepeat(lastStep, e, direction)) { + if (key === false) recordDelay() + + stepVal = { + type: 'key', + key: e.key, + code: e.code, + location: e.location, + direction: direction, + keyObj: filterKey(e), + } + } else if (direction && key !== false) { + stepVal = steps.value[key] + stepVal.direction = direction + } else if (typeof e === 'number') { + stepVal = { type: 'delay', value: parseFloat(e.toFixed()) } + } + + if (key !== false) steps.value[key] = stepVal + else steps.value.push(stepVal) + } + + const recordDelay = () => { + if (delay.value.fixed !== false) + recordStep(delay.value.fixed) // Record fixed delay + else if (delay.value.start == 0) + delay.value.start = performance.now() // Record start of delay + else { + recordStep(performance.now() - delay.value.start) // Record end of delay + delay.value.start = performance.now() // Reset start + } + } + + const insertKey = (e, direction, adjacentDelayIndex) => { + let min, max, newKeyIndex, newDelayIndex + + if (adjacentDelayIndex === null) { + min = state.value.editKey == 0 ? 0 : state.value.editKey + max = state.value.editKey == 0 ? 1 : false + + newKeyIndex = max === false ? min + 2 : min + newDelayIndex = min + 1 + } else if (state.value.editKey < adjacentDelayIndex) { + min = state.value.editKey + max = adjacentDelayIndex + newKeyIndex = min + 2 + newDelayIndex = min + 1 + } else { + min = adjacentDelayIndex + max = state.value.editKey + newKeyIndex = min + 1 + newDelayIndex = min + 2 + } + + if (max !== false) { + for (let i = Object.keys(steps.value).length - 1; i >= max; i--) { + steps.value[i + 2] = steps.value[i] + } + } + + recordStep(e, direction, newKeyIndex) + recordStep(10, false, newDelayIndex) + + state.value.editKey = false + } + + const deleteEditKey = () => { + if (state.value.editKey === 0) steps.value.splice(state.value.editKey, 2) + else steps.value.splice(state.value.editKey - 1, 2) + state.value.editKey = false + } + + const restartDelay = () => { + delay.value.start = performance.now() + } + + const changeName = (name) => { + macroName.value = name + console.log(macroName.value) + } + + const changeDelay = (fixed) => { + delay.value.fixed = fixed + + formatDelays() + } + + const formatDelays = () => { + steps.value = steps.value.map((step) => { + if (step.type === 'delay' && delay.value.fixed !== false) step.value = delay.value.fixed + return step + }) + } + + const toggleEdit = (type, key) => { + if (type === 'key') { + state.value.editKey = key + state.value.editDelay = false + } + + if (type === 'delay') { + state.value.editKey = false + state.value.editDelay = key + } + } + + const resetEdit = () => { + state.value.edit = false + state.value.editKey = false + state.value.editDelay = false + } + + const reset = () => { + state.value.record = false + delay.value.start = 0 + steps.value = [] + + if (state.value.edit) resetEdit() + } + + const save = () => { + state.value.validationErrors = invalidMacro(steps.value) + + if (state.value.validationErrors) return false + + axios + .post(appUrl() + '/macro/record', { name: macroName.value, steps: steps.value }) + .then((data) => { + console.log(data) + }) + return true + } + + return { + state, + steps, + delay, + getEditKey, + getAdjacentKey, + getEditDelay, + recordStep, + insertKey, + deleteEditKey, + restartDelay, + changeName, + changeDelay, + toggleEdit, + resetEdit, + reset, + save, + } +}) diff --git a/fe/src/views/DevicesView.vue b/fe/src/views/DevicesView.vue new file mode 100644 index 0000000..f262cc6 --- /dev/null +++ b/fe/src/views/DevicesView.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/fe/src/views/HomeView.vue b/fe/src/views/HomeView.vue new file mode 100644 index 0000000..c304a7a --- /dev/null +++ b/fe/src/views/HomeView.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/fe/src/views/MacrosView.vue b/fe/src/views/MacrosView.vue new file mode 100644 index 0000000..09cffb3 --- /dev/null +++ b/fe/src/views/MacrosView.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/fe/src/views/PanelsView.vue b/fe/src/views/PanelsView.vue new file mode 100644 index 0000000..677f24b --- /dev/null +++ b/fe/src/views/PanelsView.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/fe/src/views/SettingsView.vue b/fe/src/views/SettingsView.vue new file mode 100644 index 0000000..677f24b --- /dev/null +++ b/fe/src/views/SettingsView.vue @@ -0,0 +1,7 @@ + + + + + diff --git a/fe/vite.config.js b/fe/vite.config.js new file mode 100644 index 0000000..ffa7a57 --- /dev/null +++ b/fe/vite.config.js @@ -0,0 +1,31 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' +import tailwindcss from '@tailwindcss/vite' + +// https://vite.dev/config/ +export default defineConfig({ + server: { + host: 'localhost', + port: 5173, + watch: { + usePolling: true, + }, + }, + plugins: [vue(), vueDevTools(), tailwindcss()], + envDir: '../', + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + base: '/', + // publicDir: "../public", + build: { + outDir: '../public', + sourcemap: false, + minify: false, + }, +}) diff --git a/macros/desktop.json b/macros/desktop.json new file mode 100644 index 0000000..03341e3 --- /dev/null +++ b/macros/desktop.json @@ -0,0 +1 @@ +[{"type":"key","key":"Meta","code":"MetaLeft","location":1,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":240},{"type":"key","key":"d","code":"KeyD","location":0,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":10},{"type":"key","key":"d","code":"KeyD","location":0,"direction":"up","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":10},{"type":"key","key":"Meta","code":"MetaLeft","location":1,"direction":"up","value":0}] \ No newline at end of file diff --git a/macros/task_manager.json b/macros/task_manager.json new file mode 100644 index 0000000..194fbc4 --- /dev/null +++ b/macros/task_manager.json @@ -0,0 +1 @@ +[{"type":"key","key":"Control","code":"ControlLeft","location":1,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":15},{"type":"key","key":"Shift","code":"ShiftLeft","location":1,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":15},{"type":"key","key":"Escape","code":"Escape","location":0,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":15},{"type":"key","key":"Escape","code":"Escape","location":0,"direction":"up","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":15},{"type":"key","key":"Shift","code":"ShiftLeft","location":1,"direction":"up","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":15},{"type":"key","key":"Control","code":"ControlLeft","location":1,"direction":"up","value":0}] \ No newline at end of file diff --git a/public/assets/DevicesView-DqasecOn.js b/public/assets/DevicesView-DqasecOn.js new file mode 100644 index 0000000..15fe568 --- /dev/null +++ b/public/assets/DevicesView-DqasecOn.js @@ -0,0 +1,1758 @@ +import { a as createVueComponent, _ as _export_sfc, c as createElementBlock, o as openBlock, s as createBlock, p as createCommentVNode, v as renderSlot, u as unref, q as normalizeClass, z as useDeviceStore, m as ref, r as reactive, b as onMounted, h as createVNode, f as createBaseVNode, w as withCtx, t as toDisplayString, i as createTextVNode, B as IconDevices, F as Fragment, g as renderList, d as axios, e as appUrl, n as onUpdated, j as withModifiers, x as withDirectives, y as vModelText, A as AuthCall, C as decryptAES, k as isLocal } from "./index-GNAKlyBz.js"; +import { _ as _sfc_main$4, a as _sfc_main$5 } from "./DialogComp-Ba5-BUTe.js"; +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconAlertTriangle = createVueComponent("outline", "alert-triangle", "IconAlertTriangle", [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconCheck = createVueComponent("outline", "check", "IconCheck", [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconDeviceDesktop = createVueComponent("outline", "device-desktop", "IconDeviceDesktop", [["path", { "d": "M3 5a1 1 0 0 1 1 -1h16a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10z", "key": "svg-0" }], ["path", { "d": "M7 20h10", "key": "svg-1" }], ["path", { "d": "M9 16v4", "key": "svg-2" }], ["path", { "d": "M15 16v4", "key": "svg-3" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconDeviceMobile = createVueComponent("outline", "device-mobile", "IconDeviceMobile", [["path", { "d": "M6 5a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2v-14z", "key": "svg-0" }], ["path", { "d": "M11 4h2", "key": "svg-1" }], ["path", { "d": "M12 17v.01", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconDeviceTablet = createVueComponent("outline", "device-tablet", "IconDeviceTablet", [["path", { "d": "M5 4a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v16a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1v-16z", "key": "svg-0" }], ["path", { "d": "M11 17a1 1 0 1 0 2 0a1 1 0 0 0 -2 0", "key": "svg-1" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconDeviceUnknown = createVueComponent("outline", "device-unknown", "IconDeviceUnknown", [["path", { "d": "M5 5a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }], ["path", { "d": "M12 16v.01", "key": "svg-1" }], ["path", { "d": "M12 13a2 2 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconExclamationCircle = createVueComponent("outline", "exclamation-circle", "IconExclamationCircle", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9v4", "key": "svg-1" }], ["path", { "d": "M12 16v.01", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconInfoCircle = createVueComponent("outline", "info-circle", "IconInfoCircle", [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconKey = createVueComponent("outline", "key", "IconKey", [["path", { "d": "M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z", "key": "svg-0" }], ["path", { "d": "M15 9h.01", "key": "svg-1" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconLinkOff = createVueComponent("outline", "link-off", "IconLinkOff", [["path", { "d": "M9 15l3 -3m2 -2l1 -1", "key": "svg-0" }], ["path", { "d": "M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464", "key": "svg-1" }], ["path", { "d": "M3 3l18 18", "key": "svg-2" }], ["path", { "d": "M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463", "key": "svg-3" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconLink = createVueComponent("outline", "link", "IconLink", [["path", { "d": "M9 15l6 -6", "key": "svg-0" }], ["path", { "d": "M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464", "key": "svg-1" }], ["path", { "d": "M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconPlugConnectedX = createVueComponent("outline", "plug-connected-x", "IconPlugConnectedX", [["path", { "d": "M20 16l-4 4", "key": "svg-0" }], ["path", { "d": "M7 12l5 5l-1.5 1.5a3.536 3.536 0 1 1 -5 -5l1.5 -1.5z", "key": "svg-1" }], ["path", { "d": "M17 12l-5 -5l1.5 -1.5a3.536 3.536 0 1 1 5 5l-1.5 1.5z", "key": "svg-2" }], ["path", { "d": "M3 21l2.5 -2.5", "key": "svg-3" }], ["path", { "d": "M18.5 5.5l2.5 -2.5", "key": "svg-4" }], ["path", { "d": "M10 11l-2 2", "key": "svg-5" }], ["path", { "d": "M13 14l-2 2", "key": "svg-6" }], ["path", { "d": "M16 16l4 4", "key": "svg-7" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconReload = createVueComponent("outline", "reload", "IconReload", [["path", { "d": "M19.933 13.041a8 8 0 1 1 -9.925 -8.788c3.899 -1 7.935 1.007 9.425 4.747", "key": "svg-0" }], ["path", { "d": "M20 4v5h-5", "key": "svg-1" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconServer = createVueComponent("outline", "server", "IconServer", [["path", { "d": "M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-0" }], ["path", { "d": "M3 12m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z", "key": "svg-1" }], ["path", { "d": "M7 8l0 .01", "key": "svg-2" }], ["path", { "d": "M7 16l0 .01", "key": "svg-3" }]]); +const _sfc_main$3 = { + __name: "AlertComp", + props: { + type: String + // info, success, warning, error + }, + setup(__props) { + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + class: normalizeClass(`alert alert__${__props.type}`) + }, [ + __props.type === "info" ? (openBlock(), createBlock(unref(IconInfoCircle), { key: 0 })) : createCommentVNode("", true), + __props.type === "success" ? (openBlock(), createBlock(unref(IconCheck), { key: 1 })) : createCommentVNode("", true), + __props.type === "warning" ? (openBlock(), createBlock(unref(IconExclamationCircle), { key: 2 })) : createCommentVNode("", true), + __props.type === "error" ? (openBlock(), createBlock(unref(IconAlertTriangle), { key: 3 })) : createCommentVNode("", true), + renderSlot(_ctx.$slots, "default", {}, void 0, true) + ], 2); + }; + } +}; +const AlertComp = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-87f6de25"]]); +const _hoisted_1$2 = { class: "device-overview" }; +const _hoisted_2$2 = { class: "grid" }; +const _hoisted_3$2 = { class: "mcrm-block block__light flex flex-wrap items-start gap-4" }; +const _hoisted_4$2 = { class: "w-full flex gap-4 items-center justify-between mb-4" }; +const _hoisted_5$1 = { class: "flex gap-4" }; +const _hoisted_6$1 = { class: "grid gap-2" }; +const _hoisted_7$1 = { class: "grid grid-cols-[auto_1fr] gap-2" }; +const _hoisted_8$1 = { class: "w-full truncate" }; +const _hoisted_9 = { + key: 1, + class: "grid w-full gap-4" +}; +const _hoisted_10 = { class: "grid gap-4" }; +const _hoisted_11 = { class: "text-4xl font-mono tracking-wide" }; +const _sfc_main$2 = { + __name: "ServerView", + setup(__props) { + const device = useDeviceStore(); + const pinDialog = ref(); + const remote = reactive({ devices: [], pinlink: false }); + onMounted(() => { + device.serverGetRemotes(); + device.$subscribe((mutation, state) => { + if (Object.keys(state.remote).length) remote.devices = device.remote; + }); + }); + async function startLink(deviceUuid) { + const pin = await device.serverStartLink(deviceUuid); + remote.pinlink = { uuid: deviceUuid, pin }; + pinDialog.value.toggleDialog(true); + pollLink(); + setTimeout(() => { + resetPinLink(); + }, 6e4); + } + function pollLink() { + const pollInterval = setInterval(() => { + axios.post(appUrl() + "/device/link/poll", { uuid: remote.pinlink.uuid }).then((data) => { + if (!data.data) { + clearInterval(pollInterval); + resetPinLink(); + device.serverGetRemotes(); + } + }); + }, 1e3); + } + function resetPinLink() { + remote.pinlink = false; + if (pinDialog.value) pinDialog.value.toggleDialog(false); + } + function unlinkDevice(id) { + axios.post(appUrl() + "/device/link/remove", { uuid: id }).then((data) => { + if (data.data) device.serverGetRemotes(); + }); + } + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + createVNode(AlertComp, { type: "info" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_2$2, [ + _cache[1] || (_cache[1] = createBaseVNode("strong", null, "This is a server!", -1)), + createBaseVNode("em", null, "UUID: " + toDisplayString(unref(device).uuid()), 1) + ]) + ]), + _: 1 + }), + createBaseVNode("div", _hoisted_3$2, [ + createBaseVNode("h4", _hoisted_4$2, [ + createBaseVNode("span", _hoisted_5$1, [ + createVNode(unref(IconDevices)), + _cache[2] || (_cache[2] = createTextVNode("Remote devices ")) + ]), + createVNode(_sfc_main$4, { + variant: "primary", + onClick: _cache[0] || (_cache[0] = ($event) => unref(device).serverGetRemotes()) + }, { + default: withCtx(() => [ + createVNode(unref(IconReload)) + ]), + _: 1 + }) + ]), + Object.keys(remote.devices).length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(remote.devices, (remoteDevice, id) => { + return openBlock(), createElementBlock("div", { + class: "mcrm-block block__dark block-size__sm w-64 grid !gap-4 content-start", + key: id + }, [ + createBaseVNode("div", _hoisted_6$1, [ + createBaseVNode("h5", _hoisted_7$1, [ + remoteDevice.settings.type == "unknown" ? (openBlock(), createBlock(unref(IconDeviceUnknown), { key: 0 })) : createCommentVNode("", true), + remoteDevice.settings.type == "mobile" ? (openBlock(), createBlock(unref(IconDeviceMobile), { key: 1 })) : createCommentVNode("", true), + remoteDevice.settings.type == "tablet" ? (openBlock(), createBlock(unref(IconDeviceTablet), { key: 2 })) : createCommentVNode("", true), + remoteDevice.settings.type == "desktop" ? (openBlock(), createBlock(unref(IconDeviceDesktop), { key: 3 })) : createCommentVNode("", true), + createBaseVNode("span", _hoisted_8$1, toDisplayString(remoteDevice.settings.name), 1) + ]), + createBaseVNode("em", null, toDisplayString(id), 1) + ]), + remoteDevice.key ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ + createVNode(AlertComp, { type: "success" }, { + default: withCtx(() => _cache[3] || (_cache[3] = [ + createTextVNode("Authorized") + ])), + _: 1 + }), + createVNode(_sfc_main$4, { + variant: "danger", + onClick: ($event) => unlinkDevice(id) + }, { + default: withCtx(() => [ + createVNode(unref(IconLinkOff)), + _cache[4] || (_cache[4] = createTextVNode("Unlink device ")) + ]), + _: 2 + }, 1032, ["onClick"]) + ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ + createVNode(AlertComp, { type: "warning" }, { + default: withCtx(() => _cache[5] || (_cache[5] = [ + createTextVNode("Unauthorized") + ])), + _: 1 + }), + createVNode(_sfc_main$4, { + variant: "primary", + onClick: ($event) => startLink(id) + }, { + default: withCtx(() => [ + createVNode(unref(IconLink)), + _cache[6] || (_cache[6] = createTextVNode("Link device ")) + ]), + _: 2 + }, 1032, ["onClick"]) + ], 64)), + remote.pinlink.uuid == id ? (openBlock(), createBlock(AlertComp, { + key: 2, + type: "info" + }, { + default: withCtx(() => [ + createTextVNode("One time pin: " + toDisplayString(remote.pinlink.pin), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]); + }), 128)) : (openBlock(), createElementBlock("div", _hoisted_9, _cache[7] || (_cache[7] = [ + createBaseVNode("em", { class: "text-slate-300" }, "No remote devices", -1) + ]))), + createVNode(_sfc_main$5, { + ref_key: "pinDialog", + ref: pinDialog + }, { + content: withCtx(() => [ + createBaseVNode("div", _hoisted_10, [ + _cache[8] || (_cache[8] = createBaseVNode("h3", null, "Pin code", -1)), + createBaseVNode("span", _hoisted_11, toDisplayString(remote.pinlink.pin), 1) + ]) + ]), + _: 1 + }, 512) + ]) + ]); + }; + } +}; +const ServerView = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-f4165abd"]]); +var Ni = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}; +function Ci(E) { + return E && E.__esModule && Object.prototype.hasOwnProperty.call(E, "default") ? E.default : E; +} +var wi = { exports: {} }; +(function(E, q) { + (function(A, m) { + var F = "1.0.37", M = "", I = "?", R = "function", V = "undefined", ii = "object", j = "string", li = "major", e = "model", a = "name", i = "type", o = "vendor", t = "version", v = "architecture", B = "console", n = "mobile", b = "tablet", h = "smarttv", N = "wearable", ei = "embedded", oi = 500, G = "Amazon", D = "Apple", di = "ASUS", mi = "BlackBerry", T = "Browser", H = "Chrome", yi = "Edge", X = "Firefox", Y = "Google", ui = "Huawei", ai = "LG", ti = "Microsoft", pi = "Motorola", K = "Opera", Z = "Samsung", hi = "Sharp", J = "Sony", ri = "Xiaomi", si = "Zebra", fi = "Facebook", vi = "Chromium OS", gi = "Mac OS", Ti = function(c, l) { + var s = {}; + for (var d in c) + l[d] && l[d].length % 2 === 0 ? s[d] = l[d].concat(c[d]) : s[d] = c[d]; + return s; + }, Q = function(c) { + for (var l = {}, s = 0; s < c.length; s++) + l[c[s].toUpperCase()] = c[s]; + return l; + }, Ei = function(c, l) { + return typeof c === j ? U(l).indexOf(U(c)) !== -1 : false; + }, U = function(c) { + return c.toLowerCase(); + }, _i = function(c) { + return typeof c === j ? c.replace(/[^\d\.]/g, M).split(".")[0] : m; + }, ni = function(c, l) { + if (typeof c === j) + return c = c.replace(/^\s\s*/, M), typeof l === V ? c : c.substring(0, oi); + }, L = function(c, l) { + for (var s = 0, d, y, O, w, r, k; s < l.length && !r; ) { + var ci = l[s], xi = l[s + 1]; + for (d = y = 0; d < ci.length && !r && ci[d]; ) + if (r = ci[d++].exec(c), r) + for (O = 0; O < xi.length; O++) + k = r[++y], w = xi[O], typeof w === ii && w.length > 0 ? w.length === 2 ? typeof w[1] == R ? this[w[0]] = w[1].call(this, k) : this[w[0]] = w[1] : w.length === 3 ? typeof w[1] === R && !(w[1].exec && w[1].test) ? this[w[0]] = k ? w[1].call(this, k, w[2]) : m : this[w[0]] = k ? k.replace(w[1], w[2]) : m : w.length === 4 && (this[w[0]] = k ? w[3].call(this, k.replace(w[1], w[2])) : m) : this[w] = k || m; + s += 2; + } + }, bi = function(c, l) { + for (var s in l) + if (typeof l[s] === ii && l[s].length > 0) { + for (var d = 0; d < l[s].length; d++) + if (Ei(l[s][d], c)) + return s === I ? m : s; + } else if (Ei(l[s], c)) + return s === I ? m : s; + return c; + }, Mi = { + "1.0": "/8", + "1.2": "/1", + "1.3": "/3", + "2.0": "/412", + "2.0.2": "/416", + "2.0.3": "/417", + "2.0.4": "/419", + "?": "/" + }, Oi = { + ME: "4.90", + "NT 3.11": "NT3.51", + "NT 4.0": "NT4.0", + 2e3: "NT 5.0", + XP: ["NT 5.1", "NT 5.2"], + Vista: "NT 6.0", + 7: "NT 6.1", + 8: "NT 6.2", + "8.1": "NT 6.3", + 10: ["NT 6.4", "NT 10.0"], + RT: "ARM" + }, ki = { + browser: [ + [ + /\b(?:crmo|crios)\/([\w\.]+)/i + // Chrome for Android/iOS + ], + [t, [a, "Chrome"]], + [ + /edg(?:e|ios|a)?\/([\w\.]+)/i + // Microsoft Edge + ], + [t, [a, "Edge"]], + [ + // Presto based + /(opera mini)\/([-\w\.]+)/i, + // Opera Mini + /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, + // Opera Mobi/Tablet + /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i + // Opera + ], + [a, t], + [ + /opios[\/ ]+([\w\.]+)/i + // Opera mini on iphone >= 8.0 + ], + [t, [a, K + " Mini"]], + [ + /\bopr\/([\w\.]+)/i + // Opera Webkit + ], + [t, [a, K]], + [ + // Mixed + /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i + // Baidu + ], + [t, [a, "Baidu"]], + [ + /(kindle)\/([\w\.]+)/i, + // Kindle + /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, + // Lunascape/Maxthon/Netfront/Jasmine/Blazer + // Trident based + /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, + // Avant/IEMobile/SlimBrowser + /(?:ms|\()(ie) ([\w\.]+)/i, + // Internet Explorer + // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon + /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, + // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ + /(heytap|ovi)browser\/([\d\.]+)/i, + // Heytap/Ovi + /(weibo)__([\d\.]+)/i + // Weibo + ], + [a, t], + [ + /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i + // UCBrowser + ], + [t, [a, "UC" + T]], + [ + /microm.+\bqbcore\/([\w\.]+)/i, + // WeChat Desktop for Windows Built-in Browser + /\bqbcore\/([\w\.]+).+microm/i, + /micromessenger\/([\w\.]+)/i + // WeChat + ], + [t, [a, "WeChat"]], + [ + /konqueror\/([\w\.]+)/i + // Konqueror + ], + [t, [a, "Konqueror"]], + [ + /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i + // IE11 + ], + [t, [a, "IE"]], + [ + /ya(?:search)?browser\/([\w\.]+)/i + // Yandex + ], + [t, [a, "Yandex"]], + [ + /slbrowser\/([\w\.]+)/i + // Smart Lenovo Browser + ], + [t, [a, "Smart Lenovo " + T]], + [ + /(avast|avg)\/([\w\.]+)/i + // Avast/AVG Secure Browser + ], + [[a, /(.+)/, "$1 Secure " + T], t], + [ + /\bfocus\/([\w\.]+)/i + // Firefox Focus + ], + [t, [a, X + " Focus"]], + [ + /\bopt\/([\w\.]+)/i + // Opera Touch + ], + [t, [a, K + " Touch"]], + [ + /coc_coc\w+\/([\w\.]+)/i + // Coc Coc Browser + ], + [t, [a, "Coc Coc"]], + [ + /dolfin\/([\w\.]+)/i + // Dolphin + ], + [t, [a, "Dolphin"]], + [ + /coast\/([\w\.]+)/i + // Opera Coast + ], + [t, [a, K + " Coast"]], + [ + /miuibrowser\/([\w\.]+)/i + // MIUI Browser + ], + [t, [a, "MIUI " + T]], + [ + /fxios\/([-\w\.]+)/i + // Firefox for iOS + ], + [t, [a, X]], + [ + /\bqihu|(qi?ho?o?|360)browser/i + // 360 + ], + [[a, "360 " + T]], + [ + /(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i + ], + [[a, /(.+)/, "$1 " + T], t], + [ + // Oculus/Sailfish/HuaweiBrowser/VivoBrowser + /samsungbrowser\/([\w\.]+)/i + // Samsung Internet + ], + [t, [a, Z + " Internet"]], + [ + /(comodo_dragon)\/([\w\.]+)/i + // Comodo Dragon + ], + [[a, /_/g, " "], t], + [ + /metasr[\/ ]?([\d\.]+)/i + // Sogou Explorer + ], + [t, [a, "Sogou Explorer"]], + [ + /(sogou)mo\w+\/([\d\.]+)/i + // Sogou Mobile + ], + [[a, "Sogou Mobile"], t], + [ + /(electron)\/([\w\.]+) safari/i, + // Electron-based App + /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, + // Tesla + /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i + // QQBrowser/2345 Browser + ], + [a, t], + [ + /(lbbrowser)/i, + // LieBao Browser + /\[(linkedin)app\]/i + // LinkedIn App for iOS & Android + ], + [a], + [ + // WebView + /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i + // Facebook App for iOS & Android + ], + [[a, fi], t], + [ + /(Klarna)\/([\w\.]+)/i, + // Klarna Shopping Browser for iOS & Android + /(kakao(?:talk|story))[\/ ]([\w\.]+)/i, + // Kakao App + /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, + // Naver InApp + /safari (line)\/([\w\.]+)/i, + // Line App for iOS + /\b(line)\/([\w\.]+)\/iab/i, + // Line App for Android + /(alipay)client\/([\w\.]+)/i, + // Alipay + /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i + // Chromium/Instagram/Snapchat + ], + [a, t], + [ + /\bgsa\/([\w\.]+) .*safari\//i + // Google Search Appliance on iOS + ], + [t, [a, "GSA"]], + [ + /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i + // TikTok + ], + [t, [a, "TikTok"]], + [ + /headlesschrome(?:\/([\w\.]+)| )/i + // Chrome Headless + ], + [t, [a, H + " Headless"]], + [ + / wv\).+(chrome)\/([\w\.]+)/i + // Chrome WebView + ], + [[a, H + " WebView"], t], + [ + /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i + // Android Browser + ], + [t, [a, "Android " + T]], + [ + /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i + // Chrome/OmniWeb/Arora/Tizen/Nokia + ], + [a, t], + [ + /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i + // Mobile Safari + ], + [t, [a, "Mobile Safari"]], + [ + /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i + // Safari & Safari Mobile + ], + [t, a], + [ + /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i + // Safari < 3.0 + ], + [a, [t, bi, Mi]], + [ + /(webkit|khtml)\/([\w\.]+)/i + ], + [a, t], + [ + // Gecko based + /(navigator|netscape\d?)\/([-\w\.]+)/i + // Netscape + ], + [[a, "Netscape"], t], + [ + /mobile vr; rv:([\w\.]+)\).+firefox/i + // Firefox Reality + ], + [t, [a, X + " Reality"]], + [ + /ekiohf.+(flow)\/([\w\.]+)/i, + // Flow + /(swiftfox)/i, + // Swiftfox + /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, + // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar + /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, + // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix + /(firefox)\/([\w\.]+)/i, + // Other Firefox-based + /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, + // Mozilla + // Other + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser + /(links) \(([\w\.]+)/i, + // Links + /panasonic;(viera)/i + // Panasonic Viera + ], + [a, t], + [ + /(cobalt)\/([\w\.]+)/i + // Cobalt + ], + [a, [t, /master.|lts./, ""]] + ], + cpu: [ + [ + /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i + // AMD64 (x64) + ], + [[v, "amd64"]], + [ + /(ia32(?=;))/i + // IA32 (quicktime) + ], + [[v, U]], + [ + /((?:i[346]|x)86)[;\)]/i + // IA32 (x86) + ], + [[v, "ia32"]], + [ + /\b(aarch64|arm(v?8e?l?|_?64))\b/i + // ARM64 + ], + [[v, "arm64"]], + [ + /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i + // ARMHF + ], + [[v, "armhf"]], + [ + // PocketPC mistakenly identified as PowerPC + /windows (ce|mobile); ppc;/i + ], + [[v, "arm"]], + [ + /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i + // PowerPC + ], + [[v, /ower/, M, U]], + [ + /(sun4\w)[;\)]/i + // SPARC + ], + [[v, "sparc"]], + [ + /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i + // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC + ], + [[v, U]] + ], + device: [ + [ + ////////////////////////// + // MOBILES & TABLETS + ///////////////////////// + // Samsung + /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i + ], + [e, [o, Z], [i, b]], + [ + /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i, + /samsung[- ]([-\w]+)/i, + /sec-(sgh\w+)/i + ], + [e, [o, Z], [i, n]], + [ + // Apple + /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i + // iPod/iPhone + ], + [e, [o, D], [i, n]], + [ + /\((ipad);[-\w\),; ]+apple/i, + // iPad + /applecoremedia\/[\w\.]+ \((ipad)/i, + /\b(ipad)\d\d?,\d\d?[;\]].+ios/i + ], + [e, [o, D], [i, b]], + [ + /(macintosh);/i + ], + [e, [o, D]], + [ + // Sharp + /\b(sh-?[altvz]?\d\d[a-ekm]?)/i + ], + [e, [o, hi], [i, n]], + [ + // Huawei + /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i + ], + [e, [o, ui], [i, b]], + [ + /(?:huawei|honor)([-\w ]+)[;\)]/i, + /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i + ], + [e, [o, ui], [i, n]], + [ + // Xiaomi + /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, + // Xiaomi POCO + /\b; (\w+) build\/hm\1/i, + // Xiaomi Hongmi 'numeric' models + /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, + // Xiaomi Hongmi + /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, + // Xiaomi Redmi + /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, + // Xiaomi Redmi 'numeric' models + /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i + // Xiaomi Mi + ], + [[e, /_/g, " "], [o, ri], [i, n]], + [ + /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, + // Redmi Pad + /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i + // Mi Pad tablets + ], + [[e, /_/g, " "], [o, ri], [i, b]], + [ + // OPPO + /; (\w+) bui.+ oppo/i, + /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i + ], + [e, [o, "OPPO"], [i, n]], + [ + // Vivo + /vivo (\w+)(?: bui|\))/i, + /\b(v[12]\d{3}\w?[at])(?: bui|;)/i + ], + [e, [o, "Vivo"], [i, n]], + [ + // Realme + /\b(rmx[1-3]\d{3})(?: bui|;|\))/i + ], + [e, [o, "Realme"], [i, n]], + [ + // Motorola + /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, + /\bmot(?:orola)?[- ](\w*)/i, + /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i + ], + [e, [o, pi], [i, n]], + [ + /\b(mz60\d|xoom[2 ]{0,2}) build\//i + ], + [e, [o, pi], [i, b]], + [ + // LG + /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i + ], + [e, [o, ai], [i, b]], + [ + /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, + /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, + /\blg-?([\d\w]+) bui/i + ], + [e, [o, ai], [i, n]], + [ + // Lenovo + /(ideatab[-\w ]+)/i, + /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i + ], + [e, [o, "Lenovo"], [i, b]], + [ + // Nokia + /(?:maemo|nokia).*(n900|lumia \d+)/i, + /nokia[-_ ]?([-\w\.]*)/i + ], + [[e, /_/g, " "], [o, "Nokia"], [i, n]], + [ + // Google + /(pixel c)\b/i + // Google Pixel C + ], + [e, [o, Y], [i, b]], + [ + /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i + // Google Pixel + ], + [e, [o, Y], [i, n]], + [ + // Sony + /droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i + ], + [e, [o, J], [i, n]], + [ + /sony tablet [ps]/i, + /\b(?:sony)?sgp\w+(?: bui|\))/i + ], + [[e, "Xperia Tablet"], [o, J], [i, b]], + [ + // OnePlus + / (kb2005|in20[12]5|be20[12][59])\b/i, + /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i + ], + [e, [o, "OnePlus"], [i, n]], + [ + // Amazon + /(alexa)webm/i, + /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, + // Kindle Fire without Silk / Echo Show + /(kf[a-z]+)( bui|\)).+silk\//i + // Kindle Fire HD + ], + [e, [o, G], [i, b]], + [ + /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i + // Fire Phone + ], + [[e, /(.+)/g, "Fire Phone $1"], [o, G], [i, n]], + [ + // BlackBerry + /(playbook);[-\w\),; ]+(rim)/i + // BlackBerry PlayBook + ], + [e, o, [i, b]], + [ + /\b((?:bb[a-f]|st[hv])100-\d)/i, + /\(bb10; (\w+)/i + // BlackBerry 10 + ], + [e, [o, mi], [i, n]], + [ + // Asus + /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i + ], + [e, [o, di], [i, b]], + [ + / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i + ], + [e, [o, di], [i, n]], + [ + // HTC + /(nexus 9)/i + // HTC Nexus 9 + ], + [e, [o, "HTC"], [i, b]], + [ + /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, + // HTC + // ZTE + /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, + /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i + // Alcatel/GeeksPhone/Nexian/Panasonic/Sony + ], + [o, [e, /_/g, " "], [i, n]], + [ + // Acer + /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i + ], + [e, [o, "Acer"], [i, b]], + [ + // Meizu + /droid.+; (m[1-5] note) bui/i, + /\bmz-([-\w]{2,})/i + ], + [e, [o, "Meizu"], [i, n]], + [ + // Ulefone + /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i + ], + [e, [o, "Ulefone"], [i, n]], + [ + // MIXED + /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i, + // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron + /(hp) ([\w ]+\w)/i, + // HP iPAQ + /(asus)-?(\w+)/i, + // Asus + /(microsoft); (lumia[\w ]+)/i, + // Microsoft Lumia + /(lenovo)[-_ ]?([-\w]+)/i, + // Lenovo + /(jolla)/i, + // Jolla + /(oppo) ?([\w ]+) bui/i + // OPPO + ], + [o, e, [i, n]], + [ + /(kobo)\s(ereader|touch)/i, + // Kobo + /(archos) (gamepad2?)/i, + // Archos + /(hp).+(touchpad(?!.+tablet)|tablet)/i, + // HP TouchPad + /(kindle)\/([\w\.]+)/i, + // Kindle + /(nook)[\w ]+build\/(\w+)/i, + // Nook + /(dell) (strea[kpr\d ]*[\dko])/i, + // Dell Streak + /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, + // Le Pan Tablets + /(trinity)[- ]*(t\d{3}) bui/i, + // Trinity Tablets + /(gigaset)[- ]+(q\w{1,9}) bui/i, + // Gigaset Tablets + /(vodafone) ([\w ]+)(?:\)| bui)/i + // Vodafone + ], + [o, e, [i, b]], + [ + /(surface duo)/i + // Surface Duo + ], + [e, [o, ti], [i, b]], + [ + /droid [\d\.]+; (fp\du?)(?: b|\))/i + // Fairphone + ], + [e, [o, "Fairphone"], [i, n]], + [ + /(u304aa)/i + // AT&T + ], + [e, [o, "AT&T"], [i, n]], + [ + /\bsie-(\w*)/i + // Siemens + ], + [e, [o, "Siemens"], [i, n]], + [ + /\b(rct\w+) b/i + // RCA Tablets + ], + [e, [o, "RCA"], [i, b]], + [ + /\b(venue[\d ]{2,7}) b/i + // Dell Venue Tablets + ], + [e, [o, "Dell"], [i, b]], + [ + /\b(q(?:mv|ta)\w+) b/i + // Verizon Tablet + ], + [e, [o, "Verizon"], [i, b]], + [ + /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i + // Barnes & Noble Tablet + ], + [e, [o, "Barnes & Noble"], [i, b]], + [ + /\b(tm\d{3}\w+) b/i + ], + [e, [o, "NuVision"], [i, b]], + [ + /\b(k88) b/i + // ZTE K Series Tablet + ], + [e, [o, "ZTE"], [i, b]], + [ + /\b(nx\d{3}j) b/i + // ZTE Nubia + ], + [e, [o, "ZTE"], [i, n]], + [ + /\b(gen\d{3}) b.+49h/i + // Swiss GEN Mobile + ], + [e, [o, "Swiss"], [i, n]], + [ + /\b(zur\d{3}) b/i + // Swiss ZUR Tablet + ], + [e, [o, "Swiss"], [i, b]], + [ + /\b((zeki)?tb.*\b) b/i + // Zeki Tablets + ], + [e, [o, "Zeki"], [i, b]], + [ + /\b([yr]\d{2}) b/i, + /\b(dragon[- ]+touch |dt)(\w{5}) b/i + // Dragon Touch Tablet + ], + [[o, "Dragon Touch"], e, [i, b]], + [ + /\b(ns-?\w{0,9}) b/i + // Insignia Tablets + ], + [e, [o, "Insignia"], [i, b]], + [ + /\b((nxa|next)-?\w{0,9}) b/i + // NextBook Tablets + ], + [e, [o, "NextBook"], [i, b]], + [ + /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i + // Voice Xtreme Phones + ], + [[o, "Voice"], e, [i, n]], + [ + /\b(lvtel\-)?(v1[12]) b/i + // LvTel Phones + ], + [[o, "LvTel"], e, [i, n]], + [ + /\b(ph-1) /i + // Essential PH-1 + ], + [e, [o, "Essential"], [i, n]], + [ + /\b(v(100md|700na|7011|917g).*\b) b/i + // Envizen Tablets + ], + [e, [o, "Envizen"], [i, b]], + [ + /\b(trio[-\w\. ]+) b/i + // MachSpeed Tablets + ], + [e, [o, "MachSpeed"], [i, b]], + [ + /\btu_(1491) b/i + // Rotor Tablets + ], + [e, [o, "Rotor"], [i, b]], + [ + /(shield[\w ]+) b/i + // Nvidia Shield Tablets + ], + [e, [o, "Nvidia"], [i, b]], + [ + /(sprint) (\w+)/i + // Sprint Phones + ], + [o, e, [i, n]], + [ + /(kin\.[onetw]{3})/i + // Microsoft Kin + ], + [[e, /\./g, " "], [o, ti], [i, n]], + [ + /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i + // Zebra + ], + [e, [o, si], [i, b]], + [ + /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i + ], + [e, [o, si], [i, n]], + [ + /////////////////// + // SMARTTVS + /////////////////// + /smart-tv.+(samsung)/i + // Samsung + ], + [o, [i, h]], + [ + /hbbtv.+maple;(\d+)/i + ], + [[e, /^/, "SmartTV"], [o, Z], [i, h]], + [ + /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i + // LG SmartTV + ], + [[o, ai], [i, h]], + [ + /(apple) ?tv/i + // Apple TV + ], + [o, [e, D + " TV"], [i, h]], + [ + /crkey/i + // Google Chromecast + ], + [[e, H + "cast"], [o, Y], [i, h]], + [ + /droid.+aft(\w+)( bui|\))/i + // Fire TV + ], + [e, [o, G], [i, h]], + [ + /\(dtv[\);].+(aquos)/i, + /(aquos-tv[\w ]+)\)/i + // Sharp + ], + [e, [o, hi], [i, h]], + [ + /(bravia[\w ]+)( bui|\))/i + // Sony + ], + [e, [o, J], [i, h]], + [ + /(mitv-\w{5}) bui/i + // Xiaomi + ], + [e, [o, ri], [i, h]], + [ + /Hbbtv.*(technisat) (.*);/i + // TechniSAT + ], + [o, e, [i, h]], + [ + /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, + // Roku + /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i + // HbbTV devices + ], + [[o, ni], [e, ni], [i, h]], + [ + /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i + // SmartTV from Unidentified Vendors + ], + [[i, h]], + [ + /////////////////// + // CONSOLES + /////////////////// + /(ouya)/i, + // Ouya + /(nintendo) ([wids3utch]+)/i + // Nintendo + ], + [o, e, [i, B]], + [ + /droid.+; (shield) bui/i + // Nvidia + ], + [e, [o, "Nvidia"], [i, B]], + [ + /(playstation [345portablevi]+)/i + // Playstation + ], + [e, [o, J], [i, B]], + [ + /\b(xbox(?: one)?(?!; xbox))[\); ]/i + // Microsoft Xbox + ], + [e, [o, ti], [i, B]], + [ + /////////////////// + // WEARABLES + /////////////////// + /((pebble))app/i + // Pebble + ], + [o, e, [i, N]], + [ + /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i + // Apple Watch + ], + [e, [o, D], [i, N]], + [ + /droid.+; (glass) \d/i + // Google Glass + ], + [e, [o, Y], [i, N]], + [ + /droid.+; (wt63?0{2,3})\)/i + ], + [e, [o, si], [i, N]], + [ + /(quest( 2| pro)?)/i + // Oculus Quest + ], + [e, [o, fi], [i, N]], + [ + /////////////////// + // EMBEDDED + /////////////////// + /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i + // Tesla + ], + [o, [i, ei]], + [ + /(aeobc)\b/i + // Echo Dot + ], + [e, [o, G], [i, ei]], + [ + //////////////////// + // MIXED (GENERIC) + /////////////////// + /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i + // Android Phones from Unidentified Vendors + ], + [e, [i, n]], + [ + /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i + // Android Tablets from Unidentified Vendors + ], + [e, [i, b]], + [ + /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i + // Unidentifiable Tablet + ], + [[i, b]], + [ + /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i + // Unidentifiable Mobile + ], + [[i, n]], + [ + /(android[-\w\. ]{0,9});.+buil/i + // Generic Android Device + ], + [e, [o, "Generic"]] + ], + engine: [ + [ + /windows.+ edge\/([\w\.]+)/i + // EdgeHTML + ], + [t, [a, yi + "HTML"]], + [ + /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i + // Blink + ], + [t, [a, "Blink"]], + [ + /(presto)\/([\w\.]+)/i, + // Presto + /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, + // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna + /ekioh(flow)\/([\w\.]+)/i, + // Flow + /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, + // KHTML/Tasman/Links + /(icab)[\/ ]([23]\.[\d\.]+)/i, + // iCab + /\b(libweb)/i + ], + [a, t], + [ + /rv\:([\w\.]{1,9})\b.+(gecko)/i + // Gecko + ], + [t, a] + ], + os: [ + [ + // Windows + /microsoft (windows) (vista|xp)/i + // Windows (iTunes) + ], + [a, t], + [ + /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i + // Windows Phone + ], + [a, [t, bi, Oi]], + [ + /windows nt 6\.2; (arm)/i, + // Windows RT + /windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i, + /(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i + ], + [[t, bi, Oi], [a, "Windows"]], + [ + // iOS/macOS + /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, + // iOS + /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i, + /cfnetwork\/.+darwin/i + ], + [[t, /_/g, "."], [a, "iOS"]], + [ + /(mac os x) ?([\w\. ]*)/i, + /(macintosh|mac_powerpc\b)(?!.+haiku)/i + // Mac OS + ], + [[a, gi], [t, /_/g, "."]], + [ + // Mobile OSes + /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i + // Android-x86/HarmonyOS + ], + [t, a], + [ + // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS + /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, + /(blackberry)\w*\/([\w\.]*)/i, + // Blackberry + /(tizen|kaios)[\/ ]([\w\.]+)/i, + // Tizen/KaiOS + /\((series40);/i + // Series 40 + ], + [a, t], + [ + /\(bb(10);/i + // BlackBerry 10 + ], + [t, [a, mi]], + [ + /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i + // Symbian + ], + [t, [a, "Symbian"]], + [ + /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i + // Firefox OS + ], + [t, [a, X + " OS"]], + [ + /web0s;.+rt(tv)/i, + /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i + // WebOS + ], + [t, [a, "webOS"]], + [ + /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i + // watchOS + ], + [t, [a, "watchOS"]], + [ + // Google Chromecast + /crkey\/([\d\.]+)/i + // Google Chromecast + ], + [t, [a, H + "cast"]], + [ + /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i + // Chromium OS + ], + [[a, vi], t], + [ + // Smart TVs + /panasonic;(viera)/i, + // Panasonic Viera + /(netrange)mmh/i, + // Netrange + /(nettv)\/(\d+\.[\w\.]+)/i, + // NetTV + // Console + /(nintendo|playstation) ([wids345portablevuch]+)/i, + // Nintendo/Playstation + /(xbox); +xbox ([^\);]+)/i, + // Microsoft Xbox (360, One, X, S, Series X, Series S) + // Other + /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, + // Joli/Palm + /(mint)[\/\(\) ]?(\w*)/i, + // Mint + /(mageia|vectorlinux)[; ]/i, + // Mageia/VectorLinux + /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, + // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire + /(hurd|linux) ?([\w\.]*)/i, + // Hurd/Linux + /(gnu) ?([\w\.]*)/i, + // GNU + /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, + // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly + /(haiku) (\w+)/i + // Haiku + ], + [a, t], + [ + /(sunos) ?([\w\.\d]*)/i + // Solaris + ], + [[a, "Solaris"], t], + [ + /((?:open)?solaris)[-\/ ]?([\w\.]*)/i, + // Solaris + /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, + // AIX + /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, + // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS + /(unix) ?([\w\.]*)/i + // UNIX + ], + [a, t] + ] + }, g = function(c, l) { + if (typeof c === ii && (l = c, c = m), !(this instanceof g)) + return new g(c, l).getResult(); + var s = typeof A !== V && A.navigator ? A.navigator : m, d = c || (s && s.userAgent ? s.userAgent : M), y = s && s.userAgentData ? s.userAgentData : m, O = l ? Ti(ki, l) : ki, w = s && s.userAgent == d; + return this.getBrowser = function() { + var r = {}; + return r[a] = m, r[t] = m, L.call(r, d, O.browser), r[li] = _i(r[t]), w && s && s.brave && typeof s.brave.isBrave == R && (r[a] = "Brave"), r; + }, this.getCPU = function() { + var r = {}; + return r[v] = m, L.call(r, d, O.cpu), r; + }, this.getDevice = function() { + var r = {}; + return r[o] = m, r[e] = m, r[i] = m, L.call(r, d, O.device), w && !r[i] && y && y.mobile && (r[i] = n), w && r[e] == "Macintosh" && s && typeof s.standalone !== V && s.maxTouchPoints && s.maxTouchPoints > 2 && (r[e] = "iPad", r[i] = b), r; + }, this.getEngine = function() { + var r = {}; + return r[a] = m, r[t] = m, L.call(r, d, O.engine), r; + }, this.getOS = function() { + var r = {}; + return r[a] = m, r[t] = m, L.call(r, d, O.os), w && !r[a] && y && y.platform != "Unknown" && (r[a] = y.platform.replace(/chrome os/i, vi).replace(/macos/i, gi)), r; + }, this.getResult = function() { + return { + ua: this.getUA(), + browser: this.getBrowser(), + engine: this.getEngine(), + os: this.getOS(), + device: this.getDevice(), + cpu: this.getCPU() + }; + }, this.getUA = function() { + return d; + }, this.setUA = function(r) { + return d = typeof r === j && r.length > oi ? ni(r, oi) : r, this; + }, this.setUA(d), this; + }; + g.VERSION = F, g.BROWSER = Q([a, t, li]), g.CPU = Q([v]), g.DEVICE = Q([e, o, i, B, n, h, b, N, ei]), g.ENGINE = g.OS = Q([a, t]), E.exports && (q = E.exports = g), q.UAParser = g; + var C = typeof A !== V && (A.jQuery || A.Zepto); + if (C && !C.ua) { + var $ = new g(); + C.ua = $.getResult(), C.ua.get = function() { + return $.getUA(); + }, C.ua.set = function(c) { + $.setUA(c); + var l = $.getResult(); + for (var s in l) + C.ua[s] = l[s]; + }; + } + })(typeof window == "object" ? window : Ni); +})(wi, wi.exports); +var Pi = wi.exports; +const Bi = /* @__PURE__ */ Ci(Pi), S = { + CONSOLE: "console", + DESKTOP: void 0, + EMBEDDED: "embedded", + MOBILE: "mobile", + SMART_TV: "smarttv", + TABLET: "tablet", + WEARABLE: "wearable" +}, _ = { + ANDROID: "Android", + IOS: "iOS", + LINUX: "Linux", + MAC_OS: "Mac OS", + WINDOWS_PHONE: "Windows Phone", + WINDOWS: "Windows" +}, p = { + CHROME: "Chrome", + CHROMIUM: "Chromium", + EDGE: "Edge", + FIREFOX: "Firefox", + IE: "IE", + INTERNET_EXPLORER: "Internet Explorer", + MIUI: "MIUI Browser", + MOBILE_SAFARI: "Mobile Safari", + OPERA: "Opera", + SAFARI: "Safari", + SAMSUNG_BROWSER: "Samsung Browser", + YANDEX: "Yandex" +}, z = new Bi(), f = z.getDevice(), x = z.getOS(), u = z.getBrowser(); +z.getEngine(); +const P = z.getUA(), W = () => /iPad/.test(P), Ai = () => x.name === _.WINDOWS && x.version === "10" && P.indexOf("Edg/") !== -1; +x.name === _.ANDROID; +u.name === p.CHROME; +u.name === p.CHROMIUM; +f.type === S.CONSOLE; +f.type === S.DESKTOP; +u.name === p.EDGE || Ai(); +Ai(); +u.name === p.EDGE; +/electron/.test(P.toLowerCase()); +f.type === S.EMBEDDED; +u.name === p.FIREFOX; +u.name === p.INTERNET_EXPLORER || u.name === p.IE; +x.name === _.IOS || W(); +x.name === _.LINUX; +x.name === _.MAC_OS; +u.name === p.MIUI; +f.type === S.MOBILE || f.type === S.TABLET || W(); +f.type === S.MOBILE; +u.name === p.MOBILE_SAFARI || W(); +u.name === p.OPERA; +u.name === p.SAFARI || u.name === p.MOBILE_SAFARI; +u.name === p.SAMSUNG_BROWSER; +f.type === S.SMART_TV; +f.type === S.TABLET || W(); +f.type === S.WEARABLE; +x.name === _.WINDOWS; +x.name === _.WINDOWS_PHONE; +u.name === p.YANDEX; +const fe = () => f.model, ve = () => f.type || "desktop", ge = () => f.vendor; +const _hoisted_1$1 = { class: "server-overview" }; +const _hoisted_2$1 = { class: "grid" }; +const _hoisted_3$1 = { class: "mcrm-block block__light grid gap-4" }; +const _hoisted_4$1 = { class: "text-lg flex gap-4 items-center justify-between" }; +const _hoisted_5 = { class: "flex gap-4" }; +const _hoisted_6 = { class: "grid gap-2" }; +const _hoisted_7 = { + key: 0, + class: "grid grid-cols-[2rem_1fr] gap-2" +}; +const _hoisted_8 = { class: "grid gap-4 w-64" }; +const _sfc_main$1 = { + __name: "RemoteView", + setup(__props) { + const device = useDeviceStore(); + const linkPinDialog = ref(); + const server = reactive({ + host: "", + status: false, + link: false, + inputPin: "", + encryptedKey: "", + key: "" + }); + onMounted(async () => { + server.host = window.location.host; + }); + onUpdated(() => { + if (!server.status) checkServerStatus(); + }); + async function checkServerStatus(request = true) { + const status = await device.remoteCheckServerAccess(); + server.status = status; + if (status === "unlinked" || status === "unauthorized") { + if (request) requestAccess(); + return true; + } + if (!device.key()) { + server.status = "unauthorized"; + return true; + } + const handshake = await device.remoteHandshake(device.key()); + if (handshake) server.key = device.key(); + else { + device.removeDeviceKey(); + server.status = "unlinked"; + if (request) requestAccess(); + } + return true; + } + function requestAccess() { + let deviceName = `${ge() ? ge() : "Unknown"} ${ge() ? fe() : ve()}`; + device.remoteRequestServerAccess(deviceName, ve()).then((data) => { + if (data.data) server.status = data.data, pingLink(); + }); + } + function pingLink() { + server.link = "checking"; + device.remotePingLink((encryptedKey) => { + server.link = true; + server.encryptedKey = encryptedKey; + linkPinDialog.value.toggleDialog(true); + }); + } + async function decryptKey() { + const decryptedKey = decryptAES(server.inputPin, server.encryptedKey); + const handshake = await device.remoteHandshake(decryptedKey); + if (handshake) { + device.setDeviceKey(decryptedKey); + server.key = decryptedKey; + linkPinDialog.value.toggleDialog(false); + server.status = "authorized"; + } + } + function disonnectFromServer() { + axios.post(appUrl() + "/device/link/remove", AuthCall({ uuid: device.uuid() })).then((data) => { + if (data.data) checkServerStatus(false); + }); + } + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$1, [ + createVNode(AlertComp, { type: "info" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_2$1, [ + _cache[6] || (_cache[6] = createBaseVNode("strong", null, "This is a remote device.", -1)), + createBaseVNode("em", null, "UUID: " + toDisplayString(unref(device).uuid()), 1) + ]) + ]), + _: 1 + }), + createBaseVNode("div", _hoisted_3$1, [ + createBaseVNode("h4", _hoisted_4$1, [ + createBaseVNode("span", _hoisted_5, [ + createVNode(unref(IconServer)), + _cache[7] || (_cache[7] = createTextVNode("Server")) + ]), + createVNode(_sfc_main$4, { + variant: "primary", + onClick: _cache[0] || (_cache[0] = ($event) => checkServerStatus()) + }, { + default: withCtx(() => [ + createVNode(unref(IconReload)) + ]), + _: 1 + }) + ]), + createBaseVNode("p", null, [ + _cache[8] || (_cache[8] = createTextVNode(" Connected to: ")), + createBaseVNode("strong", null, toDisplayString(server.host), 1) + ]), + server.status === "authorized" ? (openBlock(), createBlock(AlertComp, { + key: 0, + type: "success" + }, { + default: withCtx(() => _cache[9] || (_cache[9] = [ + createTextVNode("Authorized") + ])), + _: 1 + })) : createCommentVNode("", true), + server.status === "unlinked" ? (openBlock(), createBlock(AlertComp, { + key: 1, + type: "warning" + }, { + default: withCtx(() => _cache[10] || (_cache[10] = [ + createTextVNode("Not linked") + ])), + _: 1 + })) : createCommentVNode("", true), + server.status === "unauthorized" ? (openBlock(), createBlock(AlertComp, { + key: 2, + type: "info" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_6, [ + _cache[13] || (_cache[13] = createBaseVNode("strong", null, "Access requested", -1)), + _cache[14] || (_cache[14] = createBaseVNode("p", null, [ + createTextVNode(" Navigate to "), + createBaseVNode("em", { class: "font-semibold" }, "http://localhost:6970/devices"), + createTextVNode(" on your pc to authorize. ") + ], -1)), + server.link == "checking" ? (openBlock(), createElementBlock("div", _hoisted_7, [ + createVNode(unref(IconReload), { class: "animate-spin" }), + _cache[11] || (_cache[11] = createTextVNode(" Checking server for link... ")) + ])) : createCommentVNode("", true), + server.link === false ? (openBlock(), createBlock(_sfc_main$4, { + key: 1, + variant: "subtle", + onClick: _cache[1] || (_cache[1] = ($event) => pingLink()), + class: "w-fit" + }, { + default: withCtx(() => [ + createVNode(unref(IconReload)), + _cache[12] || (_cache[12] = createTextVNode("Check for server link ")) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]), + _: 1 + })) : createCommentVNode("", true), + server.status === "unauthorized" ? (openBlock(), createBlock(_sfc_main$4, { + key: 3, + variant: "primary", + onClick: _cache[2] || (_cache[2] = ($event) => requestAccess()) + }, { + default: withCtx(() => [ + createVNode(unref(IconKey)), + _cache[15] || (_cache[15] = createTextVNode(" Request access ")) + ]), + _: 1 + })) : createCommentVNode("", true), + server.status === "authorized" ? (openBlock(), createBlock(_sfc_main$4, { + key: 4, + variant: "danger", + onClick: _cache[3] || (_cache[3] = ($event) => disonnectFromServer()) + }, { + default: withCtx(() => [ + createVNode(unref(IconPlugConnectedX)), + _cache[16] || (_cache[16] = createTextVNode(" Disconnect ")) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + createVNode(_sfc_main$5, { + ref_key: "linkPinDialog", + ref: linkPinDialog + }, { + content: withCtx(() => [ + createBaseVNode("div", _hoisted_8, [ + _cache[18] || (_cache[18] = createBaseVNode("h3", null, "Server link pin:", -1)), + createBaseVNode("form", { + class: "grid gap-4", + onSubmit: _cache[5] || (_cache[5] = withModifiers(($event) => decryptKey(), ["prevent"])) + }, [ + withDirectives(createBaseVNode("input", { + class: "input", + id: "input-pin", + type: "text", + pattern: "[0-9]{4}", + "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => server.inputPin = $event) + }, null, 512), [ + [vModelText, server.inputPin] + ]), + createVNode(_sfc_main$4, { variant: "primary" }, { + default: withCtx(() => _cache[17] || (_cache[17] = [ + createTextVNode("Enter") + ])), + _: 1 + }) + ], 32) + ]) + ]), + _: 1 + }, 512) + ]); + }; + } +}; +const RemoteView = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-3109048f"]]); +const _hoisted_1 = { + id: "devices-view", + class: "panel" +}; +const _hoisted_2 = { class: "panel__title" }; +const _hoisted_3 = { class: "text-sm" }; +const _hoisted_4 = { class: "panel__content grid gap-8" }; +const _sfc_main = { + __name: "DevicesView", + setup(__props) { + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("h1", _hoisted_2, [ + _cache[0] || (_cache[0] = createTextVNode(" Devices ")), + createBaseVNode("span", _hoisted_3, toDisplayString(unref(isLocal)() ? "remote" : "servers"), 1) + ]), + createBaseVNode("div", _hoisted_4, [ + unref(isLocal)() ? (openBlock(), createBlock(ServerView, { key: 0 })) : (openBlock(), createBlock(RemoteView, { key: 1 })) + ]) + ]); + }; + } +}; +const DevicesView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-97929e31"]]); +export { + DevicesView as default +}; diff --git a/public/assets/DevicesView-Dw_Mls3X.css b/public/assets/DevicesView-Dw_Mls3X.css new file mode 100644 index 0000000..4735417 --- /dev/null +++ b/public/assets/DevicesView-Dw_Mls3X.css @@ -0,0 +1,87 @@ +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.alert[data-v-87f6de25] { + align-items: flex-start; + gap: calc(var(--spacing, .25rem) * 4); + border-radius: var(--radius-md, .375rem); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: color-mix(in oklab, var(--color-white, #fff) 10%, transparent); + background-color: color-mix(in oklab, var(--color-white, #fff) 10%, transparent); + padding: calc(var(--spacing, .25rem) * 4); + --tw-backdrop-blur: blur(var(--blur-md, 12px)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + grid-template-columns: 1rem 1fr; + display: grid; +} +.alert.alert__info[data-v-87f6de25] { + background-color: color-mix(in oklab, var(--color-sky-400, oklch(.746 .16 232.661)) 40%, transparent); + color: var(--color-sky-100, oklch(.951 .026 236.824)); +} +.alert.alert__success[data-v-87f6de25] { + background-color: color-mix(in oklab, var(--color-lime-400, oklch(.841 .238 128.85)) 10%, transparent); + color: var(--color-lime-400, oklch(.841 .238 128.85)); +} +.alert.alert__warning[data-v-87f6de25] { + background-color: color-mix(in oklab, var(--color-amber-400, oklch(.828 .189 84.429)) 10%, transparent); + color: var(--color-amber-400, oklch(.828 .189 84.429)); +} +.alert.alert__error[data-v-87f6de25] { + background-color: color-mix(in oklab, var(--color-rose-400, oklch(.712 .194 13.428)) 10%, transparent); + color: var(--color-rose-400, oklch(.712 .194 13.428)); +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.device-overview[data-v-f4165abd] { + align-content: flex-start; + gap: calc(var(--spacing, .25rem) * 4); + display: grid; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.server-overview[data-v-3109048f] { + align-content: flex-start; + gap: calc(var(--spacing, .25rem) * 4); + display: grid; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ + diff --git a/public/assets/DialogComp-Ba5-BUTe.js b/public/assets/DialogComp-Ba5-BUTe.js new file mode 100644 index 0000000..70496d5 --- /dev/null +++ b/public/assets/DialogComp-Ba5-BUTe.js @@ -0,0 +1,106 @@ +import { D as computed, c as createElementBlock, o as openBlock, v as renderSlot, q as normalizeClass, m as ref, b as onMounted, n as onUpdated, f as createBaseVNode, h as createVNode, w as withCtx, u as unref, E as IconX } from "./index-GNAKlyBz.js"; +const _hoisted_1$1 = ["href"]; +const _sfc_main$1 = { + __name: "ButtonComp", + props: { + href: String, + variant: String, + size: String + }, + setup(__props) { + const props = __props; + const classString = computed(() => { + let classes = "btn"; + if (props.variant) classes += ` btn__${props.variant}`; + if (props.size) classes += ` btn__${props.size}`; + return classes; + }); + return (_ctx, _cache) => { + return __props.href ? (openBlock(), createElementBlock("a", { + key: 0, + href: __props.href, + class: normalizeClass(classString.value) + }, [ + renderSlot(_ctx.$slots, "default") + ], 10, _hoisted_1$1)) : (openBlock(), createElementBlock("button", { + key: 1, + class: normalizeClass(classString.value) + }, [ + renderSlot(_ctx.$slots, "default") + ], 2)); + }; + } +}; +const _hoisted_1 = { class: "dialog-container" }; +const _sfc_main = { + __name: "DialogComp", + props: { + open: Boolean + }, + emits: ["onOpen", "onClose", "onToggle"], + setup(__props, { expose: __expose, emit: __emit }) { + const dialog = ref(null); + const openDialog = ref(); + const emit = __emit; + __expose({ toggleDialog }); + const props = __props; + onMounted(() => { + if (props.open === true) toggleDialog(props.open); + }); + onUpdated(() => { + if (props.open === true) toggleDialog(props.open); + }); + function toggleDialog(openToggle) { + if (openToggle) { + dialog.value.showModal(); + emit("onOpen"); + } else { + dialog.value.close(); + emit("onClose"); + } + openDialog.value = openToggle; + emit("onToggle"); + } + onMounted(() => { + openDialog.value = props.open; + if (dialog.value.innerHTML.includes("form")) { + dialog.value.querySelector("form").addEventListener("submit", () => { + toggleDialog(); + }); + } + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", { + class: "trigger", + onClick: _cache[0] || (_cache[0] = ($event) => toggleDialog(true)) + }, [ + renderSlot(_ctx.$slots, "trigger") + ]), + createBaseVNode("dialog", { + ref_key: "dialog", + ref: dialog, + class: "mcrm-block block__dark" + }, [ + createVNode(_sfc_main$1, { + class: "dialog__close p-0", + variant: "ghost", + size: "sm", + tabindex: "-1", + onClick: _cache[1] || (_cache[1] = ($event) => toggleDialog(false)) + }, { + default: withCtx(() => [ + createVNode(unref(IconX)) + ]), + _: 1 + }), + renderSlot(_ctx.$slots, "content") + ], 512) + ]); + }; + } +}; +export { + _sfc_main$1 as _, + _sfc_main as a +}; diff --git a/public/assets/DialogComp-ByJn29_w.css b/public/assets/DialogComp-ByJn29_w.css new file mode 100644 index 0000000..a8db749 --- /dev/null +++ b/public/assets/DialogComp-ByJn29_w.css @@ -0,0 +1,357 @@ +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +button, .btn { + cursor: pointer; + align-items: center; + gap: calc(var(--spacing, .25rem) * 3); + border-radius: var(--radius-lg, .5rem); + border-style: var(--tw-border-style); + --tw-border-style: solid; + height: fit-content; + padding-inline: calc(var(--spacing, .25rem) * 4); + padding-block: calc(var(--spacing, .25rem) * 2); + --tw-font-weight: var(--font-weight-normal, 400); + font-weight: var(--font-weight-normal, 400); + --tw-tracking: var(--tracking-wide, .025em); + letter-spacing: var(--tracking-wide, .025em); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + border-style: solid; + border-width: 1px; + transition: border-color .1s ease-in-out, background-color .2s; + display: flex; +} +:is(button, .btn):not(.button__subtle, .button__ghost):hover { + --tw-shadow-color: var(--color-black, #000); +} +:is(button, .btn)[disabled], :is(button, .btn).disabled { + pointer-events: none; + cursor: not-allowed; + opacity: .5; +} +:is(button, .btn) svg { + width: calc(var(--spacing, .25rem) * 5); + height: calc(var(--spacing, .25rem) * 5); + transition-property: stroke; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + --tw-duration: .4s; + --tw-ease: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); + transition-duration: .4s; + transition-timing-function: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); +} +:is(button, .btn).btn__sm svg { + width: calc(var(--spacing, .25rem) * 4); + height: calc(var(--spacing, .25rem) * 4); +} +:is(button, .btn).btn__lg svg { + width: calc(var(--spacing, .25rem) * 6); + height: calc(var(--spacing, .25rem) * 6); +} +:is(button, .btn):hover { + color: var(--color-white, #fff) !important; +} +:is(button, .btn):hover svg { + stroke: var(--color-white, #fff) !important; +} +:is(button, .btn).btn__primary { + border-color: var(--color-sky-100, oklch(.951 .026 236.824)); + background-color: color-mix(in oklab, var(--color-sky-100, oklch(.951 .026 236.824)) 10%, transparent); + color: var(--color-sky-100, oklch(.951 .026 236.824)); +} +:is(button, .btn).btn__primary svg { + stroke: var(--color-sky-200, oklch(.901 .058 230.902)); +} +:is(button, .btn).btn__primary:hover { + border-color: var(--color-sky-300, oklch(.828 .111 230.318)); + background-color: color-mix(in oklab, var(--color-sky-400, oklch(.746 .16 232.661)) 40%, transparent); +} +:is(button, .btn).btn__secondary { + border-color: var(--color-amber-100, oklch(.962 .059 95.617)); + background-color: color-mix(in oklab, var(--color-amber-100, oklch(.962 .059 95.617)) 10%, transparent); + color: var(--color-amber-100, oklch(.962 .059 95.617)); +} +:is(button, .btn).btn__secondary svg { + stroke: var(--color-amber-300, oklch(.879 .169 91.605)); +} +:is(button, .btn).btn__secondary:hover { + border-color: var(--color-amber-400, oklch(.828 .189 84.429)); + background-color: color-mix(in oklab, var(--color-amber-400, oklch(.828 .189 84.429)) 40%, transparent); +} +:is(button, .btn).btn__danger { + border-color: var(--color-rose-100, oklch(.941 .03 12.58)); + background-color: color-mix(in oklab, var(--color-rose-200, oklch(.892 .058 10.001)) 20%, transparent); + color: var(--color-rose-200, oklch(.892 .058 10.001)); +} +:is(button, .btn).btn__danger svg { + stroke: var(--color-rose-400, oklch(.712 .194 13.428)); +} +:is(button, .btn).btn__danger:hover { + border-color: var(--color-rose-500, oklch(.645 .246 16.439)); + background-color: color-mix(in oklab, var(--color-rose-400, oklch(.712 .194 13.428)) 40%, transparent); + color: var(--color-white, #fff); +} +:is(button, .btn).btn__dark { + border-color: var(--color-slate-400, oklch(.704 .04 256.788)); + background-color: color-mix(in oklab, var(--color-slate-200, oklch(.929 .013 255.508)) 10%, transparent); + color: var(--color-slate-100, oklch(.968 .007 247.896)); +} +:is(button, .btn).btn__dark svg { + stroke: var(--color-slate-300, oklch(.869 .022 252.894)); +} +:is(button, .btn).btn__dark:hover { + border-color: var(--color-slate-200, oklch(.929 .013 255.508)); + background-color: color-mix(in oklab, var(--color-slate-400, oklch(.704 .04 256.788)) 40%, transparent); + color: var(--color-white, #fff); +} +:is(button, .btn).btn__success { + border-color: var(--color-lime-100, oklch(.967 .067 122.328)); + background-color: color-mix(in oklab, var(--color-lime-200, oklch(.938 .127 124.321)) 10%, transparent); + color: var(--color-lime-100, oklch(.967 .067 122.328)); +} +:is(button, .btn).btn__success svg { + stroke: var(--color-lime-400, oklch(.841 .238 128.85)); +} +:is(button, .btn).btn__success:hover { + border-color: var(--color-lime-500, oklch(.768 .233 130.85)); + background-color: color-mix(in oklab, var(--color-lime-400, oklch(.841 .238 128.85)) 40%, transparent); + color: var(--color-white, #fff); +} +:is(button, .btn).btn__subtle { + color: var(--color-white, #fff); + background-color: #0000; + border-color: #0000; +} +@media (hover: hover) { +:is(button, .btn).btn__subtle:hover { + background-color: color-mix(in oklab, var(--color-white, #fff) 10%, transparent); +} +} +:is(button, .btn).btn__subtle:hover { + border-color: color-mix(in oklab, var(--color-white, #fff) 40%, transparent); + background-color: color-mix(in oklab, var(--color-white, #fff) 20%, transparent); + --tw-gradient-to: color-mix(in oklab, var(--color-white, #fff) 30%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} +:is(button, .btn).btn__ghost { + color: color-mix(in oklab, var(--color-white, #fff) 80%, transparent); + background-color: #0000; + border-color: #0000; +} +@media (hover: hover) { +:is(button, .btn).btn__ghost:hover { + color: var(--color-white, #fff); +} +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false +} +@property --tw-tracking { + syntax: "*"; + inherits: false +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-duration { + syntax: "*"; + inherits: false +} +@property --tw-ease { + syntax: "*"; + inherits: false +} +@property --tw-gradient-position { + syntax: "*"; + inherits: false +} +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} +@property --tw-gradient-stops { + syntax: "*"; + inherits: false +} +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false +} +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.dialog-container { + position: relative; +} +.dialog-container dialog { + pointer-events: none; + z-index: 50; + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + max-width: calc(100vw - 2rem); + translate: var(--tw-translate-x) var(--tw-translate-y); + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + color: var(--color-slate-200, oklch(.929 .013 255.508)); + position: fixed; + top: 50%; + left: 50%; +} +.dialog-container dialog[open] { + pointer-events: auto; +} +.dialog-container dialog::backdrop { + background-color: color-mix(in oklab, var(--color-black, #000) 50%, transparent); + --tw-backdrop-blur: blur(var(--blur-xs, 4px)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); +} +.dialog-container dialog .dialog__close { + top: calc(var(--spacing, .25rem) * 4); + right: calc(var(--spacing, .25rem) * 4); + padding: calc(var(--spacing, .25rem) * 0); + color: var(--color-white, #fff); + position: absolute; +} +.dialog-container dialog .dialog__close svg { + width: calc(var(--spacing, .25rem) * 5); + height: calc(var(--spacing, .25rem) * 5); +} +.dialog__content > :first-child { + padding-right: calc(var(--spacing, .25rem) * 8); +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} diff --git a/public/assets/MacrosView-B-ccNLSC.css b/public/assets/MacrosView-B-ccNLSC.css new file mode 100644 index 0000000..fb3f526 --- /dev/null +++ b/public/assets/MacrosView-B-ccNLSC.css @@ -0,0 +1,624 @@ +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-overview[data-v-f9a187e3] { + grid-template-rows: auto 1fr; + display: grid; + position: relative; +} +.macro-overview[data-v-f9a187e3]:after { + top: calc(var(--spacing, .25rem) * 0); + background-color: var(--color-slate-600, oklch(.446 .043 257.281)); + --tw-content: ""; + content: var(--tw-content); + width: 1px; + height: 100%; + position: absolute; + left: 100%; +} +.macro-overview .macro-overview__list[data-v-f9a187e3] { + align-content: flex-start; + gap: calc(var(--spacing, .25rem) * 1); + display: grid; +} +.macro-overview .macro-item[data-v-f9a187e3] { + align-items: center; + display: flex; +} +.macro-overview .macro-item button[data-v-f9a187e3] { + width: 100%; +} +@property --tw-content { + syntax: "*"; + inherits: false; + initial-value: ""; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +kbd { + height: calc(var(--spacing, .25rem) * 9); + align-items: center; + gap: calc(var(--spacing, .25rem) * 2); + border-radius: var(--radius-md, .375rem); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-slate-500, oklch(.554 .046 257.417)); + background-color: var(--color-slate-700, oklch(.372 .044 257.287)); + padding-block: calc(var(--spacing, .25rem) * 1); + padding-right: calc(var(--spacing, .25rem) * 2); + padding-left: calc(var(--spacing, .25rem) * 4); + font-family: var(--font-mono, "Fira Code", monospace); + font-size: var(--text-lg, 1.125rem); + line-height: var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125))); + --tw-font-weight: var(--font-weight-bold, 700); + font-weight: var(--font-weight-bold, 700); + white-space: nowrap; + color: var(--color-white, #fff); + text-transform: uppercase; + --tw-shadow-color: var(--color-slate-500, oklch(.554 .046 257.417)); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + box-shadow: 0 .2rem 0 .2rem var(--tw-shadow-color); + display: flex; +} +kbd:has(sup) { + padding-left: calc(var(--spacing, .25rem) * 2); +} +kbd sup { + margin-top: calc(var(--spacing, .25rem) * 1); + font-size: var(--text-xs, .75rem); + line-height: var(--tw-leading, var(--text-xs--line-height, calc(1 / .75))); + --tw-font-weight: var(--font-weight-light, 300); + font-weight: var(--font-weight-light, 300); + color: var(--color-slate-200, oklch(.929 .013 255.508)); +} +kbd span.dir { + padding-left: calc(var(--spacing, .25rem) * 1); + color: var(--color-slate-200, oklch(.929 .013 255.508)); +} +kbd.empty { + cursor: pointer; + border-color: var(--color-sky-300, oklch(.828 .111 230.318)); + background-color: color-mix(in oklab, var(--color-sky-400, oklch(.746 .16 232.661)) 50%, transparent); + padding-right: calc(var(--spacing, .25rem) * 3); + padding-left: calc(var(--spacing, .25rem) * 3); + --tw-tracking: var(--tracking-widest, .1em); + letter-spacing: var(--tracking-widest, .1em); + --tw-shadow-color: var(--color-sky-600, oklch(.588 .158 241.966)); +} +kbd.insert { + cursor: pointer; + border-color: var(--color-yellow-300, oklch(.905 .182 98.111)); + background-color: color-mix(in oklab, var(--color-yellow-500, oklch(.795 .184 86.047)) 50%, transparent); + --tw-shadow-color: var(--color-yellow-600, oklch(.681 .162 75.834)); +} +:has(kdb):not(.edit) kbd { + pointer-events: none; + cursor: default; +} +.edit kbd { + pointer-events: auto; + cursor: pointer; +} +.edit kbd:hover, .edit kbd.active { + border-color: var(--color-sky-400, oklch(.746 .16 232.661)); + background-color: var(--color-sky-900, oklch(.391 .09 240.876)); + --tw-shadow-color: var(--color-sky-700, oklch(.5 .134 242.749)); +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-tracking { + syntax: "*"; + inherits: false +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +span.delay[data-v-05e04cbb] { + cursor: default; + border-radius: var(--radius-sm, .25rem); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-slate-400, oklch(.704 .04 256.788)); + background-color: var(--color-slate-500, oklch(.554 .046 257.417)); + padding-inline: calc(var(--spacing, .25rem) * 2); + padding-block: calc(var(--spacing, .25rem) * 1); + font-family: var(--font-sans, "Roboto", sans-serif); + font-size: var(--text-sm, .875rem); + line-height: var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875))); + --tw-font-weight: var(--font-weight-semibold, 600); + font-weight: var(--font-weight-semibold, 600); + color: var(--color-slate-950, oklch(.129 .042 264.695)); + align-items: center; + display: flex; +} +span.delay.preset[data-v-05e04cbb] { + border-color: color-mix(in oklab, var(--color-amber-300, oklch(.879 .169 91.605)) 80%, transparent); + background-color: color-mix(in oklab, var(--color-amber-100, oklch(.962 .059 95.617)) 60%, transparent); + color: var(--color-amber-400, oklch(.828 .189 84.429)); +} +span.delay i[data-v-05e04cbb] { + padding-left: calc(var(--spacing, .25rem) * 1); + --tw-font-weight: var(--font-weight-normal, 400); + font-weight: var(--font-weight-normal, 400); + opacity: .8; + font-style: normal; +} +.edit span.delay[data-v-05e04cbb] { + cursor: pointer; +} +.edit span.delay[data-v-05e04cbb]:hover, .edit span.delay.active[data-v-05e04cbb] { + border-color: var(--color-lime-500, oklch(.768 .233 130.85)); + background-color: var(--color-lime-700, oklch(.532 .157 131.589)); + color: var(--color-lime-200, oklch(.938 .127 124.321)); +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-recorder__output[data-v-33cbf1af] { + top: calc(var(--spacing, .25rem) * 0); + left: calc(var(--spacing, .25rem) * 0); + align-items: center; + row-gap: calc(var(--spacing, .25rem) * 4); + height: fit-content; + padding: calc(var(--spacing, .25rem) * 4); + flex-wrap: wrap; + display: flex; + position: absolute; +} +hr.spacer[data-v-33cbf1af]:last-of-type { + display: none; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.recorder-input__container[data-v-9a99c4ac], .macro-recorder__input[data-v-9a99c4ac] { + inset: calc(var(--spacing, .25rem) * 0); + opacity: 0; + width: 100%; + height: 100%; + display: none; + position: absolute; +} +:is(.recorder-input__container, .macro-recorder__input).record[data-v-9a99c4ac] { + display: block; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.context-menu { + position: relative; +} +.context-menu .context-menu__content { + pointer-events: none; + z-index: 50; + margin-top: calc(var(--spacing, .25rem) * 2); + --tw-translate-y: -100%; + min-width: 100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + border-radius: var(--radius-md, .375rem); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: color-mix(in oklab, var(--color-white, #fff) 50%, transparent); + background-color: color-mix(in oklab, var(--color-slate-100, oklch(.968 .007 247.896)) 60%, transparent); + color: var(--color-slate-800, oklch(.279 .041 260.031)); + opacity: 0; + --tw-backdrop-blur: blur(var(--blur-3xl, 64px)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + display: grid; + position: absolute; + top: 100%; +} +.context-menu .context-menu__content.open { + pointer-events: auto; + --tw-translate-y: calc(var(--spacing, .25rem) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + opacity: 1; +} +.context-menu ul { + color: var(--color-slate-800, oklch(.279 .041 260.031)); +} +:where(.context-menu ul > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-color: var(--color-slate-300, oklch(.869 .022 252.894)); +} +.context-menu ul li { + cursor: pointer; + align-items: center; + gap: calc(var(--spacing, .25rem) * 2); + padding: calc(var(--spacing, .25rem) * 2); + display: flex; +} +@media (hover: hover) { +.context-menu ul li:hover { + background-color: color-mix(in oklab, var(--color-black, #000) 10%, transparent); +} +} +.context-menu ul li svg { + width: calc(var(--spacing, .25rem) * 5); + height: calc(var(--spacing, .25rem) * 5); +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ + +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +button.selected[data-v-601167b6] { + background-color: var(--color-sky-500, oklch(.685 .169 237.323)); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-sky-500, oklch(.685 .169 237.323)); + --tw-ring-offset-width: 1px; + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ + +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ + +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.insert-output[data-v-d2aab140] { + margin-bottom: calc(var(--spacing, .25rem) * 4); + justify-content: center; + align-items: center; + width: 100%; + display: flex; +} +.insert-key__direction[data-v-d2aab140] { + margin-top: calc(var(--spacing, .25rem) * 6); + justify-content: center; + gap: calc(var(--spacing, .25rem) * 2); + display: flex; +} +button.selected[data-v-d2aab140] { + background-color: var(--color-sky-500, oklch(.685 .169 237.323)); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + --tw-ring-color: var(--color-sky-500, oklch(.685 .169 237.323)); + --tw-ring-offset-width: 1px; + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-edit__dialogs[data-v-bf9e32be] { + flex-grow: 1; + justify-content: flex-end; + display: flex; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-recorder__header[data-v-19251359] { + gap: calc(var(--spacing, .25rem) * 4); + width: 100%; + display: grid; +} +.macro-recorder__header .edit__buttons[data-v-19251359] { + justify-content: space-between; + gap: calc(var(--spacing, .25rem) * 2); + width: 100%; + display: flex; +} +.macro-recorder__header > div[data-v-19251359] { + align-items: flex-end; + gap: calc(var(--spacing, .25rem) * 2); + display: flex; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ + +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-recorder__footer[data-v-fec5e8b6] { + justify-content: space-between; + gap: calc(var(--spacing, .25rem) * 2); + display: flex; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-recorder { + height: 100%; +} +.recorder-interface { + gap: calc(var(--spacing, .25rem) * 4); + height: 100%; + transition-property: grid-template-rows; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + grid-template-rows: auto 1fr auto; + display: grid; +} +.recorder-interface__container { + border-radius: var(--radius-lg, .5rem); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-slate-600, oklch(.446 .043 257.281)); + background-color: color-mix(in oklab, var(--color-slate-950, oklch(.129 .042 264.695)) 50%, transparent); + width: 100%; + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + position: relative; + overflow: auto; +} +.recorder-interface__container.record { + border-color: var(--color-rose-300, oklch(.81 .117 11.638)); + background-color: color-mix(in oklab, var(--color-rose-400, oklch(.712 .194 13.428)) 10%, transparent); +} +.recorder-interface__container.edit { + border-color: var(--color-sky-300, oklch(.828 .111 230.318)); + background-color: color-mix(in oklab, var(--color-sky-900, oklch(.391 .09 240.876)) 10%, transparent); +} +#macro-name { + border-color: #0000; + border-bottom-color: var(--color-slate-300, oklch(.869 .022 252.894)); + width: 100%; + padding-block: calc(var(--spacing, .25rem) * 0); + font-size: var(--text-lg, 1.125rem); + line-height: var(--tw-leading, var(--text-lg--line-height, calc(1.75 / 1.125))); + outline-style: var(--tw-outline-style); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + background-color: #0000; + border-radius: 0; + outline-width: 0; +} +#macro-name:focus { + border-color: #0000; + border-bottom-color: var(--color-sky-400, oklch(.746 .16 232.661)); + background-color: color-mix(in oklab, var(--color-sky-400, oklch(.746 .16 232.661)) 10%, transparent); +} +.disabled { + pointer-events: none; + cursor: not-allowed; + opacity: .5; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.macro-panel__content[data-v-c7be9772] { + gap: calc(var(--spacing, .25rem) * 6); + padding-top: calc(var(--spacing, .25rem) * 2); + grid-template-columns: 25ch 1fr; + display: grid; +} diff --git a/public/assets/MacrosView-Bf1eb3go.js b/public/assets/MacrosView-Bf1eb3go.js new file mode 100644 index 0000000..5028ea7 --- /dev/null +++ b/public/assets/MacrosView-Bf1eb3go.js @@ -0,0 +1,1419 @@ +import { a as createVueComponent, _ as _export_sfc, r as reactive, b as onMounted, d as axios, e as appUrl, c as createElementBlock, f as createBaseVNode, F as Fragment, g as renderList, o as openBlock, h as createVNode, w as withCtx, i as createTextVNode, u as unref, I as IconKeyboard, t as toDisplayString, j as withModifiers, k as isLocal, A as AuthCall, l as defineStore, m as ref, n as onUpdated, p as createCommentVNode, q as normalizeClass, s as createBlock, v as renderSlot, x as withDirectives, y as vModelText } from "./index-GNAKlyBz.js"; +import { _ as _sfc_main$h, a as _sfc_main$i } from "./DialogComp-Ba5-BUTe.js"; +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconAlarm = createVueComponent("outline", "alarm", "IconAlarm", [["path", { "d": "M12 13m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0", "key": "svg-0" }], ["path", { "d": "M12 10l0 3l2 0", "key": "svg-1" }], ["path", { "d": "M7 4l-2.75 2", "key": "svg-2" }], ["path", { "d": "M17 4l2.75 2", "key": "svg-3" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconArrowLeftCircle = createVueComponent("outline", "arrow-left-circle", "IconArrowLeftCircle", [["path", { "d": "M17 12h-14", "key": "svg-0" }], ["path", { "d": "M6 9l-3 3l3 3", "key": "svg-1" }], ["path", { "d": "M19 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconArrowRightCircle = createVueComponent("outline", "arrow-right-circle", "IconArrowRightCircle", [["path", { "d": "M18 15l3 -3l-3 -3", "key": "svg-0" }], ["path", { "d": "M5 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M7 12h14", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconDeviceFloppy = createVueComponent("outline", "device-floppy", "IconDeviceFloppy", [["path", { "d": "M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2", "key": "svg-0" }], ["path", { "d": "M12 14m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0", "key": "svg-1" }], ["path", { "d": "M14 4l0 4l-6 0l0 -4", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconPencil = createVueComponent("outline", "pencil", "IconPencil", [["path", { "d": "M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4", "key": "svg-0" }], ["path", { "d": "M13.5 6.5l4 4", "key": "svg-1" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconPlus = createVueComponent("outline", "plus", "IconPlus", [["path", { "d": "M12 5l0 14", "key": "svg-0" }], ["path", { "d": "M5 12l14 0", "key": "svg-1" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconRestore = createVueComponent("outline", "restore", "IconRestore", [["path", { "d": "M3.06 13a9 9 0 1 0 .49 -4.087", "key": "svg-0" }], ["path", { "d": "M3 4.001v5h5", "key": "svg-1" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconTimeDuration15 = createVueComponent("outline", "time-duration-15", "IconTimeDuration15", [["path", { "d": "M12 15h2a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-2v-3h3", "key": "svg-0" }], ["path", { "d": "M9 9v6", "key": "svg-1" }], ["path", { "d": "M3 12v.01", "key": "svg-2" }], ["path", { "d": "M12 21v.01", "key": "svg-3" }], ["path", { "d": "M7.5 4.2v.01", "key": "svg-4" }], ["path", { "d": "M16.5 19.8v.01", "key": "svg-5" }], ["path", { "d": "M7.5 19.8v.01", "key": "svg-6" }], ["path", { "d": "M4.2 16.5v.01", "key": "svg-7" }], ["path", { "d": "M19.8 16.5v.01", "key": "svg-8" }], ["path", { "d": "M4.2 7.5v.01", "key": "svg-9" }], ["path", { "d": "M21 12a9 9 0 0 0 -9 -9", "key": "svg-10" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconTrash = createVueComponent("outline", "trash", "IconTrash", [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconPlayerRecordFilled = createVueComponent("filled", "player-record-filled", "IconPlayerRecordFilled", [["path", { "d": "M8 5.072a8 8 0 1 1 -3.995 7.213l-.005 -.285l.005 -.285a8 8 0 0 1 3.995 -6.643z", "key": "svg-0" }]]); +/** + * @license @tabler/icons-vue v3.30.0 - MIT + * + * This source code is licensed under the MIT license. + * See the LICENSE file in the root directory of this source tree. + */ +var IconPlayerStopFilled = createVueComponent("filled", "player-stop-filled", "IconPlayerStopFilled", [["path", { "d": "M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z", "key": "svg-0" }]]); +const _hoisted_1$d = { class: "macro-overview mcrm-block block__dark" }; +const _hoisted_2$b = { class: "macro-overview__list" }; +const _sfc_main$g = { + __name: "MacroOverview", + setup(__props) { + const macros = reactive({ + list: [] + }); + onMounted(() => { + axios.post(appUrl() + "/macro/list").then((data) => { + if (data.data.length > 0) macros.list = data.data; + }); + }); + function runMacro(macro) { + const data = isLocal() ? { macro } : AuthCall({ macro }); + axios.post(appUrl() + "/macro/play", data).then((data2) => { + console.log(data2); + }); + } + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$d, [ + _cache[0] || (_cache[0] = createBaseVNode("h4", { class: "border-b-2 border-transparent" }, "Saved Macros", -1)), + createBaseVNode("div", _hoisted_2$b, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(macros.list, (macro, i) => { + return openBlock(), createElementBlock("div", { + class: "macro-item", + key: i + }, [ + createVNode(_sfc_main$h, { + variant: "dark", + class: "w-full", + size: "sm", + onClick: withModifiers(($event) => runMacro(macro), ["prevent"]) + }, { + default: withCtx(() => [ + createVNode(unref(IconKeyboard)), + createTextVNode(" " + toDisplayString(macro), 1) + ]), + _: 2 + }, 1032, ["onClick"]) + ]); + }), 128)) + ]) + ]); + }; + } +}; +const MacroOverview = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-f9a187e3"]]); +const keyMap = { + // Modifier keys + Control: "Ctrl", + Shift: "Shift", + Alt: "Alt", + Meta: "Win", + CapsLock: "Caps", + // Special keys + PageUp: "PgUp", + PageDown: "PgDn", + ScrollLock: "Scr Lk", + Insert: "Ins", + Delete: "Del", + Escape: "Esc", + Space: "Space", + // Symbol keys + Backquote: "`", + Backslash: "\\", + BracketLeft: "[", + BracketRight: "]", + Comma: ",", + Equal: "=", + Minus: "-", + Period: ".", + Quote: "'", + Semicolon: ";", + Slash: "/", + // Arrow keys + ArrowUp: "▲", + ArrowRight: "▶", + ArrowDown: "▼", + ArrowLeft: "◀", + // Media keys + MediaPlayPause: "Play", + MediaStop: "Stop", + MediaTrackNext: "Next", + MediaTrackPrevious: "Prev", + MediaVolumeDown: "Down", + MediaVolumeUp: "Up", + AudioVolumeMute: "Mute", + AudioVolumeDown: "Down", + AudioVolumeUp: "Up" +}; +const filterKey = (e) => { + const k = {}; + if (e.location === 1) k.loc = "left"; + if (e.location === 2) k.loc = "right"; + if (e.location === 3) k.loc = "num"; + if (e.key.includes("Media") || e.key.includes("Audio")) k.loc = mediaPrefix(e); + if (keyMap[e.code] || keyMap[e.key]) { + k.str = keyMap[e.code] || keyMap[e.key]; + } else { + k.str = e.key.toLowerCase(); + } + return k; +}; +const mediaPrefix = (e) => { + switch (e.key) { + case "MediaPlayPause": + case "MediaStop": + case "MediaTrackNext": + case "MediaTrackPrevious": + return "Media"; + case "MediaVolumeDown": + case "MediaVolumeUp": + case "AudioVolumeDown": + case "AudioVolumeUp": + case "AudioVolumeMute": + return "Volume"; + } +}; +const isRepeat = (lastStep, e, direction) => { + return lastStep && lastStep.type === "key" && lastStep.code === e.code && lastStep.direction === direction; +}; +const invalidMacro = (steps) => { + const downKeys = []; + const upKeys = []; + Object.keys(steps).forEach((stepKey) => { + const step = steps[stepKey]; + if (step.type !== "key") return; + if (step.direction == "down") downKeys.push(step.key); + if (step.direction == "up") { + if (!downKeys.includes(step.key)) upKeys.push(step.key); + else downKeys.splice(downKeys.indexOf(step.key), 1); + } + }); + if (upKeys.length === 0 && downKeys.length === 0) return false; + return { down: downKeys, up: upKeys }; +}; +const useMacroRecorderStore = defineStore("macrorecorder", () => { + const state = ref({ + record: false, + edit: false, + editKey: false, + editDelay: false, + validationErrors: false + }); + const macroName = ref(""); + const steps = ref([]); + const delay = ref({ + start: 0, + fixed: false + }); + const getEditKey = () => steps.value[state.value.editKey]; + const getAdjacentKey = (pos, includeDelay = false) => { + let returnVal = false; + const mod = pos == "before" ? -1 : 1; + const keyIndex = state.value.editKey + 2 * mod; + const delayIndex = includeDelay ? state.value.editKey + 1 * mod : false; + if (steps.value[keyIndex]) returnVal = steps.value[keyIndex]; + if (delayIndex && steps.value[delayIndex]) + returnVal = { + delay: steps.value[delayIndex], + key: steps.value[keyIndex], + delayIndex + }; + return returnVal; + }; + const getEditDelay = () => steps.value[state.value.editDelay]; + const recordStep = (e, direction = false, key = false) => { + const lastStep = steps.value[steps.value.length - 1]; + let stepVal = {}; + if (typeof e === "object" && !isRepeat(lastStep, e, direction)) { + if (key === false) recordDelay(); + stepVal = { + type: "key", + key: e.key, + code: e.code, + location: e.location, + direction, + keyObj: filterKey(e) + }; + } else if (direction && key !== false) { + stepVal = steps.value[key]; + stepVal.direction = direction; + } else if (typeof e === "number") { + stepVal = { type: "delay", value: parseFloat(e.toFixed()) }; + } + if (key !== false) steps.value[key] = stepVal; + else steps.value.push(stepVal); + }; + const recordDelay = () => { + if (delay.value.fixed !== false) + recordStep(delay.value.fixed); + else if (delay.value.start == 0) + delay.value.start = performance.now(); + else { + recordStep(performance.now() - delay.value.start); + delay.value.start = performance.now(); + } + }; + const insertKey = (e, direction, adjacentDelayIndex) => { + let min, max, newKeyIndex, newDelayIndex; + if (adjacentDelayIndex === null) { + min = state.value.editKey == 0 ? 0 : state.value.editKey; + max = state.value.editKey == 0 ? 1 : false; + newKeyIndex = max === false ? min + 2 : min; + newDelayIndex = min + 1; + } else if (state.value.editKey < adjacentDelayIndex) { + min = state.value.editKey; + max = adjacentDelayIndex; + newKeyIndex = min + 2; + newDelayIndex = min + 1; + } else { + min = adjacentDelayIndex; + max = state.value.editKey; + newKeyIndex = min + 1; + newDelayIndex = min + 2; + } + if (max !== false) { + for (let i = Object.keys(steps.value).length - 1; i >= max; i--) { + steps.value[i + 2] = steps.value[i]; + } + } + recordStep(e, direction, newKeyIndex); + recordStep(10, false, newDelayIndex); + state.value.editKey = false; + }; + const deleteEditKey = () => { + if (state.value.editKey === 0) steps.value.splice(state.value.editKey, 2); + else steps.value.splice(state.value.editKey - 1, 2); + state.value.editKey = false; + }; + const restartDelay = () => { + delay.value.start = performance.now(); + }; + const changeName = (name) => { + macroName.value = name; + console.log(macroName.value); + }; + const changeDelay = (fixed) => { + delay.value.fixed = fixed; + formatDelays(); + }; + const formatDelays = () => { + steps.value = steps.value.map((step) => { + if (step.type === "delay" && delay.value.fixed !== false) step.value = delay.value.fixed; + return step; + }); + }; + const toggleEdit = (type, key) => { + if (type === "key") { + state.value.editKey = key; + state.value.editDelay = false; + } + if (type === "delay") { + state.value.editKey = false; + state.value.editDelay = key; + } + }; + const resetEdit = () => { + state.value.edit = false; + state.value.editKey = false; + state.value.editDelay = false; + }; + const reset = () => { + state.value.record = false; + delay.value.start = 0; + steps.value = []; + if (state.value.edit) resetEdit(); + }; + const save = () => { + state.value.validationErrors = invalidMacro(steps.value); + if (state.value.validationErrors) return false; + axios.post(appUrl() + "/macro/record", { name: macroName.value, steps: steps.value }).then((data) => { + console.log(data); + }); + return true; + }; + return { + state, + steps, + delay, + getEditKey, + getAdjacentKey, + getEditDelay, + recordStep, + insertKey, + deleteEditKey, + restartDelay, + changeName, + changeDelay, + toggleEdit, + resetEdit, + reset, + save + }; +}); +const _hoisted_1$c = { key: 0 }; +const _hoisted_2$a = ["innerHTML"]; +const _hoisted_3$6 = { class: "dir" }; +const _hoisted_4$4 = { key: 1 }; +const _sfc_main$f = { + __name: "MacroKey", + props: { + keyObj: Object, + direction: String, + active: Boolean, + empty: Boolean + }, + setup(__props) { + const props = __props; + const dir = reactive({ + value: false + }); + onMounted(() => { + if (props.empty) return; + setDirection(); + }); + onUpdated(() => { + setDirection(); + }); + const setDirection = () => { + if (props.direction) dir.value = props.direction; + else dir.value = props.keyObj.direction; + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("kbd", { + class: normalizeClass(`${__props.active ? "active" : ""} ${__props.empty ? "empty" : ""}`) + }, [ + __props.keyObj ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ + __props.keyObj.loc ? (openBlock(), createElementBlock("sup", _hoisted_1$c, toDisplayString(__props.keyObj.loc), 1)) : createCommentVNode("", true), + createBaseVNode("span", { + innerHTML: __props.keyObj.str + }, null, 8, _hoisted_2$a), + createBaseVNode("span", _hoisted_3$6, toDisplayString(dir.value === "down" ? "↓" : "↑"), 1) + ], 64)) : __props.empty ? (openBlock(), createElementBlock("span", _hoisted_4$4, "[ ]")) : createCommentVNode("", true) + ], 2); + }; + } +}; +const _sfc_main$e = { + __name: "DelaySpan", + props: { + value: Number, + active: Boolean, + preset: Boolean + }, + setup(__props) { + return (_ctx, _cache) => { + return openBlock(), createElementBlock("span", { + class: normalizeClass(`delay ${__props.active ? "active" : ""} ${__props.preset ? "preset" : ""}`) + }, [ + __props.value < 1e4 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ + createTextVNode(toDisplayString(__props.value) + " ", 1), + _cache[0] || (_cache[0] = createBaseVNode("i", null, "ms", -1)) + ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ + _cache[1] || (_cache[1] = createTextVNode(" >10 ")), + _cache[2] || (_cache[2] = createBaseVNode("i", null, "s", -1)) + ], 64)) + ], 2); + }; + } +}; +const DelaySpan = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-05e04cbb"]]); +const _sfc_main$d = { + __name: "RecorderOutput", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + class: normalizeClass(`macro-recorder__output ${unref(macroRecorder).state.record && "record"} ${unref(macroRecorder).state.edit && "edit"}`) + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(macroRecorder).steps, (step, key) => { + return openBlock(), createElementBlock(Fragment, null, [ + step.type === "key" ? (openBlock(), createBlock(_sfc_main$f, { + key, + "key-obj": step.keyObj, + direction: step.direction, + active: unref(macroRecorder).state.editKey === key, + onClick: ($event) => unref(macroRecorder).state.edit ? unref(macroRecorder).toggleEdit("key", key) : false + }, null, 8, ["key-obj", "direction", "active", "onClick"])) : step.type === "delay" ? (openBlock(), createBlock(DelaySpan, { + key, + value: step.value, + active: unref(macroRecorder).state.editDelay === key, + onClick: ($event) => unref(macroRecorder).toggleEdit("delay", key) + }, null, 8, ["value", "active", "onClick"])) : createCommentVNode("", true), + _cache[0] || (_cache[0] = createBaseVNode("hr", { class: "spacer" }, null, -1)) + ], 64); + }), 256)) + ], 2); + }; + } +}; +const RecorderOutput = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-33cbf1af"]]); +const _sfc_main$c = { + __name: "RecorderInput", + setup(__props) { + const macroInput = ref(null); + const macroRecorder = useMacroRecorderStore(); + onUpdated(() => { + if (macroRecorder.state.record) { + macroInput.value.focus(); + if (macroRecorder.delay.start !== 0) macroRecorder.restartDelay(); + } + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + class: normalizeClass(`recorder-input__container ${unref(macroRecorder).state.record && "record"}`) + }, [ + unref(macroRecorder).state.record ? (openBlock(), createElementBlock("input", { + key: 0, + class: normalizeClass(`macro-recorder__input ${unref(macroRecorder).state.record && "record"}`), + type: "text", + ref_key: "macroInput", + ref: macroInput, + onFocus: _cache[0] || (_cache[0] = ($event) => console.log("focus")), + onKeydown: _cache[1] || (_cache[1] = withModifiers(($event) => unref(macroRecorder).recordStep($event, "down"), ["prevent"])), + onKeyup: _cache[2] || (_cache[2] = withModifiers(($event) => unref(macroRecorder).recordStep($event, "up"), ["prevent"])) + }, null, 34)) : createCommentVNode("", true) + ], 2); + }; + } +}; +const RecorderInput = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-9a99c4ac"]]); +const _hoisted_1$b = { class: "context-menu" }; +const _sfc_main$b = { + __name: "ContextMenu", + props: { + open: Boolean + }, + setup(__props, { expose: __expose }) { + __expose({ toggle }); + const props = __props; + const menuOpen = ref(false); + onMounted(() => { + menuOpen.value = props.open; + }); + function toggle() { + console.log("toggle"); + menuOpen.value = !menuOpen.value; + } + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$b, [ + createBaseVNode("div", { + class: "context-menu__trigger", + onClick: toggle + }, [ + renderSlot(_ctx.$slots, "trigger") + ]), + createBaseVNode("div", { + class: normalizeClass(`context-menu__content ${menuOpen.value ? "open" : ""}`) + }, [ + renderSlot(_ctx.$slots, "content") + ], 2) + ]); + }; + } +}; +const _hoisted_1$a = { + type: "number", + step: "10", + min: "0", + max: "3600000", + ref: "customDelayInput", + placeholder: "100" +}; +const _hoisted_2$9 = { class: "flex justify-end" }; +const _sfc_main$a = { + __name: "FixedDelayMenu", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const ctxtMenu = ref(); + function changeDelay(num) { + macroRecorder.changeDelay(num); + ctxtMenu.value.toggle(); + } + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$b, { + ref_key: "ctxtMenu", + ref: ctxtMenu + }, { + trigger: withCtx(() => [ + createVNode(_sfc_main$h, { + variant: "secondary", + size: "sm" + }, { + default: withCtx(() => [ + createVNode(unref(IconTimeDuration15)), + _cache[5] || (_cache[5] = createTextVNode("Fixed delay ")) + ]), + _: 1 + }) + ]), + content: withCtx(() => [ + createBaseVNode("ul", null, [ + createBaseVNode("li", { + onClick: _cache[0] || (_cache[0] = ($event) => changeDelay(0)) + }, "0ms"), + createBaseVNode("li", { + onClick: _cache[1] || (_cache[1] = ($event) => changeDelay(15)) + }, "15ms"), + createBaseVNode("li", { + onClick: _cache[2] || (_cache[2] = ($event) => changeDelay(50)) + }, "50ms"), + createBaseVNode("li", { + onClick: _cache[3] || (_cache[3] = ($event) => changeDelay(100)) + }, "100ms"), + createBaseVNode("li", null, [ + createVNode(_sfc_main$i, null, { + trigger: withCtx(() => _cache[6] || (_cache[6] = [ + createBaseVNode("span", null, "Custom delay", -1) + ])), + content: withCtx(() => [ + _cache[9] || (_cache[9] = createBaseVNode("h4", { class: "text-slate-50 mb-4" }, "Custom delay", -1)), + createBaseVNode("form", { + class: "grid gap-4 w-44", + onSubmit: _cache[4] || (_cache[4] = withModifiers(($event) => changeDelay(parseInt(_ctx.$refs.customDelayInput.value)), ["prevent"])) + }, [ + createBaseVNode("div", null, [ + createBaseVNode("input", _hoisted_1$a, null, 512), + _cache[7] || (_cache[7] = createBaseVNode("span", null, "ms", -1)) + ]), + createBaseVNode("div", _hoisted_2$9, [ + createVNode(_sfc_main$h, { + variant: "primary", + size: "sm" + }, { + default: withCtx(() => _cache[8] || (_cache[8] = [ + createTextVNode("Set custom delay") + ])), + _: 1 + }) + ]) + ], 32) + ]), + _: 1 + }) + ]) + ]) + ]), + _: 1 + }, 512); + }; + } +}; +const FixedDelayMenu = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-597b5d4a"]]); +const _hoisted_1$9 = { + id: "edit-key-dialog", + class: "dialog__content" +}; +const _hoisted_2$8 = { + class: "grid gap-4", + "submit.prevent": "" +}; +const _hoisted_3$5 = { class: "flex gap-2 justify-center" }; +const _hoisted_4$3 = { class: "flex justify-end" }; +const _sfc_main$9 = { + __name: "EditKeyDialog", + setup(__props) { + const editable = reactive({ + key: {}, + newKey: {} + }); + const macroRecorder = useMacroRecorderStore(); + const newKeyInput = ref(null); + onMounted(() => { + editable.key = macroRecorder.getEditKey(); + editable.newKey.direction = editable.key.direction; + }); + const handleNewKey = (e) => { + editable.newKey.e = e; + editable.newKey.keyObj = filterKey(e); + }; + const handleNewDirection = (direction) => { + editable.newKey.direction = direction; + editable.newKey.keyObj = filterKey(editable.key); + }; + const changeKey = () => { + macroRecorder.recordStep( + editable.newKey.e, + editable.newKey.direction, + macroRecorder.state.editKey + ); + macroRecorder.state.editKey = false; + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$9, [ + _cache[9] || (_cache[9] = createBaseVNode("h4", { class: "text-slate-50 mb-4" }, "Press a key", -1)), + createBaseVNode("div", { + class: "flex justify-center", + onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$refs.newKeyInput.focus()) + }, [ + editable.key.keyObj ? (openBlock(), createBlock(_sfc_main$f, { + key: 0, + "key-obj": editable.key.keyObj, + direction: editable.key.direction + }, null, 8, ["key-obj", "direction"])) : createCommentVNode("", true), + typeof editable.newKey.keyObj === "object" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [ + _cache[5] || (_cache[5] = createBaseVNode("span", { class: "px-4 flex items-center text-white" }, " >>> ", -1)), + createVNode(_sfc_main$f, { + "key-obj": editable.newKey.keyObj, + direction: editable.newKey.direction + }, null, 8, ["key-obj", "direction"]) + ], 64)) : createCommentVNode("", true) + ]), + createBaseVNode("form", _hoisted_2$8, [ + createBaseVNode("input", { + class: "size-0 opacity-0", + type: "text", + min: "0", + max: "1", + ref_key: "newKeyInput", + ref: newKeyInput, + placeholder: "New key", + autofocus: "", + onKeydown: _cache[1] || (_cache[1] = withModifiers(($event) => handleNewKey($event), ["prevent"])) + }, null, 544), + createBaseVNode("div", _hoisted_3$5, [ + createVNode(_sfc_main$h, { + variant: "secondary", + class: normalizeClass(editable.newKey.direction === "down" ? "selected" : ""), + size: "sm", + onClick: _cache[2] || (_cache[2] = withModifiers(($event) => handleNewDirection("down"), ["prevent"])) + }, { + default: withCtx(() => _cache[6] || (_cache[6] = [ + createTextVNode(" ↓ Down ") + ])), + _: 1 + }, 8, ["class"]), + createVNode(_sfc_main$h, { + variant: "secondary", + class: normalizeClass(editable.newKey.direction === "up" ? "selected" : ""), + size: "sm", + onClick: _cache[3] || (_cache[3] = withModifiers(($event) => handleNewDirection("up"), ["prevent"])) + }, { + default: withCtx(() => _cache[7] || (_cache[7] = [ + createTextVNode(" ↑ Up ") + ])), + _: 1 + }, 8, ["class"]) + ]), + createBaseVNode("div", _hoisted_4$3, [ + createVNode(_sfc_main$h, { + variant: "primary", + size: "sm", + onClick: _cache[4] || (_cache[4] = withModifiers(($event) => changeKey(), ["prevent"])) + }, { + default: withCtx(() => _cache[8] || (_cache[8] = [ + createTextVNode(" Change key ") + ])), + _: 1 + }) + ]) + ]) + ]); + }; + } +}; +const EditKeyDialog = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-601167b6"]]); +const _hoisted_1$8 = { + id: "edit-delay-dialog", + class: "dialog__content" +}; +const _hoisted_2$7 = { + key: 0, + class: "flex justify-center" +}; +const _hoisted_3$4 = { + class: "grid gap-4 mt-6", + "submit.prevent": "" +}; +const _hoisted_4$2 = { key: 0 }; +const _hoisted_5$2 = { class: "flex justify-end" }; +const _sfc_main$8 = { + __name: "EditDelayDialog", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const editable = reactive({ + delay: {}, + newDelay: { value: 0 } + }); + onMounted(() => { + editable.delay = macroRecorder.getEditDelay(); + editable.newDelay.value = editable.delay.value; + console.log(editable); + }); + const changeDelay = () => { + if (!editable.newDelay.value) return; + macroRecorder.recordStep(editable.newDelay.value, false, macroRecorder.state.editDelay); + macroRecorder.state.editDelay = false; + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$8, [ + _cache[4] || (_cache[4] = createBaseVNode("h4", { class: "text-slate-50 mb-4" }, "Edit delay", -1)), + editable.delay.value ? (openBlock(), createElementBlock("div", _hoisted_2$7, [ + createVNode(DelaySpan, { + class: "!text-lg", + value: editable.delay.value + }, null, 8, ["value"]) + ])) : createCommentVNode("", true), + createBaseVNode("form", _hoisted_3$4, [ + editable.newDelay.value ? (openBlock(), createElementBlock("div", _hoisted_4$2, [ + withDirectives(createBaseVNode("input", { + type: "number", + min: "0", + max: "3600000", + step: "10", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => editable.newDelay.value = $event), + autofocus: "" + }, null, 512), [ + [vModelText, editable.newDelay.value] + ]), + _cache[2] || (_cache[2] = createBaseVNode("span", null, "ms", -1)) + ])) : createCommentVNode("", true), + createBaseVNode("div", _hoisted_5$2, [ + createVNode(_sfc_main$h, { + variant: "primary", + size: "sm", + onClick: _cache[1] || (_cache[1] = withModifiers(($event) => changeDelay(), ["prevent"])) + }, { + default: withCtx(() => _cache[3] || (_cache[3] = [ + createTextVNode(" Change delay ") + ])), + _: 1 + }) + ]) + ]) + ]); + }; + } +}; +const EditDelayDialog = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d4c82ec9"]]); +const _hoisted_1$7 = { + id: "delete-key-dialog", + class: "dialog__content" +}; +const _hoisted_2$6 = { class: "flex justify-center w-full mb-4" }; +const _hoisted_3$3 = { class: "flex justify-end gap-2 mt-6" }; +const _sfc_main$7 = { + __name: "DeleteKeyDialog", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const keyObj = ref(null); + onMounted(() => { + keyObj.value = filterKey(macroRecorder.getEditKey()); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$7, [ + _cache[2] || (_cache[2] = createBaseVNode("h4", { class: "text-slate-50 mb-4" }, "Delete key", -1)), + createBaseVNode("div", _hoisted_2$6, [ + keyObj.value ? (openBlock(), createBlock(_sfc_main$f, { + key: 0, + "key-obj": keyObj.value + }, null, 8, ["key-obj"])) : createCommentVNode("", true) + ]), + _cache[3] || (_cache[3] = createBaseVNode("p", { class: "text-sm text-slate-300" }, "Are you sure you want to delete this key?", -1)), + createBaseVNode("div", _hoisted_3$3, [ + createVNode(_sfc_main$h, { + variant: "danger", + size: "sm", + onClick: _cache[0] || (_cache[0] = ($event) => unref(macroRecorder).deleteEditKey()) + }, { + default: withCtx(() => _cache[1] || (_cache[1] = [ + createTextVNode(" Delete key ") + ])), + _: 1 + }) + ]) + ]); + }; + } +}; +const DeleteKeyDialog = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-7dc19ba4"]]); +const _hoisted_1$6 = { + id: "insert-key-dialog", + class: "dialog__content w-96" +}; +const _hoisted_2$5 = { class: "text-slate-50 mb-4" }; +const _hoisted_3$2 = { + key: 0, + class: "text-center" +}; +const _hoisted_4$1 = { class: "insert-key__direction" }; +const _hoisted_5$1 = { class: "flex justify-end" }; +const _sfc_main$6 = { + __name: "InsertKeyDialog", + props: { + position: String + }, + setup(__props) { + const props = __props; + const macroRecorder = useMacroRecorderStore(); + const keyObjs = reactive({ + selected: null, + insert: null, + insertEvent: null, + insertDirection: "down", + adjacent: null, + adjacentDelay: null, + adjacentDelayIndex: null + }); + const insertKeyInput = ref(null); + const inputFocus = ref(false); + onMounted(() => { + keyObjs.selected = filterKey(macroRecorder.getEditKey()); + const adjacentKey = macroRecorder.getAdjacentKey(props.position, true); + if (adjacentKey) keyObjs.adjacent = filterKey(adjacentKey.key); + if (adjacentKey.delay) { + keyObjs.adjacentDelay = adjacentKey.delay; + keyObjs.adjacentDelayIndex = adjacentKey.delayIndex; + } + }); + const handleInsertKey = (e) => { + keyObjs.insert = filterKey(e); + keyObjs.insertEvent = e; + }; + const insertKey = () => { + macroRecorder.insertKey(keyObjs.insertEvent, keyObjs.insertDirection, keyObjs.adjacentDelayIndex); + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$6, [ + createBaseVNode("h4", _hoisted_2$5, "Insert key " + toDisplayString(__props.position), 1), + inputFocus.value ? (openBlock(), createElementBlock("p", _hoisted_3$2, "[Press a key]")) : createCommentVNode("", true), + createBaseVNode("input", { + class: "size-0 opacity-0", + type: "text", + min: "0", + max: "1", + ref_key: "insertKeyInput", + ref: insertKeyInput, + placeholder: "New key", + onFocusin: _cache[0] || (_cache[0] = ($event) => inputFocus.value = true), + onFocusout: _cache[1] || (_cache[1] = ($event) => inputFocus.value = false), + onKeydown: _cache[2] || (_cache[2] = withModifiers(($event) => handleInsertKey($event), ["prevent"])), + autofocus: "" + }, null, 544), + createBaseVNode("div", { + class: normalizeClass(["insert-output", __props.position == "before" ? "flex-row-reverse" : ""]) + }, [ + keyObjs.selected ? (openBlock(), createBlock(_sfc_main$f, { + key: 0, + "key-obj": keyObjs.selected + }, null, 8, ["key-obj"])) : createCommentVNode("", true), + _cache[10] || (_cache[10] = createBaseVNode("hr", { class: "spacer" }, null, -1)), + createVNode(DelaySpan, { + preset: true, + value: 10 + }), + _cache[11] || (_cache[11] = createBaseVNode("hr", { class: "spacer" }, null, -1)), + keyObjs.insert ? (openBlock(), createBlock(_sfc_main$f, { + key: 1, + class: "insert", + "key-obj": keyObjs.insert, + direction: keyObjs.insertDirection, + onClick: _cache[3] || (_cache[3] = ($event) => insertKeyInput.value.focus()) + }, null, 8, ["key-obj", "direction"])) : createCommentVNode("", true), + !keyObjs.insert ? (openBlock(), createBlock(_sfc_main$f, { + key: 2, + empty: true, + onClick: _cache[4] || (_cache[4] = ($event) => insertKeyInput.value.focus()) + })) : createCommentVNode("", true), + keyObjs.adjacentDelay ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [ + _cache[8] || (_cache[8] = createBaseVNode("hr", { class: "spacer" }, null, -1)), + createVNode(DelaySpan, { + value: keyObjs.adjacentDelay.value + }, null, 8, ["value"]) + ], 64)) : createCommentVNode("", true), + keyObjs.adjacent ? (openBlock(), createElementBlock(Fragment, { key: 4 }, [ + _cache[9] || (_cache[9] = createBaseVNode("hr", { class: "spacer" }, null, -1)), + createVNode(_sfc_main$f, { + "key-obj": keyObjs.adjacent + }, null, 8, ["key-obj"]) + ], 64)) : createCommentVNode("", true) + ], 2), + createBaseVNode("div", _hoisted_4$1, [ + createVNode(_sfc_main$h, { + variant: "secondary", + class: normalizeClass(keyObjs.insertDirection === "down" ? "selected" : ""), + size: "sm", + onClick: _cache[5] || (_cache[5] = withModifiers(($event) => keyObjs.insertDirection = "down", ["prevent"])) + }, { + default: withCtx(() => _cache[12] || (_cache[12] = [ + createTextVNode(" ↓ Down ") + ])), + _: 1 + }, 8, ["class"]), + createVNode(_sfc_main$h, { + variant: "secondary", + class: normalizeClass(keyObjs.insertDirection === "up" ? "selected" : ""), + size: "sm", + onClick: _cache[6] || (_cache[6] = withModifiers(($event) => keyObjs.insertDirection = "up", ["prevent"])) + }, { + default: withCtx(() => _cache[13] || (_cache[13] = [ + createTextVNode(" ↑ Up ") + ])), + _: 1 + }, 8, ["class"]) + ]), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(_sfc_main$h, { + variant: "primary", + size: "sm", + onClick: _cache[7] || (_cache[7] = ($event) => insertKey()) + }, { + default: withCtx(() => _cache[14] || (_cache[14] = [ + createTextVNode("Insert key") + ])), + _: 1 + }) + ]) + ]); + }; + } +}; +const InsertKeyDialog = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-d2aab140"]]); +const _hoisted_1$5 = { + key: 0, + class: "macro-edit__dialogs" +}; +const _hoisted_2$4 = { + key: 0, + class: "flex gap-2" +}; +const _sfc_main$5 = { + __name: "EditDialogs", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const insert = reactive({ position: null }); + const ctxtMenu = ref(); + onMounted(() => { + macroRecorder.$subscribe((mutation) => { + if (mutation.events && mutation.events.key == "editKey" && mutation.events.newValue === false) { + insert.position = null; + } + }); + }); + function onOpenDialog() { + if (insert.position !== null) ctxtMenu.value.toggle(); + } + function onCloseDialog() { + macroRecorder.state.editKey = false; + macroRecorder.state.editDelay = false; + insert.position = null; + } + return (_ctx, _cache) => { + return unref(macroRecorder).state.edit !== false ? (openBlock(), createElementBlock("div", _hoisted_1$5, [ + unref(macroRecorder).state.editKey !== false && typeof unref(macroRecorder).getEditKey() === "object" ? (openBlock(), createElementBlock("div", _hoisted_2$4, [ + createVNode(_sfc_main$b, { + ref_key: "ctxtMenu", + ref: ctxtMenu + }, { + trigger: withCtx(() => [ + createVNode(_sfc_main$h, { + variant: "dark", + size: "sm" + }, { + default: withCtx(() => [ + createVNode(unref(IconPlus)), + _cache[2] || (_cache[2] = createTextVNode(" Insert ")) + ]), + _: 1 + }) + ]), + content: withCtx(() => [ + createBaseVNode("ul", null, [ + createBaseVNode("li", { + onClick: _cache[0] || (_cache[0] = ($event) => insert.position = "before") + }, [ + createVNode(unref(IconArrowLeftCircle)), + _cache[3] || (_cache[3] = createTextVNode(" Before")) + ]), + createBaseVNode("li", { + onClick: _cache[1] || (_cache[1] = ($event) => insert.position = "after") + }, [ + createVNode(unref(IconArrowRightCircle)), + _cache[4] || (_cache[4] = createTextVNode(" After")) + ]) + ]) + ]), + _: 1 + }, 512), + insert.position !== null ? (openBlock(), createBlock(_sfc_main$i, { + key: 0, + open: insert.position !== null, + onOnOpen: onOpenDialog, + onOnClose: onCloseDialog + }, { + content: withCtx(() => [ + createVNode(InsertKeyDialog, { + position: insert.position + }, null, 8, ["position"]) + ]), + _: 1 + }, 8, ["open"])) : createCommentVNode("", true), + createVNode(_sfc_main$i, { + id: `edit-key-${unref(macroRecorder).state.editKey}`, + onOnOpen: onOpenDialog, + onOnClose: onCloseDialog + }, { + trigger: withCtx(() => [ + createVNode(_sfc_main$h, { + variant: "secondary", + size: "sm" + }, { + default: withCtx(() => [ + createVNode(unref(IconPencil)), + _cache[5] || (_cache[5] = createTextVNode("Edit ")) + ]), + _: 1 + }) + ]), + content: withCtx(() => [ + createVNode(EditKeyDialog) + ]), + _: 1 + }, 8, ["id"]), + createVNode(_sfc_main$i, { + onOnOpen: onOpenDialog, + onOnClose: onCloseDialog + }, { + trigger: withCtx(() => [ + createVNode(_sfc_main$h, { + size: "sm", + variant: "danger" + }, { + default: withCtx(() => [ + createVNode(unref(IconTrash)), + _cache[6] || (_cache[6] = createTextVNode("Delete ")) + ]), + _: 1 + }) + ]), + content: withCtx(() => [ + createVNode(DeleteKeyDialog) + ]), + _: 1 + }) + ])) : createCommentVNode("", true), + unref(macroRecorder).state.editDelay !== false && typeof unref(macroRecorder).getEditDelay() === "object" ? (openBlock(), createBlock(_sfc_main$i, { + key: 1, + onOnOpen: onOpenDialog, + onOnClose: onCloseDialog + }, { + trigger: withCtx(() => [ + createVNode(_sfc_main$h, { + variant: "secondary", + size: "sm" + }, { + default: withCtx(() => [ + createVNode(unref(IconAlarm)), + _cache[7] || (_cache[7] = createTextVNode("Edit ")) + ]), + _: 1 + }) + ]), + content: withCtx(() => [ + createVNode(EditDelayDialog) + ]), + _: 1 + })) : createCommentVNode("", true) + ])) : createCommentVNode("", true); + }; + } +}; +const EditDialogs = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-bf9e32be"]]); +const _hoisted_1$4 = { class: "macro-recorder__header" }; +const _hoisted_2$3 = { class: "w-full grid grid-cols-[auto_1fr_auto] gap-2" }; +const _sfc_main$4 = { + __name: "RecorderHeader", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const nameSet = ref(false); + function changeName(name) { + macroRecorder.changeName(name); + nameSet.value = name.length > 0; + } + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$4, [ + createBaseVNode("div", _hoisted_2$3, [ + _cache[7] || (_cache[7] = createBaseVNode("h4", { class: "" }, "Name:", -1)), + createBaseVNode("input", { + id: "macro-name", + type: "text", + onInput: _cache[0] || (_cache[0] = withModifiers(($event) => changeName($event.target.value), ["prevent"])), + placeholder: "New macro" + }, null, 32), + createBaseVNode("div", { + class: normalizeClass(`recording__buttons ${!nameSet.value || unref(macroRecorder).state.edit ? "disabled" : ""}`) + }, [ + createTextVNode(toDisplayString(unref(macroRecorder).name) + " ", 1), + !unref(macroRecorder).state.record ? (openBlock(), createBlock(_sfc_main$h, { + key: 0, + variant: "primary", + size: "sm", + onClick: _cache[1] || (_cache[1] = ($event) => unref(macroRecorder).state.record = true) + }, { + default: withCtx(() => [ + createVNode(unref(IconPlayerRecordFilled), { class: "text-red-500" }), + _cache[5] || (_cache[5] = createTextVNode("Record ")) + ]), + _: 1 + })) : createCommentVNode("", true), + unref(macroRecorder).state.record ? (openBlock(), createBlock(_sfc_main$h, { + key: 1, + variant: "danger", + size: "sm", + onClick: _cache[2] || (_cache[2] = ($event) => unref(macroRecorder).state.record = false) + }, { + default: withCtx(() => [ + createVNode(unref(IconPlayerStopFilled), { class: "text-white" }), + _cache[6] || (_cache[6] = createTextVNode("Stop ")) + ]), + _: 1 + })) : createCommentVNode("", true) + ], 2) + ]), + unref(macroRecorder).steps.length > 0 ? (openBlock(), createElementBlock("div", { + key: 0, + class: normalizeClass(`edit__buttons ${unref(macroRecorder).state.record ? "disabled" : ""}`) + }, [ + createBaseVNode("div", null, [ + !unref(macroRecorder).state.edit ? (openBlock(), createBlock(_sfc_main$h, { + key: 0, + variant: "secondary", + size: "sm", + onClick: _cache[3] || (_cache[3] = ($event) => unref(macroRecorder).state.edit = true) + }, { + default: withCtx(() => [ + createVNode(unref(IconPencil)), + _cache[8] || (_cache[8] = createTextVNode("Edit ")) + ]), + _: 1 + })) : createCommentVNode("", true), + unref(macroRecorder).state.edit ? (openBlock(), createBlock(_sfc_main$h, { + key: 1, + variant: "danger", + size: "sm", + onClick: _cache[4] || (_cache[4] = ($event) => unref(macroRecorder).resetEdit()) + }, { + default: withCtx(() => [ + createVNode(unref(IconPlayerStopFilled)), + _cache[9] || (_cache[9] = createTextVNode("Stop ")) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + unref(macroRecorder).state.edit ? (openBlock(), createBlock(FixedDelayMenu, { key: 0 })) : createCommentVNode("", true), + createVNode(EditDialogs) + ], 2)) : createCommentVNode("", true) + ]); + }; + } +}; +const RecorderHeader = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-19251359"]]); +const _hoisted_1$3 = { + id: "validation-error__dialog", + class: "dialog__content" +}; +const _hoisted_2$2 = { + key: 0, + class: "grid gap-4" +}; +const _hoisted_3$1 = { key: 0 }; +const _hoisted_4 = { key: 1 }; +const _hoisted_5 = { class: "flex justify-end mt-4" }; +const _sfc_main$3 = { + __name: "ValidationErrorDialog", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const errors = reactive({ + up: [], + down: [] + }); + onMounted(() => { + macroRecorder.$subscribe((mutation) => { + if (mutation.events && mutation.events.key == "validationErrors") { + errors.up = mutation.events.newValue !== false ? macroRecorder.state.validationErrors.up : []; + errors.down = mutation.events.newValue !== false ? macroRecorder.state.validationErrors.down : []; + } + console.log(mutation); + }); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$3, [ + _cache[4] || (_cache[4] = createBaseVNode("h4", { class: "text-slate-50 mb-4" }, "There's an error in your macro", -1)), + errors && errors.up.length > 0 || errors.down.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$2, [ + errors.down.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_3$1, [ + _cache[1] || (_cache[1] = createBaseVNode("p", null, [ + createTextVNode(" The following keys have been "), + createBaseVNode("strong", null, "pressed"), + createTextVNode(" down, but "), + createBaseVNode("strong", null, "not released"), + createTextVNode(". ") + ], -1)), + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(errors.down, (key) => { + return openBlock(), createElementBlock("li", { key }, toDisplayString(key.toUpperCase()), 1); + }), 128)) + ]) + ])) : createCommentVNode("", true), + errors.up.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_4, [ + _cache[2] || (_cache[2] = createBaseVNode("p", null, [ + createTextVNode(" The following keys have been "), + createBaseVNode("strong", null, "released"), + createTextVNode(", but "), + createBaseVNode("strong", null, "not pressed"), + createTextVNode(" down. ") + ], -1)), + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(errors.up, (key) => { + return openBlock(), createElementBlock("li", { key }, toDisplayString(key.toUpperCase()), 1); + }), 128)) + ]) + ])) : createCommentVNode("", true) + ])) : createCommentVNode("", true), + createBaseVNode("div", _hoisted_5, [ + createVNode(_sfc_main$h, { + size: "sm", + variant: "danger", + onClick: _cache[0] || (_cache[0] = ($event) => unref(macroRecorder).state.validationErrors = false) + }, { + default: withCtx(() => _cache[3] || (_cache[3] = [ + createTextVNode(" Close ") + ])), + _: 1 + }) + ]) + ]); + }; + } +}; +const ValidationErrorDialog = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-ff532573"]]); +const _hoisted_1$2 = { class: "macro-recorder__footer" }; +const _sfc_main$2 = { + __name: "RecorderFooter", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + const errorDialog = ref(); + onMounted(() => { + macroRecorder.$subscribe((mutation) => { + if (mutation.events && mutation.events.key == "validationErrors") { + errorDialog.value.toggleDialog(mutation.events.newValue !== false); + } + }); + }); + const toggleSave = () => { + if (!macroRecorder.save()) errorDialog.value.toggleDialog(true); + }; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + unref(macroRecorder).steps.length > 0 ? (openBlock(), createBlock(_sfc_main$h, { + key: 0, + variant: "danger", + size: "sm", + onClick: _cache[0] || (_cache[0] = ($event) => unref(macroRecorder).reset()) + }, { + default: withCtx(() => [ + createVNode(unref(IconRestore)), + _cache[2] || (_cache[2] = createTextVNode(" Reset ")) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(_sfc_main$i, { + ref_key: "errorDialog", + ref: errorDialog + }, { + content: withCtx(() => [ + createVNode(ValidationErrorDialog) + ]), + _: 1 + }, 512), + unref(macroRecorder).steps.length > 0 ? (openBlock(), createBlock(_sfc_main$h, { + key: 1, + disabled: unref(macroRecorder).state.record || unref(macroRecorder).state.edit, + variant: "success", + size: "sm", + onClick: _cache[1] || (_cache[1] = ($event) => toggleSave()) + }, { + default: withCtx(() => [ + createVNode(unref(IconDeviceFloppy)), + _cache[3] || (_cache[3] = createTextVNode(" Save ")) + ]), + _: 1 + }, 8, ["disabled"])) : createCommentVNode("", true) + ]); + }; + } +}; +const RecorderFooter = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-fec5e8b6"]]); +const _hoisted_1$1 = { class: "macro-recorder mcrm-block block__light" }; +const _hoisted_2$1 = { class: "recorder-interface" }; +const _sfc_main$1 = { + __name: "MacroRecorder", + setup(__props) { + const macroRecorder = useMacroRecorderStore(); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$1, [ + createBaseVNode("div", _hoisted_2$1, [ + createVNode(RecorderHeader), + createBaseVNode("div", { + class: normalizeClass(`recorder-interface__container ${unref(macroRecorder).state.record && "record"} ${unref(macroRecorder).state.edit && "edit"}`) + }, [ + createVNode(RecorderOutput), + createVNode(RecorderInput) + ], 2), + createVNode(RecorderFooter) + ]) + ]); + }; + } +}; +const _hoisted_1 = { + id: "macros", + class: "panel" +}; +const _hoisted_2 = { class: "panel__content !p-0" }; +const _hoisted_3 = { class: "macro-panel__content" }; +const _sfc_main = { + __name: "MacrosView", + setup(__props) { + ref(false); + ref(null); + onMounted(() => { + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1, [ + _cache[0] || (_cache[0] = createBaseVNode("h1", { class: "panel__title" }, "Macros", -1)), + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createVNode(MacroOverview), + createVNode(_sfc_main$1) + ]) + ]) + ]); + }; + } +}; +const MacrosView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c7be9772"]]); +export { + MacrosView as default +}; diff --git a/public/assets/PanelsView-DHxhdGwy.js b/public/assets/PanelsView-DHxhdGwy.js new file mode 100644 index 0000000..f8d47ff --- /dev/null +++ b/public/assets/PanelsView-DHxhdGwy.js @@ -0,0 +1,9 @@ +import { _ as _export_sfc, c as createElementBlock, o as openBlock } from "./index-GNAKlyBz.js"; +const _sfc_main = {}; +function _sfc_render(_ctx, _cache) { + return openBlock(), createElementBlock("div"); +} +const PanelsView = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); +export { + PanelsView as default +}; diff --git a/public/assets/SettingsView-CVQl1jsc.js b/public/assets/SettingsView-CVQl1jsc.js new file mode 100644 index 0000000..03a013a --- /dev/null +++ b/public/assets/SettingsView-CVQl1jsc.js @@ -0,0 +1,9 @@ +import { _ as _export_sfc, c as createElementBlock, o as openBlock } from "./index-GNAKlyBz.js"; +const _sfc_main = {}; +function _sfc_render(_ctx, _cache) { + return openBlock(), createElementBlock("div"); +} +const SettingsView = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); +export { + SettingsView as default +}; diff --git a/public/assets/index-DjeOPht9.css b/public/assets/index-DjeOPht9.css new file mode 100644 index 0000000..34c8025 --- /dev/null +++ b/public/assets/index-DjeOPht9.css @@ -0,0 +1,2256 @@ +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +hr.spacer { + width: calc(var(--spacing) * 6); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-300); + opacity: .8; + position: relative; + overflow: visible; +} + +hr.spacer:before, hr.spacer:after { + width: calc(var(--spacing) * 2); + height: calc(var(--spacing) * 2); + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + background-color: var(--color-gray-300); + --tw-content: ""; + content: var(--tw-content); + border-radius: 3.40282e38px; + position: absolute; + top: 50%; +} + +hr.spacer:before { + left: calc(var(--spacing) * -1); +} + +hr.spacer:after { + right: calc(var(--spacing) * -1); +} + +.mcrm-block { + column-gap: calc(var(--spacing) * 6); + row-gap: calc(var(--spacing) * 2); + border-radius: var(--radius-2xl); + padding: calc(var(--spacing) * 6); + --tw-backdrop-blur: blur(var(--blur-lg)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + position: relative; + overflow: hidden; +} + +.mcrm-block:before { + inset: calc(var(--spacing) * 0); + z-index: -1; + border-radius: var(--radius-2xl); + --tw-gradient-position: to bottom right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-content: ""; + content: var(--tw-content); + -webkit-mask-composite: xor, source-over; + width: 100%; + height: 100%; + padding: 1px; + position: absolute; + -webkit-mask: linear-gradient(#000 0 0), linear-gradient(#000 0 0) content-box; + -webkit-mask-composite: xor, source-over; + mask: linear-gradient(#000 0 0) exclude, linear-gradient(#000 0 0) content-box; +} + +.mcrm-block.block__light { + background-color: color-mix(in oklab, var(--color-white) 20%, transparent); +} + +.mcrm-block.block__light:before { + --tw-gradient-from: color-mix(in oklab, var(--color-white) 20%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__dark { + background-color: color-mix(in oklab, var(--color-slate-900) 70%, transparent); +} + +.mcrm-block.block__dark:before { + --tw-gradient-from: color-mix(in oklab, var(--color-slate-400) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__primary { + background-color: color-mix(in oklab, var(--color-sky-300) 40%, transparent); +} + +.mcrm-block.block__primary:before { + --tw-gradient-from: color-mix(in oklab, var(--color-sky-100) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__secondary { + background-color: color-mix(in oklab, var(--color-amber-300) 40%, transparent); +} + +.mcrm-block.block__secondary:before { + --tw-gradient-from: color-mix(in oklab, var(--color-amber-100) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__success { + background-color: color-mix(in oklab, var(--color-emerald-300) 40%, transparent); +} + +.mcrm-block.block__success:before { + --tw-gradient-from: color-mix(in oklab, var(--color-emerald-100) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__warning { + background-color: color-mix(in oklab, var(--color-orange-300) 40%, transparent); +} + +.mcrm-block.block__warning:before { + --tw-gradient-from: color-mix(in oklab, var(--color-orange-100) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block__danger { + background-color: color-mix(in oklab, var(--color-rose-300) 40%, transparent); +} + +.mcrm-block.block__danger:before { + --tw-gradient-from: color-mix(in oklab, var(--color-rose-100) 40%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); +} + +.mcrm-block.block-spacing__sm, .mcrm-block.block-size__sm { + column-gap: calc(var(--spacing) * 4); + row-gap: calc(var(--spacing) * 2); + padding: calc(var(--spacing) * 4); +} + +.mcrm-block.block-size__sm, .mcrm-block.block-size__sm:before { + border-radius: var(--radius-lg); +} + +.mcrm-block.block-spacing__lg, .mcrm-block.block-size__lg { + column-gap: calc(var(--spacing) * 8); + row-gap: calc(var(--spacing) * 4); + padding: calc(var(--spacing) * 8); +} + +.mcrm-block.block-size__lg, .mcrm-block.block-size__lg:before { + border-radius: var(--radius-3xl); +} + +.panel { + top: calc(var(--spacing) * 2); + right: calc(var(--spacing) * 4); + bottom: calc(var(--spacing) * 2); + left: calc(var(--spacing) * 4); + grid-template-rows: auto 1fr; + display: grid; + position: fixed; + overflow: hidden; +} + +@media (width >= 40rem) { + .panel { + right: calc(var(--spacing) * 16); + left: calc(var(--spacing) * 16); + } +} + +.panel > .panel__header, .panel > .panel__title { + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 2); +} + +.panel .panel__title { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + --tw-gradient-from: var(--color-amber-300); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-gradient-to: color-mix(in oklab, var(--color-white) 50%, transparent); + width: fit-content; + padding-top: calc(var(--spacing) * 3); + padding-left: calc(var(--spacing) * 16); + color: #0000; + -webkit-background-clip: text; + background-clip: text; +} + +@media (width >= 40rem) { + .panel .panel__title { + padding-left: calc(var(--spacing) * 4); + } +} + +.panel .panel__content { + height: 100%; + padding-top: calc(var(--spacing) * 4); + padding-left: calc(var(--spacing) * 0); + display: grid; + overflow: auto; +} + +@media (width >= 40rem) { + .panel .panel__content { + padding-top: calc(var(--spacing) * 0); + padding-left: calc(var(--spacing) * 4); + } +} + +@layer theme { + :root, :host { + --font-sans: "Roboto", sans-serif; + --font-mono: "Fira Code", monospace; + --color-red-500: oklch(.637 .237 25.331); + --color-orange-100: oklch(.954 .038 75.164); + --color-orange-300: oklch(.837 .128 66.29); + --color-amber-100: oklch(.962 .059 95.617); + --color-amber-300: oklch(.879 .169 91.605); + --color-amber-400: oklch(.828 .189 84.429); + --color-yellow-300: oklch(.905 .182 98.111); + --color-yellow-500: oklch(.795 .184 86.047); + --color-yellow-600: oklch(.681 .162 75.834); + --color-lime-100: oklch(.967 .067 122.328); + --color-lime-200: oklch(.938 .127 124.321); + --color-lime-400: oklch(.841 .238 128.85); + --color-lime-500: oklch(.768 .233 130.85); + --color-lime-600: oklch(.648 .2 131.684); + --color-lime-700: oklch(.532 .157 131.589); + --color-emerald-100: oklch(.95 .052 163.051); + --color-emerald-300: oklch(.845 .143 164.978); + --color-sky-100: oklch(.951 .026 236.824); + --color-sky-200: oklch(.901 .058 230.902); + --color-sky-300: oklch(.828 .111 230.318); + --color-sky-400: oklch(.746 .16 232.661); + --color-sky-500: oklch(.685 .169 237.323); + --color-sky-600: oklch(.588 .158 241.966); + --color-sky-700: oklch(.5 .134 242.749); + --color-sky-900: oklch(.391 .09 240.876); + --color-rose-100: oklch(.941 .03 12.58); + --color-rose-200: oklch(.892 .058 10.001); + --color-rose-300: oklch(.81 .117 11.638); + --color-rose-400: oklch(.712 .194 13.428); + --color-rose-500: oklch(.645 .246 16.439); + --color-slate-50: oklch(.984 .003 247.858); + --color-slate-100: oklch(.968 .007 247.896); + --color-slate-200: oklch(.929 .013 255.508); + --color-slate-300: oklch(.869 .022 252.894); + --color-slate-400: oklch(.704 .04 256.788); + --color-slate-500: oklch(.554 .046 257.417); + --color-slate-600: oklch(.446 .043 257.281); + --color-slate-700: oklch(.372 .044 257.287); + --color-slate-800: oklch(.279 .041 260.031); + --color-slate-900: oklch(.208 .042 265.755); + --color-slate-950: oklch(.129 .042 264.695); + --color-gray-300: oklch(.872 .01 258.338); + --color-black: #000; + --color-white: #fff; + --spacing: .25rem; + --text-xs: .75rem; + --text-xs--line-height: calc(1 / .75); + --text-sm: .875rem; + --text-sm--line-height: calc(1.25 / .875); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --tracking-wide: .025em; + --tracking-widest: .1em; + --radius-sm: .25rem; + --radius-md: .375rem; + --radius-lg: .5rem; + --radius-xl: .75rem; + --radius-2xl: 1rem; + --radius-3xl: 1.5rem; + --ease-in-out: cubic-bezier(.4, 0, .2, 1); + --animate-spin: spin 1s linear infinite; + --blur-xs: 4px; + --blur-md: 12px; + --blur-lg: 16px; + --blur-3xl: 64px; + --default-transition-duration: .15s; + --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); + --default-font-family: var(--font-sans); + --default-font-feature-settings: var(--font-sans--font-feature-settings); + --default-font-variation-settings: var(--font-sans--font-variation-settings); + --default-mono-font-family: var(--font-mono); + --default-mono-font-feature-settings: var(--font-mono--font-feature-settings); + --default-mono-font-variation-settings: var(--font-mono--font-variation-settings); + } +} + +@layer base { + *, :after, :before, ::backdrop { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + ::file-selector-button { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + html, :host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + line-height: 1.5; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + + body { + line-height: inherit; + } + + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + + a { + color: inherit; + -webkit-text-decoration: inherit; + -webkit-text-decoration: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + + b, strong { + font-weight: bolder; + } + + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + + small { + font-size: 80%; + } + + sub, sup { + vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + } + + sub { + bottom: -.25em; + } + + sup { + top: -.5em; + } + + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + + :-moz-focusring { + outline: auto; + } + + progress { + vertical-align: baseline; + } + + summary { + display: list-item; + } + + ol, ul, menu { + list-style: none; + } + + img, svg, video, canvas, audio, iframe, embed, object { + vertical-align: middle; + display: block; + } + + img, video { + max-width: 100%; + height: auto; + } + + button, input, select, optgroup, textarea { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + + ::file-selector-button { + margin-inline-end: 4px; + } + + ::placeholder { + opacity: 1; + color: color-mix(in oklab, currentColor 50%, transparent); + } + + textarea { + resize: vertical; + } + + ::-webkit-search-decoration { + -webkit-appearance: none; + } + + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + + ::-webkit-datetime-edit { + display: inline-flex; + } + + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + + ::-webkit-datetime-edit { + padding-block: 0; + } + + ::-webkit-datetime-edit-year-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-month-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-day-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-hour-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-minute-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-second-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-millisecond-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + + :-moz-ui-invalid { + box-shadow: none; + } + + button, input:where([type="button"], [type="reset"], [type="submit"]) { + appearance: button; + } + + ::file-selector-button { + appearance: button; + } + + ::-webkit-inner-spin-button { + height: auto; + } + + ::-webkit-outer-spin-button { + height: auto; + } + + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} + +@layer components; + +@layer utilities { + .pointer-events-auto { + pointer-events: auto; + } + + .pointer-events-none { + pointer-events: none; + } + + .absolute { + position: absolute; + } + + .fixed { + position: fixed; + } + + .relative { + position: relative; + } + + .inset-0 { + inset: calc(var(--spacing) * 0); + } + + .inset-1\/2 { + inset: 50%; + } + + .top-0 { + top: calc(var(--spacing) * 0); + } + + .top-1\/2 { + top: 50%; + } + + .top-4 { + top: calc(var(--spacing) * 4); + } + + .top-20 { + top: calc(var(--spacing) * 20); + } + + .top-\[10\%\] { + top: 10%; + } + + .top-full { + top: 100%; + } + + .right-4 { + right: calc(var(--spacing) * 4); + } + + .left-0 { + left: calc(var(--spacing) * 0); + } + + .left-1\/2 { + left: 50%; + } + + .left-4 { + left: calc(var(--spacing) * 4); + } + + .left-\[10\%\] { + left: 10%; + } + + .left-full { + left: 100%; + } + + .z-50 { + z-index: 50; + } + + .z-\[-1\] { + z-index: -1; + } + + .container { + width: 100%; + } + + @media (width >= 40rem) { + .container { + max-width: 40rem; + } + } + + @media (width >= 48rem) { + .container { + max-width: 48rem; + } + } + + @media (width >= 64rem) { + .container { + max-width: 64rem; + } + } + + @media (width >= 80rem) { + .container { + max-width: 80rem; + } + } + + @media (width >= 96rem) { + .container { + max-width: 96rem; + } + } + + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + + .block { + display: block; + } + + .flex { + display: flex; + } + + .grid { + display: grid; + } + + .hidden { + display: none; + } + + .aspect-square { + aspect-ratio: 1; + } + + .size-0 { + width: calc(var(--spacing) * 0); + height: calc(var(--spacing) * 0); + } + + .size-4 { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + + .size-5 { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + + .size-6 { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + + .size-12 { + width: calc(var(--spacing) * 12); + height: calc(var(--spacing) * 12); + } + + .size-full { + width: 100%; + height: 100%; + } + + .h-9 { + height: calc(var(--spacing) * 9); + } + + .h-fit { + height: fit-content; + } + + .h-full { + height: 100%; + } + + .w-44 { + width: calc(var(--spacing) * 44); + } + + .w-64 { + width: calc(var(--spacing) * 64); + } + + .w-96 { + width: calc(var(--spacing) * 96); + } + + .w-fit { + width: fit-content; + } + + .w-full { + width: 100%; + } + + .w-px { + width: 1px; + } + + .max-w-\[calc\(100vw-2rem\)\] { + max-width: calc(100vw - 2rem); + } + + .min-w-full { + min-width: 100%; + } + + .flex-grow { + flex-grow: 1; + } + + .-translate-1\/2 { + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-x-1\/2 { + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-x-full { + --tw-translate-x: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .translate-x-0 { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-y-full { + --tw-translate-y: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .translate-y-0 { + --tw-translate-y: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .scale-\[1\.8\] { + scale: 1.8; + } + + .animate-spin { + animation: var(--animate-spin); + } + + .cursor-default { + cursor: default; + } + + .cursor-not-allowed { + cursor: not-allowed; + } + + .cursor-pointer { + cursor: pointer; + } + + .list-none { + list-style-type: none; + } + + .grid-cols-\[1rem_1fr\] { + grid-template-columns: 1rem 1fr; + } + + .grid-cols-\[2rem_1fr\] { + grid-template-columns: 2rem 1fr; + } + + .grid-cols-\[25ch_1fr\] { + grid-template-columns: 25ch 1fr; + } + + .grid-cols-\[auto_1fr\] { + grid-template-columns: auto 1fr; + } + + .grid-cols-\[auto_1fr_auto\] { + grid-template-columns: auto 1fr auto; + } + + .grid-rows-\[0fr\] { + grid-template-rows: 0fr; + } + + .grid-rows-\[auto_1fr\] { + grid-template-rows: auto 1fr; + } + + .grid-rows-\[auto_1fr_auto\] { + grid-template-rows: auto 1fr auto; + } + + .flex-row-reverse { + flex-direction: row-reverse; + } + + .flex-wrap { + flex-wrap: wrap; + } + + .content-start { + align-content: flex-start; + } + + .items-center { + align-items: center; + } + + .items-end { + align-items: flex-end; + } + + .items-start { + align-items: flex-start; + } + + .justify-between { + justify-content: space-between; + } + + .justify-center { + justify-content: center; + } + + .justify-end { + justify-content: flex-end; + } + + .\!gap-4 { + gap: calc(var(--spacing) * 4) !important; + } + + .gap-1 { + gap: calc(var(--spacing) * 1); + } + + .gap-2 { + gap: calc(var(--spacing) * 2); + } + + .gap-3 { + gap: calc(var(--spacing) * 3); + } + + .gap-4 { + gap: calc(var(--spacing) * 4); + } + + .gap-6 { + gap: calc(var(--spacing) * 6); + } + + .gap-8 { + gap: calc(var(--spacing) * 8); + } + + .gap-y-4 { + row-gap: calc(var(--spacing) * 4); + } + + :where(.divide-y > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + } + + :where(.divide-slate-300 > :not(:last-child)) { + border-color: var(--color-slate-300); + } + + :where(.divide-slate-600 > :not(:last-child)) { + border-color: var(--color-slate-600); + } + + .truncate { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + .overflow-auto { + overflow: auto; + } + + .overflow-hidden { + overflow: hidden; + } + + .rounded-full { + border-radius: 3.40282e38px; + } + + .rounded-lg { + border-radius: var(--radius-lg); + } + + .rounded-md { + border-radius: var(--radius-md); + } + + .rounded-none { + border-radius: 0; + } + + .rounded-sm { + border-radius: var(--radius-sm); + } + + .rounded-xl { + border-radius: var(--radius-xl); + } + + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + + .border-0 { + border-style: var(--tw-border-style); + border-width: 0; + } + + .border-b-2 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 2px; + } + + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + + .border-amber-100 { + border-color: var(--color-amber-100); + } + + .border-amber-300\/80 { + border-color: color-mix(in oklab, var(--color-amber-300) 80%, transparent); + } + + .border-amber-400 { + border-color: var(--color-amber-400); + } + + .border-lime-100 { + border-color: var(--color-lime-100); + } + + .border-lime-500 { + border-color: var(--color-lime-500); + } + + .border-lime-600 { + border-color: var(--color-lime-600); + } + + .border-rose-100 { + border-color: var(--color-rose-100); + } + + .border-rose-300 { + border-color: var(--color-rose-300); + } + + .border-rose-500 { + border-color: var(--color-rose-500); + } + + .border-sky-100 { + border-color: var(--color-sky-100); + } + + .border-sky-300 { + border-color: var(--color-sky-300); + } + + .border-sky-400 { + border-color: var(--color-sky-400); + } + + .border-slate-200 { + border-color: var(--color-slate-200); + } + + .border-slate-400 { + border-color: var(--color-slate-400); + } + + .border-slate-500 { + border-color: var(--color-slate-500); + } + + .border-slate-600 { + border-color: var(--color-slate-600); + } + + .border-transparent { + border-color: #0000; + } + + .border-white\/10 { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + + .border-white\/40 { + border-color: color-mix(in oklab, var(--color-white) 40%, transparent); + } + + .border-white\/50 { + border-color: color-mix(in oklab, var(--color-white) 50%, transparent); + } + + .border-yellow-300 { + border-color: var(--color-yellow-300); + } + + .border-b-slate-300 { + border-bottom-color: var(--color-slate-300); + } + + .bg-amber-100\/10 { + background-color: color-mix(in oklab, var(--color-amber-100) 10%, transparent); + } + + .bg-amber-100\/60 { + background-color: color-mix(in oklab, var(--color-amber-100) 60%, transparent); + } + + .bg-amber-400\/10 { + background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent); + } + + .bg-amber-400\/40 { + background-color: color-mix(in oklab, var(--color-amber-400) 40%, transparent); + } + + .bg-black\/50 { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + + .bg-lime-200\/10 { + background-color: color-mix(in oklab, var(--color-lime-200) 10%, transparent); + } + + .bg-lime-400\/10 { + background-color: color-mix(in oklab, var(--color-lime-400) 10%, transparent); + } + + .bg-lime-400\/40 { + background-color: color-mix(in oklab, var(--color-lime-400) 40%, transparent); + } + + .bg-lime-500\/80 { + background-color: color-mix(in oklab, var(--color-lime-500) 80%, transparent); + } + + .bg-lime-700 { + background-color: var(--color-lime-700); + } + + .bg-rose-200\/20 { + background-color: color-mix(in oklab, var(--color-rose-200) 20%, transparent); + } + + .bg-rose-400\/10 { + background-color: color-mix(in oklab, var(--color-rose-400) 10%, transparent); + } + + .bg-rose-400\/40 { + background-color: color-mix(in oklab, var(--color-rose-400) 40%, transparent); + } + + .bg-sky-100\/10 { + background-color: color-mix(in oklab, var(--color-sky-100) 10%, transparent); + } + + .bg-sky-200\/20 { + background-color: color-mix(in oklab, var(--color-sky-200) 20%, transparent); + } + + .bg-sky-400\/40 { + background-color: color-mix(in oklab, var(--color-sky-400) 40%, transparent); + } + + .bg-sky-400\/50 { + background-color: color-mix(in oklab, var(--color-sky-400) 50%, transparent); + } + + .bg-sky-500 { + background-color: var(--color-sky-500); + } + + .bg-sky-900 { + background-color: var(--color-sky-900); + } + + .bg-sky-900\/10 { + background-color: color-mix(in oklab, var(--color-sky-900) 10%, transparent); + } + + .bg-slate-100\/60 { + background-color: color-mix(in oklab, var(--color-slate-100) 60%, transparent); + } + + .bg-slate-200\/10 { + background-color: color-mix(in oklab, var(--color-slate-200) 10%, transparent); + } + + .bg-slate-400\/40 { + background-color: color-mix(in oklab, var(--color-slate-400) 40%, transparent); + } + + .bg-slate-500 { + background-color: var(--color-slate-500); + } + + .bg-slate-600 { + background-color: var(--color-slate-600); + } + + .bg-slate-700 { + background-color: var(--color-slate-700); + } + + .bg-slate-700\/80 { + background-color: color-mix(in oklab, var(--color-slate-700) 80%, transparent); + } + + .bg-slate-950\/50 { + background-color: color-mix(in oklab, var(--color-slate-950) 50%, transparent); + } + + .bg-transparent { + background-color: #0000; + } + + .bg-white\/10 { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + + .bg-white\/20 { + background-color: color-mix(in oklab, var(--color-white) 20%, transparent); + } + + .bg-yellow-500\/50 { + background-color: color-mix(in oklab, var(--color-yellow-500) 50%, transparent); + } + + .to-white\/30 { + --tw-gradient-to: color-mix(in oklab, var(--color-white) 30%, transparent); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .\!stroke-white { + stroke: var(--color-white) !important; + } + + .stroke-amber-300 { + stroke: var(--color-amber-300); + } + + .stroke-lime-400 { + stroke: var(--color-lime-400); + } + + .stroke-rose-400 { + stroke: var(--color-rose-400); + } + + .stroke-sky-200 { + stroke: var(--color-sky-200); + } + + .stroke-slate-300 { + stroke: var(--color-slate-300); + } + + .object-cover { + object-fit: cover; + } + + .\!p-0 { + padding: calc(var(--spacing) * 0) !important; + } + + .p-0 { + padding: calc(var(--spacing) * 0); + } + + .p-1 { + padding: calc(var(--spacing) * 1); + } + + .p-2 { + padding: calc(var(--spacing) * 2); + } + + .p-4 { + padding: calc(var(--spacing) * 4); + } + + .p-28 { + padding: calc(var(--spacing) * 28); + } + + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + + .py-0 { + padding-block: calc(var(--spacing) * 0); + } + + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + + .pt-2 { + padding-top: calc(var(--spacing) * 2); + } + + .pr-2 { + padding-right: calc(var(--spacing) * 2); + } + + .pr-3 { + padding-right: calc(var(--spacing) * 3); + } + + .pr-8 { + padding-right: calc(var(--spacing) * 8); + } + + .pl-1 { + padding-left: calc(var(--spacing) * 1); + } + + .pl-2 { + padding-left: calc(var(--spacing) * 2); + } + + .pl-3 { + padding-left: calc(var(--spacing) * 3); + } + + .pl-4 { + padding-left: calc(var(--spacing) * 4); + } + + .text-center { + text-align: center; + } + + .font-mono { + font-family: var(--font-mono); + } + + .font-sans { + font-family: var(--font-sans); + } + + .\!text-lg { + font-size: var(--text-lg) !important; + line-height: var(--tw-leading, var(--text-lg--line-height)) !important; + } + + .text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + + .font-light { + --tw-font-weight: var(--font-weight-light); + font-weight: var(--font-weight-light); + } + + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + + .tracking-wide { + --tw-tracking: var(--tracking-wide); + letter-spacing: var(--tracking-wide); + } + + .tracking-widest { + --tw-tracking: var(--tracking-widest); + letter-spacing: var(--tracking-widest); + } + + .whitespace-nowrap { + white-space: nowrap; + } + + .\!text-white { + color: var(--color-white) !important; + } + + .text-amber-100 { + color: var(--color-amber-100); + } + + .text-amber-400 { + color: var(--color-amber-400); + } + + .text-lime-100 { + color: var(--color-lime-100); + } + + .text-lime-200 { + color: var(--color-lime-200); + } + + .text-lime-400 { + color: var(--color-lime-400); + } + + .text-red-500 { + color: var(--color-red-500); + } + + .text-rose-200 { + color: var(--color-rose-200); + } + + .text-rose-400 { + color: var(--color-rose-400); + } + + .text-sky-100 { + color: var(--color-sky-100); + } + + .text-sky-300 { + color: var(--color-sky-300); + } + + .text-slate-50 { + color: var(--color-slate-50); + } + + .text-slate-100 { + color: var(--color-slate-100); + } + + .text-slate-200 { + color: var(--color-slate-200); + } + + .text-slate-300 { + color: var(--color-slate-300); + } + + .text-slate-800 { + color: var(--color-slate-800); + } + + .text-slate-950 { + color: var(--color-slate-950); + } + + .text-white { + color: var(--color-white); + } + + .text-white\/40 { + color: color-mix(in oklab, var(--color-white) 40%, transparent); + } + + .text-white\/80 { + color: color-mix(in oklab, var(--color-white) 80%, transparent); + } + + .uppercase { + text-transform: uppercase; + } + + .not-italic { + font-style: normal; + } + + .opacity-0 { + opacity: 0; + } + + .opacity-35 { + opacity: .35; + } + + .opacity-40 { + opacity: .4; + } + + .opacity-50 { + opacity: .5; + } + + .opacity-80 { + opacity: .8; + } + + .opacity-100 { + opacity: 1; + } + + .mix-blend-overlay { + mix-blend-mode: overlay; + } + + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, #0000001a), 0 2px 4px -2px var(--tw-shadow-color, #0000001a); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .ring-2 { + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .shadow-black { + --tw-shadow-color: var(--color-black); + } + + .shadow-sky-600 { + --tw-shadow-color: var(--color-sky-600); + } + + .shadow-sky-700 { + --tw-shadow-color: var(--color-sky-700); + } + + .shadow-slate-500 { + --tw-shadow-color: var(--color-slate-500); + } + + .shadow-yellow-600 { + --tw-shadow-color: var(--color-yellow-600); + } + + .ring-sky-500 { + --tw-ring-color: var(--color-sky-500); + } + + .ring-offset-1 { + --tw-ring-offset-width: 1px; + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + + .outline-0 { + outline-style: var(--tw-outline-style); + outline-width: 0; + } + + .filter { + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + } + + .backdrop-blur-3xl { + --tw-backdrop-blur: blur(var(--blur-3xl)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .backdrop-blur-md { + --tw-backdrop-blur: blur(var(--blur-md)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .backdrop-blur-xs { + --tw-backdrop-blur: blur(var(--blur-xs)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-\[grid-template-rows\] { + transition-property: grid-template-rows; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-\[stroke\] { + transition-property: stroke; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-opacity { + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .duration-300 { + --tw-duration: .3s; + transition-duration: .3s; + } + + .duration-400 { + --tw-duration: .4s; + transition-duration: .4s; + } + + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + + .content-\[\'\'\] { + --tw-content: ""; + content: var(--tw-content); + } + + @media (hover: hover) { + .hover\:bg-black\/10:hover { + background-color: color-mix(in oklab, var(--color-black) 10%, transparent); + } + + .hover\:bg-lime-500:hover { + background-color: var(--color-lime-500); + } + + .hover\:bg-slate-700:hover { + background-color: var(--color-slate-700); + } + + .hover\:bg-white\/10:hover { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + + .hover\:bg-white\/40:hover { + background-color: color-mix(in oklab, var(--color-white) 40%, transparent); + } + + .hover\:text-white:hover { + color: var(--color-white); + } + } + + .focus\:border-transparent:focus { + border-color: #0000; + } + + .focus\:border-b-sky-400:focus { + border-bottom-color: var(--color-sky-400); + } + + .focus\:bg-sky-400\/10:focus { + background-color: color-mix(in oklab, var(--color-sky-400) 10%, transparent); + } +} + +body { + background-color: var(--color-slate-900); + font-family: var(--font-sans); + --tw-font-weight: var(--font-weight-light); + font-weight: var(--font-weight-light); + --tw-tracking: var(--tracking-wide); + letter-spacing: var(--tracking-wide); + color: var(--color-slate-50); +} + +h1, h2 { + font-family: var(--font-mono); + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); +} + +h3, h4, h5, h6 { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); +} + +h1 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); +} + +h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); +} + +h3 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); +} + +h4 { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); +} + +h5 { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); +} + +input { + border-radius: var(--radius-md); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-slate-400); + background-color: color-mix(in oklab, var(--color-black) 20%, transparent); + width: 100%; + padding-inline: calc(var(--spacing) * 2); + padding-block: calc(var(--spacing) * 1); + color: var(--color-white); +} + +:has( > input + span) { + display: flex; +} + +:has( > input + span) input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +:has( > input + span) span { + border-top-right-radius: var(--radius-md); + border-bottom-right-radius: var(--radius-md); + background-color: var(--color-slate-400); + padding-inline: calc(var(--spacing) * 2); + color: var(--color-white); + align-items: center; + display: flex; +} + +ul { + list-style-type: disc; + list-style-position: inside; +} + +strong { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} + +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-content { + syntax: "*"; + inherits: false; + initial-value: ""; +} + +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-position { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} + +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} + +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} + +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-font-weight { + syntax: "*"; + inherits: false +} + +@property --tw-tracking { + syntax: "*"; + inherits: false +} + +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} + +@property --tw-shadow-color { + syntax: "*"; + inherits: false +} + +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} + +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false +} + +@property --tw-ring-color { + syntax: "*"; + inherits: false +} + +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} + +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false +} + +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} + +@property --tw-ring-inset { + syntax: "*"; + inherits: false +} + +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0; +} + +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} + +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} + +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} + +@property --tw-blur { + syntax: "*"; + inherits: false +} + +@property --tw-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-invert { + syntax: "*"; + inherits: false +} + +@property --tw-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-drop-shadow { + syntax: "*"; + inherits: false +} + +@property --tw-duration { + syntax: "*"; + inherits: false +} + +@property --tw-ease { + syntax: "*"; + inherits: false +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +nav { + z-index: 50; + display: flex; + position: relative; +} +nav button { + top: calc(var(--spacing, .25rem) * 4); + left: calc(var(--spacing, .25rem) * 4); + aspect-ratio: 1; + width: calc(var(--spacing, .25rem) * 12); + height: calc(var(--spacing, .25rem) * 12); + cursor: pointer; + border-style: var(--tw-border-style); + background-color: color-mix(in oklab, var(--color-white, #fff) 20%, transparent); + --tw-backdrop-blur: blur(var(--blur-md, 12px)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + border-width: 0; + border-radius: 3.40282e38px; + position: absolute; +} +@media (hover: hover) { +nav button:hover { + background-color: color-mix(in oklab, var(--color-white, #fff) 40%, transparent); +} +} +nav button .logo, nav button svg { + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + transition-property: opacity; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + --tw-duration: .4s; + --tw-ease: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); + transition-duration: .4s; + transition-timing-function: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); + position: absolute; + inset: 50%; +} +nav button .logo { + width: 100%; +} +nav ul { + top: calc(var(--spacing, .25rem) * 20); + left: calc(var(--spacing, .25rem) * 0); + --tw-translate-x: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + border-radius: var(--radius-xl, .75rem); + background-color: color-mix(in oklab, var(--color-white, #fff) 10%, transparent); + --tw-backdrop-blur: blur(var(--blur-md, 12px)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + --tw-duration: .3s; + --tw-ease: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); + transition-duration: .3s; + transition-timing-function: var(--ease-in-out, cubic-bezier(.4, 0, .2, 1)); + list-style-type: none; + display: grid; + position: absolute; + overflow: hidden; +} +:where(nav ul > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-color: var(--color-slate-600, oklch(.446 .043 257.281)); +} +nav ul.open { + left: calc(var(--spacing, .25rem) * 4); + --tw-translate-x: calc(var(--spacing, .25rem) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); +} +nav ul li a { + align-items: center; + gap: calc(var(--spacing, .25rem) * 2); + padding-inline: calc(var(--spacing, .25rem) * 4); + padding-block: calc(var(--spacing, .25rem) * 2); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); + border-color: #0000; + display: flex; +} +nav ul li a svg { + color: color-mix(in oklab, var(--color-white, #fff) 40%, transparent); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1))); + transition-duration: var(--tw-duration, var(--default-transition-duration, .15s)); +} +nav ul li a:hover { + background-color: color-mix(in oklab, var(--color-white, #fff) 20%, transparent); +} +nav ul li a:hover svg { + color: var(--color-white, #fff); +} +nav ul li a.router-link-active { + background-color: color-mix(in oklab, var(--color-sky-200, oklch(.901 .058 230.902)) 20%, transparent); + color: var(--color-sky-300, oklch(.828 .111 230.318)); +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-duration { + syntax: "*"; + inherits: false +} +@property --tw-ease { + syntax: "*"; + inherits: false +} +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */ +.app-background[data-v-bf34f349] { + pointer-events: none; + inset: calc(var(--spacing, .25rem) * 0); + z-index: -1; + opacity: .4; + width: 100%; + height: 100%; + position: fixed; + overflow: hidden; +} +.app-background img[data-v-bf34f349] { + object-fit: cover; + width: 100%; + height: 100%; + position: absolute; +} +.app-background .logo[data-v-bf34f349] { + padding: calc(var(--spacing, .25rem) * 28); + opacity: .35; + mix-blend-mode: overlay; + position: absolute; + top: 10%; + left: 10%; + scale: 1.8; +} diff --git a/public/assets/index-GNAKlyBz.js b/public/assets/index-GNAKlyBz.js new file mode 100644 index 0000000..e973032 --- /dev/null +++ b/public/assets/index-GNAKlyBz.js @@ -0,0 +1,18013 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MacrosView-Bf1eb3go.js","assets/DialogComp-Ba5-BUTe.js","assets/DialogComp-ByJn29_w.css","assets/MacrosView-B-ccNLSC.css","assets/DevicesView-DqasecOn.js","assets/DevicesView-Dw_Mls3X.css"])))=>i.map(i=>d[i]); +(function polyfill() { + const relList = document.createElement("link").relList; + if (relList && relList.supports && relList.supports("modulepreload")) { + return; + } + for (const link of document.querySelectorAll('link[rel="modulepreload"]')) { + processPreload(link); + } + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== "childList") { + continue; + } + for (const node of mutation.addedNodes) { + if (node.tagName === "LINK" && node.rel === "modulepreload") + processPreload(node); + } + } + }).observe(document, { childList: true, subtree: true }); + function getFetchOpts(link) { + const fetchOpts = {}; + if (link.integrity) fetchOpts.integrity = link.integrity; + if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; + if (link.crossOrigin === "use-credentials") + fetchOpts.credentials = "include"; + else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit"; + else fetchOpts.credentials = "same-origin"; + return fetchOpts; + } + function processPreload(link) { + if (link.ep) + return; + link.ep = true; + const fetchOpts = getFetchOpts(link); + fetch(link.href, fetchOpts); + } +})(); +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function makeMap(str) { + const map = /* @__PURE__ */ Object.create(null); + for (const key of str.split(",")) map[key] = 1; + return (val) => val in map; +} +const EMPTY_OBJ = {}; +const EMPTY_ARR = []; +const NOOP = () => { +}; +const NO = () => false; +const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); +const isModelListener = (key) => key.startsWith("onUpdate:"); +const extend$1 = Object.assign; +const remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +const hasOwnProperty$2 = Object.prototype.hasOwnProperty; +const hasOwn = (val, key) => hasOwnProperty$2.call(val, key); +const isArray$2 = Array.isArray; +const isMap = (val) => toTypeString(val) === "[object Map]"; +const isSet = (val) => toTypeString(val) === "[object Set]"; +const isFunction$1 = (val) => typeof val === "function"; +const isString$1 = (val) => typeof val === "string"; +const isSymbol = (val) => typeof val === "symbol"; +const isObject$1 = (val) => val !== null && typeof val === "object"; +const isPromise = (val) => { + return (isObject$1(val) || isFunction$1(val)) && isFunction$1(val.then) && isFunction$1(val.catch); +}; +const objectToString = Object.prototype.toString; +const toTypeString = (value) => objectToString.call(value); +const toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +const isPlainObject$2 = (val) => toTypeString(val) === "[object Object]"; +const isIntegerKey = (key) => isString$1(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +const isReservedProp = /* @__PURE__ */ makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +const cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +}; +const camelizeRE = /-(\w)/g; +const camelize = cacheStringFunction( + (str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); + } +); +const hyphenateRE = /\B([A-Z])/g; +const hyphenate = cacheStringFunction( + (str) => str.replace(hyphenateRE, "-$1").toLowerCase() +); +const capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +const toHandlerKey = cacheStringFunction( + (str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; + } +); +const hasChanged = (value, oldValue) => !Object.is(value, oldValue); +const invokeArrayFns = (fns, ...arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](...arg); + } +}; +const def = (obj, key, value, writable = false) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + writable, + value + }); +}; +const looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +let _globalThis; +const getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; +function normalizeStyle(value) { + if (isArray$2(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString$1(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString$1(value) || isObject$1(value)) { + return value; + } +} +const listDelimiterRE = /;(?![^(]*\))/g; +const propertyDelimiterRE = /:([^]+)/; +const styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString$1(value)) { + res = value; + } else if (isArray$2(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject$1(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); +} +const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +const isRef$1 = (val) => { + return !!(val && val["__v_isRef"] === true); +}; +const toDisplayString = (val) => { + return isString$1(val) ? val : val == null ? "" : isArray$2(val) || isObject$1(val) && (val.toString === objectToString || !isFunction$1(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); +}; +const replacer = (_key, val) => { + if (isRef$1(val)) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) + }; + } else if (isSymbol(val)) { + return stringifySymbol(val); + } else if (isObject$1(val) && !isArray$2(val) && !isPlainObject$2(val)) { + return String(val); + } + return val; +}; +const stringifySymbol = (v, i = "") => { + var _a; + return ( + // Symbol.description in es2019+ so we need to cast here to pass + // the lib: es2016 check + isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v + ); +}; +/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +let activeEffectScope; +class EffectScope { + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this._isPaused = false; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + pause() { + if (this._active) { + this._isPaused = true; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].pause(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].pause(); + } + } + } + /** + * Resumes the effect scope, including all child scopes and effects. + */ + resume() { + if (this._active) { + if (this._isPaused) { + this._isPaused = false; + let i, l; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].resume(); + } + } + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].resume(); + } + } + } + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + this._active = false; + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + this.effects.length = 0; + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + this.cleanups.length = 0; + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + this.scopes.length = 0; + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + } + } +} +function effectScope(detached) { + return new EffectScope(detached); +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn, failSilently = false) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } +} +let activeSub; +const pausedQueueEffects = /* @__PURE__ */ new WeakSet(); +class ReactiveEffect { + constructor(fn) { + this.fn = fn; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 1 | 4; + this.next = void 0; + this.cleanup = void 0; + this.scheduler = void 0; + if (activeEffectScope && activeEffectScope.active) { + activeEffectScope.effects.push(this); + } + } + pause() { + this.flags |= 64; + } + resume() { + if (this.flags & 64) { + this.flags &= -65; + if (pausedQueueEffects.has(this)) { + pausedQueueEffects.delete(this); + this.trigger(); + } + } + } + /** + * @internal + */ + notify() { + if (this.flags & 2 && !(this.flags & 32)) { + return; + } + if (!(this.flags & 8)) { + batch(this); + } + } + run() { + if (!(this.flags & 1)) { + return this.fn(); + } + this.flags |= 2; + cleanupEffect(this); + prepareDeps(this); + const prevEffect = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = this; + shouldTrack = true; + try { + return this.fn(); + } finally { + cleanupDeps(this); + activeSub = prevEffect; + shouldTrack = prevShouldTrack; + this.flags &= -3; + } + } + stop() { + if (this.flags & 1) { + for (let link = this.deps; link; link = link.nextDep) { + removeSub(link); + } + this.deps = this.depsTail = void 0; + cleanupEffect(this); + this.onStop && this.onStop(); + this.flags &= -2; + } + } + trigger() { + if (this.flags & 64) { + pausedQueueEffects.add(this); + } else if (this.scheduler) { + this.scheduler(); + } else { + this.runIfDirty(); + } + } + /** + * @internal + */ + runIfDirty() { + if (isDirty(this)) { + this.run(); + } + } + get dirty() { + return isDirty(this); + } +} +let batchDepth = 0; +let batchedSub; +let batchedComputed; +function batch(sub, isComputed2 = false) { + sub.flags |= 8; + if (isComputed2) { + sub.next = batchedComputed; + batchedComputed = sub; + return; + } + sub.next = batchedSub; + batchedSub = sub; +} +function startBatch() { + batchDepth++; +} +function endBatch() { + if (--batchDepth > 0) { + return; + } + if (batchedComputed) { + let e = batchedComputed; + batchedComputed = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= -9; + e = next; + } + } + let error; + while (batchedSub) { + let e = batchedSub; + batchedSub = void 0; + while (e) { + const next = e.next; + e.next = void 0; + e.flags &= -9; + if (e.flags & 1) { + try { + ; + e.trigger(); + } catch (err) { + if (!error) error = err; + } + } + e = next; + } + } + if (error) throw error; +} +function prepareDeps(sub) { + for (let link = sub.deps; link; link = link.nextDep) { + link.version = -1; + link.prevActiveLink = link.dep.activeLink; + link.dep.activeLink = link; + } +} +function cleanupDeps(sub) { + let head; + let tail = sub.depsTail; + let link = tail; + while (link) { + const prev = link.prevDep; + if (link.version === -1) { + if (link === tail) tail = prev; + removeSub(link); + removeDep(link); + } else { + head = link; + } + link.dep.activeLink = link.prevActiveLink; + link.prevActiveLink = void 0; + link = prev; + } + sub.deps = head; + sub.depsTail = tail; +} +function isDirty(sub) { + for (let link = sub.deps; link; link = link.nextDep) { + if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { + return true; + } + } + if (sub._dirty) { + return true; + } + return false; +} +function refreshComputed(computed2) { + if (computed2.flags & 4 && !(computed2.flags & 16)) { + return; + } + computed2.flags &= -17; + if (computed2.globalVersion === globalVersion) { + return; + } + computed2.globalVersion = globalVersion; + const dep = computed2.dep; + computed2.flags |= 2; + if (dep.version > 0 && !computed2.isSSR && computed2.deps && !isDirty(computed2)) { + computed2.flags &= -3; + return; + } + const prevSub = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = computed2; + shouldTrack = true; + try { + prepareDeps(computed2); + const value = computed2.fn(computed2._value); + if (dep.version === 0 || hasChanged(value, computed2._value)) { + computed2._value = value; + dep.version++; + } + } catch (err) { + dep.version++; + throw err; + } finally { + activeSub = prevSub; + shouldTrack = prevShouldTrack; + cleanupDeps(computed2); + computed2.flags &= -3; + } +} +function removeSub(link, soft = false) { + const { dep, prevSub, nextSub } = link; + if (prevSub) { + prevSub.nextSub = nextSub; + link.prevSub = void 0; + } + if (nextSub) { + nextSub.prevSub = prevSub; + link.nextSub = void 0; + } + if (dep.subs === link) { + dep.subs = prevSub; + if (!prevSub && dep.computed) { + dep.computed.flags &= -5; + for (let l = dep.computed.deps; l; l = l.nextDep) { + removeSub(l, true); + } + } + } + if (!soft && !--dep.sc && dep.map) { + dep.map.delete(dep.key); + } +} +function removeDep(link) { + const { prevDep, nextDep } = link; + if (prevDep) { + prevDep.nextDep = nextDep; + link.prevDep = void 0; + } + if (nextDep) { + nextDep.prevDep = prevDep; + link.nextDep = void 0; + } +} +let shouldTrack = true; +const trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function cleanupEffect(e) { + const { cleanup } = e; + e.cleanup = void 0; + if (cleanup) { + const prevSub = activeSub; + activeSub = void 0; + try { + cleanup(); + } finally { + activeSub = prevSub; + } + } +} +let globalVersion = 0; +class Link { + constructor(sub, dep) { + this.sub = sub; + this.dep = dep; + this.version = dep.version; + this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +} +class Dep { + constructor(computed2) { + this.computed = computed2; + this.version = 0; + this.activeLink = void 0; + this.subs = void 0; + this.map = void 0; + this.key = void 0; + this.sc = 0; + } + track(debugInfo) { + if (!activeSub || !shouldTrack || activeSub === this.computed) { + return; + } + let link = this.activeLink; + if (link === void 0 || link.sub !== activeSub) { + link = this.activeLink = new Link(activeSub, this); + if (!activeSub.deps) { + activeSub.deps = activeSub.depsTail = link; + } else { + link.prevDep = activeSub.depsTail; + activeSub.depsTail.nextDep = link; + activeSub.depsTail = link; + } + addSub(link); + } else if (link.version === -1) { + link.version = this.version; + if (link.nextDep) { + const next = link.nextDep; + next.prevDep = link.prevDep; + if (link.prevDep) { + link.prevDep.nextDep = next; + } + link.prevDep = activeSub.depsTail; + link.nextDep = void 0; + activeSub.depsTail.nextDep = link; + activeSub.depsTail = link; + if (activeSub.deps === link) { + activeSub.deps = next; + } + } + } + return link; + } + trigger(debugInfo) { + this.version++; + globalVersion++; + this.notify(debugInfo); + } + notify(debugInfo) { + startBatch(); + try { + if (false) ; + for (let link = this.subs; link; link = link.prevSub) { + if (link.sub.notify()) { + ; + link.sub.dep.notify(); + } + } + } finally { + endBatch(); + } + } +} +function addSub(link) { + link.dep.sc++; + if (link.sub.flags & 4) { + const computed2 = link.dep.computed; + if (computed2 && !link.dep.subs) { + computed2.flags |= 4 | 16; + for (let l = computed2.deps; l; l = l.nextDep) { + addSub(l); + } + } + const currentTail = link.dep.subs; + if (currentTail !== link) { + link.prevSub = currentTail; + if (currentTail) currentTail.nextSub = link; + } + link.dep.subs = link; + } +} +const targetMap = /* @__PURE__ */ new WeakMap(); +const ITERATE_KEY = Symbol( + "" +); +const MAP_KEY_ITERATE_KEY = Symbol( + "" +); +const ARRAY_ITERATE_KEY = Symbol( + "" +); +function track(target, type, key) { + if (shouldTrack && activeSub) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = new Dep()); + dep.map = depsMap; + dep.key = key; + } + { + dep.track(); + } + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + globalVersion++; + return; + } + const run = (dep) => { + if (dep) { + { + dep.trigger(); + } + } + }; + startBatch(); + if (type === "clear") { + depsMap.forEach(run); + } else { + const targetIsArray = isArray$2(target); + const isArrayIndex = targetIsArray && isIntegerKey(key); + if (targetIsArray && key === "length") { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { + run(dep); + } + }); + } else { + if (key !== void 0 || depsMap.has(void 0)) { + run(depsMap.get(key)); + } + if (isArrayIndex) { + run(depsMap.get(ARRAY_ITERATE_KEY)); + } + switch (type) { + case "add": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isArrayIndex) { + run(depsMap.get("length")); + } + break; + case "delete": + if (!targetIsArray) { + run(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + run(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + run(depsMap.get(ITERATE_KEY)); + } + break; + } + } + } + endBatch(); +} +function getDepFromReactive(object, key) { + const depMap = targetMap.get(object); + return depMap && depMap.get(key); +} +function reactiveReadArray(array) { + const raw = toRaw(array); + if (raw === array) return raw; + track(raw, "iterate", ARRAY_ITERATE_KEY); + return isShallow(array) ? raw : raw.map(toReactive); +} +function shallowReadArray(arr) { + track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); + return arr; +} +const arrayInstrumentations = { + __proto__: null, + [Symbol.iterator]() { + return iterator(this, Symbol.iterator, toReactive); + }, + concat(...args) { + return reactiveReadArray(this).concat( + ...args.map((x) => isArray$2(x) ? reactiveReadArray(x) : x) + ); + }, + entries() { + return iterator(this, "entries", (value) => { + value[1] = toReactive(value[1]); + return value; + }); + }, + every(fn, thisArg) { + return apply(this, "every", fn, thisArg, void 0, arguments); + }, + filter(fn, thisArg) { + return apply(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments); + }, + find(fn, thisArg) { + return apply(this, "find", fn, thisArg, toReactive, arguments); + }, + findIndex(fn, thisArg) { + return apply(this, "findIndex", fn, thisArg, void 0, arguments); + }, + findLast(fn, thisArg) { + return apply(this, "findLast", fn, thisArg, toReactive, arguments); + }, + findLastIndex(fn, thisArg) { + return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(fn, thisArg) { + return apply(this, "forEach", fn, thisArg, void 0, arguments); + }, + includes(...args) { + return searchProxy(this, "includes", args); + }, + indexOf(...args) { + return searchProxy(this, "indexOf", args); + }, + join(separator) { + return reactiveReadArray(this).join(separator); + }, + // keys() iterator only reads `length`, no optimisation required + lastIndexOf(...args) { + return searchProxy(this, "lastIndexOf", args); + }, + map(fn, thisArg) { + return apply(this, "map", fn, thisArg, void 0, arguments); + }, + pop() { + return noTracking(this, "pop"); + }, + push(...args) { + return noTracking(this, "push", args); + }, + reduce(fn, ...args) { + return reduce(this, "reduce", fn, args); + }, + reduceRight(fn, ...args) { + return reduce(this, "reduceRight", fn, args); + }, + shift() { + return noTracking(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(fn, thisArg) { + return apply(this, "some", fn, thisArg, void 0, arguments); + }, + splice(...args) { + return noTracking(this, "splice", args); + }, + toReversed() { + return reactiveReadArray(this).toReversed(); + }, + toSorted(comparer) { + return reactiveReadArray(this).toSorted(comparer); + }, + toSpliced(...args) { + return reactiveReadArray(this).toSpliced(...args); + }, + unshift(...args) { + return noTracking(this, "unshift", args); + }, + values() { + return iterator(this, "values", toReactive); + } +}; +function iterator(self2, method, wrapValue) { + const arr = shallowReadArray(self2); + const iter = arr[method](); + if (arr !== self2 && !isShallow(self2)) { + iter._next = iter.next; + iter.next = () => { + const result = iter._next(); + if (result.value) { + result.value = wrapValue(result.value); + } + return result; + }; + } + return iter; +} +const arrayProto = Array.prototype; +function apply(self2, method, fn, thisArg, wrappedRetFn, args) { + const arr = shallowReadArray(self2); + const needsWrap = arr !== self2 && !isShallow(self2); + const methodFn = arr[method]; + if (methodFn !== arrayProto[method]) { + const result2 = methodFn.apply(self2, args); + return needsWrap ? toReactive(result2) : result2; + } + let wrappedFn = fn; + if (arr !== self2) { + if (needsWrap) { + wrappedFn = function(item, index) { + return fn.call(this, toReactive(item), index, self2); + }; + } else if (fn.length > 2) { + wrappedFn = function(item, index) { + return fn.call(this, item, index, self2); + }; + } + } + const result = methodFn.call(arr, wrappedFn, thisArg); + return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; +} +function reduce(self2, method, fn, args) { + const arr = shallowReadArray(self2); + let wrappedFn = fn; + if (arr !== self2) { + if (!isShallow(self2)) { + wrappedFn = function(acc, item, index) { + return fn.call(this, acc, toReactive(item), index, self2); + }; + } else if (fn.length > 3) { + wrappedFn = function(acc, item, index) { + return fn.call(this, acc, item, index, self2); + }; + } + } + return arr[method](wrappedFn, ...args); +} +function searchProxy(self2, method, args) { + const arr = toRaw(self2); + track(arr, "iterate", ARRAY_ITERATE_KEY); + const res = arr[method](...args); + if ((res === -1 || res === false) && isProxy(args[0])) { + args[0] = toRaw(args[0]); + return arr[method](...args); + } + return res; +} +function noTracking(self2, method, args = []) { + pauseTracking(); + startBatch(); + const res = toRaw(self2)[method].apply(self2, args); + endBatch(); + resetTracking(); + return res; +} +const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`); +const builtInSymbols = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) +); +function hasOwnProperty$1(key) { + if (!isSymbol(key)) key = String(key); + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +class BaseReactiveHandler { + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target, key, receiver) { + if (key === "__v_skip") return target["__v_skip"]; + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { + return target; + } + return; + } + const targetIsArray = isArray$2(target); + if (!isReadonly2) { + let fn; + if (targetIsArray && (fn = arrayInstrumentations[key])) { + return fn; + } + if (key === "hasOwnProperty") { + return hasOwnProperty$1; + } + } + const res = Reflect.get( + target, + key, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + isRef(target) ? target : receiver + ); + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject$1(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +} +class MutableReactiveHandler extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target, key, value, receiver) { + let oldValue = target[key]; + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue); + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArray$2(target) && isRef(oldValue) && !isRef(value)) { + if (isOldValueReadonly) { + return false; + } else { + oldValue.value = value; + return true; + } + } + } + const hadKey = isArray$2(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set( + target, + key, + value, + isRef(target) ? target : receiver + ); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value); + } + } + return result; + } + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray$2(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); + } +} +class ReadonlyReactiveHandler extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target, key) { + return true; + } + deleteProperty(target, key) { + return true; + } +} +const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); +const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); +const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true); +const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); +const toShallow = (value) => value; +const getProto = (v) => Reflect.getPrototypeOf(v); +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +function createInstrumentations(readonly2, shallow) { + const instrumentations = { + get(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has } = getProto(rawTarget); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + if (has.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } + }, + get size() { + const target = this["__v_raw"]; + !readonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); + }, + has(key) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); + }, + forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = shallow ? toShallow : readonly2 ? toReadonly : toReactive; + !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + } + }; + extend$1( + instrumentations, + readonly2 ? { + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear") + } : { + add(value) { + if (!shallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger(target, "add", value, value); + } + return this; + }, + set(key, value) { + if (!shallow && !isShallow(value) && !isReadonly(value)) { + value = toRaw(value); + } + const target = toRaw(this); + const { has, get } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } + const oldValue = get.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value); + } + return this; + }, + delete(key) { + const target = toRaw(this); + const { has, get } = getProto(target); + let hadKey = has.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } + get ? get.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0); + } + return result; + }, + clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const result = target.clear(); + if (hadItems) { + trigger( + target, + "clear", + void 0, + void 0 + ); + } + return result; + } + } + ); + const iteratorMethods = [ + "keys", + "values", + "entries", + Symbol.iterator + ]; + iteratorMethods.forEach((method) => { + instrumentations[method] = createIterableMethod(method, readonly2, shallow); + }); + return instrumentations; +} +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = createInstrumentations(isReadonly2, shallow); + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +const mutableCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, false) +}; +const shallowCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, true) +}; +const readonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, false) +}; +const shallowReadonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, true) +}; +const reactiveMap = /* @__PURE__ */ new WeakMap(); +const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +const readonlyMap = /* @__PURE__ */ new WeakMap(); +const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject$1(target)) { + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return value ? !!value["__v_raw"] : false; +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { + def(value, "__v_skip", true); + } + return value; +} +const toReactive = (value) => isObject$1(value) ? reactive(value) : value; +const toReadonly = (value) => isObject$1(value) ? readonly(value) : value; +function isRef(r) { + return r ? r["__v_isRef"] === true : false; +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +class RefImpl { + constructor(value, isShallow2) { + this.dep = new Dep(); + this["__v_isRef"] = true; + this["__v_isShallow"] = false; + this._rawValue = isShallow2 ? value : toRaw(value); + this._value = isShallow2 ? value : toReactive(value); + this["__v_isShallow"] = isShallow2; + } + get value() { + { + this.dep.track(); + } + return this._value; + } + set value(newValue) { + const oldValue = this._rawValue; + const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); + newValue = useDirectValue ? newValue : toRaw(newValue); + if (hasChanged(newValue, oldValue)) { + this._rawValue = newValue; + this._value = useDirectValue ? newValue : toReactive(newValue); + { + this.dep.trigger(); + } + } + } +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +const shallowUnwrapHandlers = { + get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +function toRefs(object) { + const ret = isArray$2(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +class ObjectRefImpl { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this["__v_isRef"] = true; + this._value = void 0; + } + get value() { + const val = this._object[this._key]; + return this._value = val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +} +function propertyToRef(source, key, defaultValue) { + const val = source[key]; + return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue); +} +class ComputedRefImpl { + constructor(fn, setter, isSSR) { + this.fn = fn; + this.setter = setter; + this._value = void 0; + this.dep = new Dep(this); + this.__v_isRef = true; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 16; + this.globalVersion = globalVersion - 1; + this.next = void 0; + this.effect = this; + this["__v_isReadonly"] = !setter; + this.isSSR = isSSR; + } + /** + * @internal + */ + notify() { + this.flags |= 16; + if (!(this.flags & 8) && // avoid infinite self recursion + activeSub !== this) { + batch(this, true); + return true; + } + } + get value() { + const link = this.dep.track(); + refreshComputed(this); + if (link) { + link.version = this.dep.version; + } + return this._value; + } + set value(newValue) { + if (this.setter) { + this.setter(newValue); + } + } +} +function computed$1(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + if (isFunction$1(getterOrOptions)) { + getter = getterOrOptions; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, isSSR); + return cRef; +} +const INITIAL_WATCHER_VALUE = {}; +const cleanupMap = /* @__PURE__ */ new WeakMap(); +let activeWatcher = void 0; +function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { + if (owner) { + let cleanups = cleanupMap.get(owner); + if (!cleanups) cleanupMap.set(owner, cleanups = []); + cleanups.push(cleanupFn); + } +} +function watch$1(source, cb, options = EMPTY_OBJ) { + const { immediate, deep, once, scheduler, augmentJob, call } = options; + const reactiveGetter = (source2) => { + if (deep) return source2; + if (isShallow(source2) || deep === false || deep === 0) + return traverse(source2, 1); + return traverse(source2); + }; + let effect2; + let getter; + let cleanup; + let boundCleanup; + let forceTrigger = false; + let isMultiSource = false; + if (isRef(source)) { + getter = () => source.value; + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = () => reactiveGetter(source); + forceTrigger = true; + } else if (isArray$2(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); + getter = () => source.map((s) => { + if (isRef(s)) { + return s.value; + } else if (isReactive(s)) { + return reactiveGetter(s); + } else if (isFunction$1(s)) { + return call ? call(s, 2) : s(); + } else ; + }); + } else if (isFunction$1(source)) { + if (cb) { + getter = call ? () => call(source, 2) : source; + } else { + getter = () => { + if (cleanup) { + pauseTracking(); + try { + cleanup(); + } finally { + resetTracking(); + } + } + const currentEffect = activeWatcher; + activeWatcher = effect2; + try { + return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); + } finally { + activeWatcher = currentEffect; + } + }; + } + } else { + getter = NOOP; + } + if (cb && deep) { + const baseGetter = getter; + const depth = deep === true ? Infinity : deep; + getter = () => traverse(baseGetter(), depth); + } + const scope = getCurrentScope(); + const watchHandle = () => { + effect2.stop(); + if (scope && scope.active) { + remove(scope.effects, effect2); + } + }; + if (once && cb) { + const _cb = cb; + cb = (...args) => { + _cb(...args); + watchHandle(); + }; + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = (immediateFirstRun) => { + if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { + return; + } + if (cb) { + const newValue = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { + if (cleanup) { + cleanup(); + } + const currentWatcher = activeWatcher; + activeWatcher = effect2; + try { + const args = [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + boundCleanup + ]; + call ? call(cb, 3, args) : ( + // @ts-expect-error + cb(...args) + ); + oldValue = newValue; + } finally { + activeWatcher = currentWatcher; + } + } + } else { + effect2.run(); + } + }; + if (augmentJob) { + augmentJob(job); + } + effect2 = new ReactiveEffect(getter); + effect2.scheduler = scheduler ? () => scheduler(job, false) : job; + boundCleanup = (fn) => onWatcherCleanup(fn, false, effect2); + cleanup = effect2.onStop = () => { + const cleanups = cleanupMap.get(effect2); + if (cleanups) { + if (call) { + call(cleanups, 4); + } else { + for (const cleanup2 of cleanups) cleanup2(); + } + cleanupMap.delete(effect2); + } + }; + if (cb) { + if (immediate) { + job(true); + } else { + oldValue = effect2.run(); + } + } else if (scheduler) { + scheduler(job.bind(null, true), true); + } else { + effect2.run(); + } + watchHandle.pause = effect2.pause.bind(effect2); + watchHandle.resume = effect2.resume.bind(effect2); + watchHandle.stop = watchHandle; + return watchHandle; +} +function traverse(value, depth = Infinity, seen2) { + if (depth <= 0 || !isObject$1(value) || value["__v_skip"]) { + return value; + } + seen2 = seen2 || /* @__PURE__ */ new Set(); + if (seen2.has(value)) { + return value; + } + seen2.add(value); + depth--; + if (isRef(value)) { + traverse(value.value, depth, seen2); + } else if (isArray$2(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], depth, seen2); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v) => { + traverse(v, depth, seen2); + }); + } else if (isPlainObject$2(value)) { + for (const key in value) { + traverse(value[key], depth, seen2); + } + for (const key of Object.getOwnPropertySymbols(value)) { + if (Object.prototype.propertyIsEnumerable.call(value, key)) { + traverse(value[key], depth, seen2); + } + } + } + return value; +} +/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +const stack = []; +let isWarning = false; +function warn$1(msg, ...args) { + if (isWarning) return; + isWarning = true; + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + msg + args.map((a) => { + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); + isWarning = false; +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString$1(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction$1(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction$1(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + if (isArray$2(fn)) { + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; + } +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + if (errorHandler) { + pauseTracking(); + callWithErrorHandling(errorHandler, null, 10, [ + err, + exposedInstance, + errorInfo + ]); + resetTracking(); + return; + } + } + logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); +} +function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { + if (throwInProd) { + throw err; + } else { + console.error(err); + } +} +const queue = []; +let flushIndex = -1; +const pendingPostFlushCbs = []; +let activePostFlushCbs = null; +let postFlushIndex = 0; +const resolvedPromise = /* @__PURE__ */ Promise.resolve(); +let currentFlushPromise = null; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex$1(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { + start = middle + 1; + } else { + end = middle; + } + } + return start; +} +function queueJob(job) { + if (!(job.flags & 1)) { + const jobId = getId(job); + const lastJob = queue[queue.length - 1]; + if (!lastJob || // fast path when the job id is larger than the tail + !(job.flags & 2) && jobId >= getId(lastJob)) { + queue.push(job); + } else { + queue.splice(findInsertionIndex$1(jobId), 0, job); + } + job.flags |= 1; + queueFlush(); + } +} +function queueFlush() { + if (!currentFlushPromise) { + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function queuePostFlushCb(cb) { + if (!isArray$2(cb)) { + if (activePostFlushCbs && cb.id === -1) { + activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); + } else if (!(cb.flags & 1)) { + pendingPostFlushCbs.push(cb); + cb.flags |= 1; + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(instance, seen2, i = flushIndex + 1) { + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.flags & 2) { + if (instance && cb.id !== instance.uid) { + continue; + } + queue.splice(i, 1); + i--; + if (cb.flags & 4) { + cb.flags &= -2; + } + cb(); + if (!(cb.flags & 4)) { + cb.flags &= -2; + } + } + } +} +function flushPostFlushCbs(seen2) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a, b) => getId(a) - getId(b) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + const cb = activePostFlushCbs[postFlushIndex]; + if (cb.flags & 4) { + cb.flags &= -2; + } + if (!(cb.flags & 8)) cb(); + cb.flags &= -2; + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; +function flushJobs(seen2) { + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && !(job.flags & 8)) { + if (false) ; + if (job.flags & 4) { + job.flags &= ~1; + } + callWithErrorHandling( + job, + job.i, + job.i ? 15 : 14 + ); + if (!(job.flags & 4)) { + job.flags &= ~1; + } + } + } + } finally { + for (; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job) { + job.flags &= -2; + } + } + flushIndex = -1; + queue.length = 0; + flushPostFlushCbs(); + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(); + } + } +} +let currentRenderingInstance = null; +let currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +function withDirectives(vnode, directives) { + if (currentRenderingInstance === null) { + return vnode; + } + const instance = getComponentPublicInstance(currentRenderingInstance); + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; + if (dir) { + if (isFunction$1(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +const TeleportEndKey = Symbol("_vte"); +const isTeleport = (type) => type.__isTeleport; +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + vnode.transition = hooks; + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function defineComponent(options, extraOptions) { + return isFunction$1(options) ? ( + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + /* @__PURE__ */ (() => extend$1({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} +function markAsyncBoundary(instance) { + instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; +} +function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { + if (isArray$2(rawRef)) { + rawRef.forEach( + (r, i) => setRef( + r, + oldRawRef && (isArray$2(oldRawRef) ? oldRawRef[i] : oldRawRef), + parentSuspense, + vnode, + isUnmount + ) + ); + return; + } + if (isAsyncWrapper(vnode) && !isUnmount) { + if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { + setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); + } + return; + } + const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; + const value = isUnmount ? null : refValue; + const { i: owner, r: ref3 } = rawRef; + const oldRef = oldRawRef && oldRawRef.r; + const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; + const setupState = owner.setupState; + const rawSetupState = toRaw(setupState); + const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => { + return hasOwn(rawSetupState, key); + }; + if (oldRef != null && oldRef !== ref3) { + if (isString$1(oldRef)) { + refs[oldRef] = null; + if (canSetSetupRef(oldRef)) { + setupState[oldRef] = null; + } + } else if (isRef(oldRef)) { + oldRef.value = null; + } + } + if (isFunction$1(ref3)) { + callWithErrorHandling(ref3, owner, 12, [value, refs]); + } else { + const _isString = isString$1(ref3); + const _isRef = isRef(ref3); + if (_isString || _isRef) { + const doSet = () => { + if (rawRef.f) { + const existing = _isString ? canSetSetupRef(ref3) ? setupState[ref3] : refs[ref3] : ref3.value; + if (isUnmount) { + isArray$2(existing) && remove(existing, refValue); + } else { + if (!isArray$2(existing)) { + if (_isString) { + refs[ref3] = [refValue]; + if (canSetSetupRef(ref3)) { + setupState[ref3] = refs[ref3]; + } + } else { + ref3.value = [refValue]; + if (rawRef.k) refs[rawRef.k] = ref3.value; + } + } else if (!existing.includes(refValue)) { + existing.push(refValue); + } + } + } else if (_isString) { + refs[ref3] = value; + if (canSetSetupRef(ref3)) { + setupState[ref3] = value; + } + } else if (_isRef) { + ref3.value = value; + if (rawRef.k) refs[rawRef.k] = value; + } else ; + }; + if (value) { + doSet.id = -1; + queuePostRenderEffect(doSet, parentSuspense); + } else { + doSet(); + } + } + } +} +getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); +getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); +const isAsyncWrapper = (i) => !!i.type.__asyncLoader; +const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + pauseTracking(); + const reset = setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + reset(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } +} +const createHook = (lifecycle) => (hook, target = currentInstance) => { + if (!isInSSRComponentSetup || lifecycle === "sp") { + injectHook(lifecycle, (...args) => hook(...args), target); + } +}; +const onBeforeMount = createHook("bm"); +const onMounted = createHook("m"); +const onBeforeUpdate = createHook( + "bu" +); +const onUpdated = createHook("u"); +const onBeforeUnmount = createHook( + "bum" +); +const onUnmounted = createHook("um"); +const onServerPrefetch = createHook( + "sp" +); +const onRenderTriggered = createHook("rtg"); +const onRenderTracked = createHook("rtc"); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache; + const sourceIsArray = isArray$2(source); + if (sourceIsArray || isString$1(source)) { + const sourceIsReactiveArray = sourceIsArray && isReactive(source); + let needsWrap = false; + if (sourceIsReactiveArray) { + needsWrap = !isShallow(source); + source = shallowReadArray(source); + } + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem( + needsWrap ? toReactive(source[i]) : source[i], + i, + void 0, + cached + ); + } + } else if (typeof source === "number") { + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached); + } + } else if (isObject$1(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached); + } + } + } else { + ret = []; + } + return ret; +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { + if (name !== "default") props.name = name; + return openBlock(), createBlock( + Fragment, + null, + [createVNode("slot", props, fallback)], + 64 + ); + } + let slot = slots[name]; + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key; + const rendered = createBlock( + Fragment, + { + key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content + "" + }, + validSlotContent || [], + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) return true; + if (child.type === Comment) return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +const getPublicInstance = (i) => { + if (!i) return null; + if (isStatefulComponent(i)) return getComponentPublicInstance(i); + return getPublicInstance(i.parent); +}; +const publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ extend$1(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => i.props, + $attrs: (i) => i.attrs, + $slots: (i) => i.slots, + $refs: (i) => i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $host: (i) => i.ce, + $emit: (i) => i.emit, + $options: (i) => resolveMergedOptions(i), + $forceUpdate: (i) => i.f || (i.f = () => { + queueJob(i.update); + }), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => instanceWatch.bind(i) + }) +); +const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); +const PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + if (key === "__v_skip") { + return true; + } + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance.attrs, "get", ""); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else ; + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + data[key] = value; + return true; + } else if (hasOwn(instance.props, key)) { + return false; + } + if (key[0] === "$" && key.slice(1) in instance) { + return false; + } else { + { + ctx[key] = value; + } + } + return true; + }, + has({ + _: { data, setupState, accessCache, ctx, appContext, propsOptions } + }, key) { + let normalizedProps; + return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key); + }, + defineProperty(target, key, descriptor) { + if (descriptor.get != null) { + target._.accessCache[key] = 0; + } else if (hasOwn(descriptor, "value")) { + this.set(target, key, descriptor.value, null); + } + return Reflect.defineProperty(target, key, descriptor); + } +}; +function normalizePropsOrEmits(props) { + return isArray$2(props) ? props.reduce( + (normalized, p2) => (normalized[p2] = null, normalized), + {} + ) : props; +} +let shouldCacheAccess = true; +function applyOptions(instance) { + const options = resolveMergedOptions(instance); + const publicThis = instance.proxy; + const ctx = instance.ctx; + shouldCacheAccess = false; + if (options.beforeCreate) { + callHook(options.beforeCreate, instance, "bc"); + } + const { + // state + data: dataOptions, + computed: computedOptions, + methods, + watch: watchOptions, + provide: provideOptions, + inject: injectOptions, + // lifecycle + created, + beforeMount, + mounted, + beforeUpdate, + updated, + activated, + deactivated, + beforeDestroy, + beforeUnmount, + destroyed, + unmounted, + render, + renderTracked, + renderTriggered, + errorCaptured, + serverPrefetch, + // public API + expose, + inheritAttrs, + // assets + components, + directives, + filters + } = options; + const checkDuplicateProperties = null; + if (injectOptions) { + resolveInjections(injectOptions, ctx, checkDuplicateProperties); + } + if (methods) { + for (const key in methods) { + const methodHandler = methods[key]; + if (isFunction$1(methodHandler)) { + { + ctx[key] = methodHandler.bind(publicThis); + } + } + } + } + if (dataOptions) { + const data = dataOptions.call(publicThis, publicThis); + if (!isObject$1(data)) ; + else { + instance.data = reactive(data); + } + } + shouldCacheAccess = true; + if (computedOptions) { + for (const key in computedOptions) { + const opt = computedOptions[key]; + const get = isFunction$1(opt) ? opt.bind(publicThis, publicThis) : isFunction$1(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; + const set = !isFunction$1(opt) && isFunction$1(opt.set) ? opt.set.bind(publicThis) : NOOP; + const c = computed({ + get, + set + }); + Object.defineProperty(ctx, key, { + enumerable: true, + configurable: true, + get: () => c.value, + set: (v) => c.value = v + }); + } + } + if (watchOptions) { + for (const key in watchOptions) { + createWatcher(watchOptions[key], ctx, publicThis, key); + } + } + if (provideOptions) { + const provides = isFunction$1(provideOptions) ? provideOptions.call(publicThis) : provideOptions; + Reflect.ownKeys(provides).forEach((key) => { + provide(key, provides[key]); + }); + } + if (created) { + callHook(created, instance, "c"); + } + function registerLifecycleHook(register, hook) { + if (isArray$2(hook)) { + hook.forEach((_hook) => register(_hook.bind(publicThis))); + } else if (hook) { + register(hook.bind(publicThis)); + } + } + registerLifecycleHook(onBeforeMount, beforeMount); + registerLifecycleHook(onMounted, mounted); + registerLifecycleHook(onBeforeUpdate, beforeUpdate); + registerLifecycleHook(onUpdated, updated); + registerLifecycleHook(onActivated, activated); + registerLifecycleHook(onDeactivated, deactivated); + registerLifecycleHook(onErrorCaptured, errorCaptured); + registerLifecycleHook(onRenderTracked, renderTracked); + registerLifecycleHook(onRenderTriggered, renderTriggered); + registerLifecycleHook(onBeforeUnmount, beforeUnmount); + registerLifecycleHook(onUnmounted, unmounted); + registerLifecycleHook(onServerPrefetch, serverPrefetch); + if (isArray$2(expose)) { + if (expose.length) { + const exposed = instance.exposed || (instance.exposed = {}); + expose.forEach((key) => { + Object.defineProperty(exposed, key, { + get: () => publicThis[key], + set: (val) => publicThis[key] = val + }); + }); + } else if (!instance.exposed) { + instance.exposed = {}; + } + } + if (render && instance.render === NOOP) { + instance.render = render; + } + if (inheritAttrs != null) { + instance.inheritAttrs = inheritAttrs; + } + if (components) instance.components = components; + if (directives) instance.directives = directives; + if (serverPrefetch) { + markAsyncBoundary(instance); + } +} +function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) { + if (isArray$2(injectOptions)) { + injectOptions = normalizeInject(injectOptions); + } + for (const key in injectOptions) { + const opt = injectOptions[key]; + let injected; + if (isObject$1(opt)) { + if ("default" in opt) { + injected = inject( + opt.from || key, + opt.default, + true + ); + } else { + injected = inject(opt.from || key); + } + } else { + injected = inject(opt); + } + if (isRef(injected)) { + Object.defineProperty(ctx, key, { + enumerable: true, + configurable: true, + get: () => injected.value, + set: (v) => injected.value = v + }); + } else { + ctx[key] = injected; + } + } +} +function callHook(hook, instance, type) { + callWithAsyncErrorHandling( + isArray$2(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy), + instance, + type + ); +} +function createWatcher(raw, ctx, publicThis, key) { + let getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key]; + if (isString$1(raw)) { + const handler = ctx[raw]; + if (isFunction$1(handler)) { + { + watch(getter, handler); + } + } + } else if (isFunction$1(raw)) { + { + watch(getter, raw.bind(publicThis)); + } + } else if (isObject$1(raw)) { + if (isArray$2(raw)) { + raw.forEach((r) => createWatcher(r, ctx, publicThis, key)); + } else { + const handler = isFunction$1(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler]; + if (isFunction$1(handler)) { + watch(getter, handler, raw); + } + } + } else ; +} +function resolveMergedOptions(instance) { + const base = instance.type; + const { mixins, extends: extendsOptions } = base; + const { + mixins: globalMixins, + optionsCache: cache, + config: { optionMergeStrategies } + } = instance.appContext; + const cached = cache.get(base); + let resolved; + if (cached) { + resolved = cached; + } else if (!globalMixins.length && !mixins && !extendsOptions) { + { + resolved = base; + } + } else { + resolved = {}; + if (globalMixins.length) { + globalMixins.forEach( + (m) => mergeOptions$1(resolved, m, optionMergeStrategies, true) + ); + } + mergeOptions$1(resolved, base, optionMergeStrategies); + } + if (isObject$1(base)) { + cache.set(base, resolved); + } + return resolved; +} +function mergeOptions$1(to, from, strats, asMixin = false) { + const { mixins, extends: extendsOptions } = from; + if (extendsOptions) { + mergeOptions$1(to, extendsOptions, strats, true); + } + if (mixins) { + mixins.forEach( + (m) => mergeOptions$1(to, m, strats, true) + ); + } + for (const key in from) { + if (asMixin && key === "expose") ; + else { + const strat = internalOptionMergeStrats[key] || strats && strats[key]; + to[key] = strat ? strat(to[key], from[key]) : from[key]; + } + } + return to; +} +const internalOptionMergeStrats = { + data: mergeDataFn, + props: mergeEmitsOrPropsOptions, + emits: mergeEmitsOrPropsOptions, + // objects + methods: mergeObjectOptions, + computed: mergeObjectOptions, + // lifecycle + beforeCreate: mergeAsArray, + created: mergeAsArray, + beforeMount: mergeAsArray, + mounted: mergeAsArray, + beforeUpdate: mergeAsArray, + updated: mergeAsArray, + beforeDestroy: mergeAsArray, + beforeUnmount: mergeAsArray, + destroyed: mergeAsArray, + unmounted: mergeAsArray, + activated: mergeAsArray, + deactivated: mergeAsArray, + errorCaptured: mergeAsArray, + serverPrefetch: mergeAsArray, + // assets + components: mergeObjectOptions, + directives: mergeObjectOptions, + // watch + watch: mergeWatchOptions, + // provide / inject + provide: mergeDataFn, + inject: mergeInject +}; +function mergeDataFn(to, from) { + if (!from) { + return to; + } + if (!to) { + return from; + } + return function mergedDataFn() { + return extend$1( + isFunction$1(to) ? to.call(this, this) : to, + isFunction$1(from) ? from.call(this, this) : from + ); + }; +} +function mergeInject(to, from) { + return mergeObjectOptions(normalizeInject(to), normalizeInject(from)); +} +function normalizeInject(raw) { + if (isArray$2(raw)) { + const res = {}; + for (let i = 0; i < raw.length; i++) { + res[raw[i]] = raw[i]; + } + return res; + } + return raw; +} +function mergeAsArray(to, from) { + return to ? [...new Set([].concat(to, from))] : from; +} +function mergeObjectOptions(to, from) { + return to ? extend$1(/* @__PURE__ */ Object.create(null), to, from) : from; +} +function mergeEmitsOrPropsOptions(to, from) { + if (to) { + if (isArray$2(to) && isArray$2(from)) { + return [.../* @__PURE__ */ new Set([...to, ...from])]; + } + return extend$1( + /* @__PURE__ */ Object.create(null), + normalizePropsOrEmits(to), + normalizePropsOrEmits(from != null ? from : {}) + ); + } else { + return from; + } +} +function mergeWatchOptions(to, from) { + if (!to) return from; + if (!from) return to; + const merged = extend$1(/* @__PURE__ */ Object.create(null), to); + for (const key in from) { + merged[key] = mergeAsArray(to[key], from[key]); + } + return merged; +} +function createAppContext() { + return { + app: null, + config: { + isNativeTag: NO, + performance: false, + globalProperties: {}, + optionMergeStrategies: {}, + errorHandler: void 0, + warnHandler: void 0, + compilerOptions: {} + }, + mixins: [], + components: {}, + directives: {}, + provides: /* @__PURE__ */ Object.create(null), + optionsCache: /* @__PURE__ */ new WeakMap(), + propsCache: /* @__PURE__ */ new WeakMap(), + emitsCache: /* @__PURE__ */ new WeakMap() + }; +} +let uid$1 = 0; +function createAppAPI(render, hydrate) { + return function createApp2(rootComponent, rootProps = null) { + if (!isFunction$1(rootComponent)) { + rootComponent = extend$1({}, rootComponent); + } + if (rootProps != null && !isObject$1(rootProps)) { + rootProps = null; + } + const context = createAppContext(); + const installedPlugins = /* @__PURE__ */ new WeakSet(); + const pluginCleanupFns = []; + let isMounted = false; + const app2 = context.app = { + _uid: uid$1++, + _component: rootComponent, + _props: rootProps, + _container: null, + _context: context, + _instance: null, + version, + get config() { + return context.config; + }, + set config(v) { + }, + use(plugin, ...options) { + if (installedPlugins.has(plugin)) ; + else if (plugin && isFunction$1(plugin.install)) { + installedPlugins.add(plugin); + plugin.install(app2, ...options); + } else if (isFunction$1(plugin)) { + installedPlugins.add(plugin); + plugin(app2, ...options); + } else ; + return app2; + }, + mixin(mixin) { + { + if (!context.mixins.includes(mixin)) { + context.mixins.push(mixin); + } + } + return app2; + }, + component(name, component) { + if (!component) { + return context.components[name]; + } + context.components[name] = component; + return app2; + }, + directive(name, directive) { + if (!directive) { + return context.directives[name]; + } + context.directives[name] = directive; + return app2; + }, + mount(rootContainer, isHydrate, namespace) { + if (!isMounted) { + const vnode = app2._ceVNode || createVNode(rootComponent, rootProps); + vnode.appContext = context; + if (namespace === true) { + namespace = "svg"; + } else if (namespace === false) { + namespace = void 0; + } + { + render(vnode, rootContainer, namespace); + } + isMounted = true; + app2._container = rootContainer; + rootContainer.__vue_app__ = app2; + return getComponentPublicInstance(vnode.component); + } + }, + onUnmount(cleanupFn) { + pluginCleanupFns.push(cleanupFn); + }, + unmount() { + if (isMounted) { + callWithAsyncErrorHandling( + pluginCleanupFns, + app2._instance, + 16 + ); + render(null, app2._container); + delete app2._container.__vue_app__; + } + }, + provide(key, value) { + context.provides[key] = value; + return app2; + }, + runWithContext(fn) { + const lastApp = currentApp; + currentApp = app2; + try { + return fn(); + } finally { + currentApp = lastApp; + } + } + }; + return app2; + }; +} +let currentApp = null; +function provide(key, value) { + if (!currentInstance) ; + else { + let provides = currentInstance.provides; + const parentProvides = currentInstance.parent && currentInstance.parent.provides; + if (parentProvides === provides) { + provides = currentInstance.provides = Object.create(parentProvides); + } + provides[key] = value; + } +} +function inject(key, defaultValue, treatDefaultAsFactory = false) { + const instance = currentInstance || currentRenderingInstance; + if (instance || currentApp) { + const provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0; + if (provides && key in provides) { + return provides[key]; + } else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction$1(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue; + } else ; + } +} +function hasInjectionContext() { + return !!(currentInstance || currentRenderingInstance || currentApp); +} +const internalObjectProto = {}; +const createInternalObject = () => Object.create(internalObjectProto); +const isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto; +function initProps(instance, rawProps, isStateful, isSSR = false) { + const props = {}; + const attrs = createInternalObject(); + instance.propsDefaults = /* @__PURE__ */ Object.create(null); + setFullProps(instance, rawProps, props, attrs); + for (const key in instance.propsOptions[0]) { + if (!(key in props)) { + props[key] = void 0; + } + } + if (isStateful) { + instance.props = isSSR ? props : shallowReactive(props); + } else { + if (!instance.type.props) { + instance.props = attrs; + } else { + instance.props = props; + } + } + instance.attrs = attrs; +} +function updateProps(instance, rawProps, rawPrevProps, optimized) { + const { + props, + attrs, + vnode: { patchFlag } + } = instance; + const rawCurrentProps = toRaw(props); + const [options] = instance.propsOptions; + let hasAttrsChanged = false; + if ( + // always force full diff in dev + // - #1942 if hmr is enabled with sfc component + // - vite#872 non-sfc component used by sfc component + (optimized || patchFlag > 0) && !(patchFlag & 16) + ) { + if (patchFlag & 8) { + const propsToUpdate = instance.vnode.dynamicProps; + for (let i = 0; i < propsToUpdate.length; i++) { + let key = propsToUpdate[i]; + if (isEmitListener(instance.emitsOptions, key)) { + continue; + } + const value = rawProps[key]; + if (options) { + if (hasOwn(attrs, key)) { + if (value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } else { + const camelizedKey = camelize(key); + props[camelizedKey] = resolvePropValue( + options, + rawCurrentProps, + camelizedKey, + value, + instance, + false + ); + } + } else { + if (value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } + } + } + } else { + if (setFullProps(instance, rawProps, props, attrs)) { + hasAttrsChanged = true; + } + let kebabKey; + for (const key in rawCurrentProps) { + if (!rawProps || // for camelCase + !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case + // and converted to camelCase (#955) + ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) { + if (options) { + if (rawPrevProps && // for camelCase + (rawPrevProps[key] !== void 0 || // for kebab-case + rawPrevProps[kebabKey] !== void 0)) { + props[key] = resolvePropValue( + options, + rawCurrentProps, + key, + void 0, + instance, + true + ); + } + } else { + delete props[key]; + } + } + } + if (attrs !== rawCurrentProps) { + for (const key in attrs) { + if (!rawProps || !hasOwn(rawProps, key) && true) { + delete attrs[key]; + hasAttrsChanged = true; + } + } + } + } + if (hasAttrsChanged) { + trigger(instance.attrs, "set", ""); + } +} +function setFullProps(instance, rawProps, props, attrs) { + const [options, needCastKeys] = instance.propsOptions; + let hasAttrsChanged = false; + let rawCastValues; + if (rawProps) { + for (let key in rawProps) { + if (isReservedProp(key)) { + continue; + } + const value = rawProps[key]; + let camelKey; + if (options && hasOwn(options, camelKey = camelize(key))) { + if (!needCastKeys || !needCastKeys.includes(camelKey)) { + props[camelKey] = value; + } else { + (rawCastValues || (rawCastValues = {}))[camelKey] = value; + } + } else if (!isEmitListener(instance.emitsOptions, key)) { + if (!(key in attrs) || value !== attrs[key]) { + attrs[key] = value; + hasAttrsChanged = true; + } + } + } + } + if (needCastKeys) { + const rawCurrentProps = toRaw(props); + const castValues = rawCastValues || EMPTY_OBJ; + for (let i = 0; i < needCastKeys.length; i++) { + const key = needCastKeys[i]; + props[key] = resolvePropValue( + options, + rawCurrentProps, + key, + castValues[key], + instance, + !hasOwn(castValues, key) + ); + } + } + return hasAttrsChanged; +} +function resolvePropValue(options, props, key, value, instance, isAbsent) { + const opt = options[key]; + if (opt != null) { + const hasDefault = hasOwn(opt, "default"); + if (hasDefault && value === void 0) { + const defaultValue = opt.default; + if (opt.type !== Function && !opt.skipFactory && isFunction$1(defaultValue)) { + const { propsDefaults } = instance; + if (key in propsDefaults) { + value = propsDefaults[key]; + } else { + const reset = setCurrentInstance(instance); + value = propsDefaults[key] = defaultValue.call( + null, + props + ); + reset(); + } + } else { + value = defaultValue; + } + if (instance.ce) { + instance.ce._setProp(key, value); + } + } + if (opt[ + 0 + /* shouldCast */ + ]) { + if (isAbsent && !hasDefault) { + value = false; + } else if (opt[ + 1 + /* shouldCastTrue */ + ] && (value === "" || value === hyphenate(key))) { + value = true; + } + } + } + return value; +} +const mixinPropsCache = /* @__PURE__ */ new WeakMap(); +function normalizePropsOptions(comp, appContext, asMixin = false) { + const cache = asMixin ? mixinPropsCache : appContext.propsCache; + const cached = cache.get(comp); + if (cached) { + return cached; + } + const raw = comp.props; + const normalized = {}; + const needCastKeys = []; + let hasExtends = false; + if (!isFunction$1(comp)) { + const extendProps = (raw2) => { + hasExtends = true; + const [props, keys] = normalizePropsOptions(raw2, appContext, true); + extend$1(normalized, props); + if (keys) needCastKeys.push(...keys); + }; + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendProps); + } + if (comp.extends) { + extendProps(comp.extends); + } + if (comp.mixins) { + comp.mixins.forEach(extendProps); + } + } + if (!raw && !hasExtends) { + if (isObject$1(comp)) { + cache.set(comp, EMPTY_ARR); + } + return EMPTY_ARR; + } + if (isArray$2(raw)) { + for (let i = 0; i < raw.length; i++) { + const normalizedKey = camelize(raw[i]); + if (validatePropName(normalizedKey)) { + normalized[normalizedKey] = EMPTY_OBJ; + } + } + } else if (raw) { + for (const key in raw) { + const normalizedKey = camelize(key); + if (validatePropName(normalizedKey)) { + const opt = raw[key]; + const prop = normalized[normalizedKey] = isArray$2(opt) || isFunction$1(opt) ? { type: opt } : extend$1({}, opt); + const propType = prop.type; + let shouldCast = false; + let shouldCastTrue = true; + if (isArray$2(propType)) { + for (let index = 0; index < propType.length; ++index) { + const type = propType[index]; + const typeName = isFunction$1(type) && type.name; + if (typeName === "Boolean") { + shouldCast = true; + break; + } else if (typeName === "String") { + shouldCastTrue = false; + } + } + } else { + shouldCast = isFunction$1(propType) && propType.name === "Boolean"; + } + prop[ + 0 + /* shouldCast */ + ] = shouldCast; + prop[ + 1 + /* shouldCastTrue */ + ] = shouldCastTrue; + if (shouldCast || hasOwn(prop, "default")) { + needCastKeys.push(normalizedKey); + } + } + } + } + const res = [normalized, needCastKeys]; + if (isObject$1(comp)) { + cache.set(comp, res); + } + return res; +} +function validatePropName(key) { + if (key[0] !== "$" && !isReservedProp(key)) { + return true; + } + return false; +} +const isInternalKey = (key) => key[0] === "_" || key === "$stable"; +const normalizeSlotValue = (value) => isArray$2(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; +const normalizeSlot$1 = (key, rawSlot, ctx) => { + if (rawSlot._n) { + return rawSlot; + } + const normalized = withCtx((...args) => { + if (false) ; + return normalizeSlotValue(rawSlot(...args)); + }, ctx); + normalized._c = false; + return normalized; +}; +const normalizeObjectSlots = (rawSlots, slots, instance) => { + const ctx = rawSlots._ctx; + for (const key in rawSlots) { + if (isInternalKey(key)) continue; + const value = rawSlots[key]; + if (isFunction$1(value)) { + slots[key] = normalizeSlot$1(key, value, ctx); + } else if (value != null) { + const normalized = normalizeSlotValue(value); + slots[key] = () => normalized; + } + } +}; +const normalizeVNodeSlots = (instance, children) => { + const normalized = normalizeSlotValue(children); + instance.slots.default = () => normalized; +}; +const assignSlots = (slots, children, optimized) => { + for (const key in children) { + if (optimized || key !== "_") { + slots[key] = children[key]; + } + } +}; +const initSlots = (instance, children, optimized) => { + const slots = instance.slots = createInternalObject(); + if (instance.vnode.shapeFlag & 32) { + const type = children._; + if (type) { + assignSlots(slots, children, optimized); + if (optimized) { + def(slots, "_", type, true); + } + } else { + normalizeObjectSlots(children, slots); + } + } else if (children) { + normalizeVNodeSlots(instance, children); + } +}; +const updateSlots = (instance, children, optimized) => { + const { vnode, slots } = instance; + let needDeletionCheck = true; + let deletionComparisonTarget = EMPTY_OBJ; + if (vnode.shapeFlag & 32) { + const type = children._; + if (type) { + if (optimized && type === 1) { + needDeletionCheck = false; + } else { + assignSlots(slots, children, optimized); + } + } else { + needDeletionCheck = !children.$stable; + normalizeObjectSlots(children, slots); + } + deletionComparisonTarget = children; + } else if (children) { + normalizeVNodeSlots(instance, children); + deletionComparisonTarget = { default: 1 }; + } + if (needDeletionCheck) { + for (const key in slots) { + if (!isInternalKey(key) && deletionComparisonTarget[key] == null) { + delete slots[key]; + } + } + } +}; +const queuePostRenderEffect = queueEffectWithSuspense; +function createRenderer(options) { + return baseCreateRenderer(options); +} +function baseCreateRenderer(options, createHydrationFns) { + const target = getGlobalThis(); + target.__VUE__ = true; + const { + insert: hostInsert, + remove: hostRemove, + patchProp: hostPatchProp, + createElement: hostCreateElement, + createText: hostCreateText, + createComment: hostCreateComment, + setText: hostSetText, + setElementText: hostSetElementText, + parentNode: hostParentNode, + nextSibling: hostNextSibling, + setScopeId: hostSetScopeId = NOOP, + insertStaticContent: hostInsertStaticContent + } = options; + const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => { + if (n1 === n2) { + return; + } + if (n1 && !isSameVNodeType(n1, n2)) { + anchor = getNextHostNode(n1); + unmount(n1, parentComponent, parentSuspense, true); + n1 = null; + } + if (n2.patchFlag === -2) { + optimized = false; + n2.dynamicChildren = null; + } + const { type, ref: ref3, shapeFlag } = n2; + switch (type) { + case Text: + processText(n1, n2, container, anchor); + break; + case Comment: + processCommentNode(n1, n2, container, anchor); + break; + case Static: + if (n1 == null) { + mountStaticNode(n2, container, anchor, namespace); + } + break; + case Fragment: + processFragment( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + break; + default: + if (shapeFlag & 1) { + processElement( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } else if (shapeFlag & 6) { + processComponent( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } else if (shapeFlag & 64) { + type.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized, + internals + ); + } else if (shapeFlag & 128) { + type.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized, + internals + ); + } else ; + } + if (ref3 != null && parentComponent) { + setRef(ref3, n1 && n1.ref, parentSuspense, n2 || n1, !n2); + } + }; + const processText = (n1, n2, container, anchor) => { + if (n1 == null) { + hostInsert( + n2.el = hostCreateText(n2.children), + container, + anchor + ); + } else { + const el = n2.el = n1.el; + if (n2.children !== n1.children) { + hostSetText(el, n2.children); + } + } + }; + const processCommentNode = (n1, n2, container, anchor) => { + if (n1 == null) { + hostInsert( + n2.el = hostCreateComment(n2.children || ""), + container, + anchor + ); + } else { + n2.el = n1.el; + } + }; + const mountStaticNode = (n2, container, anchor, namespace) => { + [n2.el, n2.anchor] = hostInsertStaticContent( + n2.children, + container, + anchor, + namespace, + n2.el, + n2.anchor + ); + }; + const moveStaticNode = ({ el, anchor }, container, nextSibling) => { + let next; + while (el && el !== anchor) { + next = hostNextSibling(el); + hostInsert(el, container, nextSibling); + el = next; + } + hostInsert(anchor, container, nextSibling); + }; + const removeStaticNode = ({ el, anchor }) => { + let next; + while (el && el !== anchor) { + next = hostNextSibling(el); + hostRemove(el); + el = next; + } + hostRemove(anchor); + }; + const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { + if (n2.type === "svg") { + namespace = "svg"; + } else if (n2.type === "math") { + namespace = "mathml"; + } + if (n1 == null) { + mountElement( + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } else { + patchElement( + n1, + n2, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } + }; + const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { + let el; + let vnodeHook; + const { props, shapeFlag, transition, dirs } = vnode; + el = vnode.el = hostCreateElement( + vnode.type, + namespace, + props && props.is, + props + ); + if (shapeFlag & 8) { + hostSetElementText(el, vnode.children); + } else if (shapeFlag & 16) { + mountChildren( + vnode.children, + el, + null, + parentComponent, + parentSuspense, + resolveChildrenNamespace(vnode, namespace), + slotScopeIds, + optimized + ); + } + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "created"); + } + setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent); + if (props) { + for (const key in props) { + if (key !== "value" && !isReservedProp(key)) { + hostPatchProp(el, key, null, props[key], namespace, parentComponent); + } + } + if ("value" in props) { + hostPatchProp(el, "value", null, props.value, namespace); + } + if (vnodeHook = props.onVnodeBeforeMount) { + invokeVNodeHook(vnodeHook, parentComponent, vnode); + } + } + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); + } + const needCallTransitionHooks = needTransition(parentSuspense, transition); + if (needCallTransitionHooks) { + transition.beforeEnter(el); + } + hostInsert(el, container, anchor); + if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) { + queuePostRenderEffect(() => { + vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); + needCallTransitionHooks && transition.enter(el); + dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); + }, parentSuspense); + } + }; + const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => { + if (scopeId) { + hostSetScopeId(el, scopeId); + } + if (slotScopeIds) { + for (let i = 0; i < slotScopeIds.length; i++) { + hostSetScopeId(el, slotScopeIds[i]); + } + } + if (parentComponent) { + let subTree = parentComponent.subTree; + if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) { + const parentVNode = parentComponent.vnode; + setScopeId( + el, + parentVNode, + parentVNode.scopeId, + parentVNode.slotScopeIds, + parentComponent.parent + ); + } + } + }; + const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => { + for (let i = start; i < children.length; i++) { + const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]); + patch( + null, + child, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } + }; + const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { + const el = n2.el = n1.el; + let { patchFlag, dynamicChildren, dirs } = n2; + patchFlag |= n1.patchFlag & 16; + const oldProps = n1.props || EMPTY_OBJ; + const newProps = n2.props || EMPTY_OBJ; + let vnodeHook; + parentComponent && toggleRecurse(parentComponent, false); + if (vnodeHook = newProps.onVnodeBeforeUpdate) { + invokeVNodeHook(vnodeHook, parentComponent, n2, n1); + } + if (dirs) { + invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate"); + } + parentComponent && toggleRecurse(parentComponent, true); + if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) { + hostSetElementText(el, ""); + } + if (dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + el, + parentComponent, + parentSuspense, + resolveChildrenNamespace(n2, namespace), + slotScopeIds + ); + } else if (!optimized) { + patchChildren( + n1, + n2, + el, + null, + parentComponent, + parentSuspense, + resolveChildrenNamespace(n2, namespace), + slotScopeIds, + false + ); + } + if (patchFlag > 0) { + if (patchFlag & 16) { + patchProps(el, oldProps, newProps, parentComponent, namespace); + } else { + if (patchFlag & 2) { + if (oldProps.class !== newProps.class) { + hostPatchProp(el, "class", null, newProps.class, namespace); + } + } + if (patchFlag & 4) { + hostPatchProp(el, "style", oldProps.style, newProps.style, namespace); + } + if (patchFlag & 8) { + const propsToUpdate = n2.dynamicProps; + for (let i = 0; i < propsToUpdate.length; i++) { + const key = propsToUpdate[i]; + const prev = oldProps[key]; + const next = newProps[key]; + if (next !== prev || key === "value") { + hostPatchProp(el, key, prev, next, namespace, parentComponent); + } + } + } + } + if (patchFlag & 1) { + if (n1.children !== n2.children) { + hostSetElementText(el, n2.children); + } + } + } else if (!optimized && dynamicChildren == null) { + patchProps(el, oldProps, newProps, parentComponent, namespace); + } + if ((vnodeHook = newProps.onVnodeUpdated) || dirs) { + queuePostRenderEffect(() => { + vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1); + dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated"); + }, parentSuspense); + } + }; + const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => { + for (let i = 0; i < newChildren.length; i++) { + const oldVNode = oldChildren[i]; + const newVNode = newChildren[i]; + const container = ( + // oldVNode may be an errored async setup() component inside Suspense + // which will not have a mounted element + oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent + // of the Fragment itself so it can move its children. + (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement + // which also requires the correct parent container + !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything. + oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : ( + // In other cases, the parent container is not actually used so we + // just pass the block element here to avoid a DOM parentNode call. + fallbackContainer + ) + ); + patch( + oldVNode, + newVNode, + container, + null, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + true + ); + } + }; + const patchProps = (el, oldProps, newProps, parentComponent, namespace) => { + if (oldProps !== newProps) { + if (oldProps !== EMPTY_OBJ) { + for (const key in oldProps) { + if (!isReservedProp(key) && !(key in newProps)) { + hostPatchProp( + el, + key, + oldProps[key], + null, + namespace, + parentComponent + ); + } + } + } + for (const key in newProps) { + if (isReservedProp(key)) continue; + const next = newProps[key]; + const prev = oldProps[key]; + if (next !== prev && key !== "value") { + hostPatchProp(el, key, prev, next, namespace, parentComponent); + } + } + if ("value" in newProps) { + hostPatchProp(el, "value", oldProps.value, newProps.value, namespace); + } + } + }; + const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => { + const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(""); + const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(""); + let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2; + if (fragmentSlotScopeIds) { + slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; + } + if (n1 == null) { + hostInsert(fragmentStartAnchor, container, anchor); + hostInsert(fragmentEndAnchor, container, anchor); + mountChildren( + // #10007 + // such fragment like `<>` will be compiled into + // a fragment which doesn't have a children. + // In this case fallback to an empty array + n2.children || [], + container, + fragmentEndAnchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } else { + if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result + // of renderSlot() with no valid children + n1.dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + container, + parentComponent, + parentSuspense, + namespace, + slotScopeIds + ); + if ( + // #2080 if the stable fragment has a key, it's a