chore: updated cli and added example
c149aed8
21 file(s) · +1573 −1
| 1 | + | # Logs |
|
| 2 | + | logs |
|
| 3 | + | *.log |
|
| 4 | + | npm-debug.log* |
|
| 5 | + | yarn-debug.log* |
|
| 6 | + | yarn-error.log* |
|
| 7 | + | pnpm-debug.log* |
|
| 8 | + | lerna-debug.log* |
|
| 9 | + | ||
| 10 | + | node_modules |
|
| 11 | + | dist |
|
| 12 | + | dist-ssr |
|
| 13 | + | *.local |
|
| 14 | + | ||
| 15 | + | # Editor directories and files |
|
| 16 | + | .vscode/* |
|
| 17 | + | !.vscode/extensions.json |
|
| 18 | + | .idea |
|
| 19 | + | .DS_Store |
|
| 20 | + | *.suo |
|
| 21 | + | *.ntvs* |
|
| 22 | + | *.njsproj |
|
| 23 | + | *.sln |
|
| 24 | + | *.sw? |
| 1 | + | # React + TypeScript + Vite |
|
| 2 | + | ||
| 3 | + | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. |
|
| 4 | + | ||
| 5 | + | Currently, two official plugins are available: |
|
| 6 | + | ||
| 7 | + | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh |
|
| 8 | + | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh |
|
| 9 | + | ||
| 10 | + | ## React Compiler |
|
| 11 | + | ||
| 12 | + | The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). |
|
| 13 | + | ||
| 14 | + | ## Expanding the ESLint configuration |
|
| 15 | + | ||
| 16 | + | If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: |
|
| 17 | + | ||
| 18 | + | ```js |
|
| 19 | + | export default defineConfig([ |
|
| 20 | + | globalIgnores(['dist']), |
|
| 21 | + | { |
|
| 22 | + | files: ['**/*.{ts,tsx}'], |
|
| 23 | + | extends: [ |
|
| 24 | + | // Other configs... |
|
| 25 | + | ||
| 26 | + | // Remove tseslint.configs.recommended and replace with this |
|
| 27 | + | tseslint.configs.recommendedTypeChecked, |
|
| 28 | + | // Alternatively, use this for stricter rules |
|
| 29 | + | tseslint.configs.strictTypeChecked, |
|
| 30 | + | // Optionally, add this for stylistic rules |
|
| 31 | + | tseslint.configs.stylisticTypeChecked, |
|
| 32 | + | ||
| 33 | + | // Other configs... |
|
| 34 | + | ], |
|
| 35 | + | languageOptions: { |
|
| 36 | + | parserOptions: { |
|
| 37 | + | project: ['./tsconfig.node.json', './tsconfig.app.json'], |
|
| 38 | + | tsconfigRootDir: import.meta.dirname, |
|
| 39 | + | }, |
|
| 40 | + | // other options... |
|
| 41 | + | }, |
|
| 42 | + | }, |
|
| 43 | + | ]) |
|
| 44 | + | ``` |
|
| 45 | + | ||
| 46 | + | You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: |
|
| 47 | + | ||
| 48 | + | ```js |
|
| 49 | + | // eslint.config.js |
|
| 50 | + | import reactX from 'eslint-plugin-react-x' |
|
| 51 | + | import reactDom from 'eslint-plugin-react-dom' |
|
| 52 | + | ||
| 53 | + | export default defineConfig([ |
|
| 54 | + | globalIgnores(['dist']), |
|
| 55 | + | { |
|
| 56 | + | files: ['**/*.{ts,tsx}'], |
|
| 57 | + | extends: [ |
|
| 58 | + | // Other configs... |
|
| 59 | + | // Enable lint rules for React |
|
| 60 | + | reactX.configs['recommended-typescript'], |
|
| 61 | + | // Enable lint rules for React DOM |
|
| 62 | + | reactDom.configs.recommended, |
|
| 63 | + | ], |
|
| 64 | + | languageOptions: { |
|
| 65 | + | parserOptions: { |
|
| 66 | + | project: ['./tsconfig.node.json', './tsconfig.app.json'], |
|
| 67 | + | tsconfigRootDir: import.meta.dirname, |
|
| 68 | + | }, |
|
| 69 | + | // other options... |
|
| 70 | + | }, |
|
| 71 | + | }, |
|
| 72 | + | ]) |
|
| 73 | + | ``` |
| 1 | + | { |
|
| 2 | + | "lockfileVersion": 1, |
|
| 3 | + | "workspaces": { |
|
| 4 | + | "": { |
|
| 5 | + | "name": "vite-react", |
|
| 6 | + | "dependencies": { |
|
| 7 | + | "react": "^19.1.1", |
|
| 8 | + | "react-dom": "^19.1.1", |
|
| 9 | + | }, |
|
| 10 | + | "devDependencies": { |
|
| 11 | + | "@eslint/js": "^9.36.0", |
|
| 12 | + | "@types/react": "^19.1.13", |
|
| 13 | + | "@types/react-dom": "^19.1.9", |
|
| 14 | + | "@vitejs/plugin-react": "^5.0.3", |
|
| 15 | + | "eslint": "^9.36.0", |
|
| 16 | + | "eslint-plugin-react-hooks": "^5.2.0", |
|
| 17 | + | "eslint-plugin-react-refresh": "^0.4.20", |
|
| 18 | + | "globals": "^16.4.0", |
|
| 19 | + | "typescript": "~5.8.3", |
|
| 20 | + | "typescript-eslint": "^8.44.0", |
|
| 21 | + | "vite": "^7.1.7", |
|
| 22 | + | }, |
|
| 23 | + | }, |
|
| 24 | + | }, |
|
| 25 | + | "packages": { |
|
| 26 | + | "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], |
|
| 27 | + | ||
| 28 | + | "@babel/compat-data": ["@babel/compat-data@7.28.4", "", {}, "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw=="], |
|
| 29 | + | ||
| 30 | + | "@babel/core": ["@babel/core@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA=="], |
|
| 31 | + | ||
| 32 | + | "@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], |
|
| 33 | + | ||
| 34 | + | "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], |
|
| 35 | + | ||
| 36 | + | "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], |
|
| 37 | + | ||
| 38 | + | "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], |
|
| 39 | + | ||
| 40 | + | "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], |
|
| 41 | + | ||
| 42 | + | "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], |
|
| 43 | + | ||
| 44 | + | "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], |
|
| 45 | + | ||
| 46 | + | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], |
|
| 47 | + | ||
| 48 | + | "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], |
|
| 49 | + | ||
| 50 | + | "@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], |
|
| 51 | + | ||
| 52 | + | "@babel/parser": ["@babel/parser@7.28.4", "", { "dependencies": { "@babel/types": "^7.28.4" }, "bin": "./bin/babel-parser.js" }, "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg=="], |
|
| 53 | + | ||
| 54 | + | "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], |
|
| 55 | + | ||
| 56 | + | "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], |
|
| 57 | + | ||
| 58 | + | "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], |
|
| 59 | + | ||
| 60 | + | "@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="], |
|
| 61 | + | ||
| 62 | + | "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], |
|
| 63 | + | ||
| 64 | + | "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.10", "", { "os": "aix", "cpu": "ppc64" }, "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw=="], |
|
| 65 | + | ||
| 66 | + | "@esbuild/android-arm": ["@esbuild/android-arm@0.25.10", "", { "os": "android", "cpu": "arm" }, "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w=="], |
|
| 67 | + | ||
| 68 | + | "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.10", "", { "os": "android", "cpu": "arm64" }, "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg=="], |
|
| 69 | + | ||
| 70 | + | "@esbuild/android-x64": ["@esbuild/android-x64@0.25.10", "", { "os": "android", "cpu": "x64" }, "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg=="], |
|
| 71 | + | ||
| 72 | + | "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA=="], |
|
| 73 | + | ||
| 74 | + | "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg=="], |
|
| 75 | + | ||
| 76 | + | "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg=="], |
|
| 77 | + | ||
| 78 | + | "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA=="], |
|
| 79 | + | ||
| 80 | + | "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.10", "", { "os": "linux", "cpu": "arm" }, "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg=="], |
|
| 81 | + | ||
| 82 | + | "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ=="], |
|
| 83 | + | ||
| 84 | + | "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.10", "", { "os": "linux", "cpu": "ia32" }, "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ=="], |
|
| 85 | + | ||
| 86 | + | "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg=="], |
|
| 87 | + | ||
| 88 | + | "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA=="], |
|
| 89 | + | ||
| 90 | + | "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.10", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA=="], |
|
| 91 | + | ||
| 92 | + | "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.10", "", { "os": "linux", "cpu": "none" }, "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA=="], |
|
| 93 | + | ||
| 94 | + | "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.10", "", { "os": "linux", "cpu": "s390x" }, "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew=="], |
|
| 95 | + | ||
| 96 | + | "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.10", "", { "os": "linux", "cpu": "x64" }, "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA=="], |
|
| 97 | + | ||
| 98 | + | "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A=="], |
|
| 99 | + | ||
| 100 | + | "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.10", "", { "os": "none", "cpu": "x64" }, "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig=="], |
|
| 101 | + | ||
| 102 | + | "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw=="], |
|
| 103 | + | ||
| 104 | + | "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw=="], |
|
| 105 | + | ||
| 106 | + | "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.10", "", { "os": "none", "cpu": "arm64" }, "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag=="], |
|
| 107 | + | ||
| 108 | + | "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.10", "", { "os": "sunos", "cpu": "x64" }, "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ=="], |
|
| 109 | + | ||
| 110 | + | "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw=="], |
|
| 111 | + | ||
| 112 | + | "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw=="], |
|
| 113 | + | ||
| 114 | + | "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], |
|
| 115 | + | ||
| 116 | + | "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="], |
|
| 117 | + | ||
| 118 | + | "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], |
|
| 119 | + | ||
| 120 | + | "@eslint/config-array": ["@eslint/config-array@0.21.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ=="], |
|
| 121 | + | ||
| 122 | + | "@eslint/config-helpers": ["@eslint/config-helpers@0.3.1", "", {}, "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA=="], |
|
| 123 | + | ||
| 124 | + | "@eslint/core": ["@eslint/core@0.15.2", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg=="], |
|
| 125 | + | ||
| 126 | + | "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], |
|
| 127 | + | ||
| 128 | + | "@eslint/js": ["@eslint/js@9.36.0", "", {}, "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw=="], |
|
| 129 | + | ||
| 130 | + | "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], |
|
| 131 | + | ||
| 132 | + | "@eslint/plugin-kit": ["@eslint/plugin-kit@0.3.5", "", { "dependencies": { "@eslint/core": "^0.15.2", "levn": "^0.4.1" } }, "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w=="], |
|
| 133 | + | ||
| 134 | + | "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], |
|
| 135 | + | ||
| 136 | + | "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], |
|
| 137 | + | ||
| 138 | + | "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], |
|
| 139 | + | ||
| 140 | + | "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], |
|
| 141 | + | ||
| 142 | + | "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], |
|
| 143 | + | ||
| 144 | + | "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], |
|
| 145 | + | ||
| 146 | + | "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], |
|
| 147 | + | ||
| 148 | + | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], |
|
| 149 | + | ||
| 150 | + | "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], |
|
| 151 | + | ||
| 152 | + | "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], |
|
| 153 | + | ||
| 154 | + | "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], |
|
| 155 | + | ||
| 156 | + | "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], |
|
| 157 | + | ||
| 158 | + | "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.35", "", {}, "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg=="], |
|
| 159 | + | ||
| 160 | + | "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.52.2", "", { "os": "android", "cpu": "arm" }, "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ=="], |
|
| 161 | + | ||
| 162 | + | "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.52.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw=="], |
|
| 163 | + | ||
| 164 | + | "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.52.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA=="], |
|
| 165 | + | ||
| 166 | + | "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.52.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ=="], |
|
| 167 | + | ||
| 168 | + | "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.52.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw=="], |
|
| 169 | + | ||
| 170 | + | "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.52.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng=="], |
|
| 171 | + | ||
| 172 | + | "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.52.2", "", { "os": "linux", "cpu": "arm" }, "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA=="], |
|
| 173 | + | ||
| 174 | + | "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.52.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w=="], |
|
| 175 | + | ||
| 176 | + | "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.52.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg=="], |
|
| 177 | + | ||
| 178 | + | "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.52.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA=="], |
|
| 179 | + | ||
| 180 | + | "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.52.2", "", { "os": "linux", "cpu": "none" }, "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw=="], |
|
| 181 | + | ||
| 182 | + | "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.52.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A=="], |
|
| 183 | + | ||
| 184 | + | "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.52.2", "", { "os": "linux", "cpu": "none" }, "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w=="], |
|
| 185 | + | ||
| 186 | + | "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.52.2", "", { "os": "linux", "cpu": "none" }, "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q=="], |
|
| 187 | + | ||
| 188 | + | "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.52.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ=="], |
|
| 189 | + | ||
| 190 | + | "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.52.2", "", { "os": "linux", "cpu": "x64" }, "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA=="], |
|
| 191 | + | ||
| 192 | + | "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.52.2", "", { "os": "linux", "cpu": "x64" }, "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ=="], |
|
| 193 | + | ||
| 194 | + | "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.52.2", "", { "os": "none", "cpu": "arm64" }, "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q=="], |
|
| 195 | + | ||
| 196 | + | "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.52.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA=="], |
|
| 197 | + | ||
| 198 | + | "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.52.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A=="], |
|
| 199 | + | ||
| 200 | + | "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.52.2", "", { "os": "win32", "cpu": "x64" }, "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA=="], |
|
| 201 | + | ||
| 202 | + | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.52.2", "", { "os": "win32", "cpu": "x64" }, "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw=="], |
|
| 203 | + | ||
| 204 | + | "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], |
|
| 205 | + | ||
| 206 | + | "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], |
|
| 207 | + | ||
| 208 | + | "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], |
|
| 209 | + | ||
| 210 | + | "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], |
|
| 211 | + | ||
| 212 | + | "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], |
|
| 213 | + | ||
| 214 | + | "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], |
|
| 215 | + | ||
| 216 | + | "@types/react": ["@types/react@19.1.13", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="], |
|
| 217 | + | ||
| 218 | + | "@types/react-dom": ["@types/react-dom@19.1.9", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ=="], |
|
| 219 | + | ||
| 220 | + | "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.44.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/type-utils": "8.44.1", "@typescript-eslint/utils": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.44.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw=="], |
|
| 221 | + | ||
| 222 | + | "@typescript-eslint/parser": ["@typescript-eslint/parser@8.44.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw=="], |
|
| 223 | + | ||
| 224 | + | "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.44.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.44.1", "@typescript-eslint/types": "^8.44.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA=="], |
|
| 225 | + | ||
| 226 | + | "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1" } }, "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg=="], |
|
| 227 | + | ||
| 228 | + | "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.44.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ=="], |
|
| 229 | + | ||
| 230 | + | "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/utils": "8.44.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g=="], |
|
| 231 | + | ||
| 232 | + | "@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], |
|
| 233 | + | ||
| 234 | + | "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.44.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.44.1", "@typescript-eslint/tsconfig-utils": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A=="], |
|
| 235 | + | ||
| 236 | + | "@typescript-eslint/utils": ["@typescript-eslint/utils@8.44.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg=="], |
|
| 237 | + | ||
| 238 | + | "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], |
|
| 239 | + | ||
| 240 | + | "@vitejs/plugin-react": ["@vitejs/plugin-react@5.0.3", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.35", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg=="], |
|
| 241 | + | ||
| 242 | + | "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], |
|
| 243 | + | ||
| 244 | + | "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], |
|
| 245 | + | ||
| 246 | + | "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], |
|
| 247 | + | ||
| 248 | + | "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], |
|
| 249 | + | ||
| 250 | + | "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], |
|
| 251 | + | ||
| 252 | + | "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], |
|
| 253 | + | ||
| 254 | + | "baseline-browser-mapping": ["baseline-browser-mapping@2.8.6", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw=="], |
|
| 255 | + | ||
| 256 | + | "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], |
|
| 257 | + | ||
| 258 | + | "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], |
|
| 259 | + | ||
| 260 | + | "browserslist": ["browserslist@4.26.2", "", { "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", "electron-to-chromium": "^1.5.218", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A=="], |
|
| 261 | + | ||
| 262 | + | "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], |
|
| 263 | + | ||
| 264 | + | "caniuse-lite": ["caniuse-lite@1.0.30001743", "", {}, "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw=="], |
|
| 265 | + | ||
| 266 | + | "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], |
|
| 267 | + | ||
| 268 | + | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], |
|
| 269 | + | ||
| 270 | + | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], |
|
| 271 | + | ||
| 272 | + | "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], |
|
| 273 | + | ||
| 274 | + | "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], |
|
| 275 | + | ||
| 276 | + | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], |
|
| 277 | + | ||
| 278 | + | "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], |
|
| 279 | + | ||
| 280 | + | "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], |
|
| 281 | + | ||
| 282 | + | "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], |
|
| 283 | + | ||
| 284 | + | "electron-to-chromium": ["electron-to-chromium@1.5.223", "", {}, "sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ=="], |
|
| 285 | + | ||
| 286 | + | "esbuild": ["esbuild@0.25.10", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.10", "@esbuild/android-arm": "0.25.10", "@esbuild/android-arm64": "0.25.10", "@esbuild/android-x64": "0.25.10", "@esbuild/darwin-arm64": "0.25.10", "@esbuild/darwin-x64": "0.25.10", "@esbuild/freebsd-arm64": "0.25.10", "@esbuild/freebsd-x64": "0.25.10", "@esbuild/linux-arm": "0.25.10", "@esbuild/linux-arm64": "0.25.10", "@esbuild/linux-ia32": "0.25.10", "@esbuild/linux-loong64": "0.25.10", "@esbuild/linux-mips64el": "0.25.10", "@esbuild/linux-ppc64": "0.25.10", "@esbuild/linux-riscv64": "0.25.10", "@esbuild/linux-s390x": "0.25.10", "@esbuild/linux-x64": "0.25.10", "@esbuild/netbsd-arm64": "0.25.10", "@esbuild/netbsd-x64": "0.25.10", "@esbuild/openbsd-arm64": "0.25.10", "@esbuild/openbsd-x64": "0.25.10", "@esbuild/openharmony-arm64": "0.25.10", "@esbuild/sunos-x64": "0.25.10", "@esbuild/win32-arm64": "0.25.10", "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ=="], |
|
| 287 | + | ||
| 288 | + | "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], |
|
| 289 | + | ||
| 290 | + | "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], |
|
| 291 | + | ||
| 292 | + | "eslint": ["eslint@9.36.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.36.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "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.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ=="], |
|
| 293 | + | ||
| 294 | + | "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.2.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="], |
|
| 295 | + | ||
| 296 | + | "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.21", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-MWDWTtNC4voTcWDxXbdmBNe8b/TxfxRFUL6hXgKWJjN9c1AagYEmpiFWBWzDw+5H3SulWUe1pJKTnoSdmk88UA=="], |
|
| 297 | + | ||
| 298 | + | "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], |
|
| 299 | + | ||
| 300 | + | "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], |
|
| 301 | + | ||
| 302 | + | "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], |
|
| 303 | + | ||
| 304 | + | "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], |
|
| 305 | + | ||
| 306 | + | "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], |
|
| 307 | + | ||
| 308 | + | "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], |
|
| 309 | + | ||
| 310 | + | "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], |
|
| 311 | + | ||
| 312 | + | "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], |
|
| 313 | + | ||
| 314 | + | "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], |
|
| 315 | + | ||
| 316 | + | "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], |
|
| 317 | + | ||
| 318 | + | "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], |
|
| 319 | + | ||
| 320 | + | "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], |
|
| 321 | + | ||
| 322 | + | "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], |
|
| 323 | + | ||
| 324 | + | "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], |
|
| 325 | + | ||
| 326 | + | "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], |
|
| 327 | + | ||
| 328 | + | "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], |
|
| 329 | + | ||
| 330 | + | "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], |
|
| 331 | + | ||
| 332 | + | "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], |
|
| 333 | + | ||
| 334 | + | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], |
|
| 335 | + | ||
| 336 | + | "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], |
|
| 337 | + | ||
| 338 | + | "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], |
|
| 339 | + | ||
| 340 | + | "globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], |
|
| 341 | + | ||
| 342 | + | "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], |
|
| 343 | + | ||
| 344 | + | "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], |
|
| 345 | + | ||
| 346 | + | "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], |
|
| 347 | + | ||
| 348 | + | "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], |
|
| 349 | + | ||
| 350 | + | "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], |
|
| 351 | + | ||
| 352 | + | "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], |
|
| 353 | + | ||
| 354 | + | "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], |
|
| 355 | + | ||
| 356 | + | "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], |
|
| 357 | + | ||
| 358 | + | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], |
|
| 359 | + | ||
| 360 | + | "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], |
|
| 361 | + | ||
| 362 | + | "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], |
|
| 363 | + | ||
| 364 | + | "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], |
|
| 365 | + | ||
| 366 | + | "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], |
|
| 367 | + | ||
| 368 | + | "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], |
|
| 369 | + | ||
| 370 | + | "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], |
|
| 371 | + | ||
| 372 | + | "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], |
|
| 373 | + | ||
| 374 | + | "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], |
|
| 375 | + | ||
| 376 | + | "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], |
|
| 377 | + | ||
| 378 | + | "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], |
|
| 379 | + | ||
| 380 | + | "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], |
|
| 381 | + | ||
| 382 | + | "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], |
|
| 383 | + | ||
| 384 | + | "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], |
|
| 385 | + | ||
| 386 | + | "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], |
|
| 387 | + | ||
| 388 | + | "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], |
|
| 389 | + | ||
| 390 | + | "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], |
|
| 391 | + | ||
| 392 | + | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], |
|
| 393 | + | ||
| 394 | + | "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], |
|
| 395 | + | ||
| 396 | + | "node-releases": ["node-releases@2.0.21", "", {}, "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw=="], |
|
| 397 | + | ||
| 398 | + | "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], |
|
| 399 | + | ||
| 400 | + | "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], |
|
| 401 | + | ||
| 402 | + | "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], |
|
| 403 | + | ||
| 404 | + | "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], |
|
| 405 | + | ||
| 406 | + | "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], |
|
| 407 | + | ||
| 408 | + | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], |
|
| 409 | + | ||
| 410 | + | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], |
|
| 411 | + | ||
| 412 | + | "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], |
|
| 413 | + | ||
| 414 | + | "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], |
|
| 415 | + | ||
| 416 | + | "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], |
|
| 417 | + | ||
| 418 | + | "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], |
|
| 419 | + | ||
| 420 | + | "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], |
|
| 421 | + | ||
| 422 | + | "react": ["react@19.1.1", "", {}, "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ=="], |
|
| 423 | + | ||
| 424 | + | "react-dom": ["react-dom@19.1.1", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.1" } }, "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw=="], |
|
| 425 | + | ||
| 426 | + | "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], |
|
| 427 | + | ||
| 428 | + | "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], |
|
| 429 | + | ||
| 430 | + | "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], |
|
| 431 | + | ||
| 432 | + | "rollup": ["rollup@4.52.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.2", "@rollup/rollup-android-arm64": "4.52.2", "@rollup/rollup-darwin-arm64": "4.52.2", "@rollup/rollup-darwin-x64": "4.52.2", "@rollup/rollup-freebsd-arm64": "4.52.2", "@rollup/rollup-freebsd-x64": "4.52.2", "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", "@rollup/rollup-linux-arm-musleabihf": "4.52.2", "@rollup/rollup-linux-arm64-gnu": "4.52.2", "@rollup/rollup-linux-arm64-musl": "4.52.2", "@rollup/rollup-linux-loong64-gnu": "4.52.2", "@rollup/rollup-linux-ppc64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-gnu": "4.52.2", "@rollup/rollup-linux-riscv64-musl": "4.52.2", "@rollup/rollup-linux-s390x-gnu": "4.52.2", "@rollup/rollup-linux-x64-gnu": "4.52.2", "@rollup/rollup-linux-x64-musl": "4.52.2", "@rollup/rollup-openharmony-arm64": "4.52.2", "@rollup/rollup-win32-arm64-msvc": "4.52.2", "@rollup/rollup-win32-ia32-msvc": "4.52.2", "@rollup/rollup-win32-x64-gnu": "4.52.2", "@rollup/rollup-win32-x64-msvc": "4.52.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA=="], |
|
| 433 | + | ||
| 434 | + | "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], |
|
| 435 | + | ||
| 436 | + | "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], |
|
| 437 | + | ||
| 438 | + | "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], |
|
| 439 | + | ||
| 440 | + | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], |
|
| 441 | + | ||
| 442 | + | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], |
|
| 443 | + | ||
| 444 | + | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], |
|
| 445 | + | ||
| 446 | + | "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], |
|
| 447 | + | ||
| 448 | + | "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], |
|
| 449 | + | ||
| 450 | + | "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], |
|
| 451 | + | ||
| 452 | + | "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], |
|
| 453 | + | ||
| 454 | + | "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], |
|
| 455 | + | ||
| 456 | + | "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], |
|
| 457 | + | ||
| 458 | + | "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], |
|
| 459 | + | ||
| 460 | + | "typescript-eslint": ["typescript-eslint@8.44.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.44.1", "@typescript-eslint/parser": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/utils": "8.44.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg=="], |
|
| 461 | + | ||
| 462 | + | "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], |
|
| 463 | + | ||
| 464 | + | "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], |
|
| 465 | + | ||
| 466 | + | "vite": ["vite@7.1.7", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA=="], |
|
| 467 | + | ||
| 468 | + | "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], |
|
| 469 | + | ||
| 470 | + | "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], |
|
| 471 | + | ||
| 472 | + | "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], |
|
| 473 | + | ||
| 474 | + | "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], |
|
| 475 | + | ||
| 476 | + | "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], |
|
| 477 | + | ||
| 478 | + | "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], |
|
| 479 | + | ||
| 480 | + | "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], |
|
| 481 | + | ||
| 482 | + | "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], |
|
| 483 | + | ||
| 484 | + | "@typescript-eslint/typescript-estree/semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], |
|
| 485 | + | ||
| 486 | + | "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], |
|
| 487 | + | ||
| 488 | + | "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
|
| 489 | + | ||
| 490 | + | "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], |
|
| 491 | + | } |
|
| 492 | + | } |
| 1 | + | import type React from 'react'; |
|
| 2 | + | ||
| 3 | + | declare module 'react' { |
|
| 4 | + | namespace JSX { |
|
| 5 | + | interface IntrinsicElements { |
|
| 6 | + | 'contract-call': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & { |
|
| 7 | + | 'contract-address'?: string; |
|
| 8 | + | 'chain-id'?: string; |
|
| 9 | + | 'method-name'?: string; |
|
| 10 | + | 'method-args'?: string; |
|
| 11 | + | 'abi-url'?: string; |
|
| 12 | + | 'abi'?: string; |
|
| 13 | + | 'button-text'?: string; |
|
| 14 | + | 'background'?: string; |
|
| 15 | + | 'foreground'?: string; |
|
| 16 | + | 'primary'?: string; |
|
| 17 | + | 'secondary'?: string; |
|
| 18 | + | 'border-radius'?: string; |
|
| 19 | + | 'error-color'?: string; |
|
| 20 | + | 'success-color'?: string; |
|
| 21 | + | onAbiLoaded?: (event: CustomEvent) => void; |
|
| 22 | + | onAbiError?: (event: CustomEvent) => void; |
|
| 23 | + | onContractCallSuccess?: (event: CustomEvent) => void; |
|
| 24 | + | onContractCallError?: (event: CustomEvent) => void; |
|
| 25 | + | }, HTMLElement>; |
|
| 26 | + | 'connect-wallet': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & { |
|
| 27 | + | 'chain-id'?: string; |
|
| 28 | + | 'background'?: string; |
|
| 29 | + | 'foreground'?: string; |
|
| 30 | + | 'primary'?: string; |
|
| 31 | + | 'secondary'?: string; |
|
| 32 | + | 'border-radius'?: string; |
|
| 33 | + | onWalletConnected?: (event: CustomEvent) => void; |
|
| 34 | + | onWalletError?: (event: CustomEvent) => void; |
|
| 35 | + | onWalletDisconnected?: (event: CustomEvent) => void; |
|
| 36 | + | }, HTMLElement>; |
|
| 37 | + | } |
|
| 38 | + | } |
|
| 39 | + | ||
| 40 | + | interface CSSProperties { |
|
| 41 | + | // Norns UI CSS Custom Properties |
|
| 42 | + | '--color-background'?: string; |
|
| 43 | + | '--color-foreground'?: string; |
|
| 44 | + | '--color-primary'?: string; |
|
| 45 | + | '--color-secondary'?: string; |
|
| 46 | + | '--border-radius'?: string; |
|
| 47 | + | } |
|
| 48 | + | } |
|
| 49 | + | ||
| 50 | + | export interface CustomElements { |
|
| 51 | + | 'contract-call': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & { |
|
| 52 | + | 'contract-address'?: string; |
|
| 53 | + | 'chain-id'?: string; |
|
| 54 | + | 'method-name'?: string; |
|
| 55 | + | 'method-args'?: string; |
|
| 56 | + | 'abi-url'?: string; |
|
| 57 | + | 'abi'?: string; |
|
| 58 | + | 'button-text'?: string; |
|
| 59 | + | 'background'?: string; |
|
| 60 | + | 'foreground'?: string; |
|
| 61 | + | 'primary'?: string; |
|
| 62 | + | 'secondary'?: string; |
|
| 63 | + | 'border-radius'?: string; |
|
| 64 | + | 'error-color'?: string; |
|
| 65 | + | 'success-color'?: string; |
|
| 66 | + | onAbiLoaded?: (event: CustomEvent) => void; |
|
| 67 | + | onAbiError?: (event: CustomEvent) => void; |
|
| 68 | + | onContractCallSuccess?: (event: CustomEvent) => void; |
|
| 69 | + | onContractCallError?: (event: CustomEvent) => void; |
|
| 70 | + | }, HTMLElement>; |
|
| 71 | + | 'connect-wallet': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & { |
|
| 72 | + | 'chain-id'?: string; |
|
| 73 | + | 'background'?: string; |
|
| 74 | + | 'foreground'?: string; |
|
| 75 | + | 'primary'?: string; |
|
| 76 | + | 'secondary'?: string; |
|
| 77 | + | 'border-radius'?: string; |
|
| 78 | + | onWalletConnected?: (event: CustomEvent) => void; |
|
| 79 | + | onWalletError?: (event: CustomEvent) => void; |
|
| 80 | + | onWalletDisconnected?: (event: CustomEvent) => void; |
|
| 81 | + | }, HTMLElement>; |
|
| 82 | + | } |
|
| 83 | + | ||
| 84 | + | export interface CustomCssProperties { |
|
| 85 | + | '--color-background'?: string; |
|
| 86 | + | '--color-foreground'?: string; |
|
| 87 | + | '--color-primary'?: string; |
|
| 88 | + | '--color-secondary'?: string; |
|
| 89 | + | '--border-radius'?: string; |
|
| 90 | + | } |
| 1 | + | import js from '@eslint/js' |
|
| 2 | + | import globals from 'globals' |
|
| 3 | + | import reactHooks from 'eslint-plugin-react-hooks' |
|
| 4 | + | import reactRefresh from 'eslint-plugin-react-refresh' |
|
| 5 | + | import tseslint from 'typescript-eslint' |
|
| 6 | + | import { defineConfig, globalIgnores } from 'eslint/config' |
|
| 7 | + | ||
| 8 | + | export default defineConfig([ |
|
| 9 | + | globalIgnores(['dist']), |
|
| 10 | + | { |
|
| 11 | + | files: ['**/*.{ts,tsx}'], |
|
| 12 | + | extends: [ |
|
| 13 | + | js.configs.recommended, |
|
| 14 | + | tseslint.configs.recommended, |
|
| 15 | + | reactHooks.configs['recommended-latest'], |
|
| 16 | + | reactRefresh.configs.vite, |
|
| 17 | + | ], |
|
| 18 | + | languageOptions: { |
|
| 19 | + | ecmaVersion: 2020, |
|
| 20 | + | globals: globals.browser, |
|
| 21 | + | }, |
|
| 22 | + | }, |
|
| 23 | + | ]) |
| 1 | + | <!doctype html> |
|
| 2 | + | <html lang="en"> |
|
| 3 | + | <head> |
|
| 4 | + | <meta charset="UTF-8" /> |
|
| 5 | + | <link rel="icon" type="image/svg+xml" href="/vite.svg" /> |
|
| 6 | + | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|
| 7 | + | <title>vite-react</title> |
|
| 8 | + | </head> |
|
| 9 | + | <body> |
|
| 10 | + | <div id="root"></div> |
|
| 11 | + | <script type="module" src="/src/main.tsx"></script> |
|
| 12 | + | </body> |
|
| 13 | + | </html> |
| 1 | + | { |
|
| 2 | + | "components": "src/components", |
|
| 3 | + | "includeTypes": true |
|
| 4 | + | } |
| 1 | + | { |
|
| 2 | + | "name": "vite-react", |
|
| 3 | + | "private": true, |
|
| 4 | + | "version": "0.0.0", |
|
| 5 | + | "type": "module", |
|
| 6 | + | "scripts": { |
|
| 7 | + | "dev": "vite", |
|
| 8 | + | "build": "tsc -b && vite build", |
|
| 9 | + | "lint": "eslint .", |
|
| 10 | + | "preview": "vite preview" |
|
| 11 | + | }, |
|
| 12 | + | "dependencies": { |
|
| 13 | + | "react": "^19.1.1", |
|
| 14 | + | "react-dom": "^19.1.1" |
|
| 15 | + | }, |
|
| 16 | + | "devDependencies": { |
|
| 17 | + | "@eslint/js": "^9.36.0", |
|
| 18 | + | "@types/react": "^19.1.13", |
|
| 19 | + | "@types/react-dom": "^19.1.9", |
|
| 20 | + | "@vitejs/plugin-react": "^5.0.3", |
|
| 21 | + | "eslint": "^9.36.0", |
|
| 22 | + | "eslint-plugin-react-hooks": "^5.2.0", |
|
| 23 | + | "eslint-plugin-react-refresh": "^0.4.20", |
|
| 24 | + | "globals": "^16.4.0", |
|
| 25 | + | "typescript": "~5.8.3", |
|
| 26 | + | "typescript-eslint": "^8.44.0", |
|
| 27 | + | "vite": "^7.1.7" |
|
| 28 | + | } |
|
| 29 | + | } |
| 1 | + | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> |
| 1 | + | #root { |
|
| 2 | + | max-width: 1280px; |
|
| 3 | + | margin: 0 auto; |
|
| 4 | + | padding: 2rem; |
|
| 5 | + | text-align: center; |
|
| 6 | + | } |
|
| 7 | + | ||
| 8 | + | .logo { |
|
| 9 | + | height: 6em; |
|
| 10 | + | padding: 1.5em; |
|
| 11 | + | will-change: filter; |
|
| 12 | + | transition: filter 300ms; |
|
| 13 | + | } |
|
| 14 | + | .logo:hover { |
|
| 15 | + | filter: drop-shadow(0 0 2em #646cffaa); |
|
| 16 | + | } |
|
| 17 | + | .logo.react:hover { |
|
| 18 | + | filter: drop-shadow(0 0 2em #61dafbaa); |
|
| 19 | + | } |
|
| 20 | + | ||
| 21 | + | @keyframes logo-spin { |
|
| 22 | + | from { |
|
| 23 | + | transform: rotate(0deg); |
|
| 24 | + | } |
|
| 25 | + | to { |
|
| 26 | + | transform: rotate(360deg); |
|
| 27 | + | } |
|
| 28 | + | } |
|
| 29 | + | ||
| 30 | + | @media (prefers-reduced-motion: no-preference) { |
|
| 31 | + | a:nth-of-type(2) .logo { |
|
| 32 | + | animation: logo-spin infinite 20s linear; |
|
| 33 | + | } |
|
| 34 | + | } |
|
| 35 | + | ||
| 36 | + | .card { |
|
| 37 | + | padding: 2em; |
|
| 38 | + | } |
|
| 39 | + | ||
| 40 | + | .read-the-docs { |
|
| 41 | + | color: #888; |
|
| 42 | + | } |
| 1 | + | import reactLogo from "./assets/react.svg"; |
|
| 2 | + | import viteLogo from "/vite.svg"; |
|
| 3 | + | import "./App.css"; |
|
| 4 | + | import "./components/connect-wallet"; |
|
| 5 | + | ||
| 6 | + | function App() { |
|
| 7 | + | return ( |
|
| 8 | + | <> |
|
| 9 | + | <div> |
|
| 10 | + | <a href="https://vite.dev" target="_blank"> |
|
| 11 | + | <img src={viteLogo} className="logo" alt="Vite logo" /> |
|
| 12 | + | </a> |
|
| 13 | + | <a href="https://react.dev" target="_blank"> |
|
| 14 | + | <img src={reactLogo} className="logo react" alt="React logo" /> |
|
| 15 | + | </a> |
|
| 16 | + | </div> |
|
| 17 | + | <h1>Vite + React</h1> |
|
| 18 | + | <div className="card"> |
|
| 19 | + | <connect-wallet></connect-wallet> |
|
| 20 | + | </div> |
|
| 21 | + | <p className="read-the-docs"> |
|
| 22 | + | Click on the Vite and React logos to learn more |
|
| 23 | + | </p> |
|
| 24 | + | </> |
|
| 25 | + | ); |
|
| 26 | + | } |
|
| 27 | + | ||
| 28 | + | export default App; |
| 1 | + | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg> |
| 1 | + | /** |
|
| 2 | + | * @fileoverview ConnectWallet Web Component - A customizable wallet connection component |
|
| 3 | + | * that supports Ethereum wallet integration with ENS resolution, balance display, and |
|
| 4 | + | * multi-chain support. |
|
| 5 | + | * |
|
| 6 | + | */ |
|
| 7 | + | ||
| 8 | + | /** |
|
| 9 | + | * ConnectWallet - A Web Component for Ethereum wallet connection and management |
|
| 10 | + | * |
|
| 11 | + | * This component provides a complete wallet connection interface with the following features: |
|
| 12 | + | * - Connect/disconnect wallet functionality |
|
| 13 | + | * - ENS name resolution and avatar display |
|
| 14 | + | * - Balance fetching and display |
|
| 15 | + | * - Multi-chain support with automatic switching |
|
| 16 | + | * - Customizable styling through attributes |
|
| 17 | + | * - Popover interface for wallet management |
|
| 18 | + | * |
|
| 19 | + | * @class ConnectWallet |
|
| 20 | + | * @extends HTMLElement |
|
| 21 | + | * |
|
| 22 | + | * @example |
|
| 23 | + | * // Basic usage |
|
| 24 | + | * <connect-wallet></connect-wallet> |
|
| 25 | + | * |
|
| 26 | + | * @example |
|
| 27 | + | * // With custom styling and chain |
|
| 28 | + | * <connect-wallet |
|
| 29 | + | * chain-id="0x89" |
|
| 30 | + | * primary="#4F46E5" |
|
| 31 | + | * background="#1F2937" |
|
| 32 | + | * border-radius="8px"> |
|
| 33 | + | * </connect-wallet> |
|
| 34 | + | * |
|
| 35 | + | * @fires ConnectWallet#wallet-connected - Fired when wallet is successfully connected |
|
| 36 | + | * @fires ConnectWallet#wallet-disconnected - Fired when wallet is disconnected |
|
| 37 | + | * @fires ConnectWallet#wallet-error - Fired when wallet connection fails |
|
| 38 | + | */ |
|
| 39 | + | ||
| 40 | + | class ConnectWallet extends HTMLElement { |
|
| 41 | + | // Constructor and lifecycle methods |
|
| 42 | + | constructor() { |
|
| 43 | + | super(); |
|
| 44 | + | this.attachShadow({ mode: "open" }); |
|
| 45 | + | this.connected = false; |
|
| 46 | + | this.address = ""; |
|
| 47 | + | this.ensData = null; |
|
| 48 | + | this.loading = false; |
|
| 49 | + | this.chainId = "0x1"; |
|
| 50 | + | this.currentChainId = null; |
|
| 51 | + | this.showPopover = false; |
|
| 52 | + | this.balance = "0"; |
|
| 53 | + | this.copySuccess = false; |
|
| 54 | + | } |
|
| 55 | + | ||
| 56 | + | static get observedAttributes() { |
|
| 57 | + | return [ |
|
| 58 | + | "chain-id", |
|
| 59 | + | "background", |
|
| 60 | + | "foreground", |
|
| 61 | + | "primary", |
|
| 62 | + | "secondary", |
|
| 63 | + | "border-radius", |
|
| 64 | + | ]; |
|
| 65 | + | } |
|
| 66 | + | ||
| 67 | + | attributeChangedCallback(name, oldValue, newValue) { |
|
| 68 | + | if (name === "chain-id" && oldValue !== newValue) { |
|
| 69 | + | this.chainId = newValue; |
|
| 70 | + | if (this.connected) { |
|
| 71 | + | this.checkAndSwitchChain(); |
|
| 72 | + | } |
|
| 73 | + | } else if ( |
|
| 74 | + | [ |
|
| 75 | + | "background", |
|
| 76 | + | "foreground", |
|
| 77 | + | "primary", |
|
| 78 | + | "secondary", |
|
| 79 | + | "border-radius", |
|
| 80 | + | ].includes(name) && |
|
| 81 | + | oldValue !== newValue |
|
| 82 | + | ) { |
|
| 83 | + | this.render(); |
|
| 84 | + | } |
|
| 85 | + | } |
|
| 86 | + | ||
| 87 | + | connectedCallback() { |
|
| 88 | + | this.chainId = this.getAttribute("chain-id") || "0x1"; |
|
| 89 | + | this.render(); |
|
| 90 | + | } |
|
| 91 | + | ||
| 92 | + | // Wallet connection methods |
|
| 93 | + | async connect() { |
|
| 94 | + | if (window.ethereum) { |
|
| 95 | + | try { |
|
| 96 | + | this.loading = true; |
|
| 97 | + | this.render(); |
|
| 98 | + | ||
| 99 | + | const accounts = await window.ethereum.request({ |
|
| 100 | + | method: "eth_requestAccounts", |
|
| 101 | + | }); |
|
| 102 | + | ||
| 103 | + | this.address = accounts[0]; |
|
| 104 | + | ||
| 105 | + | this.currentChainId = await window.ethereum.request({ |
|
| 106 | + | method: "eth_chainId", |
|
| 107 | + | }); |
|
| 108 | + | ||
| 109 | + | if (this.chainId && this.chainId !== this.currentChainId) { |
|
| 110 | + | await this.switchChain(this.chainId); |
|
| 111 | + | } |
|
| 112 | + | ||
| 113 | + | this.connected = true; |
|
| 114 | + | ||
| 115 | + | await Promise.all([this.fetchEnsData(), this.fetchBalance()]); |
|
| 116 | + | ||
| 117 | + | this.loading = false; |
|
| 118 | + | this.render(); |
|
| 119 | + | ||
| 120 | + | this.dispatchEvent( |
|
| 121 | + | new CustomEvent("wallet-connected", { |
|
| 122 | + | detail: { |
|
| 123 | + | address: this.address, |
|
| 124 | + | ensData: this.ensData, |
|
| 125 | + | chainId: this.currentChainId, |
|
| 126 | + | }, |
|
| 127 | + | }), |
|
| 128 | + | ); |
|
| 129 | + | } catch (error) { |
|
| 130 | + | console.error("Connection failed", error); |
|
| 131 | + | this.loading = false; |
|
| 132 | + | this.render(); |
|
| 133 | + | ||
| 134 | + | this.dispatchEvent( |
|
| 135 | + | new CustomEvent("wallet-error", { |
|
| 136 | + | detail: { error: error.message }, |
|
| 137 | + | }), |
|
| 138 | + | ); |
|
| 139 | + | } |
|
| 140 | + | } else { |
|
| 141 | + | alert("Please install a wallet extension like MetaMask"); |
|
| 142 | + | } |
|
| 143 | + | } |
|
| 144 | + | ||
| 145 | + | disconnect() { |
|
| 146 | + | this.connected = false; |
|
| 147 | + | this.address = ""; |
|
| 148 | + | this.ensData = null; |
|
| 149 | + | this.currentChainId = null; |
|
| 150 | + | this.balance = "0"; |
|
| 151 | + | this.showPopover = false; |
|
| 152 | + | this.copySuccess = false; |
|
| 153 | + | this.render(); |
|
| 154 | + | ||
| 155 | + | this.dispatchEvent(new CustomEvent("wallet-disconnected")); |
|
| 156 | + | } |
|
| 157 | + | ||
| 158 | + | // Chain management methods |
|
| 159 | + | async switchChain(chainId) { |
|
| 160 | + | try { |
|
| 161 | + | await window.ethereum.request({ |
|
| 162 | + | method: "wallet_switchEthereumChain", |
|
| 163 | + | params: [{ chainId }], |
|
| 164 | + | }); |
|
| 165 | + | this.currentChainId = chainId; |
|
| 166 | + | } catch (switchError) { |
|
| 167 | + | throw new Error(`Failed to switch chain: ${switchError.message}`); |
|
| 168 | + | } |
|
| 169 | + | } |
|
| 170 | + | ||
| 171 | + | async checkAndSwitchChain() { |
|
| 172 | + | if (window.ethereum && this.chainId && this.connected) { |
|
| 173 | + | const currentChain = await window.ethereum.request({ |
|
| 174 | + | method: "eth_chainId", |
|
| 175 | + | }); |
|
| 176 | + | ||
| 177 | + | if (currentChain !== this.chainId) { |
|
| 178 | + | try { |
|
| 179 | + | await this.switchChain(this.chainId); |
|
| 180 | + | this.render(); |
|
| 181 | + | } catch (error) { |
|
| 182 | + | console.error("Failed to switch chain:", error); |
|
| 183 | + | } |
|
| 184 | + | } |
|
| 185 | + | } |
|
| 186 | + | } |
|
| 187 | + | ||
| 188 | + | getChainName(chainId) { |
|
| 189 | + | const chainNames = { |
|
| 190 | + | "0x1": "Ethereum", |
|
| 191 | + | "0x89": "Polygon", |
|
| 192 | + | "0xa": "Optimism", |
|
| 193 | + | "0xa4b1": "Arbitrum", |
|
| 194 | + | "0x2105": "Base", |
|
| 195 | + | }; |
|
| 196 | + | return chainNames[chainId] || `Chain ${chainId}`; |
|
| 197 | + | } |
|
| 198 | + | ||
| 199 | + | // Data fetching methods |
|
| 200 | + | async fetchEnsData() { |
|
| 201 | + | try { |
|
| 202 | + | const response = await fetch(`https://api.ensdata.net/${this.address}`); |
|
| 203 | + | if (response.ok) { |
|
| 204 | + | this.ensData = await response.json(); |
|
| 205 | + | console.log("ENS data loaded:", this.ensData); |
|
| 206 | + | } else { |
|
| 207 | + | console.log("No ENS data found for this address"); |
|
| 208 | + | this.ensData = null; |
|
| 209 | + | } |
|
| 210 | + | } catch (error) { |
|
| 211 | + | console.error("Failed to fetch ENS data", error); |
|
| 212 | + | this.ensData = null; |
|
| 213 | + | } |
|
| 214 | + | } |
|
| 215 | + | ||
| 216 | + | async fetchBalance() { |
|
| 217 | + | try { |
|
| 218 | + | const balanceWei = await window.ethereum.request({ |
|
| 219 | + | method: "eth_getBalance", |
|
| 220 | + | params: [this.address, "latest"], |
|
| 221 | + | }); |
|
| 222 | + | ||
| 223 | + | const balanceEth = parseInt(balanceWei, 16) / Math.pow(10, 18); |
|
| 224 | + | this.balance = balanceEth.toFixed(4); |
|
| 225 | + | } catch (error) { |
|
| 226 | + | console.error("Failed to fetch balance", error); |
|
| 227 | + | this.balance = "0"; |
|
| 228 | + | } |
|
| 229 | + | } |
|
| 230 | + | ||
| 231 | + | // UI helper methods |
|
| 232 | + | getDisplayName() { |
|
| 233 | + | if (this.ensData?.ens_primary) { |
|
| 234 | + | return this.ensData.ens_primary; |
|
| 235 | + | } |
|
| 236 | + | return this.truncateAddress(this.address); |
|
| 237 | + | } |
|
| 238 | + | ||
| 239 | + | truncateAddress(addr) { |
|
| 240 | + | if (!addr) return ""; |
|
| 241 | + | return addr.slice(0, 5) + "..." + addr.slice(-5); |
|
| 242 | + | } |
|
| 243 | + | ||
| 244 | + | async copyAddress() { |
|
| 245 | + | try { |
|
| 246 | + | await navigator.clipboard.writeText(this.address); |
|
| 247 | + | this.copySuccess = true; |
|
| 248 | + | this.showPopoverElement(); |
|
| 249 | + | ||
| 250 | + | setTimeout(() => { |
|
| 251 | + | this.copySuccess = false; |
|
| 252 | + | this.showPopoverElement(); |
|
| 253 | + | }, 1000); |
|
| 254 | + | } catch (error) { |
|
| 255 | + | console.error("Failed to copy address", error); |
|
| 256 | + | } |
|
| 257 | + | } |
|
| 258 | + | ||
| 259 | + | // Popover management methods |
|
| 260 | + | togglePopover() { |
|
| 261 | + | this.showPopover = !this.showPopover; |
|
| 262 | + | if (this.showPopover) { |
|
| 263 | + | this.showPopoverElement(); |
|
| 264 | + | } else { |
|
| 265 | + | this.hidePopoverElement(); |
|
| 266 | + | } |
|
| 267 | + | } |
|
| 268 | + | ||
| 269 | + | hidePopover() { |
|
| 270 | + | if (this.showPopover) { |
|
| 271 | + | this.showPopover = false; |
|
| 272 | + | this.hidePopoverElement(); |
|
| 273 | + | } |
|
| 274 | + | } |
|
| 275 | + | ||
| 276 | + | showPopoverElement() { |
|
| 277 | + | const profileContainer = |
|
| 278 | + | this.shadowRoot.querySelector(".profile-container"); |
|
| 279 | + | if (!profileContainer) return; |
|
| 280 | + | ||
| 281 | + | const existingPopover = profileContainer.querySelector(".popover"); |
|
| 282 | + | if (existingPopover) { |
|
| 283 | + | existingPopover.remove(); |
|
| 284 | + | } |
|
| 285 | + | ||
| 286 | + | const popover = document.createElement("div"); |
|
| 287 | + | popover.className = "popover"; |
|
| 288 | + | ||
| 289 | + | const copyIcon = this.copySuccess |
|
| 290 | + | ? `<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>` |
|
| 291 | + | : `<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 2V1H10V2H5ZM4.75 0C4.33579 0 4 0.335786 4 0.75V1H3.5C2.67157 1 2 1.67157 2 2.5V12.5C2 13.3284 2.67157 14 3.5 14H7V13H3.5C3.22386 13 3 12.7761 3 12.5V2.5C3 2.22386 3.22386 2 3.5 2H4V2.25C4 2.66421 4.33579 3 4.75 3H10.25C10.6642 3 11 2.66421 11 2.25V2H11.5C11.7761 2 12 2.22386 12 2.5V7H13V2.5C13 1.67157 12.3284 1 11.5 1H11V0.75C11 0.335786 10.6642 0 10.25 0H4.75ZM9 8.5C9 8.77614 8.77614 9 8.5 9C8.22386 9 8 8.77614 8 8.5C8 8.22386 8.22386 8 8.5 8C8.77614 8 9 8.22386 9 8.5ZM10.5 9C10.7761 9 11 8.77614 11 8.5C11 8.22386 10.7761 8 10.5 8C10.2239 8 10 8.22386 10 8.5C10 8.77614 10.2239 9 10.5 9ZM13 8.5C13 8.77614 12.7761 9 12.5 9C12.2239 9 12 8.77614 12 8.5C12 8.22386 12.2239 8 12.5 8C12.7761 8 13 8.22386 13 8.5ZM14.5 9C14.7761 9 15 8.77614 15 8.5C15 8.22386 14.7761 8 14.5 8C14.2239 8 14 8.22386 14 8.5C14 8.77614 14.2239 9 14.5 9ZM15 10.5C15 10.7761 14.7761 11 14.5 11C14.2239 11 14 10.7761 14 10.5C14 10.2239 14.2239 10 14.5 10C14.7761 10 15 10.2239 15 10.5ZM14.5 13C14.7761 13 15 12.7761 15 12.5C15 12.2239 14.7761 12 14.5 12C14.2239 12 14 12.2239 14 12.5C14 12.7761 14.2239 13 14.5 13ZM14.5 15C14.7761 15 15 14.7761 15 14.5C15 14.2239 14.7761 14 14.5 14C14.2239 14 14 14.2239 14 14.5C14 14.7761 14.2239 15 14.5 15ZM8.5 11C8.77614 11 9 10.7761 9 10.5C9 10.2239 8.77614 10 8.5 10C8.22386 10 8 10.2239 8 10.5C8 10.7761 8.22386 11 8.5 11ZM9 12.5C9 12.7761 8.77614 13 8.5 13C8.22386 13 8 12.7761 8 12.5C8 12.2239 8.22386 12 8.5 12C8.77614 12 9 12.2239 9 12.5ZM8.5 15C8.77614 15 9 14.7761 9 14.5C9 14.2239 8.77614 14 8.5 14C8.22386 14 8 14.2239 8 14.5C8 14.7761 8.22386 15 8.5 15ZM11 14.5C11 14.7761 10.7761 15 10.5 15C10.2239 15 10 14.7761 10 14.5C10 14.2239 10.2239 14 10.5 14C10.7761 14 11 14.2239 11 14.5ZM12.5 15C12.7761 15 13 14.7761 13 14.5C13 14.2239 12.7761 14 12.5 14C12.2239 14 12 14.2239 12 14.5C12 12.7761 12.2239 15 12.5 15Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>`; |
|
| 292 | + | ||
| 293 | + | const copyText = this.copySuccess ? "Copied!" : "Copy Address"; |
|
| 294 | + | popover.innerHTML = ` |
|
| 295 | + | <button class="popover-button copy-button"> |
|
| 296 | + | <span>${copyIcon}</span> |
|
| 297 | + | ${copyText} |
|
| 298 | + | </button> |
|
| 299 | + | <button class="popover-button disconnect-button"> |
|
| 300 | + | <span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 1C2.44771 1 2 1.44772 2 2V13C2 13.5523 2.44772 14 3 14H10.5C10.7761 14 11 13.7761 11 13.5C11 13.2239 10.7761 13 10.5 13H3V2L10.5 2C10.7761 2 11 1.77614 11 1.5C11 1.22386 10.7761 1 10.5 1H3ZM12.6036 4.89645C12.4083 4.70118 12.0917 4.70118 11.8964 4.89645C11.7012 5.09171 11.7012 5.40829 11.8964 5.60355L13.2929 7H6.5C6.22386 7 6 7.22386 6 7.5C6 7.77614 6.22386 8 6.5 8H13.2929L11.8964 9.39645C11.7012 9.59171 11.7012 9.90829 11.8964 10.1036C12.0917 10.2988 12.4083 10.2988 12.6036 10.1036L14.8536 7.85355C15.0488 7.65829 15.0488 7.34171 14.8536 7.14645L12.6036 4.89645Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></span> |
|
| 301 | + | Disconnect |
|
| 302 | + | </button> |
|
| 303 | + | `; |
|
| 304 | + | ||
| 305 | + | popover.querySelector(".copy-button").addEventListener("click", (e) => { |
|
| 306 | + | e.stopPropagation(); |
|
| 307 | + | this.copyAddress(); |
|
| 308 | + | }); |
|
| 309 | + | ||
| 310 | + | popover |
|
| 311 | + | .querySelector(".disconnect-button") |
|
| 312 | + | .addEventListener("click", (e) => { |
|
| 313 | + | e.stopPropagation(); |
|
| 314 | + | this.disconnect(); |
|
| 315 | + | }); |
|
| 316 | + | ||
| 317 | + | profileContainer.appendChild(popover); |
|
| 318 | + | ||
| 319 | + | setTimeout(() => { |
|
| 320 | + | document.addEventListener("click", this.hidePopover.bind(this), { |
|
| 321 | + | once: true, |
|
| 322 | + | }); |
|
| 323 | + | }, 0); |
|
| 324 | + | } |
|
| 325 | + | ||
| 326 | + | hidePopoverElement() { |
|
| 327 | + | const profileContainer = |
|
| 328 | + | this.shadowRoot.querySelector(".profile-container"); |
|
| 329 | + | if (!profileContainer) return; |
|
| 330 | + | ||
| 331 | + | const popover = profileContainer.querySelector(".popover"); |
|
| 332 | + | if (popover) { |
|
| 333 | + | popover.remove(); |
|
| 334 | + | } |
|
| 335 | + | } |
|
| 336 | + | ||
| 337 | + | // Color helper methods |
|
| 338 | + | getCSSVariable(name, defaultValue) { |
|
| 339 | + | return this.getAttribute(name) || defaultValue; |
|
| 340 | + | } |
|
| 341 | + | ||
| 342 | + | // Render methods and styling |
|
| 343 | + | render() { |
|
| 344 | + | const background = this.getCSSVariable("background", "#232323"); |
|
| 345 | + | const foreground = this.getCSSVariable("foreground", "#ffffff"); |
|
| 346 | + | const primary = this.getCSSVariable("primary", "#5F8787"); |
|
| 347 | + | const secondary = this.getCSSVariable("secondary", "#6F9797"); |
|
| 348 | + | const borderRadius = this.getCSSVariable("border-radius", "4px"); |
|
| 349 | + | ||
| 350 | + | this.shadowRoot.innerHTML = ` |
|
| 351 | + | <style> |
|
| 352 | + | :host { |
|
| 353 | + | --color-background: ${background}; |
|
| 354 | + | --color-foreground: ${foreground}; |
|
| 355 | + | --color-primary: ${primary}; |
|
| 356 | + | --color-secondary: ${secondary}; |
|
| 357 | + | --border-radius: ${borderRadius}; |
|
| 358 | + | --bg-color: ${this.connected ? "var(--color-background)" : "var(--color-primary)"}; |
|
| 359 | + | --bg-hover-color: ${this.connected ? "var(--color-background)" : "var(--color-secondary)"}; |
|
| 360 | + | display: inline-block; |
|
| 361 | + | } |
|
| 362 | + | ||
| 363 | + | button { |
|
| 364 | + | padding: 10px 20px; |
|
| 365 | + | background: var(--bg-color); |
|
| 366 | + | color: var(--color-foreground); |
|
| 367 | + | border: none; |
|
| 368 | + | border-radius: var(--border-radius); |
|
| 369 | + | cursor: pointer; |
|
| 370 | + | font-size: 16px; |
|
| 371 | + | transition: background-color 0.3s ease; |
|
| 372 | + | } |
|
| 373 | + | ||
| 374 | + | button:hover { |
|
| 375 | + | background: var(--bg-hover-color); |
|
| 376 | + | } |
|
| 377 | + | ||
| 378 | + | button:disabled { |
|
| 379 | + | opacity: 0.7; |
|
| 380 | + | cursor: not-allowed; |
|
| 381 | + | } |
|
| 382 | + | ||
| 383 | + | .profile-container { |
|
| 384 | + | position: relative; |
|
| 385 | + | display: inline-block; |
|
| 386 | + | font-family: sans-serif; |
|
| 387 | + | } |
|
| 388 | + | ||
| 389 | + | .profile { |
|
| 390 | + | display: flex; |
|
| 391 | + | align-items: center; |
|
| 392 | + | gap: 8px; |
|
| 393 | + | padding: 10px 20px; |
|
| 394 | + | background: var(--bg-color); |
|
| 395 | + | border-radius: var(--border-radius); |
|
| 396 | + | color: var(--color-foreground); |
|
| 397 | + | min-width: auto; |
|
| 398 | + | transition: background-color 0.3s ease; |
|
| 399 | + | cursor: pointer; |
|
| 400 | + | } |
|
| 401 | + | ||
| 402 | + | .profile:hover { |
|
| 403 | + | background: var(--bg-hover-color); |
|
| 404 | + | } |
|
| 405 | + | ||
| 406 | + | .popover { |
|
| 407 | + | position: absolute; |
|
| 408 | + | top: 100%; |
|
| 409 | + | left: 0; |
|
| 410 | + | right: 0; |
|
| 411 | + | background: var(--bg-color); |
|
| 412 | + | border: 1px solid rgba(255, 255, 255, 0.1); |
|
| 413 | + | border-radius: var(--border-radius); |
|
| 414 | + | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); |
|
| 415 | + | z-index: 1000; |
|
| 416 | + | margin-top: 4px; |
|
| 417 | + | overflow: hidden; |
|
| 418 | + | } |
|
| 419 | + | ||
| 420 | + | .popover-button { |
|
| 421 | + | display: flex; |
|
| 422 | + | align-items: center; |
|
| 423 | + | gap: 8px; |
|
| 424 | + | width: 100%; |
|
| 425 | + | padding: 10px 16px; |
|
| 426 | + | background: var(--bg-color); |
|
| 427 | + | border: none; |
|
| 428 | + | color: var(--color-foreground); |
|
| 429 | + | font-size: 14px; |
|
| 430 | + | cursor: pointer; |
|
| 431 | + | transition: background-color 0.2s ease; |
|
| 432 | + | } |
|
| 433 | + | ||
| 434 | + | .popover-button:hover { |
|
| 435 | + | background: var(--bg-hover-color); |
|
| 436 | + | } |
|
| 437 | + | ||
| 438 | + | .popover-button:not(:last-child) { |
|
| 439 | + | border-bottom: 1px solid rgba(255, 255, 255, 0.1); |
|
| 440 | + | } |
|
| 441 | + | ||
| 442 | + | .popover-button span { |
|
| 443 | + | font-size: 16px; |
|
| 444 | + | } |
|
| 445 | + | ||
| 446 | + | .avatar { |
|
| 447 | + | width: 32px; |
|
| 448 | + | height: 32px; |
|
| 449 | + | border-radius: 50%; |
|
| 450 | + | object-fit: cover; |
|
| 451 | + | } |
|
| 452 | + | ||
| 453 | + | .avatar-placeholder { |
|
| 454 | + | width: 32px; |
|
| 455 | + | height: 32px; |
|
| 456 | + | border-radius: 50%; |
|
| 457 | + | background: linear-gradient(45deg, var(--color-primary), var(--color-secondary)); |
|
| 458 | + | display: flex; |
|
| 459 | + | align-items: center; |
|
| 460 | + | justify-content: center; |
|
| 461 | + | color: var(--color-foreground); |
|
| 462 | + | font-weight: bold; |
|
| 463 | + | font-size: 12px; |
|
| 464 | + | } |
|
| 465 | + | ||
| 466 | + | .profile-info { |
|
| 467 | + | flex: 1; |
|
| 468 | + | min-width: 0; |
|
| 469 | + | } |
|
| 470 | + | ||
| 471 | + | .profile-info h4 { |
|
| 472 | + | margin: 0 0 2px 0; |
|
| 473 | + | font-size: 14px; |
|
| 474 | + | font-weight: 600; |
|
| 475 | + | white-space: nowrap; |
|
| 476 | + | overflow: hidden; |
|
| 477 | + | text-overflow: ellipsis; |
|
| 478 | + | } |
|
| 479 | + | ||
| 480 | + | .profile-info p { |
|
| 481 | + | margin: 0; |
|
| 482 | + | font-size: 12px; |
|
| 483 | + | opacity: 0.8; |
|
| 484 | + | white-space: nowrap; |
|
| 485 | + | overflow: hidden; |
|
| 486 | + | text-overflow: ellipsis; |
|
| 487 | + | font-family: monospace; |
|
| 488 | + | } |
|
| 489 | + | ||
| 490 | + | .loading { |
|
| 491 | + | display: flex; |
|
| 492 | + | align-items: center; |
|
| 493 | + | gap: 8px; |
|
| 494 | + | } |
|
| 495 | + | ||
| 496 | + | .spinner { |
|
| 497 | + | width: 16px; |
|
| 498 | + | height: 16px; |
|
| 499 | + | border: 2px solid rgba(255, 255, 255, 0.3); |
|
| 500 | + | border-top: 2px solid var(--color-foreground); |
|
| 501 | + | border-radius: 50%; |
|
| 502 | + | animation: spin 1s linear infinite; |
|
| 503 | + | } |
|
| 504 | + | ||
| 505 | + | @keyframes spin { |
|
| 506 | + | from { transform: rotate(0deg); } |
|
| 507 | + | to { transform: rotate(360deg); } |
|
| 508 | + | } |
|
| 509 | + | </style> |
|
| 510 | + | `; |
|
| 511 | + | ||
| 512 | + | if (this.loading) { |
|
| 513 | + | this.renderLoading(); |
|
| 514 | + | } else if (this.connected) { |
|
| 515 | + | this.renderProfile(); |
|
| 516 | + | } else { |
|
| 517 | + | this.renderConnectButton(); |
|
| 518 | + | } |
|
| 519 | + | } |
|
| 520 | + | ||
| 521 | + | renderProfile() { |
|
| 522 | + | const profileContainer = document.createElement("div"); |
|
| 523 | + | profileContainer.className = "profile-container"; |
|
| 524 | + | ||
| 525 | + | const profileDiv = document.createElement("div"); |
|
| 526 | + | profileDiv.className = "profile"; |
|
| 527 | + | ||
| 528 | + | const avatar = this.ensData?.avatar_small; |
|
| 529 | + | const displayName = this.getDisplayName(); |
|
| 530 | + | ||
| 531 | + | let avatarElement = ""; |
|
| 532 | + | if (avatar) { |
|
| 533 | + | avatarElement = `<img src="${avatar}" alt="Avatar" class="avatar" onerror="this.style.display='none'">`; |
|
| 534 | + | } else { |
|
| 535 | + | avatarElement = `<div class="avatar-placeholder"></div>`; |
|
| 536 | + | } |
|
| 537 | + | ||
| 538 | + | profileDiv.innerHTML = ` |
|
| 539 | + | ${avatarElement} |
|
| 540 | + | <div class="profile-info"> |
|
| 541 | + | <h4>${displayName}</h4> |
|
| 542 | + | <p>${this.balance} ETH</p> |
|
| 543 | + | </div> |
|
| 544 | + | `; |
|
| 545 | + | ||
| 546 | + | profileDiv.addEventListener("click", (e) => { |
|
| 547 | + | e.stopPropagation(); |
|
| 548 | + | this.togglePopover(); |
|
| 549 | + | }); |
|
| 550 | + | ||
| 551 | + | profileContainer.appendChild(profileDiv); |
|
| 552 | + | this.shadowRoot.appendChild(profileContainer); |
|
| 553 | + | ||
| 554 | + | if (this.showPopover) { |
|
| 555 | + | this.showPopoverElement(); |
|
| 556 | + | } |
|
| 557 | + | } |
|
| 558 | + | ||
| 559 | + | renderLoading() { |
|
| 560 | + | const button = document.createElement("button"); |
|
| 561 | + | button.disabled = true; |
|
| 562 | + | button.innerHTML = ` |
|
| 563 | + | <div class="loading"> |
|
| 564 | + | <div class="spinner"></div> |
|
| 565 | + | <span>Connecting...</span> |
|
| 566 | + | </div> |
|
| 567 | + | `; |
|
| 568 | + | this.shadowRoot.appendChild(button); |
|
| 569 | + | } |
|
| 570 | + | ||
| 571 | + | renderConnectButton() { |
|
| 572 | + | const button = document.createElement("button"); |
|
| 573 | + | button.textContent = "Connect Wallet"; |
|
| 574 | + | button.addEventListener("click", () => this.connect()); |
|
| 575 | + | this.shadowRoot.appendChild(button); |
|
| 576 | + | } |
|
| 577 | + | } |
|
| 578 | + | ||
| 579 | + | customElements.define("connect-wallet", ConnectWallet); |
| 1 | + | :root { |
|
| 2 | + | font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; |
|
| 3 | + | line-height: 1.5; |
|
| 4 | + | font-weight: 400; |
|
| 5 | + | ||
| 6 | + | color-scheme: light dark; |
|
| 7 | + | color: rgba(255, 255, 255, 0.87); |
|
| 8 | + | background-color: #242424; |
|
| 9 | + | ||
| 10 | + | font-synthesis: none; |
|
| 11 | + | text-rendering: optimizeLegibility; |
|
| 12 | + | -webkit-font-smoothing: antialiased; |
|
| 13 | + | -moz-osx-font-smoothing: grayscale; |
|
| 14 | + | } |
|
| 15 | + | ||
| 16 | + | a { |
|
| 17 | + | font-weight: 500; |
|
| 18 | + | color: #646cff; |
|
| 19 | + | text-decoration: inherit; |
|
| 20 | + | } |
|
| 21 | + | a:hover { |
|
| 22 | + | color: #535bf2; |
|
| 23 | + | } |
|
| 24 | + | ||
| 25 | + | body { |
|
| 26 | + | margin: 0; |
|
| 27 | + | display: flex; |
|
| 28 | + | place-items: center; |
|
| 29 | + | min-width: 320px; |
|
| 30 | + | min-height: 100vh; |
|
| 31 | + | } |
|
| 32 | + | ||
| 33 | + | h1 { |
|
| 34 | + | font-size: 3.2em; |
|
| 35 | + | line-height: 1.1; |
|
| 36 | + | } |
|
| 37 | + | ||
| 38 | + | button { |
|
| 39 | + | border-radius: 8px; |
|
| 40 | + | border: 1px solid transparent; |
|
| 41 | + | padding: 0.6em 1.2em; |
|
| 42 | + | font-size: 1em; |
|
| 43 | + | font-weight: 500; |
|
| 44 | + | font-family: inherit; |
|
| 45 | + | background-color: #1a1a1a; |
|
| 46 | + | cursor: pointer; |
|
| 47 | + | transition: border-color 0.25s; |
|
| 48 | + | } |
|
| 49 | + | button:hover { |
|
| 50 | + | border-color: #646cff; |
|
| 51 | + | } |
|
| 52 | + | button:focus, |
|
| 53 | + | button:focus-visible { |
|
| 54 | + | outline: 4px auto -webkit-focus-ring-color; |
|
| 55 | + | } |
|
| 56 | + | ||
| 57 | + | @media (prefers-color-scheme: light) { |
|
| 58 | + | :root { |
|
| 59 | + | color: #213547; |
|
| 60 | + | background-color: #ffffff; |
|
| 61 | + | } |
|
| 62 | + | a:hover { |
|
| 63 | + | color: #747bff; |
|
| 64 | + | } |
|
| 65 | + | button { |
|
| 66 | + | background-color: #f9f9f9; |
|
| 67 | + | } |
|
| 68 | + | } |
| 1 | + | import { StrictMode } from 'react' |
|
| 2 | + | import { createRoot } from 'react-dom/client' |
|
| 3 | + | import './index.css' |
|
| 4 | + | import App from './App.tsx' |
|
| 5 | + | ||
| 6 | + | createRoot(document.getElementById('root')!).render( |
|
| 7 | + | <StrictMode> |
|
| 8 | + | <App /> |
|
| 9 | + | </StrictMode>, |
|
| 10 | + | ) |
| 1 | + | { |
|
| 2 | + | "compilerOptions": { |
|
| 3 | + | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", |
|
| 4 | + | "target": "ES2022", |
|
| 5 | + | "useDefineForClassFields": true, |
|
| 6 | + | "lib": ["ES2022", "DOM", "DOM.Iterable"], |
|
| 7 | + | "module": "ESNext", |
|
| 8 | + | "types": ["vite/client"], |
|
| 9 | + | "skipLibCheck": true, |
|
| 10 | + | ||
| 11 | + | "moduleResolution": "bundler", |
|
| 12 | + | "allowImportingTsExtensions": true, |
|
| 13 | + | "verbatimModuleSyntax": true, |
|
| 14 | + | "moduleDetection": "force", |
|
| 15 | + | "noEmit": true, |
|
| 16 | + | "jsx": "react-jsx", |
|
| 17 | + | ||
| 18 | + | "strict": true, |
|
| 19 | + | "noUnusedLocals": true, |
|
| 20 | + | "noUnusedParameters": true, |
|
| 21 | + | "erasableSyntaxOnly": true, |
|
| 22 | + | "noFallthroughCasesInSwitch": true, |
|
| 23 | + | "noUncheckedSideEffectImports": true |
|
| 24 | + | }, |
|
| 25 | + | "include": ["src", "custom-elements-jsx.d.ts"] |
|
| 26 | + | } |
| 1 | + | { |
|
| 2 | + | "files": [], |
|
| 3 | + | "references": [ |
|
| 4 | + | { "path": "./tsconfig.app.json" }, |
|
| 5 | + | { "path": "./tsconfig.node.json" } |
|
| 6 | + | ] |
|
| 7 | + | } |
| 1 | + | { |
|
| 2 | + | "compilerOptions": { |
|
| 3 | + | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", |
|
| 4 | + | "target": "ES2023", |
|
| 5 | + | "lib": ["ES2023"], |
|
| 6 | + | "module": "ESNext", |
|
| 7 | + | "types": [], |
|
| 8 | + | "skipLibCheck": true, |
|
| 9 | + | ||
| 10 | + | /* Bundler mode */ |
|
| 11 | + | "moduleResolution": "bundler", |
|
| 12 | + | "allowImportingTsExtensions": true, |
|
| 13 | + | "verbatimModuleSyntax": true, |
|
| 14 | + | "moduleDetection": "force", |
|
| 15 | + | "noEmit": true, |
|
| 16 | + | ||
| 17 | + | /* Linting */ |
|
| 18 | + | "strict": true, |
|
| 19 | + | "noUnusedLocals": true, |
|
| 20 | + | "noUnusedParameters": true, |
|
| 21 | + | "erasableSyntaxOnly": true, |
|
| 22 | + | "noFallthroughCasesInSwitch": true, |
|
| 23 | + | "noUncheckedSideEffectImports": true |
|
| 24 | + | }, |
|
| 25 | + | "include": ["vite.config.ts"] |
|
| 26 | + | } |
| 1 | + | import { defineConfig } from 'vite' |
|
| 2 | + | import react from '@vitejs/plugin-react' |
|
| 3 | + | ||
| 4 | + | // https://vite.dev/config/ |
|
| 5 | + | export default defineConfig({ |
|
| 6 | + | plugins: [react()], |
|
| 7 | + | }) |
| 105 | 105 | ${intrinsicElements} |
|
| 106 | 106 | } |
|
| 107 | 107 | } |
|
| 108 | - | ||
| 108 | + | ||
| 109 | 109 | interface CSSProperties { |
|
| 110 | 110 | // Norns UI CSS Custom Properties |
|
| 111 | 111 | ${cssProperties} |
| 20 | 20 | ||
| 21 | 21 | interface NornsConfig { |
|
| 22 | 22 | components: string; |
|
| 23 | + | includeTypes?: boolean; |
|
| 23 | 24 | } |
|
| 24 | 25 | ||
| 25 | 26 | const DEFAULT_CONFIG: NornsConfig = { |
|
| 26 | 27 | components: "components", |
|
| 28 | + | includeTypes: true, |
|
| 27 | 29 | }; |
|
| 28 | 30 | ||
| 29 | 31 | async function loadConfig(): Promise<NornsConfig | null> { |
|
| 96 | 98 | DEFAULT_CONFIG.components, |
|
| 97 | 99 | ); |
|
| 98 | 100 | ||
| 101 | + | // Get TypeScript types preference |
|
| 102 | + | const includeTypesResponse = await promptUser( |
|
| 103 | + | "Include TypeScript definitions for React JSX? (Y/n)", |
|
| 104 | + | "y", |
|
| 105 | + | ); |
|
| 106 | + | const includeTypes = |
|
| 107 | + | includeTypesResponse.toLowerCase() !== "n" && |
|
| 108 | + | includeTypesResponse.toLowerCase() !== "no"; |
|
| 109 | + | ||
| 99 | 110 | // Create the configuration |
|
| 100 | 111 | const config: NornsConfig = { |
|
| 101 | 112 | components: componentsPath, |
|
| 113 | + | includeTypes, |
|
| 102 | 114 | }; |
|
| 103 | 115 | ||
| 104 | 116 | // Create components directory if it doesn't exist |
|
| 192 | 204 | const componentPath = join(componentsDir, `${componentName}.js`); |
|
| 193 | 205 | ||
| 194 | 206 | await writeFile(componentPath, componentCode, "utf8"); |
|
| 207 | + | ||
| 208 | + | // Copy TypeScript definitions if enabled |
|
| 209 | + | if (config.includeTypes !== false) { |
|
| 210 | + | const typesSourcePath = join( |
|
| 211 | + | COMPONENTS_DIR, |
|
| 212 | + | "../custom-elements-jsx.d.ts", |
|
| 213 | + | ); |
|
| 214 | + | const typesDestPath = "custom-elements-jsx.d.ts"; // Install at project root |
|
| 215 | + | ||
| 216 | + | if (existsSync(typesSourcePath)) { |
|
| 217 | + | const typesContent = await readFile(typesSourcePath, "utf8"); |
|
| 218 | + | await writeFile(typesDestPath, typesContent, "utf8"); |
|
| 219 | + | console.log( |
|
| 220 | + | colors.blue(`▸ Added TypeScript definitions to ${typesDestPath}`), |
|
| 221 | + | ); |
|
| 222 | + | } |
|
| 223 | + | } |
|
| 195 | 224 | ||
| 196 | 225 | installSpinner.success(`Added ${componentName} to ${componentPath}`); |
|
| 197 | 226 | console.log(colors.blue(`▸ You can now use it in your HTML:`)); |
|