diff --git a/.gitignore b/.gitignore index d13ff2a..1d1e24c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,10 @@ dist/ config.json deploy.bat .env + +# TypeScript build info +*.tsbuildinfo + +# Vite generated files +vite.config.js +vite.config.d.ts diff --git a/index.html b/index.html new file mode 100644 index 0000000..4ad54ee --- /dev/null +++ b/index.html @@ -0,0 +1,34 @@ + + + + + + + + + + Code Paste | Syntax Highlight for Office + + + + + + + + + + + + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json index 0ee65c9..1d85122 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,24 @@ { "name": "code-paste", - "version": "3.1.1", + "version": "4.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "code-paste", - "version": "3.1.1", + "version": "4.0.0", "license": "MIT", "dependencies": { "alertifyjs": "^1.14.0", "jquery": "^3.7.1", - "prismjs": "^1.29.0" + "prismjs": "^1.29.0", + "vue": "^3.5.27" }, "devDependencies": { "@babel/preset-env": "^7.25.4", "@eslint/js": "^9.11.1", + "@types/prismjs": "^1.26.5", + "@vitejs/plugin-vue": "^6.0.4", "babel-loader": "^9.2.1", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-prismjs": "^2.1.0", @@ -35,6 +38,9 @@ "posthtml-modules": "^0.9.1", "rimraf": "^6.0.1", "shx": "^0.3.4", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vue-tsc": "^3.2.4", "webpack": "^5.95.0", "webpack-cli": "^5.1.4" } @@ -344,20 +350,18 @@ } }, "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==", - "dev": true, + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "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==", - "dev": true, + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -402,13 +406,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", - "dev": true, + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1710,14 +1713,13 @@ } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "dev": true, + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1744,229 +1746,671 @@ "node": ">=10.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" } }, - "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "node": ">=18" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.1", - "levn": "^0.4.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": ">=18" } }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": ">=18" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" @@ -2144,98 +2588,455 @@ "node": ">=8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], "dev": true, - "engines": { - "node": ">=6.0.0" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], "dev": true, - "engines": { - "node": ">=6.0.0" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "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==", - "dev": true + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], "dev": true, - "engines": { - "node": ">= 8" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -2275,10 +3076,11 @@ } }, "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 + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", @@ -2295,62 +3097,257 @@ "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "25.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", + "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz", + "integrity": "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", + "integrity": "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.27" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz", + "integrity": "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.27.tgz", + "integrity": "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz", + "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.27", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz", + "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.27", + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz", + "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.27", + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz", + "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.27", + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.4.tgz", + "integrity": "sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.27", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/language-core/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz", + "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz", + "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==", + "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "@vue/reactivity": "3.5.27", + "@vue/shared": "3.5.27" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.7.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", - "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", - "dev": true, + "node_modules/@vue/runtime-dom": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz", + "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "@vue/reactivity": "3.5.27", + "@vue/runtime-core": "3.5.27", + "@vue/shared": "3.5.27", + "csstype": "^3.2.3" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, + "node_modules/@vue/server-renderer": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz", + "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==", + "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27" + }, + "peerDependencies": { + "vue": "3.5.27" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "node_modules/@vue/shared": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz", + "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==", + "license": "MIT" }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", @@ -2655,6 +3652,13 @@ "resolved": "https://registry.npmjs.org/alertifyjs/-/alertifyjs-1.14.0.tgz", "integrity": "sha512-jUxJTcNYhJ2P1Wal73nmyTwMkaPim4PjZP9CAG+S8SK2SinraXxvOxnPrEY81/wc2iBPDFBP7mdg61db4WsuHQ==" }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3642,6 +4646,12 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -4060,6 +5070,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -4523,6 +5575,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6026,6 +7084,15 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6222,11 +7289,17 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "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/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -6581,6 +7654,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6649,10 +7729,10 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6767,10 +7847,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -6785,9 +7864,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -6963,18 +8043,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/postcss-merge-longhand": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", @@ -7554,6 +8622,16 @@ "node": ">=10" } }, + "node_modules/posthtml-cli/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/posthtml-expressions": { "version": "1.11.4", "resolved": "https://registry.npmjs.org/posthtml-expressions/-/posthtml-expressions-1.11.4.tgz", @@ -8004,6 +9082,51 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -8322,7 +9445,6 @@ "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==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8683,6 +9805,54 @@ "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", "dev": true }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-camel-case": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", @@ -8834,6 +10004,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -8850,10 +10034,11 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -8971,6 +10156,157 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", + "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-sfc": "3.5.27", + "@vue/runtime-dom": "3.5.27", + "@vue/server-renderer": "3.5.27", + "@vue/shared": "3.5.27" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.4.tgz", + "integrity": "sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.27", + "@vue/language-core": "3.2.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", @@ -9295,12 +10631,19 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index 73edd21..6e85309 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,22 @@ { "name": "code-paste", - "version": "3.1.1", + "version": "4.0.0", "description": "Online code highlighter for Microsoft Word and PowerPoint", - "main": "index.js", + "type": "module", "scripts": { - "build:html": "posthtml -c posthtml.json", - "build:js": "webpack --mode=production", - "build:css": "postcss src/css -d dist/css", - "build:res": "shx cp -r src/res src/favicon.png dist", - "build:version": "python scripts/minify_json.py src/version.json dist/version.json", - "build": "rimraf dist && npm run sample && npm-run-all build:* && python scripts/post_build.py", - "build-dev:html": "posthtml -c posthtml.json", - "build-dev:js": "webpack --mode=development", - "build-dev:css": "postcss src/css -d dist/css", - "build-dev:res": "shx cp -r src/res src/favicon.png dist", - "build-dev:version": "shx cp src/version.json dist/version.json", - "build-dev": "npm run sample && npm-run-all build-dev:*", - "watch:html": "onchange \"src/views\" -- npm run build-dev:html", - "watch:js": "onchange \"src/js\" -- npm run build-dev:js", - "watch:css": "onchange \"src/css\" -- npm run build-dev:css", - "watch:res": "onchange \"src/res\" -- npm run build-dev:res", - "watch:samples": "onchange \"languages\" -- npm run sample", - "watch:version": "onchange \"src/version.json\" -- npm run build-dev:version", - "dev": "npm run build-dev && run-p watch:*", + "dev": "vite", + "build": "vue-tsc -b && vite build && npm run build:res", + "build:res": "shx cp -r src/res src/favicon.png src/version.json dist && shx mkdir -p dist/css && shx cp src/css/dark.css dist/css/dark.css", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit", + "build-legacy:html": "posthtml -c posthtml.json", + "build-legacy:js": "webpack --mode=production", + "build-legacy:css": "postcss src/css -d dist/css", + "build-legacy:res": "shx cp -r src/res src/favicon.png dist", + "build-legacy:version": "python scripts/minify_json.py src/version.json dist/version.json", + "build-legacy": "rimraf dist && npm run sample && npm-run-all build-legacy:* && python scripts/post_build.py", "sample": "python scripts/update_samples.py", "init": "shx touch src/views/components/notification.html src/views/components/support.html src/views/components/statistics.html", - "lint": ".\\node_modules\\.bin\\eslint src\\** --fix", "deploy": "npm run build && pwsh deploy.ps1" }, "keywords": [ @@ -40,6 +31,8 @@ "devDependencies": { "@babel/preset-env": "^7.25.4", "@eslint/js": "^9.11.1", + "@types/prismjs": "^1.26.5", + "@vitejs/plugin-vue": "^6.0.4", "babel-loader": "^9.2.1", "babel-plugin-module-resolver": "^5.0.2", "babel-plugin-prismjs": "^2.1.0", @@ -59,12 +52,16 @@ "posthtml-modules": "^0.9.1", "rimraf": "^6.0.1", "shx": "^0.3.4", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vue-tsc": "^3.2.4", "webpack": "^5.95.0", "webpack-cli": "^5.1.4" }, "dependencies": { "alertifyjs": "^1.14.0", "jquery": "^3.7.1", - "prismjs": "^1.29.0" + "prismjs": "^1.29.0", + "vue": "^3.5.27" } -} \ No newline at end of file +} diff --git a/postcss.config.js b/postcss.config.cjs similarity index 100% rename from postcss.config.js rename to postcss.config.cjs diff --git a/public/css/dark.css b/public/css/dark.css new file mode 100644 index 0000000..92fb83e --- /dev/null +++ b/public/css/dark.css @@ -0,0 +1,426 @@ +/* + _______ + / \ + .==. .==. + (( ))==(( )) + / "==" "=="\ + /____|| || ||___\ + ________ ____ ________ ___ ___ + | ___ \ / \ | ___ \ | | / / + | | \ \ / /\ \ | | \ \| |_/ / + | | ) / /__\ \ | |__/ /| ___ \ + | |__/ / ______ \| ____ \| | \ \ +_______|_______/__/ ____ \__\__|___\__\__|___\__\____ +| ___ \ | ____/ / \ | ___ \ | ____| ___ \ +| | \ \| |___ / /\ \ | | \ \| |___| | \ \ +| |__/ /| ____/ /__\ \ | | ) | ____| |__/ / +| ____ \| |__/ ______ \| |__/ /| |___| ____ \ +|__| \__\____/__/ \__\_______/ |______|__| \__\ + https://darkreader.org +*/ + +/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/main/LICENSE */ + +/* User-Agent Style */ +@layer { + html { + background-color: #181a1b !important; + filter: brightness(0.85) !important; + } + + html { + color-scheme: dark !important; + } + + iframe { + color-scheme: initial; + } + + html, + body { + background-color: #181a1b; + } + + html, + body { + border-color: #736b5e; + color: #e8e6e3; + } + + a { + color: #3391ff; + } + + table { + border-color: #545b5e; + } + + mark { + color: #e8e6e3; + } + + ::placeholder { + color: #b2aba1; + } + + input:-webkit-autofill, + textarea:-webkit-autofill, + select:-webkit-autofill { + background-color: #404400 !important; + color: #e8e6e3 !important; + } + + ::-webkit-scrollbar { + background-color: #202324 !important; + color: #aba499 !important; + } + + ::-webkit-scrollbar-thumb { + background-color: #454a4d !important; + } + + ::-webkit-scrollbar-thumb:hover { + background-color: #575e62 !important; + } + + ::-webkit-scrollbar-thumb:active { + background-color: #484e51 !important; + } + + ::-webkit-scrollbar-corner { + background-color: #181a1b !important; + } + + ::selection { + background-color: #004daa !important; + color: #e8e6e3 !important; + } + + ::-moz-selection { + background-color: #004daa !important; + color: #e8e6e3 !important; + } +} + +/* Invert Style */ +.jfk-bubble.gtx-bubble, +.captcheck_answer_label>input+img, +span#closed_text>img[src^="https://www.gstatic.com/images/branding/googlelogo"], +span[data-href^="https://www.hcaptcha.com/"]>#icon, +::-webkit-calendar-picker-indicator, +img.Wirisformula { + filter: invert(100%) hue-rotate(180deg) contrast(90%) !important; +} + +/* Variables Style */ +:root { + --darkreader-neutral-background: #131516; + --darkreader-neutral-text: #d8d4cf; + --darkreader-selection-background: #004daa; + --darkreader-selection-text: #e8e6e3; +} + +/* Modified CSS */ + +.pace { + background-color: rgb(24, 26, 27); + background-image: initial; +} + +.pace .pace-progress { + background-color: rgb(154, 0, 0); +} + +.pace .pace-activity { + background-image: linear-gradient(45deg, rgba(24, 26, 27, 0.2) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(24, 26, 27, 0.2) 50%, rgba(24, 26, 27, 0.2) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0)); +} + +:root { + --animate-delay: 1s; + --animate-duration: 1s; + --animate-repeat: 1; +} + +:focus { + outline-color: initial; +} + +li { + list-style-image: initial; +} + +a { + text-decoration-color: initial; +} + +hr { + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, rgb(47, 51, 53) 50%, rgba(0, 0, 0, 0) 100%); + border-color: initial; + border-style: none; + border-width: initial; +} + +.flip-wrapper .flip-inner .flip-front, +.flip-wrapper .flip-inner .flip-back { + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 2px 1px; +} + +.flip-wrapper .flip-inner .flip-front { + background-color: rgb(62, 68, 70); + color: rgb(232, 230, 227); +} + +.flip-wrapper .flip-inner .flip-back { + background-color: rgb(141, 0, 71); + color: rgb(232, 230, 227); +} + +.checkbox-wrapper-8 .tgl, +.checkbox-wrapper-8 .tgl::after, +.checkbox-wrapper-8 .tgl::before, +.checkbox-wrapper-8 .tgl *, +.checkbox-wrapper-8 .tgl ::after, +.checkbox-wrapper-8 .tgl ::before, +.checkbox-wrapper-8 .tgl+.tgl-btn { + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 2px 1px; +} + +.checkbox-wrapper-8 .tgl+.tgl-btn { + outline-color: initial; +} + +.checkbox-wrapper-8 .tgl-skewed+.tgl-btn { + background-color: rgb(91, 99, 103); + background-image: initial; +} + +.checkbox-wrapper-8 .tgl-skewed+.tgl-btn::after, +.checkbox-wrapper-8 .tgl-skewed+.tgl-btn::before { + color: rgb(232, 230, 227); + text-shadow: rgba(0, 0, 0, 0.4) 0px 1px 0px; +} + +.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:active { + background-color: rgb(91, 99, 103); + background-image: initial; +} + +.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn { + background-color: rgba(0, 164, 0, 0.8); + background-image: initial; +} + +.select-wrapper { + --select-height: 40px; +} + +.select { + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 2px 1px; +} + +.select select { + background-color: rgb(27, 54, 35); + background-image: linear-gradient(-45deg, rgb(37, 71, 48) 0%, rgb(37, 53, 30) 100%); + border-color: initial; + border-style: none; + border-width: initial; + box-shadow: none; + color: rgb(192, 187, 179); + outline-color: initial; +} + +.select::before { + background-color: rgba(24, 26, 27, 0.1); + color: rgba(107, 255, 107, 0.5); +} + +.select:hover::before { + background-color: rgba(24, 26, 27, 0.2); + color: rgba(107, 255, 107, 0.8); +} + +.glow-on-hover::before { + background-color: initial; + background-image: linear-gradient(45deg, rgb(204, 0, 0), rgb(204, 92, 0), rgb(153, 151, 0), rgb(94, 204, 0), rgb(0, 204, 179), rgb(0, 34, 204), rgb(98, 0, 204), rgb(204, 0, 160), rgb(204, 0, 0)); +} + +.glow-on-hover::after { + background-color: rgb(62, 68, 70); +} + +.glow-on-hover:hover::after { + background-color: transparent; +} + +.doc-wrapper { + --h1-font-size: 1.6em; + --h2-font-size: 1.3em; + --h3-font-size: 1.1em; + --p-font-size: 1em; +} + +/* .doc-hr { + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, rgb(47, 51, 53) 50%, rgba(0, 0, 0, 0) 100%); + border-color: initial; + border-style: none; + border-width: initial; +} */ + +.alertify .ajs-dimmer { + background-color: rgb(28, 30, 31); +} + +.alertify .ajs-dialog { + background-color: rgb(24, 26, 27); + outline-color: initial; +} + +.alertify .ajs-commands button { + background-color: transparent; + border-color: initial; + border-style: initial; + border-width: 0px; +} + +.alertify .ajs-commands button.ajs-close { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAh0lEQVQYlY2QsQ0EIQwEB9cBAR1CJUaI/gigDnwR6NBL/7/xWLNrZ2b8EwGotVpr7eOitWa1VjugiNB7R1UPrKrWe0dEAHBbXUqxMQbeewDmnHjvyTm7C3zDwAUd9c63YQdUVdu6EAJzzquz7HXvTiklt+H9DQFYaxFjvDqllFyMkbXWvfpXHjJrWFgdBq/hAAAAAElFTkSuQmCC"); +} + +.alertify .ajs-commands button.ajs-maximize { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAOUlEQVQYlWP8//8/AzGAhYGBgaG4uBiv6t7eXkYmooxjYGAgWiELsvHYFMCcRX2rSXcjoSBiJDbAAeD+EGu+8BZcAAAAAElFTkSuQmCC"); +} + +.alertify .ajs-header { + background-color: rgb(24, 26, 27); +} + +.alertify .ajs-footer { + background-color: rgb(24, 26, 27); +} + +.alertify .ajs-handle { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMS8xNEDQYmMAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAQ0lEQVQYlaXNMQoAIAxD0dT7H657l0KX3iJuUlBUNOsPPCGJm7VDp6ryeMxMuDsAQH7owW3pyn3RS26iKxERMLN3ugOaAkaL3sWVigAAAABJRU5ErkJggg=="); +} + +.alertify.ajs-maximized .ajs-commands button.ajs-maximize { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAASklEQVQYlZWQ0QkAMQhDtXRincOZX78KVtrDCwgqJNEoIB3MPLj7lRUROlpyVXGzby6zWuY+kz6tj5sBMTMAyVV3/595RbOh3cAXsww1raeiOcoAAAAASUVORK5CYII="); +} + +.alertify.ajs-modeless.ajs-pinnable .ajs-commands button.ajs-pin { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAQklEQVQYlcWPMQ4AIAwCqU9u38GbcbHRWN1MvKQDhQFMEpKImGJA0gCgnYw0V0rwxseg5erT4oSkQVI5d9f+e9+xA0NbLpWfitPXAAAAAElFTkSuQmCC"); +} + +.alertify.ajs-modeless.ajs-unpinned .ajs-commands button.ajs-pin { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAO0lEQVQYlWP8//8/AzGAiShV6AqLi4txGs+CLoBLMYbC3t5eRmyaWfBZhwwYkX2NTxPRvibKjRhW4wMAhxkYGbLu3pEAAAAASUVORK5CYII="); +} + +.ajs-no-overflow { + outline-color: initial; +} + +.alertify-notifier .ajs-message.ajs-success { + background-color: rgba(54, 135, 89, 0.95); + background-image: initial; +} + +.alertify-notifier .ajs-message.ajs-error { + background-color: rgba(139, 32, 32, 0.95); + background-image: initial; +} + +.alertify-notifier .ajs-message.ajs-warning { + background-color: rgba(146, 104, 0, 0.9); + background-image: initial; +} + +.alertify-notifier .ajs-message .ajs-close { + background-color: rgba(0, 0, 0, 0.5); + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABGdBTUEAALGPC/xhBQAAAFBJREFUGBl1j0EKADEIA+ve/P9f9bh1hEihNBfjVCO1v7RKVqJK4h8gM5cAPR42AkQEpSXPwMTyoi13n5N9YqJehm3Fnr7nL1D0ZEbD5OubGyC7a9gx+9eNAAAAAElFTkSuQmCC"); +} + +.border { + background-image: linear-gradient(135deg, rgb(28, 31, 32) 0%, rgb(49, 53, 55) 100%); +} + +.wrapper { + --code-font-size: 14px; + --panel-border-radius: 10px; + --panel-max-height: 600px; + --panel-min-height: 400px; +} + +.wrapper .action-wrapper { + --animate-duration: 1s; +} + +#source { + border-color: initial; + border-style: none; + border-width: initial; +} + +#source:focus { + box-shadow: rgba(8, 30, 51, 0.35) 0px 0px 6px 0px inset; +} + +.panel .cover { + --animate-duration: 0.3s; + background-image: linear-gradient(45deg, rgb(20, 94, 92) 0%, rgb(74, 2, 25) 100%); + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 10px 2px inset; +} + +.footer .copyright:hover { + text-decoration-color: initial; +} + +.doc-wrapper .bubble:hover { + color: rgb(222, 219, 215); + text-shadow: rgba(0, 0, 0, 0.5) 0px 0px 5px; +} + +.alertify-notifier .ajs-message.ajs-success { + background-color: rgba(74, 147, 14, 0.9); + background-image: initial; +} + +.alertify-notifier .ajs-message.ajs-warning { + background-color: rgba(146, 104, 0, 0.9); + background-image: initial; +} + +.alertify-notifier .ajs-message.ajs-error { + background-color: rgba(203, 21, 0, 0.9); + background-image: initial; +} + +.alertify .ajs-dialog .ajs-button { + background-color: rgba(6, 154, 77); + border-color: initial; + border-style: none; + border-width: initial; + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 3px 2px; + color: rgb(232, 230, 227); +} + +.alertify .ajs-dialog .ajs-button:hover { + box-shadow: rgba(0, 0, 0, 0.3) 0px 0px 3px 2px; +} + +.action i { + color: #c5c3c1; +} + +.expand { + background-color: rgb(62, 68, 70); +} +.expand:hover { + background-color: rgb(72, 78, 81); + box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 5px 2px; +} +.expand:active { + background-color: rgb(82, 88, 92); +} + +.code { + filter: brightness(0.85); +} \ No newline at end of file diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..0e6ef58 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/res/fonts/Consolas.eot b/public/res/fonts/Consolas.eot new file mode 100644 index 0000000..58389da Binary files /dev/null and b/public/res/fonts/Consolas.eot differ diff --git a/public/res/fonts/Consolas.svg b/public/res/fonts/Consolas.svg new file mode 100644 index 0000000..a3081cd --- /dev/null +++ b/public/res/fonts/Consolas.svg @@ -0,0 +1,8228 @@ + + + + +Created by FontForge 20201107 at Fri Jan 26 14:03:46 2018 + By +(c) 2018 Microsoft Corporation. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/res/fonts/Consolas.ttf b/public/res/fonts/Consolas.ttf new file mode 100644 index 0000000..ceaf9b0 Binary files /dev/null and b/public/res/fonts/Consolas.ttf differ diff --git a/public/res/fonts/Consolas.woff b/public/res/fonts/Consolas.woff new file mode 100644 index 0000000..8f95a38 Binary files /dev/null and b/public/res/fonts/Consolas.woff differ diff --git a/public/res/fonts/Consolas.woff2 b/public/res/fonts/Consolas.woff2 new file mode 100644 index 0000000..870b255 Binary files /dev/null and b/public/res/fonts/Consolas.woff2 differ diff --git a/public/res/fonts/LucidaHandwriting-Italic.eot b/public/res/fonts/LucidaHandwriting-Italic.eot new file mode 100644 index 0000000..ff022e8 Binary files /dev/null and b/public/res/fonts/LucidaHandwriting-Italic.eot differ diff --git a/public/res/fonts/LucidaHandwriting-Italic.svg b/public/res/fonts/LucidaHandwriting-Italic.svg new file mode 100644 index 0000000..81e330f --- /dev/null +++ b/public/res/fonts/LucidaHandwriting-Italic.svg @@ -0,0 +1,750 @@ + + + + +Created by FontForge 20201107 at Wed Oct 27 14:34:37 1999 + By +(c) 1991 Bigelow & Holmes Inc. All Rights Reserved. Pat. Pend. (c) 1990-1991 Type Solutions, Inc. All Rights Reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/res/fonts/LucidaHandwriting-Italic.ttf b/public/res/fonts/LucidaHandwriting-Italic.ttf new file mode 100644 index 0000000..5785720 Binary files /dev/null and b/public/res/fonts/LucidaHandwriting-Italic.ttf differ diff --git a/public/res/fonts/LucidaHandwriting-Italic.woff b/public/res/fonts/LucidaHandwriting-Italic.woff new file mode 100644 index 0000000..330bce8 Binary files /dev/null and b/public/res/fonts/LucidaHandwriting-Italic.woff differ diff --git a/public/res/fonts/LucidaHandwriting-Italic.woff2 b/public/res/fonts/LucidaHandwriting-Italic.woff2 new file mode 100644 index 0000000..6826623 Binary files /dev/null and b/public/res/fonts/LucidaHandwriting-Italic.woff2 differ diff --git a/public/res/fonts/demo.html b/public/res/fonts/demo.html new file mode 100644 index 0000000..3112b4f --- /dev/null +++ b/public/res/fonts/demo.html @@ -0,0 +1,221 @@ + + + + + + + + + Transfonter demo + + + + +
+
+

Lucida Handwriting Italic

+
.your-style {
+    font-family: 'Lucida Handwriting';
+    font-weight: normal;
+    font-style: italic;
+}
+
+<link rel="preload" href="LucidaHandwriting-Italic.woff2" as="font" type="font/woff2" crossorigin>
+
+

+ abcdefghijklmnopqrstuvwxyz
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ 0123456789.:,;()*!?'@#<>$%&^+-=~ +

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+
+
+ +
+

Consolas

+
.your-style {
+    font-family: 'Consolas';
+    font-weight: normal;
+    font-style: normal;
+}
+
+<link rel="preload" href="Consolas.woff2" as="font" type="font/woff2" crossorigin>
+
+

+ abcdefghijklmnopqrstuvwxyz
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ 0123456789.:,;()*!?'@#<>$%&^+-=~ +

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+

The quick brown fox jumps over the lazy dog.

+
+
+ +
+ + diff --git a/public/res/fonts/stylesheet.css b/public/res/fonts/stylesheet.css new file mode 100644 index 0000000..5e4b937 --- /dev/null +++ b/public/res/fonts/stylesheet.css @@ -0,0 +1,26 @@ +@font-face { + font-family: 'Lucida Handwriting'; + src: url('LucidaHandwriting-Italic.eot'); + src: url('LucidaHandwriting-Italic.eot?#iefix') format('embedded-opentype'), + url('LucidaHandwriting-Italic.woff2') format('woff2'), + url('LucidaHandwriting-Italic.woff') format('woff'), + url('LucidaHandwriting-Italic.ttf') format('truetype'), + url('LucidaHandwriting-Italic.svg#LucidaHandwriting-Italic') format('svg'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'Consolas'; + src: url('Consolas.eot'); + src: url('Consolas.eot?#iefix') format('embedded-opentype'), + url('Consolas.woff2') format('woff2'), + url('Consolas.woff') format('woff'), + url('Consolas.ttf') format('truetype'), + url('Consolas.svg#Consolas') format('svg'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + diff --git a/public/res/logo.png b/public/res/logo.png new file mode 100644 index 0000000..0e6ef58 Binary files /dev/null and b/public/res/logo.png differ diff --git a/public/version.json b/public/version.json new file mode 100644 index 0000000..a180898 --- /dev/null +++ b/public/version.json @@ -0,0 +1,158 @@ +[ + { + "version": "3.1.1", + "date": "2025.1.18", + "entries": [ + { + "title": "Changes", + "items": [ + "Add support for more languages", + "Use Tab or Shift + Tab to indent or unindent", + "Minor adjustments to the layout" + ] + }, + { + "title": "Fixes", + "items": [ + "Tab key will no longer clear input history", + "Compatibility issue with Microsoft PowerPoint" + ] + } + ] + }, + { + "version": "3.1.0", + "date": "2024.10.3", + "entries": [ + { + "title": "Refactor", + "items": [ + "Refactored project with npm package" + ] + }, + { + "title": "Changes", + "items": [ + "Minor updates to the style" + ] + }, + { + "title": "Fixes", + "items": [ + "Fixed the bug that input box cannot auto-shrink" + ] + } + ] + }, + { + "version": "3.0.1", + "date": "2024.7.25", + "entries": [ + { + "title": "Changes", + "items": [ + "Introduced native dark mode", + "Improved animation effects", + "Disabled spell check and completion for input box", + "Copy code with line numbers (Experimental)" + ] + }, + { + "title": "Fixes", + "items": [ + "Removed the annoying text shadow" + ] + }, + { + "title": "Notice", + "items": [ + "You may need to manually adjust font and column width after pasting" + ] + } + ] + }, + { + "version": "2.2.3", + "date": "2023.12.31", + "entries": [ + { + "title": "Changes", + "items": [ + "Can use Tab key to indent 4 spaces", + "Can remember history language and theme", + "Add prompt for the use of Microsoft Clarity" + ] + }, + { + "title": "Fixes", + "items": [ + "Bad URL links" + ] + } + ] + }, + { + "version": "2.0.3", + "date": "2023.10.6", + "entries": [ + { + "title": "Changes", + "items": [ + "More highlight color schemes!", + "Provide random code sample", + "Add language hint in the code block", + "Better animation effects", + "Remove line number option" + ] + }, + { + "title": "Fixes", + "items": [ + "Some visual glitches" + ] + }, + { + "title": "Bug", + "items": [ + "Layout may still have bug for certain browsers" + ] + } + ] + }, + { + "version": "1.2.x", + "date": "2023.10.4", + "entries": [ + { + "title": "Changes", + "items": [ + "Support for one-click copy", + "Add beautiful alertify dialogs", + "Adapt to new Edge UI", + "Fix typo", + "Reorder action buttons" + ] + } + ] + }, + { + "version": "1.1.x", + "date": "2023.6.26", + "entries": [ + { + "title": "General", + "items": [ + "First stable version", + "Primary features realized" + ] + }, + { + "title": "Fixes", + "items": [ + "Fix potential format error", + "Fix compatibility with Microsoft PowerPoint" + ] + } + ] + } +] \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..3c79048 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,801 @@ + + + + + + + diff --git a/src/components/ActionButton.vue b/src/components/ActionButton.vue new file mode 100644 index 0000000..a6169eb --- /dev/null +++ b/src/components/ActionButton.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/components/BannerSection.vue b/src/components/BannerSection.vue new file mode 100644 index 0000000..f96f35c --- /dev/null +++ b/src/components/BannerSection.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/src/components/CodeInputPanel.vue b/src/components/CodeInputPanel.vue new file mode 100644 index 0000000..b40451b --- /dev/null +++ b/src/components/CodeInputPanel.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/components/CodeOutputPanel.vue b/src/components/CodeOutputPanel.vue new file mode 100644 index 0000000..e10018d --- /dev/null +++ b/src/components/CodeOutputPanel.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/CodePanel.vue b/src/components/CodePanel.vue new file mode 100644 index 0000000..53a65db --- /dev/null +++ b/src/components/CodePanel.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/DocsSection.vue b/src/components/DocsSection.vue new file mode 100644 index 0000000..fdf1a51 --- /dev/null +++ b/src/components/DocsSection.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/src/components/FlipButton.vue b/src/components/FlipButton.vue new file mode 100644 index 0000000..610748b --- /dev/null +++ b/src/components/FlipButton.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/components/FooterSection.vue b/src/components/FooterSection.vue new file mode 100644 index 0000000..522086a --- /dev/null +++ b/src/components/FooterSection.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/HeaderSection.vue b/src/components/HeaderSection.vue new file mode 100644 index 0000000..0ece8b8 --- /dev/null +++ b/src/components/HeaderSection.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/components/LanguageSelector.vue b/src/components/LanguageSelector.vue new file mode 100644 index 0000000..62cba86 --- /dev/null +++ b/src/components/LanguageSelector.vue @@ -0,0 +1,157 @@ + + + + + + + diff --git a/src/components/LineNumberToggle.vue b/src/components/LineNumberToggle.vue new file mode 100644 index 0000000..3a5c963 --- /dev/null +++ b/src/components/LineNumberToggle.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/components/ThemeSelector.vue b/src/components/ThemeSelector.vue new file mode 100644 index 0000000..f4dd061 --- /dev/null +++ b/src/components/ThemeSelector.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/components/ToolbarSection.vue b/src/components/ToolbarSection.vue new file mode 100644 index 0000000..7a75107 --- /dev/null +++ b/src/components/ToolbarSection.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/composables/index.ts b/src/composables/index.ts new file mode 100644 index 0000000..7e40d91 --- /dev/null +++ b/src/composables/index.ts @@ -0,0 +1,4 @@ +export { useCodeSamples } from './useCodeSamples'; +export { useTheme, themeOptions } from './useTheme'; +export { useNotifications } from './useNotifications'; +export { useUserPreferences } from './useUserPreferences'; diff --git a/src/composables/useCodeSamples.ts b/src/composables/useCodeSamples.ts new file mode 100644 index 0000000..a725669 --- /dev/null +++ b/src/composables/useCodeSamples.ts @@ -0,0 +1,533 @@ +/** + * Code samples management composable + */ +import { ref, computed } from 'vue'; +import type { CodeSamples } from '@/types'; + +// Code samples - this would be generated from the samples +const CODE_SET: CodeSamples = { + c: `#include + +int main() { + int num = 10; + int* ptr = # + + printf("The value of num is %d\\n", num); + printf("The value of ptr is %p\\n", ptr); + printf("The value that ptr points to is %d\\n", *ptr); + + return 0; +} +`, + cpp: `#include + +int main() { + std::cout << "Hello, there!" << std::endl; + std::cout << "General Grievous!" << std::endl; + + return 0; +} +`, + csharp: `public class Startup +{ + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + app.UseRouting(); + app.UseCors(CorsOptions.CorsPolicyName); + app.UseEndpoints(endpoints => { + endpoints.MapControllers(); + endpoints.MapSwagger(); + }); + } +} +`, + go: `package main + +import "fmt" + +func add(a int, b int) int { + return a + b +} + +func main() { + sum := add(3, 4) + fmt.Println("Sum:", sum) +} +`, + java: `public class Main { + public static void main(String[] args) { + int a = 5; + int b = 10; + int sum = add(a, b); + System.out.println("Sum: " + sum); + } + + public static int add(int a, int b) { + return a + b; + } +} +`, + kotlin: `fun main() { + val numbers = listOf(1, 2, 3, 4, 5) + val evenNumbers = numbers.map { it * 2 }.filter { it % 2 == 0 } + val sumOfEvenNumbers = evenNumbers.sum() + + println("Original numbers: $numbers") + println("Even numbers: $evenNumbers") + println("Sum of even numbers: $sumOfEvenNumbers") +} + +fun factorial(n: Int): Int { + return if (n == 0) 1 else n * factorial(n - 1) +} +`, + perl: `sub printNumbers { + my $n = shift; + for (my $i = 1; $i <= $n; $i++) { + print "$i\\n"; + } +} + +printNumbers(10); +`, + python: `def fibonacci(n): + a, b = 0, 1 + while a < n: + print(a) + a, b = b, a + b + +fibonacci(100) +`, + r: `# Generate a sequence of numbers from 0 to 2*pi +x <- seq(0, 2*pi, length.out = 100) + +# Compute the sine of each number +y <- sin(x) + +# Plot the sine wave +plot(x, y, type = "l", col = "blue", lwd = 2, + main = "Sine Wave", xlab = "x", ylab = "sin(x)") + +# Add grid lines for better visualization +grid() +`, + ruby: `name = "John" +age = 30 + +if age < 18 + puts "#{name} is a minor." +else + puts "#{name} is an adult." +end + +5.times do |i| + puts "This is message number #{i + 1}." +end +`, + rust: `fn main() { + let name = "Rust"; + let version = 1.56; + + println!("Hello, {}!", name); + println!("Current version: {}", version); + + let sum = add(5, 10); + println!("Sum of 5 and 10 is: {}", sum); +} + +fn add(a: i32, b: i32) -> i32 { + a + b +} +`, + scala: `val counter = Var(0) + +// create a counter button that increments on-click +def counterButton() = button( + tpe := "button", + "count is ", + child.text <-- counter, + onClick --> { event => counter.update(c => c + 1) }, +) +val app = dom.document.getElementById("app") +render(app, counterButton()) +`, + swift: `let numbers = [1, 2, 3, 4, 5] + +let doubledNumbers = numbers.map { $0 * 2 } + +print(doubledNumbers) +`, + css: `.action-wrapper .action { + width: 50px; + height: 50px; + display: flex; + justify-content: center; + border-radius: 50%; + align-self: center; + cursor: pointer; + transition: 0.3s; +} +`, + html: ` + + + + Hello, world! + + +

Hello, world!

+ + +`, + javascript: `function fibonacci(n) { + let a = 0, b = 1; + while (a < n) { + console.log(a); + [a, b] = [b, a + b]; + } +} +`, + php: ``, + typescript: `function fibonacci(n: number): void { + let a: number = 0, b: number = 1; + while (a < n) { + console.log(a); + [a, b] = [b, a + b]; + } +} +`, + bash: `#!/bin/bash + +name="John" +age=30 + +if [ $age -lt 18 ]; then + echo "$name is a minor." +else + echo "$name is an adult." +fi +`, + batch: `@echo off + +set name=John +set age=30 + +if %age% lss 18 ( + echo %name% is a minor. +) else ( + echo %name% is an adult. +) +`, + lua: `function printNumbers(n) +for i = 1, n do + print(i) +end +end + +printNumbers(10) +`, + powershell: `$name = "John" + +for ($i = 1; $i -le 5; $i++) { + Write-Host "Hello, $name! This is message number $i." +} +`, + json: `{ + "name": "John Doe", + "age": 30, + "email": "johndoe@example.com", + "address": { + "street": "123 Main St", + "city": "Anytown", + "state": "CA", + "zip": "12345" + } +} +`, + latex: `The Pythagorean theorem states that +for a right triangle with legs of +length $a$ and $b$ and hypotenuse of +length $c$, the following equation holds: + +$$a^2 + b^2 = c^2$$ +`, + markdown: `# My Shopping List + +> This is a good list. + +- Apples +- Bananas +- Oranges +- Strawberries +`, + toml: `# This is a TOML document + +title = "TOML Example" + +[owner] +name = "Tom Preston-Werner" +dob = 1979-05-27T07:32:00-08:00 + +[database] +enabled = true +ports = [ 8000, 8001, 8002 ] +data = [ ["delta", "phi"], [3.14] ] +temp_targets = { cpu = 79.5, case = 72.0 } + +[servers] + +[servers.alpha] +ip = "10.0.0.1" +role = "frontend" + +[servers.beta] +ip = "10.0.0.2" +role = "backend"`, + xml: ` + + + Star Wars + George Lucas + 10.99 + + + The Silent Spring + Rachel Carson + 7.99 + + +`, + yaml: `- title: The Great Gatsby + author: F. Scott Fitzgerald + year: 1925 + publisher: Scribner +- title: To Kill a Mockingbird + author: Harper Lee + year: 1960 + publisher: J. B. Lippincott & Co. +- title: 1984 + author: George Orwell + year: 1949 + publisher: Secker & Warburg +- title: The Catcher in the Rye + author: J. D. Salinger + year: 1951 + publisher: Little, Brown and Company +`, + cmake: `cmake_minimum_required(VERSION 3.26) +project(MIoC) + +set(CMAKE_CXX_STANDARD 11) + +# Add all source files +file(GLOB_RECURSE SRC_LIST CONFIGURE_DEPENDS src/*.cpp) + +# Add final target. +add_executable(\${CMAKE_PROJECT_NAME} \${SRC_LIST}) + +# dependency +add_subdirectory(mioc) +target_link_libraries(\${CMAKE_PROJECT_NAME} PRIVATE mioc) +`, + docker: `# PatBoot Dockerfile + +FROM openjdk:17-jdk-slim + +ARG VERSION + +COPY target/PatBoot-\${VERSION}.jar /application.jar + +EXPOSE 8080 + +CMD ["java", "-jar", "/application.jar"] +`, + makefile: `CC = gcc +CFLAGS = -Wall -Wextra -pedantic + +all: program + +program: main.o utils.o + $(CC) $(CFLAGS) -o program main.o utils.o + +main.o: main.c utils.h + $(CC) $(CFLAGS) -c main.c + +utils.o: utils.c utils.h + $(CC) $(CFLAGS) -c utils.c + +clean: + rm -f program *.o +`, + sql: `CREATE TABLE users ( + id INT PRIMARY KEY, + name VARCHAR(50), + email VARCHAR(50) +); + +INSERT INTO users (id, name, email) +VALUES (1, 'John Doe', 'johndoe@example.com'), + (2, 'Jane Smith', 'janesmith@example.com'), + (3, 'Bob Johnson', 'bobjohnson@example.com'); + +SELECT * FROM users; +`, + llvm: `; Function Attrs: noinline nounwind optnone uwtable +define dso_local i32 @add(i32 %0, i32 %1) #0 { + %3 = alloca i32, align 4 + %4 = alloca i32, align 4 + store i32 %0, i32* %3, align 4 + store i32 %1, i32* %4, align 4 + %5 = load i32, i32* %3, align 4 + %6 = load i32, i32* %4, align 4 + %7 = add i32 %5, %6 + ret i32 %7 +} +`, + nasm: `section .data + msg db 'Ready, assemble!', 0xA + len equ $ - msg + +section .text + global _start + +_start: + mov eax, 4 ; syscall number for sys_write + mov ebx, 1 ; file descriptor 1 (stdout) + mov ecx, msg ; pointer to the message + mov edx, len ; length of the message + int 0x80 ; make the syscall + + mov eax, 1 ; syscall number for sys_exit + xor ebx, ebx ; exit status 0 + int 0x80 ; make the syscall +`, + coq: `Section Hilbert_Axiom_S. +Variable P Q R : Prop. +Theorem hilbert_axiom_s : (P -> Q -> R) -> (P -> Q) -> P -> R. +Proof. + intros H1 H2 H3. + apply H1. + exact H3. + exact (H2 H3). +Qed. +End Hilbert_Axiom_S. +`, + diff: `- Jedi Order ++ Sith Empire +- Kamino +- Alderaan ++ Mandalore +`, + glsl: `#version 450 core + +layout(location = 0) out vec4 o_Color; + +struct VertexOutput +{ + vec4 Color; +}; + +layout (location = 0) in VertexOutput Input; + +void main() +{ + o_Color = Input.Color; +} +`, + matlab: `% Define the range of x values +x = linspace(0, 2*pi, 100); + +% Calculate the sine of each x value +y = sin(x); + +% Create a plot of the sine wave +figure; +plot(x, y); + +% Add title and labels +title('Sine Wave'); +xlabel('x'); +ylabel('sin(x)'); + +% Display grid +grid on; +`, + verilog: `module counter( + input clk, + input rst, + output reg [7:0] count +); + +always @(posedge clk, posedge rst) begin + if (rst) begin + count <= 0; + end else begin + count <= count + 1; + end +end + +endmodule +`, +}; + +/** + * Composable for code samples management + */ +export function useCodeSamples() { + const currentLanguage = ref('c'); + + const languageCount = computed(() => Object.keys(CODE_SET).length); + + /** + * Get code sample for a language + */ + function getCode(lang: string): string { + if (hasLanguage(lang)) { + return CODE_SET[lang]; + } + return 'Oops, write your own code!'; + } + + /** + * Check if language exists + */ + function hasLanguage(lang: string): boolean { + return Object.prototype.hasOwnProperty.call(CODE_SET, lang); + } + + /** + * Get a random language + */ + function getRandomLanguage(avoid: string | null = null): string { + const languages = Object.keys(CODE_SET); + let lang = languages[Math.floor(Math.random() * languages.length)]; + + while (lang === avoid && languages.length > 1) { + lang = languages[Math.floor(Math.random() * languages.length)]; + } + + return lang; + } + + /** + * Set current language + */ + function setCurrentLanguage(lang: string): void { + currentLanguage.value = lang; + } + + return { + currentLanguage, + languageCount, + getCode, + hasLanguage, + getRandomLanguage, + setCurrentLanguage, + }; +} diff --git a/src/composables/useNotifications.ts b/src/composables/useNotifications.ts new file mode 100644 index 0000000..8451567 --- /dev/null +++ b/src/composables/useNotifications.ts @@ -0,0 +1,72 @@ +/** + * Toast notification composable using alertifyjs + */ +import alertify from 'alertifyjs'; +import 'alertifyjs/build/css/alertify.css'; +import 'alertifyjs/build/css/themes/default.css'; + +// Configure alertify +alertify.set('notifier', 'delay', 1.5); +alertify.set('notifier', 'position', 'bottom-left'); + +export type NotificationType = 'success' | 'warning' | 'error' | 'message'; + +/** + * Composable for toast notifications + */ +export function useNotifications() { + /** + * Show a success notification + */ + function success(message: string, wait?: number, callback?: () => void): ReturnType { + return alertify.success(message, wait, callback); + } + + /** + * Show a warning notification + */ + function warning(message: string): void { + alertify.warning(message); + } + + /** + * Show an error notification + */ + function error(message: string): void { + alertify.error(message); + } + + /** + * Show an alert dialog + */ + function alert(title: string, content: string): void { + alertify.alert(title, content); + } + + /** + * Show a notification based on type + */ + function notify(type: NotificationType, message: string): void { + switch (type) { + case 'success': + alertify.success(message); + break; + case 'warning': + alertify.warning(message); + break; + case 'error': + alertify.error(message); + break; + default: + alertify.message(message); + } + } + + return { + success, + warning, + error, + alert, + notify, + }; +} diff --git a/src/composables/useTheme.ts b/src/composables/useTheme.ts new file mode 100644 index 0000000..dc84f15 --- /dev/null +++ b/src/composables/useTheme.ts @@ -0,0 +1,189 @@ +/** + * Theme management composable + */ +import { ref, computed } from 'vue'; + +interface ThemeSource { + urlTemplate: string; + themes: string[]; +} + +const themeSources: ThemeSource[] = [ + { + urlTemplate: 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/themes/{id}.min.css', + themes: [ + 'prism', + 'prism-dark', + 'prism-funky', + 'prism-okaidia', + 'prism-twilight', + 'prism-solarizedlight', + 'prism-tomorrow', + ], + }, + { + urlTemplate: 'https://cdnjs.cloudflare.com/ajax/libs/prism-themes/1.9.0/prism-{id}.min.css', + themes: [ + 'a11y-dark', + 'atom-dark', + 'base16-ateliersulphurpool.light', + 'cb', + 'coldark-cold', + 'coldark-dark', + 'coy-without-shadows', + 'darcula', + 'dracula', + 'duotone-dark', + 'duotone-earth', + 'duotone-forest', + 'duotone-light', + 'duotone-sea', + 'duotone-space', + 'ghcolors', + 'gruvbox-dark', + 'gruvbox-light', + 'holi-theme', + 'hopscotch', + 'lucario', + 'material-dark', + 'material-light', + 'material-oceanic', + 'night-owl', + 'nord', + 'one-dark', + 'one-light', + 'pojoaque', + 'shades-of-purple', + 'solarized-dark-atom', + 'synthwave84', + 'vs', + 'vsc-dark-plus', + 'xonokai', + 'z-touch', + ], + }, +]; + +// Theme options with display names +export const themeOptions = [ + { value: 'prism', label: 'Default' }, + { value: 'a11y-dark', label: 'a11y Dark' }, + { value: 'base16-ateliersulphurpool.light', label: 'Ateliersulphurpool-light' }, + { value: 'atom-dark', label: 'Atom Dark' }, + { value: 'cb', label: 'CB' }, + { value: 'coldark-cold', label: 'Coldark Cold' }, + { value: 'coldark-dark', label: 'Coldark Dark' }, + { value: 'prism-dark', label: 'Dark' }, + { value: 'coy-without-shadows', label: 'Coy' }, + { value: 'darcula', label: 'Darcula' }, + { value: 'dracula', label: 'Dracula' }, + { value: 'duotone-dark', label: 'Duotone Dark' }, + { value: 'duotone-earth', label: 'Duotone Earth' }, + { value: 'duotone-forest', label: 'Duotone Forest' }, + { value: 'duotone-light', label: 'Duotone Light' }, + { value: 'duotone-sea', label: 'Duotone Sea' }, + { value: 'duotone-space', label: 'Duotone Space' }, + { value: 'prism-funky', label: 'Funky' }, + { value: 'ghcolors', label: 'GHColors' }, + { value: 'gruvbox-dark', label: 'Gruvbox Dark' }, + { value: 'gruvbox-light', label: 'Gruvbox Light' }, + { value: 'holi-theme', label: 'Holi Theme' }, + { value: 'hopscotch', label: 'Hopscotch' }, + { value: 'lucario', label: 'Lucario' }, + { value: 'material-dark', label: 'Material Dark' }, + { value: 'material-light', label: 'Material Light' }, + { value: 'material-oceanic', label: 'Material Oceanic' }, + { value: 'night-owl', label: 'Night Owl' }, + { value: 'nord', label: 'Nord' }, + { value: 'prism-okaidia', label: 'Okaidia' }, + { value: 'one-dark', label: 'One Dark' }, + { value: 'one-light', label: 'One Light' }, + { value: 'pojoaque', label: 'Pojoaque' }, + { value: 'shades-of-purple', label: 'Shades of Purple' }, + { value: 'solarized-dark-atom', label: 'Solarized Dark Atom' }, + { value: 'prism-solarizedlight', label: 'Solarized Light' }, + { value: 'synthwave84', label: "Synthwave '84" }, + { value: 'prism-tomorrow', label: 'Tomorrow Night' }, + { value: 'prism-twilight', label: 'Twilight' }, + { value: 'vs', label: 'VS' }, + { value: 'vsc-dark-plus', label: 'VS Code Dark+' }, + { value: 'xonokai', label: 'Xonokai' }, + { value: 'z-touch', label: 'Z-Touch' }, +]; + +/** + * Get theme URL by ID + */ +function getThemeUrl(id: string): string | null { + for (const source of themeSources) { + if (source.themes.includes(id)) { + return source.urlTemplate.replace('{id}', id); + } + } + return null; +} + +/** + * Composable for theme management + */ +export function useTheme() { + const currentTheme = ref('prism'); + const isDarkMode = ref(false); + + const themeUrl = computed(() => getThemeUrl(currentTheme.value)); + + /** + * Set syntax highlighting theme + */ + function setTheme(id: string): void { + const url = getThemeUrl(id); + if (!url) { + console.error('Theme not found:', id); + return; + } + currentTheme.value = id; + localStorage.setItem('theme', id); + } + + /** + * Toggle dark mode + */ + function toggleDarkMode(): void { + isDarkMode.value = !isDarkMode.value; + localStorage.setItem('mode', isDarkMode.value ? 'dark' : 'light'); + } + + /** + * Set dark mode directly + */ + function setDarkMode(dark: boolean): void { + isDarkMode.value = dark; + localStorage.setItem('mode', dark ? 'dark' : 'light'); + } + + /** + * Restore theme from localStorage + */ + function restoreTheme(): void { + const savedTheme = localStorage.getItem('theme'); + if (savedTheme) { + setTheme(savedTheme); + } + + const savedMode = localStorage.getItem('mode'); + if (savedMode) { + isDarkMode.value = savedMode === 'dark'; + } + } + + return { + currentTheme, + isDarkMode, + themeUrl, + themeOptions, + setTheme, + toggleDarkMode, + setDarkMode, + restoreTheme, + }; +} diff --git a/src/composables/useUserPreferences.ts b/src/composables/useUserPreferences.ts new file mode 100644 index 0000000..f811962 --- /dev/null +++ b/src/composables/useUserPreferences.ts @@ -0,0 +1,91 @@ +/** + * User preferences composable + */ +import { ref, watch } from 'vue'; +import { getCookie, setCookie } from '@/utils'; + +/** + * Composable for managing user preferences + */ +export function useUserPreferences() { + const language = ref(null); + const lineNumberEnabled = ref(false); + const notificationShown = ref(false); + + /** + * Restore language preference + */ + function restoreLanguage(): string | null { + const saved = localStorage.getItem('language'); + if (saved) { + language.value = saved; + } + return saved; + } + + /** + * Save language preference + */ + function saveLanguage(lang: string): void { + language.value = lang; + localStorage.setItem('language', lang); + } + + /** + * Restore line number preference + */ + function restoreLineNumber(): boolean { + const saved = localStorage.getItem('line-number'); + if (saved !== null) { + lineNumberEnabled.value = saved === 'true'; + } + return lineNumberEnabled.value; + } + + /** + * Save line number preference + */ + function saveLineNumber(enabled: boolean): void { + lineNumberEnabled.value = enabled; + localStorage.setItem('line-number', String(enabled)); + } + + /** + * Check if notification has been shown + */ + function checkNotificationShown(): boolean { + const cookie = getCookie('notification'); + notificationShown.value = cookie !== ''; + return notificationShown.value; + } + + /** + * Mark notification as shown + */ + function markNotificationShown(): void { + setCookie('notification', 'notified', 24 * 7); // one week + notificationShown.value = true; + } + + /** + * Restore all preferences + */ + function restoreAll(): void { + restoreLanguage(); + restoreLineNumber(); + checkNotificationShown(); + } + + return { + language, + lineNumberEnabled, + notificationShown, + restoreLanguage, + saveLanguage, + restoreLineNumber, + saveLineNumber, + checkNotificationShown, + markNotificationShown, + restoreAll, + }; +} diff --git a/src/css/doc.css b/src/css/doc.css deleted file mode 100644 index d27419e..0000000 --- a/src/css/doc.css +++ /dev/null @@ -1,106 +0,0 @@ -.doc-wrapper { - --h1-font-size: 1.6em; - --h2-font-size: 1.3em; - --h3-font-size: 1.1em; - --p-font-size: 1em; - width: 80%; - max-width: 1000px; - margin: 10px auto; -} - -.doc-wrapper .bubble { - padding: 2px 8px; - white-space: nowrap; - /* it's a trick to make pill shape */ - border-radius: 100px; -} - -.doc-wrapper .bubble:hover { - color: #efefef; - text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5); -} - -.doc-align-center { - text-align: center; -} - -.doc-align-left { - text-align: left; -} - -.doc-align-right { - text-align: right; -} - -.doc-align-justify { - text-align: justify; -} - -.doc-wrapper .doc-chapter { - margin: 14px auto 10px auto; -} - -.doc-wrapper .doc-chapter h1 { - font-size: var(--h1-font-size); - font-family: 'Lucida Handwriting'; -} - -.doc-wrapper .doc-section { - margin: 10px auto 6px auto; -} - -.doc-wrapper .doc-section h2 { - font-size: var(--h2-font-size); -} - -.doc-wrapper .doc-section .doc-indent { - text-indent: calc(var(--h2-font-size) * 2); -} - -.doc-wrapper .doc-entry { - margin: 8px auto 16px auto; -} - -.doc-wrapper .doc-entry h3 { - font-size: var(--h3-font-size); -} - -.doc-wrapper .doc-entry.doc-indent { - text-indent: calc(var(--h3-font-size) * 2); -} - -.doc-wrapper .doc-text { - margin: 4px auto; -} - -.doc-wrapper .doc-text p { - margin: 8px auto; -} - -.doc-wrapper .doc-text p { - font-size: var(--p-font-size); -} - -.doc-wrapper .doc-text .doc-indent { - text-indent: calc(var(--p-font-size) * 2); -} - -.doc-hr { - width: 80%; - margin: 5px auto; - height: 1px; - border: none; - background-image: linear-gradient(90deg, transparent 0%, #3f3f3f 50%, transparent 100%); -} - -.doc-badge-base { - position: relative; - display: inline-block; -} - -.doc-badge { - position: absolute; - right: 0; - top: 0; - transform: translate(100%, -30%); -} \ No newline at end of file diff --git a/src/css/effect.css b/src/css/effect.css deleted file mode 100644 index b6e176e..0000000 --- a/src/css/effect.css +++ /dev/null @@ -1,330 +0,0 @@ -:root { - --mode-transition: 0.2s; -} - -html, -body, -.border, -.border textarea, -.tool *, -.code * { - transition: var(--mode-transition); -} - -/* flip badge */ -.flip-wrapper { - width: 2em; - height: 2em; - line-height: 2em; - text-align: center; - transition: opacity 0.2s; - padding: 5px; - cursor: pointer; -} - -.flip-wrapper:hover { - opacity: 80%; -} - -.flip-inner { - position: relative; - width: 100%; - height: 100%; - text-align: center; - transition: transform 0.3s; - transform-style: preserve-3d; -} - -.flip-wrapper .active { - transform: rotateY(180deg); -} - -.flip-wrapper .flip-inner .flip-front, -.flip-wrapper .flip-inner .flip-back { - position: absolute; - width: 100%; - height: 100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - border-radius: 50%; - overflow: hidden; - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.1); -} - -.flip-wrapper .flip-inner .flip-front { - background-color: #bbb; - color: black; -} - -.flip-wrapper .flip-inner .flip-back { - background-color: #FF69B4; - color: white; - transform: rotateY(180deg); -} - -/* checkbox */ -.checkbox-wrapper-8 .tgl { - display: none; -} - -.checkbox-wrapper-8 .tgl, -.checkbox-wrapper-8 .tgl:after, -.checkbox-wrapper-8 .tgl:before, -.checkbox-wrapper-8 .tgl *, -.checkbox-wrapper-8 .tgl *:after, -.checkbox-wrapper-8 .tgl *:before, -.checkbox-wrapper-8 .tgl+.tgl-btn { - box-sizing: border-box; - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.1); -} - -.checkbox-wrapper-8 .tgl::-moz-selection, -.checkbox-wrapper-8 .tgl:after::-moz-selection, -.checkbox-wrapper-8 .tgl:before::-moz-selection, -.checkbox-wrapper-8 .tgl *::-moz-selection, -.checkbox-wrapper-8 .tgl *:after::-moz-selection, -.checkbox-wrapper-8 .tgl *:before::-moz-selection, -.checkbox-wrapper-8 .tgl+.tgl-btn::-moz-selection, -.checkbox-wrapper-8 .tgl::selection, -.checkbox-wrapper-8 .tgl:after::selection, -.checkbox-wrapper-8 .tgl:before::selection, -.checkbox-wrapper-8 .tgl *::selection, -.checkbox-wrapper-8 .tgl *:after::selection, -.checkbox-wrapper-8 .tgl *:before::selection, -.checkbox-wrapper-8 .tgl+.tgl-btn::selection { - background: none; -} - -.checkbox-wrapper-8 .tgl+.tgl-btn { - outline: 0; - display: block; - width: 4em; - height: 2em; - position: relative; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.checkbox-wrapper-8 .tgl+.tgl-btn:after, -.checkbox-wrapper-8 .tgl+.tgl-btn:before { - position: relative; - display: block; - content: ""; - width: 50%; - height: 100%; -} - -.checkbox-wrapper-8 .tgl+.tgl-btn:after { - left: 0; -} - -.checkbox-wrapper-8 .tgl+.tgl-btn:before { - display: none; -} - -.checkbox-wrapper-8 .tgl:checked+.tgl-btn:after { - left: 50%; -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn { - overflow: hidden; - /* transform: skew(-10deg); */ - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transition: all 0.2s ease; - font-family: sans-serif; - background: #888; - border-radius: 10px; -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:after, -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:before { - /* transform: skew(10deg); */ - display: inline-block; - transition: all 0.2s ease; - width: 100%; - text-align: center; - position: absolute; - line-height: 2em; - font-weight: bold; - color: #fff; - text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4); -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:after { - left: 100%; - content: attr(data-tg-on); -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:before { - left: 0; - content: attr(data-tg-off); -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:active { - background: #888; -} - -.checkbox-wrapper-8 .tgl-skewed+.tgl-btn:active:before { - left: -10%; -} - -.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn { - background: #00CD00; -} - -.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:before { - left: -100%; -} - -.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:after { - left: 0; -} - -.checkbox-wrapper-8 .tgl-skewed:checked+.tgl-btn:active:after { - left: 10%; -} - -/* select */ - -.select-wrapper { - --select-height: 40px; -} - -.select { - position: relative; - border-radius: 10px; - overflow: hidden; - height: var(--select-height); - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.1); -} - -.select select { - background-image: linear-gradient(-45deg, #c1dfc4 0%, #deecdd 100%); - background-color: #ddeede; - color: #3f3f3f; - padding: 12px; - width: 250px; - border: none; - font-size: 16px; - box-shadow: none; - -webkit-appearance: none; - appearance: none; - outline: none; - cursor: pointer; -} - -.select::before { - content: "\f13a"; - font-family: FontAwesome; - position: absolute; - top: 0; - right: 0; - height: 100%; - aspect-ratio: 1; - text-align: center; - font-size: 28px; - line-height: var(--select-height); - color: rgba(0, 139, 0, 1.0); - background-color: rgba(255, 255, 255, 0.1); - pointer-events: none; - transition: 0.3s; -} - -.select:hover::before { - color: rgba(0, 139, 0, 0.8); - background-color: rgba(255, 255, 255, 0.2); -} - -.select select option { - padding: 30px; -} - -/* glow button */ -.glow-on-hover { - cursor: default; - position: absolute; - z-index: 0; - border-radius: 10px; -} - -.glow-on-hover::before { - content: ''; - background: linear-gradient(45deg, #ff0000, #ff7300, #fffb00, #48ff00, #00ffd5, #002bff, #7a00ff, #ff00c8, #ff0000); - position: absolute; - top: -1px; - left: -1px; - background-size: 400%; - z-index: -1; - filter: blur(5px); - width: calc(100% + 2px); - height: calc(100% + 2px); - animation: glowing 30s linear infinite; - opacity: 0; - transition: opacity .3s ease-in-out; - border-radius: 10px; -} - -.glow-on-hover:hover::before { - opacity: 1; -} - -.glow-on-hover::after { - z-index: -1; - content: ''; - position: absolute; - width: 100%; - height: 100%; - background-color: #bbb; - border-radius: 100px; - left: 0; - top: 0; - transition: background-color 0.3s; -} - -.glow-on-hover:hover::after { - background-color: transparent; -} - - -@keyframes glowing { - 0% { - background-position: 0 0; - } - - 50% { - background-position: 400% 0; - } - - 100% { - background-position: 0 0; - } -} - -/* light theme scroll bar */ -::-webkit-scrollbar { - background-color: #fcfcfc; -} - -::-webkit-scrollbar-thumb { - background-color: #8b8b8b; -} - -::-webkit-scrollbar-thumb:hover { - background-color: #636363; -} - -::-webkit-scrollbar-thumb:active { - background-color: #484e51 -} - -::-webkit-scrollbar-corner { - background-color: #181a1b; -} - -.action i { - color: #181a1b; -} \ No newline at end of file diff --git a/src/css/fonts.css b/src/css/fonts.css deleted file mode 100644 index f20e516..0000000 --- a/src/css/fonts.css +++ /dev/null @@ -1,25 +0,0 @@ -@font-face { - font-family: 'Lucida Handwriting'; - src: url('../res/fonts/LucidaHandwriting-Italic.eot'); - src: url('../res/fonts/LucidaHandwriting-Italic.eot?#iefix') format('embedded-opentype'), - url('../res/fonts/LucidaHandwriting-Italic.woff2') format('woff2'), - url('../res/fonts/LucidaHandwriting-Italic.woff') format('woff'), - url('../res/fonts/LucidaHandwriting-Italic.ttf') format('truetype'), - url('../res/fonts/LucidaHandwriting-Italic.svg#LucidaHandwriting-Italic') format('svg'); - font-weight: normal; - font-style: italic; - font-display: swap; -} - -@font-face { - font-family: 'Consolas'; - src: url('../res/fonts/Consolas.eot'); - src: url('../res/fonts/Consolas.eot?#iefix') format('embedded-opentype'), - url('../res/fonts/Consolas.woff2') format('woff2'), - url('../res/fonts/Consolas.woff') format('woff'), - url('../res/fonts/Consolas.ttf') format('truetype'), - url('../res/fonts/Consolas.svg#Consolas') format('svg'); - font-weight: normal; - font-style: normal; - font-display: swap; -} diff --git a/src/css/index.css b/src/css/index.css deleted file mode 100644 index 51601a0..0000000 --- a/src/css/index.css +++ /dev/null @@ -1,584 +0,0 @@ -* { - margin: 0; - padding: 0; -} - -*:focus { - outline: none; -} - -li { - list-style: none; -} - -.clearfix:before, -.clearfix::after { - content: ""; - display: table; -} - -.clearfix::after { - clear: both; -} - -.clearfix { - zoom: 1; -} - -a { - text-decoration: none; -} - -/* common styles */ -body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; -} - -hr { - width: 90%; - margin: 0px auto; - height: 2px; - border: none; - background-image: linear-gradient(90deg, transparent 0%, #3f3f3f 50%, transparent 100%); -} - -html, -body { - height: 100%; - width: 100%; - overflow-x: auto; -} - -.border { - width: 100%; - min-width: 600px; - min-height: 100%; - overflow-x: hidden; - background-color: rgb(228, 233, 240); -} - -/* header */ -.header { - padding: 10px; - text-align: center; -} - -.header span { - font-family: 'Lucida Handwriting'; - font-size: 3em; - font-weight: bold; -} - -.header span img { - height: 1.7em; - vertical-align: middle; - margin: 0 5px; -} - -#logo { - cursor: pointer; -} - -/* marquee */ -.banner { - margin: 5px 0; -} - -/* tool bar */ -.tools-wrapper { - display: flex; - flex-direction: row; - justify-content: center; - margin: 10px; -} - -.tools-wrapper .tools { - display: flex; - flex-direction: row; - justify-content: center; - justify-self: start; -} - -.tools-wrapper .tools .tool { - align-self: center; - display: flex; - flex-direction: row; - margin: 5px; -} - -.tools-wrapper .tools .tool>div { - margin: 0 5px; - align-self: center; -} - -.tools-wrapper .flip-wrapper { - align-self: center; - margin-left: 10px; -} - -/* code panel */ -.wrapper { - --panel-min-height: 400px; - --panel-max-height: 600px; - --panel-border-radius: 10px; - --code-font-size: 14px; - box-sizing: border-box; - display: flex; - flex-direction: row; - width: 95%; - margin: 10px auto; -} - -.wrapper .panel { - position: relative; - width: 50%; - align-self: flex-start; - min-height: var(--panel-min-height); - max-height: var(--panel-max-height); - flex-grow: 0; - overflow: hidden; - overflow-y: overlay; -} - -.wrapper .action-wrapper { - --animate-duration: 1s; - display: flex; - flex-direction: column; - align-self: center; -} - -.action-wrapper .action { - width: 50px; - height: 50px; - display: flex; - justify-content: center; - border-radius: 50%; - align-self: center; - cursor: pointer; - transition: 0.3s; -} - -.action-wrapper .action:hover { - opacity: 80%; - transform: scale(1.1); -} - -.action-wrapper .action i { - align-self: center; - font-size: 30px; -} - -.wrapper .action-wrapper .animate__spin i { - animation: spin 0.5s ease 0s forwards; -} - -@keyframes spin { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - } - - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.wrapper .action-wrapper .animate__grow i { - animation: grow 0.5s ease 0s forwards; -} - -@keyframes grow { - 0% { - -webkit-transform: scale(1.0); - transform: scale(1.0); - } - - 20% { - -webkit-transform: scale(0.8); - transform: scale(0.8); - } - - 60% { - -webkit-transform: scale(1.2); - transform: scale(1.2); - } - - 100% { - -webkit-transform: scale(1.0); - transform: scale(1.0); - } -} - -.wrapper .action-wrapper .animate__shake i { - animation: shake 0.5s ease 0s forwards; -} - -@keyframes shake { - - 0%, - to { - -webkit-transform: translateZ(0); - transform: translateZ(0) - } - - 20%, - 60% { - -webkit-transform: translate3d(-5px, 0, 0); - transform: translate3d(-5px, 0, 0) - } - - - 40%, - 80% { - -webkit-transform: translate3d(5px, 0, 0); - transform: translate3d(5px, 0, 0) - } -} - -.wrapper .action-wrapper .animate__rubber i { - animation: rubber 0.5s ease 0s forwards; -} - -@keyframes rubber { - 0% { - -webkit-transform: scaleX(1); - transform: scaleX(1) - } - - 30% { - -webkit-transform: scale3d(1.25, .75, 1); - transform: scale3d(1.25, .75, 1) - } - - 40% { - -webkit-transform: scale3d(.75, 1.25, 1); - transform: scale3d(.75, 1.25, 1) - } - - 50% { - -webkit-transform: scale3d(1.15, .85, 1); - transform: scale3d(1.15, .85, 1) - } - - 65% { - -webkit-transform: scale3d(.95, 1.05, 1); - transform: scale3d(.95, 1.05, 1) - } - - 75% { - -webkit-transform: scale3d(1.05, .95, 1); - transform: scale3d(1.05, .95, 1) - } - - to { - -webkit-transform: scale(1); - transform: scale(1) - } -} - -.wrapper .action-wrapper .animate__blink i { - animation: tada 0.5s ease 0s forwards; -} - -@keyframes tada { - 0% { - -webkit-transform: scaleX(1); - transform: scaleX(1.1) - } - - 10%, - 20% { - -webkit-transform: scale3d(1.0, 1.0, 1.0) rotate(-3deg); - transform: scale3d(1.0, 1.0, 1.0) rotate(-3deg) - } - - 30%, - 50%, - 70%, - 90% { - -webkit-transform: scale3d(1.2, 1.2, 1.2) rotate(3deg); - transform: scale3d(1.2, 1.2, 1.2) rotate(3deg) - } - - 40%, - 60%, - 80% { - -webkit-transform: scale3d(1.2, 1.2, 1.2) rotate(-3deg); - transform: scale3d(1.2, 1.2, 1.2) rotate(-3deg) - } - - to { - -webkit-transform: scaleX(1.1); - transform: scaleX(1.1) - } -} - -/* input text area */ -.wrapper .panel { - min-height: var(--panel-min-height); -} - -.wrapper .panel .code { - box-sizing: border-box; - width: 100%; - min-height: var(--panel-min-height); - max-height: var(--panel-max-height); - border-radius: var(--panel-border-radius); - overflow: hidden; -} - -#source { - box-sizing: border-box; - width: 100%; - resize: none; - border: none; - padding: 8px 10px; - font-size: var(--code-font-size); - border-radius: var(--panel-border-radius); - z-index: 5; -} - -#source:focus { - box-shadow: 0px 0px 6px 0px inset rgba(10, 37, 64, 0.35); -} - -.panel .cover { - --animate-duration: 0.3s; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - min-height: var(--panel-min-height); - border-radius: var(--panel-border-radius); - background-image: linear-gradient(45deg, #a8edea 0%, #fed6e3 100%); - z-index: 5; - text-align: center; - overflow: auto; - box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1) inset; -} - -.panel .cover p { - align-self: center; - width: 90%; - margin: auto; -} - -/* footer */ -.footer { - width: 100%; - text-align: center; -} - -.footer .badge-wrapper { - width: 100%; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - margin: 10px auto; -} - -.footer .badge-wrapper .badge { - margin: 0 5px; -} - -.footer .copyright { - display: inline-block; - margin: auto; - margin-bottom: 20px; - text-align: center; - font-family: 'Lucida Handwriting'; -} - -.footer .copyright:hover { - text-decoration: underline; -} - -@media screen and (max-width: 950px) { - .tools-wrapper .tools { - flex-direction: column; - justify-content: flex-start; - } - - .tools-wrapper .tools .tool { - align-self: flex-start; - } - - .tools-wrapper .tools .tool .prompt { - width: 8em; - text-align: right; - } -} - -@media screen and (max-width: 768px) { - .wrapper { - flex-direction: column; - } - - .wrapper .panel { - width: 100%; - } - - .wrapper .action-wrapper { - flex-direction: row; - } - - .footer .badge-wrapper { - flex-direction: column; - } -} - -/* alertify */ -.alertify-notifier .ajs-message { - border-radius: 100px; - text-align: center; - text-shadow: 0 0 10px rgba(255, 255, 255, 1.0); - box-shadow: 0 0 10px 1px rgba(255, 255, 255, 0.3); -} - -.alertify-notifier .ajs-message.ajs-success { - background: rgba(92, 184, 17, 0.9); -} - -.alertify-notifier .ajs-message.ajs-warning { - background: rgba(251, 192, 45, 0.9); -} - -.alertify-notifier .ajs-message.ajs-error { - background: rgba(254, 26, 0, 0.9); -} - -.alertify .ajs-dialog { - border-radius: 20px; - overflow: hidden; -} - -.alertify .ajs-dialog .ajs-header { - font-family: 'Lucida Handwriting'; - font-size: large; -} - -.alertify .ajs-dialog .ajs-button { - border-radius: 10px; - background-color: #07C160; - border: none; - cursor: pointer; - box-shadow: 0 0 3px 2px rgba(0, 0, 0, 0.1); - color: white; - transition: 0.3s; -} - -.alertify .ajs-dialog .ajs-button:hover { - opacity: 0.9; - box-shadow: 0 0 3px 2px rgba(0, 0, 0, 0.3); -} - -.coffee { - width: 80%; - margin: auto; - font-family: 'Lucida Handwriting'; -} - -.coffee img { - width: 100%; -} - -.notification { - width: 80%; - margin: auto; - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; -} - -/* Prism */ -/* Override default Prism theme */ -pre { - box-sizing: border-box !important; - margin: 0 !important; - max-height: var(--panel-max-height); - overflow-x: hidden; - overflow-y: auto; - padding: 8px 10px !important; - min-height: 400px !important; -} - -pre.line-numbers { - padding-left: 50px !important; -} - -pre code { - display: block !important; - box-sizing: border-box !important; - border-radius: var(--panel-border-radius); - font-size: var(--code-font-size) !important; - width: max-content; - min-width: 100% !important; -} - -pre code .token { - font-size: var(--code-font-size); -} - -pre code table { - font-family: inherit; - border-collapse: collapse; -} - -pre code table tr .lineno { - text-align: right; - padding-right: 5px; - --color: #ccc; - border-right: 0.5px solid var(--color); -} - -pre code table tr .line { - padding-left: 5px; -} - -/* on copy overload */ -.code.pre-copy>.code-toolbar>pre[class*=language-] { - transition: background 1s; -} - -.code.copy>.code-toolbar>pre[class*=language-] { - background: transparent !important; -} - -.code>.code-toolbar>pre[class*=language-]>code * { - background: transparent !important; -} - -.expand { - display: inline-block; - padding: 5px 15px; - background-color: #bbb; - border-radius: 1000px; - cursor: pointer; -} - -.expand.hidden { - display: none; -} - -.expand i { - margin-left: 5px; -} - -.expand:hover { - background-color: #aaa; - box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1); - transform: scale(1.05); -} - -.expand:active { - background-color: #999; -} - -#previous.hidden { - height: 0; - overflow: hidden; - transition: height 0.5s; -} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..01433bc --- /dev/null +++ b/src/main.ts @@ -0,0 +1,4 @@ +import { createApp } from 'vue' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/src/types/alertifyjs.d.ts b/src/types/alertifyjs.d.ts new file mode 100644 index 0000000..47628f0 --- /dev/null +++ b/src/types/alertifyjs.d.ts @@ -0,0 +1,18 @@ +declare module 'alertifyjs' { + interface AlertifyNotification { + setContent(content: string): void; + dismiss(): void; + } + + interface AlertifyInstance { + success(message: string, wait?: number, callback?: () => void): AlertifyNotification; + error(message: string, wait?: number, callback?: () => void): AlertifyNotification; + warning(message: string, wait?: number, callback?: () => void): AlertifyNotification; + message(message: string, wait?: number, callback?: () => void): AlertifyNotification; + alert(title: string, message: string, callback?: () => void): AlertifyInstance; + set(type: string, key: string, value: string | number): void; + } + + const alertify: AlertifyInstance; + export default alertify; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..9a70efa --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,67 @@ +/** + * Type definitions for CodePaste application + */ + +/** + * Version entry item + */ +export interface VersionEntryItem { + title: string; + items: string[]; +} + +/** + * Version data structure + */ +export interface VersionData { + version: string; + date: string; + entries: VersionEntryItem[]; +} + +/** + * Code samples dictionary + */ +export interface CodeSamples { + [language: string]: string; +} + +/** + * Language option for select dropdown + */ +export interface LanguageOption { + value: string; + label: string; +} + +/** + * Theme configuration + */ +export interface ThemeConfig { + id: string; + name: string; + url: string; +} + +/** + * User preferences stored in localStorage + */ +export interface UserPreferences { + language: string | null; + lineNumber: boolean; + mode: 'light' | 'dark'; + theme: string; +} + +/** + * Action button types + */ +export type ActionType = 'convert' | 'copy' | 'erase' | 'random' | 'issue' | 'coffee'; + +/** + * Paste operation result + */ +export interface PasteResult { + success: boolean; + message: string; +} diff --git a/src/utils/clipboard.ts b/src/utils/clipboard.ts new file mode 100644 index 0000000..e19144d --- /dev/null +++ b/src/utils/clipboard.ts @@ -0,0 +1,63 @@ +/** + * Normalize string by replacing spaces with   while skipping tags + * @param str - HTML string to normalize + * @returns Normalized string + */ +export function normalizeString(str: string): string { + let result = ''; + const length = str.length; + let tagDepth = 0; + + for (let i = 0; i < length; i++) { + const char = str[i]; + if (char === ' ') { + result += tagDepth === 0 ? ' ' : ' '; + } else { + result += char; + if (char === '<') { + tagDepth++; + } else if (char === '>') { + tagDepth--; + } + } + } + + return result; +} + +/** + * Copy HTML element content to clipboard while preserving format and style + * Reference: https://htmldom.dev/copy-highlighted-code-to-the-clipboard/ + * @param elem - HTML element to copy + * @returns true if copy was successful + */ +export function copyHTMLElement(elem: HTMLElement): boolean { + const selection = window.getSelection(); + if (!selection) return false; + + // Save the current selection + const currentRange = selection.rangeCount === 0 ? null : selection.getRangeAt(0); + + // Select the text content of code element + const range = document.createRange(); + range.selectNodeContents(elem); + selection.removeAllRanges(); + selection.addRange(range); + + // Copy to the clipboard + let hasError = false; + try { + document.execCommand('copy'); + } catch (err) { + console.error('Copy failed:', err); + hasError = true; + } finally { + // Restore the previous selection + selection.removeAllRanges(); + if (currentRange) { + selection.addRange(currentRange); + } + } + + return !hasError; +} diff --git a/src/utils/cookies.ts b/src/utils/cookies.ts new file mode 100644 index 0000000..3cbe5dc --- /dev/null +++ b/src/utils/cookies.ts @@ -0,0 +1,39 @@ +/** + * Cookie utility functions + * Reference: https://www.w3schools.com/js/js_cookies.asp + */ + +/** + * Set a cookie with expiration time + * @param name - Cookie name + * @param value - Cookie value + * @param hours - Hours until expiration + */ +export function setCookie(name: string, value: string, hours: number): void { + const expireDate = new Date(); + expireDate.setTime(expireDate.getTime() + hours * 60 * 60 * 1000); + const expires = 'expires=' + expireDate.toUTCString(); + document.cookie = name + '=' + value + ';' + expires + ';path=/'; +} + +/** + * Get a cookie value by name + * @param name - Cookie name + * @returns Cookie value or empty string if not found + */ +export function getCookie(name: string): string { + const namePattern = name + '='; + const decodedCookie = decodeURIComponent(document.cookie); + const cookieParts = decodedCookie.split(';'); + + for (let i = 0; i < cookieParts.length; i++) { + let cookie = cookieParts[i]; + while (cookie.charAt(0) === ' ') { + cookie = cookie.substring(1); + } + if (cookie.indexOf(namePattern) === 0) { + return cookie.substring(namePattern.length, cookie.length); + } + } + return ''; +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..0739971 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export { normalizeString, copyHTMLElement } from './clipboard'; +export { setCookie, getCookie } from './cookies'; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..323c78a --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..34cc2e5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2021", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2021", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + + /* Paths */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..97ede7e --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..6fd326c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': resolve(__dirname, 'src'), + }, + }, + build: { + outDir: 'dist', + }, + base: './', +})