From 423a0ba959160c6c98cc3710bb3a1d217bd4983d Mon Sep 17 00:00:00 2001 From: Jan Trencansky Date: Sat, 22 Nov 2025 12:07:34 -0500 Subject: [PATCH] Initial commit --- .gitignore | 2 + README.md | 34 + index.html | 15 + package-lock.json | 2726 ++++++++++++++++++++++++++++++++ package.json | 25 + src/App.tsx | 126 ++ src/api/config.json | 5 + src/api/game/game.ts | 41 + src/api/game/types.ts | 26 + src/api/inventory/inventory.ts | 45 + src/api/inventory/types.ts | 27 + src/api/state/state.ts | 15 + src/api/tools.ts | 41 + src/api/workbench/types.ts | 12 + src/api/workbench/workbench.ts | 20 + src/consts.ts | 3 + src/helpers.ts | 3 + src/index.css | 2 + src/index.tsx | 16 + src/services/car/car.ts | 23 + src/services/game/game.ts | 55 + src/services/home/home.ts | 50 + src/services/player/player.ts | 23 + src/store/actions.ts | 21 + src/store/car/actions.ts | 21 + src/store/car/car.ts | 28 + src/store/car/index.ts | 3 + src/store/car/state.ts | 7 + src/store/game/actions.ts | 38 + src/store/game/game.ts | 43 + src/store/game/index.ts | 3 + src/store/game/state.ts | 8 + src/store/home/actions.ts | 41 + src/store/home/home.ts | 54 + src/store/home/index.ts | 3 + src/store/home/state.ts | 10 + src/store/loading/actions.ts | 12 + src/store/loading/index.ts | 3 + src/store/loading/loading.ts | 20 + src/store/loading/state.ts | 6 + src/store/player/actions.ts | 24 + src/store/player/index.ts | 3 + src/store/player/player.ts | 36 + src/store/player/state.ts | 10 + src/store/reducers.ts | 19 + src/store/state.ts | 52 + src/store/state/company.ts | 59 + src/store/state/connector.ts | 31 + src/store/state/cpu.ts | 34 + src/store/state/gpu.ts | 39 + src/store/state/item.ts | 214 +++ src/store/state/location.ts | 7 + src/store/state/memory.ts | 53 + src/store/state/motherboard.ts | 6 + src/store/state/software.ts | 13 + src/store/state/storage.ts | 57 + src/store/state/types.ts | 38 + src/store/types.ts | 15 + tsconfig.json | 20 + vite.config.ts | 13 + 60 files changed, 4399 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/App.tsx create mode 100644 src/api/config.json create mode 100644 src/api/game/game.ts create mode 100644 src/api/game/types.ts create mode 100644 src/api/inventory/inventory.ts create mode 100644 src/api/inventory/types.ts create mode 100644 src/api/state/state.ts create mode 100644 src/api/tools.ts create mode 100644 src/api/workbench/types.ts create mode 100644 src/api/workbench/workbench.ts create mode 100644 src/consts.ts create mode 100644 src/helpers.ts create mode 100644 src/index.css create mode 100644 src/index.tsx create mode 100644 src/services/car/car.ts create mode 100644 src/services/game/game.ts create mode 100644 src/services/home/home.ts create mode 100644 src/services/player/player.ts create mode 100644 src/store/actions.ts create mode 100644 src/store/car/actions.ts create mode 100644 src/store/car/car.ts create mode 100644 src/store/car/index.ts create mode 100644 src/store/car/state.ts create mode 100644 src/store/game/actions.ts create mode 100644 src/store/game/game.ts create mode 100644 src/store/game/index.ts create mode 100644 src/store/game/state.ts create mode 100644 src/store/home/actions.ts create mode 100644 src/store/home/home.ts create mode 100644 src/store/home/index.ts create mode 100644 src/store/home/state.ts create mode 100644 src/store/loading/actions.ts create mode 100644 src/store/loading/index.ts create mode 100644 src/store/loading/loading.ts create mode 100644 src/store/loading/state.ts create mode 100644 src/store/player/actions.ts create mode 100644 src/store/player/index.ts create mode 100644 src/store/player/player.ts create mode 100644 src/store/player/state.ts create mode 100644 src/store/reducers.ts create mode 100644 src/store/state.ts create mode 100644 src/store/state/company.ts create mode 100644 src/store/state/connector.ts create mode 100644 src/store/state/cpu.ts create mode 100644 src/store/state/gpu.ts create mode 100644 src/store/state/item.ts create mode 100644 src/store/state/location.ts create mode 100644 src/store/state/memory.ts create mode 100644 src/store/state/motherboard.ts create mode 100644 src/store/state/software.ts create mode 100644 src/store/state/storage.ts create mode 100644 src/store/state/types.ts create mode 100644 src/store/types.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6a17645 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +## Usage + +Those templates dependencies are maintained via [pnpm](https://pnpm.io) via `pnpm up -Lri`. + +This is the reason you see a `pnpm-lock.yaml`. That being said, any package manager will work. This file can be safely be removed once you clone a template. + +```bash +$ npm install # or pnpm install or yarn install +``` + +### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) + +## Available Scripts + +In the project directory, you can run: + +### `npm run dev` or `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+ +### `npm run build` + +Builds the app for production to the `dist` folder.
+It correctly bundles Solid in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +## Deployment + +You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.) diff --git a/index.html b/index.html new file mode 100644 index 0000000..1905a04 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + Solid App + + + +
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4fd5802 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2726 @@ +{ + "name": "vite-template-solid", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vite-template-solid", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "daisyui": "^5.5.5", + "solid-js": "^1.9.9" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.1.17", + "solid-devtools": "^0.34.3", + "tailwindcss": "^4.1.17", + "typescript": "^5.9.2", + "vite": "^7.1.4", + "vite-plugin-solid": "^2.11.8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nothing-but/utils": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@nothing-but/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@solid-devtools/debugger": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@solid-devtools/debugger/-/debugger-0.28.1.tgz", + "integrity": "sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nothing-but/utils": "~0.17.0", + "@solid-devtools/shared": "^0.20.0", + "@solid-primitives/bounds": "^0.1.1", + "@solid-primitives/event-listener": "^2.4.1", + "@solid-primitives/keyboard": "^1.3.1", + "@solid-primitives/rootless": "^1.5.1", + "@solid-primitives/scheduled": "^1.5.1", + "@solid-primitives/static-store": "^0.1.1", + "@solid-primitives/utils": "^6.3.1" + }, + "peerDependencies": { + "solid-js": "^1.9.0" + } + }, + "node_modules/@solid-devtools/shared": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@solid-devtools/shared/-/shared-0.20.0.tgz", + "integrity": "sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nothing-but/utils": "~0.17.0", + "@solid-primitives/event-listener": "^2.4.1", + "@solid-primitives/media": "^2.3.1", + "@solid-primitives/refs": "^1.1.1", + "@solid-primitives/rootless": "^1.5.1", + "@solid-primitives/scheduled": "^1.5.1", + "@solid-primitives/static-store": "^0.1.1", + "@solid-primitives/styles": "^0.1.1", + "@solid-primitives/utils": "^6.3.1" + }, + "peerDependencies": { + "solid-js": "^1.9.0" + } + }, + "node_modules/@solid-primitives/bounds": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@solid-primitives/bounds/-/bounds-0.1.3.tgz", + "integrity": "sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.3", + "@solid-primitives/resize-observer": "^2.1.3", + "@solid-primitives/static-store": "^0.1.2", + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/event-listener": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.4.3.tgz", + "integrity": "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/keyboard": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@solid-primitives/keyboard/-/keyboard-1.3.3.tgz", + "integrity": "sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.3", + "@solid-primitives/rootless": "^1.5.2", + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/media": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@solid-primitives/media/-/media-2.3.3.tgz", + "integrity": "sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.3", + "@solid-primitives/rootless": "^1.5.2", + "@solid-primitives/static-store": "^0.1.2", + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/refs/-/refs-1.1.2.tgz", + "integrity": "sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/resize-observer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@solid-primitives/resize-observer/-/resize-observer-2.1.3.tgz", + "integrity": "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.3", + "@solid-primitives/rootless": "^1.5.2", + "@solid-primitives/static-store": "^0.1.2", + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/rootless": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/rootless/-/rootless-1.5.2.tgz", + "integrity": "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/scheduled": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/scheduled/-/scheduled-1.5.2.tgz", + "integrity": "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/static-store": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/static-store/-/static-store-0.1.2.tgz", + "integrity": "sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/styles": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/styles/-/styles-0.1.2.tgz", + "integrity": "sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solid-primitives/rootless": "^1.5.2", + "@solid-primitives/utils": "^6.3.2" + }, + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@solid-primitives/utils": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@solid-primitives/utils/-/utils-6.3.2.tgz", + "integrity": "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.17.tgz", + "integrity": "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.17" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.17.tgz", + "integrity": "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-x64": "4.1.17", + "@tailwindcss/oxide-freebsd-x64": "4.1.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-x64-musl": "4.1.17", + "@tailwindcss/oxide-wasm32-wasi": "4.1.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.17" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz", + "integrity": "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz", + "integrity": "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz", + "integrity": "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz", + "integrity": "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz", + "integrity": "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz", + "integrity": "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz", + "integrity": "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz", + "integrity": "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz", + "integrity": "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz", + "integrity": "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.6.0", + "@emnapi/runtime": "^1.6.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz", + "integrity": "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz", + "integrity": "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.17.tgz", + "integrity": "sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.17", + "@tailwindcss/oxide": "4.1.17", + "tailwindcss": "4.1.17" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.40.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.40.3.tgz", + "integrity": "sha512-5HOwwt0BYiv/zxl7j8Pf2bGL6rDXfV6nUhLs8ygBX+EFJXzBPHM/euj9j/6deMZ6wa52Wb2PBaAV5U/jKwIY1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.20.12" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.9.10.tgz", + "integrity": "sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.40.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "solid-js": "^1.9.10" + }, + "peerDependenciesMeta": { + "solid-js": { + "optional": true + } + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz", + "integrity": "sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001756", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", + "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/daisyui": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.5.5.tgz", + "integrity": "sha512-ekvI93ZkWIJoCOtDl0D2QMxnWvTejk9V5nWBqRv+7t0xjiBXqAK5U6o6JE2RPvlIC3EqwNyUoIZSdHX9MZK3nw==", + "license": "MIT", + "funding": { + "url": "https://github.com/saadeghi/daisyui?sponsor=1" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.259", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz", + "integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/merge-anything": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seroval": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", + "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", + "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/solid-devtools": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/solid-devtools/-/solid-devtools-0.34.4.tgz", + "integrity": "sha512-/s/pPTLvTkuXGZhLfsuvp7ge/cdpEwrUPoRwoJPYgz74GTUSb5Ozi2V6Z6HkO0ILT7hXB04j16HbH1aaP5VFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.6", + "@solid-devtools/debugger": "^0.28.1", + "@solid-devtools/shared": "^0.20.0" + }, + "peerDependencies": { + "solid-js": "^1.9.0", + "vite": "^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/solid-js": { + "version": "1.9.10", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", + "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0", + "seroval": "~1.3.0", + "seroval-plugins": "~1.3.0" + } + }, + "node_modules/solid-refresh": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.6.3.tgz", + "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.23.6", + "@babel/helper-module-imports": "^7.22.15", + "@babel/types": "^7.23.6" + }, + "peerDependencies": { + "solid-js": "^1.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", + "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", + "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-solid": { + "version": "2.11.10", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.11.10.tgz", + "integrity": "sha512-Yr1dQybmtDtDAHkii6hXuc1oVH9CPcS/Zb2jN/P36qqcrkNnVPsMTzQ06jyzFPFjj3U1IYKMVt/9ZqcwGCEbjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.3", + "@types/babel__core": "^7.20.4", + "babel-preset-solid": "^1.8.4", + "merge-anything": "^5.1.7", + "solid-refresh": "^0.6.3", + "vitefu": "^1.0.4" + }, + "peerDependencies": { + "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*", + "solid-js": "^1.7.2", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@testing-library/jest-dom": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9ae219e --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "vite-template-solid", + "version": "0.0.0", + "description": "", + "type": "module", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "vite build", + "serve": "vite preview" + }, + "license": "MIT", + "devDependencies": { + "@tailwindcss/vite": "^4.1.17", + "solid-devtools": "^0.34.3", + "tailwindcss": "^4.1.17", + "typescript": "^5.9.2", + "vite": "^7.1.4", + "vite-plugin-solid": "^2.11.8" + }, + "dependencies": { + "daisyui": "^5.5.5", + "solid-js": "^1.9.9" + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..2bcc330 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,126 @@ +import { onMount, type Component } from "solid-js"; +import { dispatch, state } from "./store/state"; +import { AllInventories } from "./helpers"; + +const App: Component = () => { + onMount(() => { + dispatch({ type: "FETCH_TIME_START" }); + }); + + const onStop = () => { + dispatch({ type: "STOP_SERVER_START" }); + }; + + const onLoad = () => { + dispatch({ type: "LOAD_GAME_START" }); + }; + + const onSave = () => { + dispatch({ type: "SAVE_GAME_START" }); + }; + + const onLoadAll = () => { + dispatch({ type: "FETCH_PLAYER_START" }); + dispatch({ type: "FETCH_CAR_START" }); + dispatch({ type: "FETCH_HOME_START" }); + }; + + const moveItem = (id: number, source: AllInventories) => { + let destination: AllInventories = "player"; + + const random = Math.random(); + if (random <= 0.25) { + destination = "player"; + } else if (random <= 0.5) { + destination = "car"; + } else if (random <= 0.75) { + destination = "home"; + } else if (random <= 1.0) { + destination = "workbench"; + } + + dispatch({ + type: "MOVE_INVENTORY_START", + payload: { + id: id, + source: source, + destination: destination, + }, + }); + }; + + return ( +
+

Game Time: {state.game.time}

+

Player Name: {state.player.name}

+
+

Player Inventory:

+
+ {state.player.inventory.items.map((item, index) => ( +
moveItem(index, "player")} + > + {item.name} +
+ ))} +
+
+

Car Inventory:

+
+ {state.car.inventory.items.map((item, index) => ( +
moveItem(index, "car")} + > + {item.name} +
+ ))} +
+
+

Home Inventory:

+
+ {state.home.inventory.items.map((item, index) => ( +
moveItem(index, "home")} + > + {item.name} +
+ ))} +
+
+

Workbench Devices:

+
+ {state.home.workbench.devices.map((item, index) => ( +
moveItem(index, "workbench")} + > + {item.name} +
+ ))} +
+
+
+ +
+ +
+ +
+ +
+
+ ); +}; + +export default App; diff --git a/src/api/config.json b/src/api/config.json new file mode 100644 index 0000000..3edaec3 --- /dev/null +++ b/src/api/config.json @@ -0,0 +1,5 @@ +{ + "schema": "http", + "url": "localhost", + "port": 2142 +} diff --git a/src/api/game/game.ts b/src/api/game/game.ts new file mode 100644 index 0000000..5a2d293 --- /dev/null +++ b/src/api/game/game.ts @@ -0,0 +1,41 @@ +import { callApi, HTTP } from "../tools"; +import { + IGameCarResponse, + IGameHomeResponse, + IGamePlayerResponse, + IGameTimeResponse, +} from "./types"; + +async function fetchTimeApi(): Promise { + const data = await callApi(HTTP.GET, "game/time"); + + return { + time: data, + }; +} + +async function fetchPlayerApi(): Promise { + const data = await callApi(HTTP.GET, "game/player"); + + return { + player: data, + }; +} + +async function fetchCarApi(): Promise { + const data = await callApi(HTTP.GET, "game/car"); + + return { + car: data, + }; +} + +async function fetchHomeApi(): Promise { + const data = await callApi(HTTP.GET, "game/home"); + + return { + home: data, + }; +} + +export { fetchTimeApi, fetchPlayerApi, fetchCarApi, fetchHomeApi }; diff --git a/src/api/game/types.ts b/src/api/game/types.ts new file mode 100644 index 0000000..a948dec --- /dev/null +++ b/src/api/game/types.ts @@ -0,0 +1,26 @@ +import { ICarState } from "../../store/car"; +import { IHomeState } from "../../store/home"; +import { IPlayerState } from "../../store/player"; + +interface IGameTimeResponse { + time: number; +} + +interface IGamePlayerResponse { + player: IPlayerState; +} + +interface IGameCarResponse { + car: ICarState; +} + +interface IGameHomeResponse { + home: IHomeState; +} + +export { + type IGameTimeResponse, + type IGamePlayerResponse, + type IGameCarResponse, + type IGameHomeResponse, +}; diff --git a/src/api/inventory/inventory.ts b/src/api/inventory/inventory.ts new file mode 100644 index 0000000..8007921 --- /dev/null +++ b/src/api/inventory/inventory.ts @@ -0,0 +1,45 @@ +import { callApi, HTTP } from "../tools"; +import { + IInventoryCarResponse, + IInventoryHomeResponse, + IInventoryPlayerResponse, + IInventoryMoveRequest, +} from "./types"; + +async function fetchPlayerInventoryApi(): Promise { + const data = await callApi(HTTP.GET, "inventory/player"); + + return { + inventory: data, + }; +} + +async function fetchCarInventoryApi(): Promise { + const data = await callApi(HTTP.GET, "inventory/car"); + + return { + inventory: data, + }; +} + +async function fetchHomeInventoryApi(): Promise { + const data = await callApi(HTTP.GET, "inventory/home"); + + return { + inventory: data, + }; +} + +async function moveInventoryApi(request: IInventoryMoveRequest) { + await callApi(HTTP.POST, `inventory/move/${request.id}`, { + source: request.source, + destination: request.destination, + }); +} + +export { + fetchPlayerInventoryApi, + fetchCarInventoryApi, + fetchHomeInventoryApi, + moveInventoryApi, +}; diff --git a/src/api/inventory/types.ts b/src/api/inventory/types.ts new file mode 100644 index 0000000..a13ece8 --- /dev/null +++ b/src/api/inventory/types.ts @@ -0,0 +1,27 @@ +import { AllInventories } from "../../helpers"; +import { IInventory } from "../../store/state/types"; + +interface IInventoryPlayerResponse { + inventory: IInventory; +} + +interface IInventoryCarResponse { + inventory: IInventory; +} + +interface IInventoryHomeResponse { + inventory: IInventory; +} + +interface IInventoryMoveRequest { + id: number; + source: AllInventories; + destination: AllInventories; +} + +export { + type IInventoryPlayerResponse, + type IInventoryCarResponse, + type IInventoryHomeResponse, + type IInventoryMoveRequest, +}; diff --git a/src/api/state/state.ts b/src/api/state/state.ts new file mode 100644 index 0000000..2fb27a0 --- /dev/null +++ b/src/api/state/state.ts @@ -0,0 +1,15 @@ +import { callApi, HTTP } from "../tools"; + +async function stopServerApi() { + await callApi(HTTP.GET, "state/stop"); +} + +async function loadGameApi() { + await callApi(HTTP.GET, "state/load"); +} + +async function saveGameApi() { + await callApi(HTTP.GET, "state/save"); +} + +export { stopServerApi, loadGameApi, saveGameApi }; diff --git a/src/api/tools.ts b/src/api/tools.ts new file mode 100644 index 0000000..ed8725e --- /dev/null +++ b/src/api/tools.ts @@ -0,0 +1,41 @@ +import config from "./config.json"; + +enum HTTP { + GET, + POST, +} + +async function callApi(type: HTTP, path: string, body?: any) { + let response: Response; + switch (type) { + case HTTP.GET: + response = await fetch( + `${config.schema}://${config.url}:${config.port}/${path}`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }, + ); + break; + case HTTP.POST: + response = await fetch( + `${config.schema}://${config.url}:${config.port}/${path}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(body ?? {}), + }, + ); + break; + } + + const data = await response.json(); + + return data; +} + +export { callApi, HTTP }; diff --git a/src/api/workbench/types.ts b/src/api/workbench/types.ts new file mode 100644 index 0000000..6e92800 --- /dev/null +++ b/src/api/workbench/types.ts @@ -0,0 +1,12 @@ +import { IItem } from "../../store/state/item"; +import { IWorkbench } from "../../store/state/types"; + +interface IWorkbenchResponse { + workbench: IWorkbench; +} + +interface IWorkbenchDevicesResponse { + devices: IItem[]; +} + +export { type IWorkbenchResponse, type IWorkbenchDevicesResponse }; diff --git a/src/api/workbench/workbench.ts b/src/api/workbench/workbench.ts new file mode 100644 index 0000000..3acb964 --- /dev/null +++ b/src/api/workbench/workbench.ts @@ -0,0 +1,20 @@ +import { callApi, HTTP } from "../tools"; +import { IWorkbenchResponse, IWorkbenchDevicesResponse } from "./types"; + +async function fetchWorkbenchApi(): Promise { + const data = await callApi(HTTP.GET, "workbench"); + + return { + workbench: data, + }; +} + +async function fetchWorkbenchDevicesApi(): Promise { + const data = await callApi(HTTP.GET, "workbench/devices"); + + return { + devices: data, + }; +} + +export { fetchWorkbenchApi, fetchWorkbenchDevicesApi }; diff --git a/src/consts.ts b/src/consts.ts new file mode 100644 index 0000000..ece065e --- /dev/null +++ b/src/consts.ts @@ -0,0 +1,3 @@ +const WORKBENCH_SIZE = 999; + +export { WORKBENCH_SIZE }; diff --git a/src/helpers.ts b/src/helpers.ts new file mode 100644 index 0000000..5d6c569 --- /dev/null +++ b/src/helpers.ts @@ -0,0 +1,3 @@ +type AllInventories = "player" | "car" | "home" | "workbench"; + +export { type AllInventories }; diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..4c1b0c2 --- /dev/null +++ b/src/index.css @@ -0,0 +1,2 @@ +@import "tailwindcss"; +@plugin "daisyui"; diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..7eb57dd --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,16 @@ +/* @refresh reload */ +import './index.css'; +import { render } from 'solid-js/web'; +import 'solid-devtools'; + +import App from './App'; + +const root = document.getElementById('root'); + +if (import.meta.env.DEV && !(root instanceof HTMLElement)) { + throw new Error( + 'Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?', + ); +} + +render(() => , root!); diff --git a/src/services/car/car.ts b/src/services/car/car.ts new file mode 100644 index 0000000..ab09bef --- /dev/null +++ b/src/services/car/car.ts @@ -0,0 +1,23 @@ +import { fetchCarApi } from "../../api/game/game"; +import { fetchCarInventoryApi } from "../../api/inventory/inventory"; +import { dispatch } from "../../store/state"; + +async function fetchCar() { + const data = await fetchCarApi(); + + dispatch({ + type: "FETCH_CAR_FINISH", + payload: data.car, + }); +} + +async function fetchCarInventory() { + const data = await fetchCarInventoryApi(); + + dispatch({ + type: "FETCH_CAR_INVENTORY_FINISH", + payload: data.inventory, + }); +} + +export { fetchCar, fetchCarInventory }; diff --git a/src/services/game/game.ts b/src/services/game/game.ts new file mode 100644 index 0000000..07ce200 --- /dev/null +++ b/src/services/game/game.ts @@ -0,0 +1,55 @@ +import { fetchTimeApi } from "../../api/game/game"; +import { moveInventoryApi } from "../../api/inventory/inventory"; +import { IInventoryMoveRequest } from "../../api/inventory/types"; +import { loadGameApi, saveGameApi, stopServerApi } from "../../api/state/state"; +import { dispatch } from "../../store/state"; + +async function stopServer() { + await stopServerApi(); + + dispatch({ type: "STOP_SERVER_FINISH" }); +} + +async function loadGame() { + await loadGameApi(); + + dispatch({ type: "LOAD_GAME_FINISH" }); + dispatch({ type: "FETCH_TIME_START" }); +} + +async function saveGame() { + await saveGameApi(); + + dispatch({ type: "SAVE_GAME_FINISH" }); +} + +async function fetchTime() { + const data = await fetchTimeApi(); + + dispatch({ + type: "FETCH_TIME_FINISH", + payload: data.time, + }); +} + +async function moveInventory(payload: IInventoryMoveRequest) { + await moveInventoryApi(payload); + + dispatch({ + type: "MOVE_INVENTORY_FINISH", + }); + dispatch({ + type: "FETCH_PLAYER_INVENTORY_START", + }); + dispatch({ + type: "FETCH_CAR_INVENTORY_START", + }); + dispatch({ + type: "FETCH_HOME_INVENTORY_START", + }); + dispatch({ + type: "FETCH_HOME_WORKBENCH_DEVICES_START", + }); +} + +export { stopServer, loadGame, saveGame, fetchTime, moveInventory }; diff --git a/src/services/home/home.ts b/src/services/home/home.ts new file mode 100644 index 0000000..2c199ff --- /dev/null +++ b/src/services/home/home.ts @@ -0,0 +1,50 @@ +import { fetchHomeApi } from "../../api/game/game"; +import { fetchHomeInventoryApi } from "../../api/inventory/inventory"; +import { + fetchWorkbenchApi, + fetchWorkbenchDevicesApi, +} from "../../api/workbench/workbench"; +import { dispatch } from "../../store/state"; + +async function fetchHome() { + const data = await fetchHomeApi(); + + dispatch({ + type: "FETCH_HOME_FINISH", + payload: data.home, + }); +} + +async function fetchHomeInventory() { + const data = await fetchHomeInventoryApi(); + + dispatch({ + type: "FETCH_HOME_INVENTORY_FINISH", + payload: data.inventory, + }); +} + +async function fetchHomeWorkbench() { + const data = await fetchWorkbenchApi(); + + dispatch({ + type: "FETCH_HOME_WORKBENCH_FINISH", + payload: data.workbench, + }); +} + +async function fetchHomeWorkbenchDevices() { + const data = await fetchWorkbenchDevicesApi(); + + dispatch({ + type: "FETCH_HOME_WORKBENCH_DEVICES_FINISH", + payload: data.devices, + }); +} + +export { + fetchHome, + fetchHomeInventory, + fetchHomeWorkbench, + fetchHomeWorkbenchDevices, +}; diff --git a/src/services/player/player.ts b/src/services/player/player.ts new file mode 100644 index 0000000..fcd4920 --- /dev/null +++ b/src/services/player/player.ts @@ -0,0 +1,23 @@ +import { fetchPlayerApi } from "../../api/game/game"; +import { fetchPlayerInventoryApi } from "../../api/inventory/inventory"; +import { dispatch } from "../../store/state"; + +async function fetchPlayer() { + const data = await fetchPlayerApi(); + + dispatch({ + type: "FETCH_PLAYER_FINISH", + payload: data.player, + }); +} + +async function fetchPlayerInventory() { + const data = await fetchPlayerInventoryApi(); + + dispatch({ + type: "FETCH_PLAYER_INVENTORY_FINISH", + payload: data.inventory, + }); +} + +export { fetchPlayer, fetchPlayerInventory }; diff --git a/src/store/actions.ts b/src/store/actions.ts new file mode 100644 index 0000000..cb7bcf9 --- /dev/null +++ b/src/store/actions.ts @@ -0,0 +1,21 @@ +import { CarAction, CarActionTypes } from "./car"; +import { GameAction, GameActionTypes } from "./game"; +import { HomeAction, HomeActionTypes } from "./home"; +import { LoadingAction, LoadingActionTypes } from "./loading"; +import { PlayerAction, PlayerActionTypes } from "./player"; + +type ActionTypes = + | LoadingActionTypes + | GameActionTypes + | PlayerActionTypes + | HomeActionTypes + | CarActionTypes; + +type Action = + | LoadingAction + | GameAction + | PlayerAction + | HomeAction + | CarAction; + +export { type Action, type ActionTypes }; diff --git a/src/store/car/actions.ts b/src/store/car/actions.ts new file mode 100644 index 0000000..7c5dab2 --- /dev/null +++ b/src/store/car/actions.ts @@ -0,0 +1,21 @@ +import { IInventory } from "../state/types"; +import { ICarState } from "./state"; + +type FETCH_CAR_START = "FETCH_CAR_START"; +type FETCH_CAR_FINISH = "FETCH_CAR_FINISH"; +type FETCH_CAR_INVENTORY_START = "FETCH_CAR_INVENTORY_START"; +type FETCH_CAR_INVENTORY_FINISH = "FETCH_CAR_INVENTORY_FINISH"; + +type CarActionTypes = + | FETCH_CAR_START + | FETCH_CAR_FINISH + | FETCH_CAR_INVENTORY_START + | FETCH_CAR_INVENTORY_FINISH; + +type CarAction = + | { type: FETCH_CAR_START } + | { type: FETCH_CAR_FINISH; payload: ICarState } + | { type: FETCH_CAR_INVENTORY_START } + | { type: FETCH_CAR_INVENTORY_FINISH; payload: IInventory }; + +export { type CarActionTypes, type CarAction }; diff --git a/src/store/car/car.ts b/src/store/car/car.ts new file mode 100644 index 0000000..49d72a6 --- /dev/null +++ b/src/store/car/car.ts @@ -0,0 +1,28 @@ +import { fetchCar, fetchCarInventory } from "../../services/car/car"; +import { CarAction } from "./actions"; +import { ICarState } from "./state"; + +function carReducer(state: ICarState, action: CarAction): ICarState { + switch (action.type) { + case "FETCH_CAR_START": + fetchCar(); + return state; + case "FETCH_CAR_FINISH": + return { + ...state, + inventory: action.payload.inventory, + }; + case "FETCH_CAR_INVENTORY_START": + fetchCarInventory(); + return state; + case "FETCH_CAR_INVENTORY_FINISH": + return { + ...state, + inventory: action.payload, + }; + default: + return state; + } +} + +export { carReducer }; diff --git a/src/store/car/index.ts b/src/store/car/index.ts new file mode 100644 index 0000000..15196a9 --- /dev/null +++ b/src/store/car/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./state"; +export * from "./car"; diff --git a/src/store/car/state.ts b/src/store/car/state.ts new file mode 100644 index 0000000..5ad4fd3 --- /dev/null +++ b/src/store/car/state.ts @@ -0,0 +1,7 @@ +import { IInventory } from "../state/types"; + +interface ICarState { + inventory: IInventory; +} + +export { type ICarState }; diff --git a/src/store/game/actions.ts b/src/store/game/actions.ts new file mode 100644 index 0000000..2d20692 --- /dev/null +++ b/src/store/game/actions.ts @@ -0,0 +1,38 @@ +import { IInventoryMoveRequest } from "../../api/inventory/types"; + +type STOP_SERVER_START = "STOP_SERVER_START"; +type STOP_SERVER_FINISH = "STOP_SERVER_FINISH"; +type LOAD_GAME_START = "LOAD_GAME_START"; +type LOAD_GAME_FINISH = "LOAD_GAME_FINISH"; +type SAVE_GAME_START = "SAVE_GAME_START"; +type SAVE_GAME_FINISH = "SAVE_GAME_FINISH"; +type FETCH_TIME_START = "FETCH_TIME_START"; +type FETCH_TIME_FINISH = "FETCH_TIME_FINISH"; +type MOVE_INVENTORY_START = "MOVE_INVENTORY_START"; +type MOVE_INVENTORY_FINISH = "MOVE_INVENTORY_FINISH"; + +type GameActionTypes = + | STOP_SERVER_START + | STOP_SERVER_FINISH + | LOAD_GAME_START + | LOAD_GAME_FINISH + | SAVE_GAME_START + | SAVE_GAME_FINISH + | FETCH_TIME_START + | FETCH_TIME_FINISH + | MOVE_INVENTORY_START + | MOVE_INVENTORY_FINISH; + +type GameAction = + | { type: STOP_SERVER_START } + | { type: STOP_SERVER_FINISH } + | { type: LOAD_GAME_START } + | { type: LOAD_GAME_FINISH } + | { type: SAVE_GAME_START } + | { type: SAVE_GAME_FINISH } + | { type: FETCH_TIME_START } + | { type: FETCH_TIME_FINISH; payload: number } + | { type: MOVE_INVENTORY_START; payload: IInventoryMoveRequest } + | { type: MOVE_INVENTORY_FINISH }; + +export { type GameActionTypes, type GameAction }; diff --git a/src/store/game/game.ts b/src/store/game/game.ts new file mode 100644 index 0000000..a924a46 --- /dev/null +++ b/src/store/game/game.ts @@ -0,0 +1,43 @@ +import { + fetchTime, + loadGame, + moveInventory, + saveGame, + stopServer, +} from "../../services/game/game"; +import { GameAction } from "./actions"; +import { IGameState } from "./state"; + +function gameReducer(state: IGameState, action: GameAction): IGameState { + switch (action.type) { + case "STOP_SERVER_START": + stopServer(); + return { ...state, stopping: true }; + case "STOP_SERVER_FINISH": + return { ...state, stopping: false }; + case "LOAD_GAME_START": + loadGame(); + return { ...state, loading: true }; + case "LOAD_GAME_FINISH": + return { ...state, loading: false }; + case "SAVE_GAME_START": + saveGame(); + return { ...state, saving: true }; + case "SAVE_GAME_FINISH": + return { ...state, saving: false }; + case "FETCH_TIME_START": + fetchTime(); + return { ...state, stopping: true }; + case "FETCH_TIME_FINISH": + return { ...state, time: action.payload }; + case "MOVE_INVENTORY_START": + moveInventory(action.payload); + return state; + case "MOVE_INVENTORY_FINISH": + return state; + default: + return state; + } +} + +export { gameReducer }; diff --git a/src/store/game/index.ts b/src/store/game/index.ts new file mode 100644 index 0000000..afc881d --- /dev/null +++ b/src/store/game/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./state"; +export * from "./game"; diff --git a/src/store/game/state.ts b/src/store/game/state.ts new file mode 100644 index 0000000..e316c93 --- /dev/null +++ b/src/store/game/state.ts @@ -0,0 +1,8 @@ +interface IGameState { + stopping: boolean; + loading: boolean; + saving: boolean; + time: number; +} + +export { type IGameState }; diff --git a/src/store/home/actions.ts b/src/store/home/actions.ts new file mode 100644 index 0000000..9d22663 --- /dev/null +++ b/src/store/home/actions.ts @@ -0,0 +1,41 @@ +import { IItem } from "../state/item"; +import { IInventory, IWorkbench } from "../state/types"; +import { IHomeState } from "./state"; + +type FETCH_HOME_START = "FETCH_HOME_START"; +type FETCH_HOME_FINISH = "FETCH_HOME_FINISH"; +type FETCH_HOME_INVENTORY_START = "FETCH_HOME_INVENTORY_START"; +type FETCH_HOME_INVENTORY_FINISH = "FETCH_HOME_INVENTORY_FINISH"; +type FETCH_HOME_WORKBENCH_START = "FETCH_HOME_WORKBENCH_START"; +type FETCH_HOME_WORKBENCH_FINISH = "FETCH_HOME_WORKBENCH_FINISH"; +type FETCH_HOME_WORKBENCH_DEVICES_START = "FETCH_HOME_WORKBENCH_DEVICES_START"; +type FETCH_HOME_WORKBENCH_DEVICES_FINISH = + "FETCH_HOME_WORKBENCH_DEVICES_FINISH"; + +type HomeActionTypes = + | FETCH_HOME_START + | FETCH_HOME_FINISH + | FETCH_HOME_INVENTORY_START + | FETCH_HOME_INVENTORY_FINISH + | FETCH_HOME_WORKBENCH_START + | FETCH_HOME_WORKBENCH_FINISH + | FETCH_HOME_WORKBENCH_DEVICES_START + | FETCH_HOME_WORKBENCH_DEVICES_FINISH; + +type HomeAction = + | { type: FETCH_HOME_START } + | { type: FETCH_HOME_FINISH; payload: IHomeState } + | { type: FETCH_HOME_INVENTORY_START } + | { type: FETCH_HOME_INVENTORY_FINISH; payload: IInventory } + | { type: FETCH_HOME_WORKBENCH_START } + | { + type: FETCH_HOME_WORKBENCH_FINISH; + payload: IWorkbench; + } + | { type: FETCH_HOME_WORKBENCH_DEVICES_START } + | { + type: FETCH_HOME_WORKBENCH_DEVICES_FINISH; + payload: IItem[]; + }; + +export { type HomeActionTypes, type HomeAction }; diff --git a/src/store/home/home.ts b/src/store/home/home.ts new file mode 100644 index 0000000..7c238b4 --- /dev/null +++ b/src/store/home/home.ts @@ -0,0 +1,54 @@ +import { + fetchHome, + fetchHomeInventory, + fetchHomeWorkbench, + fetchHomeWorkbenchDevices, +} from "../../services/home/home"; +import { HomeAction } from "./actions"; +import { IHomeState } from "./state"; + +function homeReducer(state: IHomeState, action: HomeAction): IHomeState { + switch (action.type) { + case "FETCH_HOME_START": + fetchHome(); + return state; + case "FETCH_HOME_FINISH": + return { + ...state, + inventory: action.payload.inventory, + workbench: action.payload.workbench, + modem: action.payload.modem, + }; + case "FETCH_HOME_INVENTORY_START": + fetchHomeInventory(); + return state; + case "FETCH_HOME_INVENTORY_FINISH": + return { + ...state, + inventory: action.payload, + }; + case "FETCH_HOME_WORKBENCH_START": + fetchHomeWorkbench(); + return state; + case "FETCH_HOME_WORKBENCH_FINISH": + return { + ...state, + workbench: action.payload, + }; + case "FETCH_HOME_WORKBENCH_DEVICES_START": + fetchHomeWorkbenchDevices(); + return state; + case "FETCH_HOME_WORKBENCH_DEVICES_FINISH": + return { + ...state, + workbench: { + ...state.workbench, + devices: action.payload, + }, + }; + default: + return state; + } +} + +export { homeReducer }; diff --git a/src/store/home/index.ts b/src/store/home/index.ts new file mode 100644 index 0000000..6ae3b86 --- /dev/null +++ b/src/store/home/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./state"; +export * from "./home"; diff --git a/src/store/home/state.ts b/src/store/home/state.ts new file mode 100644 index 0000000..511ff68 --- /dev/null +++ b/src/store/home/state.ts @@ -0,0 +1,10 @@ +import { IModem } from "../state/item"; +import { IInventory, IWorkbench } from "../state/types"; + +interface IHomeState { + inventory: IInventory; + workbench: IWorkbench; + modem?: IModem; +} + +export { type IHomeState }; diff --git a/src/store/loading/actions.ts b/src/store/loading/actions.ts new file mode 100644 index 0000000..c4601aa --- /dev/null +++ b/src/store/loading/actions.ts @@ -0,0 +1,12 @@ +type LOADING_START = "LOADING_START"; +type LOADING_SUCCESS = "LOADING_SUCCESS"; +type LOADING_ERROR = "LOADING_ERROR"; + +type LoadingActionTypes = LOADING_START | LOADING_SUCCESS | LOADING_ERROR; + +type LoadingAction = + | { type: LOADING_START } + | { type: LOADING_SUCCESS } + | { type: LOADING_ERROR; payload: string }; + +export { type LoadingActionTypes, type LoadingAction }; diff --git a/src/store/loading/index.ts b/src/store/loading/index.ts new file mode 100644 index 0000000..20291ec --- /dev/null +++ b/src/store/loading/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./state"; +export * from "./loading"; diff --git a/src/store/loading/loading.ts b/src/store/loading/loading.ts new file mode 100644 index 0000000..75674f9 --- /dev/null +++ b/src/store/loading/loading.ts @@ -0,0 +1,20 @@ +import { LoadingAction } from "./actions"; +import { ILoadingState } from "./state"; + +function loadingReducer( + state: ILoadingState, + action: LoadingAction, +): ILoadingState { + switch (action.type) { + case "LOADING_START": + return { ...state, status: true }; + case "LOADING_SUCCESS": + return { ...state, status: false }; + case "LOADING_ERROR": + return { ...state, status: false, error: "test" }; + default: + return state; + } +} + +export { loadingReducer }; diff --git a/src/store/loading/state.ts b/src/store/loading/state.ts new file mode 100644 index 0000000..0fac05e --- /dev/null +++ b/src/store/loading/state.ts @@ -0,0 +1,6 @@ +interface ILoadingState { + status: boolean; + error?: string; +} + +export { type ILoadingState }; diff --git a/src/store/player/actions.ts b/src/store/player/actions.ts new file mode 100644 index 0000000..6761e83 --- /dev/null +++ b/src/store/player/actions.ts @@ -0,0 +1,24 @@ +import { IInventory } from "../state/types"; +import { IPlayerState } from "./state"; + +type FETCH_PLAYER_START = "FETCH_PLAYER_START"; +type FETCH_PLAYER_FINISH = "FETCH_PLAYER_FINISH"; +type FETCH_PLAYER_INVENTORY_START = "FETCH_PLAYER_INVENTORY_START"; +type FETCH_PLAYER_INVENTORY_FINISH = "FETCH_PLAYER_INVENTORY_FINISH"; + +type PlayerActionTypes = + | FETCH_PLAYER_START + | FETCH_PLAYER_FINISH + | FETCH_PLAYER_INVENTORY_START + | FETCH_PLAYER_INVENTORY_FINISH; + +type PlayerAction = + | { type: FETCH_PLAYER_START } + | { type: FETCH_PLAYER_FINISH; payload: IPlayerState } + | { type: FETCH_PLAYER_INVENTORY_START } + | { + type: FETCH_PLAYER_INVENTORY_FINISH; + payload: IInventory; + }; + +export { type PlayerActionTypes, type PlayerAction }; diff --git a/src/store/player/index.ts b/src/store/player/index.ts new file mode 100644 index 0000000..ebc1a83 --- /dev/null +++ b/src/store/player/index.ts @@ -0,0 +1,3 @@ +export * from "./actions"; +export * from "./state"; +export * from "./player"; diff --git a/src/store/player/player.ts b/src/store/player/player.ts new file mode 100644 index 0000000..7921eae --- /dev/null +++ b/src/store/player/player.ts @@ -0,0 +1,36 @@ +import { + fetchPlayer, + fetchPlayerInventory, +} from "../../services/player/player"; +import { PlayerAction } from "./actions"; +import { IPlayerState } from "./state"; + +function playerReducer( + state: IPlayerState, + action: PlayerAction, +): IPlayerState { + switch (action.type) { + case "FETCH_PLAYER_START": + fetchPlayer(); + return state; + case "FETCH_PLAYER_FINISH": + return { + ...state, + name: action.payload.name, + inventory: action.payload.inventory, + location: action.payload.location, + }; + case "FETCH_PLAYER_INVENTORY_START": + fetchPlayerInventory(); + return state; + case "FETCH_PLAYER_INVENTORY_FINISH": + return { + ...state, + inventory: action.payload, + }; + default: + return state; + } +} + +export { playerReducer }; diff --git a/src/store/player/state.ts b/src/store/player/state.ts new file mode 100644 index 0000000..ead848e --- /dev/null +++ b/src/store/player/state.ts @@ -0,0 +1,10 @@ +import { Location } from "../state/location"; +import { IInventory } from "../state/types"; + +interface IPlayerState { + name: string; + inventory: IInventory; + location: Location; +} + +export { type IPlayerState }; diff --git a/src/store/reducers.ts b/src/store/reducers.ts new file mode 100644 index 0000000..95c1d3c --- /dev/null +++ b/src/store/reducers.ts @@ -0,0 +1,19 @@ +import { IState } from "./types"; +import { Action } from "./actions"; +import { LoadingAction, loadingReducer } from "./loading"; +import { GameAction, gameReducer } from "./game"; +import { PlayerAction, playerReducer } from "./player"; +import { HomeAction, homeReducer } from "./home"; +import { CarAction, carReducer } from "./car"; + +function reducer(state: IState, action: Action): IState { + return { + loading: loadingReducer(state.loading, action as LoadingAction), + game: gameReducer(state.game, action as GameAction), + player: playerReducer(state.player, action as PlayerAction), + home: homeReducer(state.home, action as HomeAction), + car: carReducer(state.car, action as CarAction), + }; +} + +export { reducer }; diff --git a/src/store/state.ts b/src/store/state.ts new file mode 100644 index 0000000..9ad5227 --- /dev/null +++ b/src/store/state.ts @@ -0,0 +1,52 @@ +import { createStore } from "solid-js/store"; +import { IState } from "./types"; +import { Action } from "./actions"; +import { reducer } from "./reducers"; +import { Location } from "./state/location"; + +const [state, setState] = createStore({ + loading: { + status: true, + error: undefined, + }, + game: { + stopping: false, + loading: false, + saving: false, + time: 0, + }, + player: { + name: "", + inventory: { + size: 0, + items: [], + }, + location: Location.PLAYER_HOME, + }, + home: { + inventory: { + size: 0, + items: [], + }, + workbench: { + devices: [], + }, + modem: undefined, + }, + car: { + inventory: { + size: 0, + items: [], + }, + }, +}); + +function dispatch(action: Action) { + setState(reducer(state, action)); +} + +async function dispatchAsync(action: Action) { + setState(reducer(state, action)); +} + +export { state, setState, dispatch }; diff --git a/src/store/state/company.ts b/src/store/state/company.ts new file mode 100644 index 0000000..cbbc706 --- /dev/null +++ b/src/store/state/company.ts @@ -0,0 +1,59 @@ +enum Company { + Intel, + AMD, + Nvidia, + Seagate, + WD, + GSkill, + NZXT, + EK, + Alphacool, + EVGA, + Kingston, + Motorola, + Nikon, + Canon, + Qualcomm, + TSMC, + Samsung, + Apple, + Microsoft, + Canonical, + Amazon, + Meta, + Google, + HP, + Lenovo, + Vivo, + Huawei, + Cisco, + Asus, + Acer, + Sony, + LG, + HTC, + OnePlus, + Xiaomi, + Gigabyte, + Nokia, + HMD, + DELL, + FrameWork, + Tencent, + RODE, + RME, + Fiio, + Sennheiser, + Beyerdynamic, + Audeze, + Pine64, + Nintendo, + Nubia, + ZTE, + Nothing, + Essential, + Fairphone, + Razer, +} + +export { Company }; diff --git a/src/store/state/connector.ts b/src/store/state/connector.ts new file mode 100644 index 0000000..8e99612 --- /dev/null +++ b/src/store/state/connector.ts @@ -0,0 +1,31 @@ +enum ConnectorType { + USB1, + USB2, + USB3, + USB4, + USBC1, + USBC2, + USBC3, + USBC4, + MOLEX, + SATA_POWER, + SATA1, + SATA2, + SATA3, + AGP, + PCI_POWER_4, + PCI_POWER_6, + PCI_POWER_8, + PCI, + PCIE, + PCIE2, + PCIE3, + PCIE4, + PCIE5, + PCIE6, + PCIE7, + PCIE8, + PCIE9, +} + +export { ConnectorType }; diff --git a/src/store/state/cpu.ts b/src/store/state/cpu.ts new file mode 100644 index 0000000..375d9e2 --- /dev/null +++ b/src/store/state/cpu.ts @@ -0,0 +1,34 @@ +enum CPUArchitecture { + M_6502, + M_6800, + M_6809, + M_680X0, + I_8080, + I_8051, + Z80, + SPARC, + MIPS, + POWER_PC, + x86, + x86_64, + Itanium, + ARMv7, + ARMv8, + ARMv9, + RISC_V, + LoongArch, +} + +enum CPUFeatures { + AVX, + AVX2, + AVX512, +} + +enum SocketType { + INTEL_LGA_1155, + INTEL_LGA_1156, + INTEL_LGA_2011, +} + +export { CPUArchitecture, CPUFeatures, SocketType }; diff --git a/src/store/state/gpu.ts b/src/store/state/gpu.ts new file mode 100644 index 0000000..44868fa --- /dev/null +++ b/src/store/state/gpu.ts @@ -0,0 +1,39 @@ +enum GPUArchitecture { + Fahrenheit, + Celsius, + Kelvin, + Rankine, + Curie, + Tesla, + Fermi, + Kepler, + Maxwell, + Maxwell2, + Pascal, + Turing, + Volta, + Ampere, + Lovelace, + Hopper, + Blackwell, + Rubin, + TeraScale, + TeraScale2, + TeraScale3, + CGN, + CGN2, + CGN3, + CGN4, + CGN5, + RDNA, + RDNA2, + RDNA3, + RDNA3_5, + RDNA4, + CDNA, + CDNA2, + CDNA3, + UDNA, +} + +export { GPUArchitecture }; diff --git a/src/store/state/item.ts b/src/store/state/item.ts new file mode 100644 index 0000000..f3b2cb2 --- /dev/null +++ b/src/store/state/item.ts @@ -0,0 +1,214 @@ +import type { Company } from "./company.js"; +import type { ConnectorType } from "./connector.js"; +import type { SocketType } from "./cpu.js"; +import type { MemoryType } from "./memory.js"; +import type { DiscType, DiskType, IStorage } from "./storage.js"; +import type { INet } from "./types.js"; + +enum ItemType { + SCREWDRIVER, + CPU, + GRAPHIC_CARD, + RAM_MODULE, + DISK, + DISC, + TAPE, + VHS, + DISKETTE, + CASE, + PSU, + MOTHERBOARD, + FAN, + CPU_COOLER, + GPU_COOLER, + NETWORK_CARD, + SOUND_CARD, + NETWORK_SWITCH, + WIFI_AP, + ROUTER, + MODEM, + MONITOR, + KEYBOARD, + MOUSE, + JOYSTICK, + HEADPHONES, + DAC, + MICROPHONE, + CAMERA, + PHONE, + LAPTOP, + COMPUTER, + SECURITY_KEY, +} + +enum FormFactorType { + M_ATX, + ATX, + E_ATX, +} + +interface IItem { + type: ItemType; + name: string; + durability: number; + manufacturer?: Company | "Player"; + availability?: number; + rarity?: number; + price?: number; + canFitInComputerCase?: boolean; + canFitInLaptopCase?: boolean; + canFitInMobileCase?: boolean; +} + +interface IConnectedDevice extends IItem { + connector: ConnectorType; +} + +interface IScrewdriver extends IItem { + quality: number; +} + +interface ICPUCore { + originalClockSpeed: number; + clockSpeed: number; + threads: number; + cacheL1?: number; + cacheL2?: number; +} + +interface ICPU extends IItem { + cores: ICPUCore[]; + cacheL3?: number; + cacheL4?: number; + gpu?: IGPU; + npu?: INPU; + tdp: number; + process: number; + socket: SocketType; +} + +interface IGPU extends IItem { + originalClockSpeed: number; + clockSpeed: number; + coreCount: number; + shadingUnitCount: number; + tmuCount: number; + ropCount: number; + tensorCoreCount: number; + rtCoreCount: number; + cacheL0?: number; + cacheL1?: number; + cacheL2?: number; + cacheL3?: number; + tops: number; + pixelRate: number; + textureRate: number; + fp16flops: number; + fp32flops: number; + fp64flops: number; + features: IGPUFeatures; + process: number; +} + +interface INPU extends IItem { + tops: number; +} + +interface IGPUFeatures { + directxVersion?: number; + openglVersion?: number; + openclVersion?: number; + vulkanVersion?: number; + cudaVersion?: number; + shaderModel?: number; +} + +interface IGraphicsCard extends IConnectedDevice { + gpu: IGPU; + memory: IGraphicsCardMemory; + tdp: number; +} + +interface IGraphicsCardMemory { + type: MemoryType; + originalClockSpeed: number; + clockSpeed: number; + busWidth: number; + bandwidth: number; + capacity: number; +} + +interface IRAMModule extends IItem { + memoryType: MemoryType; + originalClockSpeed: number; + clockSpeed: number; + capacity: number; + tdp: number; +} + +interface IDisk extends IConnectedDevice { + diskType: DiskType; + bandwidth: number; + capacity: number; + tdp: number; + storage: IStorage; +} + +interface IDisc extends IItem { + discType: DiscType; + bandwidth: number; + capacity: number; + storage: IStorage; +} + +interface ICase extends IItem { + formFactor: FormFactorType; + width: number; + height: number; + depth: number; + installedDevices: IItem[]; +} + +interface IPSU extends IItem { + formFactor: FormFactorType; + width: number; + height: number; + depth: number; + wattage: number; + connectors: ConnectorType[]; +} + +interface IMotherboard extends IItem { + formFactor: FormFactorType; + connectors: ConnectorType[]; + socket: SocketType; + socketCount: number; + memoryType: MemoryType; + memorySlots: number; + installedCPUs: ICPU[]; + installedRAMs: IRAMModule[]; + installedDevices: IConnectedDevice[]; +} + +interface IModem extends IItem { + bandwidth: number; + net: INet; +} + +export { + ItemType, + FormFactorType, + type IItem, + type IConnectedDevice, + type IScrewdriver, + type ICPU, + type IGPU, + type IGraphicsCard, + type IRAMModule, + type IDisk, + type IDisc, + type ICase, + type IPSU, + type IMotherboard, + type IModem, +}; diff --git a/src/store/state/location.ts b/src/store/state/location.ts new file mode 100644 index 0000000..8a8d4bd --- /dev/null +++ b/src/store/state/location.ts @@ -0,0 +1,7 @@ +enum Location { + PLAYER_HOME, + PLAYER_CAR, + LOCAL_STORE, +} + +export { Location }; diff --git a/src/store/state/memory.ts b/src/store/state/memory.ts new file mode 100644 index 0000000..953d279 --- /dev/null +++ b/src/store/state/memory.ts @@ -0,0 +1,53 @@ +enum MemoryType { + DDR, + LPDDR, + LPDDRX, + DDR2, + LPDDR2, + LPDDR2X, + DDR3, + LPDDR3, + LPDDR3X, + DDR4, + LPDDR4, + LPDDR4X, + DDR5, + LPDDR5, + LPDDR5X, + DDR6, + LPDDR6, + LPDDR6X, + DDR7, + LPDDR7, + LPDDR7X, + DDR8, + LPDDR8, + LPDDR8X, + DDR9, + LPDDR9, + LPDDR9X, + GDDR1, + GDDR1X, + GDDR2, + GDDR2X, + GDDR3, + GDDR3X, + GDDR4, + GDDR4X, + GDDR5, + GDDR5X, + GDDR6, + GDDR6X, + GDDR7, + GDDR7X, + GDDR8, + GDDR8X, + GDDR9, + GDDR9X, + HBM, + HBM2, + HBM3, + HBM4, +} + +export { MemoryType }; diff --git a/src/store/state/motherboard.ts b/src/store/state/motherboard.ts new file mode 100644 index 0000000..d2ae0dc --- /dev/null +++ b/src/store/state/motherboard.ts @@ -0,0 +1,6 @@ +enum MotherboardFeatures { + BIOS, + UEFI, +} + +export { MotherboardFeatures }; diff --git a/src/store/state/software.ts b/src/store/state/software.ts new file mode 100644 index 0000000..b8bbd9e --- /dev/null +++ b/src/store/state/software.ts @@ -0,0 +1,13 @@ +enum SoftwareType { + OS, +} + +interface ISoftware { + type: SoftwareType; + name: string; + cpuUsage: number; + memoryUsage: number; + storageUsage: number; +} + +export { SoftwareType, type ISoftware }; diff --git a/src/store/state/storage.ts b/src/store/state/storage.ts new file mode 100644 index 0000000..d9216ba --- /dev/null +++ b/src/store/state/storage.ts @@ -0,0 +1,57 @@ +import type { ISoftware } from "./software.js"; + +enum DiskType { + HDD, + SSD, + Flash, +} + +enum DiscType { + LaserDisc, + CD, + DVD, + BluRay, +} + +enum FilesystemType { + EXT, + EXT2, + EXT3, + EXT4, + FAT16, + FAT32, + NTFS, + EXFAT, +} + +interface IStorage { + filesystem: IFileSystem; +} + +interface IFileSystem { + type: FilesystemType; + rootDirectory: IDirectory; +} + +interface IDirectory { + name: string; + directories: IDirectory[]; + files: IFile[]; +} + +interface IFile { + name: string; + size: string; + isSoftware: boolean; + contents: string | ISoftware; +} + +export { + DiskType, + DiscType, + FilesystemType, + type IStorage, + type IFileSystem, + type IDirectory, + type IFile, +}; diff --git a/src/store/state/types.ts b/src/store/state/types.ts new file mode 100644 index 0000000..0351739 --- /dev/null +++ b/src/store/state/types.ts @@ -0,0 +1,38 @@ +import type { IItem, IModem } from "./item.js"; +import type { Location } from "./location.js"; + +interface IInventory { + size: number; + items: IItem[]; +} + +interface IWorkbench { + devices: IItem[]; +} + +interface IWebsite { + name: string; + ip: string; + domain: string; + html: string; +} + +interface INet { + ip?: string; +} + +interface IShop { + name: string; + items: IItem[]; +} + +export { + type IPlayer, + type ICar, + type IHome, + type IInventory, + type IWorkbench, + type IWebsite, + type INet, + type IShop, +}; diff --git a/src/store/types.ts b/src/store/types.ts new file mode 100644 index 0000000..a0b3117 --- /dev/null +++ b/src/store/types.ts @@ -0,0 +1,15 @@ +import { ICarState } from "./car"; +import { IGameState } from "./game"; +import { IHomeState } from "./home"; +import { ILoadingState } from "./loading"; +import { IPlayerState } from "./player"; + +interface IState { + loading: ILoadingState; + game: IGameState; + player: IPlayerState; + home: IHomeState; + car: ICarState; +} + +export { type IState }; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8b4ebee --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + // General + "jsx": "preserve", + "jsxImportSource": "solid-js", + "target": "ESNext", + + // Modules + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "isolatedModules": true, + "module": "ESNext", + "moduleResolution": "bundler", + "noEmit": true, + + // Type Checking & Safety + "strict": true, + "types": ["vite/client"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..13c51eb --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "vite"; +import tailwindcss from "@tailwindcss/vite"; +import solidPlugin from "vite-plugin-solid"; + +export default defineConfig({ + plugins: [tailwindcss(), solidPlugin()], + server: { + port: 3000, + }, + build: { + target: "esnext", + }, +});