From c679e0b9677ea7dc8d961d1ee6c4fceb651e894e Mon Sep 17 00:00:00 2001 From: nicwands Date: Tue, 2 Jun 2026 12:23:34 -0400 Subject: [PATCH] initial-commit --- .env | 0 .gitignore | 36 + .nvmrc | 1 + README.md | 38 + index.html | 13 + jsconfig.json | 8 + package copy.json | 41 + package-lock.json | 4482 +++++++++++++++++++ package.json | 41 + public/favicon.png | Bin 0 -> 23071 bytes public/fonts/OfficeTimesRound-Regular.woff | Bin 0 -> 10300 bytes public/fonts/OfficeTimesRound-Regular.woff2 | Bin 0 -> 9576 bytes src/App.vue | 59 + src/components.d.ts | 20 + src/components/Layout.vue | 20 + src/components/Lenis.vue | 69 + src/components/LoadingSpinner.vue | 32 + src/composables/useLenis.js | 14 + src/composables/useRelativeSize.js | 29 + src/composables/useScrollProgress.js | 46 + src/composables/useSmoothMouse.js | 89 + src/composables/useSubmitForm.js | 34 + src/composables/useTimelineTransition.js | 37 + src/libs/math.js | 22 + src/libs/sass-utils/index.js | 220 + src/libs/sass-utils/utils.js | 108 + src/libs/theme.js | 43 + src/main.js | 7 + src/styles/_colors.scss | 7 + src/styles/_easings.scss | 22 + src/styles/_font-style.scss | 31 + src/styles/_fonts.scss | 26 + src/styles/_functions.scss | 187 + src/styles/_layers.scss | 7 + src/styles/_layout.scss | 91 + src/styles/_reset.scss | 99 + src/styles/_scroll.scss | 34 + src/styles/_themes.scss | 11 + src/styles/_transitions.scss | 43 + src/styles/_utils.scss | 42 + src/styles/main.scss | 111 + vite.config.js | 55 + 42 files changed, 6275 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 README.md create mode 100644 index.html create mode 100644 jsconfig.json create mode 100644 package copy.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.png create mode 100755 public/fonts/OfficeTimesRound-Regular.woff create mode 100755 public/fonts/OfficeTimesRound-Regular.woff2 create mode 100644 src/App.vue create mode 100644 src/components.d.ts create mode 100644 src/components/Layout.vue create mode 100644 src/components/Lenis.vue create mode 100644 src/components/LoadingSpinner.vue create mode 100644 src/composables/useLenis.js create mode 100644 src/composables/useRelativeSize.js create mode 100644 src/composables/useScrollProgress.js create mode 100644 src/composables/useSmoothMouse.js create mode 100644 src/composables/useSubmitForm.js create mode 100644 src/composables/useTimelineTransition.js create mode 100644 src/libs/math.js create mode 100644 src/libs/sass-utils/index.js create mode 100644 src/libs/sass-utils/utils.js create mode 100644 src/libs/theme.js create mode 100644 src/main.js create mode 100644 src/styles/_colors.scss create mode 100644 src/styles/_easings.scss create mode 100644 src/styles/_font-style.scss create mode 100644 src/styles/_fonts.scss create mode 100644 src/styles/_functions.scss create mode 100644 src/styles/_layers.scss create mode 100644 src/styles/_layout.scss create mode 100644 src/styles/_reset.scss create mode 100644 src/styles/_scroll.scss create mode 100644 src/styles/_themes.scss create mode 100644 src/styles/_transitions.scss create mode 100644 src/styles/_utils.scss create mode 100644 src/styles/main.scss create mode 100644 vite.config.js diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a3f7a51 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +.eslintcache + +# Cypress +/cypress/videos/ +/cypress/screenshots/ + +# Vitest +__screenshots__/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a45fd52 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/README.md b/README.md new file mode 100644 index 0000000..1983168 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# nicwands.com + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Recommended Browser Setup + +- Chromium-based browsers (Chrome, Edge, Brave, etc.): + - [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd) + - [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters) +- Firefox: + - [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/) + - [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/) + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` diff --git a/index.html b/index.html new file mode 100644 index 0000000..c296fd4 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..e9c23cd --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/package copy.json b/package copy.json new file mode 100644 index 0000000..b75b772 --- /dev/null +++ b/package copy.json @@ -0,0 +1,41 @@ +{ + "name": "nicwands.com", + "version": "0.0.0", + "private": true, + "type": "module", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "prettier": { + "tabWidth": 4, + "semi": false, + "singleQuote": true + }, + "scripts": { + "dev": "vite", + "build": "vite-ssg build", + "preview": "vite preview", + "format": "prettier --write src/" + }, + "dependencies": { + "@fuzzco/font-loader": "^1.0.2", + "@unhead/vue": "^2.0.19", + "@vueuse/core": "^14.1.0", + "gsap": "^3.13.0", + "lenis": "^1.3.15", + "lodash": "^4.17.21", + "sass": "^1.94.2", + "sass-embedded": "^1.93.3", + "tempus": "^1.0.0-dev.17", + "unplugin-vue-components": "^30.0.0", + "vite-ssg": "^28.2.2", + "vue": "^3.5.22", + "vue-router": "^4.6.3" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "prettier": "3.6.2", + "vite": "^7.1.11", + "vite-plugin-vue-devtools": "^8.0.3" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..06ed4b6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4482 @@ +{ + "name": "nicwands.com", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nicwands.com", + "version": "0.0.0", + "dependencies": { + "@fuzzco/font-loader": "^1.0.2", + "@unhead/vue": "^2.0.19", + "@vueuse/core": "^14.1.0", + "gsap": "^3.13.0", + "lenis": "^1.3.15", + "lodash": "^4.17.21", + "sass": "^1.94.2", + "sass-embedded": "^1.93.3", + "tempus": "^1.0.0-dev.17", + "unplugin-vue-components": "^30.0.0", + "vite-ssg": "^28.2.2", + "vue": "^3.5.22", + "vue-router": "^4.6.3" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "prettier": "3.6.2", + "vite": "^7.1.11", + "vite-plugin-vue-devtools": "^8.0.3" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.7.tgz", + "integrity": "sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-decorators": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.29.7.tgz", + "integrity": "sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz", + "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-syntax-typescript": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.12.0.tgz", + "integrity": "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.1.tgz", + "integrity": "sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.2.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.4.tgz", + "integrity": "sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@fuzzco/font-loader": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@fuzzco/font-loader/-/font-loader-1.0.2.tgz", + "integrity": "sha512-ztpjEYxdkL0pQjvq7GVeXUkIISe4akhMJ7G/DKqVhAZ++cKu25WSnVevQ7JbXGqG5PGiexzGUKMMJjWleTL+1w==", + "license": "ISC", + "dependencies": { + "fontfaceobserver": "^2.1.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "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.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.0.tgz", + "integrity": "sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.0.tgz", + "integrity": "sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.0.tgz", + "integrity": "sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.0.tgz", + "integrity": "sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.0.tgz", + "integrity": "sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.0.tgz", + "integrity": "sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.0.tgz", + "integrity": "sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.0.tgz", + "integrity": "sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.0.tgz", + "integrity": "sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.0.tgz", + "integrity": "sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.0.tgz", + "integrity": "sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.0.tgz", + "integrity": "sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.0.tgz", + "integrity": "sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.0.tgz", + "integrity": "sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.0.tgz", + "integrity": "sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.0.tgz", + "integrity": "sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.0.tgz", + "integrity": "sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.0.tgz", + "integrity": "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.0.tgz", + "integrity": "sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.0.tgz", + "integrity": "sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.0.tgz", + "integrity": "sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.0.tgz", + "integrity": "sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.0.tgz", + "integrity": "sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.0.tgz", + "integrity": "sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.0.tgz", + "integrity": "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@unhead/dom": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-2.1.15.tgz", + "integrity": "sha512-3/qtu2uOVW0eyYCIljweQ9sRDiFpCasGv9A7LjbcqWR9cxEPDYiJBiK2lVqPJT68qonAeXhtiS08PTCWTau8SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "unhead": "2.1.15" + } + }, + "node_modules/@unhead/vue": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.15.tgz", + "integrity": "sha512-SSByXfEjhzPn8gXdEdgpYqpLMPSkLUH2HVE0GxZfOtNsJ0GgOHQs0g9T67ZZ1z0kTELLKdtOtYrzrbv9+ffF7g==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.15" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz", + "integrity": "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz", + "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz", + "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.2", + "@vue/babel-helper-vue-transform-on": "1.5.0", + "@vue/babel-plugin-resolve-type": "1.5.0", + "@vue/shared": "^3.5.18" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz", + "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.0", + "@vue/compiler-sfc": "^3.5.18" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.35.tgz", + "integrity": "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/shared": "3.5.35", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.35.tgz", + "integrity": "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.35.tgz", + "integrity": "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/compiler-core": "3.5.35", + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.35.tgz", + "integrity": "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-core": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.1.2.tgz", + "integrity": "sha512-ZGGyaSBP4/+bN2Nd9ZHNYAVDRIzMw1rv2RyXWtyZlo6mQal+IDmTvKY4V+DjAEBhaXt30mHmsgYp1yXJ/2tIWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.2", + "@vue/devtools-shared": "^8.1.2" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.2.tgz", + "integrity": "sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.2", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-kit/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/devtools-shared": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.2.tgz", + "integrity": "sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.35.tgz", + "integrity": "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.35.tgz", + "integrity": "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.35.tgz", + "integrity": "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/runtime-core": "3.5.35", + "@vue/shared": "3.5.35", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.35.tgz", + "integrity": "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "vue": "3.5.35" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.35.tgz", + "integrity": "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", + "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz", + "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "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-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.365", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.365.tgz", + "integrity": "sha512-xfip4u1QF1s+URFqpA6N+OeFpDGpN7VJz1f3MO3bVL0QYBjpGiZ5/Of7kugvM+o8TTqmanUlviHN3c8M9vYWCw==", + "dev": true, + "license": "ISC" + }, + "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/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/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/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fontfaceobserver": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", + "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "license": "BSD-2-Clause" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/gsap": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz", + "integrity": "sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==", + "license": "Standard 'no charge' license: https://gsap.com/standard-license." + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html5parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html5parser/-/html5parser-2.0.2.tgz", + "integrity": "sha512-L0y+IdTVxHsovmye8MBtFgBvWZnq1C9WnI/SmJszxoQjmUH1psX2uzDk21O5k5et6udxdGjwxkbmT9eVRoG05w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/immutable": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz", + "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==", + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lenis": { + "version": "1.3.23", + "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.3.23.tgz", + "integrity": "sha512-YxYq3TJqj9sJNv0V9SkyQHejt14xwyIwgDaaMK89Uf9SxQfIszu+gTQSSphh6BWlLTNVKvvXAGkg+Zf+oFIevg==", + "license": "MIT", + "workspaces": [ + "packages/*", + "playground", + "playground/*" + ], + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "react": ">=17.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "react": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/local-pkg": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz", + "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.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/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.4", + "exsolve": "^1.0.8", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.0.tgz", + "integrity": "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.0", + "@rollup/rollup-android-arm64": "4.61.0", + "@rollup/rollup-darwin-arm64": "4.61.0", + "@rollup/rollup-darwin-x64": "4.61.0", + "@rollup/rollup-freebsd-arm64": "4.61.0", + "@rollup/rollup-freebsd-x64": "4.61.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", + "@rollup/rollup-linux-arm-musleabihf": "4.61.0", + "@rollup/rollup-linux-arm64-gnu": "4.61.0", + "@rollup/rollup-linux-arm64-musl": "4.61.0", + "@rollup/rollup-linux-loong64-gnu": "4.61.0", + "@rollup/rollup-linux-loong64-musl": "4.61.0", + "@rollup/rollup-linux-ppc64-gnu": "4.61.0", + "@rollup/rollup-linux-ppc64-musl": "4.61.0", + "@rollup/rollup-linux-riscv64-gnu": "4.61.0", + "@rollup/rollup-linux-riscv64-musl": "4.61.0", + "@rollup/rollup-linux-s390x-gnu": "4.61.0", + "@rollup/rollup-linux-x64-gnu": "4.61.0", + "@rollup/rollup-linux-x64-musl": "4.61.0", + "@rollup/rollup-openbsd-x64": "4.61.0", + "@rollup/rollup-openharmony-arm64": "4.61.0", + "@rollup/rollup-win32-arm64-msvc": "4.61.0", + "@rollup/rollup-win32-ia32-msvc": "4.61.0", + "@rollup/rollup-win32-x64-gnu": "4.61.0", + "@rollup/rollup-win32-x64-msvc": "4.61.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sass": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", + "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-embedded": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz", + "integrity": "sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.100.0", + "sass-embedded-android-arm": "1.100.0", + "sass-embedded-android-arm64": "1.100.0", + "sass-embedded-android-riscv64": "1.100.0", + "sass-embedded-android-x64": "1.100.0", + "sass-embedded-darwin-arm64": "1.100.0", + "sass-embedded-darwin-x64": "1.100.0", + "sass-embedded-linux-arm": "1.100.0", + "sass-embedded-linux-arm64": "1.100.0", + "sass-embedded-linux-musl-arm": "1.100.0", + "sass-embedded-linux-musl-arm64": "1.100.0", + "sass-embedded-linux-musl-riscv64": "1.100.0", + "sass-embedded-linux-musl-x64": "1.100.0", + "sass-embedded-linux-riscv64": "1.100.0", + "sass-embedded-linux-x64": "1.100.0", + "sass-embedded-unknown-all": "1.100.0", + "sass-embedded-win32-arm64": "1.100.0", + "sass-embedded-win32-x64": "1.100.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.100.0.tgz", + "integrity": "sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.100.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.100.0.tgz", + "integrity": "sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.100.0.tgz", + "integrity": "sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.100.0.tgz", + "integrity": "sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.100.0.tgz", + "integrity": "sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.100.0.tgz", + "integrity": "sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz", + "integrity": "sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz", + "integrity": "sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz", + "integrity": "sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.100.0.tgz", + "integrity": "sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz", + "integrity": "sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.100.0.tgz", + "integrity": "sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.100.0.tgz", + "integrity": "sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.100.0.tgz", + "integrity": "sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.100.0.tgz", + "integrity": "sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", + "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.100.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.100.0.tgz", + "integrity": "sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz", + "integrity": "sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tempus": { + "version": "1.0.0-dev.17", + "resolved": "https://registry.npmjs.org/tempus/-/tempus-1.0.0-dev.17.tgz", + "integrity": "sha512-Umj1ILQ+4Shq84SmCR24VrVjBjfHMCVMAawI1v+BO0GEsXpNfhULl1V8zt6v6d1voDiaqXH61DUG5nquGC9Kag==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "react": ">=17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/terser": { + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.2.tgz", + "integrity": "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.2" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.2.tgz", + "integrity": "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==", + "license": "MIT" + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.0.tgz", + "integrity": "sha512-+t2Z/GwkZQDtu00813aP66ygViGtPHKhhoFZpQKpKrE+9jIgES+Zw+mFNaDWOVRKiuJjuqKHzD3B1sfGg8+ZOQ==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unhead": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.15.tgz", + "integrity": "sha512-MCt5T90mCWyr3Z6pUCdM9lVRXoMoVBlL7z7U4CYVIiaDiuzad/UCfLuMqz5MeNmpZUgoBCQnrucJimU7EZR+XA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-30.0.0.tgz", + "integrity": "sha512-4qVE/lwCgmdPTp6h0qsRN2u642tt4boBQtcpn4wQcWZAsr8TQwq+SPT3NDu/6kBFxzo/sSEK4ioXhOOBrXc3iw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "debug": "^4.4.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.19", + "mlly": "^1.8.0", + "tinyglobby": "^0.2.15", + "unplugin": "^2.3.10", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2 || ^4.0.0", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unplugin-vue-components/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", + "license": "MIT", + "peer": true, + "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-dev-rpc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-2.0.0.tgz", + "integrity": "sha512-yKwbTwdHKSD2k/aGqyWpPHepo45OQc8lH3/6IfT4ZqeKE26ooKvi4WIEKzqWav8v+9Is8u1k8q54hvOmqASazA==", + "dev": true, + "license": "MIT", + "dependencies": { + "birpc": "^4.0.0", + "vite-hot-client": "^2.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0 || ^8.0.0" + } + }, + "node_modules/vite-dev-rpc/node_modules/birpc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-4.0.0.tgz", + "integrity": "sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vite-hot-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.2.0.tgz", + "integrity": "sha512-76Zs9zrHbH7M7wqeyooGQKdX+yg0pQ0xuQ1PbFp4z5a0Lzn2e5IPFoCswnmqZ4GiwqB4Jo3WcDAMO9jARTJl8w==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.4.1.tgz", + "integrity": "sha512-ShOFe2PURXGvRS5OrgmOLZOCwDTD7dEBVt0tMpFPKb9AsvqXKCRGM8QgKrUbRbJYFXScHvDPpGRd28rYidC0tA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansis": "^4.3.0", + "error-stack-parser-es": "^1.0.5", + "obug": "^2.1.1", + "ohash": "^2.0.11", + "open": "^11.0.0", + "perfect-debounce": "^2.1.0", + "sirv": "^3.0.2", + "unplugin-utils": "^0.3.1", + "vite-dev-rpc": "^2.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0 || ^8.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.1.2.tgz", + "integrity": "sha512-gt5h1CNryR9Hy0tvhSbqY3j0F7aj0pGxBxWLa1lXSiZVkhdWDf0vbCOZyjh8ivFGE6FDHTGy3zkcZGlMZdVHig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^8.1.2", + "@vue/devtools-kit": "^8.1.2", + "@vue/devtools-shared": "^8.1.2", + "sirv": "^3.0.2", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-vue-inspector": "^6.0.0" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-6.0.0.tgz", + "integrity": "sha512-OpyITJLgZNibxlrik1EmRtvXHDjLRxNPsWkGFTERZs2LgMEdG4W0WoFt5GIgp3a3jRou+eJR8U1zOBk/XQgEbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/vite-ssg": { + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/vite-ssg/-/vite-ssg-28.3.0.tgz", + "integrity": "sha512-dIUjv+scfhJTfYGwf83R0KGAmr/duIo9oln5ZsQOIZZACm3voAON//7oKhtEwaOTtD4QTTab+nhvyn0QiIaFMA==", + "license": "MIT", + "dependencies": { + "@unhead/dom": "^2.1.2", + "@unhead/vue": "^2.1.2", + "ansis": "^4.2.0", + "cac": "^6.7.14", + "html-minifier-terser": "^7.2.0", + "html5parser": "^2.0.2", + "jsdom": "^28.0.0" + }, + "bin": { + "vite-ssg": "bin/vite-ssg.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "beasties": "^0.3.5", + "prettier": "^3.3.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0 || ^7.0.0-0 || ^8.0.0-0", + "vue": "^3.2.10", + "vue-router": "^4.0.1 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "beasties": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-router": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.35.tgz", + "integrity": "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-sfc": "3.5.35", + "@vue/runtime-dom": "3.5.35", + "@vue/server-renderer": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b75b772 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "nicwands.com", + "version": "0.0.0", + "private": true, + "type": "module", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "prettier": { + "tabWidth": 4, + "semi": false, + "singleQuote": true + }, + "scripts": { + "dev": "vite", + "build": "vite-ssg build", + "preview": "vite preview", + "format": "prettier --write src/" + }, + "dependencies": { + "@fuzzco/font-loader": "^1.0.2", + "@unhead/vue": "^2.0.19", + "@vueuse/core": "^14.1.0", + "gsap": "^3.13.0", + "lenis": "^1.3.15", + "lodash": "^4.17.21", + "sass": "^1.94.2", + "sass-embedded": "^1.93.3", + "tempus": "^1.0.0-dev.17", + "unplugin-vue-components": "^30.0.0", + "vite-ssg": "^28.2.2", + "vue": "^3.5.22", + "vue-router": "^4.6.3" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "prettier": "3.6.2", + "vite": "^7.1.11", + "vite-plugin-vue-devtools": "^8.0.3" + } +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7a851697007ec28d633908fe3da5058de15be6 GIT binary patch literal 23071 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 SGMh&24yN*vq`9jXX#fBciD%6K literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..801fdd7 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components.d.ts b/src/components.d.ts new file mode 100644 index 0000000..545c2a0 --- /dev/null +++ b/src/components.d.ts @@ -0,0 +1,20 @@ +/* eslint-disable */ +// @ts-nocheck +// biome-ignore lint: disable +// oxlint-disable +// ------ +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 + +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + Layout: typeof import('./components/Layout.vue')['default'] + Lenis: typeof import('./components/Lenis.vue')['default'] + LoadingSpinner: typeof import('./components/LoadingSpinner.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} diff --git a/src/components/Layout.vue b/src/components/Layout.vue new file mode 100644 index 0000000..58a8b30 --- /dev/null +++ b/src/components/Layout.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/Lenis.vue b/src/components/Lenis.vue new file mode 100644 index 0000000..66c2250 --- /dev/null +++ b/src/components/Lenis.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/LoadingSpinner.vue b/src/components/LoadingSpinner.vue new file mode 100644 index 0000000..ef56223 --- /dev/null +++ b/src/components/LoadingSpinner.vue @@ -0,0 +1,32 @@ + diff --git a/src/composables/useLenis.js b/src/composables/useLenis.js new file mode 100644 index 0000000..f5ef24c --- /dev/null +++ b/src/composables/useLenis.js @@ -0,0 +1,14 @@ +import { inject, onBeforeUnmount } from 'vue' + +export default (callback = () => {}, instanceId) => { + const instanceKey = `lenis${instanceId ? `-${instanceId}` : ''}` + const lenis = inject(instanceKey) + + if (lenis.value) { + lenis.value.on('scroll', callback) + } + + onBeforeUnmount(() => lenis.value?.off('scroll', callback)) + + return lenis +} diff --git a/src/composables/useRelativeSize.js b/src/composables/useRelativeSize.js new file mode 100644 index 0000000..89f0172 --- /dev/null +++ b/src/composables/useRelativeSize.js @@ -0,0 +1,29 @@ +import { useWindowSize } from '@vueuse/core' +import { viewports } from '@/libs/theme' + +const { width: wWidth, height: wHeight } = useWindowSize() + +export default () => { + // Desktop + const dvw = (pixels) => { + return (pixels / viewports.desktop.width) * wWidth.value + } + const dvh = (pixels) => { + return (pixels / viewports.desktop.height) * wHeight.value + } + + // Mobile + const mvw = (pixels) => { + return (pixels / viewports.mobile.width) * wWidth.value + } + const mvh = (pixels) => { + return (pixels / viewports.mobile.height) * wHeight.value + } + + return { + dvw, + dvh, + mvw, + mvh, + } +} diff --git a/src/composables/useScrollProgress.js b/src/composables/useScrollProgress.js new file mode 100644 index 0000000..670498a --- /dev/null +++ b/src/composables/useScrollProgress.js @@ -0,0 +1,46 @@ +import { + useElementBounding, + useIntersectionObserver, + useWindowSize, +} from '@vueuse/core' +import { ref } from 'vue' +import { mapRange, clamp } from '@/libs/math' +import useLenis from '@/composables/useLenis' + +const { height: wHeight } = useWindowSize() + +export const useScrollProgress = (el, callback, entry = 0.5, exit = 0.5) => { + const isActive = ref(true) + const smoothProgress = ref(0) + + const { height, top } = useElementBounding(el) + + const isIntersected = ref(false) + const { stop } = useIntersectionObserver(el, ([{ isIntersecting }]) => { + isIntersected.value = isIntersecting + }) + + useLenis(({ scroll }) => { + if (!isActive.value) return + if (!height.value || !wHeight.value) return + if (!isIntersected.value) return + + const pageTop = scroll + top.value + + const start = pageTop - wHeight.value * entry + const end = pageTop + height.value - wHeight.value * exit + + let rawProgress = mapRange(start, end, scroll, 0, 1) + rawProgress = clamp(0, rawProgress, 1) + + smoothProgress.value += (rawProgress - smoothProgress.value) * 0.1 + callback?.(smoothProgress.value) + }) + + const destroy = () => { + isActive.value = false + stop?.() + } + + return { destroy } +} diff --git a/src/composables/useSmoothMouse.js b/src/composables/useSmoothMouse.js new file mode 100644 index 0000000..6a6606e --- /dev/null +++ b/src/composables/useSmoothMouse.js @@ -0,0 +1,89 @@ +import gsap from 'gsap' +import { ref, onMounted, onBeforeUnmount } from 'vue' +import { useWindowSize, useEventListener } from '@vueuse/core' + +/** + * Shared global raw mouse state (only set up once) + */ +const rawMouse = { + x: ref(0), + y: ref(0), + initialized: false, + cleanup: null, +} + +const useGlobalMouseListener = () => { + if (!rawMouse.initialized && !import.meta.env.SSR) { + rawMouse.initialized = true + rawMouse.cleanup = useEventListener(window, 'mousemove', (e) => { + rawMouse.x.value = e.clientX + rawMouse.y.value = e.clientY + }) + } +} + +/** + * Composable for smoothed mouse position with customizable smoothing and normalization. + */ +export default (options) => { + const smoothFactor = options?.smoothFactor ?? 0.1 + const normalize = options?.normalize ?? false + const callback = options?.onUpdate + + const { width: wWidth, height: wHeight } = useWindowSize() + + const sx = ref(0) + const sy = ref(0) + + useGlobalMouseListener() + + const getTargetX = () => + normalize ? rawMouse.x.value / wWidth.value : rawMouse.x.value + const getTargetY = () => + normalize ? rawMouse.y.value / wHeight.value : rawMouse.y.value + + let tween + onMounted(() => { + if (tween) tween.kill + + // Start smoothing tween + tween = gsap.to( + { x: sx.value, y: sy.value }, + { + duration: 1, + ease: 'linear', + repeat: -1, + onUpdate: () => { + const newX = gsap.utils.interpolate( + sx.value, + getTargetX(), + smoothFactor, + ) + const newY = gsap.utils.interpolate( + sy.value, + getTargetY(), + smoothFactor, + ) + + sx.value = newX + sy.value = newY + + callback?.({ sx: sx.value, sy: sy.value }) + }, + }, + ) + }) + + onBeforeUnmount(() => { + tween?.kill() + rawMouse.cleanup() + rawMouse.initialized = false + }) + + return { + sx, + sy, + rawX: rawMouse.x, + rawY: rawMouse.y, + } +} diff --git a/src/composables/useSubmitForm.js b/src/composables/useSubmitForm.js new file mode 100644 index 0000000..05cb6c2 --- /dev/null +++ b/src/composables/useSubmitForm.js @@ -0,0 +1,34 @@ +import { ref } from 'vue' + +export default (url) => { + const loading = ref(false) + const success = ref(false) + const error = ref('') + + const submit = async (headers = {}, body = {}) => { + loading.value = true + + try { + await fetch(url, { + method: 'POST', + headers, + body: new URLSearchParams(body), + }) + + success.value = true + error.value = '' + } catch (err) { + console.error(err) + error.value = err.toString().split('Error: ')[1] + } + + loading.value = false + } + + return { + loading, + success, + error, + submit, + } +} diff --git a/src/composables/useTimelineTransition.js b/src/composables/useTimelineTransition.js new file mode 100644 index 0000000..148531b --- /dev/null +++ b/src/composables/useTimelineTransition.js @@ -0,0 +1,37 @@ +import gsap from 'gsap' + +export default (timelineSetup = () => {}) => { + const timelines = new WeakMap() + const getTimeline = (el) => { + if (!timelines.has(el)) { + const tl = gsap.timeline({ paused: true }) + + timelines.set(el, tl) + } + return timelines.get(el) + } + const onEnter = (el, done) => { + const tl = getTimeline(el) + + tl.clear() + timelineSetup?.(tl, el) + + tl.eventCallback('onReverseComplete', null) + tl.eventCallback('onComplete', done) + tl.play() + } + const onLeave = (el, done) => { + el.style.pointerEvents = 'none' + + const tl = getTimeline(el) + + tl.eventCallback('onComplete', null) + tl.eventCallback('onReverseComplete', done) + tl.reverse() + } + + return { + onEnter, + onLeave, + } +} diff --git a/src/libs/math.js b/src/libs/math.js new file mode 100644 index 0000000..9f2dddd --- /dev/null +++ b/src/libs/math.js @@ -0,0 +1,22 @@ +export function clamp(min, input, max) { + return Math.max(min, Math.min(input, max)) +} + +export function mapRange(in_min, in_max, input, out_min, out_max) { + return ( + ((input - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min + ) +} + +export function lerp(start, end, amt) { + return (1 - amt) * start + amt * end +} + +export function truncate(value, decimals) { + return parseFloat(value.toFixed(decimals)) +} + +export function wrapValue(value, lowBound, highBound) { + const range = highBound - lowBound + return ((((value - lowBound) % range) + range) % range) + lowBound +} diff --git a/src/libs/sass-utils/index.js b/src/libs/sass-utils/index.js new file mode 100644 index 0000000..1103538 --- /dev/null +++ b/src/libs/sass-utils/index.js @@ -0,0 +1,220 @@ +// https://github.com/dawaltconley/sass-cast/blob/main/index.js + +import * as sass from 'sass-embedded' +import { isQuoted, unquoteString, parseString, getAttr } from './utils' +import { List, OrderedMap } from 'immutable' + +/** + * Converts any Javascript object to an equivalent Sass value. + * + * This method is recursive and will convert the values of any array or object, + * as well as the array or object itself. + * + * @example + * const { toSass } = require('sass-cast'); + * + * const string = toSass('a simple string'); + * // quoted SassString => '"a simple string"' + * + * const map = toSass({ + * key: 'value', + * nested: { + * 'complex//:key': [ null, 4 ], + * } + * }); + * // SassMap => '("key": "value", "nested": ("complex//:key": (null, 4)))' + * + * @param {*} value - the value to be converted + * @param {Object} options + * @param {boolean} [options.parseUnquotedStrings=false] - whether to parse unquoted strings for colors or numbers with units + * @param {boolean|*[]} [options.resolveFunctions=false] - if true, resolve functions and attempt to cast their return values. if an array, pass as arguments when resolving + * @param {boolean} [options.quotes=true] - controls whether returned SassStrings are quoted. input strings that contain quotes will always return a quoted SassString even if this flag is false. + * @return {Value} - a {@link https://sass-lang.com/documentation/js-api/classes/Value Sass value} + */ + +export const toSass = (value, options = {}) => { + let { + parseUnquotedStrings = false, + resolveFunctions = false, + quotes = true, + } = options + if (value instanceof sass.Value) { + return value + } else if (value === null || value === undefined) { + return sass.sassNull + } else if (typeof value === 'boolean') { + return value ? sass.sassTrue : sass.sassFalse + } else if (typeof value === 'number') { + return new sass.SassNumber(value) + } else if (typeof value === 'string') { + const valueIsQuoted = isQuoted(value) + if (parseUnquotedStrings && !valueIsQuoted) { + let parsed = parseString(value) + if ( + parsed instanceof sass.SassColor || + parsed instanceof sass.SassNumber + ) + return parsed + } + return new sass.SassString(value, { + quotes: valueIsQuoted || quotes, + }) + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + let sassList = value.map((value) => toSass(value, options)) + return new sass.SassList(sassList) + } else { + let sassMap = OrderedMap(value).mapEntries(([key, value]) => [ + new sass.SassString(key, { quotes: true }), + toSass(value, options), + ]) + return new sass.SassMap(sassMap) + } + } else if (resolveFunctions && typeof value === 'function') { + const args = Array.isArray(resolveFunctions) ? resolveFunctions : [] + return toSass(value(...args), options) + } + return sass.sassNull +} + +const colorProperties = [ + 'red', + 'green', + 'blue', + 'hue', + 'lightness', + 'saturation', + 'whiteness', + 'blackness', + 'alpha', +] + +/** + * Converts Sass values to their Javascript equivalents. + * + * @example + * const { fromSass, toSass } = require('sass-cast'); + * + * const sassString = toSass('a sass string object'); + * const string = fromSass(sassString); + * // 'a sass string object' + * + * @param {Value} object - a {@link https://sass-lang.com/documentation/js-api/classes/Value Sass value} + * @param {Object} options + * @param {boolean} [options.preserveUnits=false] - By default, only the values of numbers are returned, not their units. If true, `fromSass` will return numbers as a two-item Array, i.e. [ value, unit ] + * @param {boolean} [options.rgbColors=false] - By default, colors are returned as strings. If true, `fromSass` will return colors as an object with `r`, `g`, `b`, and `a`, properties. + * @param {boolean} [options.preserveQuotes=false] - By default, quoted Sass strings return their inner text as a string. If true, `fromSass` will preserve the quotes in the returned string value. + * @return {*} - a Javascript value corresponding to the Sass input + */ + +export const fromSass = (object, options = {}) => { + let { + preserveUnits = false, + rgbColors = false, + preserveQuotes = false, + } = options + if (object instanceof sass.SassBoolean) { + return object.value + } else if (object instanceof sass.SassNumber) { + if (preserveUnits) { + return [ + object.value, + object.numeratorUnits.toArray(), + object.denominatorUnits.toArray(), + ] + } else if (object.numeratorUnits.size || object.denominatorUnits.size) { + return object.toString() + } + return object.value + } else if (object instanceof sass.SassColor) { + if (rgbColors) { + return colorProperties.reduce((colorObj, p) => { + colorObj[p] = object[p] + return colorObj + }, {}) + } + return object.toString() + } else if (object instanceof sass.SassString) { + return preserveQuotes ? object.text : unquoteString(object.text) + } else if (object instanceof sass.SassList || List.isList(object)) { + let list = [] + for ( + let i = 0, value = object.get(i); + value !== undefined; + i++, value = object.get(i) + ) { + list.push(fromSass(value, options)) + } + return list + } else if (object instanceof sass.SassMap) { + return object.contents + .mapEntries(([k, v]) => [k.text, fromSass(v, options)]) + .toObject() + } else { + return object.realNull + } +} + +/** + * An object defining Sass utility functions. + * + * @example Pass to sass using the JS API + * const { sassFunctions } = require('sass-cast'); + * const sass = require('sass'); + * + * sass.compile('main.scss', { functions: sassFunctions }); + */ +export const sassFunctions = { + /** + * Sass function for importing data from Javascript or JSON files. + * Calls the CommonJS `require` function under the hood. + * + * #### Examples + * + * ```scss + * // import config info from tailwindcss + * $tw: require('./tailwind.config.js', $parseUnquotedStrings: true); + * $tw-colors: map.get($tw, theme, extend, colors); + * ``` + * @name require + * @memberof sassFunctions + * @param {SassString} $module - Path to the file or module. Relative paths are relative to the Node process running Sass compilation. + * @param {SassList} [$properties=()] - List of properties, if you only want to parse part of the module data. + * @param {SassBoolean} [$parseUnquotedStrings=false] - Passed as an option to {@link #tosass toSass}. + * @param {SassBoolean} [$resolveFunctions=false] - Passed as an option to {@link #tosass toSass}. + * @param {SassBoolean} [$quotes=true] - Passed as an option to {@link #tosass toSass}. + * @return {Value} - a {@link https://sass-lang.com/documentation/js-api/classes/Value Sass value} + */ + 'require($module, $properties: (), $parseUnquotedStrings: false, $resolveFunctions: false, $quotes: true)': + (args) => { + const moduleName = args[0].assertString('module').text + const properties = args[1].realNull && fromSass(args[1].asList) + const parseUnquotedStrings = args[2].isTruthy + const resolveFunctions = args[3].isTruthy + const quotes = args[4].isTruthy + const options = { + parseUnquotedStrings, + resolveFunctions, + quotes, + } + const convert = (data) => + toSass(properties ? getAttr(data, properties) : data, options) + + let mod, + paths = [moduleName, `${process.cwd()}/${moduleName}`] + for (let path of paths) { + try { + mod = require(path) + break + } catch (e) { + if (e.code !== 'MODULE_NOT_FOUND') throw e + continue + } + } + if (!mod) throw new Error(`Couldn't find module: ${moduleName}`) + + if (resolveFunctions && typeof mod === 'function') mod = mod() + if (mod instanceof Promise) return mod.then(convert) + return convert(mod) + }, +} diff --git a/src/libs/sass-utils/utils.js b/src/libs/sass-utils/utils.js new file mode 100644 index 0000000..658ce3e --- /dev/null +++ b/src/libs/sass-utils/utils.js @@ -0,0 +1,108 @@ +// https://github.com/dawaltconley/sass-cast/blob/main/utils.js + +import * as sass from 'sass-embedded' + +/** + * Check if string is quoted + * @private + * @param {string} str + * @return {boolean} + */ +export const isQuoted = (str) => /^['"].*['"]$/.test(str) + +/** + * Surrounds a string with quotes + * @private + * @param {string} str + * @param {string} q - quotes, double or single + * @return {string} + */ +export const quoteString = (str, q) => { + if (!q) return str + if (isQuoted(str)) { + q = str[0] + str = str.slice(1, -1) + } + let r = new RegExp(q, 'g') + return q + str.replace(r, '\\' + q) + q +} + +/** + * Unquotes a string + * @private + * @param {string} str + * @return {string} + */ +export const unquoteString = (str) => (isQuoted(str) ? str.slice(1, -1) : str) + +/** + * Parse a string as a Sass object + * cribbed from davidkpiano/sassport + * + * @private + * @param {string} str + * @return {Value} + */ +export const parseString = (str) => { + let result + + try { + sass.compileString(`$_: ___(${str});`, { + functions: { + '___($value)': (args) => { + result = args[0] + return result + }, + }, + }) + } catch (e) { + return str + } + + return result +} + +/** + * Parse a string as a legacy Sass object + * cribbed from davidkpiano/sassport + * + * @private + * @param {string} str + * @return {LegacyObject} + */ +export const parseStringLegacy = (str) => { + let result + + try { + sass.renderSync({ + data: `$_: ___((${str}));`, + functions: { + '___($value)': (value) => { + result = value + return value + }, + }, + }) + } catch (e) { + return str + } + + return result +} + +/** + * Function to handle 'toString()' methods with legacy API. + * + * @private + * @param {LegacyObject} obj + * @return {string} + */ +export const legacyToString = (obj) => (obj.dartValue || obj).toString() + +/** + * Return a value from an object and a list of keys. + * @private + * @param {Object|Array} obj + * @param {*[]} attrs + */ +export const getAttr = (obj, attrs) => attrs.reduce((o, attr) => o[attr], obj) diff --git a/src/libs/theme.js b/src/libs/theme.js new file mode 100644 index 0000000..1772a00 --- /dev/null +++ b/src/libs/theme.js @@ -0,0 +1,43 @@ +const colors = { + black: '#000000', + white: '#d9d9d9', + pink: '#DAC3C3', + green: '#D8E3D3', + cream: '#F2F1F1', + grey: '#2B2B2B', +} + +const themes = { + light: { + bg: colors.white, + fg: colors.black, + }, + dark: { + bg: colors.black, + fg: colors.white, + }, +} + +const breakpoints = { + mobile: 800, +} + +const viewports = { + mobile: { + width: 440, + height: 956, + }, + desktop: { + width: 1728, + height: 1117, + }, +} + +export { colors, themes, breakpoints, viewports } + +export default { + colors, + themes, + breakpoints, + viewports, +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..ac15ebb --- /dev/null +++ b/src/main.js @@ -0,0 +1,7 @@ +import './styles/main.scss' +import App from './App.vue' +import { ViteSSG } from 'vite-ssg/single-page' + +export const createApp = ViteSSG(App, ({ app }) => { + // Plugins +}) diff --git a/src/styles/_colors.scss b/src/styles/_colors.scss new file mode 100644 index 0000000..3e8cee3 --- /dev/null +++ b/src/styles/_colors.scss @@ -0,0 +1,7 @@ +@use 'sass:color'; + +:root { + @each $name, $color in getColors() { + --#{$name}: #{$color}; + } +} diff --git a/src/styles/_easings.scss b/src/styles/_easings.scss new file mode 100644 index 0000000..f580954 --- /dev/null +++ b/src/styles/_easings.scss @@ -0,0 +1,22 @@ +:root { + --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53); + --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19); + --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22); + --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06); + --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035); + --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335); + --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94); + --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1); + --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1); + --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1); + --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1); + --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1); + --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955); + --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1); + --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1); + --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1); + --ease-in-out-expo: cubic-bezier(1, 0, 0, 1); + --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86); + + --ease-custom: cubic-bezier(0.315, 0.365, 0.23, 0.985); +} diff --git a/src/styles/_font-style.scss b/src/styles/_font-style.scss new file mode 100644 index 0000000..51af48e --- /dev/null +++ b/src/styles/_font-style.scss @@ -0,0 +1,31 @@ +@use 'functions' as *; + +@mixin size-font($ds, $ms) { + font-size: mobile-vw($ms); + + &.vh { + font-size: mobile-vh($ms); + } + + @include desktop { + font-size: desktop-vw($ds); + + &.vh { + font-size: desktop-vh($ds); + } + } +} + +@mixin h1 { + font-family: var(--font-times); + font-weight: 400; + letter-spacing: 0.1em; + @include size-font(42px, 27px); +} + +@mixin p { + font-family: var(--font-times); + font-weight: 400; + letter-spacing: 0.03em; + @include size-font(25px, 18px); +} diff --git a/src/styles/_fonts.scss b/src/styles/_fonts.scss new file mode 100644 index 0000000..84679d8 --- /dev/null +++ b/src/styles/_fonts.scss @@ -0,0 +1,26 @@ +/* + Font Weights: + 100 - Thin + 200 - Extra Light (Ultra Light) + 300 - Light + 400 - Normal + 500 - Medium + 600 - Semi Bold (Demi Bold) + 700 - Bold + 800 - Extra Bold (Ultra Bold) + 900 - Black (Heavy) +*/ + +/* OFFICE TIMES */ +@font-face { + font-family: 'Office Times'; + font-style: normal; + font-weight: 400; + src: + url('/fonts/OfficeTimesRound-Regular.woff2') format('woff2'), + url('/fonts/OfficeTimesRound-Regular.woff') format('woff'); +} + +:root { + --font-times: 'Office Times', monospace; +} diff --git a/src/styles/_functions.scss b/src/styles/_functions.scss new file mode 100644 index 0000000..a7655fd --- /dev/null +++ b/src/styles/_functions.scss @@ -0,0 +1,187 @@ +@use 'sass:math'; + +/* Breakpoints */ +$mobile-breakpoint: get('breakpoints.mobile'); + +// Viewport Sizes +$desktop-width: get('viewports.desktop.width'); +$desktop-height: get('viewports.desktop.height'); + +$mobile-width: get('viewports.mobile.width'); +$mobile-height: get('viewports.mobile.height'); + +// Breakpoint +@mixin mobile { + @media (max-width: #{$mobile-breakpoint * 1px - 1px}) { + @content; + } +} + +@mixin desktop { + @media (min-width: #{$mobile-breakpoint * 1px}) { + @content; + } +} + +@function mobile-vw($pixels, $base-vw: $mobile-width) { + $px: math.div($pixels, $base-vw); + $perc: math.div($px, 1px); + @return calc($perc * 100vw); +} + +@function mobile-vh($pixels, $base-vh: $mobile-height) { + $px: math.div($pixels, $base-vh); + $perc: math.div($px, 1px); + @return calc($perc * 100vh); +} + +@function desktop-vw($pixels, $base-vw: $desktop-width) { + $px: math.div($pixels, $base-vw); + $perc: math.div($px, 1px); + @return calc($perc * 100vw); +} + +@function desktop-vh($pixels, $base-vh: $desktop-height) { + $px: math.div($pixels, $base-vh); + $perc: math.div($px, 1px); + @return calc($perc * 100vh); +} + +@function columns($columns) { + @return calc( + (#{$columns} * var(--layout-column-width)) + + ((#{$columns} - 1) * var(--layout-column-gap)) + ); +} + +@mixin child-grid($columns) { + grid-template-columns: repeat($columns, minmax(0, 1fr)); + column-gap: var(--layout-columns-gap); + display: grid; +} + +@mixin reduced-motion { + @media (prefers-reduced-motion: reduce) { + @content; + } +} + +@mixin fill($position: absolute) { + position: #{$position}; + bottom: 0; + right: 0; + left: 0; + top: 0; +} + +@mixin fade-on-ready($class: 'ready', $duration: 400ms) { + opacity: 0; + transition: opacity $duration ease; + + &.#{$class} { + opacity: 1; + } +} + +// Clamp text block to number of lines +@mixin line-clamp($lines: 3, $mobile-lines: $lines) { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: $lines; + + @include mobile { + -webkit-line-clamp: $mobile-lines; + } +} + +// Flip animations +@keyframes flip-r { + 50% { + transform: translateX(100%); + opacity: 0; + } + 51% { + transform: translateX(-100%); + opacity: 0; + } +} +@keyframes flip-l { + 50% { + transform: translateX(-100%); + opacity: 0; + } + 51% { + transform: translateX(100%); + opacity: 0; + } +} +@keyframes flip-d { + 50% { + transform: translateY(100%); + opacity: 0; + } + 51% { + transform: translateY(-100%); + opacity: 0; + } +} +@keyframes flip-u { + 50% { + transform: translateY(-100%); + opacity: 0; + } + 51% { + transform: translateY(100%); + opacity: 0; + } +} + +@mixin flip-animation( + $direction: 'r', + $duration: 600ms, + $easing: var(--ease-out-expo), + $iteration-count: 1 +) { + overflow: hidden; + animation: flip-#{$direction} $duration $easing $iteration-count forwards; +} + +@mixin link-hover { + position: relative; + + &::before { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 1px; + background: var(--theme-fg); + transform-origin: left; + transform: scaleX(0); + transition: transform 300ms var(--ease-out-quad); + } + @include desktop { + &:hover::before { + transform: scaleX(1); + } + } +} + +@mixin stagger-animate($stagger: 100, $num-children: 10, $base-delay: 0) { + @for $i from 0 through $num-children { + &:nth-child(#{$i + 1}) { + transition-delay: #{$stagger * $i + $base-delay}ms; + } + } +} + +@mixin hover { + @include desktop { + &:hover { + @content; + } + } +} diff --git a/src/styles/_layers.scss b/src/styles/_layers.scss new file mode 100644 index 0000000..c08633d --- /dev/null +++ b/src/styles/_layers.scss @@ -0,0 +1,7 @@ +// z-index +.lily-cursor { + z-index: 20; +} +.site-header { + z-index: 10; +} diff --git a/src/styles/_layout.scss b/src/styles/_layout.scss new file mode 100644 index 0000000..503fecf --- /dev/null +++ b/src/styles/_layout.scss @@ -0,0 +1,91 @@ +@use 'sass:list'; +@use 'functions' as *; + +// css variables exposed globally: +// --layout-column-count: columns count in the layout +// --layout-column-gap: gap size between columns +// --layout-margin: layout margin size (left or right) +// --layout-width: 100vw minus 2 * --layout-margin +// --layout-column-width: size of a single column + +// css classes exposed globally: +// .layout-block: element takes the whole layout width +// .layout-block-inner: same as .layout-block but using padding instead of margin +// .layout-grid: extends .layout-block with grid behaviour using layout settings +// .layout-grid-inner: same as .layout-grid but using padding instead of margin + +@use 'sass:map'; + +// config to fill +// 'variable': (mobile, desktop) +$layout: ( + 'columns-count': ( + 5, + 18, + ), + 'columns-gap': ( + 20px, + 20px, + ), + 'margin': ( + 30px, + 60px, + ), +); + +//internal process, do not touch +:root { + --layout-column-count: #{list.nth(map.get($layout, 'columns-count'), 1)}; + --layout-column-gap: #{mobile-vw( + list.nth(map.get($layout, 'columns-gap'), 1) + )}; + --layout-margin: #{mobile-vw(list.nth(map.get($layout, 'margin'), 1))}; + --layout-width: calc(100vw - (2 * var(--layout-margin))); + --layout-column-width: calc( + ( + var(--layout-width) - + ( + (var(--layout-column-count) - 1) * + var(--layout-column-gap) + ) + ) / + var(--layout-column-count) + ); + + @include desktop { + --layout-column-count: #{list.nth(map.get($layout, 'columns-count'), 2)}; + --layout-column-gap: #{desktop-vw( + list.nth(map.get($layout, 'columns-gap'), 2) + )}; + --layout-margin: #{desktop-vw(list.nth(map.get($layout, 'margin'), 2))}; + } +} + +.layout-block { + max-width: var(--layout-width); + margin-left: auto; + margin-right: auto; + width: 100%; +} + +.layout-block-inner { + padding-left: var(--layout-margin); + padding-right: var(--layout-margin); + width: 100%; +} + +.layout-grid { + @extend .layout-block; + + display: grid; + grid-template-columns: repeat(var(--layout-column-count), minmax(0, 1fr)); + grid-gap: var(--layout-column-gap); +} + +.layout-grid-inner { + @extend .layout-block-inner; + + display: grid; + grid-template-columns: repeat(var(--layout-column-count), minmax(0, 1fr)); + grid-gap: var(--layout-column-gap); +} diff --git a/src/styles/_reset.scss b/src/styles/_reset.scss new file mode 100644 index 0000000..0454938 --- /dev/null +++ b/src/styles/_reset.scss @@ -0,0 +1,99 @@ +/*** + The new CSS reset - version 1.9 (last updated 19.6.2023) + GitHub page: https://github.com/elad2412/the-new-css-reset +***/ + +/* + Remove all the styles of the "User-Agent-Stylesheet", except for the 'display' property + - The "symbol *" part is to solve Firefox SVG sprite bug + - The "html" element is excluded, otherwise a bug in Chrome breaks the CSS hyphens property (https://github.com/elad2412/the-new-css-reset/issues/36) + */ +*:where( + :not(html, iframe, canvas, img, svg, video, audio):not(svg *, symbol *) + ) { + all: unset; + display: revert; +} + +/* Preferred box-sizing value */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Reapply the pointer cursor for anchor tags */ +a, +button { + cursor: revert; +} + +/* For images to not be able to exceed their container */ +img { + max-inline-size: 100%; + max-block-size: 100%; +} + +/* removes spacing between cells in tables */ +table { + border-collapse: collapse; +} + +/* Safari - solving issue when using user-select:none on the text input doesn't working */ +input, +textarea { + -webkit-user-select: auto; +} + +/* revert the 'white-space' property for textarea elements on Safari */ +textarea { + white-space: revert; +} + +/* minimum style to allow to style meter element */ +meter { + -webkit-appearance: revert; + appearance: revert; +} + +/* preformatted text - use only for this feature */ +:where(pre) { + all: revert; +} + +/* reset default text opacity of input placeholder */ +::placeholder { + color: unset; +} + +/* remove default dot (•) sign */ +::marker { + content: initial; +} + +/* fix the feature of 'hidden' attribute. + display:revert; revert to element instead of attribute */ +:where([hidden]) { + display: none; +} + +/* revert for bug in Chromium browsers + - fix for the content editable attribute will work properly. + - webkit-user-select: auto; added for Safari in case of using user-select:none on wrapper element*/ +:where([contenteditable]:not([contenteditable='false'])) { + -moz-user-modify: read-write; + -webkit-user-modify: read-write; + overflow-wrap: break-word; + -webkit-line-break: after-white-space; + -webkit-user-select: auto; +} + +/* apply back the draggable feature - exist only in Chromium and Safari */ +:where([draggable='true']) { + -webkit-user-drag: element; +} + +/* Revert Modal native behavior */ +:where(dialog:modal) { + all: revert; +} diff --git a/src/styles/_scroll.scss b/src/styles/_scroll.scss new file mode 100644 index 0000000..c4779be --- /dev/null +++ b/src/styles/_scroll.scss @@ -0,0 +1,34 @@ +html { + &:not(.dev) { + &, + * { + scrollbar-width: none !important; + -ms-overflow-style: none !important; + + &::-webkit-scrollbar { + width: 0 !important; + height: 0 !important; + } + } + } +} + +html.lenis { + height: auto; +} + +.lenis.lenis-smooth { + scroll-behavior: auto; +} + +.lenis.lenis-smooth [data-lenis-prevent] { + overscroll-behavior: contain; +} + +.lenis.lenis-stopped { + overflow: hidden; +} + +.lenis.lenis-scrolling iframe { + pointer-events: none; +} diff --git a/src/styles/_themes.scss b/src/styles/_themes.scss new file mode 100644 index 0000000..5d35050 --- /dev/null +++ b/src/styles/_themes.scss @@ -0,0 +1,11 @@ +@use 'sass:color'; + +:root { + @each $name, $theme in getThemes() { + .theme-#{$name} { + @each $name, $color in $theme { + --theme-#{$name}: #{$color}; + } + } + } +} diff --git a/src/styles/_transitions.scss b/src/styles/_transitions.scss new file mode 100644 index 0000000..39542ce --- /dev/null +++ b/src/styles/_transitions.scss @@ -0,0 +1,43 @@ +// Fades +.fade-enter-active, +.fade-leave-active { + transition: opacity 400ms; +} +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} +.quick-fade-enter-active, +.quick-fade-leave-active { + transition: opacity 100ms; +} +.quick-fade-enter-from, +.quick-fade-leave-to { + opacity: 0; +} +.slow-fade-enter-active, +.slow-fade-leave-active { + transition: opacity 600ms; +} +.slow-fade-enter-from, +.slow-fade-leave-to { + opacity: 0; +} + +// Slides +.slide-up-enter-active, +.slide-up-leave-active { + transition: transform 400ms var(--ease-out-quad); +} +.slide-up-enter-from, +.slide-up-leave-to { + transform: translateY(-100%); +} +.slide-left-enter-active, +.slide-left-leave-active { + transition: transform 400ms var(--ease-out-quad); +} +.slide-left-enter-from, +.slide-left-leave-to { + transform: translateX(-100%); +} diff --git a/src/styles/_utils.scss b/src/styles/_utils.scss new file mode 100644 index 0000000..4e1115a --- /dev/null +++ b/src/styles/_utils.scss @@ -0,0 +1,42 @@ +@use 'functions' as *; + +.full-width { + width: 100vw; + position: relative; + left: 50%; + right: 50%; + margin-left: -50vw; + margin-right: -50vw; +} + +.overflow-hidden { + overflow: hidden; +} + +.relative { + position: relative; +} + +.mobile-only { + @include desktop { + display: none !important; + } +} + +.desktop-only { + @include mobile { + display: none !important; + } +} + +html:not(.has-scroll-smooth) { + .hide-on-native-scroll { + display: none; + } +} + +html.has-scroll-smooth { + .hide-on-smooth-scroll { + display: none; + } +} diff --git a/src/styles/main.scss b/src/styles/main.scss new file mode 100644 index 0000000..06e1ca3 --- /dev/null +++ b/src/styles/main.scss @@ -0,0 +1,111 @@ +@use 'colors' as *; +@use 'themes' as *; +@use 'easings' as *; +@use 'reset' as *; +@use 'layers' as *; +@use 'functions' as *; +@use 'utils' as *; +@use 'fonts' as *; +@use 'font-style' as *; +@use 'layout' as *; +@use 'scroll' as *; +@use 'transitions' as *; + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + + background: var(--white); + color: var(--black); + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + min-height: 100vh; +} + +// Type +.h1, +h1, +h2, +h3, +h4, +h5, +h6 { + @include h1; +} +.p, +p, +a, +button, +input, +pre { + @include p; +} + +.entry { + img { + max-width: 100%; + height: auto; + } + p { + min-height: 1px; + } + a { + text-decoration: underline; + } + & > * { + margin-bottom: 1em; + margin-top: 1em; + } + & > *:first-child { + margin-top: 0; + } + & > *:last-child { + margin-bottom: 0; + } + + ul, + ol { + li { + margin-bottom: 1em; + width: desktop-vw(577px); + } + } + ul { + list-style: disc; + padding-left: 1em; + } +} + +#app { + min-height: 100vh; +} + +@keyframes blink { + 5% { + opacity: 0; + } + 40% { + opacity: 0; + } + 60% { + opacity: 1; + } + 95% { + opacity: 1; + } +} + +@keyframes bonk { + 0% { + transform: rotate(calc(var(--bonk-angle) * -1)); + } + 50% { + transform: rotate(var(--bonk-angle)); + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..cc0196e --- /dev/null +++ b/vite.config.js @@ -0,0 +1,55 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import Components from 'unplugin-vue-components/vite' +import { toSass } from './src/libs/sass-utils' +import theme from './src/libs/theme' + +export default defineConfig({ + plugins: [ + vue(), + Components({ + dirs: ['src/components'], + extensions: ['vue'], + deep: true, + dts: 'src/components.d.ts', + directoryAsNamespace: true, + }), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + server: { + port: 3000, + }, + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler', + additionalData: + '@use "/src/styles/_functions.scss" as *; @use "/src/styles/_font-style.scss" as *;', + functions: { + 'get($keys)': function (keys) { + keys = keys.toString().replace(/['"]+/g, '').split('.') + + let result = theme + for (let i = 0; i < keys.length; i++) { + result = result[keys[i]] + } + + return toSass(result) + }, + 'getColors()': function () { + return toSass(theme.colors) + }, + 'getThemes()': function () { + return toSass(theme.themes) + }, + }, + }, + }, + }, +})