feat: Added initial site f79ac9dc
stevedylandev · 2025-06-25 17:10 21 file(s) · +3678 −0
site/.gitignore (added) +24 −0
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?
site/README.md (added) +54 −0
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/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
8 +
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
9 +
10 +
## Expanding the ESLint configuration
11 +
12 +
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
13 +
14 +
```js
15 +
export default tseslint.config({
16 +
  extends: [
17 +
    // Remove ...tseslint.configs.recommended and replace with this
18 +
    ...tseslint.configs.recommendedTypeChecked,
19 +
    // Alternatively, use this for stricter rules
20 +
    ...tseslint.configs.strictTypeChecked,
21 +
    // Optionally, add this for stylistic rules
22 +
    ...tseslint.configs.stylisticTypeChecked,
23 +
  ],
24 +
  languageOptions: {
25 +
    // other options...
26 +
    parserOptions: {
27 +
      project: ['./tsconfig.node.json', './tsconfig.app.json'],
28 +
      tsconfigRootDir: import.meta.dirname,
29 +
    },
30 +
  },
31 +
})
32 +
```
33 +
34 +
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:
35 +
36 +
```js
37 +
// eslint.config.js
38 +
import reactX from 'eslint-plugin-react-x'
39 +
import reactDom from 'eslint-plugin-react-dom'
40 +
41 +
export default tseslint.config({
42 +
  plugins: {
43 +
    // Add the react-x and react-dom plugins
44 +
    'react-x': reactX,
45 +
    'react-dom': reactDom,
46 +
  },
47 +
  rules: {
48 +
    // other rules...
49 +
    // Enable its recommended typescript rules
50 +
    ...reactX.configs['recommended-typescript'].rules,
51 +
    ...reactDom.configs.recommended.rules,
52 +
  },
53 +
})
54 +
```
site/bun.lock (added) +430 −0
1 +
{
2 +
  "lockfileVersion": 1,
3 +
  "workspaces": {
4 +
    "": {
5 +
      "name": "vite-react-tailwindcss",
6 +
      "dependencies": {
7 +
        "@tailwindcss/vite": "^4.1.3",
8 +
        "react": "^19.0.0",
9 +
        "react-ascii-text": "^0.0.4",
10 +
        "react-dom": "^19.0.0",
11 +
        "tailwindcss": "^4.1.3",
12 +
      },
13 +
      "devDependencies": {
14 +
        "@eslint/js": "^9.21.0",
15 +
        "@types/figlet": "^1.7.0",
16 +
        "@types/react": "^19.0.10",
17 +
        "@types/react-dom": "^19.0.4",
18 +
        "@vitejs/plugin-react": "^4.3.4",
19 +
        "eslint": "^9.21.0",
20 +
        "eslint-plugin-react-hooks": "^5.1.0",
21 +
        "eslint-plugin-react-refresh": "^0.4.19",
22 +
        "globals": "^15.15.0",
23 +
        "typescript": "~5.7.2",
24 +
        "typescript-eslint": "^8.24.1",
25 +
        "vite": "^6.2.7",
26 +
      },
27 +
    },
28 +
  },
29 +
  "packages": {
30 +
    "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, ""],
31 +
32 +
    "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, ""],
33 +
34 +
    "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, ""],
35 +
36 +
    "@babel/core": ["@babel/core@7.26.10", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.10", "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.10", "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, ""],
37 +
38 +
    "@babel/generator": ["@babel/generator@7.27.0", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, ""],
39 +
40 +
    "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.0", "", { "dependencies": { "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, ""],
41 +
42 +
    "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, ""],
43 +
44 +
    "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, ""],
45 +
46 +
    "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, ""],
47 +
48 +
    "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, ""],
49 +
50 +
    "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, ""],
51 +
52 +
    "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, ""],
53 +
54 +
    "@babel/helpers": ["@babel/helpers@7.27.0", "", { "dependencies": { "@babel/template": "^7.27.0", "@babel/types": "^7.27.0" } }, ""],
55 +
56 +
    "@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, ""],
57 +
58 +
    "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, ""],
59 +
60 +
    "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, ""],
61 +
62 +
    "@babel/template": ["@babel/template@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0" } }, ""],
63 +
64 +
    "@babel/traverse": ["@babel/traverse@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.27.0", "@babel/parser": "^7.27.0", "@babel/template": "^7.27.0", "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" } }, ""],
65 +
66 +
    "@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, ""],
67 +
68 +
    "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.2", "", { "os": "darwin", "cpu": "arm64" }, ""],
69 +
70 +
    "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.5.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, ""],
71 +
72 +
    "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, ""],
73 +
74 +
    "@eslint/config-array": ["@eslint/config-array@0.20.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, ""],
75 +
76 +
    "@eslint/config-helpers": ["@eslint/config-helpers@0.2.1", "", {}, ""],
77 +
78 +
    "@eslint/core": ["@eslint/core@0.12.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, ""],
79 +
80 +
    "@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" } }, ""],
81 +
82 +
    "@eslint/js": ["@eslint/js@9.24.0", "", {}, ""],
83 +
84 +
    "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, ""],
85 +
86 +
    "@eslint/plugin-kit": ["@eslint/plugin-kit@0.2.8", "", { "dependencies": { "@eslint/core": "^0.13.0", "levn": "^0.4.1" } }, ""],
87 +
88 +
    "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, ""],
89 +
90 +
    "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, ""],
91 +
92 +
    "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, ""],
93 +
94 +
    "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.2", "", {}, ""],
95 +
96 +
    "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, ""],
97 +
98 +
    "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, ""],
99 +
100 +
    "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, ""],
101 +
102 +
    "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, ""],
103 +
104 +
    "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, ""],
105 +
106 +
    "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, ""],
107 +
108 +
    "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, ""],
109 +
110 +
    "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, ""],
111 +
112 +
    "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.39.0", "", { "os": "darwin", "cpu": "arm64" }, ""],
113 +
114 +
    "@tailwindcss/node": ["@tailwindcss/node@4.1.3", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.29.2", "tailwindcss": "4.1.3" } }, ""],
115 +
116 +
    "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.3", "", { "optionalDependencies": { "@tailwindcss/oxide-darwin-arm64": "4.1.3" } }, ""],
117 +
118 +
    "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.3", "", { "os": "darwin", "cpu": "arm64" }, ""],
119 +
120 +
    "@tailwindcss/vite": ["@tailwindcss/vite@4.1.3", "", { "dependencies": { "@tailwindcss/node": "4.1.3", "@tailwindcss/oxide": "4.1.3", "tailwindcss": "4.1.3" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, ""],
121 +
122 +
    "@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": "*" } }, ""],
123 +
124 +
    "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, ""],
125 +
126 +
    "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, ""],
127 +
128 +
    "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, ""],
129 +
130 +
    "@types/estree": ["@types/estree@1.0.7", "", {}, ""],
131 +
132 +
    "@types/figlet": ["@types/figlet@1.7.0", "", {}, "sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q=="],
133 +
134 +
    "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, ""],
135 +
136 +
    "@types/react": ["@types/react@19.1.0", "", { "dependencies": { "csstype": "^3.0.2" } }, ""],
137 +
138 +
    "@types/react-dom": ["@types/react-dom@19.1.2", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, ""],
139 +
140 +
    "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.29.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.29.1", "@typescript-eslint/type-utils": "8.29.1", "@typescript-eslint/utils": "8.29.1", "@typescript-eslint/visitor-keys": "8.29.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, ""],
141 +
142 +
    "@typescript-eslint/parser": ["@typescript-eslint/parser@8.29.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.29.1", "@typescript-eslint/types": "8.29.1", "@typescript-eslint/typescript-estree": "8.29.1", "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, ""],
143 +
144 +
    "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.29.1", "", { "dependencies": { "@typescript-eslint/types": "8.29.1", "@typescript-eslint/visitor-keys": "8.29.1" } }, ""],
145 +
146 +
    "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.29.1", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.29.1", "@typescript-eslint/utils": "8.29.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, ""],
147 +
148 +
    "@typescript-eslint/types": ["@typescript-eslint/types@8.29.1", "", {}, ""],
149 +
150 +
    "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.29.1", "", { "dependencies": { "@typescript-eslint/types": "8.29.1", "@typescript-eslint/visitor-keys": "8.29.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.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, ""],
151 +
152 +
    "@typescript-eslint/utils": ["@typescript-eslint/utils@8.29.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.29.1", "@typescript-eslint/types": "8.29.1", "@typescript-eslint/typescript-estree": "8.29.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, ""],
153 +
154 +
    "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.29.1", "", { "dependencies": { "@typescript-eslint/types": "8.29.1", "eslint-visitor-keys": "^4.2.0" } }, ""],
155 +
156 +
    "@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.4", "", { "dependencies": { "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, ""],
157 +
158 +
    "acorn": ["acorn@8.14.1", "", { "bin": "bin/acorn" }, ""],
159 +
160 +
    "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, ""],
161 +
162 +
    "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" } }, ""],
163 +
164 +
    "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, ""],
165 +
166 +
    "argparse": ["argparse@2.0.1", "", {}, ""],
167 +
168 +
    "balanced-match": ["balanced-match@1.0.2", "", {}, ""],
169 +
170 +
    "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, ""],
171 +
172 +
    "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, ""],
173 +
174 +
    "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": "cli.js" }, ""],
175 +
176 +
    "callsites": ["callsites@3.1.0", "", {}, ""],
177 +
178 +
    "caniuse-lite": ["caniuse-lite@1.0.30001713", "", {}, ""],
179 +
180 +
    "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, ""],
181 +
182 +
    "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, ""],
183 +
184 +
    "color-name": ["color-name@1.1.4", "", {}, ""],
185 +
186 +
    "concat-map": ["concat-map@0.0.1", "", {}, ""],
187 +
188 +
    "convert-source-map": ["convert-source-map@2.0.0", "", {}, ""],
189 +
190 +
    "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, ""],
191 +
192 +
    "csstype": ["csstype@3.1.3", "", {}, ""],
193 +
194 +
    "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, ""],
195 +
196 +
    "deep-is": ["deep-is@0.1.4", "", {}, ""],
197 +
198 +
    "detect-libc": ["detect-libc@2.0.3", "", {}, ""],
199 +
200 +
    "electron-to-chromium": ["electron-to-chromium@1.5.136", "", {}, ""],
201 +
202 +
    "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, ""],
203 +
204 +
    "esbuild": ["esbuild@0.25.2", "", { "optionalDependencies": { "@esbuild/darwin-arm64": "0.25.2" }, "bin": "bin/esbuild" }, ""],
205 +
206 +
    "escalade": ["escalade@3.2.0", "", {}, ""],
207 +
208 +
    "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, ""],
209 +
210 +
    "eslint": ["eslint@9.24.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.0", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.24.0", "@eslint/plugin-kit": "^0.2.7", "@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.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.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": "*" }, "bin": "bin/eslint.js" }, ""],
211 +
212 +
    "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" } }, ""],
213 +
214 +
    "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.19", "", { "peerDependencies": { "eslint": ">=8.40" } }, ""],
215 +
216 +
    "eslint-scope": ["eslint-scope@8.3.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, ""],
217 +
218 +
    "eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, ""],
219 +
220 +
    "espree": ["espree@10.3.0", "", { "dependencies": { "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.0" } }, ""],
221 +
222 +
    "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, ""],
223 +
224 +
    "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, ""],
225 +
226 +
    "estraverse": ["estraverse@5.3.0", "", {}, ""],
227 +
228 +
    "esutils": ["esutils@2.0.3", "", {}, ""],
229 +
230 +
    "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, ""],
231 +
232 +
    "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" } }, ""],
233 +
234 +
    "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, ""],
235 +
236 +
    "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, ""],
237 +
238 +
    "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, ""],
239 +
240 +
    "fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="],
241 +
242 +
    "figlet": ["figlet@1.8.1", "", { "bin": { "figlet": "bin/index.js" } }, "sha512-kEC3Sme+YvA8Hkibv0NR1oClGcWia0VB2fC1SlMy027cwe795Xx40Xiv/nw/iFAwQLupymWh+uhAAErn/7hwPg=="],
243 +
244 +
    "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, ""],
245 +
246 +
    "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, ""],
247 +
248 +
    "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, ""],
249 +
250 +
    "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, ""],
251 +
252 +
    "flatted": ["flatted@3.3.3", "", {}, ""],
253 +
254 +
    "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, ""],
255 +
256 +
    "gensync": ["gensync@1.0.0-beta.2", "", {}, ""],
257 +
258 +
    "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, ""],
259 +
260 +
    "globals": ["globals@15.15.0", "", {}, ""],
261 +
262 +
    "graceful-fs": ["graceful-fs@4.2.11", "", {}, ""],
263 +
264 +
    "graphemer": ["graphemer@1.4.0", "", {}, ""],
265 +
266 +
    "has-flag": ["has-flag@4.0.0", "", {}, ""],
267 +
268 +
    "ignore": ["ignore@5.3.2", "", {}, ""],
269 +
270 +
    "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, ""],
271 +
272 +
    "imurmurhash": ["imurmurhash@0.1.4", "", {}, ""],
273 +
274 +
    "is-extglob": ["is-extglob@2.1.1", "", {}, ""],
275 +
276 +
    "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, ""],
277 +
278 +
    "is-number": ["is-number@7.0.0", "", {}, ""],
279 +
280 +
    "isexe": ["isexe@2.0.0", "", {}, ""],
281 +
282 +
    "jiti": ["jiti@2.4.2", "", { "bin": "lib/jiti-cli.mjs" }, ""],
283 +
284 +
    "js-tokens": ["js-tokens@4.0.0", "", {}, ""],
285 +
286 +
    "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, ""],
287 +
288 +
    "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, ""],
289 +
290 +
    "json-buffer": ["json-buffer@3.0.1", "", {}, ""],
291 +
292 +
    "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, ""],
293 +
294 +
    "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, ""],
295 +
296 +
    "json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, ""],
297 +
298 +
    "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, ""],
299 +
300 +
    "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, ""],
301 +
302 +
    "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2" } }, ""],
303 +
304 +
    "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.2", "", { "os": "darwin", "cpu": "arm64" }, ""],
305 +
306 +
    "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, ""],
307 +
308 +
    "lodash.merge": ["lodash.merge@4.6.2", "", {}, ""],
309 +
310 +
    "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, ""],
311 +
312 +
    "merge2": ["merge2@1.4.1", "", {}, ""],
313 +
314 +
    "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, ""],
315 +
316 +
    "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, ""],
317 +
318 +
    "ms": ["ms@2.1.3", "", {}, ""],
319 +
320 +
    "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, ""],
321 +
322 +
    "natural-compare": ["natural-compare@1.4.0", "", {}, ""],
323 +
324 +
    "node-releases": ["node-releases@2.0.19", "", {}, ""],
325 +
326 +
    "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" } }, ""],
327 +
328 +
    "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, ""],
329 +
330 +
    "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, ""],
331 +
332 +
    "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, ""],
333 +
334 +
    "path-exists": ["path-exists@4.0.0", "", {}, ""],
335 +
336 +
    "path-key": ["path-key@3.1.1", "", {}, ""],
337 +
338 +
    "picocolors": ["picocolors@1.1.1", "", {}, ""],
339 +
340 +
    "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="],
341 +
342 +
    "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, ""],
343 +
344 +
    "prelude-ls": ["prelude-ls@1.2.1", "", {}, ""],
345 +
346 +
    "punycode": ["punycode@2.3.1", "", {}, ""],
347 +
348 +
    "queue-microtask": ["queue-microtask@1.2.3", "", {}, ""],
349 +
350 +
    "react": ["react@19.1.0", "", {}, ""],
351 +
352 +
    "react-ascii-text": ["react-ascii-text@0.0.4", "", { "dependencies": { "figlet": "^1.6.0" }, "peerDependencies": { "react": ">=17.0.0" } }, "sha512-eELnCyECQpMvvpmk1i+qFcjtTRyQg8tcp0VbdAvCKv54H/+B8NlbhcRnO+YzTzmWewhprAqdqShM33uHlu7OwA=="],
353 +
354 +
    "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, ""],
355 +
356 +
    "react-refresh": ["react-refresh@0.14.2", "", {}, ""],
357 +
358 +
    "resolve-from": ["resolve-from@4.0.0", "", {}, ""],
359 +
360 +
    "reusify": ["reusify@1.1.0", "", {}, ""],
361 +
362 +
    "rollup": ["rollup@4.39.0", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-darwin-arm64": "4.39.0", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, ""],
363 +
364 +
    "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, ""],
365 +
366 +
    "scheduler": ["scheduler@0.26.0", "", {}, ""],
367 +
368 +
    "semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, ""],
369 +
370 +
    "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, ""],
371 +
372 +
    "shebang-regex": ["shebang-regex@3.0.0", "", {}, ""],
373 +
374 +
    "source-map-js": ["source-map-js@1.2.1", "", {}, ""],
375 +
376 +
    "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, ""],
377 +
378 +
    "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, ""],
379 +
380 +
    "tailwindcss": ["tailwindcss@4.1.3", "", {}, ""],
381 +
382 +
    "tapable": ["tapable@2.2.1", "", {}, ""],
383 +
384 +
    "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="],
385 +
386 +
    "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, ""],
387 +
388 +
    "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, ""],
389 +
390 +
    "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, ""],
391 +
392 +
    "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, ""],
393 +
394 +
    "typescript-eslint": ["typescript-eslint@8.29.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.29.1", "@typescript-eslint/parser": "8.29.1", "@typescript-eslint/utils": "8.29.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, ""],
395 +
396 +
    "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, ""],
397 +
398 +
    "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, ""],
399 +
400 +
    "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="],
401 +
402 +
    "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, ""],
403 +
404 +
    "word-wrap": ["word-wrap@1.2.5", "", {}, ""],
405 +
406 +
    "yallist": ["yallist@3.1.1", "", {}, ""],
407 +
408 +
    "yocto-queue": ["yocto-queue@0.1.0", "", {}, ""],
409 +
410 +
    "@babel/traverse/globals": ["globals@11.12.0", "", {}, ""],
411 +
412 +
    "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, ""],
413 +
414 +
    "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, ""],
415 +
416 +
    "@eslint/plugin-kit/@eslint/core": ["@eslint/core@0.13.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, ""],
417 +
418 +
    "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, ""],
419 +
420 +
    "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, ""],
421 +
422 +
    "@typescript-eslint/typescript-estree/semver": ["semver@7.7.1", "", { "bin": "bin/semver.js" }, ""],
423 +
424 +
    "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, ""],
425 +
426 +
    "micromatch/picomatch": ["picomatch@2.3.1", "", {}, ""],
427 +
428 +
    "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, ""],
429 +
  }
430 +
}
site/eslint.config.js (added) +28 −0
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 +
7 +
export default tseslint.config(
8 +
  { ignores: ['dist'] },
9 +
  {
10 +
    extends: [js.configs.recommended, ...tseslint.configs.recommended],
11 +
    files: ['**/*.{ts,tsx}'],
12 +
    languageOptions: {
13 +
      ecmaVersion: 2020,
14 +
      globals: globals.browser,
15 +
    },
16 +
    plugins: {
17 +
      'react-hooks': reactHooks,
18 +
      'react-refresh': reactRefresh,
19 +
    },
20 +
    rules: {
21 +
      ...reactHooks.configs.recommended.rules,
22 +
      'react-refresh/only-export-components': [
23 +
        'warn',
24 +
        { allowConstantExport: true },
25 +
      ],
26 +
    },
27 +
  },
28 +
)
site/index.html (added) +13 −0
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>DARKMATTER</title>
8 +
  </head>
9 +
  <body>
10 +
    <div id="root"></div>
11 +
    <script type="module" src="/src/main.tsx"></script>
12 +
  </body>
13 +
</html>
site/orbiter.json (added) +6 −0
1 +
{
2 +
  "siteId": "6fff21e6-ced1-45aa-afc6-983b13f8c888",
3 +
  "domain": "darkmatter",
4 +
  "buildCommand": "bun run build",
5 +
  "buildDir": "dist"
6 +
}
site/package-lock.json (added) +2336 −0
1 +
{
2 +
  "name": "vite-react-tailwindcss",
3 +
  "version": "0.0.0",
4 +
  "lockfileVersion": 3,
5 +
  "requires": true,
6 +
  "packages": {
7 +
    "": {
8 +
      "name": "vite-react-tailwindcss",
9 +
      "version": "0.0.0",
10 +
      "dependencies": {
11 +
        "@tailwindcss/vite": "^4.1.3",
12 +
        "react": "^19.0.0",
13 +
        "react-dom": "^19.0.0",
14 +
        "tailwindcss": "^4.1.3"
15 +
      },
16 +
      "devDependencies": {
17 +
        "@eslint/js": "^9.21.0",
18 +
        "@types/react": "^19.0.10",
19 +
        "@types/react-dom": "^19.0.4",
20 +
        "@vitejs/plugin-react": "^4.3.4",
21 +
        "eslint": "^9.21.0",
22 +
        "eslint-plugin-react-hooks": "^5.1.0",
23 +
        "eslint-plugin-react-refresh": "^0.4.19",
24 +
        "globals": "^15.15.0",
25 +
        "typescript": "~5.7.2",
26 +
        "typescript-eslint": "^8.24.1",
27 +
        "vite": "^6.2.0"
28 +
      }
29 +
    },
30 +
    "node_modules/@ampproject/remapping": {
31 +
      "version": "2.3.0",
32 +
      "dev": true,
33 +
      "license": "Apache-2.0",
34 +
      "dependencies": {
35 +
        "@jridgewell/gen-mapping": "^0.3.5",
36 +
        "@jridgewell/trace-mapping": "^0.3.24"
37 +
      },
38 +
      "engines": {
39 +
        "node": ">=6.0.0"
40 +
      }
41 +
    },
42 +
    "node_modules/@babel/code-frame": {
43 +
      "version": "7.26.2",
44 +
      "dev": true,
45 +
      "license": "MIT",
46 +
      "dependencies": {
47 +
        "@babel/helper-validator-identifier": "^7.25.9",
48 +
        "js-tokens": "^4.0.0",
49 +
        "picocolors": "^1.0.0"
50 +
      },
51 +
      "engines": {
52 +
        "node": ">=6.9.0"
53 +
      }
54 +
    },
55 +
    "node_modules/@babel/compat-data": {
56 +
      "version": "7.26.8",
57 +
      "dev": true,
58 +
      "license": "MIT",
59 +
      "engines": {
60 +
        "node": ">=6.9.0"
61 +
      }
62 +
    },
63 +
    "node_modules/@babel/core": {
64 +
      "version": "7.26.10",
65 +
      "dev": true,
66 +
      "license": "MIT",
67 +
      "dependencies": {
68 +
        "@ampproject/remapping": "^2.2.0",
69 +
        "@babel/code-frame": "^7.26.2",
70 +
        "@babel/generator": "^7.26.10",
71 +
        "@babel/helper-compilation-targets": "^7.26.5",
72 +
        "@babel/helper-module-transforms": "^7.26.0",
73 +
        "@babel/helpers": "^7.26.10",
74 +
        "@babel/parser": "^7.26.10",
75 +
        "@babel/template": "^7.26.9",
76 +
        "@babel/traverse": "^7.26.10",
77 +
        "@babel/types": "^7.26.10",
78 +
        "convert-source-map": "^2.0.0",
79 +
        "debug": "^4.1.0",
80 +
        "gensync": "^1.0.0-beta.2",
81 +
        "json5": "^2.2.3",
82 +
        "semver": "^6.3.1"
83 +
      },
84 +
      "engines": {
85 +
        "node": ">=6.9.0"
86 +
      },
87 +
      "funding": {
88 +
        "type": "opencollective",
89 +
        "url": "https://opencollective.com/babel"
90 +
      }
91 +
    },
92 +
    "node_modules/@babel/generator": {
93 +
      "version": "7.27.0",
94 +
      "dev": true,
95 +
      "license": "MIT",
96 +
      "dependencies": {
97 +
        "@babel/parser": "^7.27.0",
98 +
        "@babel/types": "^7.27.0",
99 +
        "@jridgewell/gen-mapping": "^0.3.5",
100 +
        "@jridgewell/trace-mapping": "^0.3.25",
101 +
        "jsesc": "^3.0.2"
102 +
      },
103 +
      "engines": {
104 +
        "node": ">=6.9.0"
105 +
      }
106 +
    },
107 +
    "node_modules/@babel/helper-compilation-targets": {
108 +
      "version": "7.27.0",
109 +
      "dev": true,
110 +
      "license": "MIT",
111 +
      "dependencies": {
112 +
        "@babel/compat-data": "^7.26.8",
113 +
        "@babel/helper-validator-option": "^7.25.9",
114 +
        "browserslist": "^4.24.0",
115 +
        "lru-cache": "^5.1.1",
116 +
        "semver": "^6.3.1"
117 +
      },
118 +
      "engines": {
119 +
        "node": ">=6.9.0"
120 +
      }
121 +
    },
122 +
    "node_modules/@babel/helper-module-imports": {
123 +
      "version": "7.25.9",
124 +
      "dev": true,
125 +
      "license": "MIT",
126 +
      "dependencies": {
127 +
        "@babel/traverse": "^7.25.9",
128 +
        "@babel/types": "^7.25.9"
129 +
      },
130 +
      "engines": {
131 +
        "node": ">=6.9.0"
132 +
      }
133 +
    },
134 +
    "node_modules/@babel/helper-module-transforms": {
135 +
      "version": "7.26.0",
136 +
      "dev": true,
137 +
      "license": "MIT",
138 +
      "dependencies": {
139 +
        "@babel/helper-module-imports": "^7.25.9",
140 +
        "@babel/helper-validator-identifier": "^7.25.9",
141 +
        "@babel/traverse": "^7.25.9"
142 +
      },
143 +
      "engines": {
144 +
        "node": ">=6.9.0"
145 +
      },
146 +
      "peerDependencies": {
147 +
        "@babel/core": "^7.0.0"
148 +
      }
149 +
    },
150 +
    "node_modules/@babel/helper-plugin-utils": {
151 +
      "version": "7.26.5",
152 +
      "dev": true,
153 +
      "license": "MIT",
154 +
      "engines": {
155 +
        "node": ">=6.9.0"
156 +
      }
157 +
    },
158 +
    "node_modules/@babel/helper-string-parser": {
159 +
      "version": "7.25.9",
160 +
      "dev": true,
161 +
      "license": "MIT",
162 +
      "engines": {
163 +
        "node": ">=6.9.0"
164 +
      }
165 +
    },
166 +
    "node_modules/@babel/helper-validator-identifier": {
167 +
      "version": "7.25.9",
168 +
      "dev": true,
169 +
      "license": "MIT",
170 +
      "engines": {
171 +
        "node": ">=6.9.0"
172 +
      }
173 +
    },
174 +
    "node_modules/@babel/helper-validator-option": {
175 +
      "version": "7.25.9",
176 +
      "dev": true,
177 +
      "license": "MIT",
178 +
      "engines": {
179 +
        "node": ">=6.9.0"
180 +
      }
181 +
    },
182 +
    "node_modules/@babel/helpers": {
183 +
      "version": "7.27.0",
184 +
      "dev": true,
185 +
      "license": "MIT",
186 +
      "dependencies": {
187 +
        "@babel/template": "^7.27.0",
188 +
        "@babel/types": "^7.27.0"
189 +
      },
190 +
      "engines": {
191 +
        "node": ">=6.9.0"
192 +
      }
193 +
    },
194 +
    "node_modules/@babel/parser": {
195 +
      "version": "7.27.0",
196 +
      "dev": true,
197 +
      "license": "MIT",
198 +
      "dependencies": {
199 +
        "@babel/types": "^7.27.0"
200 +
      },
201 +
      "bin": {
202 +
        "parser": "bin/babel-parser.js"
203 +
      },
204 +
      "engines": {
205 +
        "node": ">=6.0.0"
206 +
      }
207 +
    },
208 +
    "node_modules/@babel/plugin-transform-react-jsx-self": {
209 +
      "version": "7.25.9",
210 +
      "dev": true,
211 +
      "license": "MIT",
212 +
      "dependencies": {
213 +
        "@babel/helper-plugin-utils": "^7.25.9"
214 +
      },
215 +
      "engines": {
216 +
        "node": ">=6.9.0"
217 +
      },
218 +
      "peerDependencies": {
219 +
        "@babel/core": "^7.0.0-0"
220 +
      }
221 +
    },
222 +
    "node_modules/@babel/plugin-transform-react-jsx-source": {
223 +
      "version": "7.25.9",
224 +
      "dev": true,
225 +
      "license": "MIT",
226 +
      "dependencies": {
227 +
        "@babel/helper-plugin-utils": "^7.25.9"
228 +
      },
229 +
      "engines": {
230 +
        "node": ">=6.9.0"
231 +
      },
232 +
      "peerDependencies": {
233 +
        "@babel/core": "^7.0.0-0"
234 +
      }
235 +
    },
236 +
    "node_modules/@babel/template": {
237 +
      "version": "7.27.0",
238 +
      "dev": true,
239 +
      "license": "MIT",
240 +
      "dependencies": {
241 +
        "@babel/code-frame": "^7.26.2",
242 +
        "@babel/parser": "^7.27.0",
243 +
        "@babel/types": "^7.27.0"
244 +
      },
245 +
      "engines": {
246 +
        "node": ">=6.9.0"
247 +
      }
248 +
    },
249 +
    "node_modules/@babel/traverse": {
250 +
      "version": "7.27.0",
251 +
      "dev": true,
252 +
      "license": "MIT",
253 +
      "dependencies": {
254 +
        "@babel/code-frame": "^7.26.2",
255 +
        "@babel/generator": "^7.27.0",
256 +
        "@babel/parser": "^7.27.0",
257 +
        "@babel/template": "^7.27.0",
258 +
        "@babel/types": "^7.27.0",
259 +
        "debug": "^4.3.1",
260 +
        "globals": "^11.1.0"
261 +
      },
262 +
      "engines": {
263 +
        "node": ">=6.9.0"
264 +
      }
265 +
    },
266 +
    "node_modules/@babel/traverse/node_modules/globals": {
267 +
      "version": "11.12.0",
268 +
      "dev": true,
269 +
      "license": "MIT",
270 +
      "engines": {
271 +
        "node": ">=4"
272 +
      }
273 +
    },
274 +
    "node_modules/@babel/types": {
275 +
      "version": "7.27.0",
276 +
      "dev": true,
277 +
      "license": "MIT",
278 +
      "dependencies": {
279 +
        "@babel/helper-string-parser": "^7.25.9",
280 +
        "@babel/helper-validator-identifier": "^7.25.9"
281 +
      },
282 +
      "engines": {
283 +
        "node": ">=6.9.0"
284 +
      }
285 +
    },
286 +
    "node_modules/@esbuild/darwin-arm64": {
287 +
      "version": "0.25.2",
288 +
      "cpu": [
289 +
        "arm64"
290 +
      ],
291 +
      "license": "MIT",
292 +
      "optional": true,
293 +
      "os": [
294 +
        "darwin"
295 +
      ],
296 +
      "engines": {
297 +
        "node": ">=18"
298 +
      }
299 +
    },
300 +
    "node_modules/@eslint-community/eslint-utils": {
301 +
      "version": "4.5.1",
302 +
      "dev": true,
303 +
      "license": "MIT",
304 +
      "dependencies": {
305 +
        "eslint-visitor-keys": "^3.4.3"
306 +
      },
307 +
      "engines": {
308 +
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
309 +
      },
310 +
      "funding": {
311 +
        "url": "https://opencollective.com/eslint"
312 +
      },
313 +
      "peerDependencies": {
314 +
        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
315 +
      }
316 +
    },
317 +
    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
318 +
      "version": "3.4.3",
319 +
      "dev": true,
320 +
      "license": "Apache-2.0",
321 +
      "engines": {
322 +
        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
323 +
      },
324 +
      "funding": {
325 +
        "url": "https://opencollective.com/eslint"
326 +
      }
327 +
    },
328 +
    "node_modules/@eslint-community/regexpp": {
329 +
      "version": "4.12.1",
330 +
      "dev": true,
331 +
      "license": "MIT",
332 +
      "engines": {
333 +
        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
334 +
      }
335 +
    },
336 +
    "node_modules/@eslint/config-array": {
337 +
      "version": "0.20.0",
338 +
      "dev": true,
339 +
      "license": "Apache-2.0",
340 +
      "dependencies": {
341 +
        "@eslint/object-schema": "^2.1.6",
342 +
        "debug": "^4.3.1",
343 +
        "minimatch": "^3.1.2"
344 +
      },
345 +
      "engines": {
346 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
347 +
      }
348 +
    },
349 +
    "node_modules/@eslint/config-helpers": {
350 +
      "version": "0.2.1",
351 +
      "dev": true,
352 +
      "license": "Apache-2.0",
353 +
      "engines": {
354 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
355 +
      }
356 +
    },
357 +
    "node_modules/@eslint/core": {
358 +
      "version": "0.12.0",
359 +
      "dev": true,
360 +
      "license": "Apache-2.0",
361 +
      "dependencies": {
362 +
        "@types/json-schema": "^7.0.15"
363 +
      },
364 +
      "engines": {
365 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
366 +
      }
367 +
    },
368 +
    "node_modules/@eslint/eslintrc": {
369 +
      "version": "3.3.1",
370 +
      "dev": true,
371 +
      "license": "MIT",
372 +
      "dependencies": {
373 +
        "ajv": "^6.12.4",
374 +
        "debug": "^4.3.2",
375 +
        "espree": "^10.0.1",
376 +
        "globals": "^14.0.0",
377 +
        "ignore": "^5.2.0",
378 +
        "import-fresh": "^3.2.1",
379 +
        "js-yaml": "^4.1.0",
380 +
        "minimatch": "^3.1.2",
381 +
        "strip-json-comments": "^3.1.1"
382 +
      },
383 +
      "engines": {
384 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
385 +
      },
386 +
      "funding": {
387 +
        "url": "https://opencollective.com/eslint"
388 +
      }
389 +
    },
390 +
    "node_modules/@eslint/eslintrc/node_modules/globals": {
391 +
      "version": "14.0.0",
392 +
      "dev": true,
393 +
      "license": "MIT",
394 +
      "engines": {
395 +
        "node": ">=18"
396 +
      },
397 +
      "funding": {
398 +
        "url": "https://github.com/sponsors/sindresorhus"
399 +
      }
400 +
    },
401 +
    "node_modules/@eslint/js": {
402 +
      "version": "9.24.0",
403 +
      "dev": true,
404 +
      "license": "MIT",
405 +
      "engines": {
406 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
407 +
      }
408 +
    },
409 +
    "node_modules/@eslint/object-schema": {
410 +
      "version": "2.1.6",
411 +
      "dev": true,
412 +
      "license": "Apache-2.0",
413 +
      "engines": {
414 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
415 +
      }
416 +
    },
417 +
    "node_modules/@eslint/plugin-kit": {
418 +
      "version": "0.2.8",
419 +
      "dev": true,
420 +
      "license": "Apache-2.0",
421 +
      "dependencies": {
422 +
        "@eslint/core": "^0.13.0",
423 +
        "levn": "^0.4.1"
424 +
      },
425 +
      "engines": {
426 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
427 +
      }
428 +
    },
429 +
    "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
430 +
      "version": "0.13.0",
431 +
      "dev": true,
432 +
      "license": "Apache-2.0",
433 +
      "dependencies": {
434 +
        "@types/json-schema": "^7.0.15"
435 +
      },
436 +
      "engines": {
437 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
438 +
      }
439 +
    },
440 +
    "node_modules/@humanfs/core": {
441 +
      "version": "0.19.1",
442 +
      "dev": true,
443 +
      "license": "Apache-2.0",
444 +
      "engines": {
445 +
        "node": ">=18.18.0"
446 +
      }
447 +
    },
448 +
    "node_modules/@humanfs/node": {
449 +
      "version": "0.16.6",
450 +
      "dev": true,
451 +
      "license": "Apache-2.0",
452 +
      "dependencies": {
453 +
        "@humanfs/core": "^0.19.1",
454 +
        "@humanwhocodes/retry": "^0.3.0"
455 +
      },
456 +
      "engines": {
457 +
        "node": ">=18.18.0"
458 +
      }
459 +
    },
460 +
    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
461 +
      "version": "0.3.1",
462 +
      "dev": true,
463 +
      "license": "Apache-2.0",
464 +
      "engines": {
465 +
        "node": ">=18.18"
466 +
      },
467 +
      "funding": {
468 +
        "type": "github",
469 +
        "url": "https://github.com/sponsors/nzakas"
470 +
      }
471 +
    },
472 +
    "node_modules/@humanwhocodes/module-importer": {
473 +
      "version": "1.0.1",
474 +
      "dev": true,
475 +
      "license": "Apache-2.0",
476 +
      "engines": {
477 +
        "node": ">=12.22"
478 +
      },
479 +
      "funding": {
480 +
        "type": "github",
481 +
        "url": "https://github.com/sponsors/nzakas"
482 +
      }
483 +
    },
484 +
    "node_modules/@humanwhocodes/retry": {
485 +
      "version": "0.4.2",
486 +
      "dev": true,
487 +
      "license": "Apache-2.0",
488 +
      "engines": {
489 +
        "node": ">=18.18"
490 +
      },
491 +
      "funding": {
492 +
        "type": "github",
493 +
        "url": "https://github.com/sponsors/nzakas"
494 +
      }
495 +
    },
496 +
    "node_modules/@jridgewell/gen-mapping": {
497 +
      "version": "0.3.8",
498 +
      "dev": true,
499 +
      "license": "MIT",
500 +
      "dependencies": {
501 +
        "@jridgewell/set-array": "^1.2.1",
502 +
        "@jridgewell/sourcemap-codec": "^1.4.10",
503 +
        "@jridgewell/trace-mapping": "^0.3.24"
504 +
      },
505 +
      "engines": {
506 +
        "node": ">=6.0.0"
507 +
      }
508 +
    },
509 +
    "node_modules/@jridgewell/resolve-uri": {
510 +
      "version": "3.1.2",
511 +
      "dev": true,
512 +
      "license": "MIT",
513 +
      "engines": {
514 +
        "node": ">=6.0.0"
515 +
      }
516 +
    },
517 +
    "node_modules/@jridgewell/set-array": {
518 +
      "version": "1.2.1",
519 +
      "dev": true,
520 +
      "license": "MIT",
521 +
      "engines": {
522 +
        "node": ">=6.0.0"
523 +
      }
524 +
    },
525 +
    "node_modules/@jridgewell/sourcemap-codec": {
526 +
      "version": "1.5.0",
527 +
      "dev": true,
528 +
      "license": "MIT"
529 +
    },
530 +
    "node_modules/@jridgewell/trace-mapping": {
531 +
      "version": "0.3.25",
532 +
      "dev": true,
533 +
      "license": "MIT",
534 +
      "dependencies": {
535 +
        "@jridgewell/resolve-uri": "^3.1.0",
536 +
        "@jridgewell/sourcemap-codec": "^1.4.14"
537 +
      }
538 +
    },
539 +
    "node_modules/@nodelib/fs.scandir": {
540 +
      "version": "2.1.5",
541 +
      "dev": true,
542 +
      "license": "MIT",
543 +
      "dependencies": {
544 +
        "@nodelib/fs.stat": "2.0.5",
545 +
        "run-parallel": "^1.1.9"
546 +
      },
547 +
      "engines": {
548 +
        "node": ">= 8"
549 +
      }
550 +
    },
551 +
    "node_modules/@nodelib/fs.stat": {
552 +
      "version": "2.0.5",
553 +
      "dev": true,
554 +
      "license": "MIT",
555 +
      "engines": {
556 +
        "node": ">= 8"
557 +
      }
558 +
    },
559 +
    "node_modules/@nodelib/fs.walk": {
560 +
      "version": "1.2.8",
561 +
      "dev": true,
562 +
      "license": "MIT",
563 +
      "dependencies": {
564 +
        "@nodelib/fs.scandir": "2.1.5",
565 +
        "fastq": "^1.6.0"
566 +
      },
567 +
      "engines": {
568 +
        "node": ">= 8"
569 +
      }
570 +
    },
571 +
    "node_modules/@rollup/rollup-darwin-arm64": {
572 +
      "version": "4.39.0",
573 +
      "cpu": [
574 +
        "arm64"
575 +
      ],
576 +
      "license": "MIT",
577 +
      "optional": true,
578 +
      "os": [
579 +
        "darwin"
580 +
      ]
581 +
    },
582 +
    "node_modules/@tailwindcss/node": {
583 +
      "version": "4.1.3",
584 +
      "license": "MIT",
585 +
      "dependencies": {
586 +
        "enhanced-resolve": "^5.18.1",
587 +
        "jiti": "^2.4.2",
588 +
        "lightningcss": "1.29.2",
589 +
        "tailwindcss": "4.1.3"
590 +
      }
591 +
    },
592 +
    "node_modules/@tailwindcss/oxide": {
593 +
      "version": "4.1.3",
594 +
      "license": "MIT",
595 +
      "engines": {
596 +
        "node": ">= 10"
597 +
      },
598 +
      "optionalDependencies": {
599 +
        "@tailwindcss/oxide-android-arm64": "4.1.3",
600 +
        "@tailwindcss/oxide-darwin-arm64": "4.1.3",
601 +
        "@tailwindcss/oxide-darwin-x64": "4.1.3",
602 +
        "@tailwindcss/oxide-freebsd-x64": "4.1.3",
603 +
        "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3",
604 +
        "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3",
605 +
        "@tailwindcss/oxide-linux-arm64-musl": "4.1.3",
606 +
        "@tailwindcss/oxide-linux-x64-gnu": "4.1.3",
607 +
        "@tailwindcss/oxide-linux-x64-musl": "4.1.3",
608 +
        "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3",
609 +
        "@tailwindcss/oxide-win32-x64-msvc": "4.1.3"
610 +
      }
611 +
    },
612 +
    "node_modules/@tailwindcss/oxide-darwin-arm64": {
613 +
      "version": "4.1.3",
614 +
      "cpu": [
615 +
        "arm64"
616 +
      ],
617 +
      "license": "MIT",
618 +
      "optional": true,
619 +
      "os": [
620 +
        "darwin"
621 +
      ],
622 +
      "engines": {
623 +
        "node": ">= 10"
624 +
      }
625 +
    },
626 +
    "node_modules/@tailwindcss/vite": {
627 +
      "version": "4.1.3",
628 +
      "license": "MIT",
629 +
      "dependencies": {
630 +
        "@tailwindcss/node": "4.1.3",
631 +
        "@tailwindcss/oxide": "4.1.3",
632 +
        "tailwindcss": "4.1.3"
633 +
      },
634 +
      "peerDependencies": {
635 +
        "vite": "^5.2.0 || ^6"
636 +
      }
637 +
    },
638 +
    "node_modules/@types/babel__core": {
639 +
      "version": "7.20.5",
640 +
      "dev": true,
641 +
      "license": "MIT",
642 +
      "dependencies": {
643 +
        "@babel/parser": "^7.20.7",
644 +
        "@babel/types": "^7.20.7",
645 +
        "@types/babel__generator": "*",
646 +
        "@types/babel__template": "*",
647 +
        "@types/babel__traverse": "*"
648 +
      }
649 +
    },
650 +
    "node_modules/@types/babel__generator": {
651 +
      "version": "7.27.0",
652 +
      "dev": true,
653 +
      "license": "MIT",
654 +
      "dependencies": {
655 +
        "@babel/types": "^7.0.0"
656 +
      }
657 +
    },
658 +
    "node_modules/@types/babel__template": {
659 +
      "version": "7.4.4",
660 +
      "dev": true,
661 +
      "license": "MIT",
662 +
      "dependencies": {
663 +
        "@babel/parser": "^7.1.0",
664 +
        "@babel/types": "^7.0.0"
665 +
      }
666 +
    },
667 +
    "node_modules/@types/babel__traverse": {
668 +
      "version": "7.20.7",
669 +
      "dev": true,
670 +
      "license": "MIT",
671 +
      "dependencies": {
672 +
        "@babel/types": "^7.20.7"
673 +
      }
674 +
    },
675 +
    "node_modules/@types/estree": {
676 +
      "version": "1.0.7",
677 +
      "license": "MIT"
678 +
    },
679 +
    "node_modules/@types/json-schema": {
680 +
      "version": "7.0.15",
681 +
      "dev": true,
682 +
      "license": "MIT"
683 +
    },
684 +
    "node_modules/@types/react": {
685 +
      "version": "19.1.0",
686 +
      "dev": true,
687 +
      "license": "MIT",
688 +
      "dependencies": {
689 +
        "csstype": "^3.0.2"
690 +
      }
691 +
    },
692 +
    "node_modules/@types/react-dom": {
693 +
      "version": "19.1.2",
694 +
      "dev": true,
695 +
      "license": "MIT",
696 +
      "peerDependencies": {
697 +
        "@types/react": "^19.0.0"
698 +
      }
699 +
    },
700 +
    "node_modules/@typescript-eslint/eslint-plugin": {
701 +
      "version": "8.29.1",
702 +
      "dev": true,
703 +
      "license": "MIT",
704 +
      "dependencies": {
705 +
        "@eslint-community/regexpp": "^4.10.0",
706 +
        "@typescript-eslint/scope-manager": "8.29.1",
707 +
        "@typescript-eslint/type-utils": "8.29.1",
708 +
        "@typescript-eslint/utils": "8.29.1",
709 +
        "@typescript-eslint/visitor-keys": "8.29.1",
710 +
        "graphemer": "^1.4.0",
711 +
        "ignore": "^5.3.1",
712 +
        "natural-compare": "^1.4.0",
713 +
        "ts-api-utils": "^2.0.1"
714 +
      },
715 +
      "engines": {
716 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
717 +
      },
718 +
      "funding": {
719 +
        "type": "opencollective",
720 +
        "url": "https://opencollective.com/typescript-eslint"
721 +
      },
722 +
      "peerDependencies": {
723 +
        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
724 +
        "eslint": "^8.57.0 || ^9.0.0",
725 +
        "typescript": ">=4.8.4 <5.9.0"
726 +
      }
727 +
    },
728 +
    "node_modules/@typescript-eslint/parser": {
729 +
      "version": "8.29.1",
730 +
      "dev": true,
731 +
      "license": "MIT",
732 +
      "dependencies": {
733 +
        "@typescript-eslint/scope-manager": "8.29.1",
734 +
        "@typescript-eslint/types": "8.29.1",
735 +
        "@typescript-eslint/typescript-estree": "8.29.1",
736 +
        "@typescript-eslint/visitor-keys": "8.29.1",
737 +
        "debug": "^4.3.4"
738 +
      },
739 +
      "engines": {
740 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
741 +
      },
742 +
      "funding": {
743 +
        "type": "opencollective",
744 +
        "url": "https://opencollective.com/typescript-eslint"
745 +
      },
746 +
      "peerDependencies": {
747 +
        "eslint": "^8.57.0 || ^9.0.0",
748 +
        "typescript": ">=4.8.4 <5.9.0"
749 +
      }
750 +
    },
751 +
    "node_modules/@typescript-eslint/scope-manager": {
752 +
      "version": "8.29.1",
753 +
      "dev": true,
754 +
      "license": "MIT",
755 +
      "dependencies": {
756 +
        "@typescript-eslint/types": "8.29.1",
757 +
        "@typescript-eslint/visitor-keys": "8.29.1"
758 +
      },
759 +
      "engines": {
760 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
761 +
      },
762 +
      "funding": {
763 +
        "type": "opencollective",
764 +
        "url": "https://opencollective.com/typescript-eslint"
765 +
      }
766 +
    },
767 +
    "node_modules/@typescript-eslint/type-utils": {
768 +
      "version": "8.29.1",
769 +
      "dev": true,
770 +
      "license": "MIT",
771 +
      "dependencies": {
772 +
        "@typescript-eslint/typescript-estree": "8.29.1",
773 +
        "@typescript-eslint/utils": "8.29.1",
774 +
        "debug": "^4.3.4",
775 +
        "ts-api-utils": "^2.0.1"
776 +
      },
777 +
      "engines": {
778 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
779 +
      },
780 +
      "funding": {
781 +
        "type": "opencollective",
782 +
        "url": "https://opencollective.com/typescript-eslint"
783 +
      },
784 +
      "peerDependencies": {
785 +
        "eslint": "^8.57.0 || ^9.0.0",
786 +
        "typescript": ">=4.8.4 <5.9.0"
787 +
      }
788 +
    },
789 +
    "node_modules/@typescript-eslint/types": {
790 +
      "version": "8.29.1",
791 +
      "dev": true,
792 +
      "license": "MIT",
793 +
      "engines": {
794 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
795 +
      },
796 +
      "funding": {
797 +
        "type": "opencollective",
798 +
        "url": "https://opencollective.com/typescript-eslint"
799 +
      }
800 +
    },
801 +
    "node_modules/@typescript-eslint/typescript-estree": {
802 +
      "version": "8.29.1",
803 +
      "dev": true,
804 +
      "license": "MIT",
805 +
      "dependencies": {
806 +
        "@typescript-eslint/types": "8.29.1",
807 +
        "@typescript-eslint/visitor-keys": "8.29.1",
808 +
        "debug": "^4.3.4",
809 +
        "fast-glob": "^3.3.2",
810 +
        "is-glob": "^4.0.3",
811 +
        "minimatch": "^9.0.4",
812 +
        "semver": "^7.6.0",
813 +
        "ts-api-utils": "^2.0.1"
814 +
      },
815 +
      "engines": {
816 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
817 +
      },
818 +
      "funding": {
819 +
        "type": "opencollective",
820 +
        "url": "https://opencollective.com/typescript-eslint"
821 +
      },
822 +
      "peerDependencies": {
823 +
        "typescript": ">=4.8.4 <5.9.0"
824 +
      }
825 +
    },
826 +
    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
827 +
      "version": "2.0.1",
828 +
      "dev": true,
829 +
      "license": "MIT",
830 +
      "dependencies": {
831 +
        "balanced-match": "^1.0.0"
832 +
      }
833 +
    },
834 +
    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
835 +
      "version": "9.0.5",
836 +
      "dev": true,
837 +
      "license": "ISC",
838 +
      "dependencies": {
839 +
        "brace-expansion": "^2.0.1"
840 +
      },
841 +
      "engines": {
842 +
        "node": ">=16 || 14 >=14.17"
843 +
      },
844 +
      "funding": {
845 +
        "url": "https://github.com/sponsors/isaacs"
846 +
      }
847 +
    },
848 +
    "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
849 +
      "version": "7.7.1",
850 +
      "dev": true,
851 +
      "license": "ISC",
852 +
      "bin": {
853 +
        "semver": "bin/semver.js"
854 +
      },
855 +
      "engines": {
856 +
        "node": ">=10"
857 +
      }
858 +
    },
859 +
    "node_modules/@typescript-eslint/utils": {
860 +
      "version": "8.29.1",
861 +
      "dev": true,
862 +
      "license": "MIT",
863 +
      "dependencies": {
864 +
        "@eslint-community/eslint-utils": "^4.4.0",
865 +
        "@typescript-eslint/scope-manager": "8.29.1",
866 +
        "@typescript-eslint/types": "8.29.1",
867 +
        "@typescript-eslint/typescript-estree": "8.29.1"
868 +
      },
869 +
      "engines": {
870 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
871 +
      },
872 +
      "funding": {
873 +
        "type": "opencollective",
874 +
        "url": "https://opencollective.com/typescript-eslint"
875 +
      },
876 +
      "peerDependencies": {
877 +
        "eslint": "^8.57.0 || ^9.0.0",
878 +
        "typescript": ">=4.8.4 <5.9.0"
879 +
      }
880 +
    },
881 +
    "node_modules/@typescript-eslint/visitor-keys": {
882 +
      "version": "8.29.1",
883 +
      "dev": true,
884 +
      "license": "MIT",
885 +
      "dependencies": {
886 +
        "@typescript-eslint/types": "8.29.1",
887 +
        "eslint-visitor-keys": "^4.2.0"
888 +
      },
889 +
      "engines": {
890 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
891 +
      },
892 +
      "funding": {
893 +
        "type": "opencollective",
894 +
        "url": "https://opencollective.com/typescript-eslint"
895 +
      }
896 +
    },
897 +
    "node_modules/@vitejs/plugin-react": {
898 +
      "version": "4.3.4",
899 +
      "dev": true,
900 +
      "license": "MIT",
901 +
      "dependencies": {
902 +
        "@babel/core": "^7.26.0",
903 +
        "@babel/plugin-transform-react-jsx-self": "^7.25.9",
904 +
        "@babel/plugin-transform-react-jsx-source": "^7.25.9",
905 +
        "@types/babel__core": "^7.20.5",
906 +
        "react-refresh": "^0.14.2"
907 +
      },
908 +
      "engines": {
909 +
        "node": "^14.18.0 || >=16.0.0"
910 +
      },
911 +
      "peerDependencies": {
912 +
        "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
913 +
      }
914 +
    },
915 +
    "node_modules/acorn": {
916 +
      "version": "8.14.1",
917 +
      "dev": true,
918 +
      "license": "MIT",
919 +
      "bin": {
920 +
        "acorn": "bin/acorn"
921 +
      },
922 +
      "engines": {
923 +
        "node": ">=0.4.0"
924 +
      }
925 +
    },
926 +
    "node_modules/acorn-jsx": {
927 +
      "version": "5.3.2",
928 +
      "dev": true,
929 +
      "license": "MIT",
930 +
      "peerDependencies": {
931 +
        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
932 +
      }
933 +
    },
934 +
    "node_modules/ajv": {
935 +
      "version": "6.12.6",
936 +
      "dev": true,
937 +
      "license": "MIT",
938 +
      "dependencies": {
939 +
        "fast-deep-equal": "^3.1.1",
940 +
        "fast-json-stable-stringify": "^2.0.0",
941 +
        "json-schema-traverse": "^0.4.1",
942 +
        "uri-js": "^4.2.2"
943 +
      },
944 +
      "funding": {
945 +
        "type": "github",
946 +
        "url": "https://github.com/sponsors/epoberezkin"
947 +
      }
948 +
    },
949 +
    "node_modules/ansi-styles": {
950 +
      "version": "4.3.0",
951 +
      "dev": true,
952 +
      "license": "MIT",
953 +
      "dependencies": {
954 +
        "color-convert": "^2.0.1"
955 +
      },
956 +
      "engines": {
957 +
        "node": ">=8"
958 +
      },
959 +
      "funding": {
960 +
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
961 +
      }
962 +
    },
963 +
    "node_modules/argparse": {
964 +
      "version": "2.0.1",
965 +
      "dev": true,
966 +
      "license": "Python-2.0"
967 +
    },
968 +
    "node_modules/balanced-match": {
969 +
      "version": "1.0.2",
970 +
      "dev": true,
971 +
      "license": "MIT"
972 +
    },
973 +
    "node_modules/brace-expansion": {
974 +
      "version": "1.1.11",
975 +
      "dev": true,
976 +
      "license": "MIT",
977 +
      "dependencies": {
978 +
        "balanced-match": "^1.0.0",
979 +
        "concat-map": "0.0.1"
980 +
      }
981 +
    },
982 +
    "node_modules/braces": {
983 +
      "version": "3.0.3",
984 +
      "dev": true,
985 +
      "license": "MIT",
986 +
      "dependencies": {
987 +
        "fill-range": "^7.1.1"
988 +
      },
989 +
      "engines": {
990 +
        "node": ">=8"
991 +
      }
992 +
    },
993 +
    "node_modules/browserslist": {
994 +
      "version": "4.24.4",
995 +
      "dev": true,
996 +
      "funding": [
997 +
        {
998 +
          "type": "opencollective",
999 +
          "url": "https://opencollective.com/browserslist"
1000 +
        },
1001 +
        {
1002 +
          "type": "tidelift",
1003 +
          "url": "https://tidelift.com/funding/github/npm/browserslist"
1004 +
        },
1005 +
        {
1006 +
          "type": "github",
1007 +
          "url": "https://github.com/sponsors/ai"
1008 +
        }
1009 +
      ],
1010 +
      "license": "MIT",
1011 +
      "dependencies": {
1012 +
        "caniuse-lite": "^1.0.30001688",
1013 +
        "electron-to-chromium": "^1.5.73",
1014 +
        "node-releases": "^2.0.19",
1015 +
        "update-browserslist-db": "^1.1.1"
1016 +
      },
1017 +
      "bin": {
1018 +
        "browserslist": "cli.js"
1019 +
      },
1020 +
      "engines": {
1021 +
        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1022 +
      }
1023 +
    },
1024 +
    "node_modules/callsites": {
1025 +
      "version": "3.1.0",
1026 +
      "dev": true,
1027 +
      "license": "MIT",
1028 +
      "engines": {
1029 +
        "node": ">=6"
1030 +
      }
1031 +
    },
1032 +
    "node_modules/caniuse-lite": {
1033 +
      "version": "1.0.30001713",
1034 +
      "dev": true,
1035 +
      "funding": [
1036 +
        {
1037 +
          "type": "opencollective",
1038 +
          "url": "https://opencollective.com/browserslist"
1039 +
        },
1040 +
        {
1041 +
          "type": "tidelift",
1042 +
          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1043 +
        },
1044 +
        {
1045 +
          "type": "github",
1046 +
          "url": "https://github.com/sponsors/ai"
1047 +
        }
1048 +
      ],
1049 +
      "license": "CC-BY-4.0"
1050 +
    },
1051 +
    "node_modules/chalk": {
1052 +
      "version": "4.1.2",
1053 +
      "dev": true,
1054 +
      "license": "MIT",
1055 +
      "dependencies": {
1056 +
        "ansi-styles": "^4.1.0",
1057 +
        "supports-color": "^7.1.0"
1058 +
      },
1059 +
      "engines": {
1060 +
        "node": ">=10"
1061 +
      },
1062 +
      "funding": {
1063 +
        "url": "https://github.com/chalk/chalk?sponsor=1"
1064 +
      }
1065 +
    },
1066 +
    "node_modules/color-convert": {
1067 +
      "version": "2.0.1",
1068 +
      "dev": true,
1069 +
      "license": "MIT",
1070 +
      "dependencies": {
1071 +
        "color-name": "~1.1.4"
1072 +
      },
1073 +
      "engines": {
1074 +
        "node": ">=7.0.0"
1075 +
      }
1076 +
    },
1077 +
    "node_modules/color-name": {
1078 +
      "version": "1.1.4",
1079 +
      "dev": true,
1080 +
      "license": "MIT"
1081 +
    },
1082 +
    "node_modules/concat-map": {
1083 +
      "version": "0.0.1",
1084 +
      "dev": true,
1085 +
      "license": "MIT"
1086 +
    },
1087 +
    "node_modules/convert-source-map": {
1088 +
      "version": "2.0.0",
1089 +
      "dev": true,
1090 +
      "license": "MIT"
1091 +
    },
1092 +
    "node_modules/cross-spawn": {
1093 +
      "version": "7.0.6",
1094 +
      "dev": true,
1095 +
      "license": "MIT",
1096 +
      "dependencies": {
1097 +
        "path-key": "^3.1.0",
1098 +
        "shebang-command": "^2.0.0",
1099 +
        "which": "^2.0.1"
1100 +
      },
1101 +
      "engines": {
1102 +
        "node": ">= 8"
1103 +
      }
1104 +
    },
1105 +
    "node_modules/csstype": {
1106 +
      "version": "3.1.3",
1107 +
      "dev": true,
1108 +
      "license": "MIT"
1109 +
    },
1110 +
    "node_modules/debug": {
1111 +
      "version": "4.4.0",
1112 +
      "dev": true,
1113 +
      "license": "MIT",
1114 +
      "dependencies": {
1115 +
        "ms": "^2.1.3"
1116 +
      },
1117 +
      "engines": {
1118 +
        "node": ">=6.0"
1119 +
      },
1120 +
      "peerDependenciesMeta": {
1121 +
        "supports-color": {
1122 +
          "optional": true
1123 +
        }
1124 +
      }
1125 +
    },
1126 +
    "node_modules/deep-is": {
1127 +
      "version": "0.1.4",
1128 +
      "dev": true,
1129 +
      "license": "MIT"
1130 +
    },
1131 +
    "node_modules/detect-libc": {
1132 +
      "version": "2.0.3",
1133 +
      "license": "Apache-2.0",
1134 +
      "engines": {
1135 +
        "node": ">=8"
1136 +
      }
1137 +
    },
1138 +
    "node_modules/electron-to-chromium": {
1139 +
      "version": "1.5.136",
1140 +
      "dev": true,
1141 +
      "license": "ISC"
1142 +
    },
1143 +
    "node_modules/enhanced-resolve": {
1144 +
      "version": "5.18.1",
1145 +
      "license": "MIT",
1146 +
      "dependencies": {
1147 +
        "graceful-fs": "^4.2.4",
1148 +
        "tapable": "^2.2.0"
1149 +
      },
1150 +
      "engines": {
1151 +
        "node": ">=10.13.0"
1152 +
      }
1153 +
    },
1154 +
    "node_modules/esbuild": {
1155 +
      "version": "0.25.2",
1156 +
      "hasInstallScript": true,
1157 +
      "license": "MIT",
1158 +
      "bin": {
1159 +
        "esbuild": "bin/esbuild"
1160 +
      },
1161 +
      "engines": {
1162 +
        "node": ">=18"
1163 +
      },
1164 +
      "optionalDependencies": {
1165 +
        "@esbuild/aix-ppc64": "0.25.2",
1166 +
        "@esbuild/android-arm": "0.25.2",
1167 +
        "@esbuild/android-arm64": "0.25.2",
1168 +
        "@esbuild/android-x64": "0.25.2",
1169 +
        "@esbuild/darwin-arm64": "0.25.2",
1170 +
        "@esbuild/darwin-x64": "0.25.2",
1171 +
        "@esbuild/freebsd-arm64": "0.25.2",
1172 +
        "@esbuild/freebsd-x64": "0.25.2",
1173 +
        "@esbuild/linux-arm": "0.25.2",
1174 +
        "@esbuild/linux-arm64": "0.25.2",
1175 +
        "@esbuild/linux-ia32": "0.25.2",
1176 +
        "@esbuild/linux-loong64": "0.25.2",
1177 +
        "@esbuild/linux-mips64el": "0.25.2",
1178 +
        "@esbuild/linux-ppc64": "0.25.2",
1179 +
        "@esbuild/linux-riscv64": "0.25.2",
1180 +
        "@esbuild/linux-s390x": "0.25.2",
1181 +
        "@esbuild/linux-x64": "0.25.2",
1182 +
        "@esbuild/netbsd-arm64": "0.25.2",
1183 +
        "@esbuild/netbsd-x64": "0.25.2",
1184 +
        "@esbuild/openbsd-arm64": "0.25.2",
1185 +
        "@esbuild/openbsd-x64": "0.25.2",
1186 +
        "@esbuild/sunos-x64": "0.25.2",
1187 +
        "@esbuild/win32-arm64": "0.25.2",
1188 +
        "@esbuild/win32-ia32": "0.25.2",
1189 +
        "@esbuild/win32-x64": "0.25.2"
1190 +
      }
1191 +
    },
1192 +
    "node_modules/escalade": {
1193 +
      "version": "3.2.0",
1194 +
      "dev": true,
1195 +
      "license": "MIT",
1196 +
      "engines": {
1197 +
        "node": ">=6"
1198 +
      }
1199 +
    },
1200 +
    "node_modules/escape-string-regexp": {
1201 +
      "version": "4.0.0",
1202 +
      "dev": true,
1203 +
      "license": "MIT",
1204 +
      "engines": {
1205 +
        "node": ">=10"
1206 +
      },
1207 +
      "funding": {
1208 +
        "url": "https://github.com/sponsors/sindresorhus"
1209 +
      }
1210 +
    },
1211 +
    "node_modules/eslint": {
1212 +
      "version": "9.24.0",
1213 +
      "dev": true,
1214 +
      "license": "MIT",
1215 +
      "dependencies": {
1216 +
        "@eslint-community/eslint-utils": "^4.2.0",
1217 +
        "@eslint-community/regexpp": "^4.12.1",
1218 +
        "@eslint/config-array": "^0.20.0",
1219 +
        "@eslint/config-helpers": "^0.2.0",
1220 +
        "@eslint/core": "^0.12.0",
1221 +
        "@eslint/eslintrc": "^3.3.1",
1222 +
        "@eslint/js": "9.24.0",
1223 +
        "@eslint/plugin-kit": "^0.2.7",
1224 +
        "@humanfs/node": "^0.16.6",
1225 +
        "@humanwhocodes/module-importer": "^1.0.1",
1226 +
        "@humanwhocodes/retry": "^0.4.2",
1227 +
        "@types/estree": "^1.0.6",
1228 +
        "@types/json-schema": "^7.0.15",
1229 +
        "ajv": "^6.12.4",
1230 +
        "chalk": "^4.0.0",
1231 +
        "cross-spawn": "^7.0.6",
1232 +
        "debug": "^4.3.2",
1233 +
        "escape-string-regexp": "^4.0.0",
1234 +
        "eslint-scope": "^8.3.0",
1235 +
        "eslint-visitor-keys": "^4.2.0",
1236 +
        "espree": "^10.3.0",
1237 +
        "esquery": "^1.5.0",
1238 +
        "esutils": "^2.0.2",
1239 +
        "fast-deep-equal": "^3.1.3",
1240 +
        "file-entry-cache": "^8.0.0",
1241 +
        "find-up": "^5.0.0",
1242 +
        "glob-parent": "^6.0.2",
1243 +
        "ignore": "^5.2.0",
1244 +
        "imurmurhash": "^0.1.4",
1245 +
        "is-glob": "^4.0.0",
1246 +
        "json-stable-stringify-without-jsonify": "^1.0.1",
1247 +
        "lodash.merge": "^4.6.2",
1248 +
        "minimatch": "^3.1.2",
1249 +
        "natural-compare": "^1.4.0",
1250 +
        "optionator": "^0.9.3"
1251 +
      },
1252 +
      "bin": {
1253 +
        "eslint": "bin/eslint.js"
1254 +
      },
1255 +
      "engines": {
1256 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1257 +
      },
1258 +
      "funding": {
1259 +
        "url": "https://eslint.org/donate"
1260 +
      },
1261 +
      "peerDependencies": {
1262 +
        "jiti": "*"
1263 +
      },
1264 +
      "peerDependenciesMeta": {
1265 +
        "jiti": {
1266 +
          "optional": true
1267 +
        }
1268 +
      }
1269 +
    },
1270 +
    "node_modules/eslint-plugin-react-hooks": {
1271 +
      "version": "5.2.0",
1272 +
      "dev": true,
1273 +
      "license": "MIT",
1274 +
      "engines": {
1275 +
        "node": ">=10"
1276 +
      },
1277 +
      "peerDependencies": {
1278 +
        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
1279 +
      }
1280 +
    },
1281 +
    "node_modules/eslint-plugin-react-refresh": {
1282 +
      "version": "0.4.19",
1283 +
      "dev": true,
1284 +
      "license": "MIT",
1285 +
      "peerDependencies": {
1286 +
        "eslint": ">=8.40"
1287 +
      }
1288 +
    },
1289 +
    "node_modules/eslint-scope": {
1290 +
      "version": "8.3.0",
1291 +
      "dev": true,
1292 +
      "license": "BSD-2-Clause",
1293 +
      "dependencies": {
1294 +
        "esrecurse": "^4.3.0",
1295 +
        "estraverse": "^5.2.0"
1296 +
      },
1297 +
      "engines": {
1298 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1299 +
      },
1300 +
      "funding": {
1301 +
        "url": "https://opencollective.com/eslint"
1302 +
      }
1303 +
    },
1304 +
    "node_modules/eslint-visitor-keys": {
1305 +
      "version": "4.2.0",
1306 +
      "dev": true,
1307 +
      "license": "Apache-2.0",
1308 +
      "engines": {
1309 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1310 +
      },
1311 +
      "funding": {
1312 +
        "url": "https://opencollective.com/eslint"
1313 +
      }
1314 +
    },
1315 +
    "node_modules/espree": {
1316 +
      "version": "10.3.0",
1317 +
      "dev": true,
1318 +
      "license": "BSD-2-Clause",
1319 +
      "dependencies": {
1320 +
        "acorn": "^8.14.0",
1321 +
        "acorn-jsx": "^5.3.2",
1322 +
        "eslint-visitor-keys": "^4.2.0"
1323 +
      },
1324 +
      "engines": {
1325 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1326 +
      },
1327 +
      "funding": {
1328 +
        "url": "https://opencollective.com/eslint"
1329 +
      }
1330 +
    },
1331 +
    "node_modules/esquery": {
1332 +
      "version": "1.6.0",
1333 +
      "dev": true,
1334 +
      "license": "BSD-3-Clause",
1335 +
      "dependencies": {
1336 +
        "estraverse": "^5.1.0"
1337 +
      },
1338 +
      "engines": {
1339 +
        "node": ">=0.10"
1340 +
      }
1341 +
    },
1342 +
    "node_modules/esrecurse": {
1343 +
      "version": "4.3.0",
1344 +
      "dev": true,
1345 +
      "license": "BSD-2-Clause",
1346 +
      "dependencies": {
1347 +
        "estraverse": "^5.2.0"
1348 +
      },
1349 +
      "engines": {
1350 +
        "node": ">=4.0"
1351 +
      }
1352 +
    },
1353 +
    "node_modules/estraverse": {
1354 +
      "version": "5.3.0",
1355 +
      "dev": true,
1356 +
      "license": "BSD-2-Clause",
1357 +
      "engines": {
1358 +
        "node": ">=4.0"
1359 +
      }
1360 +
    },
1361 +
    "node_modules/esutils": {
1362 +
      "version": "2.0.3",
1363 +
      "dev": true,
1364 +
      "license": "BSD-2-Clause",
1365 +
      "engines": {
1366 +
        "node": ">=0.10.0"
1367 +
      }
1368 +
    },
1369 +
    "node_modules/fast-deep-equal": {
1370 +
      "version": "3.1.3",
1371 +
      "dev": true,
1372 +
      "license": "MIT"
1373 +
    },
1374 +
    "node_modules/fast-glob": {
1375 +
      "version": "3.3.3",
1376 +
      "dev": true,
1377 +
      "license": "MIT",
1378 +
      "dependencies": {
1379 +
        "@nodelib/fs.stat": "^2.0.2",
1380 +
        "@nodelib/fs.walk": "^1.2.3",
1381 +
        "glob-parent": "^5.1.2",
1382 +
        "merge2": "^1.3.0",
1383 +
        "micromatch": "^4.0.8"
1384 +
      },
1385 +
      "engines": {
1386 +
        "node": ">=8.6.0"
1387 +
      }
1388 +
    },
1389 +
    "node_modules/fast-glob/node_modules/glob-parent": {
1390 +
      "version": "5.1.2",
1391 +
      "dev": true,
1392 +
      "license": "ISC",
1393 +
      "dependencies": {
1394 +
        "is-glob": "^4.0.1"
1395 +
      },
1396 +
      "engines": {
1397 +
        "node": ">= 6"
1398 +
      }
1399 +
    },
1400 +
    "node_modules/fast-json-stable-stringify": {
1401 +
      "version": "2.1.0",
1402 +
      "dev": true,
1403 +
      "license": "MIT"
1404 +
    },
1405 +
    "node_modules/fast-levenshtein": {
1406 +
      "version": "2.0.6",
1407 +
      "dev": true,
1408 +
      "license": "MIT"
1409 +
    },
1410 +
    "node_modules/fastq": {
1411 +
      "version": "1.19.1",
1412 +
      "dev": true,
1413 +
      "license": "ISC",
1414 +
      "dependencies": {
1415 +
        "reusify": "^1.0.4"
1416 +
      }
1417 +
    },
1418 +
    "node_modules/file-entry-cache": {
1419 +
      "version": "8.0.0",
1420 +
      "dev": true,
1421 +
      "license": "MIT",
1422 +
      "dependencies": {
1423 +
        "flat-cache": "^4.0.0"
1424 +
      },
1425 +
      "engines": {
1426 +
        "node": ">=16.0.0"
1427 +
      }
1428 +
    },
1429 +
    "node_modules/fill-range": {
1430 +
      "version": "7.1.1",
1431 +
      "dev": true,
1432 +
      "license": "MIT",
1433 +
      "dependencies": {
1434 +
        "to-regex-range": "^5.0.1"
1435 +
      },
1436 +
      "engines": {
1437 +
        "node": ">=8"
1438 +
      }
1439 +
    },
1440 +
    "node_modules/find-up": {
1441 +
      "version": "5.0.0",
1442 +
      "dev": true,
1443 +
      "license": "MIT",
1444 +
      "dependencies": {
1445 +
        "locate-path": "^6.0.0",
1446 +
        "path-exists": "^4.0.0"
1447 +
      },
1448 +
      "engines": {
1449 +
        "node": ">=10"
1450 +
      },
1451 +
      "funding": {
1452 +
        "url": "https://github.com/sponsors/sindresorhus"
1453 +
      }
1454 +
    },
1455 +
    "node_modules/flat-cache": {
1456 +
      "version": "4.0.1",
1457 +
      "dev": true,
1458 +
      "license": "MIT",
1459 +
      "dependencies": {
1460 +
        "flatted": "^3.2.9",
1461 +
        "keyv": "^4.5.4"
1462 +
      },
1463 +
      "engines": {
1464 +
        "node": ">=16"
1465 +
      }
1466 +
    },
1467 +
    "node_modules/flatted": {
1468 +
      "version": "3.3.3",
1469 +
      "dev": true,
1470 +
      "license": "ISC"
1471 +
    },
1472 +
    "node_modules/fsevents": {
1473 +
      "version": "2.3.3",
1474 +
      "license": "MIT",
1475 +
      "optional": true,
1476 +
      "os": [
1477 +
        "darwin"
1478 +
      ],
1479 +
      "engines": {
1480 +
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1481 +
      }
1482 +
    },
1483 +
    "node_modules/gensync": {
1484 +
      "version": "1.0.0-beta.2",
1485 +
      "dev": true,
1486 +
      "license": "MIT",
1487 +
      "engines": {
1488 +
        "node": ">=6.9.0"
1489 +
      }
1490 +
    },
1491 +
    "node_modules/glob-parent": {
1492 +
      "version": "6.0.2",
1493 +
      "dev": true,
1494 +
      "license": "ISC",
1495 +
      "dependencies": {
1496 +
        "is-glob": "^4.0.3"
1497 +
      },
1498 +
      "engines": {
1499 +
        "node": ">=10.13.0"
1500 +
      }
1501 +
    },
1502 +
    "node_modules/globals": {
1503 +
      "version": "15.15.0",
1504 +
      "dev": true,
1505 +
      "license": "MIT",
1506 +
      "engines": {
1507 +
        "node": ">=18"
1508 +
      },
1509 +
      "funding": {
1510 +
        "url": "https://github.com/sponsors/sindresorhus"
1511 +
      }
1512 +
    },
1513 +
    "node_modules/graceful-fs": {
1514 +
      "version": "4.2.11",
1515 +
      "license": "ISC"
1516 +
    },
1517 +
    "node_modules/graphemer": {
1518 +
      "version": "1.4.0",
1519 +
      "dev": true,
1520 +
      "license": "MIT"
1521 +
    },
1522 +
    "node_modules/has-flag": {
1523 +
      "version": "4.0.0",
1524 +
      "dev": true,
1525 +
      "license": "MIT",
1526 +
      "engines": {
1527 +
        "node": ">=8"
1528 +
      }
1529 +
    },
1530 +
    "node_modules/ignore": {
1531 +
      "version": "5.3.2",
1532 +
      "dev": true,
1533 +
      "license": "MIT",
1534 +
      "engines": {
1535 +
        "node": ">= 4"
1536 +
      }
1537 +
    },
1538 +
    "node_modules/import-fresh": {
1539 +
      "version": "3.3.1",
1540 +
      "dev": true,
1541 +
      "license": "MIT",
1542 +
      "dependencies": {
1543 +
        "parent-module": "^1.0.0",
1544 +
        "resolve-from": "^4.0.0"
1545 +
      },
1546 +
      "engines": {
1547 +
        "node": ">=6"
1548 +
      },
1549 +
      "funding": {
1550 +
        "url": "https://github.com/sponsors/sindresorhus"
1551 +
      }
1552 +
    },
1553 +
    "node_modules/imurmurhash": {
1554 +
      "version": "0.1.4",
1555 +
      "dev": true,
1556 +
      "license": "MIT",
1557 +
      "engines": {
1558 +
        "node": ">=0.8.19"
1559 +
      }
1560 +
    },
1561 +
    "node_modules/is-extglob": {
1562 +
      "version": "2.1.1",
1563 +
      "dev": true,
1564 +
      "license": "MIT",
1565 +
      "engines": {
1566 +
        "node": ">=0.10.0"
1567 +
      }
1568 +
    },
1569 +
    "node_modules/is-glob": {
1570 +
      "version": "4.0.3",
1571 +
      "dev": true,
1572 +
      "license": "MIT",
1573 +
      "dependencies": {
1574 +
        "is-extglob": "^2.1.1"
1575 +
      },
1576 +
      "engines": {
1577 +
        "node": ">=0.10.0"
1578 +
      }
1579 +
    },
1580 +
    "node_modules/is-number": {
1581 +
      "version": "7.0.0",
1582 +
      "dev": true,
1583 +
      "license": "MIT",
1584 +
      "engines": {
1585 +
        "node": ">=0.12.0"
1586 +
      }
1587 +
    },
1588 +
    "node_modules/isexe": {
1589 +
      "version": "2.0.0",
1590 +
      "dev": true,
1591 +
      "license": "ISC"
1592 +
    },
1593 +
    "node_modules/jiti": {
1594 +
      "version": "2.4.2",
1595 +
      "license": "MIT",
1596 +
      "bin": {
1597 +
        "jiti": "lib/jiti-cli.mjs"
1598 +
      }
1599 +
    },
1600 +
    "node_modules/js-tokens": {
1601 +
      "version": "4.0.0",
1602 +
      "dev": true,
1603 +
      "license": "MIT"
1604 +
    },
1605 +
    "node_modules/js-yaml": {
1606 +
      "version": "4.1.0",
1607 +
      "dev": true,
1608 +
      "license": "MIT",
1609 +
      "dependencies": {
1610 +
        "argparse": "^2.0.1"
1611 +
      },
1612 +
      "bin": {
1613 +
        "js-yaml": "bin/js-yaml.js"
1614 +
      }
1615 +
    },
1616 +
    "node_modules/jsesc": {
1617 +
      "version": "3.1.0",
1618 +
      "dev": true,
1619 +
      "license": "MIT",
1620 +
      "bin": {
1621 +
        "jsesc": "bin/jsesc"
1622 +
      },
1623 +
      "engines": {
1624 +
        "node": ">=6"
1625 +
      }
1626 +
    },
1627 +
    "node_modules/json-buffer": {
1628 +
      "version": "3.0.1",
1629 +
      "dev": true,
1630 +
      "license": "MIT"
1631 +
    },
1632 +
    "node_modules/json-schema-traverse": {
1633 +
      "version": "0.4.1",
1634 +
      "dev": true,
1635 +
      "license": "MIT"
1636 +
    },
1637 +
    "node_modules/json-stable-stringify-without-jsonify": {
1638 +
      "version": "1.0.1",
1639 +
      "dev": true,
1640 +
      "license": "MIT"
1641 +
    },
1642 +
    "node_modules/json5": {
1643 +
      "version": "2.2.3",
1644 +
      "dev": true,
1645 +
      "license": "MIT",
1646 +
      "bin": {
1647 +
        "json5": "lib/cli.js"
1648 +
      },
1649 +
      "engines": {
1650 +
        "node": ">=6"
1651 +
      }
1652 +
    },
1653 +
    "node_modules/keyv": {
1654 +
      "version": "4.5.4",
1655 +
      "dev": true,
1656 +
      "license": "MIT",
1657 +
      "dependencies": {
1658 +
        "json-buffer": "3.0.1"
1659 +
      }
1660 +
    },
1661 +
    "node_modules/levn": {
1662 +
      "version": "0.4.1",
1663 +
      "dev": true,
1664 +
      "license": "MIT",
1665 +
      "dependencies": {
1666 +
        "prelude-ls": "^1.2.1",
1667 +
        "type-check": "~0.4.0"
1668 +
      },
1669 +
      "engines": {
1670 +
        "node": ">= 0.8.0"
1671 +
      }
1672 +
    },
1673 +
    "node_modules/lightningcss": {
1674 +
      "version": "1.29.2",
1675 +
      "license": "MPL-2.0",
1676 +
      "dependencies": {
1677 +
        "detect-libc": "^2.0.3"
1678 +
      },
1679 +
      "engines": {
1680 +
        "node": ">= 12.0.0"
1681 +
      },
1682 +
      "funding": {
1683 +
        "type": "opencollective",
1684 +
        "url": "https://opencollective.com/parcel"
1685 +
      },
1686 +
      "optionalDependencies": {
1687 +
        "lightningcss-darwin-arm64": "1.29.2",
1688 +
        "lightningcss-darwin-x64": "1.29.2",
1689 +
        "lightningcss-freebsd-x64": "1.29.2",
1690 +
        "lightningcss-linux-arm-gnueabihf": "1.29.2",
1691 +
        "lightningcss-linux-arm64-gnu": "1.29.2",
1692 +
        "lightningcss-linux-arm64-musl": "1.29.2",
1693 +
        "lightningcss-linux-x64-gnu": "1.29.2",
1694 +
        "lightningcss-linux-x64-musl": "1.29.2",
1695 +
        "lightningcss-win32-arm64-msvc": "1.29.2",
1696 +
        "lightningcss-win32-x64-msvc": "1.29.2"
1697 +
      }
1698 +
    },
1699 +
    "node_modules/lightningcss-darwin-arm64": {
1700 +
      "version": "1.29.2",
1701 +
      "cpu": [
1702 +
        "arm64"
1703 +
      ],
1704 +
      "license": "MPL-2.0",
1705 +
      "optional": true,
1706 +
      "os": [
1707 +
        "darwin"
1708 +
      ],
1709 +
      "engines": {
1710 +
        "node": ">= 12.0.0"
1711 +
      },
1712 +
      "funding": {
1713 +
        "type": "opencollective",
1714 +
        "url": "https://opencollective.com/parcel"
1715 +
      }
1716 +
    },
1717 +
    "node_modules/locate-path": {
1718 +
      "version": "6.0.0",
1719 +
      "dev": true,
1720 +
      "license": "MIT",
1721 +
      "dependencies": {
1722 +
        "p-locate": "^5.0.0"
1723 +
      },
1724 +
      "engines": {
1725 +
        "node": ">=10"
1726 +
      },
1727 +
      "funding": {
1728 +
        "url": "https://github.com/sponsors/sindresorhus"
1729 +
      }
1730 +
    },
1731 +
    "node_modules/lodash.merge": {
1732 +
      "version": "4.6.2",
1733 +
      "dev": true,
1734 +
      "license": "MIT"
1735 +
    },
1736 +
    "node_modules/lru-cache": {
1737 +
      "version": "5.1.1",
1738 +
      "dev": true,
1739 +
      "license": "ISC",
1740 +
      "dependencies": {
1741 +
        "yallist": "^3.0.2"
1742 +
      }
1743 +
    },
1744 +
    "node_modules/merge2": {
1745 +
      "version": "1.4.1",
1746 +
      "dev": true,
1747 +
      "license": "MIT",
1748 +
      "engines": {
1749 +
        "node": ">= 8"
1750 +
      }
1751 +
    },
1752 +
    "node_modules/micromatch": {
1753 +
      "version": "4.0.8",
1754 +
      "dev": true,
1755 +
      "license": "MIT",
1756 +
      "dependencies": {
1757 +
        "braces": "^3.0.3",
1758 +
        "picomatch": "^2.3.1"
1759 +
      },
1760 +
      "engines": {
1761 +
        "node": ">=8.6"
1762 +
      }
1763 +
    },
1764 +
    "node_modules/minimatch": {
1765 +
      "version": "3.1.2",
1766 +
      "dev": true,
1767 +
      "license": "ISC",
1768 +
      "dependencies": {
1769 +
        "brace-expansion": "^1.1.7"
1770 +
      },
1771 +
      "engines": {
1772 +
        "node": "*"
1773 +
      }
1774 +
    },
1775 +
    "node_modules/ms": {
1776 +
      "version": "2.1.3",
1777 +
      "dev": true,
1778 +
      "license": "MIT"
1779 +
    },
1780 +
    "node_modules/nanoid": {
1781 +
      "version": "3.3.11",
1782 +
      "funding": [
1783 +
        {
1784 +
          "type": "github",
1785 +
          "url": "https://github.com/sponsors/ai"
1786 +
        }
1787 +
      ],
1788 +
      "license": "MIT",
1789 +
      "bin": {
1790 +
        "nanoid": "bin/nanoid.cjs"
1791 +
      },
1792 +
      "engines": {
1793 +
        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1794 +
      }
1795 +
    },
1796 +
    "node_modules/natural-compare": {
1797 +
      "version": "1.4.0",
1798 +
      "dev": true,
1799 +
      "license": "MIT"
1800 +
    },
1801 +
    "node_modules/node-releases": {
1802 +
      "version": "2.0.19",
1803 +
      "dev": true,
1804 +
      "license": "MIT"
1805 +
    },
1806 +
    "node_modules/optionator": {
1807 +
      "version": "0.9.4",
1808 +
      "dev": true,
1809 +
      "license": "MIT",
1810 +
      "dependencies": {
1811 +
        "deep-is": "^0.1.3",
1812 +
        "fast-levenshtein": "^2.0.6",
1813 +
        "levn": "^0.4.1",
1814 +
        "prelude-ls": "^1.2.1",
1815 +
        "type-check": "^0.4.0",
1816 +
        "word-wrap": "^1.2.5"
1817 +
      },
1818 +
      "engines": {
1819 +
        "node": ">= 0.8.0"
1820 +
      }
1821 +
    },
1822 +
    "node_modules/p-limit": {
1823 +
      "version": "3.1.0",
1824 +
      "dev": true,
1825 +
      "license": "MIT",
1826 +
      "dependencies": {
1827 +
        "yocto-queue": "^0.1.0"
1828 +
      },
1829 +
      "engines": {
1830 +
        "node": ">=10"
1831 +
      },
1832 +
      "funding": {
1833 +
        "url": "https://github.com/sponsors/sindresorhus"
1834 +
      }
1835 +
    },
1836 +
    "node_modules/p-locate": {
1837 +
      "version": "5.0.0",
1838 +
      "dev": true,
1839 +
      "license": "MIT",
1840 +
      "dependencies": {
1841 +
        "p-limit": "^3.0.2"
1842 +
      },
1843 +
      "engines": {
1844 +
        "node": ">=10"
1845 +
      },
1846 +
      "funding": {
1847 +
        "url": "https://github.com/sponsors/sindresorhus"
1848 +
      }
1849 +
    },
1850 +
    "node_modules/parent-module": {
1851 +
      "version": "1.0.1",
1852 +
      "dev": true,
1853 +
      "license": "MIT",
1854 +
      "dependencies": {
1855 +
        "callsites": "^3.0.0"
1856 +
      },
1857 +
      "engines": {
1858 +
        "node": ">=6"
1859 +
      }
1860 +
    },
1861 +
    "node_modules/path-exists": {
1862 +
      "version": "4.0.0",
1863 +
      "dev": true,
1864 +
      "license": "MIT",
1865 +
      "engines": {
1866 +
        "node": ">=8"
1867 +
      }
1868 +
    },
1869 +
    "node_modules/path-key": {
1870 +
      "version": "3.1.1",
1871 +
      "dev": true,
1872 +
      "license": "MIT",
1873 +
      "engines": {
1874 +
        "node": ">=8"
1875 +
      }
1876 +
    },
1877 +
    "node_modules/picocolors": {
1878 +
      "version": "1.1.1",
1879 +
      "license": "ISC"
1880 +
    },
1881 +
    "node_modules/picomatch": {
1882 +
      "version": "2.3.1",
1883 +
      "dev": true,
1884 +
      "license": "MIT",
1885 +
      "engines": {
1886 +
        "node": ">=8.6"
1887 +
      },
1888 +
      "funding": {
1889 +
        "url": "https://github.com/sponsors/jonschlinkert"
1890 +
      }
1891 +
    },
1892 +
    "node_modules/postcss": {
1893 +
      "version": "8.5.3",
1894 +
      "funding": [
1895 +
        {
1896 +
          "type": "opencollective",
1897 +
          "url": "https://opencollective.com/postcss/"
1898 +
        },
1899 +
        {
1900 +
          "type": "tidelift",
1901 +
          "url": "https://tidelift.com/funding/github/npm/postcss"
1902 +
        },
1903 +
        {
1904 +
          "type": "github",
1905 +
          "url": "https://github.com/sponsors/ai"
1906 +
        }
1907 +
      ],
1908 +
      "license": "MIT",
1909 +
      "dependencies": {
1910 +
        "nanoid": "^3.3.8",
1911 +
        "picocolors": "^1.1.1",
1912 +
        "source-map-js": "^1.2.1"
1913 +
      },
1914 +
      "engines": {
1915 +
        "node": "^10 || ^12 || >=14"
1916 +
      }
1917 +
    },
1918 +
    "node_modules/prelude-ls": {
1919 +
      "version": "1.2.1",
1920 +
      "dev": true,
1921 +
      "license": "MIT",
1922 +
      "engines": {
1923 +
        "node": ">= 0.8.0"
1924 +
      }
1925 +
    },
1926 +
    "node_modules/punycode": {
1927 +
      "version": "2.3.1",
1928 +
      "dev": true,
1929 +
      "license": "MIT",
1930 +
      "engines": {
1931 +
        "node": ">=6"
1932 +
      }
1933 +
    },
1934 +
    "node_modules/queue-microtask": {
1935 +
      "version": "1.2.3",
1936 +
      "dev": true,
1937 +
      "funding": [
1938 +
        {
1939 +
          "type": "github",
1940 +
          "url": "https://github.com/sponsors/feross"
1941 +
        },
1942 +
        {
1943 +
          "type": "patreon",
1944 +
          "url": "https://www.patreon.com/feross"
1945 +
        },
1946 +
        {
1947 +
          "type": "consulting",
1948 +
          "url": "https://feross.org/support"
1949 +
        }
1950 +
      ],
1951 +
      "license": "MIT"
1952 +
    },
1953 +
    "node_modules/react": {
1954 +
      "version": "19.1.0",
1955 +
      "license": "MIT",
1956 +
      "engines": {
1957 +
        "node": ">=0.10.0"
1958 +
      }
1959 +
    },
1960 +
    "node_modules/react-dom": {
1961 +
      "version": "19.1.0",
1962 +
      "license": "MIT",
1963 +
      "dependencies": {
1964 +
        "scheduler": "^0.26.0"
1965 +
      },
1966 +
      "peerDependencies": {
1967 +
        "react": "^19.1.0"
1968 +
      }
1969 +
    },
1970 +
    "node_modules/react-refresh": {
1971 +
      "version": "0.14.2",
1972 +
      "dev": true,
1973 +
      "license": "MIT",
1974 +
      "engines": {
1975 +
        "node": ">=0.10.0"
1976 +
      }
1977 +
    },
1978 +
    "node_modules/resolve-from": {
1979 +
      "version": "4.0.0",
1980 +
      "dev": true,
1981 +
      "license": "MIT",
1982 +
      "engines": {
1983 +
        "node": ">=4"
1984 +
      }
1985 +
    },
1986 +
    "node_modules/reusify": {
1987 +
      "version": "1.1.0",
1988 +
      "dev": true,
1989 +
      "license": "MIT",
1990 +
      "engines": {
1991 +
        "iojs": ">=1.0.0",
1992 +
        "node": ">=0.10.0"
1993 +
      }
1994 +
    },
1995 +
    "node_modules/rollup": {
1996 +
      "version": "4.39.0",
1997 +
      "license": "MIT",
1998 +
      "dependencies": {
1999 +
        "@types/estree": "1.0.7"
2000 +
      },
2001 +
      "bin": {
2002 +
        "rollup": "dist/bin/rollup"
2003 +
      },
2004 +
      "engines": {
2005 +
        "node": ">=18.0.0",
2006 +
        "npm": ">=8.0.0"
2007 +
      },
2008 +
      "optionalDependencies": {
2009 +
        "@rollup/rollup-android-arm-eabi": "4.39.0",
2010 +
        "@rollup/rollup-android-arm64": "4.39.0",
2011 +
        "@rollup/rollup-darwin-arm64": "4.39.0",
2012 +
        "@rollup/rollup-darwin-x64": "4.39.0",
2013 +
        "@rollup/rollup-freebsd-arm64": "4.39.0",
2014 +
        "@rollup/rollup-freebsd-x64": "4.39.0",
2015 +
        "@rollup/rollup-linux-arm-gnueabihf": "4.39.0",
2016 +
        "@rollup/rollup-linux-arm-musleabihf": "4.39.0",
2017 +
        "@rollup/rollup-linux-arm64-gnu": "4.39.0",
2018 +
        "@rollup/rollup-linux-arm64-musl": "4.39.0",
2019 +
        "@rollup/rollup-linux-loongarch64-gnu": "4.39.0",
2020 +
        "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0",
2021 +
        "@rollup/rollup-linux-riscv64-gnu": "4.39.0",
2022 +
        "@rollup/rollup-linux-riscv64-musl": "4.39.0",
2023 +
        "@rollup/rollup-linux-s390x-gnu": "4.39.0",
2024 +
        "@rollup/rollup-linux-x64-gnu": "4.39.0",
2025 +
        "@rollup/rollup-linux-x64-musl": "4.39.0",
2026 +
        "@rollup/rollup-win32-arm64-msvc": "4.39.0",
2027 +
        "@rollup/rollup-win32-ia32-msvc": "4.39.0",
2028 +
        "@rollup/rollup-win32-x64-msvc": "4.39.0",
2029 +
        "fsevents": "~2.3.2"
2030 +
      }
2031 +
    },
2032 +
    "node_modules/run-parallel": {
2033 +
      "version": "1.2.0",
2034 +
      "dev": true,
2035 +
      "funding": [
2036 +
        {
2037 +
          "type": "github",
2038 +
          "url": "https://github.com/sponsors/feross"
2039 +
        },
2040 +
        {
2041 +
          "type": "patreon",
2042 +
          "url": "https://www.patreon.com/feross"
2043 +
        },
2044 +
        {
2045 +
          "type": "consulting",
2046 +
          "url": "https://feross.org/support"
2047 +
        }
2048 +
      ],
2049 +
      "license": "MIT",
2050 +
      "dependencies": {
2051 +
        "queue-microtask": "^1.2.2"
2052 +
      }
2053 +
    },
2054 +
    "node_modules/scheduler": {
2055 +
      "version": "0.26.0",
2056 +
      "license": "MIT"
2057 +
    },
2058 +
    "node_modules/semver": {
2059 +
      "version": "6.3.1",
2060 +
      "dev": true,
2061 +
      "license": "ISC",
2062 +
      "bin": {
2063 +
        "semver": "bin/semver.js"
2064 +
      }
2065 +
    },
2066 +
    "node_modules/shebang-command": {
2067 +
      "version": "2.0.0",
2068 +
      "dev": true,
2069 +
      "license": "MIT",
2070 +
      "dependencies": {
2071 +
        "shebang-regex": "^3.0.0"
2072 +
      },
2073 +
      "engines": {
2074 +
        "node": ">=8"
2075 +
      }
2076 +
    },
2077 +
    "node_modules/shebang-regex": {
2078 +
      "version": "3.0.0",
2079 +
      "dev": true,
2080 +
      "license": "MIT",
2081 +
      "engines": {
2082 +
        "node": ">=8"
2083 +
      }
2084 +
    },
2085 +
    "node_modules/source-map-js": {
2086 +
      "version": "1.2.1",
2087 +
      "license": "BSD-3-Clause",
2088 +
      "engines": {
2089 +
        "node": ">=0.10.0"
2090 +
      }
2091 +
    },
2092 +
    "node_modules/strip-json-comments": {
2093 +
      "version": "3.1.1",
2094 +
      "dev": true,
2095 +
      "license": "MIT",
2096 +
      "engines": {
2097 +
        "node": ">=8"
2098 +
      },
2099 +
      "funding": {
2100 +
        "url": "https://github.com/sponsors/sindresorhus"
2101 +
      }
2102 +
    },
2103 +
    "node_modules/supports-color": {
2104 +
      "version": "7.2.0",
2105 +
      "dev": true,
2106 +
      "license": "MIT",
2107 +
      "dependencies": {
2108 +
        "has-flag": "^4.0.0"
2109 +
      },
2110 +
      "engines": {
2111 +
        "node": ">=8"
2112 +
      }
2113 +
    },
2114 +
    "node_modules/tailwindcss": {
2115 +
      "version": "4.1.3",
2116 +
      "license": "MIT"
2117 +
    },
2118 +
    "node_modules/tapable": {
2119 +
      "version": "2.2.1",
2120 +
      "license": "MIT",
2121 +
      "engines": {
2122 +
        "node": ">=6"
2123 +
      }
2124 +
    },
2125 +
    "node_modules/to-regex-range": {
2126 +
      "version": "5.0.1",
2127 +
      "dev": true,
2128 +
      "license": "MIT",
2129 +
      "dependencies": {
2130 +
        "is-number": "^7.0.0"
2131 +
      },
2132 +
      "engines": {
2133 +
        "node": ">=8.0"
2134 +
      }
2135 +
    },
2136 +
    "node_modules/ts-api-utils": {
2137 +
      "version": "2.1.0",
2138 +
      "dev": true,
2139 +
      "license": "MIT",
2140 +
      "engines": {
2141 +
        "node": ">=18.12"
2142 +
      },
2143 +
      "peerDependencies": {
2144 +
        "typescript": ">=4.8.4"
2145 +
      }
2146 +
    },
2147 +
    "node_modules/type-check": {
2148 +
      "version": "0.4.0",
2149 +
      "dev": true,
2150 +
      "license": "MIT",
2151 +
      "dependencies": {
2152 +
        "prelude-ls": "^1.2.1"
2153 +
      },
2154 +
      "engines": {
2155 +
        "node": ">= 0.8.0"
2156 +
      }
2157 +
    },
2158 +
    "node_modules/typescript": {
2159 +
      "version": "5.7.3",
2160 +
      "dev": true,
2161 +
      "license": "Apache-2.0",
2162 +
      "bin": {
2163 +
        "tsc": "bin/tsc",
2164 +
        "tsserver": "bin/tsserver"
2165 +
      },
2166 +
      "engines": {
2167 +
        "node": ">=14.17"
2168 +
      }
2169 +
    },
2170 +
    "node_modules/typescript-eslint": {
2171 +
      "version": "8.29.1",
2172 +
      "dev": true,
2173 +
      "license": "MIT",
2174 +
      "dependencies": {
2175 +
        "@typescript-eslint/eslint-plugin": "8.29.1",
2176 +
        "@typescript-eslint/parser": "8.29.1",
2177 +
        "@typescript-eslint/utils": "8.29.1"
2178 +
      },
2179 +
      "engines": {
2180 +
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2181 +
      },
2182 +
      "funding": {
2183 +
        "type": "opencollective",
2184 +
        "url": "https://opencollective.com/typescript-eslint"
2185 +
      },
2186 +
      "peerDependencies": {
2187 +
        "eslint": "^8.57.0 || ^9.0.0",
2188 +
        "typescript": ">=4.8.4 <5.9.0"
2189 +
      }
2190 +
    },
2191 +
    "node_modules/update-browserslist-db": {
2192 +
      "version": "1.1.3",
2193 +
      "dev": true,
2194 +
      "funding": [
2195 +
        {
2196 +
          "type": "opencollective",
2197 +
          "url": "https://opencollective.com/browserslist"
2198 +
        },
2199 +
        {
2200 +
          "type": "tidelift",
2201 +
          "url": "https://tidelift.com/funding/github/npm/browserslist"
2202 +
        },
2203 +
        {
2204 +
          "type": "github",
2205 +
          "url": "https://github.com/sponsors/ai"
2206 +
        }
2207 +
      ],
2208 +
      "license": "MIT",
2209 +
      "dependencies": {
2210 +
        "escalade": "^3.2.0",
2211 +
        "picocolors": "^1.1.1"
2212 +
      },
2213 +
      "bin": {
2214 +
        "update-browserslist-db": "cli.js"
2215 +
      },
2216 +
      "peerDependencies": {
2217 +
        "browserslist": ">= 4.21.0"
2218 +
      }
2219 +
    },
2220 +
    "node_modules/uri-js": {
2221 +
      "version": "4.4.1",
2222 +
      "dev": true,
2223 +
      "license": "BSD-2-Clause",
2224 +
      "dependencies": {
2225 +
        "punycode": "^2.1.0"
2226 +
      }
2227 +
    },
2228 +
    "node_modules/vite": {
2229 +
      "version": "6.2.6",
2230 +
      "license": "MIT",
2231 +
      "dependencies": {
2232 +
        "esbuild": "^0.25.0",
2233 +
        "postcss": "^8.5.3",
2234 +
        "rollup": "^4.30.1"
2235 +
      },
2236 +
      "bin": {
2237 +
        "vite": "bin/vite.js"
2238 +
      },
2239 +
      "engines": {
2240 +
        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
2241 +
      },
2242 +
      "funding": {
2243 +
        "url": "https://github.com/vitejs/vite?sponsor=1"
2244 +
      },
2245 +
      "optionalDependencies": {
2246 +
        "fsevents": "~2.3.3"
2247 +
      },
2248 +
      "peerDependencies": {
2249 +
        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
2250 +
        "jiti": ">=1.21.0",
2251 +
        "less": "*",
2252 +
        "lightningcss": "^1.21.0",
2253 +
        "sass": "*",
2254 +
        "sass-embedded": "*",
2255 +
        "stylus": "*",
2256 +
        "sugarss": "*",
2257 +
        "terser": "^5.16.0",
2258 +
        "tsx": "^4.8.1",
2259 +
        "yaml": "^2.4.2"
2260 +
      },
2261 +
      "peerDependenciesMeta": {
2262 +
        "@types/node": {
2263 +
          "optional": true
2264 +
        },
2265 +
        "jiti": {
2266 +
          "optional": true
2267 +
        },
2268 +
        "less": {
2269 +
          "optional": true
2270 +
        },
2271 +
        "lightningcss": {
2272 +
          "optional": true
2273 +
        },
2274 +
        "sass": {
2275 +
          "optional": true
2276 +
        },
2277 +
        "sass-embedded": {
2278 +
          "optional": true
2279 +
        },
2280 +
        "stylus": {
2281 +
          "optional": true
2282 +
        },
2283 +
        "sugarss": {
2284 +
          "optional": true
2285 +
        },
2286 +
        "terser": {
2287 +
          "optional": true
2288 +
        },
2289 +
        "tsx": {
2290 +
          "optional": true
2291 +
        },
2292 +
        "yaml": {
2293 +
          "optional": true
2294 +
        }
2295 +
      }
2296 +
    },
2297 +
    "node_modules/which": {
2298 +
      "version": "2.0.2",
2299 +
      "dev": true,
2300 +
      "license": "ISC",
2301 +
      "dependencies": {
2302 +
        "isexe": "^2.0.0"
2303 +
      },
2304 +
      "bin": {
2305 +
        "node-which": "bin/node-which"
2306 +
      },
2307 +
      "engines": {
2308 +
        "node": ">= 8"
2309 +
      }
2310 +
    },
2311 +
    "node_modules/word-wrap": {
2312 +
      "version": "1.2.5",
2313 +
      "dev": true,
2314 +
      "license": "MIT",
2315 +
      "engines": {
2316 +
        "node": ">=0.10.0"
2317 +
      }
2318 +
    },
2319 +
    "node_modules/yallist": {
2320 +
      "version": "3.1.1",
2321 +
      "dev": true,
2322 +
      "license": "ISC"
2323 +
    },
2324 +
    "node_modules/yocto-queue": {
2325 +
      "version": "0.1.0",
2326 +
      "dev": true,
2327 +
      "license": "MIT",
2328 +
      "engines": {
2329 +
        "node": ">=10"
2330 +
      },
2331 +
      "funding": {
2332 +
        "url": "https://github.com/sponsors/sindresorhus"
2333 +
      }
2334 +
    }
2335 +
  }
2336 +
}
site/package.json (added) +33 −0
1 +
{
2 +
	"name": "darkmatter",
3 +
	"private": true,
4 +
	"version": "0.0.0",
5 +
	"type": "module",
6 +
	"scripts": {
7 +
		"dev": "vite",
8 +
		"build": "cp ../install.sh public/ && tsc -b && vite build",
9 +
		"lint": "eslint .",
10 +
		"preview": "vite preview"
11 +
	},
12 +
	"dependencies": {
13 +
		"@tailwindcss/vite": "^4.1.3",
14 +
		"react": "^19.0.0",
15 +
		"react-ascii-text": "^0.0.4",
16 +
		"react-dom": "^19.0.0",
17 +
		"tailwindcss": "^4.1.3"
18 +
	},
19 +
	"devDependencies": {
20 +
		"@eslint/js": "^9.21.0",
21 +
		"@types/figlet": "^1.7.0",
22 +
		"@types/react": "^19.0.10",
23 +
		"@types/react-dom": "^19.0.4",
24 +
		"@vitejs/plugin-react": "^4.3.4",
25 +
		"eslint": "^9.21.0",
26 +
		"eslint-plugin-react-hooks": "^5.1.0",
27 +
		"eslint-plugin-react-refresh": "^0.4.19",
28 +
		"globals": "^15.15.0",
29 +
		"typescript": "~5.7.2",
30 +
		"typescript-eslint": "^8.24.1",
31 +
		"vite": "^6.2.7"
32 +
	}
33 +
}
site/public/install.sh (added) +593 −0
1 +
#!/bin/bash
2 +
3 +
# Darkmatter Terminal Setup - Remote configuration installer
4 +
# Downloads and installs terminal configuration from GitHub
5 +
# Requires: Homebrew (https://brew.sh)
6 +
7 +
set -euo pipefail  # Exit on any error, undefined variables, and pipe failures
8 +
9 +
# Configuration - Update these URLs to match your GitHub repo
10 +
GITHUB_RAW_BASE="https://raw.githubusercontent.com/stevedylandev/darkmatter/main"
11 +
TEMP_DIR="/tmp/darkmatter_install"
12 +
DEBUG_MODE="${DEBUG:-false}"
13 +
14 +
# Colors for output
15 +
RED='\033[0;31m'
16 +
GREEN='\033[0;32m'
17 +
YELLOW='\033[1;33m'
18 +
BLUE='\033[0;34m'
19 +
PURPLE='\033[0;35m'
20 +
NC='\033[0m' # No Color
21 +
22 +
# Function to print colored output
23 +
print_status() {
24 +
    echo -e "${BLUE}[INFO]${NC} $1"
25 +
}
26 +
27 +
print_success() {
28 +
    echo -e "${GREEN}[SUCCESS]${NC} $1"
29 +
}
30 +
31 +
print_warning() {
32 +
    echo -e "${YELLOW}[WARNING]${NC} $1"
33 +
}
34 +
35 +
print_error() {
36 +
    echo -e "${RED}[ERROR]${NC} $1"
37 +
}
38 +
39 +
print_debug() {
40 +
    if [ "$DEBUG_MODE" = "true" ]; then
41 +
        echo -e "${PURPLE}[DEBUG]${NC} $1"
42 +
    fi
43 +
}
44 +
45 +
# Enhanced error handler
46 +
error_handler() {
47 +
    local line_number="$1"
48 +
    local error_code="$2"
49 +
    local command="$BASH_COMMAND"
50 +
51 +
    print_error "Script failed at line $line_number with exit code $error_code"
52 +
    print_error "Failed command: $command"
53 +
    print_error "Current function: ${FUNCNAME[1]:-main}"
54 +
55 +
    # Show some context
56 +
    if [ -f "$0" ]; then
57 +
        print_error "Context around line $line_number:"
58 +
        sed -n "$((line_number-2)),$((line_number+2))p" "$0" | nl -ba
59 +
    fi
60 +
61 +
    cleanup
62 +
    exit $error_code
63 +
}
64 +
65 +
# Set up error trap
66 +
trap 'error_handler ${LINENO} $?' ERR
67 +
68 +
# Check if required tools are available
69 +
check_dependencies() {
70 +
    print_status "Checking dependencies..."
71 +
    print_debug "Checking for brew command..."
72 +
73 +
    if ! command -v brew &> /dev/null; then
74 +
        print_error "Homebrew is not installed. Please install it first:"
75 +
        print_error "https://brew.sh"
76 +
        exit 1
77 +
    fi
78 +
    print_success "Homebrew found at: $(which brew)"
79 +
80 +
    print_debug "Checking for curl command..."
81 +
    if ! command -v curl &> /dev/null; then
82 +
        print_error "curl is not installed. Please install it first."
83 +
        exit 1
84 +
    fi
85 +
    print_success "curl found at: $(which curl)"
86 +
87 +
    print_debug "Checking curl version..."
88 +
    curl --version | head -1
89 +
}
90 +
91 +
# Create temporary directory for downloads
92 +
setup_temp_dir() {
93 +
    print_status "Setting up temporary directory..."
94 +
    print_debug "Removing existing temp dir: $TEMP_DIR"
95 +
96 +
    if [ -d "$TEMP_DIR" ]; then
97 +
        rm -rf "$TEMP_DIR" || {
98 +
            print_error "Failed to remove existing temp directory: $TEMP_DIR"
99 +
            exit 1
100 +
        }
101 +
    fi
102 +
103 +
    print_debug "Creating temp dir: $TEMP_DIR"
104 +
    mkdir -p "$TEMP_DIR" || {
105 +
        print_error "Failed to create temporary directory: $TEMP_DIR"
106 +
        exit 1
107 +
    }
108 +
109 +
    print_success "Temporary directory created: $TEMP_DIR"
110 +
    print_debug "Temp directory permissions: $(ls -ld "$TEMP_DIR")"
111 +
}
112 +
113 +
# Test GitHub connectivity
114 +
test_github_connection() {
115 +
    print_status "Testing GitHub connectivity..."
116 +
    print_debug "Testing connection to: $GITHUB_RAW_BASE"
117 +
118 +
    # Test with a simple HEAD request
119 +
    if curl -I -f -s --connect-timeout 10 --max-time 30 "$GITHUB_RAW_BASE/.zshrc" > /dev/null; then
120 +
        print_success "Successfully connected to GitHub repository"
121 +
    else
122 +
        local exit_code=$?
123 +
        print_error "Failed to connect to GitHub repository"
124 +
        print_error "URL tested: $GITHUB_RAW_BASE/.zshrc"
125 +
        print_error "curl exit code: $exit_code"
126 +
127 +
        # Try to give more specific error information
128 +
        case $exit_code in
129 +
            6) print_error "Could not resolve host - check your internet connection" ;;
130 +
            7) print_error "Failed to connect to host - check the repository URL" ;;
131 +
            22) print_error "HTTP error - the file might not exist or repository might be private" ;;
132 +
            28) print_error "Timeout - check your internet connection" ;;
133 +
            *) print_error "Unknown curl error - check the repository URL and your internet connection" ;;
134 +
        esac
135 +
136 +
        exit 1
137 +
    fi
138 +
}
139 +
140 +
# Download file from GitHub with detailed error reporting
141 +
download_file() {
142 +
    local filename="$1"
143 +
    local url="$GITHUB_RAW_BASE/$filename"
144 +
    local dest="$TEMP_DIR/$filename"
145 +
146 +
    print_status "Downloading $filename..."
147 +
    print_debug "From: $url"
148 +
    print_debug "To: $dest"
149 +
150 +
    # Create directory if needed
151 +
    local dest_dir=$(dirname "$dest")
152 +
    if [ ! -d "$dest_dir" ]; then
153 +
        mkdir -p "$dest_dir" || {
154 +
            print_error "Failed to create directory: $dest_dir"
155 +
            return 1
156 +
        }
157 +
    fi
158 +
159 +
    # Download with verbose error reporting
160 +
    local curl_output
161 +
    curl_output=$(curl -L -f -s -w "HTTP_CODE:%{http_code};SIZE:%{size_download};TIME:%{time_total}" -o "$dest" "$url" 2>&1) || {
162 +
        local exit_code=$?
163 +
        print_error "Failed to download $filename"
164 +
        print_error "URL: $url"
165 +
        print_error "curl exit code: $exit_code"
166 +
        print_error "curl output: $curl_output"
167 +
        return 1
168 +
    }
169 +
170 +
    print_debug "curl response: $curl_output"
171 +
172 +
    # Verify file was downloaded and has content
173 +
    if [ ! -f "$dest" ]; then
174 +
        print_error "File was not created: $dest"
175 +
        return 1
176 +
    fi
177 +
178 +
    local file_size=$(wc -c < "$dest" 2>/dev/null || echo "0")
179 +
    if [ "$file_size" -eq 0 ]; then
180 +
        print_error "Downloaded file is empty: $filename"
181 +
        return 1
182 +
    fi
183 +
184 +
    print_success "Downloaded $filename (${file_size} bytes)"
185 +
    print_debug "File content preview:"
186 +
    if [ "$DEBUG_MODE" = "true" ]; then
187 +
        head -3 "$dest" || true
188 +
    fi
189 +
190 +
    return 0
191 +
}
192 +
193 +
# Download all configuration files
194 +
download_configs() {
195 +
    print_status "Downloading configuration files from GitHub..."
196 +
197 +
    local files=(
198 +
        ".zshrc"
199 +
        "config"
200 +
        "starship.toml"
201 +
    )
202 +
203 +
    local success_count=0
204 +
    local total_files=${#files[@]}
205 +
206 +
    print_debug "Starting download loop for ${total_files} files"
207 +
208 +
    for file in "${files[@]}"; do
209 +
        print_debug "=== Processing file $((success_count + 1))/$total_files: $file ==="
210 +
        print_status "Attempting to download: $file"
211 +
212 +
        # Disable error exit temporarily for this specific operation
213 +
        set +e
214 +
        download_file "$file"
215 +
        local download_result=$?
216 +
        set -e
217 +
218 +
        print_debug "Download result for $file: $download_result"
219 +
220 +
        if [ $download_result -eq 0 ]; then
221 +
            success_count=$((success_count + 1))
222 +
            print_success "Successfully downloaded: $file (count: $success_count)"
223 +
        else
224 +
            print_error "Failed to download $file (exit code: $download_result)"
225 +
            print_error "This will cause installation issues"
226 +
            # Continue with other files to see what we can get
227 +
        fi
228 +
229 +
        print_debug "Completed processing $file, moving to next file"
230 +
    done
231 +
232 +
    print_debug "Download loop completed"
233 +
    print_status "Downloaded $success_count/$total_files configuration files"
234 +
235 +
    if [ $success_count -eq $total_files ]; then
236 +
        print_success "All configuration files downloaded successfully"
237 +
    else
238 +
        print_error "Failed to download some configuration files ($success_count/$total_files succeeded)"
239 +
        print_error "Installation cannot continue without all config files"
240 +
241 +
        # Show what files we do have
242 +
        print_status "Files in temp directory:"
243 +
        ls -la "$TEMP_DIR" || true
244 +
245 +
        exit 1
246 +
    fi
247 +
}
248 +
249 +
# Download and install font
250 +
download_and_install_font() {
251 +
    print_status "Downloading CommitMono Nerd Font..."
252 +
253 +
    local font_filename="CommitMonoNerdFont-Regular.otf"
254 +
    local font_url="$GITHUB_RAW_BASE/assets/$font_filename"
255 +
    local font_dest="$TEMP_DIR/$font_filename"
256 +
257 +
    print_debug "Font download URL: $font_url"
258 +
259 +
    # Create assets subdirectory in temp
260 +
    mkdir -p "$TEMP_DIR/assets"
261 +
    font_dest="$TEMP_DIR/assets/$font_filename"
262 +
263 +
    if curl -L -f -s -w "HTTP_CODE:%{http_code};SIZE:%{size_download}" -o "$font_dest" "$font_url" 2>/dev/null; then
264 +
        local file_size=$(wc -c < "$font_dest" 2>/dev/null || echo "0")
265 +
        print_success "Downloaded CommitMono Nerd Font (${file_size} bytes)"
266 +
267 +
        # Verify it's actually a font file (should be reasonably large)
268 +
        if [ "$file_size" -lt 10000 ]; then
269 +
            print_warning "Font file seems too small, might be an error page"
270 +
            print_debug "Font file content preview:"
271 +
            if [ "$DEBUG_MODE" = "true" ]; then
272 +
                head -3 "$font_dest" || true
273 +
            fi
274 +
        fi
275 +
    else
276 +
        print_warning "Failed to download font from $font_url"
277 +
        print_warning "Continuing without font installation..."
278 +
        return 1
279 +
    fi
280 +
281 +
    # Install the font
282 +
    print_status "Installing CommitMono Nerd Font..."
283 +
284 +
    local user_fonts_dir="$HOME/Library/Fonts"
285 +
    print_debug "Font installation directory: $user_fonts_dir"
286 +
287 +
    if [ ! -d "$user_fonts_dir" ]; then
288 +
        mkdir -p "$user_fonts_dir" || {
289 +
            print_error "Failed to create fonts directory: $user_fonts_dir"
290 +
            return 1
291 +
        }
292 +
    fi
293 +
294 +
    local dest_file="$user_fonts_dir/$font_filename"
295 +
296 +
    if [ -f "$dest_file" ]; then
297 +
        print_warning "Font $font_filename already installed, skipping"
298 +
    else
299 +
        cp "$font_dest" "$dest_file" || {
300 +
            print_error "Failed to copy font to $dest_file"
301 +
            return 1
302 +
        }
303 +
        print_success "Installed font: $font_filename"
304 +
305 +
        # Clear font cache on macOS
306 +
        print_status "Refreshing font cache..."
307 +
        if command -v atsutil &> /dev/null; then
308 +
            sudo atsutil databases -remove 2>/dev/null || print_debug "atsutil databases -remove failed"
309 +
            atsutil server -shutdown 2>/dev/null || print_debug "atsutil server -shutdown failed"
310 +
            atsutil server -ping 2>/dev/null || print_debug "atsutil server -ping failed"
311 +
        else
312 +
            print_debug "atsutil not found, skipping font cache refresh"
313 +
        fi
314 +
315 +
        print_success "Font installation complete!"
316 +
        print_status "You may need to restart applications to see the new font"
317 +
    fi
318 +
}
319 +
320 +
# Install packages via Homebrew with better error handling
321 +
install_packages() {
322 +
    print_status "Installing packages via Homebrew..."
323 +
324 +
    local packages=(
325 +
        "zsh"
326 +
        "zsh-autosuggestions"
327 +
        "zsh-syntax-highlighting"
328 +
        "starship"
329 +
        "eza"
330 +
        "zoxide"
331 +
    )
332 +
333 +
    local cask_packages=(
334 +
        "ghostty"
335 +
    )
336 +
337 +
    # Update Homebrew first
338 +
    print_status "Updating Homebrew..."
339 +
    brew update || print_warning "Homebrew update failed, continuing anyway..."
340 +
341 +
    # Install regular packages
342 +
    for package in "${packages[@]}"; do
343 +
        print_status "Installing $package..."
344 +
        print_debug "Checking if $package is already installed..."
345 +
346 +
        if brew list "$package" &>/dev/null; then
347 +
            print_warning "$package is already installed"
348 +
        else
349 +
            print_debug "Installing $package with brew..."
350 +
            if brew install "$package"; then
351 +
                print_success "Installed $package"
352 +
            else
353 +
                print_error "Failed to install $package"
354 +
                # Don't exit, try to continue with other packages
355 +
            fi
356 +
        fi
357 +
    done
358 +
359 +
    # Install cask packages
360 +
    for package in "${cask_packages[@]}"; do
361 +
        print_status "Installing $package (cask)..."
362 +
        print_debug "Checking if cask $package is already installed..."
363 +
364 +
        if brew list --cask "$package" &>/dev/null; then
365 +
            print_warning "$package is already installed"
366 +
        else
367 +
            print_debug "Installing cask $package with brew..."
368 +
            if brew install --cask "$package"; then
369 +
                print_success "Installed $package"
370 +
            else
371 +
                print_warning "Failed to install $package (cask) - this might not be critical"
372 +
                # Ghostty might not be available, but don't fail the whole script
373 +
            fi
374 +
        fi
375 +
    done
376 +
}
377 +
378 +
# Backup existing config files
379 +
backup_configs() {
380 +
    print_status "Backing up existing configuration files..."
381 +
382 +
    local timestamp=$(date +%Y%m%d_%H%M%S)
383 +
    local backup_dir="$HOME/.config_backup_$timestamp"
384 +
385 +
    print_debug "Backup directory: $backup_dir"
386 +
387 +
    mkdir -p "$backup_dir" || {
388 +
        print_error "Failed to create backup directory: $backup_dir"
389 +
        exit 1
390 +
    }
391 +
392 +
    local backed_up=false
393 +
394 +
    if [ -f "$HOME/.zshrc" ]; then
395 +
        cp "$HOME/.zshrc" "$backup_dir/" && {
396 +
            print_success "Backed up .zshrc to $backup_dir"
397 +
            backed_up=true
398 +
        } || print_warning "Failed to backup .zshrc"
399 +
    fi
400 +
401 +
    if [ -f "$HOME/.config/ghostty/config" ]; then
402 +
        mkdir -p "$backup_dir/.config/ghostty"
403 +
        cp "$HOME/.config/ghostty/config" "$backup_dir/.config/ghostty/" && {
404 +
            print_success "Backed up ghostty config to $backup_dir"
405 +
            backed_up=true
406 +
        } || print_warning "Failed to backup ghostty config"
407 +
    fi
408 +
409 +
    if [ -f "$HOME/.config/starship.toml" ]; then
410 +
        mkdir -p "$backup_dir/.config"
411 +
        cp "$HOME/.config/starship.toml" "$backup_dir/.config/" && {
412 +
            print_success "Backed up starship.toml to $backup_dir"
413 +
            backed_up=true
414 +
        } || print_warning "Failed to backup starship.toml"
415 +
    fi
416 +
417 +
    if [ "$backed_up" = false ]; then
418 +
        print_status "No existing configuration files to backup"
419 +
        rmdir "$backup_dir" 2>/dev/null || true
420 +
    fi
421 +
}
422 +
423 +
# Copy downloaded configuration files to their destinations
424 +
install_configs() {
425 +
    print_status "Installing configuration files..."
426 +
427 +
    local install_errors=0
428 +
429 +
    # Install .zshrc
430 +
    if [ -f "$TEMP_DIR/.zshrc" ]; then
431 +
        print_debug "Installing .zshrc to $HOME/"
432 +
        if cp "$TEMP_DIR/.zshrc" "$HOME/"; then
433 +
            print_success "Installed .zshrc"
434 +
        else
435 +
            print_error "Failed to install .zshrc"
436 +
            ((install_errors++))
437 +
        fi
438 +
    else
439 +
        print_error ".zshrc not found in downloaded files: $TEMP_DIR/.zshrc"
440 +
        ((install_errors++))
441 +
    fi
442 +
443 +
    # Install ghostty config
444 +
    if [ -f "$TEMP_DIR/config" ]; then
445 +
        print_debug "Installing ghostty config to $HOME/.config/ghostty/"
446 +
        mkdir -p "$HOME/.config/ghostty"
447 +
        if cp "$TEMP_DIR/config" "$HOME/.config/ghostty/"; then
448 +
            print_success "Installed Ghostty config"
449 +
        else
450 +
            print_error "Failed to install Ghostty config"
451 +
            ((install_errors++))
452 +
        fi
453 +
    else
454 +
        print_error "Ghostty config not found in downloaded files: $TEMP_DIR/config"
455 +
        ((install_errors++))
456 +
    fi
457 +
458 +
    # Install starship config
459 +
    if [ -f "$TEMP_DIR/starship.toml" ]; then
460 +
        print_debug "Installing starship config to $HOME/.config/"
461 +
        mkdir -p "$HOME/.config"
462 +
        if cp "$TEMP_DIR/starship.toml" "$HOME/.config/"; then
463 +
            print_success "Installed starship.toml"
464 +
        else
465 +
            print_error "Failed to install starship.toml"
466 +
            ((install_errors++))
467 +
        fi
468 +
    else
469 +
        print_error "starship.toml not found in downloaded files: $TEMP_DIR/starship.toml"
470 +
        ((install_errors++))
471 +
    fi
472 +
473 +
    if [ $install_errors -gt 0 ]; then
474 +
        print_error "$install_errors configuration files failed to install"
475 +
        exit 1
476 +
    fi
477 +
}
478 +
479 +
# Set zsh as default shell
480 +
set_default_shell() {
481 +
    print_status "Checking default shell..."
482 +
483 +
    local current_shell="${SHELL}"
484 +
    local zsh_path
485 +
    zsh_path=$(which zsh) || {
486 +
        print_error "zsh not found in PATH"
487 +
        exit 1
488 +
    }
489 +
490 +
    print_debug "Current shell: $current_shell"
491 +
    print_debug "zsh path: $zsh_path"
492 +
493 +
    if [ "$current_shell" != "$zsh_path" ]; then
494 +
        print_status "Setting zsh as default shell..."
495 +
496 +
        # Add zsh to /etc/shells if not present
497 +
        if ! grep -q "$zsh_path" /etc/shells 2>/dev/null; then
498 +
            print_debug "Adding $zsh_path to /etc/shells"
499 +
            echo "$zsh_path" | sudo tee -a /etc/shells > /dev/null || {
500 +
                print_error "Failed to add zsh to /etc/shells"
501 +
                exit 1
502 +
            }
503 +
        fi
504 +
505 +
        # Change default shell
506 +
        print_debug "Changing default shell to $zsh_path"
507 +
        if chsh -s "$zsh_path"; then
508 +
            print_success "Default shell set to zsh"
509 +
            print_warning "Please restart your terminal or run 'exec zsh' to use the new shell"
510 +
        else
511 +
            print_error "Failed to change default shell"
512 +
            exit 1
513 +
        fi
514 +
    else
515 +
        print_success "zsh is already the default shell"
516 +
    fi
517 +
}
518 +
519 +
# Cleanup temporary files
520 +
cleanup() {
521 +
    if [ -d "$TEMP_DIR" ]; then
522 +
        print_debug "Cleaning up temporary files from: $TEMP_DIR"
523 +
        rm -rf "$TEMP_DIR" || print_warning "Failed to clean up temporary directory"
524 +
        print_success "Cleanup complete"
525 +
    fi
526 +
}
527 +
528 +
# Show debug information
529 +
show_debug_info() {
530 +
    if [ "$DEBUG_MODE" = "true" ]; then
531 +
        print_debug "=== Debug Information ==="
532 +
        print_debug "Script: $0"
533 +
        print_debug "Working directory: $(pwd)"
534 +
        print_debug "User: $USER"
535 +
        print_debug "Home: $HOME"
536 +
        print_debug "Shell: $SHELL"
537 +
        print_debug "PATH: $PATH"
538 +
        print_debug "GitHub base URL: $GITHUB_RAW_BASE"
539 +
        print_debug "Temp directory: $TEMP_DIR"
540 +
        print_debug "========================="
541 +
    fi
542 +
}
543 +
544 +
# Main installation function
545 +
main() {
546 +
    echo "🌑 Darkmatter Setup Installer (Remote)"
547 +
    echo "======================================"
548 +
    echo
549 +
550 +
    # Enable debug mode if requested
551 +
    if [ "${1:-}" = "--debug" ] || [ "${1:-}" = "-d" ]; then
552 +
        DEBUG_MODE="true"
553 +
        print_status "Debug mode enabled"
554 +
    fi
555 +
556 +
    show_debug_info
557 +
558 +
    # Check if GITHUB_RAW_BASE needs to be updated
559 +
    if [[ "$GITHUB_RAW_BASE" == *"your-username/your-repo"* ]]; then
560 +
        print_error "Please update the GITHUB_RAW_BASE variable in this script"
561 +
        print_error "Set it to your actual GitHub repository URL"
562 +
        print_error "Example: https://raw.githubusercontent.com/username/repo-name/main"
563 +
        exit 1
564 +
    fi
565 +
566 +
    print_status "Starting installation process..."
567 +
568 +
    check_dependencies
569 +
    setup_temp_dir
570 +
    test_github_connection
571 +
    download_configs
572 +
    download_and_install_font
573 +
    install_packages
574 +
    backup_configs
575 +
    install_configs
576 +
    set_default_shell
577 +
    cleanup
578 +
579 +
    echo
580 +
    print_success "Installation complete! 🌌"
581 +
    echo
582 +
    print_status "Next steps:"
583 +
    echo "  1. Restart your terminal or run: exec zsh"
584 +
    echo "  2. Open Ghostty to use your new terminal setup"
585 +
    echo "  3. Enjoy your Darkmatter terminal experience!"
586 +
    echo
587 +
}
588 +
589 +
# Handle script interruption
590 +
trap cleanup EXIT
591 +
592 +
# Run main function with all arguments
593 +
main "$@"
site/public/logo.png (added) +0 −0

Binary file — no preview.

site/public/logo.svg (added) +4 −0
1 +
<svg width="261" height="261" viewBox="0 0 261 261" fill="none" xmlns="http://www.w3.org/2000/svg">
2 +
<path d="M191.853 130.413C191.853 146.708 185.38 162.336 173.858 173.858C162.336 185.38 146.708 191.853 130.413 191.853C114.118 191.853 98.4909 185.38 86.9687 173.858C75.4465 162.336 68.9734 146.708 68.9734 130.413C68.9734 114.118 75.4465 98.4909 86.9687 86.9687C98.4909 75.4465 114.118 68.9734 130.413 68.9734C146.708 68.9734 162.336 75.4465 173.858 86.9687C185.38 98.4909 191.853 114.118 191.853 130.413Z" stroke="#ffffff" stroke-width="13.6533" stroke-linecap="round" stroke-linejoin="round"/>
3 +
<path d="M212.079 38.5975C207.282 43.0101 204.434 49.1478 204.162 55.6601C203.89 62.1725 206.217 68.5261 210.629 73.3233C215.042 78.1205 221.179 80.9684 227.692 81.2403C234.204 81.5122 240.558 79.186 245.355 74.7733C250.152 70.3607 253 64.223 253.272 57.7107C253.544 51.1983 251.218 44.8447 246.805 40.0475C242.392 35.2503 236.255 32.4024 229.742 32.1305C223.23 31.8586 216.876 34.1848 212.079 38.5975ZM212.079 38.5975C189.607 18.5475 160.53 7.48742 130.413 7.53347C62.5467 7.53347 7.53345 62.5468 7.53345 130.413C7.53345 198.28 62.5467 253.293 130.413 253.293C198.28 253.293 253.293 198.28 253.293 130.413C253.293 126.26 253.088 122.164 252.679 118.125" stroke="#ffffff" stroke-width="13.6533" stroke-linecap="round" stroke-linejoin="round"/>
4 +
</svg>
site/src/App.tsx (added) +13 −0
1 +
import { Copy } from "./components/copy";
2 +
3 +
function App() {
4 +
	return (
5 +
		<main className="flex flex-col min-h-screen w-full items-center justify-center gap-12 bg-[#121113] text-white">
6 +
			<h1 className="text-7xl font-mono">DARKMATTER</h1>
7 +
			<p className="font-mono">An opinionated terminal setup with Ghostty</p>
8 +
			<Copy />
9 +
		</main>
10 +
	);
11 +
}
12 +
13 +
export default App;
site/src/assets/react.svg (added) +1 −0
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>
site/src/components/copy.tsx (added) +65 −0
1 +
import { useState } from "react";
2 +
3 +
export function Copy() {
4 +
	const [copied, setCopied] = useState(false);
5 +
6 +
	const copyToClipboard = async () => {
7 +
		try {
8 +
			await navigator.clipboard.writeText("bun create bhvr@latest");
9 +
			setCopied(true);
10 +
			setTimeout(() => setCopied(false), 2000);
11 +
		} catch (err) {
12 +
			console.error("Failed to copy:", err);
13 +
		}
14 +
	};
15 +
16 +
	return (
17 +
		<div className="max-w-lg w-full">
18 +
			<div className="relative rounded-lg bg-zinc-800 p-4 overflow-hidden">
19 +
				<pre className="text-sm font-mono">
20 +
					<code>curl -sSL https://darkmatter.build/install.sh | bash</code>
21 +
				</pre>
22 +
				<button
23 +
					type="button"
24 +
					className="absolute top-2.5 right-2 rounded-md p-2 hover:bg-zinc-200 dark:hover:bg-zinc-700 focus:outline-none"
25 +
					onClick={copyToClipboard}
26 +
				>
27 +
					{copied ? (
28 +
						<svg
29 +
							xmlns="http://www.w3.org/2000/svg"
30 +
							width="16"
31 +
							height="16"
32 +
							viewBox="0 0 24 24"
33 +
							fill="none"
34 +
							stroke="currentColor"
35 +
							strokeWidth="2"
36 +
							strokeLinecap="round"
37 +
							strokeLinejoin="round"
38 +
							className="h-4 w-4"
39 +
						>
40 +
							<title>Copy</title>
41 +
							<polyline points="20 6 9 17 4 12"></polyline>
42 +
						</svg>
43 +
					) : (
44 +
						<svg
45 +
							xmlns="http://www.w3.org/2000/svg"
46 +
							width="16"
47 +
							height="16"
48 +
							viewBox="0 0 24 24"
49 +
							fill="none"
50 +
							stroke="currentColor"
51 +
							strokeWidth="2"
52 +
							strokeLinecap="round"
53 +
							strokeLinejoin="round"
54 +
							className="h-4 w-4"
55 +
						>
56 +
							<title>Copy</title>
57 +
							<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
58 +
							<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
59 +
						</svg>
60 +
					)}
61 +
				</button>
62 +
			</div>
63 +
		</div>
64 +
	);
65 +
}
site/src/index.css (added) +1 −0
1 +
@import "tailwindcss";
site/src/main.tsx (added) +10 −0
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 +
)
site/src/vite-env.d.ts (added) +1 −0
1 +
/// <reference types="vite/client" />
site/tsconfig.app.json (added) +26 −0
1 +
{
2 +
  "compilerOptions": {
3 +
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4 +
    "target": "ES2020",
5 +
    "useDefineForClassFields": true,
6 +
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
7 +
    "module": "ESNext",
8 +
    "skipLibCheck": true,
9 +
10 +
    /* Bundler mode */
11 +
    "moduleResolution": "bundler",
12 +
    "allowImportingTsExtensions": true,
13 +
    "isolatedModules": true,
14 +
    "moduleDetection": "force",
15 +
    "noEmit": true,
16 +
    "jsx": "react-jsx",
17 +
18 +
    /* Linting */
19 +
    "strict": true,
20 +
    "noUnusedLocals": true,
21 +
    "noUnusedParameters": true,
22 +
    "noFallthroughCasesInSwitch": true,
23 +
    "noUncheckedSideEffectImports": true
24 +
  },
25 +
  "include": ["src"]
26 +
}
site/tsconfig.json (added) +7 −0
1 +
{
2 +
  "files": [],
3 +
  "references": [
4 +
    { "path": "./tsconfig.app.json" },
5 +
    { "path": "./tsconfig.node.json" }
6 +
  ]
7 +
}
site/tsconfig.node.json (added) +24 −0
1 +
{
2 +
  "compilerOptions": {
3 +
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4 +
    "target": "ES2022",
5 +
    "lib": ["ES2023"],
6 +
    "module": "ESNext",
7 +
    "skipLibCheck": true,
8 +
9 +
    /* Bundler mode */
10 +
    "moduleResolution": "bundler",
11 +
    "allowImportingTsExtensions": true,
12 +
    "isolatedModules": true,
13 +
    "moduleDetection": "force",
14 +
    "noEmit": true,
15 +
16 +
    /* Linting */
17 +
    "strict": true,
18 +
    "noUnusedLocals": true,
19 +
    "noUnusedParameters": true,
20 +
    "noFallthroughCasesInSwitch": true,
21 +
    "noUncheckedSideEffectImports": true
22 +
  },
23 +
  "include": ["vite.config.ts"]
24 +
}
site/vite.config.ts (added) +9 −0
1 +
import { defineConfig } from 'vite'
2 +
import react from '@vitejs/plugin-react'
3 +
import tailwindcss from '@tailwindcss/vite'
4 +
5 +
6 +
// https://vite.dev/config/
7 +
export default defineConfig({
8 +
  plugins: [react(), tailwindcss()],
9 +
})