From 3b26fe4adc36d8d247ac431575879dac0afa7a8c Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sun, 23 Feb 2025 21:26:12 +0800 Subject: [PATCH] first commit --- .gitignore | 24 + .prettierrc.toml | 1 + .vscode/extensions.json | 3 + README.md | 5 + index.html | 14 + package-lock.json | 1875 ++++++++++++++++++++++++++++++++++++ package.json | 31 + public/Monaco.ttf | Bin 0 -> 48116 bytes public/favicon.ico | Bin 0 -> 2393 bytes public/style.css | 4 + src/App.vue | 54 ++ src/components/Editor.vue | 56 ++ src/components/Preview.vue | 41 + src/main.ts | 19 + src/store.ts | 5 + src/themes/createTheme.ts | 110 +++ src/themes/oneDark.ts | 149 +++ src/themes/smoothy.ts | 83 ++ src/vite-env.d.ts | 1 + tsconfig.app.json | 14 + tsconfig.json | 7 + tsconfig.node.json | 24 + vite.config.ts | 7 + 23 files changed, 2527 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc.toml create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/Monaco.ttf create mode 100644 public/favicon.ico create mode 100644 public/style.css create mode 100644 src/App.vue create mode 100644 src/components/Editor.vue create mode 100644 src/components/Preview.vue create mode 100644 src/main.ts create mode 100644 src/store.ts create mode 100644 src/themes/createTheme.ts create mode 100644 src/themes/oneDark.ts create mode 100644 src/themes/smoothy.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc.toml b/.prettierrc.toml new file mode 100644 index 0000000..d165b8d --- /dev/null +++ b/.prettierrc.toml @@ -0,0 +1 @@ +semi=false \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..74dbdd4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1875 @@ +{ + "name": "webfe", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webfe", + "version": "0.0.0", + "dependencies": { + "@codemirror/lang-css": "^6.3.1", + "@codemirror/lang-html": "^6.4.9", + "@codemirror/lang-javascript": "^6.2.3", + "@vueuse/core": "^12.7.0", + "codemirror": "^6.0.1", + "naive-ui": "^2.41.0", + "normalize.css": "^8.0.1", + "vue": "^3.5.13", + "vue-codemirror": "^6.1.1" + }, + "devDependencies": { + "@codemirror/state": "^6.5.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/tsconfig": "^0.7.0", + "prettier": "^3.5.2", + "typescript": "^5.7.3", + "vite": "^6.1.1", + "vue-tsc": "^2.2.2" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.18.6", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", + "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.0.tgz", + "integrity": "sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", + "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.1.7" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.9.tgz", + "integrity": "sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz", + "integrity": "sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.8", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.8.tgz", + "integrity": "sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.8.4", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.4.tgz", + "integrity": "sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.35.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.9", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.9.tgz", + "integrity": "sha512-7DdQ9aaZMMxuWB1u6IIFWWuK9NocVZwvo4nG8QjJTS6oZGvteoLSiXw3EbVZVlO08Ri2ltO89JVInMpfcJxhtg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", + "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.36.3", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.3.tgz", + "integrity": "sha512-N2bilM47QWC8Hnx0rMdDxO2x2ImJ1FvZWXubwKgjeoOrWwEiFrtpA7SFHcuZ+o2Ze2VzbkgbzWVj4+V18LVkeg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.5.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@css-render/plugin-bem": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz", + "integrity": "sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==", + "license": "MIT", + "peerDependencies": { + "css-render": "~0.15.14" + } + }, + "node_modules/@css-render/vue3-ssr": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", + "integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.11" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", + "license": "Apache-2.0" + }, + "node_modules/@lezer/common": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", + "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "license": "MIT" + }, + "node_modules/@lezer/css": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.10.tgz", + "integrity": "sha512-V5/89eDapjeAkWPBpWEfQjZ1Hag3aYUUJOL8213X0dFRuXJ4BXa5NKl9USzOnaLod4AOpmVCkduir2oKwZYZtg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz", + "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.4.21", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.21.tgz", + "integrity": "sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", + "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.11" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", + "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", + "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.11", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.2.tgz", + "integrity": "sha512-QotO41kurE5PLf3vrNgGTk3QswO2PdUFjBwNiOi7zMmGhwb25PSTh9hD1MCgKC06AVv+8sZQvlL3Do4TTVHSiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "12.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.7.0.tgz", + "integrity": "sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "12.7.0", + "@vueuse/shared": "12.7.0", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.7.0.tgz", + "integrity": "sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.7.0.tgz", + "integrity": "sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==", + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/alien-signals": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.4.tgz", + "integrity": "sha512-DJqqQD3XcsaQcQ1s+iE2jDUZmmQpXwHiR6fCAim/w87luaW+vmLY8fMlrdkmRwzaFXhkxf3rqPCR59tKVv1MDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, + "node_modules/css-render": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/css-render/-/css-render-0.15.14.tgz", + "integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "~0.8.0", + "csstype": "~3.0.5" + } + }, + "node_modules/css-render/node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/evtd": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz", + "integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/naive-ui": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.41.0.tgz", + "integrity": "sha512-KnmLg+xPLwXV8QVR7ZZ69eCjvel7R5vru8+eFe4VoAJHEgqAJgVph6Zno9K2IVQRpSF3GBGea3tjavslOR4FAA==", + "license": "MIT", + "dependencies": { + "@css-render/plugin-bem": "^0.15.14", + "@css-render/vue3-ssr": "^0.15.14", + "@types/katex": "^0.16.2", + "@types/lodash": "^4.14.198", + "@types/lodash-es": "^4.17.9", + "async-validator": "^4.2.5", + "css-render": "^0.15.14", + "csstype": "^3.1.3", + "date-fns": "^3.6.0", + "date-fns-tz": "^3.1.3", + "evtd": "^0.2.4", + "highlight.js": "^11.8.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "seemly": "^0.3.8", + "treemate": "^0.3.11", + "vdirs": "^0.1.8", + "vooks": "^0.2.12", + "vueuc": "^0.4.63" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "license": "MIT" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", + "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" + } + }, + "node_modules/seemly": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz", + "integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" + }, + "node_modules/treemate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/treemate/-/treemate-0.3.11.tgz", + "integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vdirs": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz", + "integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==", + "license": "MIT", + "dependencies": { + "evtd": "^0.2.2" + }, + "peerDependencies": { + "vue": "^3.0.11" + } + }, + "node_modules/vite": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.5.2", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vooks": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", + "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", + "license": "MIT", + "dependencies": { + "evtd": "^0.2.2" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-codemirror": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-6.1.1.tgz", + "integrity": "sha512-rTAYo44owd282yVxKtJtnOi7ERAcXTeviwoPXjIc6K/IQYUsoDkzPvw/JDFtSP6T7Cz/2g3EHaEyeyaQCKoDMg==", + "license": "MIT", + "dependencies": { + "@codemirror/commands": "6.x", + "@codemirror/language": "6.x", + "@codemirror/state": "6.x", + "@codemirror/view": "6.x" + }, + "peerDependencies": { + "codemirror": "6.x", + "vue": "3.x" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.2.tgz", + "integrity": "sha512-1icPKkxAA5KTAaSwg0wVWdE48EdsH8fgvcbAiqojP4jXKl6LEM3soiW1aG/zrWrFt8Mw1ncG2vG1PvpZpVfehA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~2.4.11", + "@vue/language-core": "2.2.2" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vueuc": { + "version": "0.4.64", + "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.64.tgz", + "integrity": "sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==", + "license": "MIT", + "dependencies": { + "@css-render/vue3-ssr": "^0.15.10", + "@juggle/resize-observer": "^3.3.1", + "css-render": "^0.15.10", + "evtd": "^0.2.4", + "seemly": "^0.3.6", + "vdirs": "^0.1.4", + "vooks": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.11" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..68af6cc --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "webfe", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "start": "vite", + "build": "vue-tsc -b && vite build", + "fmt": "prettier --write src/" + }, + "dependencies": { + "@codemirror/lang-css": "^6.3.1", + "@codemirror/lang-html": "^6.4.9", + "@codemirror/lang-javascript": "^6.2.3", + "@vueuse/core": "^12.7.0", + "codemirror": "^6.0.1", + "naive-ui": "^2.41.0", + "normalize.css": "^8.0.1", + "vue": "^3.5.13", + "vue-codemirror": "^6.1.1" + }, + "devDependencies": { + "@codemirror/state": "^6.5.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/tsconfig": "^0.7.0", + "prettier": "^3.5.2", + "typescript": "^5.7.3", + "vite": "^6.1.1", + "vue-tsc": "^2.2.2" + } +} diff --git a/public/Monaco.ttf b/public/Monaco.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c19946cb7c34be99a973b5d6d7748c29fa107841 GIT binary patch literal 48116 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

{_5u4p?N1)jV zvlJ3)LWCqd0>(2U94pR*w5~A3Mv#Cd*dve;ccY!}EKcMGLekpoah}n7&vt@z?EF@;L4;hFOuOb`F3HqZV8-=)F!BG{`^jUCfR8*N3 zZJJn;TY!+@IkR4an5hQwFt}GhY&G{QLODJumz7(Z&sEV?Ekv z=2rT0nAc`9VggiJQiZ2V^GpEs0xwbhaDxM<`oCKH0(2!E(SU{v;>r~fitdTWwSm9n zFBZ=FllZ@$6fXeWmz=}^%twaGT?m>RxyjHGN-ilpN)|+;?j%|VQGjmJB^PL}ICO+w zIR(okC8|?P<_qcmU3{zDX}q-myGDvjgXRM$tTCM!EJb*+`gNpV?G&R0#HfFEg8?gC z_-9Yn)52%S2>5OnUDwrer?8|?Pr(e|&{HG&swrU|HB2p|zNbN{VdlGdii9OSpYW~z zT~h1S#4hQ?etdH+q1gx&>$gD9F^*h-n$UCNeb{p5m_RM7X^2%ccU7Br?Vf>Dbp+rs z=;e}ew(ib4c6}EU@rhjQ=J+gGuo9 z$>;(^fs*;3Wpt4O!FNJF@k@h=j8Gz`m&93OD;EhwKqICU5jZ)dye5byt7x|+OJa-^ zMiVKmd>FjCUZ#ukFdB!ef;)A*OhJ%9D)Tu(cUe;@&k*UR2F{x%*jUU|i$V$OYnN@< z`0V_8V(oZ-@Zxaq3j@wahR<&}zkKe1l4ULHrd?Y-ZtBC^UnO_GJ~fnxJ%7Hqc_y;O zejC$u*TwZs>(@-hknFsEMVx_gav@h@I(kHNB}^c_T!7Y2N4#kANMf`U;c^1?L=d7yoTNkUe>a9nlMl4&Y8VO=1fC>q;WkZvL|N$T^BaYq@95*9ld@@tVOIU zmhq2qalUvi))H%p02yRbNT4v91OM;%$2h$J$5F+q=O6pPGPGZ;ec|zkZ@qm?-JwUm zJ^kA25B+6!-r{9vZ+S1Ns&34V+aCYti6@4ho%Zh1mCvo+RErUBM;obRIyo;l8;n&- ziZ9j9#fc^i4r2P8=&&bAVw4nSw>cf8pB(iLI~{a5X4agB_3~>LW&L z89@qQ61LqaMKAoI2$8>icZU43uLNzq{<$~?V;&6zHABs9vP2^jJ=$vFY@!4-hOBgn zPl6q%gC8K@=yFg|K2>M<3G_t@lGqgB-jqDjc;eA8A8ZPXOp6u2{fYe6?vcZW|6}i; zRyOs>Svig4o1gg+eJp6@f3H7zR4y@@;)yLsYFDm#zC zF5Ur+9L@A1&Eg1;a7O|>@zGH(u=EV>MY$={6^S%V!HWJw>y35}y2H}5b@_d|KJh`a zIXoZ@3-oj%z&<(#-h>>wdexJ?dGV>Ox8K+H%E)w@UoJFv6+XA%&Pg?~Pv>@yJ~Ohb zr;ExHfVK}h$;;&9|)+j1l^QHn{I!eWq=(qA*tnNXlM zl_=WgUZE<`3spf-p@MRvtD1?LnlJQkWsDeNvL3nX+}rQI_2~<9C;p(o_5A5G`}X-q z8tN9mcxTJh_sK@R>=DM^S7I&2Gu@St;7hb1H(Vjq>^9MAiIR-K3w%6MaWGX{J|v(z z4YX=}5m*7OzZ{pK?{5O_FJ((r^~ItoU%ATm-)#sl9+20z zVSbe~&L6vG)a0z3F(Vfz@AluzZ{LzMJIk|j=6e4cYDo^l;Qg4{e+P2ZvKWtv5fovg zL@`1HQ3Q9)CWV4G0_Q6sED9G*FKy5R3i8qVff=NJvj#+Xu0OHKoHJk`qHSyOCZ~}P z<%{GBDe+$!Sy)(CS6EOdobT$X>@r+Yp4HLTo|3bLXV6*)B0KX{mOVygU7cbKBVOYr zx5~Y`?TAdk)CMRGw3IbY8F2bow=TFKjFLkYBRvDFZ}h4COJA)?k<<9y-om?QKe~== zN8?A*n>^}??7PRlBFyUQ8Sr-7v5~pP^MQU4?j5Z0V~`ih&{pagS{3~$&eRVvwAAC{ z`xCTaDrmplVC`648Qw&i3}^O#KbCp#N(5TXL%f0_q6u4o-eg3oZP+>>*lLg5ardm8^wM?tL!UU3V0W!qy?^3@ z^k)SD!tzx^u_svu9U#LSyU%^Em@8rAT=WGJ`2n zHUTMPcN!p$ivnf_mLnovywky{;L;fYm%VsddXwY*0TcUwfobKARK!-pi15;z*QRubbp^{&i^8amaTeS~Y-ilUZ55fvJ%s z(nVuYsc|B#xkHdLGYL)O)+9wiE{ISl08$eZj?2=IY8D+;8rMsrP%(#x`KGX|50pTyj5@fw^jF0qOE-OpT^GhwnP z32Lzxz6UXo*fO16;g-LhM3>gg0#Upqoug>6^j zIkd{oo%T&;>}@EW>QIHdMVpYa#Dc*})YA-(GgNulr?JR_kD!?ph$(`h$H3baW7Icz z*q77QNJE9&jR>F;m6L`P1sJRTyMZXfO9@^#ez91nQMmZr>Dyz^Ja)nBUV6{7Py8a; zkl2l$b|0iU@CWhx+7bTe2M_pj(Q6vxJ%C<^a?kr_{%<&5WnlWyzI698P5Yt&z8@xh z(M$SIqoo3m=~eYLm8$H89KjO1`VhaCkID1$!mmNp$9^DpkazwnpW^Fyr+g<_=a>DD zl9%XAC&}63Y4q8_VqY{X!4NKB8yj}>D9jqoaqKgx7AYh|iTd+_{XSSfSUp<5+E zDgjxlbf*ohRF0Bo#9nhbVVfv*#(N*kb2+1(-*g>#ZGNZ4ZVNNYUrn1vVvS)oyQOo% zs|UKi!OM*U`HqPz@_l79+Gph4-<4Z)vZ8vzl%mAUOI^RqNGO~#p?b)Pn!NqHvhjM^ znkMWcvhjLsFHgn`@E1ftJJ8hc$6`eS1=YrSR#5o$XFmY{pzRD?d;`YmzN^2)f zDNM-vyz9%f#G)w^YD-Vl46L!z6bc6p&kkO*zaXhoaGKD^!3*uU!b{iaAu!6bX5x%q`u+4YBklqn9+>Bc2Q% zJ#lO0sFca;m)8!@NV$3Jq&u1)Uf5nYJ;OzI*|*J{9~Y5RJ)|(F)@r?L#@wdzVNSsN(C=r<$k++b2rA4nq;!66{LlKlvhAMw(vo7s+Ivd{FK*OpN_S64@s&PWnYG zJeswLQ$$NA!7V3o3(-c8$Cn(Ao%aqq3OGav;UXwEvxyiuLu?ERIT%6`MI^?>-cY|m zr3h&}y>Fn^z!Av z)$+WdTQ-M8?YXNrpYJe z({%KAVjWMx>QCi1`35sz4VxuF9>&Kx9q1E^h{Osp3R+D;OfVsy!qvD~z|}~}W)o8T z_y-ydiYe%WTB(5PsKsCz5Cuh*gi6&9u%aw_;BoDoIwLCb(xupen`YhGao54kcjm{C z5puUJu7&^cN#}&g<2QcLHT zA;X6Gsx!-rqDfYC6xK^wxhci#O(`t{b()fjXY_7p5rXNVVI_u4qc~`Y7?CL2W2Hzz zDkz{^M^y<_R+N&R-@8LWTVXfe_o9#h4&%6CdI1ZuzkJ!0wm!onJ6w`iOD4ReSbT%)0lMQNtIu9sU*h zV!=nV&P{I3JScx~VaPDIaL3VY zOSiW)P07mU&rVo!=S@W|bEdXT_b?XyMbaSJ#FJnsihSYBuM7*r4t|Z3KzRYkfQmfD zV1;)W8$l_4x?vF8B^Q0$QQrR6%J!eET>U0#cz?l~Rd2S_{})z3Zl_>2>7G#=IEHkV zO^7|l2GNQ*3ic;O7{ZY(5hjF6W*bd{K&oXRib*$z29jD7d*9nILy+`9Vq;1lE%Ug% zU>CeLKI6is9qm8)mXF4s8#E-*wRGM2RX=Ur|6P>y$M2%(y4ngqY87l>8MgxdAFbBm zjE|4A*-aVg=^16Epm#+SGI3TqyyO%dmj={J=Q9ewA9-DM4V`9pH1oa{c>G&xkX{wURE9Gfv< z&CUt8cGT9U*Oe?8S?P`6KK#hFgXmrV*es6?GX(USx|pab*U3pRkb$fWd=Sa_rF?=0 zXXS2ufDJL<7bOlh#LZRt9L(Rw);Yl2TV2n932AE`8;QKx5o5*}W$!-;q1_v*|ZnM)| z7RAr8M9?gLQ05|bLmBASW)yD{*yaPek)P(!8-RL{{%t^4SQ3K9@KJwT5nk<1)ws<3 zsg!iD;}eh=F-TSqf&+q=#h#S(YvQr-o8>q6o!~q8L>R_K`2=b1`5X@OYPpjp;9u_Y zUp|S6TTWy5wbyqctDpnC?E)~uw&h=J)I8(be6dN&VD#InfB;ye*a z7Blh!F&yec?Uj7dWzCjiy;6wPLbzChEN;!sMbL&Cd4*q~P7esEaW8Br)O?09CyHl6nn^M64t*3bPwd3DCGrt%ML(43R?~oOw?MHGJsg%#t+ttqVJA^9#W`1kWYdg+&UZt_94}=bp z2Uc+a^U@sv6!Y2ud7ZX!gC!!?ASDItvb=j!LQ7`?cgux?HOK?(wWoc3?t))Z=b$k`nU-*CWKm%l>{nw0iWdZm)8BH8&-DnFu z(CC1&3YLIP{vCzC@Y!{@-@f*_=kR;obL&S>o;-T}P4u_0x^d2vPtI*OOW4*{3E#+?V6_K(sU%4|rf`fIAr!n!AEKy2L5li#jLS&8v6JyNJ ziZOz@JV7B#P~~q1%7@Oh%brZpx_Kq%w{WE0fZ-k#6>z2FVp# z6B`}TdtGKsNiji4orY&^{Deh&?io}1)0s=^>JoG3Og&efAupRUps;zv&Xo^N&(6sm zxV3UXWKvZNN&X}xa@2}1cOG?FipHWaLvKgAeLxqbu@nQmB|BrcuXjeQ>(8NSR2Pn0_>IoiUzL8nljl=q+{ zUqrGwnr3N6MTI9KyqhN4B2pw*tOQk0P?*((_o+*-kEVmb>J^&46c!h?Zdhc}k6dXr516!R~l>g0&h#>UdJ#wq-+ zYbV79a=EdzbV_4cX(RL706X6XzKr4S^$lei_cUiE9A6DiEE2`i=#F=6bT>ptMaP(8 zs5c$BKoeQqkuU`|WYf|FXr-;Nv6=(N_yNkHDqCrkU9oDGFqOH0w&#MBz=$Q@k^=au zia9kZ=@J&=F?xiZ*RCb`jqcHpke0%Uq47x>6G~rSSe$7gJCfwJest-RuENK+5F2v5 z9yUg7t$Cxi>smUb>OrnjoG&JV;}7TRP-Bx;h!If2!(>E)D!2|lT+((|lKyB& z&lqI;3@IXRGcl@nd^@>$rTi8dyt3ypa&wz}ft0inxYI{knumX&0%{MJfgntZeJi0|l=duqUjB3>@ei z#MyZl_C=$z2Z@dnNs1Vf5bv-f@&PIkrUv{UmmvYpNDk~FiE<}PR>WVeRJhT#-pVai zG}%DK$7;+{!81xa3MGts7i0)GP_H@%Qq_r~PRzV0(L!c`kYx&_OmBpy0l~^R-N;TT zDHad=KbbK0zGYJe4jx#(aZ!7HEgvNxA!FsUWSReykoaX+Q!5`_93PTiyJg{_pIrIb z6JO1nI3itv(PS3+$MfY!{WpDiSpN3ma?E2jZ10`WFNvs^P{3jeg@wK%Yit;olN}dp z6RcuVx+r;)#DYN%!EU!1vj=4%!!a*a3W*5e6M|S?<{|tG!&|8DeIYZv=)1x~!|-z3<$o54?BmnE#W?A)E4-WX6p3Nw zL=Q=oe?>K2EpHXK@h7Q-|DP+(AxoII(n@pcr*{6o`_zsONc1zpE+9ObEtQV_l+g?k zaM3O&I0>t0ju%s$Tv8ZG3Fup8{q@yUDM1W50q-ZFa4S4{CY2PQqR>OXYhrZAAorMp z;@LILgY(W#lJCaTvH5t4LVjl_Nv)ea%S*;(Wsk0zJ8jGoRPwXxE-0n_g7+as--o0y zr`~1+>jM|04-Td13tdnQ$Waq+2y*S2j_gRS&1dRKyYh5aO*5@UDD2wgSy8NZfwdT2 z2wY%&g3OTP!Y(0&%|iubhQ{PLOo3U%ZhxYd;L^%nYO2o~B(xT6*oBlI9#gG4Vvz5r zv=qJ{3RttY{Yo?T&)OqFhKC&QGd}$XgsvH_UTmKlhX_Y9ObYXlnmG84fzn_njqYe} zosNI`p&EzBXqj79;}H8wxs&2HLo?X%0o)0A|1@`l#Ja=HE~nLkz!kAXSga<+PmN`J zs_^y7PH4n+X@O}IYE3(xt_*`c(STZrpwiMG&g^^YuDagAI$z)b@k6?e}IR(K5YJ=w$@*D zcJs@P84V*wH*P*lWpgx)^;3wpN~~@t%~wE;5=;h)P3V$a6!Jn7PA*6Sf`(p3lYg|y z_2hIL`SLLNWUV|(9=3{pPdvV7YoG4{7eK!UUlRZUReiq)^@{YifF(MpU_{s|hqjT^ za(x@W{;-_BmOMvZrr(215gI{g#r(Hp?9{@huz#oY@ac@5fg0___)|8!L4M0Tf?z$F*b(w1f3ED2U5Y~td{?*CsZa?9xB)- zWF+Y8Qo`{}+4G@fg@5+RCp0Pi#9cRcci+2`riJg97X&(!_}v-9!-353-k6$$yWcmQ z>A!FXA3{V_&Y@L8MC>r2aVy?|riU3Qy~rb9p95zUZbETE)W(!h7Z`OE!puDChz7(3 zYC_qCKmn8ruL8WILaWoOz5Nt|X;l__vjxI$wp4`Re)+kFhT!PU^LdK$KnAx?9!&i_ zUWn<9$MyU^{_|8S->;Jn!Hf#DpRkQzRH{H=w<=FT04 z8-IRIb@d#2qu+7-|7DF`%_mj%!l206K!>C+vYXVBGgDV&7nWEaCq@%m;Wria*J4<7 zE*Z7>X@o;G#fr%Zp$;m!nyX3Ek=1m#UdJa`u#K7GzRh8lxbLNB`ZSQVD^F)vGeeAO zY<=5n>F_M3?XQ`mKnv(Mx}s=R45j9K30DPMaW}lxkt2O|2?LW7;`-EmcN$QmMKr{e z8S*O)!$ug=5)(|uC=g>c6~+O@$wuGc>;Zi$*1Jdhsz!C*F>y@i&QVoEN8h{cE^JjJz@c4|wQbIxJ#*UH z=I-7-x2<)`&^dF4P5JI>PudnC?NNpGP;5$49qi|X>A(OZkK0jr?Lqic0 zvAB$=p#e)~(clXvAO9K4+bj4ezN(*YMnn@Y3jDJShN1%4c4RN`Y2IXVaMQEp)dQx) zS8NHHIIz$+c3@PJXBdJ@Tt;-^n#W5M^WtnM;6}!y&zlXm!DpaV-D$0Oz$nmJ{Q_7_ z2dbJLYe3%&mM25tN|Nz>j===4p?558ECYwuLpP)NxiQ>EYbS?mmGE*fn&6UpI|x!u z|H(?Nb2Y$MqI3^w1LRfH!2DrD^RrAhyY8u~zGwEJaA{m^>9ApCBYrY9eOJv2rc2Q? zGiI|_m#THQwZPfGE4!@^n(+&3W>W<^+hCeqLv?A*Y%nI|6uu(~aUvR{qvxd1oLHA& zaG4Dj$!O<{VfL^9;_FX-TY^REC``lrQH-W%Dfory#l`7qB_(NNTU*ECW@s)>PcJS> zODkz&&vA|R`bBxHVB=5|oul=Xsh1!)LQvuX7l_$`)O5Rp)^WEQgfOGgNdH0$kg)Ou zluFRxD1}kIR?i&7>UkL4q$)(+;Zm4h!k?}?U7A0-eoWbr_;^ou>#fNhBh$Tc(-Q5D zxEjZg>8KsRsA;FmwE6Pb&S<02fPz7KG*9acVOt1tN{vQT%R%6Wg?$3+gN1Vf06(A| zsdCg-KT5~zrHP%tgCrTOOh*B4TYdM&O>6JltOQ)?j#xT+D;1rY(#-ElFRW=T(!MKo+P=w&HD+kdzk!P`7Wj4YAOIW3Y z-YptRSR??Rs4mv#MZ0IM#;Bymaa0N&ZLU4o~Et z@jo#B=y+@+LQmGhVtj@*Zs892#t_O{<8UY>poSp?K`SuO`uC`y2pK{*P+P$g5h@@s z&7?^*DVLLjx=3B+w-V53j6Sq^)u%RqM| zy&<0=Bn@*hCxPJXQ9GmdK%9Z{W@*6o>Fv+>(-JYxD*YY_!B5Xee zW;=~TxBymqkC9$wv1H>JT&-Z^v_u&vT@I*`)o4-A^1=p6rc2amX9)-av`Ok!%nn4Pib* zj@`(`8BI0DtO}{9Z;>jB__W|I9x{EVTQ4K@3w;E|d$eE`+Y*gJNi3&KLR}x`?5n#v zmF%fVFh4ic`%_+5LXZ3+`Tk=QN%XB3$ckeVhK=2I%XyNtt){$YW80QJtD4J(l@H&z zg6y5%Az!_vqG0gCraKmH8Pe=^?;JH`#H78Ga>yMo|BZZpxm8~G(v=UN|8Q0FCNlQa zYfm11W$J_lQ}>>F@yTPaHI5_m_j!n6-LCC7-8!l!>5wBr+_><8gDoiH0rryX0w>yv zN)C0=kktunCb;;mfud>JKi~6Bql^Up|(Tc)dJx!>Okxh#C zvu~m`Bk)bV>?<@Mv>*Knb?FD<8=5KMgFzk_{cO|+ZrzX175mJ50kWjl`3hN&|Qhaf2k&s>hiOE8O+J7Jg(vDw|K~MbU*c+2pZ+Uaje>U^{&GI(k{tup+FHa>K zSJbZFg2A4GQ|8tpcYva&8Wla6T}TTunC(V-z@_eVjViz=<_T&O^6%1|(se+JU$pYj zp_MBS9%`#=X{j64(jq1vTuCpr9cp6FM~zwx&B}I#8djq{7H$>xg;IM0;iJdT-Eb<7 zQdx@Ct+a$mI5rM3??7^fBAtpJQPl}u#PkO;=O2l3O5&R zr@q9tzW-94FD|>g`)BQ~<+JDx zGwg|p3s04s4Db2Z$xp7T+QaX{$cIB}{8Boq1k*gz{-@kvgQ9xKjS&f`Fqget8EvOp z%}L3e>cflmKjMb;IpU`JzDJ+C?GBRdNBsi+fr*)$iyM1BfxD>Fogp~AI2wHA7ru20 zUx||gouUv&lhT1s%^EsI{s}$ZQGquOz#X&G6&HuYAmbc%q<)DwatpbKh@}Jf#Kt&L zJ;4x-GBB194tqgCb>d`6!C{P!vIG2BP^%4*cM1#wLdIA@@PbN&mFD-TOPP`~>SYc2 z+;~qNCn}KiN1aA4NP$Ki*+_9N-BL=+rU?K?^qdxKyGRE?d-?L^Bdg`3M@7%$ySwCO z($%$lch^4zQwRBbSJy-S)g3(-P<`oqR|mN)yE{4%S^NxOIADY5IA(G0`WCSWbi{x- zQ5f*AM$l zP2~g`H@#`&f`qVd9J5}1q+8HbA3-CjLwNYGn0!3P|H-En4L0j-liF^dy`*N`j|WXj z4i6)@^&8KQX%7x4kBj!qsMuPZU$SuRtqEm=Y-xH4O$O4;1M2+9*Gh_te8p*n1%n30 zmX+31I+^m6&B_f6colpBNJA%SPY`WkW`RAFjLGh z_lC)+Cbw z$KEtqZFreDD$>|jC{ws1y>2O@x&;Fa3Q#wgnsyAh_+Fu(ux_6ClP$xy-qyNc=;$?_ z^CquewCJ9?ytM4!dv1_kaa_le*%=$MvWw=ds2#j&c~yz$uAIo&?4{Rk?I+7X_8tuT zY32c?Fl1lNrI0g0uDATa^-k&uXzw?6W8Rd{*@*)Jd#_W^LAkDY4ubN%#%2!TQ!a@+ zhRS{(?2aK(*n~uJ0FKu|=8=<@_cg**?z0UNsn8CS!wDRT?{*o?u?9;5SRfmAdSd%I z^iD5KfU2j^PK7nvWcA)Fu|S%zq)wn7JoMjPgNkGVO?g&A(QpI^%J>UTq{gd+68}@e z>iM^zwEtvE8R1}8RQAuJ6cW8DCH`epGplT(9Mdf9fxWz+U#`4bLcMKyEUSk<5Xd%< zoq55hN~{UNZgnB%FGhZ$ln!Odc~-dCXyQbmR3FF8Fm#9@+bu$EtkJ5*(99<&jk>XP-Y% z{rvQx*IT&Y*R{`QpTj<1`5e_FX1vd4@IH3rz^*|&kk;x7L-L})dy^6chY}5p5piU) z#Cek;tTZD>z-h=}M+|~pPmCxeMa`i>)OcPcwHM=cAb5`@;TUP z#%4&lPBn>gT^Vue)8brfcE0B8zIn<%KqGi5GaOr$YXdI@s)`3qW#*N~AZ;jZMfZmz zdpeXOCRQyJPe4FQ5=tkr%Hl|m4_q=y`g4>3Ar)FQkn6~@9@V@@CI69LVX8)bPd^nC zY=5E0%rg0Kn5CJBPPty5xRRWe$F3w#lG7{Y3FImAj64SMbn@I%c@lYIDZ=*kY*uKk zTsHdHOAjWiT9sc`LsxfQ8~q!vYopJuGr3kihmA63oiRY{a})-MeGa5utFvvxIVDZ- zG3Z%OVK|Ff#I{BVJ!&1Z!p+z_P0NLX0tmSON=O(Aia{9ahU;r>2RZzS0dbbl4b96V z3ZscNa>`h>?ThDFwe5p<_Ey`T_vU(%BflqE<*T&b_T~q#b2Y=elCoCLXnCqS7yVj@ zthrf?@2bJLNnG_XI+}g28o3tk5ZC{@#C1;Vy^5-gobnkvvwE*mZc(|qq^$R9N8svx zSrBjTD6~GULYT$0KFw#0&4@E+X2iu}n*yr#a@YWa6282}z$c3?l<7^AvJ&ViS|~@M z)d7drSAYt;({KA?xP-zI6)3xcfIh8ObO3@Nv4vCj?!q7h!kcs_DgW{lr3Ir9eW*x? z^Zcmk_p;pe@OSz;hWnpGM4~o>MkH)bL?j+hCk0>ioIKN8)$r`#5IP#H5+ED>k;>?g z3wE`oBiPl>^xms=|aJVV#UM8GwP z+i9g&m2spj^CV?{*j(OtwI%3PXsW;`(9cyq0ahY#mCl-S71|5_S}hI}+9swm&MB5_ zKn-)6Z4^d1Cx;+LBlkm!l&lC%fM>Fj2xUrgROF~|27SusMg&PH(g!jP;Fa{x`Guv8 zGehe_{LWppxV-)_9xG9}p6PQLdl z9S7wTmawaNs5tU6``nobUsA1x3LcQ^JCSfO1(=1_7p0ZAC}u(QJWyN|l}45NqDYyB zKC+T9TGrLBp-tv5X>59*5sqarbv<_QI`@NBUFBc@_(dfA z%j1mad)DZxZegsHp3?r)o=V)3TskVOjy1DkL(p$E+JoyD1rg;J@$M!z-g~Z5om|VI z%CPVrg1Vpi+LT;S2Y8GKKnq&>8a3=3V3_)D%ENvDK#l&&6&2_Wf^l{ed(-@BfCsW$!!t{w_awj-2f5?(V#_qq}>@C1q7z!1(M& zzIhHZbT+_S@%em1qwHL65-gS{Dan(_nQ1kS41;;FA*xV{Pm#h08Vwajr!(9Tuf@cb zKm!$@fS0C}n9vvubf(uUGjl#Y;Po-8j$vHghPK2&_6^;Xhq5R-^Hp4;7NSr#d?C+t zQOu|zCBrw?Rjn(k@eLg_G`aQhM{1Ijl9vr#_Ryw5H5IwVNzpOh8ec`suM#I$3@S;A zj!mhnDvc+v4&0QPvSz`pZ>%XQ9X?^ee?L2;Vf@tDvtQp^GSWA?ta4n%xccND=StIm#~jORT?$ZV&lP=fkypyyEDE8lgJ)x!?nR^&JQhiwJBsml^ZV4*ip zSaZL1QW^-d<5(vB{Ib)$ltUsFvR*kTk{w;y;J@?)X~SWWIOT~}wPkw`v5KRx|AFrE zq~}GNfkC-U(UB;cX;u1Y$>NpV1`!EBT2X3<9}_)F)3ZQepec@EzA?{g?PxJTRyM8B zo>GwC_e^5t5F4R$yqq5A;>~Z)n=tjzt|#Q*wU<0cQXZQtf4zBe)8L__M{ZodbZ%+o zh|yvi>D(_be*3?E{``fd^FLX%=1DT))t>am(VOnsv%cClscy}d%{Mp9q*`ePboG4b z>QJr|I|pgi6V42c6qprNXyC@c)6v`*mR=Bwb3+OE6c8#j5~oGsC=AE!;QzmzA-V`v zdE$fQL{gK7dGfg6zlig%T_x|M`0z!4A?cEnuXc9}Qw1lCTx1WNN5Xl~2YOB;J-H0U zc+dy9#W<5L1WFYsmz`TiiW|I){Y4}HJ`<|2y^(U4rkb+VYGQ-8sd?ugjQVE$sv=j0b;)YD{qcK(>6)QqBZPm*DOgM3!D`b{$?^3#Km&{t{)*(M6MVGHXSC-%8{n{55ts_e|Aoj8{& zqjPCy_9_%bJUS$?wDHY18_QM|PCIk!?yawox{pYt{HKrP=U>^n`_?mOM*Vf;k$*hi z)ARVZ@@vONXV89{)m@k&+#%%D&~x8VJCmM+h=qW&S+s*mRdb*eeNc-GGFF2|uWucxzB2dGg{x~(#)@yy z%2-tv=JqLLC3mn_>;q~71+He5DFv>0g&~KQG+^(`MqmYcHVlGoP~WIxg$E{jfGtwj zAp^K*GSM@UIk=s4Wq@gcI0P1jqT+uDEa;d4NTz<+*a8aJbaqce70z!Qfnr)~EEo~#@R5UVH4HAruAS&pr1Dw(U zniQu{`bbdhZF*I|R^KSiOcr_(Vz7Kfk6Gdu`Y+L=w*8mr9s#)vPP(b*s*Ki?E3%b( zK@E&Y{0wMz2saAZF_o3RDycX-BiTMU|NpD*%;T#nt~ma?FOQHw5(p#^AS5qOjA0K1 zFf54yBE}$#?7I;{L_`Ecfd~i$6=aKHb)%xz;!>naEh4q3RgsFgvPH}Y^~_TU564MRIwT`%&mxXsMK(PVY6vplqTO@H6Omf1NyyLLP; zw`poxMu*I#l=IFXSu`-cDsmKI-Ax@g<9nTd2r=z}CWt((R4T~?6Puykx&Q;yOe4eU1@ zPhHD)XJtlOSI6247@m!Zu4keNNo!xhh)8z>HfwWKS(%BiuDCXt%SW*G`5C915ogcj z%<9hEfxuc>TQ8fKmU#5Yk%&?3Gdl5q4>%W89yxNimv+R-yDJ~L`v^TZcPCf3N7v5n z(XG=uS66%^I~?S@J-R}#_5arOxBlN_l+ovg?%;+lrzSq(eoY5qD>7FXYE@ouCp$Z@ zXIkfG5f`R2mhIu9J8H|$jHxLpsf^ur?&QtrUN0lso7Sa%2iCk`Vz`5vo|({BLl1Xm z{H3Pw3VH94o}m>d+bT}IGc$fWd(PV3EugP!6fp7_Iyu;rwCm--es3jLo!;chAi~1~-4po4H}}T^momID2a1=xW0>_TAc!p3_hCIo zj+2vUV)xEh7`V zD3Q-vmF^%!XKBLTDoques{FuJ_T*Oc@(A4OGkT;$qu-Zm<~QAsuR zr`5ePHI;#GSNHOPTT|WrXWW{~v|;!94p);^GyF!~R%>{!6VGf7e(bFz9a|H>JTK3k zk&vVoNwJtuk5wBln-3if#T z2G`NWuraDCIK1%Ad=wTby#1XpY%v3Y@Di*}21tacUf_fjy#!RUoAd~<8p2WU`vvmcep~9ZLdxMdH$l263XonNwD#SPIYPhGe~FY| z0KSkerc47UOF?5mewPxjkddUq)zU!Hzl`{Urb&b6NJF4+$otael7=+{-%G=ZGhzm) zltz|IqbS$tG13^~jCocX3k_orOXKd5#wP>(38XnO8{8*N;&{^Q(iL1Ug07-Zr7I^( zlc948X-^^DV$O@dk){@cSEZ6n@Vs;tWg;6*TL$3K)jOr>&^`S@>6)!z7a+W0M!t0I zLO{5gxzcs;?>f?+MV#3)q&YnR_pV0+IhV9=gw}a$!9(C#0AJ_9>-mw=f)uILK%7$e zURnYcgH2!ucnN$c-Lwx-_M1*f3n}M9AE4X|hf0e^ftlb|uoXN7UgMQm3!s1TUhpP3 z1}deS;p37R;0L6!WH2ZO(7U7@JOqfd^tiOl3tECqFaS&dJijvHmJzp%xMjpGBW_uR zw4CGR9G`|=+b-R*U%K@t={Am6jFDF6O1FCe_gCdhtCOWQARUm_MtHDk90~B;dGile!Fk7f(23{#60i+;0&w=?8}0=U z0`5E8@jtI24yx4Z{EiTFmJUEc+)%$A1H zZ@jiN$=~R5pNa9u^0P7!-;HB5TR6&Y&(4j1C;oJh1KNO)GP-fd%lPj;gJ7D@K+ane zwgs?j7UqRu7^BUu!BdwO%Hs?P9$OgrVfDkY`{o->7T(IkHTT%~VRS24?qI%dc{pY! zcA#v>8DlEv*q%`=zJ;rT@v$~oK2}dcVb3TOmPS=Q2|n+t=kEG;FBC?r)hDYDwZZDg zvKp|mhQi8Z=jPXh(O`8W6kRx93CxF2F5pAedsB^GXaR~f@vt~h3` zo9);pj0z<%7r7a;>S<*$H@p=suhz_gNM&p|O@2nw+OYaM9Zgn-+G63NJzD9G*f#5o zwy_H{ShAQ=(VbOC7os=m$vTGKG@x^o%ScL|`l=r~lzdjU3}D2dK$oge19h1OX|RT9 zD4)n-8maxgZAo=dRBkZK0T-B^@9Ga7xj|f(P16YyLwOW z>jQnLzw0A?tfTrwpK7%}(=+t0jxkpLpuX1aD${y>qi?lYC-t5FtyB7~UeU|ip~;$} zVrF?w)qWk&A-&2DTd(P#D$!edU2o`dU4<>GxAj;3jnD6w`WF_nuGTfWRx>nH*J-w9 zX^yVf4Vuf!w0ZhM^BLD$pqsQv3$|qOY<{{HT{B&woGB|h7%1_FJ5P@qkMTE-f5**`UEghF(5w_=u6CMvoagZv2FalddSb zvU+~Con1erc*(VMr!H-<@P=h&%WqNX-7_M}^jJ z*mzUTG_HZ~xJ@(Wv*Z^y3os{Q^XvuFw%mD_y+z&#+6dIYJl>dO`2Vw0-(mT&lj?MF z`Z>d$E1mhyVyD9MvgZ}g2N4@09*)=>vCr4om*8vZOY!-A>Ap-~FJHdzfi!r?%{1VnXr_1{9fe3bY#>_-tS+zl4`9h zs~+TSy&8#i6%wt2_x3v8{q3&&nu7#;4C%51$*~hTQC*hp=KbD-YzmcWGeV@=%gC7h zNTvfwB$Gt5kVS`FIrJv-$YjvlXGy-<)nwmi0cpXSlZc=MS%sY4j8t0S%91Uvyg7!1 zn~R*>h$LR;%Hj=3<@LzLZz8t$CP5kd|y+*eq_IR@nrB?J&+02N5Wa*5n55UwB~cr$`RKqQI^j*0?C z1VoTUK?Oyw1$0Jm5EGD7$AO>%1FMLWd2!ZqwraMvwranw?*8ikzyIjhUG=2H(s7{T z?#6TjFc<(ZXaMOXoWgW*+2!T4!;R_b`q=>|0SL%-0K_Nk=J_z3_5Az;^klX#2n|n3 z`ojNYhw?5D$+815Xz?fh|7Mbph)fBGMDL)vn+Fw#nvH-sG5UADN5;c`=lL?uWBa&3 znlgw}qW{3d{=n0BC+&tbJu-cG5>LiQAig=Cn<}d%gREnv$OH}x+WnxZ1yX zlVnL?P$(LORz#x}Nh%l>(*F$UeSlj7=zxxZ82~sAhQPt39Y7npKO{o-u)kmpK+DO) z5GXhja@(i?7}U88XvAj)430peaF7PSMxW|Ua0*RUH88Xy8u1Q0`>?`_E@cTGKyex{ z0ROkF0EvPl&~mbpR2+c8Q7|+TDfh3MP)^8?)2E{GgwW(7IV&e`a@M5>yu*U}hKYHp z2q+<-d^iLSI0DBTH*#;Z8geJ97WFy7eI-~+<|EZtk~4xQYxqhRXYXc^#TUe5VwHe) zR6oItA{lreul(vhmbV?u;$6Fw3yp>bf9xnsIc$HofZo5}_q&gEAHq$Wn5!*C8&Ecz zv@6MCp|$Qln~^7X%l{fIO2o07Z>la|_Bd?B80$2KnWm;U;0{z^E8dbsN zWqVj|Rq~U1cT8Sm+VZJ$;+ZnutyE)S;^sZ2dCplnOeSq5J=c@#(HGJ`sN>o0cFE4` z!vWDkmRM0E%%i|wk)_`%o_|3POlT^rs3ixfFbt@7l)~{&=&lWYF^Lb8Pmfxd#F!{* zvu1M;r5n$fs+?55V_8nqVETkyb}n~Ao)ZNAO_=fP%VNr6vuy`IUvti;gMFl~UoXd4 z=S&;Q)xr90jdKRyC`l|3Qx~;uE$Ar;Z_zH5J8&b$$^M^mXllE$TmHWGFVvtub~Ewy zBA%lYVH?C9rtl@a$!Bs`@6UJKgI6-1`47&VoZ6ap&5=0B4VE<0&c$%LM$6t})m&-UU&fiZr^g2DIWe%>OT2JEV{WgBL;M@++nrWvJ0EApD+Vr@Cy9NW5142J zMSNQERb{?=D<^$=zvripZ8Y*5t(yjw`ljYqM@6Q;s#bOk7Y0WhczbKfe4uPcJnPSD`ZW^qaS)QxvNB>u+RVGNvdSWl?zWjx|mbfKL z_EDpl&H(RZj7`L#`=cJPI)~l9_s}Olb83L-8^5&Nx)R?wcM-?o_RNxp@S)+VnVOe< z*osSMS32kCW6Vhhi)Q`kAZBdt?dfMMV12-CraM~>KIh75Q0;?K7l*19{a@Ra_d>@62r2{GG=X~;5 z=U#M`chkj;DQL+O>bq;^EWDae%3N&H8C*IOu)ghOe3VA@#MsGqPp=>%(-&5l3bbck zQNH^zc9T!#O=(3hZ1~|*z14#)eGqkQ#A$c_jYaI2uPkCZ9baKy7Crtj1Qu%|0EUuaxuGQ z)VHED-CM*~;1RWm1J!MYkNa*7UzmEc+#Q#D&%d&}3}fD#&_Ew9&6*NFjFkWAr?z+- zxeT!D!<>f%Ro$KS5y!Sv`A46Nj;b=9#Ec7lH+0=?yKlK|eE&dC!j7R4p?Za&oO8T& zr(oP$3h0xMjyfIUXLG-`xm4ZPKj=r{GxD{VUem&0Mvp@~k-eAq;12)lBVq%4zo*%} zO~$Pmi-zZ|lPOPsT5dG#*@dwmO6{!=DB5wogxk<~`aE9GaiW&&S0FZb(z%@$jxup@ z(^T1B^u4+dzPg6+gIE%BFjLrm-lRP!yEtp`N8Lk~x+@a9;evw$nM7+wPf1iIYuA?U z@&OMMI7(rC|I^%7YtBkiL6dw$-kTTp1nT%ZTt#7n|(UT2GXFs-+* zZN$OapCQ+w-)(=VaN=N%!bTz6I?gds=n_lYQemG~WfYrPF}bfjfIh$NqmlfQuU*Od zoY<$U59doOHd?T35qN9&e`G9xmAXo@#P!X-O~txRQ>8b;Sg#xNJR)0mT56GXs`7gS z<(9XSKGtjsJGsLn@5P>CQq=jIX`Eu}wipZYxHx!ati-suJo{8bts~{-^uRd$a%I&| pV_vYtmhw~!U$th*M(8h@v+1^<-)4Y1623EadrfWB^sKJ*`ELkAOBDbB literal 0 HcmV?d00001 diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..ffa254e --- /dev/null +++ b/public/style.css @@ -0,0 +1,4 @@ +@font-face { + font-family: "Monaco"; + src: url(/Monaco.ttf); +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..8041685 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/Editor.vue b/src/components/Editor.vue new file mode 100644 index 0000000..d9520b1 --- /dev/null +++ b/src/components/Editor.vue @@ -0,0 +1,56 @@ + + diff --git a/src/components/Preview.vue b/src/components/Preview.vue new file mode 100644 index 0000000..c91203e --- /dev/null +++ b/src/components/Preview.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..51c0666 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,19 @@ +import { createApp } from "vue" +import { + create, + NButton, + NFlex, + NSplit, + NTabs, + NTabPane, + NConfigProvider, +} from "naive-ui" +import "normalize.css" +import App from "./App.vue" + +const app = createApp(App) +const naive = create({ + components: [NButton, NSplit, NFlex, NTabs, NTabPane, NConfigProvider], +}) +app.use(naive) +app.mount("#app") diff --git a/src/store.ts b/src/store.ts new file mode 100644 index 0000000..63d4e22 --- /dev/null +++ b/src/store.ts @@ -0,0 +1,5 @@ +import { useStorage } from "@vueuse/core"; + +export const html = useStorage("web-html", `

黄岩一职
`) +export const css = useStorage("web-css", `.welcome { color: red; }`) +export const js = useStorage("web-js", "") \ No newline at end of file diff --git a/src/themes/createTheme.ts b/src/themes/createTheme.ts new file mode 100644 index 0000000..8894071 --- /dev/null +++ b/src/themes/createTheme.ts @@ -0,0 +1,110 @@ +import { + HighlightStyle, + type TagStyle, + syntaxHighlighting, + } from "@codemirror/language" + import { type Extension } from "@codemirror/state" + import { EditorView } from "@codemirror/view" + + interface Options { + /** + * Theme variant. Determines which styles CodeMirror will apply by default. + */ + variant: Variant + + /** + * Settings to customize the look of the editor, like background, gutter, selection and others. + */ + settings: Settings + + /** + * Syntax highlighting styles. + */ + styles: TagStyle[] + } + + type Variant = "light" | "dark" + + interface Settings { + /** + * Editor background. + */ + background: string + + /** + * Default text color. + */ + foreground: string + + /** + * Caret color. + */ + caret: string + + /** + * Selection background. + */ + selection: string + + /** + * Background of highlighted lines. + */ + lineHighlight: string + + /** + * Gutter background. + */ + gutterBackground: string + + /** + * Text color inside gutter. + */ + gutterForeground: string + + gutterBorderRight: string + } + + export const createTheme = ({ + variant, + settings, + styles, + }: Options): Extension => { + const theme = EditorView.theme( + { + // eslint-disable-next-line @typescript-eslint/naming-convention + "&": { + backgroundColor: settings.background, + color: settings.foreground, + }, + ".cm-content": { + caretColor: settings.caret, + }, + ".cm-cursor, .cm-dropCursor": { + borderLeftColor: settings.caret, + }, + "&.cm-focused .cm-selectionBackgroundm .cm-selectionBackground, .cm-content ::selection": + { + backgroundColor: settings.selection, + }, + ".cm-activeLine": { + backgroundColor: settings.lineHighlight, + }, + ".cm-gutters": { + backgroundColor: settings.gutterBackground, + borderRight: settings.gutterBorderRight, + color: settings.gutterForeground, + }, + ".cm-activeLineGutter": { + backgroundColor: settings.lineHighlight, + }, + }, + { + dark: variant === "dark", + }, + ) + + const highlightStyle = HighlightStyle.define(styles) + const extension = [theme, syntaxHighlighting(highlightStyle)] + + return extension + } \ No newline at end of file diff --git a/src/themes/oneDark.ts b/src/themes/oneDark.ts new file mode 100644 index 0000000..e1175e6 --- /dev/null +++ b/src/themes/oneDark.ts @@ -0,0 +1,149 @@ +import { HighlightStyle, syntaxHighlighting } from "@codemirror/language" +import { type Extension } from "@codemirror/state" +import { EditorView } from "@codemirror/view" +import { tags as t } from "@lezer/highlight" + +// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors + +const chalky = "#e5c07b", + coral = "#e06c75", + cyan = "#56b6c2", + invalid = "#ffffff", + ivory = "#abb2bf", + stone = "#7d8799", // Brightened compared to original to increase contrast + malibu = "#61afef", + sage = "#98c379", + whiskey = "#d19a66", + violet = "#c678dd", + darkBackground = "#26262a", + highlightBackground = "#2c313a", + background = "#101014", // naive-ui + tooltipBackground = "#353a42", + selection = "#3E4451", + cursor = "#528bff" + +/// The editor theme styles for One Dark. +const oneDarkTheme = EditorView.theme( + { + "&": { + color: ivory, + backgroundColor: background, + }, + + ".cm-content": { + caretColor: cursor, + }, + + ".cm-cursor, .cm-dropCursor": { borderLeftColor: cursor }, + "&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": + { backgroundColor: selection }, + + ".cm-panels": { backgroundColor: darkBackground, color: ivory }, + ".cm-panels.cm-panels-top": { borderBottom: "2px solid black" }, + ".cm-panels.cm-panels-bottom": { borderTop: "2px solid black" }, + + ".cm-searchMatch": { + backgroundColor: "#72a1ff59", + outline: "1px solid #457dff", + }, + ".cm-searchMatch.cm-searchMatch-selected": { + backgroundColor: "#6199ff2f", + }, + + ".cm-activeLine": { backgroundColor: "#6699ff0b" }, + ".cm-selectionMatch": { backgroundColor: "#aafe661a" }, + + "&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket": { + backgroundColor: "#bad0f847", + }, + + ".cm-gutters": { + backgroundColor: background, + color: stone, + border: "none", + }, + + ".cm-activeLineGutter": { + backgroundColor: highlightBackground, + }, + + ".cm-foldPlaceholder": { + backgroundColor: "transparent", + border: "none", + color: "#ddd", + }, + + ".cm-tooltip": { + border: "none", + backgroundColor: tooltipBackground, + }, + ".cm-tooltip .cm-tooltip-arrow:before": { + borderTopColor: "transparent", + borderBottomColor: "transparent", + }, + ".cm-tooltip .cm-tooltip-arrow:after": { + borderTopColor: tooltipBackground, + borderBottomColor: tooltipBackground, + }, + ".cm-tooltip-autocomplete": { + "& > ul > li[aria-selected]": { + backgroundColor: highlightBackground, + color: ivory, + }, + }, + }, + { dark: true }, +) + +/// The highlighting style for code in the One Dark theme. +const oneDarkHighlightStyle = HighlightStyle.define([ + { tag: t.keyword, color: violet }, + { + tag: [t.name, t.deleted, t.character, t.propertyName, t.macroName], + color: coral, + }, + { tag: [t.function(t.variableName), t.labelName], color: malibu }, + { tag: [t.color, t.constant(t.name), t.standard(t.name)], color: whiskey }, + { tag: [t.definition(t.name), t.separator], color: ivory }, + { + tag: [ + t.typeName, + t.className, + t.number, + t.changed, + t.annotation, + t.modifier, + t.self, + t.namespace, + ], + color: chalky, + }, + { + tag: [ + t.operator, + t.operatorKeyword, + t.url, + t.escape, + t.regexp, + t.link, + t.special(t.string), + ], + color: cyan, + }, + { tag: [t.meta, t.comment], color: stone }, + { tag: t.strong, fontWeight: "bold" }, + { tag: t.emphasis, fontStyle: "italic" }, + { tag: t.strikethrough, textDecoration: "line-through" }, + { tag: t.link, color: stone, textDecoration: "underline" }, + { tag: t.heading, fontWeight: "bold", color: coral }, + { tag: [t.atom, t.bool, t.special(t.variableName)], color: whiskey }, + { tag: [t.processingInstruction, t.string, t.inserted], color: sage }, + { tag: t.invalid, color: invalid }, +]) + +/// Extension to enable the One Dark theme (both the editor theme and +/// the highlight style). +export const oneDark: Extension = [ + oneDarkTheme, + syntaxHighlighting(oneDarkHighlightStyle), +] \ No newline at end of file diff --git a/src/themes/smoothy.ts b/src/themes/smoothy.ts new file mode 100644 index 0000000..158572b --- /dev/null +++ b/src/themes/smoothy.ts @@ -0,0 +1,83 @@ +import { tags as t } from "@lezer/highlight" +import { createTheme } from "./createTheme" + +// Author: Kenneth Reitz +export const smoothy = createTheme({ + variant: "light", + settings: { + background: "#FFFFFF", + foreground: "#000000", + caret: "#000000", + selection: "#FFFD0054", + gutterBackground: "#FFFFFF", + gutterForeground: "#00000070", + gutterBorderRight: "none", + lineHighlight: "#00000008", + }, + styles: [ + { + tag: t.comment, + color: "#CFCFCF", + }, + { + tag: [t.number, t.bool, t.null], + color: "#E66C29", + }, + { + tag: [ + t.className, + t.definition(t.propertyName), + t.function(t.variableName), + t.labelName, + t.definition(t.typeName), + ], + color: "#2EB43B", + }, + { + tag: t.keyword, + color: "#D8B229", + }, + { + tag: t.operator, + color: "#4EA44E", + fontWeight: "bold", + }, + { + tag: [t.definitionKeyword, t.modifier], + color: "#925A47", + }, + { + tag: t.string, + color: "#704D3D", + }, + { + tag: t.typeName, + color: "#2F8996", + }, + { + tag: [t.variableName, t.propertyName], + color: "#77ACB0", + }, + { + tag: t.self, + color: "#77ACB0", + fontWeight: "bold", + }, + { + tag: t.regexp, + color: "#E3965E", + }, + { + tag: [t.tagName, t.angleBracket], + color: "#BAA827", + }, + { + tag: t.attributeName, + color: "#B06520", + }, + { + tag: t.derefOperator, + color: "#000", + }, + ], +}) \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..7fb078c --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bbcf80c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], +})