diff --git a/.gitignore b/.gitignore index 345ff6f..2f5a024 100644 --- a/.gitignore +++ b/.gitignore @@ -2,13 +2,19 @@ config.js devices/* -tmp/ +tmp log.txt Macrame.exe -public +public/* + macros/* +!macros/TEST-* + +panels/* +!panels/test_panel + builds node_modules ToDo.md \ No newline at end of file diff --git a/app/helper/env-helper.go b/app/helper/env-helper.go index 28af4d4..0eb5e1e 100644 --- a/app/helper/env-helper.go +++ b/app/helper/env-helper.go @@ -36,7 +36,7 @@ func EnvGet(key string) string { if !configFileExists() { CreateConfigFile(configPath) - CheckFeDevDir() + CheckUIDevDir() } data, err := os.ReadFile(configPath) @@ -63,12 +63,12 @@ func configFileExists() bool { return err == nil } -func CheckFeDevDir() { +func CheckUIDevDir() { log.Println("Checking FE dev directory...") - _, err := os.Stat("fe") + _, err := os.Stat("ui") if err != nil { - log.Println("Error checking FE dev directory:", err) + log.Println("Error checking ui dev directory:", err) return } @@ -83,7 +83,7 @@ func copyConfigToFe() { return } - if err := os.WriteFile("fe/config.js", data, 0644); err != nil { + if err := os.WriteFile("ui/config.js", data, 0644); err != nil { log.Println("Error writing config.js:", err) } } diff --git a/be/app/api.go b/be/app/api.go deleted file mode 100644 index 41535e3..0000000 --- a/be/app/api.go +++ /dev/null @@ -1,99 +0,0 @@ -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 deleted file mode 100644 index 90165db..0000000 --- a/be/app/device.go +++ /dev/null @@ -1,245 +0,0 @@ -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 deleted file mode 100644 index 8adacde..0000000 --- a/be/app/helper/api-helper.go +++ /dev/null @@ -1,102 +0,0 @@ -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 deleted file mode 100644 index 579bc9e..0000000 --- a/be/app/helper/browser-helper.go +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index 38db5ba..0000000 --- a/be/app/helper/device-helper.go +++ /dev/null @@ -1,46 +0,0 @@ -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 deleted file mode 100644 index f5a6f91..0000000 --- a/be/app/helper/encrypt-helper.go +++ /dev/null @@ -1,105 +0,0 @@ -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 deleted file mode 100644 index 0c58023..0000000 --- a/be/app/helper/env-helper.go +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index ec6a94a..0000000 --- a/be/app/helper/macro-helper.go +++ /dev/null @@ -1,64 +0,0 @@ -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 deleted file mode 100644 index 4b82e5a..0000000 --- a/be/app/macro.go +++ /dev/null @@ -1,88 +0,0 @@ -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 deleted file mode 100644 index 774bbad..0000000 --- a/be/app/structs/api-struct.go +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index 39586cd..0000000 --- a/be/app/structs/device-struct.go +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index a22fa1b..0000000 --- a/be/app/structs/macro-struct.go +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index e0eb582..0000000 --- a/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 5bb53d8..0000000 --- a/be/devices/a42e16a8-0e99-4bb9-a93f-363740c45b24.key +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 203fbb3..0000000 --- a/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 4aa4e7a..0000000 --- a/be/devices/f70778be-99c1-4c5c-b1a2-36ef73d971a0.key +++ /dev/null @@ -1 +0,0 @@ -4MqIbBoPsHizsWCyeqg6gd/wpQzfhc7e \ No newline at end of file diff --git a/be/go.mod b/be/go.mod deleted file mode 100644 index abe1604..0000000 --- a/be/go.mod +++ /dev/null @@ -1,38 +0,0 @@ -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 deleted file mode 100644 index 27c1608..0000000 --- a/be/go.sum +++ /dev/null @@ -1,80 +0,0 @@ -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 deleted file mode 100644 index bc22877..0000000 --- a/be/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - 404 - BALLS - - - -

Balls found

- So not the content you're looking for. - - diff --git a/be/macroOLD/macro.go b/be/macroOLD/macro.go deleted file mode 100644 index 4abe231..0000000 --- a/be/macroOLD/macro.go +++ /dev/null @@ -1,162 +0,0 @@ -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 deleted file mode 100644 index 6c02643..0000000 --- a/be/main.go +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index d4bc9c7..0000000 --- a/be/tmp/build-errors.log +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 86c4c25..0000000 Binary files a/be/tmp/main.exe and /dev/null differ diff --git a/fe/assets/main.css b/fe/assets/main.css deleted file mode 100644 index 1b2d914..0000000 --- a/fe/assets/main.css +++ /dev/null @@ -1,4 +0,0 @@ -html, -body { - background-color: white; -} diff --git a/macros/TEST-Close_Application.json b/macros/TEST-Close_Application.json new file mode 100644 index 0000000..c481f1b --- /dev/null +++ b/macros/TEST-Close_Application.json @@ -0,0 +1,9 @@ +[ + { "code": "lalt", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "f4", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lalt", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "f4", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Close_Browser_Window.json b/macros/TEST-Close_Browser_Window.json new file mode 100644 index 0000000..63cb228 --- /dev/null +++ b/macros/TEST-Close_Browser_Window.json @@ -0,0 +1,13 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "w", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "w", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Close_Tab.json b/macros/TEST-Close_Tab.json new file mode 100644 index 0000000..577aa88 --- /dev/null +++ b/macros/TEST-Close_Tab.json @@ -0,0 +1,9 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "w", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "w", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Displays.json b/macros/TEST-Displays.json new file mode 100644 index 0000000..80ba168 --- /dev/null +++ b/macros/TEST-Displays.json @@ -0,0 +1,9 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "p", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "p", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Files.json b/macros/TEST-Files.json new file mode 100644 index 0000000..be664ab --- /dev/null +++ b/macros/TEST-Files.json @@ -0,0 +1,9 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "e", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "e", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Fullscreen.json b/macros/TEST-Fullscreen.json new file mode 100644 index 0000000..16aa578 --- /dev/null +++ b/macros/TEST-Fullscreen.json @@ -0,0 +1 @@ +[{"code":"f11","direction":"down","type":"key"},{"type":"delay","value":15},{"code":"f11","direction":"up","type":"key"}] \ No newline at end of file diff --git a/macros/TEST-Home.json b/macros/TEST-Home.json new file mode 100644 index 0000000..4782647 --- /dev/null +++ b/macros/TEST-Home.json @@ -0,0 +1,9 @@ +[ + { "code": "lalt", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "home", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "home", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lalt", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-New_Desktop.json b/macros/TEST-New_Desktop.json new file mode 100644 index 0000000..9ade4e0 --- /dev/null +++ b/macros/TEST-New_Desktop.json @@ -0,0 +1,13 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 50 }, + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 50 }, + { "code": "d", "direction": "down", "type": "key" }, + { "type": "delay", "value": 50 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 50 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 50 }, + { "code": "d", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-New_Tab.json b/macros/TEST-New_Tab.json new file mode 100644 index 0000000..f62acf0 --- /dev/null +++ b/macros/TEST-New_Tab.json @@ -0,0 +1,9 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "t", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "t", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-New_Window.json b/macros/TEST-New_Window.json new file mode 100644 index 0000000..8880f54 --- /dev/null +++ b/macros/TEST-New_Window.json @@ -0,0 +1,9 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "n", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "n", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Next_Tab.json b/macros/TEST-Next_Tab.json new file mode 100644 index 0000000..1ee9641 --- /dev/null +++ b/macros/TEST-Next_Tab.json @@ -0,0 +1,9 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-PlayPause.json b/macros/TEST-PlayPause.json new file mode 100644 index 0000000..5471bd1 --- /dev/null +++ b/macros/TEST-PlayPause.json @@ -0,0 +1 @@ +[{"code":"audio_play|audio_pause","direction":"down","type":"key"},{"type":"delay","value":15},{"code":"audio_play|audio_pause","direction":"up","type":"key"}] \ No newline at end of file diff --git a/macros/TEST-Previous_Tab.json b/macros/TEST-Previous_Tab.json new file mode 100644 index 0000000..57dfb44 --- /dev/null +++ b/macros/TEST-Previous_Tab.json @@ -0,0 +1,13 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-RunDialog.json b/macros/TEST-RunDialog.json new file mode 100644 index 0000000..4b73502 --- /dev/null +++ b/macros/TEST-RunDialog.json @@ -0,0 +1,9 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "r", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "r", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Settings.json b/macros/TEST-Settings.json new file mode 100644 index 0000000..fdc8f80 --- /dev/null +++ b/macros/TEST-Settings.json @@ -0,0 +1,9 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "i", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "i", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Task_manager.json b/macros/TEST-Task_manager.json new file mode 100644 index 0000000..732e5df --- /dev/null +++ b/macros/TEST-Task_manager.json @@ -0,0 +1,13 @@ +[ + { "code": "lctrl", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "esc", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "esc", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lshift", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lctrl", "direction": "up", "type": "key" } +] diff --git a/macros/TEST-Task_view.json b/macros/TEST-Task_view.json new file mode 100644 index 0000000..65901ec --- /dev/null +++ b/macros/TEST-Task_view.json @@ -0,0 +1,9 @@ +[ + { "code": "lcmd", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "down", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "lcmd", "direction": "up", "type": "key" }, + { "type": "delay", "value": 15 }, + { "code": "tab", "direction": "up", "type": "key" } +] diff --git a/macros/desktop.json b/macros/TEST-desktop.json similarity index 100% rename from macros/desktop.json rename to macros/TEST-desktop.json diff --git a/macros/task_manager.json b/macros/task_manager.json deleted file mode 100644 index 194fbc4..0000000 --- a/macros/task_manager.json +++ /dev/null @@ -1 +0,0 @@ -[{"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/panels/Elite_Dangerous/index.html b/panels/Elite_Dangerous/index.html deleted file mode 100644 index 2d230d9..0000000 --- a/panels/Elite_Dangerous/index.html +++ /dev/null @@ -1,913 +0,0 @@ - - - - - - Document - - - -
-
- - -
-

Maps

-
-
- - - - - - - - - - - - - System -
-
- - - - Galaxy -
-
-
- -
-

Frame Shift Drive

- -
- Toggle FSD -
- -
-
- Super Cruise -
-
- Hyper Space -
-
-
- -
-
-

Mode

- Analysis -
-
-
-
-
- Combat -
-
-

Hardpoints

- Retract -
-
-
-
-
- Deploy -
-
-
-
-
-

Panels

-
-
- External -
-
- Comms -
-
- Roles -
-
- Internal -
-
-
-
-
-

Scanner

-
-
- FSS -
-
- Discovery -
-
-
-
-
- Route: - Next System -
-
-
-
- Speed: - 0% -
-
-
-
-

Fighters

-
-
-
-
- - - - - Attack -
-
- - - - - - - - - - - - - Engage -
-
-
-
- - - - - - Defend -
-
- - - - - - - - - - - - - - - - - Hold -
-
-
-
- - - - - - - Follow -
-
- - - - Recall -
-
-
- -
-
-
- Wingman - #1 -
-
- Wingman - #2 -
-
- Wingman - #3 -
-
-
-
-
- -
-

Counter Measures

-
-
- Heatsink -
-
- Chaff -
-
- ECM -
-
- Shieldcell -
-
-
-
- -
-
-

Flight Assist

-
-
-
-
-
-
-
-
- Off - On -
-
-
- Rotational Correction -
-
-
- -
-
-

Lights

-
-
-
-
-
-
- Off - On -
-
-
-

Night Vis.

-
-
-
-
-
-
- Off - On -
-
-
-
-
-

Silent Running

-
-
-
-
-
-
- Off - On -
-
-
-
- - - - - JETTISON CARGO -
-
-
- -
-
- - - - - - - - - - - CAMERA -
- -
-
- - - - - -
-

Camera

-
-
- - - - - - - Camera Suite -
- -
-
- - - - - -
- - Previous - - Camera -
-
-
-
- - Next - - Camera -
- - - - - -
-
-
- - - - - - - - - - - - Free Camera -
-
-
- Position - #1 -
-
- Position - #2 -
-
-
-
-
-
-
-
-
- -
-
-
-
- - - - diff --git a/panels/Elite_Dangerous/input.css b/panels/Elite_Dangerous/input.css deleted file mode 100644 index 6056744..0000000 --- a/panels/Elite_Dangerous/input.css +++ /dev/null @@ -1,253 +0,0 @@ -@import url(https://fonts.bunny.net/css?family=orbitron:400,600,800); -@layer theme, utilities; -@import "tailwindcss/theme.css" layer(theme); -@import "tailwindcss/utilities.css" layer(utilities); - -@layer theme { - /* :root { - } */ -} - -html, -body, -#panel-html__body { - @apply relative; -} - -#panel-html__body { - --font-sans: "Orbitron", sans-serif; - @apply font-sans text-sm font-light tracking-wide bg-gray-900 text-slate-50 size-full; - - * { - box-sizing: border-box; - } -} - -.group-left, -.group-middle, -.group-right { - @apply grid gap-2 h-fit; -} - -.ed-panel { - @apply w-full p-2 border h-fit rounded-b-xl; - - h3, - h4 { - @apply m-0 mb-1 font-extralight; - } - - h3 { - @apply text-base; - } - - h4 { - @apply text-sm; - } - - &.pnl__blue { - @apply border-sky-300 bg-sky-500/30; - - h3, - h4 { - @apply text-sky-100; - - text-shadow: 0 0 0.2em var(--color-sky-300); - } - } - - &.pnl__yellow { - @apply border-amber-300 bg-amber-500/30; - - h3, - h4 { - @apply text-amber-100; - - text-shadow: 0 0 0.2em var(--color-amber-300); - } - } - - &.pnl__orange { - @apply border-orange-300 bg-orange-500/30; - - h3, - h4 { - @apply text-orange-100; - - text-shadow: 0 0 0.2em var(--color-orange-300); - } - } - - &.pnl__red { - @apply border-rose-300 bg-rose-500/30; - - h3, - h4 { - @apply text-rose-100; - - text-shadow: 0 0 0.2em var(--color-rose-400); - } - } - - &.pnl__white { - @apply border-white bg-white/20; - - h3, - h4 { - @apply text-white; - - text-shadow: 0 0 0.2em var(--color-white); - } - } -} - -.ed-button { - @apply flex items-center justify-center px-4 py-2 text-base text-center rounded-lg border-3; - - svg { - @apply block !size-5; - } - - &.btn__vertical { - @apply flex-col; - } - - &.btn__filled { - @apply text-gray-900; - } - - &.btn__orange { - @apply text-orange-100 border-orange-400 bg-orange-500/50; - - &.btn__filled { - @apply bg-orange-400; - } - } - - &.btn__yellow { - @apply text-orange-100 border-amber-400 bg-amber-500/50; - - &.btn__filled { - @apply bg-amber-400; - } - } - - &.btn__blue { - @apply border-sky-400 bg-sky-500/50 text-sky-100; - - &.btn__filled { - @apply bg-sky-500; - } - } - - &.btn__red { - @apply border-rose-500 bg-rose-600/50 text-rose-100; - - &.btn__filled { - @apply bg-rose-600; - } - } - - &.btn__white { - @apply border-white bg-white/30; - - &.btn__filled { - @apply bg-white; - } - } -} - -.ed-button-group__horizontal { - @apply grid divide-x; - - .ed-button { - @apply rounded-none; - - &:first-child { - @apply rounded-l-lg; - } - - &:last-child { - @apply rounded-r-lg; - } - } -} - -.ed-button-group__vertical { - @apply grid divide-y; - - .ed-button { - @apply rounded-none; - - &:first-child { - @apply rounded-t-lg; - } - - &:last-child { - @apply rounded-b-lg; - } - } -} - -.ed-toggle { - .toggle__wrapper { - @apply relative p-1.5 border-2 rounded-full size-full; - } - - .toggle__indicator { - @apply absolute transition rounded-full aspect-square; - } - - &.toggle__horizontal { - @apply w-20 h-12; - - .toggle__indicator { - @apply left-1.5 translate-x-0 h-[calc(100%-.75rem)]; - } - - &[active] .toggle__indicator { - @apply translate-x-full; - } - } - - &.toggle__vertical { - @apply w-12 h-20; - - .toggle__indicator { - @apply top-1.5 translate-y-0 w-[calc(100%-.75rem)]; - } - &[active] .toggle__indicator { - @apply translate-y-full; - } - } -} - -dialog[open] { - @apply absolute -translate-x-1/2 -translate-y-1/2 bg-transparent border-0 outline-0 top-1/2 left-1/2; - @apply backdrop:absolute backdrop:bg-black/50; - - .dialog__close { - @apply absolute text-white top-3 right-3; - } -} - -#clock { - @apply relative flex pr-16 text-3xl w-fit; - - i { - @apply pl-1 not-italic; - } - - .hours-minutes, - .seconds { - @apply flex gap-1; - } - - span { - @apply inline-block w-[.75em] text-center; - } - - sup { - @apply absolute right-0 w-16 pl-2 text-lg text-left opacity-80; - } -} diff --git a/panels/Elite_Dangerous/output.css b/panels/Elite_Dangerous/output.css deleted file mode 100644 index 4446c1f..0000000 --- a/panels/Elite_Dangerous/output.css +++ /dev/null @@ -1,688 +0,0 @@ -/*! tailwindcss v4.1.4 | MIT License | https://tailwindcss.com */ -@import url(https://fonts.bunny.net/css?family=orbitron:400,600,800); -@layer properties; -@layer theme, utilities; -@layer theme { - :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Color Emoji'; - --color-red-400: oklch(70.4% 0.191 22.216); - --color-red-500: oklch(63.7% 0.237 25.331); - --color-red-600: oklch(57.7% 0.245 27.325); - --color-orange-100: oklch(95.4% 0.038 75.164); - --color-orange-300: oklch(83.7% 0.128 66.29); - --color-orange-400: oklch(75% 0.183 55.934); - --color-orange-500: oklch(70.5% 0.213 47.604); - --color-amber-100: oklch(96.2% 0.059 95.617); - --color-amber-300: oklch(87.9% 0.169 91.605); - --color-amber-400: oklch(82.8% 0.189 84.429); - --color-amber-500: oklch(76.9% 0.188 70.08); - --color-lime-400: oklch(84.1% 0.238 128.85); - --color-lime-600: oklch(64.8% 0.2 131.684); - --color-sky-100: oklch(95.1% 0.026 236.824); - --color-sky-300: oklch(82.8% 0.111 230.318); - --color-sky-400: oklch(74.6% 0.16 232.661); - --color-sky-500: oklch(68.5% 0.169 237.323); - --color-sky-600: oklch(58.8% 0.158 241.966); - --color-sky-900: oklch(39.1% 0.09 240.876); - --color-rose-100: oklch(94.1% 0.03 12.58); - --color-rose-300: oklch(81% 0.117 11.638); - --color-rose-400: oklch(71.2% 0.194 13.428); - --color-rose-500: oklch(64.5% 0.246 16.439); - --color-rose-600: oklch(58.6% 0.253 17.585); - --color-slate-50: oklch(98.4% 0.003 247.858); - --color-slate-950: oklch(12.9% 0.042 264.695); - --color-gray-800: oklch(27.8% 0.033 256.848); - --color-gray-900: oklch(21% 0.034 264.665); - --color-black: #000; - --color-white: #fff; - --spacing: 0.25rem; - --text-xs: 0.75rem; - --text-xs--line-height: calc(1 / 0.75); - --text-sm: 0.875rem; - --text-sm--line-height: calc(1.25 / 0.875); - --text-base: 1rem; - --text-base--line-height: calc(1.5 / 1); - --text-lg: 1.125rem; - --text-lg--line-height: calc(1.75 / 1.125); - --text-3xl: 1.875rem; - --text-3xl--line-height: calc(2.25 / 1.875); - --font-weight-extralight: 200; - --font-weight-light: 300; - --tracking-wide: 0.025em; - --radius-lg: 0.5rem; - --radius-xl: 0.75rem; - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - } -} -@layer utilities { - .absolute { - position: absolute; - } - .relative { - position: relative; - } - .inset-0 { - inset: calc(var(--spacing) * 0); - } - .right-0 { - right: calc(var(--spacing) * 0); - } - .bottom-full { - bottom: 100%; - } - .m-0 { - margin: calc(var(--spacing) * 0); - } - .mt-4 { - margin-top: calc(var(--spacing) * 4); - } - .flex { - display: flex; - } - .grid { - display: grid; - } - .aspect-square { - aspect-ratio: 1 / 1; - } - .size-8 { - width: calc(var(--spacing) * 8); - height: calc(var(--spacing) * 8); - } - .size-16 { - width: calc(var(--spacing) * 16); - height: calc(var(--spacing) * 16); - } - .size-full { - width: 100%; - height: 100%; - } - .h-28 { - height: calc(var(--spacing) * 28); - } - .h-full { - height: 100%; - } - .\!w-fit { - width: fit-content !important; - } - .w-28 { - width: calc(var(--spacing) * 28); - } - .w-fit { - width: fit-content; - } - .w-full { - width: 100%; - } - .grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - .grid-cols-\[1fr_2fr\] { - grid-template-columns: 1fr 2fr; - } - .grid-cols-\[1fr_2fr_1fr\] { - grid-template-columns: 1fr 2fr 1fr; - } - .grid-cols-\[2fr_1fr\] { - grid-template-columns: 2fr 1fr; - } - .grid-cols-\[3fr_1fr_1fr\] { - grid-template-columns: 3fr 1fr 1fr; - } - .grid-rows-3 { - grid-template-rows: repeat(3, minmax(0, 1fr)); - } - .flex-col { - flex-direction: column; - } - .items-center { - align-items: center; - } - .items-end { - align-items: flex-end; - } - .\!justify-start { - justify-content: flex-start !important; - } - .justify-between { - justify-content: space-between; - } - .justify-center { - justify-content: center; - } - .justify-end { - justify-content: flex-end; - } - .justify-items-center { - justify-items: center; - } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .divide-x { - :where(& > :not(:last-child)) { - --tw-divide-x-reverse: 0; - border-inline-style: var(--tw-border-style); - border-inline-start-width: calc(1px * var(--tw-divide-x-reverse)); - border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); - } - } - .rounded-full { - border-radius: calc(infinity * 1px); - } - .\!rounded-tl-none { - border-top-left-radius: 0 !important; - } - .\!rounded-tr-none { - border-top-right-radius: 0 !important; - } - .\!rounded-b-none { - border-bottom-right-radius: 0 !important; - border-bottom-left-radius: 0 !important; - } - .border-3 { - border-style: var(--tw-border-style); - border-width: 3px; - } - .border-lime-600 { - border-color: var(--color-lime-600); - } - .border-red-500 { - border-color: var(--color-red-500); - } - .border-red-600 { - border-color: var(--color-red-600); - } - .border-sky-600 { - border-color: var(--color-sky-600); - } - .border-white { - border-color: var(--color-white); - } - .\!bg-sky-900 { - background-color: var(--color-sky-900) !important; - } - .bg-lime-400 { - background-color: var(--color-lime-400); - } - .bg-lime-400\/30 { - background-color: color-mix(in srgb, oklch(84.1% 0.238 128.85) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-lime-400) 30%, transparent); - } - } - .bg-red-400 { - background-color: var(--color-red-400); - } - .bg-red-400\/30 { - background-color: color-mix(in srgb, oklch(70.4% 0.191 22.216) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-red-400) 30%, transparent); - } - } - .bg-red-500\/80 { - background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-red-500) 80%, transparent); - } - } - .bg-sky-400 { - background-color: var(--color-sky-400); - } - .bg-sky-400\/30 { - background-color: color-mix(in srgb, oklch(74.6% 0.16 232.661) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-sky-400) 30%, transparent); - } - } - .bg-slate-950 { - background-color: var(--color-slate-950); - } - .bg-white { - background-color: var(--color-white); - } - .bg-white\/30 { - background-color: color-mix(in srgb, #fff 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 30%, transparent); - } - } - .\!p-0 { - padding: calc(var(--spacing) * 0) !important; - } - .\!p-4 { - padding: calc(var(--spacing) * 4) !important; - } - .p-2 { - padding: calc(var(--spacing) * 2); - } - .\!px-2 { - padding-inline: calc(var(--spacing) * 2) !important; - } - .\!pt-8 { - padding-top: calc(var(--spacing) * 8) !important; - } - .text-center { - text-align: center; - } - .text-left { - text-align: left; - } - .text-right { - text-align: right; - } - .text-base { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - .text-xs { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - .\!text-gray-800 { - color: var(--color-gray-800) !important; - } - .text-red-400 { - color: var(--color-red-400); - } - .text-white { - color: var(--color-white); - } - .opacity-80 { - opacity: 80%; - } - .opacity-90 { - opacity: 90%; - } -} -@layer theme; -html, body, #panel-html__body { - position: relative; -} -#panel-html__body { - --font-sans: "Orbitron", sans-serif; - width: 100%; - height: 100%; - background-color: var(--color-gray-900); - font-family: var(--font-sans); - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - --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); - * { - box-sizing: border-box; - } -} -.group-left, .group-middle, .group-right { - display: grid; - height: fit-content; - gap: calc(var(--spacing) * 2); -} -.ed-panel { - height: fit-content; - width: 100%; - border-bottom-right-radius: var(--radius-xl); - border-bottom-left-radius: var(--radius-xl); - border-style: var(--tw-border-style); - border-width: 1px; - padding: calc(var(--spacing) * 2); - h3, h4 { - margin: calc(var(--spacing) * 0); - margin-bottom: calc(var(--spacing) * 1); - --tw-font-weight: var(--font-weight-extralight); - font-weight: var(--font-weight-extralight); - } - h3 { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - h4 { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - &.pnl__blue { - border-color: var(--color-sky-300); - background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-sky-500) 30%, transparent); - } - h3, h4 { - color: var(--color-sky-100); - text-shadow: 0 0 0.2em var(--color-sky-300); - } - } - &.pnl__yellow { - border-color: var(--color-amber-300); - background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-amber-500) 30%, transparent); - } - h3, h4 { - color: var(--color-amber-100); - text-shadow: 0 0 0.2em var(--color-amber-300); - } - } - &.pnl__orange { - border-color: var(--color-orange-300); - background-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-orange-500) 30%, transparent); - } - h3, h4 { - color: var(--color-orange-100); - text-shadow: 0 0 0.2em var(--color-orange-300); - } - } - &.pnl__red { - border-color: var(--color-rose-300); - background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-rose-500) 30%, transparent); - } - h3, h4 { - color: var(--color-rose-100); - text-shadow: 0 0 0.2em var(--color-rose-400); - } - } - &.pnl__white { - border-color: var(--color-white); - background-color: color-mix(in srgb, #fff 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 20%, transparent); - } - h3, h4 { - color: var(--color-white); - text-shadow: 0 0 0.2em var(--color-white); - } - } -} -.ed-button { - display: flex; - align-items: center; - justify-content: center; - border-radius: var(--radius-lg); - border-style: var(--tw-border-style); - border-width: 3px; - padding-inline: calc(var(--spacing) * 4); - padding-block: calc(var(--spacing) * 2); - text-align: center; - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - svg { - display: block; - width: calc(var(--spacing) * 5) !important; - height: calc(var(--spacing) * 5) !important; - } - &.btn__vertical { - flex-direction: column; - } - &.btn__filled { - color: var(--color-gray-900); - } - &.btn__orange { - border-color: var(--color-orange-400); - background-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-orange-500) 50%, transparent); - } - color: var(--color-orange-100); - &.btn__filled { - background-color: var(--color-orange-400); - } - } - &.btn__yellow { - border-color: var(--color-amber-400); - background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-amber-500) 50%, transparent); - } - color: var(--color-orange-100); - &.btn__filled { - background-color: var(--color-amber-400); - } - } - &.btn__blue { - border-color: var(--color-sky-400); - background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-sky-500) 50%, transparent); - } - color: var(--color-sky-100); - &.btn__filled { - background-color: var(--color-sky-500); - } - } - &.btn__red { - border-color: var(--color-rose-500); - background-color: color-mix(in srgb, oklch(58.6% 0.253 17.585) 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-rose-600) 50%, transparent); - } - color: var(--color-rose-100); - &.btn__filled { - background-color: var(--color-rose-600); - } - } - &.btn__white { - border-color: var(--color-white); - background-color: color-mix(in srgb, #fff 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 30%, transparent); - } - &.btn__filled { - background-color: var(--color-white); - } - } -} -.ed-button-group__horizontal { - display: grid; - :where(& > :not(:last-child)) { - --tw-divide-x-reverse: 0; - border-inline-style: var(--tw-border-style); - border-inline-start-width: calc(1px * var(--tw-divide-x-reverse)); - border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); - } - .ed-button { - border-radius: 0; - &:first-child { - border-top-left-radius: var(--radius-lg); - border-bottom-left-radius: var(--radius-lg); - } - &:last-child { - border-top-right-radius: var(--radius-lg); - border-bottom-right-radius: var(--radius-lg); - } - } -} -.ed-button-group__vertical { - display: grid; - :where(& > :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))); - } - .ed-button { - border-radius: 0; - &:first-child { - border-top-left-radius: var(--radius-lg); - border-top-right-radius: var(--radius-lg); - } - &:last-child { - border-bottom-right-radius: var(--radius-lg); - border-bottom-left-radius: var(--radius-lg); - } - } -} -.ed-toggle { - .toggle__wrapper { - position: relative; - width: 100%; - height: 100%; - border-radius: calc(infinity * 1px); - border-style: var(--tw-border-style); - border-width: 2px; - padding: calc(var(--spacing) * 1.5); - } - .toggle__indicator { - position: absolute; - aspect-ratio: 1 / 1; - border-radius: calc(infinity * 1px); - 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)); - } - &.toggle__horizontal { - height: calc(var(--spacing) * 12); - width: calc(var(--spacing) * 20); - .toggle__indicator { - left: calc(var(--spacing) * 1.5); - height: calc(100% - .75rem); - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &[active] .toggle__indicator { - --tw-translate-x: 100%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - &.toggle__vertical { - height: calc(var(--spacing) * 20); - width: calc(var(--spacing) * 12); - .toggle__indicator { - top: calc(var(--spacing) * 1.5); - width: calc(100% - .75rem); - --tw-translate-y: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - &[active] .toggle__indicator { - --tw-translate-y: 100%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } -} -dialog[open] { - position: absolute; - top: calc(1/2 * 100%); - left: calc(1/2 * 100%); - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - 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); - border-style: var(--tw-border-style); - border-width: 0px; - background-color: transparent; - outline-style: var(--tw-outline-style); - outline-width: 0px; - &::backdrop { - background-color: color-mix(in srgb, #000 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); - } - } - .dialog__close { - position: absolute; - top: calc(var(--spacing) * 3); - right: calc(var(--spacing) * 3); - color: var(--color-white); - } -} -#clock { - position: relative; - display: flex; - width: fit-content; - padding-right: calc(var(--spacing) * 16); - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - i { - padding-left: calc(var(--spacing) * 1); - font-style: normal; - } - .hours-minutes, .seconds { - display: flex; - gap: calc(var(--spacing) * 1); - } - span { - display: inline-block; - width: .75em; - text-align: center; - } - sup { - position: absolute; - right: calc(var(--spacing) * 0); - width: calc(var(--spacing) * 16); - padding-left: calc(var(--spacing) * 2); - text-align: left; - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - opacity: 80%; - } -} -@property --tw-divide-x-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@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-divide-y-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@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-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@layer properties { - @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { - *, ::before, ::after, ::backdrop { - --tw-divide-x-reverse: 0; - --tw-border-style: solid; - --tw-font-weight: initial; - --tw-tracking: initial; - --tw-divide-y-reverse: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-translate-z: 0; - --tw-outline-style: solid; - } - } -} diff --git a/panels/Elite_Dangerous/package-lock.json b/panels/Elite_Dangerous/package-lock.json deleted file mode 100644 index 1fb3ab8..0000000 --- a/panels/Elite_Dangerous/package-lock.json +++ /dev/null @@ -1,974 +0,0 @@ -{ - "name": "test_panel", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "test_panel", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@tailwindcss/cli": "^4.1.2", - "tailwindcss": "^4.1.2" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/cli": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.4.tgz", - "integrity": "sha512-gP05Qihh+cZ2FqD5fa0WJXx3KEk2YWUYv/RBKAyiOg0V4vYVDr/xlLc0sacpnVEXM45BVUR9U2hsESufYs6YTA==", - "dev": true, - "dependencies": { - "@parcel/watcher": "^2.5.1", - "@tailwindcss/node": "4.1.4", - "@tailwindcss/oxide": "4.1.4", - "enhanced-resolve": "^5.18.1", - "mri": "^1.2.0", - "picocolors": "^1.1.1", - "tailwindcss": "4.1.4" - }, - "bin": { - "tailwindcss": "dist/index.mjs" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz", - "integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==", - "dev": true, - "dependencies": { - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "lightningcss": "1.29.2", - "tailwindcss": "4.1.4" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz", - "integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==", - "dev": true, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.4", - "@tailwindcss/oxide-darwin-arm64": "4.1.4", - "@tailwindcss/oxide-darwin-x64": "4.1.4", - "@tailwindcss/oxide-freebsd-x64": "4.1.4", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.4", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.4", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.4", - "@tailwindcss/oxide-linux-x64-musl": "4.1.4", - "@tailwindcss/oxide-wasm32-wasi": "4.1.4", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.4", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.4" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz", - "integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz", - "integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz", - "integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz", - "integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz", - "integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz", - "integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz", - "integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz", - "integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz", - "integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz", - "integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.0", - "@emnapi/runtime": "^1.4.0", - "@emnapi/wasi-threads": "^1.0.1", - "@napi-rs/wasm-runtime": "^0.2.8", - "@tybys/wasm-util": "^0.9.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz", - "integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz", - "integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true - }, - "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, - "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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/lightningcss": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", - "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "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" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", - "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - } - } -} diff --git a/panels/Elite_Dangerous/package.json b/panels/Elite_Dangerous/package.json deleted file mode 100644 index cf85d0c..0000000 --- a/panels/Elite_Dangerous/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "test_panel", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "npx tailwindcss -i ./input.css -o ./output.css --watch" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@tailwindcss/cli": "^4.1.2", - "tailwindcss": "^4.1.2" - } -} diff --git a/panels/Elite_Dangerous/panel.json b/panels/Elite_Dangerous/panel.json deleted file mode 100644 index 54ebe8c..0000000 --- a/panels/Elite_Dangerous/panel.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "dir": "", - "name": "Elite Dangerous", - "description": "A Semi Realistic button panel for Elite Dangerous, made by JaxxMoss.", - "aspectRatio": "16/10", - "macros": { - "CM__Chaff": "ED-CM-Chaff", - "CM__ECM": "ED-CM-ECM", - "CM__Heatsink": "ED-CM-Heat_Sink", - "CM__Shieldcell": "ED-CM-Schield_Cell", - "Camera__Pos1": "ED-Camera-Position1", - "Camera__Pos2": "ED-Camera-Position2", - "Camera__Suite": "ED-Camera-Suite", - "Comms__panel": "ED-Comms_Panel", - "External__panel": "ED-External_Panel", - "FSD__toggle": "ED-Toggle_FSD", - "Fighter__engage": "ED-Fighter-Engage", - "Fighter__hold": "ED-Fighter-Hold", - "Fighter__recall": "ED-Fighter-Recall", - "Fighter__wingman1": "ED-Fighter-Wingman1", - "Fighter__wingman2": "ED-Fighter-Wingman2", - "Fighter__wingman3": "ED-Fighter-Wingman3", - "Fighter_attack": "ED-Fighter-Attack", - "Fighter_defend": "ED-Fighter-Defend", - "Fighter_follow": "ED-Fighter-Follow", - "FlightAssist__toggle": "ED-Flight_Assist", - "Free__Camera": "ED-Camera-Free", - "Galaxy__map": "ED-Galaxy_Map", - "Hardpoints__toggle": "ED-Hardpoints_Switch", - "Hyper__Space": "ED-Hyperspace", - "Internal__panel": "ED-Internal_Panel", - "Jettison__Cargo": "ED-Jettison_Cargo", - "Lights__toggle": "ED-Flight_Assist", - "Mode__toggle": "ED-Mode_Switch", - "Next__Camera": "ED-Camera-Next", - "NightVis__toggle": "ED-Night_Vision", - "Previous__Camera": "ED-Camera-Previous", - "Roles__panel": "ED-Roles_Panel", - "Rotational__Correction": "ED-Rotational_Correction", - "Route__NextSystem": "ED-Route_Next_System", - "Scanner__DiscScan": "ED-Scanner_Discovery", - "Scanner__FSS": "ED-Scanner-FSS", - "SilentRunning__toggle": "ED-Silent_Running", - "Speed_0percent": "ED-0percent_Speed", - "Super__Cruise": "ED-Super_Cruise", - "System__map": "ED-System_Map" - } -} diff --git a/panels/Elite_Dangerous/tailwind.config.js b/panels/Elite_Dangerous/tailwind.config.js deleted file mode 100644 index 2c1a5aa..0000000 --- a/panels/Elite_Dangerous/tailwind.config.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./index.html", // Ensure this path is correct - ], - theme: { - extend: {}, - }, - safelist: [ - { - pattern: /^(border|bg)-(blue|red|sky|orange|lime)-(200|400|300\/40)$/, - }, - ], - plugins: [], - preflight: false, - mode: "jit", -}; diff --git a/panels/test_panel/panel.json b/panels/test_panel/panel.json index 27afffd..fcfbfdd 100644 --- a/panels/test_panel/panel.json +++ b/panels/test_panel/panel.json @@ -1 +1,24 @@ -{"dir":"","name":"Test Panel 1","description":"This is the very first panel to be created. It is a test panel for a mobile phone.","aspectRatio":"10/20","macros":{"button_1":"Task_Manager","button_10":"Close_Browser_Window","button_11":"Previous_Tab","button_12":"Next_Tab","button_13":"Close_Tab","button_14":"New_Tab","button_15":"Fullscreen","button_16":"Home","button_2":"Close_Application","button_3":"RunDialog","button_4":"Files","button_5":"Settings","button_6":"New_Desktop","button_7":"Displays","button_8":"Task_view","button_9":"New_Window"}} \ No newline at end of file +{ + "dir": "", + "name": "Test Panel 1", + "description": "This is the very first panel to be created. It is a test panel for a mobile phone.", + "aspectRatio": "10/20", + "macros": { + "button_1": "TEST-Task_Manager", + "button_10": "TEST-Close_Browser_Window", + "button_11": "TEST-Previous_Tab", + "button_12": "TEST-Next_Tab", + "button_13": "TEST-Close_Tab", + "button_14": "TEST-New_Tab", + "button_15": "TEST-Fullscreen", + "button_16": "TEST-Home", + "button_2": "TEST-Close_Application", + "button_3": "TEST-RunDialog", + "button_4": "TEST-Files", + "button_5": "TEST-Settings", + "button_6": "TEST-New_Desktop", + "button_7": "TEST-Displays", + "button_8": "TEST-Task_view", + "button_9": "TEST-New_Window" + } +} diff --git a/public/assets/DevicesView-DqasecOn.js b/public/assets/DevicesView-DqasecOn.js deleted file mode 100644 index 15fe568..0000000 --- a/public/assets/DevicesView-DqasecOn.js +++ /dev/null @@ -1,1758 +0,0 @@ -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 deleted file mode 100644 index 4735417..0000000 --- a/public/assets/DevicesView-Dw_Mls3X.css +++ /dev/null @@ -1,87 +0,0 @@ -/*! 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 deleted file mode 100644 index 70496d5..0000000 --- a/public/assets/DialogComp-Ba5-BUTe.js +++ /dev/null @@ -1,106 +0,0 @@ -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 deleted file mode 100644 index a8db749..0000000 --- a/public/assets/DialogComp-ByJn29_w.css +++ /dev/null @@ -1,357 +0,0 @@ -/*! 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 deleted file mode 100644 index fb3f526..0000000 --- a/public/assets/MacrosView-B-ccNLSC.css +++ /dev/null @@ -1,624 +0,0 @@ -/*! 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 deleted file mode 100644 index 5028ea7..0000000 --- a/public/assets/MacrosView-Bf1eb3go.js +++ /dev/null @@ -1,1419 +0,0 @@ -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 deleted file mode 100644 index f8d47ff..0000000 --- a/public/assets/PanelsView-DHxhdGwy.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 03a013a..0000000 --- a/public/assets/SettingsView-CVQl1jsc.js +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 34c8025..0000000 --- a/public/assets/index-DjeOPht9.css +++ /dev/null @@ -1,2256 +0,0 @@ -/*! 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 deleted file mode 100644 index e973032..0000000 --- a/public/assets/index-GNAKlyBz.js +++ /dev/null @@ -1,18013 +0,0 @@ -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