From 1c57936f18c2c67b1878a0d4b8eece6177470d44 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 3 May 2025 20:17:33 -0400 Subject: [PATCH 1/2] v2: add playground --- playground/.gitignore | 27 + playground/.netlify/state.json | 3 + playground/README.md | 23 + playground/eslint.config.js | 28 + playground/index.html | 13 + playground/package.json | 38 + playground/pnpm-lock.yaml | 2942 +++++++++++++++++++++++++++++++ playground/prettier.config.js | 10 + playground/public/owl.png | Bin 0 -> 29782 bytes playground/src/App.tsx | 483 +++++ playground/src/index.css | 1 + playground/src/main.tsx | 29 + playground/src/monacoWorker.tsx | 8 + playground/src/squawk.tsx | 67 + playground/src/vite-env.d.ts | 1 + playground/tsconfig.app.json | 26 + playground/tsconfig.json | 7 + playground/tsconfig.node.json | 24 + playground/vite.config.ts | 25 + 19 files changed, 3755 insertions(+) create mode 100644 playground/.gitignore create mode 100644 playground/.netlify/state.json create mode 100644 playground/README.md create mode 100644 playground/eslint.config.js create mode 100644 playground/index.html create mode 100644 playground/package.json create mode 100644 playground/pnpm-lock.yaml create mode 100644 playground/prettier.config.js create mode 100644 playground/public/owl.png create mode 100644 playground/src/App.tsx create mode 100644 playground/src/index.css create mode 100644 playground/src/main.tsx create mode 100644 playground/src/monacoWorker.tsx create mode 100644 playground/src/squawk.tsx create mode 100644 playground/src/vite-env.d.ts create mode 100644 playground/tsconfig.app.json create mode 100644 playground/tsconfig.json create mode 100644 playground/tsconfig.node.json create mode 100644 playground/vite.config.ts diff --git a/playground/.gitignore b/playground/.gitignore new file mode 100644 index 00000000..ebcc2a17 --- /dev/null +++ b/playground/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Sentry Config File +.env.sentry-build-plugin diff --git a/playground/.netlify/state.json b/playground/.netlify/state.json new file mode 100644 index 00000000..aabf4214 --- /dev/null +++ b/playground/.netlify/state.json @@ -0,0 +1,3 @@ +{ + "siteId": "34768e35-903f-4f55-807d-916f993f368e" +} diff --git a/playground/README.md b/playground/README.md new file mode 100644 index 00000000..7e65b823 --- /dev/null +++ b/playground/README.md @@ -0,0 +1,23 @@ +# playground + +## dev + +```shell +pnpm dev +``` + +```shell +cargo install wasm-pack +``` + +## deploy + +```shell +npm run build + +# deploy to preview +netlify deploy + +# check it looks good, then deploy to prod +netlify deploy --prod +``` diff --git a/playground/eslint.config.js b/playground/eslint.config.js new file mode 100644 index 00000000..c43c04a9 --- /dev/null +++ b/playground/eslint.config.js @@ -0,0 +1,28 @@ +import js from "@eslint/js" +import globals from "globals" +import reactHooks from "eslint-plugin-react-hooks" +import reactRefresh from "eslint-plugin-react-refresh" +import tseslint from "typescript-eslint" + +export default tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/playground/index.html b/playground/index.html new file mode 100644 index 00000000..a63bf541 --- /dev/null +++ b/playground/index.html @@ -0,0 +1,13 @@ + + + + + + + Squawk Playground + + +
+ + + diff --git a/playground/package.json b/playground/package.json new file mode 100644 index 00000000..f7ad8748 --- /dev/null +++ b/playground/package.json @@ -0,0 +1,38 @@ +{ + "name": "vite-project", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "wasm-pack build --target web ../crates/wasm --out-dir ../../playground/src/pkg && vite build", + "deploy": "netlify deploy --prod", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@sentry/react": "^9.15.0", + "@sentry/vite-plugin": "^3.3.1", + "@tailwindcss/vite": "^4.0.6", + "lz-string": "^1.5.0", + "monaco-editor": "^0.52.2", + "prettier": "^3.5.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwindcss": "^4.0.6" + }, + "devDependencies": { + "@eslint/js": "^9.19.0", + "@types/react": "^19.0.8", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react": "^4.3.4", + "babel-plugin-react-compiler": "19.1.0-rc.1", + "eslint": "^9.19.0", + "eslint-plugin-react-hooks": "6.0.0-rc1", + "eslint-plugin-react-refresh": "^0.4.18", + "globals": "^15.14.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.22.0", + "vite": "^6.1.0" + } +} diff --git a/playground/pnpm-lock.yaml b/playground/pnpm-lock.yaml new file mode 100644 index 00000000..c63d3ab4 --- /dev/null +++ b/playground/pnpm-lock.yaml @@ -0,0 +1,2942 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@sentry/react': + specifier: ^9.15.0 + version: 9.15.0(react@19.0.0) + '@sentry/vite-plugin': + specifier: ^3.3.1 + version: 3.3.1 + '@tailwindcss/vite': + specifier: ^4.0.6 + version: 4.0.6(vite@6.1.0(jiti@2.4.2)(lightningcss@1.29.1)) + lz-string: + specifier: ^1.5.0 + version: 1.5.0 + monaco-editor: + specifier: ^0.52.2 + version: 0.52.2 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + tailwindcss: + specifier: ^4.0.6 + version: 4.0.6 + devDependencies: + '@eslint/js': + specifier: ^9.19.0 + version: 9.20.0 + '@types/react': + specifier: ^19.0.8 + version: 19.0.8 + '@types/react-dom': + specifier: ^19.0.3 + version: 19.0.3(@types/react@19.0.8) + '@vitejs/plugin-react': + specifier: ^4.3.4 + version: 4.3.4(vite@6.1.0(jiti@2.4.2)(lightningcss@1.29.1)) + babel-plugin-react-compiler: + specifier: 19.1.0-rc.1 + version: 19.1.0-rc.1 + eslint: + specifier: ^9.19.0 + version: 9.20.1(jiti@2.4.2) + eslint-plugin-react-hooks: + specifier: 6.0.0-rc1 + version: 6.0.0-rc1(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-react-refresh: + specifier: ^0.4.18 + version: 0.4.19(eslint@9.20.1(jiti@2.4.2)) + globals: + specifier: ^15.14.0 + version: 15.15.0 + typescript: + specifier: ~5.7.2 + version: 5.7.3 + typescript-eslint: + specifier: ^8.22.0 + version: 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + vite: + specifier: ^6.1.0 + version: 6.1.0(jiti@2.4.2)(lightningcss@1.29.1) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.9': + resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.1': + resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.27.1': + resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.1': + resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.11.0': + resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.20.0': + resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/rollup-android-arm-eabi@4.34.7': + resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.7': + resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.7': + resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.7': + resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.7': + resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.7': + resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.7': + resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.7': + resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.7': + resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.7': + resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.7': + resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.7': + resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.7': + resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.7': + resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.7': + resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.7': + resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==} + cpu: [x64] + os: [win32] + + '@sentry-internal/browser-utils@9.15.0': + resolution: {integrity: sha512-tIM+9zXCefkInRiNmBkXKgkamRjEOlAcf768cBKlMWVOatfNrSEB0UEV7qkAYqnQGWkbPkHFMbFJxWptydLODw==} + engines: {node: '>=18'} + + '@sentry-internal/feedback@9.15.0': + resolution: {integrity: sha512-jyN0r57WL8V5ViwZpiNvbIhF9I89jxn6mtIQcyV85EjIXDyzJmeTgxc/FIU0kcDVv6zso3qnGRJUxGK+GvoYZg==} + engines: {node: '>=18'} + + '@sentry-internal/replay-canvas@9.15.0': + resolution: {integrity: sha512-a1/oiXwcW5OmILjD7/R2UEsPQWXJBUr0u388uCKDUGeyXLxBBbIJGS5E8oLwVQLVxhVJrODgxvT19z9OVcbn7g==} + engines: {node: '>=18'} + + '@sentry-internal/replay@9.15.0': + resolution: {integrity: sha512-lv6ENRmfeBuod6Tr1WgLeF0+wIIXlHWNAGofsaNUvm8UKS7USicFsQWKOZPk4UyjTfrEClPp2vx+o7aUcZS6TQ==} + engines: {node: '>=18'} + + '@sentry/babel-plugin-component-annotate@3.3.1': + resolution: {integrity: sha512-5GOxGT7lZN+I8A7Vp0rWY+726FDKEw8HnFiebe51rQrMbfGfCu2Aw9uSM0nT9OG6xhV6WvGccIcCszTPs4fUZQ==} + engines: {node: '>= 14'} + + '@sentry/browser@9.15.0': + resolution: {integrity: sha512-ppHESKFVQFpAb3rQI2ateDkmMytVcvAWsjZrZ3hF9iEnO3iTIIu32ib5nqQUL4KKXZQovYnDrSlDcdv3ZwX/8Q==} + engines: {node: '>=18'} + + '@sentry/bundler-plugin-core@3.3.1': + resolution: {integrity: sha512-Dd6xaWb293j9otEJ1yJqG2Ra6zB49OPzMNdIkdP8wdY+S9UFQE5PyKTyredmPY7hqCc005OrUQZolIIo9Zl13A==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.42.2': + resolution: {integrity: sha512-GtJSuxER7Vrp1IpxdUyRZzcckzMnb4N5KTW7sbTwUiwqARRo+wxS+gczYrS8tdgtmXs5XYhzhs+t4d52ITHMIg==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.42.2': + resolution: {integrity: sha512-BOxzI7sgEU5Dhq3o4SblFXdE9zScpz6EXc5Zwr1UDZvzgXZGosUtKVc7d1LmkrHP8Q2o18HcDWtF3WvJRb5Zpw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + + '@sentry/cli-linux-arm@2.42.2': + resolution: {integrity: sha512-7udCw+YL9lwq+9eL3WLspvnuG+k5Icg92YE7zsteTzWLwgPVzaxeZD2f8hwhsu+wmL+jNqbpCRmktPteh3i2mg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + + '@sentry/cli-linux-i686@2.42.2': + resolution: {integrity: sha512-Sw/dQp5ZPvKnq3/y7wIJyxTUJYPGoTX/YeMbDs8BzDlu9to2LWV3K3r7hE7W1Lpbaw4tSquUHiQjP5QHCOS7aQ==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + + '@sentry/cli-linux-x64@2.42.2': + resolution: {integrity: sha512-mU4zUspAal6TIwlNLBV5oq6yYqiENnCWSxtSQVzWs0Jyq97wtqGNG9U+QrnwjJZ+ta/hvye9fvL2X25D/RxHQw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + + '@sentry/cli-win32-i686@2.42.2': + resolution: {integrity: sha512-iHvFHPGqgJMNqXJoQpqttfsv2GI3cGodeTq4aoVLU/BT3+hXzbV0x1VpvvEhncJkDgDicJpFLM8sEPHb3b8abw==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.42.2': + resolution: {integrity: sha512-vPPGHjYoaGmfrU7xhfFxG7qlTBacroz5NdT+0FmDn6692D8IvpNXl1K+eV3Kag44ipJBBeR8g1HRJyx/F/9ACw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.42.2': + resolution: {integrity: sha512-spb7S/RUumCGyiSTg8DlrCX4bivCNmU/A1hcfkwuciTFGu8l5CDc2I6jJWWZw8/0enDGxuj5XujgXvU5tr4bxg==} + engines: {node: '>= 10'} + hasBin: true + + '@sentry/core@9.15.0': + resolution: {integrity: sha512-lBmo3bzzaYUesdzc2H5K3fajfXyUNuj5koqyFoCAI8rnt9CBl7SUc/P07+E5eipF8mxgiU3QtkI7ALzRQN8pqQ==} + engines: {node: '>=18'} + + '@sentry/react@9.15.0': + resolution: {integrity: sha512-8nojSjiEd/EWIgoWVfkNIkBGL2yoFZoVMBUTcYlypsMnUHNko2RJItOBqZs5/DRBxuzfBKVt8PF+gkhQOm6mPg==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + + '@sentry/vite-plugin@3.3.1': + resolution: {integrity: sha512-eIIIHqVOTO0m7+3aTg//gVi11XNpKi4G0xA45hjz46UmRiToVfqgBH7Dsn1qRrDxa7YPYCdREQkyGEINlElT2A==} + engines: {node: '>= 14'} + + '@tailwindcss/node@4.0.6': + resolution: {integrity: sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q==} + + '@tailwindcss/oxide-android-arm64@4.0.6': + resolution: {integrity: sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.0.6': + resolution: {integrity: sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.0.6': + resolution: {integrity: sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.0.6': + resolution: {integrity: sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': + resolution: {integrity: sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': + resolution: {integrity: sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.0.6': + resolution: {integrity: sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.0.6': + resolution: {integrity: sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.0.6': + resolution: {integrity: sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': + resolution: {integrity: sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.0.6': + resolution: {integrity: sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.0.6': + resolution: {integrity: sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA==} + engines: {node: '>= 10'} + + '@tailwindcss/vite@4.0.6': + resolution: {integrity: sha512-O25vZ/URWbZ2JHdk2o8wH7jOKqEGCsYmX3GwGmYS5DjE4X3mpf93a72Rn7VRnefldNauBzr5z2hfZptmBNtTUQ==} + peerDependencies: + vite: ^5.2.0 || ^6 + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/react-dom@19.0.3': + resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.0.8': + resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} + + '@typescript-eslint/eslint-plugin@8.24.0': + resolution: {integrity: sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.24.0': + resolution: {integrity: sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.24.0': + resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.24.0': + resolution: {integrity: sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.24.0': + resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.24.0': + resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.24.0': + resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.24.0': + resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + babel-plugin-react-compiler@19.1.0-rc.1: + resolution: {integrity: sha512-M4fpG+Hfq5gWzsJeeMErdRokzg0fdJ8IAk+JDhfB/WLT+U3WwJWR8edphypJrk447/JEvYu6DBFwsTn10bMW4Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001699: + resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + engines: {node: '>=12'} + + electron-to-chromium@1.5.101: + resolution: {integrity: sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@6.0.0-rc1: + resolution: {integrity: sha512-I4ntWyjqgGemGtOU85FUdVo00h0i0Y5xvQ7a8EVxyzjOZsxXaxvkKBcYoXbP97QDvDjMzY/nGIvfdB/WRLTGxQ==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.19: + resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.20.1: + resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-darwin-arm64@1.29.1: + resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.1: + resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.1: + resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.1: + resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.1: + resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.1: + resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.1: + resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.1: + resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.1: + resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.1: + resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.1: + resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.34.7: + resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tailwindcss@4.0.6: + resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.24.0: + resolution: {integrity: sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-validation-error@3.4.0: + resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + + zod@3.24.3: + resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.9': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/generator@7.27.1': + dependencies: + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.1': + dependencies: + '@babel/types': 7.27.1 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.27.1 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/parser@7.27.1': + dependencies: + '@babel/types': 7.27.1 + + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.26.9) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)': + dependencies: + '@babel/core': 7.26.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@babel/template@7.27.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 + + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.27.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.1 + '@babel/template': 7.27.1 + '@babel/types': 7.27.1 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@babel/types@7.27.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@2.4.2))': + dependencies: + eslint: 9.20.1(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.11.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.20.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + + '@rollup/rollup-android-arm-eabi@4.34.7': + optional: true + + '@rollup/rollup-android-arm64@4.34.7': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.7': + optional: true + + '@rollup/rollup-darwin-x64@4.34.7': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.7': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.7': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.7': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.7': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.7': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.7': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.7': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.7': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.7': + optional: true + + '@sentry-internal/browser-utils@9.15.0': + dependencies: + '@sentry/core': 9.15.0 + + '@sentry-internal/feedback@9.15.0': + dependencies: + '@sentry/core': 9.15.0 + + '@sentry-internal/replay-canvas@9.15.0': + dependencies: + '@sentry-internal/replay': 9.15.0 + '@sentry/core': 9.15.0 + + '@sentry-internal/replay@9.15.0': + dependencies: + '@sentry-internal/browser-utils': 9.15.0 + '@sentry/core': 9.15.0 + + '@sentry/babel-plugin-component-annotate@3.3.1': {} + + '@sentry/browser@9.15.0': + dependencies: + '@sentry-internal/browser-utils': 9.15.0 + '@sentry-internal/feedback': 9.15.0 + '@sentry-internal/replay': 9.15.0 + '@sentry-internal/replay-canvas': 9.15.0 + '@sentry/core': 9.15.0 + + '@sentry/bundler-plugin-core@3.3.1': + dependencies: + '@babel/core': 7.26.9 + '@sentry/babel-plugin-component-annotate': 3.3.1 + '@sentry/cli': 2.42.2 + dotenv: 16.5.0 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.42.2': + optional: true + + '@sentry/cli-linux-arm64@2.42.2': + optional: true + + '@sentry/cli-linux-arm@2.42.2': + optional: true + + '@sentry/cli-linux-i686@2.42.2': + optional: true + + '@sentry/cli-linux-x64@2.42.2': + optional: true + + '@sentry/cli-win32-i686@2.42.2': + optional: true + + '@sentry/cli-win32-x64@2.42.2': + optional: true + + '@sentry/cli@2.42.2': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.42.2 + '@sentry/cli-linux-arm': 2.42.2 + '@sentry/cli-linux-arm64': 2.42.2 + '@sentry/cli-linux-i686': 2.42.2 + '@sentry/cli-linux-x64': 2.42.2 + '@sentry/cli-win32-i686': 2.42.2 + '@sentry/cli-win32-x64': 2.42.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/core@9.15.0': {} + + '@sentry/react@9.15.0(react@19.0.0)': + dependencies: + '@sentry/browser': 9.15.0 + '@sentry/core': 9.15.0 + hoist-non-react-statics: 3.3.2 + react: 19.0.0 + + '@sentry/vite-plugin@3.3.1': + dependencies: + '@sentry/bundler-plugin-core': 3.3.1 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@tailwindcss/node@4.0.6': + dependencies: + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + tailwindcss: 4.0.6 + + '@tailwindcss/oxide-android-arm64@4.0.6': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.0.6': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.0.6': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.0.6': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.0.6': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.0.6': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.0.6': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.0.6': + optional: true + + '@tailwindcss/oxide@4.0.6': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.0.6 + '@tailwindcss/oxide-darwin-arm64': 4.0.6 + '@tailwindcss/oxide-darwin-x64': 4.0.6 + '@tailwindcss/oxide-freebsd-x64': 4.0.6 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.6 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.6 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.6 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.6 + '@tailwindcss/oxide-linux-x64-musl': 4.0.6 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.6 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.6 + + '@tailwindcss/vite@4.0.6(vite@6.1.0(jiti@2.4.2)(lightningcss@1.29.1))': + dependencies: + '@tailwindcss/node': 4.0.6 + '@tailwindcss/oxide': 4.0.6 + lightningcss: 1.29.1 + tailwindcss: 4.0.6 + vite: 6.1.0(jiti@2.4.2)(lightningcss@1.29.1) + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.26.9 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.9 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/react-dom@19.0.3(@types/react@19.0.8)': + dependencies: + '@types/react': 19.0.8 + + '@types/react@19.0.8': + dependencies: + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 + eslint: 9.20.1(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.0 + debug: 4.4.0 + eslint: 9.20.1(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.24.0': + dependencies: + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 + + '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.20.1(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.24.0': {} + + '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/visitor-keys': 8.24.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.24.0 + '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.24.0': + dependencies: + '@typescript-eslint/types': 8.24.0 + eslint-visitor-keys: 4.2.0 + + '@vitejs/plugin-react@4.3.4(vite@6.1.0(jiti@2.4.2)(lightningcss@1.29.1))': + dependencies: + '@babel/core': 7.26.9 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.1.0(jiti@2.4.2)(lightningcss@1.29.1) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + babel-plugin-react-compiler@19.1.0-rc.1: + dependencies: + '@babel/types': 7.26.9 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001699 + electron-to-chromium: 1.5.101 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001699: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + detect-libc@1.0.3: {} + + dotenv@16.5.0: {} + + electron-to-chromium@1.5.101: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@6.0.0-rc1(eslint@9.20.1(jiti@2.4.2)): + dependencies: + '@babel/core': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.9) + eslint: 9.20.1(jiti@2.4.2) + hermes-parser: 0.25.1 + zod: 3.24.3 + zod-validation-error: 3.4.0(zod@3.24.3) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-refresh@0.4.19(eslint@9.20.1(jiti@2.4.2)): + dependencies: + eslint: 9.20.1(jiti@2.4.2) + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.20.1(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.11.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.20.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.15.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + jiti@2.4.2: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-darwin-arm64@1.29.1: + optional: true + + lightningcss-darwin-x64@1.29.1: + optional: true + + lightningcss-freebsd-x64@1.29.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.1: + optional: true + + lightningcss-linux-arm64-gnu@1.29.1: + optional: true + + lightningcss-linux-arm64-musl@1.29.1: + optional: true + + lightningcss-linux-x64-gnu@1.29.1: + optional: true + + lightningcss-linux-x64-musl@1.29.1: + optional: true + + lightningcss-win32-arm64-msvc@1.29.1: + optional: true + + lightningcss-win32-x64-msvc@1.29.1: + optional: true + + lightningcss@1.29.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.1 + lightningcss-darwin-x64: 1.29.1 + lightningcss-freebsd-x64: 1.29.1 + lightningcss-linux-arm-gnueabihf: 1.29.1 + lightningcss-linux-arm64-gnu: 1.29.1 + lightningcss-linux-arm64-musl: 1.29.1 + lightningcss-linux-x64-gnu: 1.29.1 + lightningcss-linux-x64-musl: 1.29.1 + lightningcss-win32-arm64-msvc: 1.29.1 + lightningcss-win32-x64-msvc: 1.29.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lz-string@1.5.0: {} + + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@4.2.8: {} + + minipass@7.1.2: {} + + monaco-editor@0.52.2: {} + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + natural-compare@1.4.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss@8.5.2: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.5.3: {} + + progress@2.0.3: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-is@16.13.1: {} + + react-refresh@0.14.2: {} + + react@19.0.0: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + rollup@4.34.7: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.7 + '@rollup/rollup-android-arm64': 4.34.7 + '@rollup/rollup-darwin-arm64': 4.34.7 + '@rollup/rollup-darwin-x64': 4.34.7 + '@rollup/rollup-freebsd-arm64': 4.34.7 + '@rollup/rollup-freebsd-x64': 4.34.7 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.7 + '@rollup/rollup-linux-arm-musleabihf': 4.34.7 + '@rollup/rollup-linux-arm64-gnu': 4.34.7 + '@rollup/rollup-linux-arm64-musl': 4.34.7 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.7 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7 + '@rollup/rollup-linux-riscv64-gnu': 4.34.7 + '@rollup/rollup-linux-s390x-gnu': 4.34.7 + '@rollup/rollup-linux-x64-gnu': 4.34.7 + '@rollup/rollup-linux-x64-musl': 4.34.7 + '@rollup/rollup-win32-arm64-msvc': 4.34.7 + '@rollup/rollup-win32-ia32-msvc': 4.34.7 + '@rollup/rollup-win32-x64-msvc': 4.34.7 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.25.0: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tailwindcss@4.0.6: {} + + tapable@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-api-utils@2.0.1(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + typescript@5.7.3: {} + + unplugin@1.0.1: + dependencies: + acorn: 8.14.0 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + + update-browserslist-db@1.1.2(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@6.1.0(jiti@2.4.2)(lightningcss@1.29.1): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.2 + rollup: 4.34.7 + optionalDependencies: + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.29.1 + + webidl-conversions@3.0.1: {} + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.5.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@3.4.0(zod@3.24.3): + dependencies: + zod: 3.24.3 + + zod@3.24.3: {} diff --git a/playground/prettier.config.js b/playground/prettier.config.js new file mode 100644 index 00000000..55a5d642 --- /dev/null +++ b/playground/prettier.config.js @@ -0,0 +1,10 @@ +// https://prettier.io/docs/en/options.html +/** @type {import("prettier").Config} */ +export default { + semi: false, + useTabs: false, + tabWidth: 2, + singleQuote: false, + trailingComma: "all", + bracketSpacing: true, +} diff --git a/playground/public/owl.png b/playground/public/owl.png new file mode 100644 index 0000000000000000000000000000000000000000..271e5d9598a3e55f46421845836759e2286abf82 GIT binary patch literal 29782 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 + for (const arg of args) { + if (!arg) { + continue + } else if (typeof arg === "string" || typeof arg === "number") { + classes.add(String(arg)) + } else { + assertNever(arg) + } + } + return [...classes].join(" ") +} + +function initialMode(): Mode | null { + const mode = localStorage.getItem("play-mode-v1") + if (modes.includes(mode as Mode)) { + return mode as Mode + } + if (mode == "none") { + return null + } + return "Lint" +} + +function useMode() { + const [mode, setActiveMode] = useState(() => initialMode()) + + useEffect(() => { + try { + localStorage.setItem("play-mode-v1", mode ?? "none") + } catch { + // pass + } + }, [mode]) + + return [mode, setActiveMode] as const +} + +function initialValue(): string | null { + // for example: + // http://localhost:5173/#code/M4UwNiDGAuAECMBuIA + const uriData = window.location.hash.split("code/")[1] as string | undefined + if (uriData) { + return decompressFromEncodedURIComponent(uriData) + } + const history = localStorage.getItem(STORAGE_KEY) + if (history != null) { + return decompress(history) + } + return null +} + +export function App() { + const [mode, setActiveMode] = useMode() + const [text, setState] = useState(() => initialValue() ?? SETTINGS.value) + + const markers = useMarkers(text) + + return ( +
+ +
+
+ { + setState(text) + }} + autoFocus + markers={markers} + settings={{ ...SETTINGS, value: text }} + onSave={handleSave} + /> + {mode === "Syntax Tree" ? ( + + ) : mode === "Tokens" ? ( + + ) : mode === "Lint" ? ( + + ) : mode == null ? null : ( + assertNever(mode) + )} +
+ +
+
+ ) +} + +function TokenPanel({ text }: { text: string }) { + const value = useDumpTokens(text) + return ( + + ) +} + +function Controls({ + activeMode, + onModeChange, +}: { + activeMode: Mode | null + onModeChange: (mode: Mode | null) => void +}) { + return ( +
+
+ {modes.map((mode) => ( + + ))} +
+
+ ) +} + +function assertNever(x: never): never { + throw new Error(`expected never, got ${x}`) +} + +function Editor({ + onChange, + autoFocus, + settings, + value, + markers, + onSave, +}: { + value?: string + autoFocus?: boolean + onChange?: (_: string) => void + onSave?: (_: string) => void + settings: monaco.editor.IStandaloneEditorConstructionOptions + markers?: monaco.editor.IMarkerData[] +}) { + const onChangeRef = useRef<((_: string) => void) | undefined>(null) + const onSaveRef = useRef<((_: string) => void) | undefined>(null) + const divRef = useRef(null) + const autoFocusRef = useRef(autoFocus) + const settingsInitial = useRef(settings) + const editorRef = useRef(null) + // TODO: replace with useEventEffect + useEffect(() => { + onChangeRef.current = onChange + }, [onChange]) + useEffect(() => { + onSaveRef.current = onSave + }, [onSave]) + + useEffect(() => { + if (markers == null) { + return + } + const model = editorRef.current?.getModel() + if (model != null) { + monaco.editor.setModelMarkers(model, "tea", markers) + } + }, [markers]) + + useLayoutEffect(() => { + const editor = monaco.editor.create( + divRef.current!, + settingsInitial.current, + ) + editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => + onSaveRef.current?.(editor.getValue()), + ) + editor.onDidBlurEditorText(() => { + onSaveRef.current?.(editor.getValue()) + }) + monaco.languages.register({ id: "rast" }) + monaco.languages.setMonarchTokensProvider("rast", { + tokenizer: { + // via: https://github.com/rust-lang/rust-analyzer/blob/9691da7707ea7c50922fe1647b1c2af47934b9fa/editors/code/ra_syntax_tree.tmGrammar.json#L16C17-L16C17 + root: [ + // Node type (entity.name.class) + [/^[\s]*([A-Z_][A-Z_0-9]*?)@/, "entity.identifier.type"], + + // Node range index (constant.numeric) + [/\d+/, "number"], + + // Token text (string) + [/"[^"]*"/, "string"], + ], + }, + }) + editor.onDidChangeModelContent(() => { + onChangeRef.current?.(editor.getValue()) + }) + if (autoFocusRef.current) { + editor.focus() + } + editorRef.current = editor + return () => { + editorRef.current = null + editor?.dispose() + } + }, []) + useEffect(() => { + if (value != null) { + editorRef.current?.setValue(value) + } + }, [value]) + + return ( +
+ ) +} + +// I thought if we defined the numeric values for the variants the bindgen would use them, but it doesn't +// https://github.com/rustwasm/wasm-bindgen/issues/2407 +function convertSeverity(x: LintError["severity"]): monaco.MarkerSeverity { + switch (x) { + case "Error": + return monaco.MarkerSeverity.Error + case "Warning": + return monaco.MarkerSeverity.Warning + case "Info": + return monaco.MarkerSeverity.Info + case "Hint": + return monaco.MarkerSeverity.Hint + } +} + +type Marker = monaco.editor.IMarkerData & { + id: string + range_start: number + range_end: number + messages: string[] +} + +function SyntaxTreePanel({ text }: { text: string }) { + const value = useDumpCst(text) + return ( + + ) +} + +function useMarkers(text: string): Array { + const errors = useErrors(text) + return errors.map((x): Marker => { + const startLineNumber = x.start_line_number + 1 + const startColumn = x.start_column + 1 + const endLineNumber = x.end_line_number + 1 + let endColumn = x.end_column + 1 + // parser will return zero length errors for things like trailing semicolon, + // we probably want to fix this, but for now we compensate by setting the + // min length of the marker to 1 + if (endColumn === startColumn) { + endColumn += 1 + } + return { + severity: convertSeverity(x.severity), + id: `${x.start_line_number}${x.start_column}${x.end_line_number}${x.end_column}${x.severity}${x.code}`, + startLineNumber, + startColumn, + endLineNumber, + endColumn, + range_start: x.range_start, + range_end: x.range_end, + messages: x.messages, + code: { + value: x.code, + target: monaco.Uri.parse( + `https://squawkhq.com/docs/${encodeURIComponent(x.code)}/`, + ), + }, + // doesn't support markdown -- vscode does tho :/ + // https://github.com/microsoft/monaco-editor/issues/1264 + // https://stackoverflow.com/questions/62362741/using-markdown-in-imarkerdata + message: x.message, + source: "tea", + } + }) +} + +function ErrorList({ errors }: { errors: Marker[] }) { + if (errors.length === 0) { + return
no errors!
+ } + return ( + <> + {errors.map((x) => { + const color = + x.severity === monaco.MarkerSeverity.Warning + ? "border-l-amber-300" + : x.severity === monaco.MarkerSeverity.Error + ? "border-l-red-400" + : "" + const code = typeof x.code === "string" ? x.code : x.code?.value + return ( +
+
+ {code == null ? ( +
{code}
+ ) : ( + + {code} + + )} + :{x.startLineNumber}:{x.startColumn}: {x.message} +
+ {x.messages.length > 0 && ( +
+ {x.messages.map((note) => { + return ( +
+ help:{" "} + {note} +
+ ) + })} +
+ )} +
+ ) + })} + + ) +} + +function ErrorPanel({ errors }: { errors: Marker[] }) { + return ( +
+ +
+ ) +} + +function Nav({ children }: { children: React.ReactNode }) { + return ( + + ) +} + +function handleSave(text: string) { + const encoded = compressToEncodedURIComponent(text) + window.location.hash = `code/${encoded}` + navigator.clipboard + .writeText(window.location.href) + .then(() => { + console.log("foo") + }) + .catch((err) => { + console.log(err) + }) + + try { + localStorage.setItem(STORAGE_KEY, compress(text)) + } catch { + // pass + } +} + +function ShareButton({ text }: { text: string }) { + return ( + + ) +} diff --git a/playground/src/index.css b/playground/src/index.css new file mode 100644 index 00000000..f1d8c73c --- /dev/null +++ b/playground/src/index.css @@ -0,0 +1 @@ +@import "tailwindcss"; diff --git a/playground/src/main.tsx b/playground/src/main.tsx new file mode 100644 index 00000000..2a4ee7d4 --- /dev/null +++ b/playground/src/main.tsx @@ -0,0 +1,29 @@ +import { StrictMode } from "react" +import { createRoot } from "react-dom/client" +import * as Sentry from "@sentry/react" +import { App } from "./App" +import "./index.css" +import "./monacoWorker" +import { init } from "./squawk" + +Sentry.init({ + dsn: "https://a974dd404d6ff366b1d62087dd5afaa5@o64108.ingest.us.sentry.io/4509245420994560", +}) + +// we want to kick of the wasm load as early as possible, but we still have to +// check that it's loaded later on when we try to call a wasm powered function +init() + +createRoot(document.getElementById("root")!).render( + + + Error encounted. Please try refreshing the page. +
+ } + > + + + , +) diff --git a/playground/src/monacoWorker.tsx b/playground/src/monacoWorker.tsx new file mode 100644 index 00000000..2533043d --- /dev/null +++ b/playground/src/monacoWorker.tsx @@ -0,0 +1,8 @@ +import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker" + +self.MonacoEnvironment = { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getWorker(_: unknown, _label: string) { + return new editorWorker() + }, +} diff --git a/playground/src/squawk.tsx b/playground/src/squawk.tsx new file mode 100644 index 00000000..b3e89437 --- /dev/null +++ b/playground/src/squawk.tsx @@ -0,0 +1,67 @@ +import { useEffect, useState } from "react" +import initWasm, { dump_cst, dump_tokens, lint as lint_ } from "./pkg/wasm" + +export type LintError = { + code: string + message: string + severity: "Hint" | "Info" | "Warning" | "Error" + start_line_number: number + start_column: number + end_line_number: number + end_column: number + range_start: number + range_end: number + messages: string[] +} + +function lintWithTypes(text: string): Array { + return lint_(text) +} + +export function useErrors(text: string) { + const isReady = useWasmStatus() + return isReady ? lintWithTypes(text) : [] +} + +export function useDumpCst(text: string): string { + const isReady = useWasmStatus() + return isReady ? dump_cst(text) : "" +} + +export function useDumpTokens(text: string): string { + const isReady = useWasmStatus() + return isReady ? dump_tokens(text) : "" +} + +let isStartingAlready: { promise: Promise; start: number } | null = + null + +export function init() { + isStartingAlready = { promise: initWasm(), start: performance.now() } +} + +function useWasmStatus() { + const [isReady, setIsReady] = useState(false) + useEffect(() => { + if (isStartingAlready != null) { + isStartingAlready.promise.then(() => { + setIsReady(true) + }) + return + } + const start = performance.now() + const promise = initWasm() + .then(() => { + setIsReady(true) + const end = performance.now() + console.log(`wasm setup done in ${end - start} ms`) + }) + .catch(() => { + console.error("problem initializing wasm") + setIsReady(true) + }) + .finally(() => {}) + isStartingAlready = { promise, start: start } + }, []) + return isReady +} diff --git a/playground/src/vite-env.d.ts b/playground/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/playground/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/playground/tsconfig.app.json b/playground/tsconfig.app.json new file mode 100644 index 00000000..358ca9ba --- /dev/null +++ b/playground/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/playground/tsconfig.node.json b/playground/tsconfig.node.json new file mode 100644 index 00000000..db0becc8 --- /dev/null +++ b/playground/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/playground/vite.config.ts b/playground/vite.config.ts new file mode 100644 index 00000000..32c28081 --- /dev/null +++ b/playground/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from "vite" +import { sentryVitePlugin } from "@sentry/vite-plugin" +import react from "@vitejs/plugin-react" +import tailwindcss from "@tailwindcss/vite" + +const ReactCompilerConfig = {} + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + react({ + babel: { + plugins: [["babel-plugin-react-compiler", ReactCompilerConfig]], + }, + }), + tailwindcss(), + sentryVitePlugin({ + org: "magnus-montis", + project: "squawk-playground-ui", + }), + ], + build: { + sourcemap: true, + }, +}) From 757b939f0a7f5744b796ce38e6473641f2ea42df Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 3 May 2025 20:31:19 -0400 Subject: [PATCH 2/2] ignore playground from ci for now --- .prettierignore | 1 + tsconfig.json | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.prettierignore b/.prettierignore index ad4357c7..13e10a6d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ build/ node_modules/ +playground/ coverage/ .venv/ .mypy_cache/ diff --git a/tsconfig.json b/tsconfig.json index aa627cd0..e379b39f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,6 @@ "jsx": "react", "noEmit": true }, - "include": ["**/*.js"], - "exclude": ["build", "node_modules", "docs", "plopfile.js"] + "include": ["js/**/*.js"], + "exclude": ["build", "node_modules", "docs", "plopfile.js", "playground"] }