From bad0f487c945c742f8d7923cdb122212f9d87b5f Mon Sep 17 00:00:00 2001 From: alex289 Date: Fri, 2 Jan 2026 18:40:31 +0100 Subject: [PATCH 01/12] feat: Frontend init --- .gitignore | 10 + .vscode/settings.json | 35 + frontend/README.md | 310 ++ frontend/biome.json | 35 + frontend/components.json | 21 + frontend/index.html | 18 + frontend/package-lock.json | 4711 ++++++++++++++++++++++++++++ frontend/package.json | 45 + frontend/public/favicon.ico | Bin 0 -> 3870 bytes frontend/src/components/Header.tsx | 69 + frontend/src/lib/utils.ts | 6 + frontend/src/main.tsx | 36 + frontend/src/routeTree.gen.ts | 59 + frontend/src/routes/__root.tsx | 25 + frontend/src/routes/index.tsx | 33 + frontend/src/styles.css | 142 + frontend/tsconfig.json | 28 + frontend/vite.config.ts | 36 + 18 files changed, 5619 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 frontend/README.md create mode 100644 frontend/biome.json create mode 100644 frontend/components.json create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/components/Header.tsx create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/routeTree.gen.ts create mode 100644 frontend/src/routes/__root.tsx create mode 100644 frontend/src/routes/index.tsx create mode 100644 frontend/src/styles.css create mode 100644 frontend/tsconfig.json create mode 100644 frontend/vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58b8598 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +count.txt +.env +.nitro +.tanstack +.wrangler diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..70dd163 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,35 @@ +{ + "files.watcherExclude": { + "**/routeTree.gen.ts": true + }, + "search.exclude": { + "**/routeTree.gen.ts": true + }, + "files.readonlyInclude": { + "**/routeTree.gen.ts": true + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[css]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "editor.codeActionsOnSave": { + "source.organizeImports.biome": "explicit" + } +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..d09b507 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,310 @@ +Welcome to your new TanStack app! + +# Getting Started + +To run this application: + +```bash +npm install +npm run start +``` + +# Building For Production + +To build this application for production: + +```bash +npm run build +``` + +## Testing + +This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with: + +```bash +npm run test +``` + +## Styling + +This project uses [Tailwind CSS](https://tailwindcss.com/) for styling. + + +## Linting & Formatting + +This project uses [Biome](https://biomejs.dev/) for linting and formatting. The following scripts are available: + + +```bash +npm run lint +npm run format +npm run check +``` + + +## Shadcn + +Add components using the latest version of [Shadcn](https://ui.shadcn.com/). + +```bash +pnpm dlx shadcn@latest add button +``` + + + +## Routing +This project uses [TanStack Router](https://tanstack.com/router). The initial setup is a file based router. Which means that the routes are managed as files in `src/routes`. + +### Adding A Route + +To add a new route to your application just add another a new file in the `./src/routes` directory. + +TanStack will automatically generate the content of the route file for you. + +Now that you have two routes you can use a `Link` component to navigate between them. + +### Adding Links + +To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`. + +```tsx +import { Link } from "@tanstack/react-router"; +``` + +Then anywhere in your JSX you can use it like so: + +```tsx +About +``` + +This will create a link that will navigate to the `/about` route. + +More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent). + +### Using A Layout + +In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you use the `` component. + +Here is an example layout that includes a header: + +```tsx +import { Outlet, createRootRoute } from '@tanstack/react-router' +import { TanStackRouterDevtools } from '@tanstack/react-router-devtools' + +import { Link } from "@tanstack/react-router"; + +export const Route = createRootRoute({ + component: () => ( + <> +
+ +
+ + + + ), +}) +``` + +The `` component is not required so you can remove it if you don't want it in your layout. + +More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts). + + +## Data Fetching + +There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered. + +For example: + +```tsx +const peopleRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/people", + loader: async () => { + const response = await fetch("https://swapi.dev/api/people"); + return response.json() as Promise<{ + results: { + name: string; + }[]; + }>; + }, + component: () => { + const data = peopleRoute.useLoaderData(); + return ( +
    + {data.results.map((person) => ( +
  • {person.name}
  • + ))} +
+ ); + }, +}); +``` + +Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters). + +### React-Query + +React-Query is an excellent addition or alternative to route loading and integrating it into you application is a breeze. + +First add your dependencies: + +```bash +npm install @tanstack/react-query @tanstack/react-query-devtools +``` + +Next we'll need to create a query client and provider. We recommend putting those in `main.tsx`. + +```tsx +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +// ... + +const queryClient = new QueryClient(); + +// ... + +if (!rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + + root.render( + + + + ); +} +``` + +You can also add TanStack Query Devtools to the root route (optional). + +```tsx +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +const rootRoute = createRootRoute({ + component: () => ( + <> + + + + + ), +}); +``` + +Now you can use `useQuery` to fetch your data. + +```tsx +import { useQuery } from "@tanstack/react-query"; + +import "./App.css"; + +function App() { + const { data } = useQuery({ + queryKey: ["people"], + queryFn: () => + fetch("https://swapi.dev/api/people") + .then((res) => res.json()) + .then((data) => data.results as { name: string }[]), + initialData: [], + }); + + return ( +
+
    + {data.map((person) => ( +
  • {person.name}
  • + ))} +
+
+ ); +} + +export default App; +``` + +You can find out everything you need to know on how to use React-Query in the [React-Query documentation](https://tanstack.com/query/latest/docs/framework/react/overview). + +## State Management + +Another common requirement for React applications is state management. There are many options for state management in React. TanStack Store provides a great starting point for your project. + +First you need to add TanStack Store as a dependency: + +```bash +npm install @tanstack/store +``` + +Now let's create a simple counter in the `src/App.tsx` file as a demonstration. + +```tsx +import { useStore } from "@tanstack/react-store"; +import { Store } from "@tanstack/store"; +import "./App.css"; + +const countStore = new Store(0); + +function App() { + const count = useStore(countStore); + return ( +
+ +
+ ); +} + +export default App; +``` + +One of the many nice features of TanStack Store is the ability to derive state from other state. That derived state will update when the base state updates. + +Let's check this out by doubling the count using derived state. + +```tsx +import { useStore } from "@tanstack/react-store"; +import { Store, Derived } from "@tanstack/store"; +import "./App.css"; + +const countStore = new Store(0); + +const doubledStore = new Derived({ + fn: () => countStore.state * 2, + deps: [countStore], +}); +doubledStore.mount(); + +function App() { + const count = useStore(countStore); + const doubledCount = useStore(doubledStore); + + return ( +
+ +
Doubled - {doubledCount}
+
+ ); +} + +export default App; +``` + +We use the `Derived` class to create a new store that is derived from another store. The `Derived` class has a `mount` method that will start the derived store updating. + +Once we've created the derived store we can use it in the `App` component just like we would any other store using the `useStore` hook. + +You can find out everything you need to know on how to use TanStack Store in the [TanStack Store documentation](https://tanstack.com/store/latest). + +# Demo files + +Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed. + +# Learn More + +You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com). diff --git a/frontend/biome.json b/frontend/biome.json new file mode 100644 index 0000000..f2523e0 --- /dev/null +++ b/frontend/biome.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**/src/**/*", + "**/.vscode/**/*", + "**/index.html", + "**/vite.config.js", + "!**/src/routeTree.gen.ts", + "!**/src/styles.css" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..6998bdf --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..f9cd681 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Create TanStack App - frontend + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..37eff64 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,4711 @@ +{ + "name": "frontend", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "dependencies": { + "@tailwindcss/vite": "^4.0.6", + "@tanstack/react-devtools": "^0.7.0", + "@tanstack/react-router": "^1.132.0", + "@tanstack/react-router-devtools": "^1.132.0", + "@tanstack/router-plugin": "^1.132.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.544.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.6", + "tw-animate-css": "^1.3.6" + }, + "devDependencies": { + "@biomejs/biome": "2.2.4", + "@tanstack/devtools-vite": "^0.3.11", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.2.0", + "@types/node": "^22.10.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^5.0.4", + "jsdom": "^27.0.0", + "typescript": "^5.7.2", + "vite": "^7.1.7", + "vitest": "^3.0.5", + "web-vitals": "^5.1.0" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.30", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.30.tgz", + "integrity": "sha512-9CnlMCI0LmCIq0olalQqdWrJHPzm0/tw3gzOA9zJSgvFX7Xau3D24mAGa4BtwxwY69nsuJW6kQqqCzf/mEcQgg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", + "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "lru-cache": "^11.2.4" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.7.6", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.6.tgz", + "integrity": "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.4" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "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-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "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/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.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==", + "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==", + "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==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.4.tgz", + "integrity": "sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "2.2.4", + "@biomejs/cli-darwin-x64": "2.2.4", + "@biomejs/cli-linux-arm64": "2.2.4", + "@biomejs/cli-linux-arm64-musl": "2.2.4", + "@biomejs/cli-linux-x64": "2.2.4", + "@biomejs/cli-linux-x64-musl": "2.2.4", + "@biomejs/cli-win32-arm64": "2.2.4", + "@biomejs/cli-win32-x64": "2.2.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz", + "integrity": "sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz", + "integrity": "sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz", + "integrity": "sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz", + "integrity": "sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz", + "integrity": "sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz", + "integrity": "sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz", + "integrity": "sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz", + "integrity": "sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.22.tgz", + "integrity": "sha512-qBcx6zYlhleiFfdtzkRgwNC7VVoAwfK76Vmsw5t+PbvtdknO9StgRk7ROvq9so1iqbdW4uLIDAsXRsTfUrIoOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.7.0.tgz", + "integrity": "sha512-5i+BtvujK/vM07YCGDyz4C4AyDzLmhxHMtM5HpUyPRtJPBdFPsj290ffXW+UXY21/G7GtXeHD2nRmq0T1ShyQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@exodus/crypto": "^1.0.0-rc.4" + }, + "peerDependenciesMeta": { + "@exodus/crypto": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", + "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", + "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", + "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", + "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", + "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", + "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", + "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", + "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", + "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", + "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", + "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", + "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", + "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", + "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", + "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", + "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", + "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", + "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", + "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", + "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", + "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", + "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "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==", + "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==", + "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/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==", + "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==", + "license": "MIT", + "dependencies": { + "@solid-primitives/utils": "^6.3.2" + }, + "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==", + "license": "MIT", + "dependencies": { + "@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==", + "license": "MIT", + "peerDependencies": { + "solid-js": "^1.6.12" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "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.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@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.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz", + "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "tailwindcss": "4.1.18" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/devtools": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@tanstack/devtools/-/devtools-0.7.0.tgz", + "integrity": "sha512-AlAoCqJhWLg9GBEaoV1g/j+X/WA1aJSWOsekxeuZpYeS2hdVuKAjj04KQLUMJhtLfNl2s2E+TCj7ZRtWyY3U4w==", + "license": "MIT", + "dependencies": { + "@solid-primitives/event-listener": "^2.4.3", + "@solid-primitives/keyboard": "^1.3.3", + "@solid-primitives/resize-observer": "^2.1.3", + "@tanstack/devtools-client": "0.0.3", + "@tanstack/devtools-event-bus": "0.3.3", + "@tanstack/devtools-ui": "0.4.4", + "clsx": "^2.1.1", + "goober": "^2.1.16", + "solid-js": "^1.9.9" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "solid-js": ">=1.9.7" + } + }, + "node_modules/@tanstack/devtools-client": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-client/-/devtools-client-0.0.5.tgz", + "integrity": "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/devtools-event-client": "^0.4.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/devtools-event-bus": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-bus/-/devtools-event-bus-0.3.3.tgz", + "integrity": "sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg==", + "license": "MIT", + "dependencies": { + "ws": "^8.18.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/devtools-event-client": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-client/-/devtools-event-client-0.4.0.tgz", + "integrity": "sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/devtools-ui": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-ui/-/devtools-ui-0.4.4.tgz", + "integrity": "sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "goober": "^2.1.16", + "solid-js": "^1.9.9" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "solid-js": ">=1.9.7" + } + }, + "node_modules/@tanstack/devtools-vite": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.3.12.tgz", + "integrity": "sha512-fGJgu4xUhKmGk+a+/aHD8l5HKVk6+ObA+6D3YC3xCXbai/YmaGhztqcZf1tKUqjZyYyQLHsjqmKzvJgVpQP1jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.4", + "@babel/generator": "^7.28.3", + "@babel/parser": "^7.28.4", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@tanstack/devtools-client": "0.0.5", + "@tanstack/devtools-event-bus": "0.3.3", + "chalk": "^5.6.2", + "launch-editor": "^2.11.1", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@tanstack/devtools/node_modules/@tanstack/devtools-client": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-client/-/devtools-client-0.0.3.tgz", + "integrity": "sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==", + "license": "MIT", + "dependencies": { + "@tanstack/devtools-event-client": "^0.3.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/devtools/node_modules/@tanstack/devtools-event-client": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-client/-/devtools-event-client-0.3.5.tgz", + "integrity": "sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/history": { + "version": "1.141.0", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.141.0.tgz", + "integrity": "sha512-LS54XNyxyTs5m/pl1lkwlg7uZM3lvsv2FIIV1rsJgnfwVCnI+n4ZGZ2CcjNT13BPu/3hPP+iHmliBSscJxW5FQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-devtools": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/@tanstack/react-devtools/-/react-devtools-0.7.11.tgz", + "integrity": "sha512-a2Lmz8x+JoDrsU6f7uKRcyyY+k8mA/n5mb9h7XJ3Fz/y3+sPV9t7vAW1s5lyNkQyyDt6V1Oim99faLthoJSxMw==", + "license": "MIT", + "dependencies": { + "@tanstack/devtools": "0.7.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "@types/react-dom": ">=16.8", + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/react-router": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.144.0.tgz", + "integrity": "sha512-GmRyIGmHtGj3VLTHXepIwXAxTcHyL5W7Vw7O1CnVEtFxQQWKMVOnWgI7tPY6FhlNwMKVb3n0mPFWz9KMYyd2GA==", + "license": "MIT", + "dependencies": { + "@tanstack/history": "1.141.0", + "@tanstack/react-store": "^0.8.0", + "@tanstack/router-core": "1.144.0", + "isbot": "^5.1.22", + "tiny-invariant": "^1.3.3", + "tiny-warning": "^1.0.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=18.0.0 || >=19.0.0", + "react-dom": ">=18.0.0 || >=19.0.0" + } + }, + "node_modules/@tanstack/react-router-devtools": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.144.0.tgz", + "integrity": "sha512-nstjZvZbOM4U0/Hzi82rtsP1DsR2tfigBidK+WuaDRVVstBsnwVor3DQXTGY5CcfgIiMI3eKzI17VOy3SQDDoQ==", + "license": "MIT", + "dependencies": { + "@tanstack/router-devtools-core": "1.144.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-router": "^1.144.0", + "@tanstack/router-core": "^1.144.0", + "react": ">=18.0.0 || >=19.0.0", + "react-dom": ">=18.0.0 || >=19.0.0" + }, + "peerDependenciesMeta": { + "@tanstack/router-core": { + "optional": true + } + } + }, + "node_modules/@tanstack/react-store": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.0.tgz", + "integrity": "sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==", + "license": "MIT", + "dependencies": { + "@tanstack/store": "0.8.0", + "use-sync-external-store": "^1.6.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/router-core": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.144.0.tgz", + "integrity": "sha512-6oVERtK9XDHCP4XojgHsdHO56ZSj11YaWjF5g/zw39LhyA6Lx+/X86AEIHO4y0BUrMQaJfcjdAQMVSAs6Vjtdg==", + "license": "MIT", + "dependencies": { + "@tanstack/history": "1.141.0", + "@tanstack/store": "^0.8.0", + "cookie-es": "^2.0.0", + "seroval": "^1.4.1", + "seroval-plugins": "^1.4.0", + "tiny-invariant": "^1.3.3", + "tiny-warning": "^1.0.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/router-devtools-core": { + "version": "1.144.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.144.0.tgz", + "integrity": "sha512-rbpQn1aHUtcfY3U3SyJqOZRqDu0a2uPK+TE2CH50HieJApmCuNKj5RsjVQYHgwiFFvR0w0LUmueTnl2X2hiWTg==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "goober": "^2.1.16", + "tiny-invariant": "^1.3.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/router-core": "^1.144.0", + "csstype": "^3.0.10", + "solid-js": ">=1.9.5" + }, + "peerDependenciesMeta": { + "csstype": { + "optional": true + } + } + }, + "node_modules/@tanstack/router-generator": { + "version": "1.145.2", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.145.2.tgz", + "integrity": "sha512-6DLwfqhexgxw2T2QuS9Y349Vb49hCXBIz9mjWyynjMrpejLXJL+PaHaKJw0Y+H7Ao6RE2vlvXCc2cMjgbz5c7Q==", + "license": "MIT", + "dependencies": { + "@tanstack/router-core": "1.144.0", + "@tanstack/router-utils": "1.143.11", + "@tanstack/virtual-file-routes": "1.141.0", + "prettier": "^3.5.0", + "recast": "^0.23.11", + "source-map": "^0.7.4", + "tsx": "^4.19.2", + "zod": "^3.24.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/router-plugin": { + "version": "1.145.2", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.145.2.tgz", + "integrity": "sha512-dOABjCE4M2KxB+f/mY71dDZduwVTpf+tCPb4NxmAqbF5Rxes24QaaIZQmiU12jte/L8zYyIA/yX9fi93xZue5Q==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@tanstack/router-core": "1.144.0", + "@tanstack/router-generator": "1.145.2", + "@tanstack/router-utils": "1.143.11", + "@tanstack/virtual-file-routes": "1.141.0", + "babel-dead-code-elimination": "^1.0.11", + "chokidar": "^3.6.0", + "unplugin": "^2.1.2", + "zod": "^3.24.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@rsbuild/core": ">=1.0.2", + "@tanstack/react-router": "^1.144.0", + "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", + "vite-plugin-solid": "^2.11.10", + "webpack": ">=5.92.0" + }, + "peerDependenciesMeta": { + "@rsbuild/core": { + "optional": true + }, + "@tanstack/react-router": { + "optional": true + }, + "vite": { + "optional": true + }, + "vite-plugin-solid": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@tanstack/router-utils": { + "version": "1.143.11", + "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.143.11.tgz", + "integrity": "sha512-N24G4LpfyK8dOlnP8BvNdkuxg1xQljkyl6PcrdiPSA301pOjatRT1y8wuCCJZKVVD8gkd0MpCZ0VEjRMGILOtA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/generator": "^7.28.5", + "@babel/parser": "^7.28.5", + "ansis": "^4.1.0", + "diff": "^8.0.2", + "pathe": "^2.0.3", + "tinyglobby": "^0.2.15" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/store": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.8.0.tgz", + "integrity": "sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-file-routes": { + "version": "1.141.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.141.0.tgz", + "integrity": "sha512-CJrWtr6L9TVzEImm9S7dQINx+xJcYP/aDkIi6gnaWtIgbZs1pnzsE0yJc2noqXZ+yAOqLx3TBGpBEs9tS0P9/A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/react": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz", + "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "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/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-dead-code-elimination": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.11.tgz", + "integrity": "sha512-mwq3W3e/pKSI6TG8lXMiDWvEi1VXYlSBlJlB3l+I0bAb5u1RNUl88udos85eOPNK3m5EXK9uO7d2g08pesTySQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "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.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "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/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.6.tgz", + "integrity": "sha512-legscpSpgSAeGEe0TNcai97DKt9Vd9AsAdOL7Uoetb52Ar/8eJm3LIa39qpv8wWzLFlNG4vVvppQM+teaMPj3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^4.1.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.21", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", + "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "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/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/goober": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz", + "integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbot": { + "version": "5.1.32", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.32.tgz", + "integrity": "sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==", + "license": "Unlicense", + "engines": { + "node": ">=18" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "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==", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz", + "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.28", + "@asamuzakjp/dom-selector": "^6.7.6", + "@exodus/bytes": "^1.6.0", + "cssstyle": "^5.3.4", + "data-urls": "^6.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.0", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.1.0", + "ws": "^8.18.3", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "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==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "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" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", + "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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==", + "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/prettier": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recast": { + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/rollup": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", + "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", + "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.54.0", + "@rollup/rollup-android-arm64": "4.54.0", + "@rollup/rollup-darwin-arm64": "4.54.0", + "@rollup/rollup-darwin-x64": "4.54.0", + "@rollup/rollup-freebsd-arm64": "4.54.0", + "@rollup/rollup-freebsd-x64": "4.54.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.54.0", + "@rollup/rollup-linux-arm-musleabihf": "4.54.0", + "@rollup/rollup-linux-arm64-gnu": "4.54.0", + "@rollup/rollup-linux-arm64-musl": "4.54.0", + "@rollup/rollup-linux-loong64-gnu": "4.54.0", + "@rollup/rollup-linux-ppc64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-musl": "4.54.0", + "@rollup/rollup-linux-s390x-gnu": "4.54.0", + "@rollup/rollup-linux-x64-gnu": "4.54.0", + "@rollup/rollup-linux-x64-musl": "4.54.0", + "@rollup/rollup-openharmony-arm64": "4.54.0", + "@rollup/rollup-win32-arm64-msvc": "4.54.0", + "@rollup/rollup-win32-ia32-msvc": "4.54.0", + "@rollup/rollup-win32-x64-gnu": "4.54.0", + "@rollup/rollup-win32-x64-msvc": "4.54.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seroval": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", + "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/seroval-plugins": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.4.2.tgz", + "integrity": "sha512-X7p4MEDTi+60o2sXZ4bnDBhgsUYDSkQEvzYZuJyFqWg9jcoPsHts5nrg5O956py2wyt28lUrBxk0M0/wU8URpA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "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-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/solid-js/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/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "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/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", + "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.19" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", + "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "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/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "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/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web-vitals": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", + "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..63470cb --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,45 @@ +{ + "name": "frontend", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port 3000", + "build": "vite build && tsc", + "preview": "vite preview", + "test": "vitest run", + "format": "biome format --write", + "format:check": "biome format", + "lint": "biome lint", + "check": "biome check" + }, + "dependencies": { + "@tailwindcss/vite": "^4.0.6", + "@tanstack/react-devtools": "^0.7.0", + "@tanstack/react-router": "^1.132.0", + "@tanstack/react-router-devtools": "^1.132.0", + "@tanstack/router-plugin": "^1.132.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.544.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.6", + "tw-animate-css": "^1.3.6" + }, + "devDependencies": { + "@biomejs/biome": "2.2.4", + "@tanstack/devtools-vite": "^0.3.11", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.2.0", + "@types/node": "^22.10.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^5.0.4", + "jsdom": "^27.0.0", + "typescript": "^5.7.2", + "vite": "^7.1.7", + "vitest": "^3.0.5", + "web-vitals": "^5.1.0" + } +} \ No newline at end of file diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx new file mode 100644 index 0000000..0e2be37 --- /dev/null +++ b/frontend/src/components/Header.tsx @@ -0,0 +1,69 @@ +import { Link } from "@tanstack/react-router"; + +import { useState } from "react"; +import { Home, Menu, X } from "lucide-react"; + +export default function Header() { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> +
+ +

+ + TanStack Logo + +

+
+ + + + ); +} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 0000000..3200be2 --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..1cd0c6d --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,36 @@ +import { StrictMode } from "react"; +import ReactDOM from "react-dom/client"; +import { RouterProvider, createRouter } from "@tanstack/react-router"; + +// Import the generated route tree +import { routeTree } from "./routeTree.gen"; + +import "./styles.css"; + +// Create a new router instance +const router = createRouter({ + routeTree, + context: {}, + defaultPreload: "intent", + scrollRestoration: true, + defaultStructuralSharing: true, + defaultPreloadStaleTime: 0, +}); + +// Register the router instance for type safety +declare module "@tanstack/react-router" { + interface Register { + router: typeof router; + } +} + +// Render the app +const rootElement = document.getElementById("app"); +if (rootElement && !rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + root.render( + + + , + ); +} diff --git a/frontend/src/routeTree.gen.ts b/frontend/src/routeTree.gen.ts new file mode 100644 index 0000000..d204c26 --- /dev/null +++ b/frontend/src/routeTree.gen.ts @@ -0,0 +1,59 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as rootRouteImport } from './routes/__root' +import { Route as IndexRouteImport } from './routes/index' + +const IndexRoute = IndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRouteImport, +} as any) + +export interface FileRoutesByFullPath { + '/': typeof IndexRoute +} +export interface FileRoutesByTo { + '/': typeof IndexRoute +} +export interface FileRoutesById { + __root__: typeof rootRouteImport + '/': typeof IndexRoute +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: '/' + fileRoutesByTo: FileRoutesByTo + to: '/' + id: '__root__' | '/' + fileRoutesById: FileRoutesById +} +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute +} + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexRouteImport + parentRoute: typeof rootRouteImport + } + } +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, +} +export const routeTree = rootRouteImport + ._addFileChildren(rootRouteChildren) + ._addFileTypes() diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx new file mode 100644 index 0000000..9bae8b5 --- /dev/null +++ b/frontend/src/routes/__root.tsx @@ -0,0 +1,25 @@ +import { Outlet, createRootRoute } from "@tanstack/react-router"; +import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; +import { TanStackDevtools } from "@tanstack/react-devtools"; + +import Header from "../components/Header"; + +export const Route = createRootRoute({ + component: () => ( + <> +
+ + , + }, + ]} + /> + + ), +}); diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx new file mode 100644 index 0000000..a89decb --- /dev/null +++ b/frontend/src/routes/index.tsx @@ -0,0 +1,33 @@ +import { createFileRoute } from "@tanstack/react-router"; + +export const Route = createFileRoute("/")({ + component: App, +}); + +function App() { + return ( + + ); +} diff --git a/frontend/src/styles.css b/frontend/src/styles.css new file mode 100644 index 0000000..de40f70 --- /dev/null +++ b/frontend/src/styles.css @@ -0,0 +1,142 @@ +@import 'tailwindcss'; + +@import 'tw-animate-css'; + +@custom-variant dark (&:is(.dark *)); + +body { + @apply m-0; + font-family: + -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', + 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: + source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; +} + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.21 0.006 285.885); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.871 0.006 286.286); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.21 0.006 285.885); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.871 0.006 286.286); +} + +.dark { + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.141 0.005 285.823); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.141 0.005 285.823); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.21 0.006 285.885); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.274 0.006 286.033); + --input: oklch(0.274 0.006 286.033); + --ring: oklch(0.442 0.017 285.786); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.274 0.006 286.033); + --sidebar-ring: oklch(0.442 0.017 285.786); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } + button:not(:disabled), + [role='button']:not(:disabled) { + cursor: pointer; + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..fbb99a2 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,28 @@ +{ + "include": ["**/*.ts", "**/*.tsx"], + "compilerOptions": { + "target": "ES2022", + "jsx": "react-jsx", + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "skipLibCheck": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..2a6e375 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,36 @@ +import { defineConfig } from 'vite' +import { devtools } from '@tanstack/devtools-vite' +import viteReact from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' + +import { tanstackRouter } from '@tanstack/router-plugin/vite' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + devtools(), + tanstackRouter({ + target: 'react', + autoCodeSplitting: true, + }), + viteReact(), + tailwindcss(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + server: { + host: "0.0.0.0", + proxy: { + '/api': { + target: 'http://localhost:8080/api', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, ""), + }, + }, + allowedHosts: true, + }, +}) From b41350ee86bcc04eef6e882718e3ebd4a788391c Mon Sep 17 00:00:00 2001 From: alex289 Date: Sat, 3 Jan 2026 22:20:58 +0100 Subject: [PATCH 02/12] feat: Replace biome lint with oxlint --- frontend/biome.json | 6 -- frontend/package-lock.json | 148 +++++++++++++++++++++++++++++++++++++ frontend/package.json | 6 +- 3 files changed, 152 insertions(+), 8 deletions(-) diff --git a/frontend/biome.json b/frontend/biome.json index f2523e0..80486aa 100644 --- a/frontend/biome.json +++ b/frontend/biome.json @@ -21,12 +21,6 @@ "indentStyle": "tab" }, "assist": { "actions": { "source": { "organizeImports": "on" } } }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, "javascript": { "formatter": { "quoteStyle": "double" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 37eff64..0d411bd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -30,6 +30,7 @@ "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", "jsdom": "^27.0.0", + "oxlint": "^1.36.0", "typescript": "^5.7.2", "vite": "^7.1.7", "vitest": "^3.0.5", @@ -1180,6 +1181,118 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@oxlint/darwin-arm64": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.36.0.tgz", + "integrity": "sha512-MJkj82GH+nhvWKJhSIM6KlZ8tyGKdogSQXtNdpIyP02r/tTayFJQaAEWayG2Jhsn93kske+nimg5MYFhwO/rlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/darwin-x64": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.36.0.tgz", + "integrity": "sha512-VvEhfkqj/99dCTqOcfkyFXOSbx4lIy5u2m2GHbK4WCMDySokOcMTNRHGw8fH/WgQ5cDrDMSTYIGQTmnBGi9tiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/linux-arm64-gnu": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.36.0.tgz", + "integrity": "sha512-EMx92X5q+hHc3olTuj/kgkx9+yP0p/AVs4yvHbUfzZhBekXNpUWxWvg4hIKmQWn+Ee2j4o80/0ACGO0hDYJ9mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-arm64-musl": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.36.0.tgz", + "integrity": "sha512-7YCxtrPIctVYLqWrWkk8pahdCxch6PtsaucfMLC7TOlDt4nODhnQd4yzEscKqJ8Gjrw1bF4g+Ngob1gB+Qr9Fw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-gnu": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.36.0.tgz", + "integrity": "sha512-lnaJVlx5r3NWmoOMesfQXJSf78jHTn8Z+sdAf795Kgteo72+qGC1Uax2SToCJVN2J8PNG3oRV5bLriiCNR2i6Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-musl": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.36.0.tgz", + "integrity": "sha512-AhuEU2Qdl66lSfTGu/Htirq8r/8q2YnZoG3yEXLMQWnPMn7efy8spD/N1NA7kH0Hll+cdfwgQkQqC2G4MS2lPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/win32-arm64": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.36.0.tgz", + "integrity": "sha512-GlWCBjUJY2QgvBFuNRkiRJu7K/djLmM0UQKfZV8IN+UXbP/JbjZHWKRdd4LXlQmzoz7M5Hd6p+ElCej8/90FCg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/win32-x64": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.36.0.tgz", + "integrity": "sha512-J+Vc00Utcf8p77lZPruQgb0QnQXuKnFogN88kCnOqs2a83I+vTBB8ILr0+L9sTwVRvIDMSC0pLdeQH4svWGFZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", @@ -3717,6 +3830,41 @@ "node": ">=0.10.0" } }, + "node_modules/oxlint": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.36.0.tgz", + "integrity": "sha512-IicUdXfXgI8OKrDPnoSjvBfeEF8PkKtm+CoLlg4LYe4ypc8U+T4r7730XYshdBGZdelg+JRw8GtCb2w/KaaZvw==", + "dev": true, + "license": "MIT", + "bin": { + "oxc_language_server": "bin/oxc_language_server", + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/darwin-arm64": "1.36.0", + "@oxlint/darwin-x64": "1.36.0", + "@oxlint/linux-arm64-gnu": "1.36.0", + "@oxlint/linux-arm64-musl": "1.36.0", + "@oxlint/linux-x64-gnu": "1.36.0", + "@oxlint/linux-x64-musl": "1.36.0", + "@oxlint/win32-arm64": "1.36.0", + "@oxlint/win32-x64": "1.36.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.10.0" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + } + } + }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 63470cb..4223acc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,7 +9,8 @@ "test": "vitest run", "format": "biome format --write", "format:check": "biome format", - "lint": "biome lint", + "lint": "oxlint", + "lint:fix": "oxlint --fix", "check": "biome check" }, "dependencies": { @@ -37,9 +38,10 @@ "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", "jsdom": "^27.0.0", + "oxlint": "^1.36.0", "typescript": "^5.7.2", "vite": "^7.1.7", "vitest": "^3.0.5", "web-vitals": "^5.1.0" } -} \ No newline at end of file +} From 46e13f1f74cbc60e5b3a81720a2ebda409ce9acd Mon Sep 17 00:00:00 2001 From: alex289 Date: Sun, 4 Jan 2026 15:09:48 +0100 Subject: [PATCH 03/12] Revert "feat: Replace biome lint with oxlint" This reverts commit b41350ee86bcc04eef6e882718e3ebd4a788391c. --- frontend/biome.json | 6 ++ frontend/package-lock.json | 148 ------------------------------------- frontend/package.json | 6 +- 3 files changed, 8 insertions(+), 152 deletions(-) diff --git a/frontend/biome.json b/frontend/biome.json index 80486aa..f2523e0 100644 --- a/frontend/biome.json +++ b/frontend/biome.json @@ -21,6 +21,12 @@ "indentStyle": "tab" }, "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, "javascript": { "formatter": { "quoteStyle": "double" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0d411bd..37eff64 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -30,7 +30,6 @@ "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", "jsdom": "^27.0.0", - "oxlint": "^1.36.0", "typescript": "^5.7.2", "vite": "^7.1.7", "vitest": "^3.0.5", @@ -1181,118 +1180,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@oxlint/darwin-arm64": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.36.0.tgz", - "integrity": "sha512-MJkj82GH+nhvWKJhSIM6KlZ8tyGKdogSQXtNdpIyP02r/tTayFJQaAEWayG2Jhsn93kske+nimg5MYFhwO/rlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@oxlint/darwin-x64": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.36.0.tgz", - "integrity": "sha512-VvEhfkqj/99dCTqOcfkyFXOSbx4lIy5u2m2GHbK4WCMDySokOcMTNRHGw8fH/WgQ5cDrDMSTYIGQTmnBGi9tiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@oxlint/linux-arm64-gnu": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.36.0.tgz", - "integrity": "sha512-EMx92X5q+hHc3olTuj/kgkx9+yP0p/AVs4yvHbUfzZhBekXNpUWxWvg4hIKmQWn+Ee2j4o80/0ACGO0hDYJ9mg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-arm64-musl": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.36.0.tgz", - "integrity": "sha512-7YCxtrPIctVYLqWrWkk8pahdCxch6PtsaucfMLC7TOlDt4nODhnQd4yzEscKqJ8Gjrw1bF4g+Ngob1gB+Qr9Fw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-x64-gnu": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.36.0.tgz", - "integrity": "sha512-lnaJVlx5r3NWmoOMesfQXJSf78jHTn8Z+sdAf795Kgteo72+qGC1Uax2SToCJVN2J8PNG3oRV5bLriiCNR2i6Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-x64-musl": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.36.0.tgz", - "integrity": "sha512-AhuEU2Qdl66lSfTGu/Htirq8r/8q2YnZoG3yEXLMQWnPMn7efy8spD/N1NA7kH0Hll+cdfwgQkQqC2G4MS2lPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/win32-arm64": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.36.0.tgz", - "integrity": "sha512-GlWCBjUJY2QgvBFuNRkiRJu7K/djLmM0UQKfZV8IN+UXbP/JbjZHWKRdd4LXlQmzoz7M5Hd6p+ElCej8/90FCg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@oxlint/win32-x64": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.36.0.tgz", - "integrity": "sha512-J+Vc00Utcf8p77lZPruQgb0QnQXuKnFogN88kCnOqs2a83I+vTBB8ILr0+L9sTwVRvIDMSC0pLdeQH4svWGFZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", @@ -3830,41 +3717,6 @@ "node": ">=0.10.0" } }, - "node_modules/oxlint": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.36.0.tgz", - "integrity": "sha512-IicUdXfXgI8OKrDPnoSjvBfeEF8PkKtm+CoLlg4LYe4ypc8U+T4r7730XYshdBGZdelg+JRw8GtCb2w/KaaZvw==", - "dev": true, - "license": "MIT", - "bin": { - "oxc_language_server": "bin/oxc_language_server", - "oxlint": "bin/oxlint" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/Boshen" - }, - "optionalDependencies": { - "@oxlint/darwin-arm64": "1.36.0", - "@oxlint/darwin-x64": "1.36.0", - "@oxlint/linux-arm64-gnu": "1.36.0", - "@oxlint/linux-arm64-musl": "1.36.0", - "@oxlint/linux-x64-gnu": "1.36.0", - "@oxlint/linux-x64-musl": "1.36.0", - "@oxlint/win32-arm64": "1.36.0", - "@oxlint/win32-x64": "1.36.0" - }, - "peerDependencies": { - "oxlint-tsgolint": ">=0.10.0" - }, - "peerDependenciesMeta": { - "oxlint-tsgolint": { - "optional": true - } - } - }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 4223acc..63470cb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,8 +9,7 @@ "test": "vitest run", "format": "biome format --write", "format:check": "biome format", - "lint": "oxlint", - "lint:fix": "oxlint --fix", + "lint": "biome lint", "check": "biome check" }, "dependencies": { @@ -38,10 +37,9 @@ "@types/react-dom": "^19.2.0", "@vitejs/plugin-react": "^5.0.4", "jsdom": "^27.0.0", - "oxlint": "^1.36.0", "typescript": "^5.7.2", "vite": "^7.1.7", "vitest": "^3.0.5", "web-vitals": "^5.1.0" } -} +} \ No newline at end of file From f88c41add6e6eb0551b62e306b3d21f31cecb207 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 16 Jan 2026 08:42:38 +0000 Subject: [PATCH 04/12] feat: Dependency updates and cleanup --- frontend/README.md | 259 ----- frontend/biome.json | 2 +- frontend/index.html | 2 +- frontend/package-lock.json | 1532 ++++------------------------ frontend/package.json | 44 +- frontend/src/components/Header.tsx | 15 +- frontend/src/lib/utils.ts | 2 +- frontend/src/main.tsx | 2 +- frontend/src/routes/__root.tsx | 4 +- frontend/src/routes/index.tsx | 20 +- frontend/vite.config.ts | 8 +- 11 files changed, 211 insertions(+), 1679 deletions(-) diff --git a/frontend/README.md b/frontend/README.md index d09b507..ccca479 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -49,262 +49,3 @@ Add components using the latest version of [Shadcn](https://ui.shadcn.com/). ```bash pnpm dlx shadcn@latest add button ``` - - - -## Routing -This project uses [TanStack Router](https://tanstack.com/router). The initial setup is a file based router. Which means that the routes are managed as files in `src/routes`. - -### Adding A Route - -To add a new route to your application just add another a new file in the `./src/routes` directory. - -TanStack will automatically generate the content of the route file for you. - -Now that you have two routes you can use a `Link` component to navigate between them. - -### Adding Links - -To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`. - -```tsx -import { Link } from "@tanstack/react-router"; -``` - -Then anywhere in your JSX you can use it like so: - -```tsx -About -``` - -This will create a link that will navigate to the `/about` route. - -More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent). - -### Using A Layout - -In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you use the `` component. - -Here is an example layout that includes a header: - -```tsx -import { Outlet, createRootRoute } from '@tanstack/react-router' -import { TanStackRouterDevtools } from '@tanstack/react-router-devtools' - -import { Link } from "@tanstack/react-router"; - -export const Route = createRootRoute({ - component: () => ( - <> -
- -
- - - - ), -}) -``` - -The `` component is not required so you can remove it if you don't want it in your layout. - -More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts). - - -## Data Fetching - -There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered. - -For example: - -```tsx -const peopleRoute = createRoute({ - getParentRoute: () => rootRoute, - path: "/people", - loader: async () => { - const response = await fetch("https://swapi.dev/api/people"); - return response.json() as Promise<{ - results: { - name: string; - }[]; - }>; - }, - component: () => { - const data = peopleRoute.useLoaderData(); - return ( -
    - {data.results.map((person) => ( -
  • {person.name}
  • - ))} -
- ); - }, -}); -``` - -Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters). - -### React-Query - -React-Query is an excellent addition or alternative to route loading and integrating it into you application is a breeze. - -First add your dependencies: - -```bash -npm install @tanstack/react-query @tanstack/react-query-devtools -``` - -Next we'll need to create a query client and provider. We recommend putting those in `main.tsx`. - -```tsx -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; - -// ... - -const queryClient = new QueryClient(); - -// ... - -if (!rootElement.innerHTML) { - const root = ReactDOM.createRoot(rootElement); - - root.render( - - - - ); -} -``` - -You can also add TanStack Query Devtools to the root route (optional). - -```tsx -import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; - -const rootRoute = createRootRoute({ - component: () => ( - <> - - - - - ), -}); -``` - -Now you can use `useQuery` to fetch your data. - -```tsx -import { useQuery } from "@tanstack/react-query"; - -import "./App.css"; - -function App() { - const { data } = useQuery({ - queryKey: ["people"], - queryFn: () => - fetch("https://swapi.dev/api/people") - .then((res) => res.json()) - .then((data) => data.results as { name: string }[]), - initialData: [], - }); - - return ( -
-
    - {data.map((person) => ( -
  • {person.name}
  • - ))} -
-
- ); -} - -export default App; -``` - -You can find out everything you need to know on how to use React-Query in the [React-Query documentation](https://tanstack.com/query/latest/docs/framework/react/overview). - -## State Management - -Another common requirement for React applications is state management. There are many options for state management in React. TanStack Store provides a great starting point for your project. - -First you need to add TanStack Store as a dependency: - -```bash -npm install @tanstack/store -``` - -Now let's create a simple counter in the `src/App.tsx` file as a demonstration. - -```tsx -import { useStore } from "@tanstack/react-store"; -import { Store } from "@tanstack/store"; -import "./App.css"; - -const countStore = new Store(0); - -function App() { - const count = useStore(countStore); - return ( -
- -
- ); -} - -export default App; -``` - -One of the many nice features of TanStack Store is the ability to derive state from other state. That derived state will update when the base state updates. - -Let's check this out by doubling the count using derived state. - -```tsx -import { useStore } from "@tanstack/react-store"; -import { Store, Derived } from "@tanstack/store"; -import "./App.css"; - -const countStore = new Store(0); - -const doubledStore = new Derived({ - fn: () => countStore.state * 2, - deps: [countStore], -}); -doubledStore.mount(); - -function App() { - const count = useStore(countStore); - const doubledCount = useStore(doubledStore); - - return ( -
- -
Doubled - {doubledCount}
-
- ); -} - -export default App; -``` - -We use the `Derived` class to create a new store that is derived from another store. The `Derived` class has a `mount` method that will start the derived store updating. - -Once we've created the derived store we can use it in the `App` component just like we would any other store using the `useStore` hook. - -You can find out everything you need to know on how to use TanStack Store in the [TanStack Store documentation](https://tanstack.com/store/latest). - -# Demo files - -Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed. - -# Learn More - -You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com). diff --git a/frontend/biome.json b/frontend/biome.json index f2523e0..cdfd60b 100644 --- a/frontend/biome.json +++ b/frontend/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/frontend/index.html b/frontend/index.html index f9cd681..5a49ff0 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -9,7 +9,7 @@ name="description" content="Web site created using create-tsrouter-app" /> - Create TanStack App - frontend + OrcaCD
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 37eff64..5ff7b5c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6,98 +6,31 @@ "": { "name": "frontend", "dependencies": { - "@tailwindcss/vite": "^4.0.6", - "@tanstack/react-devtools": "^0.7.0", - "@tanstack/react-router": "^1.132.0", - "@tanstack/react-router-devtools": "^1.132.0", - "@tanstack/router-plugin": "^1.132.0", + "@tailwindcss/vite": "^4.1.18", + "@tanstack/react-devtools": "^0.9.2", + "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router-devtools": "^1.150.0", + "@tanstack/router-plugin": "^1.150.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "lucide-react": "^0.544.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "tailwind-merge": "^3.0.2", - "tailwindcss": "^4.0.6", - "tw-animate-css": "^1.3.6" + "lucide-react": "^0.562.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.2.4", - "@tanstack/devtools-vite": "^0.3.11", - "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/node": "^22.10.2", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^5.0.4", - "jsdom": "^27.0.0", - "typescript": "^5.7.2", - "vite": "^7.1.7", - "vitest": "^3.0.5", - "web-vitals": "^5.1.0" - } - }, - "node_modules/@acemir/cssom": { - "version": "0.9.30", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.30.tgz", - "integrity": "sha512-9CnlMCI0LmCIq0olalQqdWrJHPzm0/tw3gzOA9zJSgvFX7Xau3D24mAGa4BtwxwY69nsuJW6kQqqCzf/mEcQgg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@asamuzakjp/css-color": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.1.tgz", - "integrity": "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.2.4" - } - }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "6.7.6", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.6.tgz", - "integrity": "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/nwsapi": "^2.3.9", - "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.4" - } - }, - "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" + "@biomejs/biome": "2.3.11", + "@tanstack/devtools-vite": "^0.4.1", + "@types/node": "^25.0.9", + "@types/react": "^19.2.8", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.2", + "typescript": "^5.9.3", + "vite": "^7.3.1" } }, - "node_modules/@asamuzakjp/nwsapi": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -126,6 +59,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -348,16 +282,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", @@ -404,9 +328,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.4.tgz", - "integrity": "sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.11.tgz", + "integrity": "sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -420,20 +344,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.2.4", - "@biomejs/cli-darwin-x64": "2.2.4", - "@biomejs/cli-linux-arm64": "2.2.4", - "@biomejs/cli-linux-arm64-musl": "2.2.4", - "@biomejs/cli-linux-x64": "2.2.4", - "@biomejs/cli-linux-x64-musl": "2.2.4", - "@biomejs/cli-win32-arm64": "2.2.4", - "@biomejs/cli-win32-x64": "2.2.4" + "@biomejs/cli-darwin-arm64": "2.3.11", + "@biomejs/cli-darwin-x64": "2.3.11", + "@biomejs/cli-linux-arm64": "2.3.11", + "@biomejs/cli-linux-arm64-musl": "2.3.11", + "@biomejs/cli-linux-x64": "2.3.11", + "@biomejs/cli-linux-x64-musl": "2.3.11", + "@biomejs/cli-win32-arm64": "2.3.11", + "@biomejs/cli-win32-x64": "2.3.11" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz", - "integrity": "sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.11.tgz", + "integrity": "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA==", "cpu": [ "arm64" ], @@ -448,9 +372,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz", - "integrity": "sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.11.tgz", + "integrity": "sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg==", "cpu": [ "x64" ], @@ -465,9 +389,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz", - "integrity": "sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.11.tgz", + "integrity": "sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==", "cpu": [ "arm64" ], @@ -482,9 +406,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz", - "integrity": "sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.11.tgz", + "integrity": "sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg==", "cpu": [ "arm64" ], @@ -499,9 +423,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz", - "integrity": "sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.11.tgz", + "integrity": "sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==", "cpu": [ "x64" ], @@ -516,9 +440,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz", - "integrity": "sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.11.tgz", + "integrity": "sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==", "cpu": [ "x64" ], @@ -533,9 +457,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz", - "integrity": "sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.11.tgz", + "integrity": "sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==", "cpu": [ "arm64" ], @@ -550,9 +474,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz", - "integrity": "sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.11.tgz", + "integrity": "sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg==", "cpu": [ "x64" ], @@ -566,141 +490,6 @@ "node": ">=14.21.3" } }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.22.tgz", - "integrity": "sha512-qBcx6zYlhleiFfdtzkRgwNC7VVoAwfK76Vmsw5t+PbvtdknO9StgRk7ROvq9so1iqbdW4uLIDAsXRsTfUrIoOw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", @@ -1117,24 +906,6 @@ "node": ">=18" } }, - "node_modules/@exodus/bytes": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.7.0.tgz", - "integrity": "sha512-5i+BtvujK/vM07YCGDyz4C4AyDzLmhxHMtM5HpUyPRtJPBdFPsj290ffXW+UXY21/G7GtXeHD2nRmq0T1ShyQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@exodus/crypto": "^1.0.0-rc.4" - }, - "peerDependenciesMeta": { - "@exodus/crypto": { - "optional": true - } - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1805,16 +1576,16 @@ } }, "node_modules/@tanstack/devtools": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@tanstack/devtools/-/devtools-0.7.0.tgz", - "integrity": "sha512-AlAoCqJhWLg9GBEaoV1g/j+X/WA1aJSWOsekxeuZpYeS2hdVuKAjj04KQLUMJhtLfNl2s2E+TCj7ZRtWyY3U4w==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tanstack/devtools/-/devtools-0.10.3.tgz", + "integrity": "sha512-M2HnKtaNf3Z8JDTNDq+X7/1gwOqSwTnCyC0GR+TYiRZM9mkY9GpvTqp6p6bx3DT8onu2URJiVxgHD9WK2e3MNQ==", "license": "MIT", "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", - "@tanstack/devtools-client": "0.0.3", - "@tanstack/devtools-event-bus": "0.3.3", + "@tanstack/devtools-client": "0.0.5", + "@tanstack/devtools-event-bus": "0.4.0", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", @@ -1835,7 +1606,6 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/@tanstack/devtools-client/-/devtools-client-0.0.5.tgz", "integrity": "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==", - "dev": true, "license": "MIT", "dependencies": { "@tanstack/devtools-event-client": "^0.4.0" @@ -1849,9 +1619,9 @@ } }, "node_modules/@tanstack/devtools-event-bus": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-bus/-/devtools-event-bus-0.3.3.tgz", - "integrity": "sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-bus/-/devtools-event-bus-0.4.0.tgz", + "integrity": "sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ==", "license": "MIT", "dependencies": { "ws": "^8.18.3" @@ -1868,7 +1638,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-client/-/devtools-event-client-0.4.0.tgz", "integrity": "sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -1900,9 +1669,9 @@ } }, "node_modules/@tanstack/devtools-vite": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.3.12.tgz", - "integrity": "sha512-fGJgu4xUhKmGk+a+/aHD8l5HKVk6+ObA+6D3YC3xCXbai/YmaGhztqcZf1tKUqjZyYyQLHsjqmKzvJgVpQP1jw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.4.1.tgz", + "integrity": "sha512-PkMOomcWnl/pUkCqIjqL/csjPHtkMVBirDpJVOZR7XJZDxo5CuD7B+3KsujFCF4Dsn6QYlae97gCZvxi/CB76Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1912,7 +1681,7 @@ "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.5", - "@tanstack/devtools-event-bus": "0.3.3", + "@tanstack/devtools-event-bus": "0.4.0", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" @@ -1928,39 +1697,10 @@ "vite": "^6.0.0 || ^7.0.0" } }, - "node_modules/@tanstack/devtools/node_modules/@tanstack/devtools-client": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@tanstack/devtools-client/-/devtools-client-0.0.3.tgz", - "integrity": "sha512-kl0r6N5iIL3t9gGDRAv55VRM3UIyMKVH83esRGq7xBjYsRLe/BeCIN2HqrlJkObUXQMKhy7i8ejuGOn+bDqDBw==", - "license": "MIT", - "dependencies": { - "@tanstack/devtools-event-client": "^0.3.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/devtools/node_modules/@tanstack/devtools-event-client": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@tanstack/devtools-event-client/-/devtools-event-client-0.3.5.tgz", - "integrity": "sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, "node_modules/@tanstack/history": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.141.0.tgz", - "integrity": "sha512-LS54XNyxyTs5m/pl1lkwlg7uZM3lvsv2FIIV1rsJgnfwVCnI+n4ZGZ2CcjNT13BPu/3hPP+iHmliBSscJxW5FQ==", + "version": "1.145.7", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.145.7.tgz", + "integrity": "sha512-gMo/ReTUp0a3IOcZoI3hH6PLDC2R/5ELQ7P2yu9F6aEkA0wSQh+Q4qzMrtcKvF2ut0oE+16xWCGDo/TdYd6cEQ==", "license": "MIT", "engines": { "node": ">=12" @@ -1971,12 +1711,12 @@ } }, "node_modules/@tanstack/react-devtools": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/@tanstack/react-devtools/-/react-devtools-0.7.11.tgz", - "integrity": "sha512-a2Lmz8x+JoDrsU6f7uKRcyyY+k8mA/n5mb9h7XJ3Fz/y3+sPV9t7vAW1s5lyNkQyyDt6V1Oim99faLthoJSxMw==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-devtools/-/react-devtools-0.9.2.tgz", + "integrity": "sha512-JNXvBO3jgq16GzTVm7p65n5zHNfMhnqF6Bm7CawjoqZrjEakxbM6Yvy63aKSIpbrdf+Wun2Xn8P0qD+vp56e1g==", "license": "MIT", "dependencies": { - "@tanstack/devtools": "0.7.0" + "@tanstack/devtools": "0.10.3" }, "engines": { "node": ">=18" @@ -1993,14 +1733,15 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.144.0.tgz", - "integrity": "sha512-GmRyIGmHtGj3VLTHXepIwXAxTcHyL5W7Vw7O1CnVEtFxQQWKMVOnWgI7tPY6FhlNwMKVb3n0mPFWz9KMYyd2GA==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", + "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", "license": "MIT", + "peer": true, "dependencies": { - "@tanstack/history": "1.141.0", + "@tanstack/history": "1.145.7", "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.144.0", + "@tanstack/router-core": "1.150.0", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -2018,12 +1759,12 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.144.0.tgz", - "integrity": "sha512-nstjZvZbOM4U0/Hzi82rtsP1DsR2tfigBidK+WuaDRVVstBsnwVor3DQXTGY5CcfgIiMI3eKzI17VOy3SQDDoQ==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.150.0.tgz", + "integrity": "sha512-TlvTE+XK5XVCfYjazoMWkjyyPKe4kMw2nCA7EuWoYUJKOqRW5oKvBY7auViGWxp51FKDEjV3bbok3wPKBYwZww==", "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.144.0" + "@tanstack/router-devtools-core": "1.150.0" }, "engines": { "node": ">=12" @@ -2033,8 +1774,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.144.0", - "@tanstack/router-core": "^1.144.0", + "@tanstack/react-router": "^1.150.0", + "@tanstack/router-core": "^1.150.0", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -2063,12 +1804,13 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.144.0.tgz", - "integrity": "sha512-6oVERtK9XDHCP4XojgHsdHO56ZSj11YaWjF5g/zw39LhyA6Lx+/X86AEIHO4y0BUrMQaJfcjdAQMVSAs6Vjtdg==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", + "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", "license": "MIT", + "peer": true, "dependencies": { - "@tanstack/history": "1.141.0", + "@tanstack/history": "1.145.7", "@tanstack/store": "^0.8.0", "cookie-es": "^2.0.0", "seroval": "^1.4.1", @@ -2085,9 +1827,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.144.0.tgz", - "integrity": "sha512-rbpQn1aHUtcfY3U3SyJqOZRqDu0a2uPK+TE2CH50HieJApmCuNKj5RsjVQYHgwiFFvR0w0LUmueTnl2X2hiWTg==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.150.0.tgz", + "integrity": "sha512-61V+4fq2fOPru/48cuojKvWhQx2h/nuj4nVHwzu9E7O8h391h4Hks6axxRbY98/rIz96mn5TCoc0aYuoga53bg==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -2102,9 +1844,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.144.0", - "csstype": "^3.0.10", - "solid-js": ">=1.9.5" + "@tanstack/router-core": "^1.150.0", + "csstype": "^3.0.10" }, "peerDependenciesMeta": { "csstype": { @@ -2113,14 +1854,14 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.145.2", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.145.2.tgz", - "integrity": "sha512-6DLwfqhexgxw2T2QuS9Y349Vb49hCXBIz9mjWyynjMrpejLXJL+PaHaKJw0Y+H7Ao6RE2vlvXCc2cMjgbz5c7Q==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.150.0.tgz", + "integrity": "sha512-WsA1bN5/I+cxE6V1DkU5ABIPBQxZLlxszElYgnIhs884tzukv76rYMFOy6Xqd51YIFdYtjDrxZbp4/vfkrVCug==", "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.144.0", + "@tanstack/router-core": "1.150.0", "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.141.0", + "@tanstack/virtual-file-routes": "1.145.4", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", @@ -2136,9 +1877,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.145.2", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.145.2.tgz", - "integrity": "sha512-dOABjCE4M2KxB+f/mY71dDZduwVTpf+tCPb4NxmAqbF5Rxes24QaaIZQmiU12jte/L8zYyIA/yX9fi93xZue5Q==", + "version": "1.150.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.150.0.tgz", + "integrity": "sha512-k2NLysBXO4Wpt4Oo0xeBhNtFsMwHOU8ud48/cWNWbV89QAjlk0XU5CGNj2JEaFMT0zlF3H/aM5/h0+vYnDjFFA==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2147,10 +1888,10 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.144.0", - "@tanstack/router-generator": "1.145.2", + "@tanstack/router-core": "1.150.0", + "@tanstack/router-generator": "1.150.0", "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.141.0", + "@tanstack/virtual-file-routes": "1.145.4", "babel-dead-code-elimination": "^1.0.11", "chokidar": "^3.6.0", "unplugin": "^2.1.2", @@ -2165,7 +1906,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.144.0", + "@tanstack/react-router": "^1.150.0", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" @@ -2221,9 +1962,9 @@ } }, "node_modules/@tanstack/virtual-file-routes": { - "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.141.0.tgz", - "integrity": "sha512-CJrWtr6L9TVzEImm9S7dQINx+xJcYP/aDkIi6gnaWtIgbZs1pnzsE0yJc2noqXZ+yAOqLx3TBGpBEs9tS0P9/A==", + "version": "1.145.4", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.145.4.tgz", + "integrity": "sha512-CI75JrfqSluhdGwLssgVeQBaCphgfkMQpi8MCY3UJX1hoGzXa8kHYJcUuIFMOLs1q7zqHy++EVVtMK03osR5wQ==", "license": "MIT", "engines": { "node": ">=12" @@ -2233,61 +1974,6 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@testing-library/dom": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "picocolors": "1.1.1", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/react": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.1.tgz", - "integrity": "sha512-gr4KtAWqIOQoucWYD/f6ki+j5chXfcPc74Col/6poTyqTmn7zRmodWahWRCp8tYd+GMqBonw6hstNzqjbs6gjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@testing-library/dom": "^10.0.0", - "@types/react": "^18.0.0 || ^19.0.0", - "@types/react-dom": "^18.0.0 || ^19.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2333,24 +2019,6 @@ "@babel/types": "^7.28.2" } }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2358,20 +2026,22 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", - "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", + "version": "25.0.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", + "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2381,6 +2051,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2406,218 +2077,50 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "dev": true, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "license": "ISC", + "engines": { + "node": ">=14" } }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "dev": true, - "license": "MIT", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", "dependencies": { - "tinyrainbow": "^2.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">= 8" } }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "dev": true, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" + "engines": { + "node": ">=8.6" }, "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", - "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/ast-types": { @@ -2653,16 +2156,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2706,6 +2199,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2720,16 +2214,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001762", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", @@ -2750,23 +2234,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", @@ -2780,16 +2247,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2847,65 +2304,12 @@ "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", "license": "MIT" }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssstyle": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.6.tgz", - "integrity": "sha512-legscpSpgSAeGEe0TNcai97DKt9Vd9AsAdOL7Uoetb52Ar/8eJm3LIa39qpv8wWzLFlNG4vVvppQM+teaMPj3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^4.1.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.21", - "css-tree": "^3.1.0", - "lru-cache": "^11.2.4" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/cssstyle/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", - "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", - "dev": true, "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.0.0" - }, - "engines": { - "node": ">=20" - } + "peer": true }, "node_modules/debug": { "version": "4.4.3", @@ -2924,33 +2328,6 @@ } } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2961,21 +2338,14 @@ } }, "node_modules/diff": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", - "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.267", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", @@ -2995,26 +2365,6 @@ "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/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", @@ -3078,26 +2428,6 @@ "node": ">=4" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -3189,47 +2519,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/html-encoding-sniffer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", - "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@exodus/bytes": "^1.6.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3272,13 +2561,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, "node_modules/isbot": { "version": "5.1.32", "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.32.tgz", @@ -3303,46 +2585,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, - "node_modules/jsdom": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz", - "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@acemir/cssom": "^0.9.28", - "@asamuzakjp/dom-selector": "^6.7.6", - "@exodus/bytes": "^1.6.0", - "cssstyle": "^5.3.4", - "data-urls": "^6.0.0", - "decimal.js": "^10.6.0", - "html-encoding-sniffer": "^6.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "parse5": "^8.0.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.0", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.1.0", - "ws": "^8.18.3", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3627,13 +2869,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3644,24 +2879,14 @@ } }, "node_modules/lucide-react": { - "version": "0.544.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", - "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -3671,13 +2896,6 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3717,35 +2935,12 @@ "node": ">=0.10.0" } }, - "node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "license": "MIT" }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3793,9 +2988,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -3807,36 +3002,12 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -3846,6 +3017,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3853,13 +3025,6 @@ "react": "^19.2.3" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" - }, "node_modules/react-refresh": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", @@ -3919,16 +3084,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -3979,19 +3134,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -4012,6 +3154,7 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" } @@ -4041,18 +3184,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, "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", + "peer": true, "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", @@ -4064,6 +3201,7 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" } @@ -4098,47 +3236,6 @@ "node": ">=0.10.0" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, "node_modules/tailwind-merge": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", @@ -4180,20 +3277,6 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -4210,56 +3293,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^7.0.19" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", - "dev": true, - "license": "MIT" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4272,32 +3305,6 @@ "node": ">=8.0" } }, - "node_modules/tough-cookie": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", - "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^7.0.5" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", - "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=20" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -4347,9 +3354,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "devOptional": true, "license": "MIT" }, @@ -4408,10 +3415,11 @@ } }, "node_modules/vite": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", - "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -4481,183 +3489,16 @@ } } }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/web-vitals": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.1.0.tgz", - "integrity": "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/webidl-conversions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", - "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=20" - } - }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "license": "MIT" }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", - "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^6.0.0", - "webidl-conversions": "^8.0.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -4675,23 +3516,6 @@ } } }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 63470cb..f8c5173 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,40 +6,34 @@ "dev": "vite --port 3000", "build": "vite build && tsc", "preview": "vite preview", - "test": "vitest run", "format": "biome format --write", "format:check": "biome format", "lint": "biome lint", "check": "biome check" }, "dependencies": { - "@tailwindcss/vite": "^4.0.6", - "@tanstack/react-devtools": "^0.7.0", - "@tanstack/react-router": "^1.132.0", - "@tanstack/react-router-devtools": "^1.132.0", - "@tanstack/router-plugin": "^1.132.0", + "@tailwindcss/vite": "^4.1.18", + "@tanstack/react-devtools": "^0.9.2", + "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router-devtools": "^1.150.0", + "@tanstack/router-plugin": "^1.150.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "lucide-react": "^0.544.0", - "react": "^19.2.0", - "react-dom": "^19.2.0", - "tailwind-merge": "^3.0.2", - "tailwindcss": "^4.0.6", - "tw-animate-css": "^1.3.6" + "lucide-react": "^0.562.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.18", + "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.2.4", - "@tanstack/devtools-vite": "^0.3.11", - "@testing-library/dom": "^10.4.0", - "@testing-library/react": "^16.2.0", - "@types/node": "^22.10.2", - "@types/react": "^19.2.0", - "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^5.0.4", - "jsdom": "^27.0.0", - "typescript": "^5.7.2", - "vite": "^7.1.7", - "vitest": "^3.0.5", - "web-vitals": "^5.1.0" + "@biomejs/biome": "2.3.11", + "@tanstack/devtools-vite": "^0.4.1", + "@types/node": "^25.0.9", + "@types/react": "^19.2.8", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.2", + "typescript": "^5.9.3", + "vite": "^7.3.1" } } \ No newline at end of file diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index 0e2be37..5f1d4f5 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -1,7 +1,6 @@ import { Link } from "@tanstack/react-router"; - -import { useState } from "react"; import { Home, Menu, X } from "lucide-react"; +import { useState } from "react"; export default function Header() { const [isOpen, setIsOpen] = useState(false); @@ -18,13 +17,7 @@ export default function Header() {

- - TanStack Logo - + OrcaCD

@@ -58,10 +51,6 @@ export default function Header() { Home - - {/* Demo Links Start */} - - {/* Demo Links End */} diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts index 3200be2..ac680b3 100644 --- a/frontend/src/lib/utils.ts +++ b/frontend/src/lib/utils.ts @@ -1,4 +1,4 @@ -import { clsx, type ClassValue } from "clsx"; +import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 1cd0c6d..85f7ae2 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,6 +1,6 @@ +import { createRouter, RouterProvider } from "@tanstack/react-router"; import { StrictMode } from "react"; import ReactDOM from "react-dom/client"; -import { RouterProvider, createRouter } from "@tanstack/react-router"; // Import the generated route tree import { routeTree } from "./routeTree.gen"; diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index 9bae8b5..e1f950d 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -1,6 +1,6 @@ -import { Outlet, createRootRoute } from "@tanstack/react-router"; -import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; import { TanStackDevtools } from "@tanstack/react-devtools"; +import { createRootRoute, Outlet } from "@tanstack/react-router"; +import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; import Header from "../components/Header"; diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx index a89decb..ccd3197 100644 --- a/frontend/src/routes/index.tsx +++ b/frontend/src/routes/index.tsx @@ -8,25 +8,7 @@ function App() { return (
-

- Edit src/routes/index.tsx and save to reload. -

- - Learn React - - - Learn TanStack - +

Hello world

); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 2a6e375..26ed28d 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -7,7 +7,7 @@ import { tanstackRouter } from '@tanstack/router-plugin/vite' import { fileURLToPath, URL } from 'node:url' // https://vitejs.dev/config/ -export default defineConfig({ +export default defineConfig(({ mode }) => ({ plugins: [ devtools(), tanstackRouter({ @@ -24,6 +24,8 @@ export default defineConfig({ }, server: { host: "0.0.0.0", + allowedHosts: true, + ...(mode === "development" && { proxy: { '/api': { target: 'http://localhost:8080/api', @@ -31,6 +33,6 @@ export default defineConfig({ rewrite: (path) => path.replace(/^\/api/, ""), }, }, - allowedHosts: true, + }) }, -}) +})) From 8201d39b013c1e16159fafec85f0382e05380b42 Mon Sep 17 00:00:00 2001 From: alex289 Date: Sat, 17 Jan 2026 23:38:17 +0100 Subject: [PATCH 05/12] feat: Add initial style and navbar --- frontend/package-lock.json | 792 ++++++++++++++++++- frontend/package.json | 9 +- frontend/src/components/Header.tsx | 58 -- frontend/src/components/mode-toggle.tsx | 216 +++++ frontend/src/components/navbar.tsx | 161 ++++ frontend/src/components/theme-provider.tsx | 73 ++ frontend/src/components/ui/button.tsx | 62 ++ frontend/src/components/ui/dropdown-menu.tsx | 255 ++++++ frontend/src/main.tsx | 1 + frontend/src/routes/__root.tsx | 15 +- frontend/src/routes/index.tsx | 2 +- frontend/src/styles.css | 216 +++-- 12 files changed, 1696 insertions(+), 164 deletions(-) delete mode 100644 frontend/src/components/Header.tsx create mode 100644 frontend/src/components/mode-toggle.tsx create mode 100644 frontend/src/components/navbar.tsx create mode 100644 frontend/src/components/theme-provider.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5ff7b5c..80998ce 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6,6 +6,9 @@ "": { "name": "frontend", "dependencies": { + "@fontsource/geist-mono": "^5.2.7", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", "@tanstack/react-router": "^1.150.0", @@ -59,7 +62,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -906,6 +908,53 @@ "node": ">=18" } }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@fontsource/geist-mono": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/geist-mono/-/geist-mono-5.2.7.tgz", + "integrity": "sha512-xVPVFISJg/K0VVd+aQN0Y7X/sw9hUcJPyDWFJ5GpyU3bHELhoRsJkPSRSHXW32mOi0xZCUQDOaPj1sqIFJ1FGg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -951,6 +1000,593 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", @@ -1737,7 +2373,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/react-store": "^0.8.0", @@ -1808,7 +2443,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/history": "1.145.7", "@tanstack/store": "^0.8.0", @@ -2031,7 +2665,6 @@ "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2041,7 +2674,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2051,7 +2683,6 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2123,6 +2754,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ast-types": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", @@ -2199,7 +2842,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2308,8 +2950,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", @@ -2337,6 +2978,12 @@ "node": ">=8" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, "node_modules/diff": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", @@ -2480,6 +3127,15 @@ "node": ">=6.9.0" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/get-tsconfig": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", @@ -3007,7 +3663,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3017,7 +3672,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3035,6 +3689,75 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3154,7 +3877,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -3189,7 +3911,6 @@ "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", @@ -3201,7 +3922,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -3405,6 +4125,49 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", @@ -3419,7 +4182,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", diff --git a/frontend/package.json b/frontend/package.json index f8c5173..6cad12d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,9 +9,14 @@ "format": "biome format --write", "format:check": "biome format", "lint": "biome lint", - "check": "biome check" + "lint:fix": "biome lint --write", + "check": "biome check", + "check:fix": "biome check --write" }, "dependencies": { + "@fontsource/geist-mono": "^5.2.7", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", "@tanstack/react-router": "^1.150.0", @@ -36,4 +41,4 @@ "typescript": "^5.9.3", "vite": "^7.3.1" } -} \ No newline at end of file +} diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx deleted file mode 100644 index 5f1d4f5..0000000 --- a/frontend/src/components/Header.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Link } from "@tanstack/react-router"; -import { Home, Menu, X } from "lucide-react"; -import { useState } from "react"; - -export default function Header() { - const [isOpen, setIsOpen] = useState(false); - - return ( - <> -
- -

- OrcaCD -

-
- - - - ); -} diff --git a/frontend/src/components/mode-toggle.tsx b/frontend/src/components/mode-toggle.tsx new file mode 100644 index 0000000..0253479 --- /dev/null +++ b/frontend/src/components/mode-toggle.tsx @@ -0,0 +1,216 @@ +import { Moon, Sun } from "lucide-react"; +import { useCallback } from "react"; +import { Button } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; + +type AnimationVariant = "circle" | "circle-blur" | "gif" | "polygon"; + +type StartPosition = + | "center" + | "top-left" + | "top-right" + | "bottom-left" + | "bottom-right"; + +export interface ThemeToggleButtonProps { + theme?: "light" | "dark"; + showLabel?: boolean; + variant?: AnimationVariant; + start?: StartPosition; + url?: string; // For gif variant + className?: string; + onClick?: () => void; +} + +export const ModeToggle = ({ + theme = "light", + showLabel = false, + variant = "circle", + start = "center", + url, + className, + onClick, +}: ThemeToggleButtonProps) => { + const handleClick = useCallback(() => { + // Inject animation styles for this specific transition + const styleId = `theme-transition-${Date.now()}`; + const style = document.createElement("style"); + style.id = styleId; + + // Generate animation CSS based on variant + let css = ""; + const positions = { + center: "center", + "top-left": "top left", + "top-right": "top right", + "bottom-left": "bottom left", + "bottom-right": "bottom right", + }; + + if (variant === "circle") { + const cx = + start === "center" ? "50" : start.includes("left") ? "0" : "100"; + const cy = + start === "center" ? "50" : start.includes("top") ? "0" : "100"; + css = ` + @supports (view-transition-name: root) { + ::view-transition-old(root) { + animation: none; + } + ::view-transition-new(root) { + animation: circle-expand 0.4s ease-out; + transform-origin: ${positions[start]}; + } + @keyframes circle-expand { + from { + clip-path: circle(0% at ${cx}% ${cy}%); + } + to { + clip-path: circle(150% at ${cx}% ${cy}%); + } + } + } + `; + } else if (variant === "circle-blur") { + const cx = + start === "center" ? "50" : start.includes("left") ? "0" : "100"; + const cy = + start === "center" ? "50" : start.includes("top") ? "0" : "100"; + css = ` + @supports (view-transition-name: root) { + ::view-transition-old(root) { + animation: none; + } + ::view-transition-new(root) { + animation: circle-blur-expand 0.5s ease-out; + transform-origin: ${positions[start]}; + filter: blur(0); + } + @keyframes circle-blur-expand { + from { + clip-path: circle(0% at ${cx}% ${cy}%); + filter: blur(4px); + } + to { + clip-path: circle(150% at ${cx}% ${cy}%); + filter: blur(0); + } + } + } + `; + } else if (variant === "gif" && url) { + css = ` + @supports (view-transition-name: root) { + ::view-transition-old(root) { + animation: fade-out 0.4s ease-out; + } + ::view-transition-new(root) { + animation: gif-reveal 2.5s cubic-bezier(0.4, 0, 0.2, 1); + mask-image: url('${url}'); + mask-size: 0%; + mask-repeat: no-repeat; + mask-position: center; + } + @keyframes fade-out { + to { + opacity: 0; + } + } + @keyframes gif-reveal { + 0% { + mask-size: 0%; + } + 20% { + mask-size: 35%; + } + 60% { + mask-size: 35%; + } + 100% { + mask-size: 300%; + } + } + } + `; + } else if (variant === "polygon") { + css = ` + @supports (view-transition-name: root) { + ::view-transition-old(root) { + animation: none; + } + ::view-transition-new(root) { + animation: ${theme === "light" ? "wipe-in-dark" : "wipe-in-light"} 0.4s ease-out; + } + @keyframes wipe-in-dark { + from { + clip-path: polygon(0 0, 0 0, 0 100%, 0 100%); + } + to { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); + } + } + @keyframes wipe-in-light { + from { + clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%); + } + to { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); + } + } + } + `; + } + + if (css) { + style.textContent = css; + document.head.appendChild(style); + + // Clean up animation styles after transition + setTimeout(() => { + const styleEl = document.getElementById(styleId); + if (styleEl) { + styleEl.remove(); + } + }, 3000); + } + + // Call the onClick handler if provided + onClick?.(); + }, [onClick, variant, start, url, theme]); + + return ( + + ); +}; + +// Export a helper hook for using with View Transitions API +export const useThemeTransition = () => { + const startTransition = useCallback((updateFn: () => void) => { + if ("startViewTransition" in document) { + document.startViewTransition(updateFn); + } else { + updateFn(); + } + }, []); + + return { startTransition }; +}; diff --git a/frontend/src/components/navbar.tsx b/frontend/src/components/navbar.tsx new file mode 100644 index 0000000..fc9daa8 --- /dev/null +++ b/frontend/src/components/navbar.tsx @@ -0,0 +1,161 @@ +import { Link, useLocation } from "@tanstack/react-router"; +import { useCallback } from "react"; +import { ModeToggle, useThemeTransition } from "./mode-toggle"; +import { useTheme } from "./theme-provider"; + +import { useState } from "react" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { + LayoutGrid, + GitBranch, + Bell, + User, + LogOut, + ChevronDown, + FileText, + HelpCircle, + Server, + Activity, + Menu, + X, +} from "lucide-react" +import { cn } from "@/lib/utils" + +const navItems = [ + { name: "Applications", href: "/applications", icon: LayoutGrid }, + { name: "Repositories", href: "/repositories", icon: GitBranch }, + { name: "Hosts", href: "/hosts", icon: Server }, + { name: "Activity", href: "/activity", icon: Activity }, +] + +export default function Navbar() { + const { theme, setTheme } = useTheme(); + const { startTransition } = useThemeTransition(); + + const handleThemeToggle = useCallback(() => { + const newMode = theme === "dark" ? "light" : "dark"; + + startTransition(() => { + setTheme(newMode); + }); + }, [theme, setTheme, startTransition]); + + const location = useLocation() + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + + return ( +
+
+
+ + OrcaCD + + + +
+ +
+ + + + + + + + + + + + + + + + + User Settings + + + + + + + Sign Out + + + + + + +
+
+ + {mobileMenuOpen && ( + + )} +
+ ) +} diff --git a/frontend/src/components/theme-provider.tsx b/frontend/src/components/theme-provider.tsx new file mode 100644 index 0000000..ccee557 --- /dev/null +++ b/frontend/src/components/theme-provider.tsx @@ -0,0 +1,73 @@ +import { createContext, useContext, useEffect, useState } from "react"; + +type Theme = "dark" | "light" | "system"; + +type ThemeProviderProps = { + children: React.ReactNode; + defaultTheme?: Theme; + storageKey?: string; +}; + +type ThemeProviderState = { + theme: Theme; + setTheme: (theme: Theme) => void; +}; + +const initialState: ThemeProviderState = { + theme: "system", + setTheme: () => null, +}; + +const ThemeProviderContext = createContext(initialState); + +export function ThemeProvider({ + children, + defaultTheme = "system", + storageKey = "vite-ui-theme", + ...props +}: ThemeProviderProps) { + const [theme, setTheme] = useState( + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme, + ); + + useEffect(() => { + const root = window.document.documentElement; + + root.classList.remove("light", "dark"); + + if (theme === "system") { + const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") + .matches + ? "dark" + : "light"; + + root.classList.add(systemTheme); + return; + } + + root.classList.add(theme); + }, [theme]); + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme); + setTheme(theme); + }, + }; + + return ( + + {children} + + ); +} + +export const useTheme = () => { + const context = useContext(ThemeProviderContext); + + if (context === undefined) + throw new Error("useTheme must be used within a ThemeProvider"); + + return context; +}; diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx new file mode 100644 index 0000000..4247f64 --- /dev/null +++ b/frontend/src/components/ui/button.tsx @@ -0,0 +1,62 @@ +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + "icon-sm": "size-8", + "icon-lg": "size-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +function Button({ + className, + variant = "default", + size = "default", + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : "button"; + + return ( + + ); +} + +export { Button, buttonVariants }; diff --git a/frontend/src/components/ui/dropdown-menu.tsx b/frontend/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..fe60a69 --- /dev/null +++ b/frontend/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,255 @@ +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +function DropdownMenu({ + ...props +}: React.ComponentProps) { + return ; +} + +function DropdownMenuPortal({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuContent({ + className, + sideOffset = 4, + ...props +}: React.ComponentProps) { + return ( + + + + ); +} + +function DropdownMenuGroup({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuItem({ + className, + inset, + variant = "default", + ...props +}: React.ComponentProps & { + inset?: boolean; + variant?: "default" | "destructive"; +}) { + return ( + + ); +} + +function DropdownMenuCheckboxItem({ + className, + children, + checked, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ); +} + +function DropdownMenuRadioGroup({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuRadioItem({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ); +} + +function DropdownMenuLabel({ + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean; +}) { + return ( + + ); +} + +function DropdownMenuSeparator({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuShortcut({ + className, + ...props +}: React.ComponentProps<"span">) { + return ( + + ); +} + +function DropdownMenuSub({ + ...props +}: React.ComponentProps) { + return ; +} + +function DropdownMenuSubTrigger({ + className, + inset, + children, + ...props +}: React.ComponentProps & { + inset?: boolean; +}) { + return ( + + {children} + + + ); +} + +function DropdownMenuSubContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + DropdownMenu, + DropdownMenuPortal, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubTrigger, + DropdownMenuSubContent, +}; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 85f7ae2..7bb8012 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -15,6 +15,7 @@ const router = createRouter({ scrollRestoration: true, defaultStructuralSharing: true, defaultPreloadStaleTime: 0, + defaultViewTransition: true, }); // Register the router instance for type safety diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index e1f950d..db2f668 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -2,12 +2,16 @@ import { TanStackDevtools } from "@tanstack/react-devtools"; import { createRootRoute, Outlet } from "@tanstack/react-router"; import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; -import Header from "../components/Header"; +import { ThemeProvider } from "@/components/theme-provider"; +import Navbar from "../components/navbar"; export const Route = createRootRoute({ component: () => ( - <> -
+ +
+ + , }, ]} - /> - + /> +
+
), }); diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx index ccd3197..6a7dd4c 100644 --- a/frontend/src/routes/index.tsx +++ b/frontend/src/routes/index.tsx @@ -7,7 +7,7 @@ export const Route = createFileRoute("/")({ function App() { return (
-
+

Hello world

diff --git a/frontend/src/styles.css b/frontend/src/styles.css index de40f70..88c330c 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,92 +1,117 @@ +@import '@fontsource/geist-mono'; + @import 'tailwindcss'; @import 'tw-animate-css'; @custom-variant dark (&:is(.dark *)); -body { - @apply m-0; - font-family: - -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', - 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: - source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; -} - :root { - --background: oklch(1 0 0); - --foreground: oklch(0.141 0.005 285.823); - --card: oklch(1 0 0); - --card-foreground: oklch(0.141 0.005 285.823); - --popover: oklch(1 0 0); - --popover-foreground: oklch(0.141 0.005 285.823); - --primary: oklch(0.21 0.006 285.885); - --primary-foreground: oklch(0.985 0 0); - --secondary: oklch(0.967 0.001 286.375); - --secondary-foreground: oklch(0.21 0.006 285.885); - --muted: oklch(0.967 0.001 286.375); - --muted-foreground: oklch(0.552 0.016 285.938); - --accent: oklch(0.967 0.001 286.375); - --accent-foreground: oklch(0.21 0.006 285.885); - --destructive: oklch(0.577 0.245 27.325); - --destructive-foreground: oklch(0.577 0.245 27.325); - --border: oklch(0.92 0.004 286.32); - --input: oklch(0.92 0.004 286.32); - --ring: oklch(0.871 0.006 286.286); - --chart-1: oklch(0.646 0.222 41.116); - --chart-2: oklch(0.6 0.118 184.704); - --chart-3: oklch(0.398 0.07 227.392); - --chart-4: oklch(0.828 0.189 84.429); - --chart-5: oklch(0.769 0.188 70.08); - --radius: 0.625rem; - --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.141 0.005 285.823); - --sidebar-primary: oklch(0.21 0.006 285.885); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.967 0.001 286.375); - --sidebar-accent-foreground: oklch(0.21 0.006 285.885); - --sidebar-border: oklch(0.92 0.004 286.32); - --sidebar-ring: oklch(0.871 0.006 286.286); + --background: #f1f5f9; + --foreground: #0f172a; + --card: #ffffff; + --card-foreground: #0f172a; + --popover: #ffffff; + --popover-foreground: #0f172a; + --primary: #0f618a; + --primary-foreground: #f8fafc; + --secondary: #f1f5f9; + --secondary-foreground: #0f172a; + --muted: #f1f5f9; + --muted-foreground: #64748b; + --accent: #f1f5f9; + --accent-foreground: #0f172a; + --destructive: #ef4444; + --destructive-foreground: #f8fafc; + --border: #e2e8f0; + --input: #e2e8f0; + --ring: #0f172a; + --chart-1: #0f618a; + --chart-2: #2e8ab8; + --chart-3: #70a7c2; + --chart-4: #b3c4cc; + --chart-5: #d5dadd; + --sidebar: #0f618a; + --sidebar-foreground: #f8fafc; + --sidebar-primary: #f8fafc; + --sidebar-primary-foreground: #0f618a; + --sidebar-accent: #297aa3; + --sidebar-accent-foreground: #f8fafc; + --sidebar-border: #134f6c; + --sidebar-ring: #f8fafc; + --font-sans: Geist Mono, ui-monospace, monospace; + --font-serif: ui-serif, Georgia, Cambria, Times New Roman, Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + --radius: 0.5rem; + --shadow-x: 0; + --shadow-y: 4px; + --shadow-blur: 6px; + --shadow-spread: -2px; + --shadow-opacity: 0.05; + --shadow-color: 0 0 0; + --shadow-2xs: 0 4px 6px -2px hsl(0 0 0 / 0.03); + --shadow-xs: 0 4px 6px -2px hsl(0 0 0 / 0.03); + --shadow-sm: 0 4px 6px -2px hsl(0 0 0 / 0.05), 0 1px 2px -3px hsl(0 0 0 / 0.05); + --shadow: 0 4px 6px -2px hsl(0 0 0 / 0.05), 0 1px 2px -3px hsl(0 0 0 / 0.05); + --shadow-md: 0 4px 6px -2px hsl(0 0 0 / 0.05), 0 2px 4px -3px hsl(0 0 0 / 0.05); + --shadow-lg: 0 4px 6px -2px hsl(0 0 0 / 0.05), 0 4px 6px -3px hsl(0 0 0 / 0.05); + --shadow-xl: 0 4px 6px -2px hsl(0 0 0 / 0.05), 0 8px 10px -3px hsl(0 0 0 / 0.05); + --shadow-2xl: 0 4px 6px -2px hsl(0 0 0 / 0.13); + --tracking-normal: 0; + --spacing: 0.25rem; } .dark { - --background: oklch(0.141 0.005 285.823); - --foreground: oklch(0.985 0 0); - --card: oklch(0.141 0.005 285.823); - --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.141 0.005 285.823); - --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.985 0 0); - --primary-foreground: oklch(0.21 0.006 285.885); - --secondary: oklch(0.274 0.006 286.033); - --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.274 0.006 286.033); - --muted-foreground: oklch(0.705 0.015 286.067); - --accent: oklch(0.274 0.006 286.033); - --accent-foreground: oklch(0.985 0 0); - --destructive: oklch(0.396 0.141 25.723); - --destructive-foreground: oklch(0.637 0.237 25.331); - --border: oklch(0.274 0.006 286.033); - --input: oklch(0.274 0.006 286.033); - --ring: oklch(0.442 0.017 285.786); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.696 0.17 162.48); - --chart-3: oklch(0.769 0.188 70.08); - --chart-4: oklch(0.627 0.265 303.9); - --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.21 0.006 285.885); - --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0 0); - --sidebar-accent: oklch(0.274 0.006 286.033); - --sidebar-accent-foreground: oklch(0.985 0 0); - --sidebar-border: oklch(0.274 0.006 286.033); - --sidebar-ring: oklch(0.442 0.017 285.786); + --background: #0f172a; + --foreground: #f8fafc; + --card: #0f172a; + --card-foreground: #f8fafc; + --popover: #0f172a; + --popover-foreground: #f8fafc; + --primary: #19a2e6; + --primary-foreground: #0f172a; + --secondary: #1e293b; + --secondary-foreground: #f8fafc; + --muted: #1e293b; + --muted-foreground: #94a3b8; + --accent: #1e293b; + --accent-foreground: #f8fafc; + --destructive: #7f1d1d; + --destructive-foreground: #f8fafc; + --border: #1e293b; + --input: #1e293b; + --ring: #cbd5e1; + --chart-1: #19a2e6; + --chart-2: #70b8db; + --chart-3: #b8d3e0; + --chart-4: #e0e7eb; + --chart-5: #f1f3f4; + --sidebar: #19a2e6; + --sidebar-foreground: #0f172a; + --sidebar-primary: #0f172a; + --sidebar-primary-foreground: #19a2e6; + --sidebar-accent: #5cadd6; + --sidebar-accent-foreground: #0f172a; + --sidebar-border: #1f7ead; + --sidebar-ring: #0f172a; + --font-sans: Geist Mono, ui-monospace, monospace; + --font-serif: ui-serif, Georgia, Cambria, Times New Roman, Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; + --radius: 0.5rem; + --shadow-x: 0; + --shadow-y: 4px; + --shadow-blur: 6px; + --shadow-spread: -2px; + --shadow-opacity: 0.3; + --shadow-color: 0 0 0; + --shadow-2xs: 0 4px 6px -2px hsl(0 0 0 / 0.15); + --shadow-xs: 0 4px 6px -2px hsl(0 0 0 / 0.15); + --shadow-sm: 0 4px 6px -2px hsl(0 0 0 / 0.30), 0 1px 2px -3px hsl(0 0 0 / 0.30); + --shadow: 0 4px 6px -2px hsl(0 0 0 / 0.30), 0 1px 2px -3px hsl(0 0 0 / 0.30); + --shadow-md: 0 4px 6px -2px hsl(0 0 0 / 0.30), 0 2px 4px -3px hsl(0 0 0 / 0.30); + --shadow-lg: 0 4px 6px -2px hsl(0 0 0 / 0.30), 0 4px 6px -3px hsl(0 0 0 / 0.30); + --shadow-xl: 0 4px 6px -2px hsl(0 0 0 / 0.30), 0 8px 10px -3px hsl(0 0 0 / 0.30); + --shadow-2xl: 0 4px 6px -2px hsl(0 0 0 / 0.75); } @theme inline { @@ -114,10 +139,6 @@ code { --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); - --radius-sm: calc(var(--radius) - 4px); - --radius-md: calc(var(--radius) - 2px); - --radius-lg: var(--radius); - --radius-xl: calc(var(--radius) + 4px); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); @@ -126,6 +147,35 @@ code { --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); + + --font-sans: var(--font-sans); + --font-mono: var(--font-mono); + --font-serif: var(--font-serif); + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow: var(--shadow); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); + + --tracking-tighter: calc(var(--tracking-normal) - 0.05em); + --tracking-tight: calc(var(--tracking-normal) - 0.025em); + --tracking-normal: var(--tracking-normal); + --tracking-wide: calc(var(--tracking-normal) + 0.025em); + --tracking-wider: calc(var(--tracking-normal) + 0.05em); + --tracking-widest: calc(var(--tracking-normal) + 0.1em); +} + +body { + letter-spacing: var(--tracking-normal); } @layer base { From 2512291d426ccef1f82388badd0c0f4c724f3aea Mon Sep 17 00:00:00 2001 From: alex289 Date: Sat, 17 Jan 2026 23:38:44 +0100 Subject: [PATCH 06/12] fix: Formatting --- frontend/src/components/navbar.tsx | 270 +++++++++++++++-------------- frontend/src/routes/__root.tsx | 30 ++-- 2 files changed, 151 insertions(+), 149 deletions(-) diff --git a/frontend/src/components/navbar.tsx b/frontend/src/components/navbar.tsx index fc9daa8..97ae55d 100644 --- a/frontend/src/components/navbar.tsx +++ b/frontend/src/components/navbar.tsx @@ -1,39 +1,37 @@ import { Link, useLocation } from "@tanstack/react-router"; -import { useCallback } from "react"; -import { ModeToggle, useThemeTransition } from "./mode-toggle"; -import { useTheme } from "./theme-provider"; - -import { useState } from "react" -import { Button } from "@/components/ui/button" import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuSeparator, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu" + Activity, + Bell, + ChevronDown, + FileText, + GitBranch, + HelpCircle, + LayoutGrid, + LogOut, + Menu, + Server, + User, + X, +} from "lucide-react"; +import { useCallback, useState } from "react"; +import { Button } from "@/components/ui/button"; import { - LayoutGrid, - GitBranch, - Bell, - User, - LogOut, - ChevronDown, - FileText, - HelpCircle, - Server, - Activity, - Menu, - X, -} from "lucide-react" -import { cn } from "@/lib/utils" + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { cn } from "@/lib/utils"; +import { ModeToggle, useThemeTransition } from "./mode-toggle"; +import { useTheme } from "./theme-provider"; const navItems = [ - { name: "Applications", href: "/applications", icon: LayoutGrid }, - { name: "Repositories", href: "/repositories", icon: GitBranch }, - { name: "Hosts", href: "/hosts", icon: Server }, - { name: "Activity", href: "/activity", icon: Activity }, -] + { name: "Applications", href: "/applications", icon: LayoutGrid }, + { name: "Repositories", href: "/repositories", icon: GitBranch }, + { name: "Hosts", href: "/hosts", icon: Server }, + { name: "Activity", href: "/activity", icon: Activity }, +]; export default function Navbar() { const { theme, setTheme } = useTheme(); @@ -47,115 +45,121 @@ export default function Navbar() { }); }, [theme, setTheme, startTransition]); - const location = useLocation() - const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + const location = useLocation(); + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); - return ( -
-
-
- - OrcaCD - + return ( +
+
+
+ + + OrcaCD + + - -
+ +
-
- +
+ - + - + - + - - - - - - - - - User Settings - - - - - - - Sign Out - - - - + + + + + + + + + User Settings + + + + + + + Sign Out + + + + - -
-
+ +
+
- {mobileMenuOpen && ( - - )} -
- ) + {mobileMenuOpen && ( + + )} +
+ ); } diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index db2f668..3956fa6 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -8,23 +8,21 @@ import Navbar from "../components/navbar"; export const Route = createRootRoute({ component: () => ( -
- - - - , - }, - ]} +
+ + + , + }, + ]} /> -
+
), }); From c0fe0e41806b7eb2ca2803c278ba2a80a8f17b09 Mon Sep 17 00:00:00 2001 From: alex289 Date: Sat, 17 Jan 2026 23:39:57 +0100 Subject: [PATCH 07/12] feat: Move favicon to assets --- frontend/index.html | 2 +- frontend/public/{ => assets}/favicon.ico | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename frontend/public/{ => assets}/favicon.ico (100%) diff --git a/frontend/index.html b/frontend/index.html index 5a49ff0..3df6b8d 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,7 +3,7 @@ - + Date: Sat, 17 Jan 2026 23:43:27 +0100 Subject: [PATCH 08/12] feat: Format on save --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 70dd163..a130b50 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -31,5 +31,6 @@ }, "editor.codeActionsOnSave": { "source.organizeImports.biome": "explicit" - } + }, + "editor.formatOnSave": true } From 62a872dbe78f5f9ac8aa334a8d9fecd6e2147f58 Mon Sep 17 00:00:00 2001 From: alex289 Date: Sun, 18 Jan 2026 16:20:49 +0100 Subject: [PATCH 09/12] feat: Tanstack improvements --- frontend/index.html | 10 +---- frontend/package-lock.json | 70 +++++++++++++++++----------------- frontend/package.json | 6 +-- frontend/src/main.tsx | 16 +++++++- frontend/src/routes/__root.tsx | 56 ++++++++++++++++++--------- frontend/src/routes/index.tsx | 4 +- 6 files changed, 94 insertions(+), 68 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index 3df6b8d..fa3a1ef 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,15 +1,9 @@ - + - - - - OrcaCD +
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 80998ce..33135b2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,9 +11,9 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.150.0", - "@tanstack/react-router-devtools": "^1.150.0", - "@tanstack/router-plugin": "^1.150.0", + "@tanstack/react-router": "^1.151.3", + "@tanstack/react-router-devtools": "^1.151.3", + "@tanstack/router-plugin": "^1.151.5", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.562.0", @@ -2334,9 +2334,9 @@ } }, "node_modules/@tanstack/history": { - "version": "1.145.7", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.145.7.tgz", - "integrity": "sha512-gMo/ReTUp0a3IOcZoI3hH6PLDC2R/5ELQ7P2yu9F6aEkA0wSQh+Q4qzMrtcKvF2ut0oE+16xWCGDo/TdYd6cEQ==", + "version": "1.151.1", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.151.1.tgz", + "integrity": "sha512-Z/eymNBuUGHYIea7nNX3xR5feqx418ChlwWOKklVpCVzEQ5Q3kNTUw+WK4HYUKxF+1uXFN01Dbuhhl7SmW1LJA==", "license": "MIT", "engines": { "node": ">=12" @@ -2369,14 +2369,14 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.150.0.tgz", - "integrity": "sha512-k/oycTCpBT2XoEk9dNd/nNYhF0X9fLSB10lT40+NVX1TjOtBq5whksk8MT6oRnSoQ8KWeb7La3G9kFaAeSULkA==", + "version": "1.151.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.151.3.tgz", + "integrity": "sha512-Xb8444OgVpmwCl9hpUA+N/X0dsik/WWYWdldIYNAcmBAl1ZYYXm8kKnfjgHS2aMZzPnqN1BjKocKgc5jg3lK9Q==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.145.7", + "@tanstack/history": "1.151.1", "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.150.0", + "@tanstack/router-core": "1.151.3", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -2394,12 +2394,12 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.150.0.tgz", - "integrity": "sha512-TlvTE+XK5XVCfYjazoMWkjyyPKe4kMw2nCA7EuWoYUJKOqRW5oKvBY7auViGWxp51FKDEjV3bbok3wPKBYwZww==", + "version": "1.151.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.151.3.tgz", + "integrity": "sha512-WQ8cA4BkDBIglieexdHFvHbhvZOdtgCWO5BDR58MQoz+ZQwsWo9R0m6t6yVOQzkPi69t6Og9s1NogE4BF0/NYA==", "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.150.0" + "@tanstack/router-devtools-core": "1.151.3" }, "engines": { "node": ">=12" @@ -2409,8 +2409,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.150.0", - "@tanstack/router-core": "^1.150.0", + "@tanstack/react-router": "^1.151.3", + "@tanstack/router-core": "^1.151.3", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -2439,12 +2439,12 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.150.0.tgz", - "integrity": "sha512-cAm44t/tUbfyzaDH+rE/WO4u3AgaZdpJp00xjQ4gNkC2O95ntVHq5fx+4fhtrkKpgdXoKldgk8OK66djiWpuGQ==", + "version": "1.151.3", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.151.3.tgz", + "integrity": "sha512-JVaNgR/4xl6/5BhVVZCnaZrN+VgpIaHVIWnMiC8dgpZZAI+FfIUOXoTQ+95167cp1igjR8pKDAKEX+gDgD3yKw==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.145.7", + "@tanstack/history": "1.151.1", "@tanstack/store": "^0.8.0", "cookie-es": "^2.0.0", "seroval": "^1.4.1", @@ -2461,9 +2461,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.150.0.tgz", - "integrity": "sha512-61V+4fq2fOPru/48cuojKvWhQx2h/nuj4nVHwzu9E7O8h391h4Hks6axxRbY98/rIz96mn5TCoc0aYuoga53bg==", + "version": "1.151.3", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.151.3.tgz", + "integrity": "sha512-C4ZjhYz3ASkromu0PkXvr6MVwHWsipfQ3fttPODMgjQ1Crvulixmd6yaeZjPoqYXWWTFw75qfiY1Fmh89mD+oQ==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -2478,7 +2478,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.150.0", + "@tanstack/router-core": "^1.151.3", "csstype": "^3.0.10" }, "peerDependenciesMeta": { @@ -2488,12 +2488,12 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.150.0.tgz", - "integrity": "sha512-WsA1bN5/I+cxE6V1DkU5ABIPBQxZLlxszElYgnIhs884tzukv76rYMFOy6Xqd51YIFdYtjDrxZbp4/vfkrVCug==", + "version": "1.151.5", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.151.5.tgz", + "integrity": "sha512-YxXCVil0hMBwSYHYL1kGY9ENI0mi3FUDTqVty8XudddT3Jvx21lW94BAUU56VZAp7kuDIVpn8nsyk++ogDJgOg==", "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.150.0", + "@tanstack/router-core": "1.151.3", "@tanstack/router-utils": "1.143.11", "@tanstack/virtual-file-routes": "1.145.4", "prettier": "^3.5.0", @@ -2511,9 +2511,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.150.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.150.0.tgz", - "integrity": "sha512-k2NLysBXO4Wpt4Oo0xeBhNtFsMwHOU8ud48/cWNWbV89QAjlk0XU5CGNj2JEaFMT0zlF3H/aM5/h0+vYnDjFFA==", + "version": "1.151.5", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.151.5.tgz", + "integrity": "sha512-l+4jmNACXHDamjbP/bFcOLheqzzqGCpEMjMS/w+BqBEYIu0W+Jqwj8wOwMaEBcuk/Vhnvmkp+WN1RYdM6+GVLg==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2522,8 +2522,8 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.150.0", - "@tanstack/router-generator": "1.150.0", + "@tanstack/router-core": "1.151.3", + "@tanstack/router-generator": "1.151.5", "@tanstack/router-utils": "1.143.11", "@tanstack/virtual-file-routes": "1.145.4", "babel-dead-code-elimination": "^1.0.11", @@ -2540,7 +2540,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.150.0", + "@tanstack/react-router": "^1.151.3", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" diff --git a/frontend/package.json b/frontend/package.json index 6cad12d..cba1714 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,9 +19,9 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.150.0", - "@tanstack/react-router-devtools": "^1.150.0", - "@tanstack/router-plugin": "^1.150.0", + "@tanstack/react-router": "^1.151.3", + "@tanstack/react-router-devtools": "^1.151.3", + "@tanstack/router-plugin": "^1.151.5", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.562.0", diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 7bb8012..c070dc3 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,4 +1,4 @@ -import { createRouter, RouterProvider } from "@tanstack/react-router"; +import { createRouter, Link, RouterProvider } from "@tanstack/react-router"; import { StrictMode } from "react"; import ReactDOM from "react-dom/client"; @@ -6,6 +6,7 @@ import ReactDOM from "react-dom/client"; import { routeTree } from "./routeTree.gen"; import "./styles.css"; +import { Button } from "./components/ui/button"; // Create a new router instance const router = createRouter({ @@ -15,7 +16,18 @@ const router = createRouter({ scrollRestoration: true, defaultStructuralSharing: true, defaultPreloadStaleTime: 0, - defaultViewTransition: true, + defaultNotFoundComponent: () => { + return ( +
+
+

Not Found

+ + + +
+
+ ); + }, }); // Register the router instance for type safety diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index 3956fa6..0336c79 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -1,5 +1,5 @@ import { TanStackDevtools } from "@tanstack/react-devtools"; -import { createRootRoute, Outlet } from "@tanstack/react-router"; +import { createRootRoute, HeadContent, Outlet } from "@tanstack/react-router"; import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; import { ThemeProvider } from "@/components/theme-provider"; @@ -7,22 +7,42 @@ import Navbar from "../components/navbar"; export const Route = createRootRoute({ component: () => ( - -
- - - , - }, - ]} - /> -
-
+ <> + + +
+ + + , + }, + ]} + /> +
+
+ ), + head: () => ({ + meta: [ + { + name: "description", + content: "My App is a web application", + }, + { + title: "OrcaCD", + }, + ], + links: [ + { + rel: "icon", + href: "/assets/favicon.ico", + }, + ], + }), }); diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx index 6a7dd4c..df52766 100644 --- a/frontend/src/routes/index.tsx +++ b/frontend/src/routes/index.tsx @@ -7,9 +7,9 @@ export const Route = createFileRoute("/")({ function App() { return (
-
+

Hello world

-
+
); } From 5bf7be6e7e8d4c544d5fb28ffcd3859f2579ad6d Mon Sep 17 00:00:00 2001 From: alex289 Date: Mon, 26 Jan 2026 16:37:11 +0100 Subject: [PATCH 10/12] feat: Add logo --- frontend/index.html | 5 - frontend/package-lock.json | 196 ++++++++++---------- frontend/package.json | 14 +- frontend/public/assets/apple-touch-icon.png | Bin 0 -> 11452 bytes frontend/public/assets/favicon.ico | Bin 3870 -> 15086 bytes frontend/public/assets/logo-dark-1024.png | Bin 0 -> 122066 bytes frontend/public/assets/logo-dark-128.png | Bin 0 -> 6511 bytes frontend/public/assets/logo-dark-144.png | Bin 0 -> 7374 bytes frontend/public/assets/logo-dark-192.png | Bin 0 -> 10304 bytes frontend/public/assets/logo-dark-256.png | Bin 0 -> 14277 bytes frontend/public/assets/logo-dark-32.png | Bin 0 -> 1499 bytes frontend/public/assets/logo-dark-512.png | Bin 0 -> 39813 bytes frontend/public/assets/logo-dark-64.png | Bin 0 -> 3144 bytes frontend/public/assets/logo-dark-96.png | Bin 0 -> 4922 bytes frontend/src/routes/__root.tsx | 63 ++++++- 15 files changed, 167 insertions(+), 111 deletions(-) create mode 100644 frontend/public/assets/apple-touch-icon.png create mode 100644 frontend/public/assets/logo-dark-1024.png create mode 100644 frontend/public/assets/logo-dark-128.png create mode 100644 frontend/public/assets/logo-dark-144.png create mode 100644 frontend/public/assets/logo-dark-192.png create mode 100644 frontend/public/assets/logo-dark-256.png create mode 100644 frontend/public/assets/logo-dark-32.png create mode 100644 frontend/public/assets/logo-dark-512.png create mode 100644 frontend/public/assets/logo-dark-64.png create mode 100644 frontend/public/assets/logo-dark-96.png diff --git a/frontend/index.html b/frontend/index.html index fa3a1ef..385383b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,10 +1,5 @@ - - - - -
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 33135b2..323ebc3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,12 +11,12 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.151.3", - "@tanstack/react-router-devtools": "^1.151.3", - "@tanstack/router-plugin": "^1.151.5", + "@tanstack/react-router": "^1.157.15", + "@tanstack/react-router-devtools": "^1.157.15", + "@tanstack/router-plugin": "^1.157.15", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "lucide-react": "^0.562.0", + "lucide-react": "^0.563.0", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwind-merge": "^3.4.0", @@ -24,10 +24,10 @@ "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.3.11", + "@biomejs/biome": "2.3.13", "@tanstack/devtools-vite": "^0.4.1", - "@types/node": "^25.0.9", - "@types/react": "^19.2.8", + "@types/node": "^25.0.10", + "@types/react": "^19.2.9", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", "typescript": "^5.9.3", @@ -330,9 +330,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.11.tgz", - "integrity": "sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.13.tgz", + "integrity": "sha512-Fw7UsV0UAtWIBIm0M7g5CRerpu1eKyKAXIazzxhbXYUyMkwNrkX/KLkGI7b+uVDQ5cLUMfOC9vR60q9IDYDstA==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -346,20 +346,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.11", - "@biomejs/cli-darwin-x64": "2.3.11", - "@biomejs/cli-linux-arm64": "2.3.11", - "@biomejs/cli-linux-arm64-musl": "2.3.11", - "@biomejs/cli-linux-x64": "2.3.11", - "@biomejs/cli-linux-x64-musl": "2.3.11", - "@biomejs/cli-win32-arm64": "2.3.11", - "@biomejs/cli-win32-x64": "2.3.11" + "@biomejs/cli-darwin-arm64": "2.3.13", + "@biomejs/cli-darwin-x64": "2.3.13", + "@biomejs/cli-linux-arm64": "2.3.13", + "@biomejs/cli-linux-arm64-musl": "2.3.13", + "@biomejs/cli-linux-x64": "2.3.13", + "@biomejs/cli-linux-x64-musl": "2.3.13", + "@biomejs/cli-win32-arm64": "2.3.13", + "@biomejs/cli-win32-x64": "2.3.13" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.11.tgz", - "integrity": "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.13.tgz", + "integrity": "sha512-0OCwP0/BoKzyJHnFdaTk/i7hIP9JHH9oJJq6hrSCPmJPo8JWcJhprK4gQlhFzrwdTBAW4Bjt/RmCf3ZZe59gwQ==", "cpu": [ "arm64" ], @@ -374,9 +374,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.11.tgz", - "integrity": "sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.13.tgz", + "integrity": "sha512-AGr8OoemT/ejynbIu56qeil2+F2WLkIjn2d8jGK1JkchxnMUhYOfnqc9sVzcRxpG9Ycvw4weQ5sprRvtb7Yhcw==", "cpu": [ "x64" ], @@ -391,9 +391,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.11.tgz", - "integrity": "sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.13.tgz", + "integrity": "sha512-xvOiFkrDNu607MPMBUQ6huHmBG1PZLOrqhtK6pXJW3GjfVqJg0Z/qpTdhXfcqWdSZHcT+Nct2fOgewZvytESkw==", "cpu": [ "arm64" ], @@ -408,9 +408,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.11.tgz", - "integrity": "sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.13.tgz", + "integrity": "sha512-TUdDCSY+Eo/EHjhJz7P2GnWwfqet+lFxBZzGHldrvULr59AgahamLs/N85SC4+bdF86EhqDuuw9rYLvLFWWlXA==", "cpu": [ "arm64" ], @@ -425,9 +425,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.11.tgz", - "integrity": "sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.13.tgz", + "integrity": "sha512-s+YsZlgiXNq8XkgHs6xdvKDFOj/bwTEevqEY6rC2I3cBHbxXYU1LOZstH3Ffw9hE5tE1sqT7U23C00MzkXztMw==", "cpu": [ "x64" ], @@ -442,9 +442,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.11.tgz", - "integrity": "sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.13.tgz", + "integrity": "sha512-0bdwFVSbbM//Sds6OjtnmQGp4eUjOTt6kHvR/1P0ieR9GcTUAlPNvPC3DiavTqq302W34Ae2T6u5VVNGuQtGlQ==", "cpu": [ "x64" ], @@ -459,9 +459,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.11.tgz", - "integrity": "sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.13.tgz", + "integrity": "sha512-QweDxY89fq0VvrxME+wS/BXKmqMrOTZlN9SqQ79kQSIc3FrEwvW/PvUegQF6XIVaekncDykB5dzPqjbwSKs9DA==", "cpu": [ "arm64" ], @@ -476,9 +476,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.11.tgz", - "integrity": "sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg==", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.13.tgz", + "integrity": "sha512-trDw2ogdM2lyav9WFQsdsfdVy1dvZALymRpgmWsvSez0BJzBjulhOT/t+wyKeh3pZWvwP3VMs1SoOKwO3wecMQ==", "cpu": [ "x64" ], @@ -2334,9 +2334,9 @@ } }, "node_modules/@tanstack/history": { - "version": "1.151.1", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.151.1.tgz", - "integrity": "sha512-Z/eymNBuUGHYIea7nNX3xR5feqx418ChlwWOKklVpCVzEQ5Q3kNTUw+WK4HYUKxF+1uXFN01Dbuhhl7SmW1LJA==", + "version": "1.154.14", + "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.154.14.tgz", + "integrity": "sha512-xyIfof8eHBuub1CkBnbKNKQXeRZC4dClhmzePHVOEel4G7lk/dW+TQ16da7CFdeNLv6u6Owf5VoBQxoo6DFTSA==", "license": "MIT", "engines": { "node": ">=12" @@ -2369,14 +2369,14 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.151.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.151.3.tgz", - "integrity": "sha512-Xb8444OgVpmwCl9hpUA+N/X0dsik/WWYWdldIYNAcmBAl1ZYYXm8kKnfjgHS2aMZzPnqN1BjKocKgc5jg3lK9Q==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.157.15.tgz", + "integrity": "sha512-dVHX3Ann1rxLkXCrB9ctNKveGOrkmlKMo5fDIaaPCqqkDN/aC1gZ9O93i0OQVPUNekpkdXijmpHkxw12WqMTRQ==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.151.1", + "@tanstack/history": "1.154.14", "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.151.3", + "@tanstack/router-core": "1.157.15", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -2394,12 +2394,12 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.151.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.151.3.tgz", - "integrity": "sha512-WQ8cA4BkDBIglieexdHFvHbhvZOdtgCWO5BDR58MQoz+ZQwsWo9R0m6t6yVOQzkPi69t6Og9s1NogE4BF0/NYA==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.157.15.tgz", + "integrity": "sha512-WNxsQaoVz1MDINKbWJ7xGYg0xyG9UAnRq7cYNFypDFyX6gqfiQUTxpFMVZfaw1sv+/fI/6E+hd7WChu1rrfBqQ==", "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.151.3" + "@tanstack/router-devtools-core": "1.157.15" }, "engines": { "node": ">=12" @@ -2409,8 +2409,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.151.3", - "@tanstack/router-core": "^1.151.3", + "@tanstack/react-router": "^1.157.15", + "@tanstack/router-core": "^1.157.15", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -2439,16 +2439,16 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.151.3", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.151.3.tgz", - "integrity": "sha512-JVaNgR/4xl6/5BhVVZCnaZrN+VgpIaHVIWnMiC8dgpZZAI+FfIUOXoTQ+95167cp1igjR8pKDAKEX+gDgD3yKw==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.157.15.tgz", + "integrity": "sha512-KaYz6s+wYcg92kRQ7HXlTJLhBaBXOYiiqRBv5tsRbKRIqqhWNyeGz5+NfDwaYFHg5XLSDs3DvN0elMtxcj4dTg==", "license": "MIT", "dependencies": { - "@tanstack/history": "1.151.1", + "@tanstack/history": "1.154.14", "@tanstack/store": "^0.8.0", "cookie-es": "^2.0.0", - "seroval": "^1.4.1", - "seroval-plugins": "^1.4.0", + "seroval": "^1.4.2", + "seroval-plugins": "^1.4.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" }, @@ -2461,9 +2461,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.151.3", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.151.3.tgz", - "integrity": "sha512-C4ZjhYz3ASkromu0PkXvr6MVwHWsipfQ3fttPODMgjQ1Crvulixmd6yaeZjPoqYXWWTFw75qfiY1Fmh89mD+oQ==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.157.15.tgz", + "integrity": "sha512-udqDYuJUtVfPmk/4yhtOZl1dYlze/rMqaj3v/jQRS8TeGqWYal48Q18hM3A5Bd2YqORvaAkOQsI7JWKYnvxCiQ==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -2478,7 +2478,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.151.3", + "@tanstack/router-core": "^1.157.15", "csstype": "^3.0.10" }, "peerDependenciesMeta": { @@ -2488,14 +2488,14 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.151.5", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.151.5.tgz", - "integrity": "sha512-YxXCVil0hMBwSYHYL1kGY9ENI0mi3FUDTqVty8XudddT3Jvx21lW94BAUU56VZAp7kuDIVpn8nsyk++ogDJgOg==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.157.15.tgz", + "integrity": "sha512-zGac6tyRFz/X86fk9/CAmS6z8lyZf4p9lhAqLBCKVkFiFPmU4eAJp1ODvs81EtV0uJdRL1/rb+uvgHLGUsmQ0g==", "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.151.3", - "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.145.4", + "@tanstack/router-core": "1.157.15", + "@tanstack/router-utils": "1.154.7", + "@tanstack/virtual-file-routes": "1.154.7", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", @@ -2511,9 +2511,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.151.5", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.151.5.tgz", - "integrity": "sha512-l+4jmNACXHDamjbP/bFcOLheqzzqGCpEMjMS/w+BqBEYIu0W+Jqwj8wOwMaEBcuk/Vhnvmkp+WN1RYdM6+GVLg==", + "version": "1.157.15", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.157.15.tgz", + "integrity": "sha512-EpRYRb35//sVJ8GPBhthqfPt9HNhx1xAaejiQ8i4vkG37et6qaSGAO+Woq91WjnpmxMYs4+sNJpGioPuVLBBqQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2522,10 +2522,10 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.151.3", - "@tanstack/router-generator": "1.151.5", - "@tanstack/router-utils": "1.143.11", - "@tanstack/virtual-file-routes": "1.145.4", + "@tanstack/router-core": "1.157.15", + "@tanstack/router-generator": "1.157.15", + "@tanstack/router-utils": "1.154.7", + "@tanstack/virtual-file-routes": "1.154.7", "babel-dead-code-elimination": "^1.0.11", "chokidar": "^3.6.0", "unplugin": "^2.1.2", @@ -2540,7 +2540,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.151.3", + "@tanstack/react-router": "^1.157.15", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" @@ -2564,9 +2564,9 @@ } }, "node_modules/@tanstack/router-utils": { - "version": "1.143.11", - "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.143.11.tgz", - "integrity": "sha512-N24G4LpfyK8dOlnP8BvNdkuxg1xQljkyl6PcrdiPSA301pOjatRT1y8wuCCJZKVVD8gkd0MpCZ0VEjRMGILOtA==", + "version": "1.154.7", + "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.154.7.tgz", + "integrity": "sha512-61bGx32tMKuEpVRseu2sh1KQe8CfB7793Mch/kyQt0EP3tD7X0sXmimCl3truRiDGUtI0CaSoQV1NPjAII1RBA==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2596,9 +2596,9 @@ } }, "node_modules/@tanstack/virtual-file-routes": { - "version": "1.145.4", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.145.4.tgz", - "integrity": "sha512-CI75JrfqSluhdGwLssgVeQBaCphgfkMQpi8MCY3UJX1hoGzXa8kHYJcUuIFMOLs1q7zqHy++EVVtMK03osR5wQ==", + "version": "1.154.7", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.154.7.tgz", + "integrity": "sha512-cHHDnewHozgjpI+MIVp9tcib6lYEQK5MyUr0ChHpHFGBl8Xei55rohFK0I0ve/GKoHeioaK42Smd8OixPp6CTg==", "license": "MIT", "engines": { "node": ">=12" @@ -2660,9 +2660,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", - "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", + "version": "25.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", + "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2670,9 +2670,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", - "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", + "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -3535,9 +3535,9 @@ } }, "node_modules/lucide-react": { - "version": "0.562.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", - "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -3644,9 +3644,9 @@ } }, "node_modules/prettier": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", - "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" diff --git a/frontend/package.json b/frontend/package.json index cba1714..4ee8a87 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,12 +19,12 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.151.3", - "@tanstack/react-router-devtools": "^1.151.3", - "@tanstack/router-plugin": "^1.151.5", + "@tanstack/react-router": "^1.157.15", + "@tanstack/react-router-devtools": "^1.157.15", + "@tanstack/router-plugin": "^1.157.15", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "lucide-react": "^0.562.0", + "lucide-react": "^0.563.0", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwind-merge": "^3.4.0", @@ -32,10 +32,10 @@ "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.3.11", + "@biomejs/biome": "2.3.13", "@tanstack/devtools-vite": "^0.4.1", - "@types/node": "^25.0.9", - "@types/react": "^19.2.8", + "@types/node": "^25.0.10", + "@types/react": "^19.2.9", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", "typescript": "^5.9.3", diff --git a/frontend/public/assets/apple-touch-icon.png b/frontend/public/assets/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f69970bd22d865b0d34b58033fd0a83fd6922f20 GIT binary patch literal 11452 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 R=^24k=<8JAosKZo{V%TmOb!45 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/frontend/public/assets/logo-dark-1024.png b/frontend/public/assets/logo-dark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..12f8cf39ad44ed993821c34cf06bcf73a1a6d514 GIT binary patch literal 122066 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 literal 0 HcmV?d00001 diff --git a/frontend/public/assets/logo-dark-128.png b/frontend/public/assets/logo-dark-128.png new file mode 100644 index 0000000000000000000000000000000000000000..fddf267a1391718665bb06870c5753051fca7caf GIT binary patch literal 6511 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 L7^+vR+C~2l5J0v) literal 0 HcmV?d00001 diff --git a/frontend/public/assets/logo-dark-256.png b/frontend/public/assets/logo-dark-256.png new file mode 100644 index 0000000000000000000000000000000000000000..7718482586ab98abe2da3180b115ac582b247fa3 GIT binary patch literal 14277 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 os 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�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 z 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 literal 0 HcmV?d00001 diff --git a/frontend/public/assets/logo-dark-64.png b/frontend/public/assets/logo-dark-64.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4e21683c22d302101ed662b5db06a771626e66 GIT binary patch literal 3144 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 Date: Sun, 1 Feb 2026 14:23:08 +0100 Subject: [PATCH 11/12] chore: Update deps --- frontend/package-lock.json | 161 ++++++++++++++++--------------------- frontend/package.json | 18 ++--- 2 files changed, 79 insertions(+), 100 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 323ebc3..7a9add4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,24 +10,24 @@ "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", - "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.157.15", - "@tanstack/react-router-devtools": "^1.157.15", - "@tanstack/router-plugin": "^1.157.15", + "@tanstack/react-devtools": "^0.9.4", + "@tanstack/react-router": "^1.157.18", + "@tanstack/react-router-devtools": "^1.157.18", + "@tanstack/router-plugin": "^1.157.18", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.563.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.18", "tw-animate-css": "^1.4.0" }, "devDependencies": { "@biomejs/biome": "2.3.13", - "@tanstack/devtools-vite": "^0.4.1", - "@types/node": "^25.0.10", - "@types/react": "^19.2.9", + "@tanstack/devtools-vite": "^0.5.0", + "@types/node": "^25.1.0", + "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", "typescript": "^5.9.3", @@ -2212,9 +2212,9 @@ } }, "node_modules/@tanstack/devtools": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tanstack/devtools/-/devtools-0.10.3.tgz", - "integrity": "sha512-M2HnKtaNf3Z8JDTNDq+X7/1gwOqSwTnCyC0GR+TYiRZM9mkY9GpvTqp6p6bx3DT8onu2URJiVxgHD9WK2e3MNQ==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@tanstack/devtools/-/devtools-0.10.5.tgz", + "integrity": "sha512-aptV4sMcdEn/zB8zqNqKSKi8pLzfB7BhdP2MuVmyfWgBDYNchqJjhviaxEXW3tJTolbWwc30o+jszwqxOIcIaA==", "license": "MIT", "dependencies": { "@solid-primitives/event-listener": "^2.4.3", @@ -2305,9 +2305,9 @@ } }, "node_modules/@tanstack/devtools-vite": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.4.1.tgz", - "integrity": "sha512-PkMOomcWnl/pUkCqIjqL/csjPHtkMVBirDpJVOZR7XJZDxo5CuD7B+3KsujFCF4Dsn6QYlae97gCZvxi/CB76Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tanstack/devtools-vite/-/devtools-vite-0.5.0.tgz", + "integrity": "sha512-Ew+ZdTnmTlVjm4q+/XY/dolx/E1BWMYpiRDyU/MXqHf5epri4MLl5C4UZJaO+ZuUCsKPpsW+ufoM99E2Z4rhug==", "dev": true, "license": "MIT", "dependencies": { @@ -2347,12 +2347,12 @@ } }, "node_modules/@tanstack/react-devtools": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-devtools/-/react-devtools-0.9.2.tgz", - "integrity": "sha512-JNXvBO3jgq16GzTVm7p65n5zHNfMhnqF6Bm7CawjoqZrjEakxbM6Yvy63aKSIpbrdf+Wun2Xn8P0qD+vp56e1g==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-devtools/-/react-devtools-0.9.4.tgz", + "integrity": "sha512-6wQf8gVKDks1VL+LI5SS4XWK8dQLIjcDF3iMZfidyesWJNmodWbWlRkdgCmK5SpDSbcygjbp3p+LG2nE/SZ1bQ==", "license": "MIT", "dependencies": { - "@tanstack/devtools": "0.10.3" + "@tanstack/devtools": "0.10.5" }, "engines": { "node": ">=18" @@ -2369,14 +2369,14 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.157.15.tgz", - "integrity": "sha512-dVHX3Ann1rxLkXCrB9ctNKveGOrkmlKMo5fDIaaPCqqkDN/aC1gZ9O93i0OQVPUNekpkdXijmpHkxw12WqMTRQ==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.157.18.tgz", + "integrity": "sha512-qs//HcVhEZ0K2/Sqejol0vOWaFIh4EoYTQQix9FhHOyWvdUpGoTJS0+g/qxEnZZm7r9QNOrnyrYZ5CDAqnII6g==", "license": "MIT", "dependencies": { "@tanstack/history": "1.154.14", "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.157.15", + "@tanstack/router-core": "1.157.18", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -2394,12 +2394,12 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.157.15.tgz", - "integrity": "sha512-WNxsQaoVz1MDINKbWJ7xGYg0xyG9UAnRq7cYNFypDFyX6gqfiQUTxpFMVZfaw1sv+/fI/6E+hd7WChu1rrfBqQ==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.157.18.tgz", + "integrity": "sha512-JHSOnwj8wkim1AppgPT1Jp+NtmiiJ4yLZ//Vo0sfrQSgOzlZgdFg4OdQP+9rYzuj3BNz+XoDdokXQhJxiSqSww==", "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.157.15" + "@tanstack/router-devtools-core": "1.157.18" }, "engines": { "node": ">=12" @@ -2409,8 +2409,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.157.15", - "@tanstack/router-core": "^1.157.15", + "@tanstack/react-router": "^1.157.18", + "@tanstack/router-core": "^1.157.18", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -2439,9 +2439,9 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.157.15.tgz", - "integrity": "sha512-KaYz6s+wYcg92kRQ7HXlTJLhBaBXOYiiqRBv5tsRbKRIqqhWNyeGz5+NfDwaYFHg5XLSDs3DvN0elMtxcj4dTg==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.157.18.tgz", + "integrity": "sha512-jGkyA3EEE01Sf6d4goi//poxQNb/Odc/GzpjZSW2zwG+wcXm9hEzcI6vU2IxhAU0dvvwQyQgtU1HXTcXQ/Xg4A==", "license": "MIT", "dependencies": { "@tanstack/history": "1.154.14", @@ -2461,9 +2461,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.157.15.tgz", - "integrity": "sha512-udqDYuJUtVfPmk/4yhtOZl1dYlze/rMqaj3v/jQRS8TeGqWYal48Q18hM3A5Bd2YqORvaAkOQsI7JWKYnvxCiQ==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.157.18.tgz", + "integrity": "sha512-+eh3XzBUuoGxJr8b9kCLdyJN+zPsAxtNggEvCal7iI8WE6q3ujjUPYiqHNI+MS4thtxaeUdAXlEjak/+fdBPdg==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -2478,7 +2478,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.157.15", + "@tanstack/router-core": "^1.157.18", "csstype": "^3.0.10" }, "peerDependenciesMeta": { @@ -2488,12 +2488,12 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.157.15.tgz", - "integrity": "sha512-zGac6tyRFz/X86fk9/CAmS6z8lyZf4p9lhAqLBCKVkFiFPmU4eAJp1ODvs81EtV0uJdRL1/rb+uvgHLGUsmQ0g==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.157.18.tgz", + "integrity": "sha512-t6nZdaX+pYWaudwg5Yasu/o8IAK8FPc4Jwq+rZpyaCgeZn895Vc407hxoRss40/hK1jk03b8x349+b1JekiSqA==", "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.157.15", + "@tanstack/router-core": "1.157.18", "@tanstack/router-utils": "1.154.7", "@tanstack/virtual-file-routes": "1.154.7", "prettier": "^3.5.0", @@ -2511,9 +2511,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.157.15", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.157.15.tgz", - "integrity": "sha512-EpRYRb35//sVJ8GPBhthqfPt9HNhx1xAaejiQ8i4vkG37et6qaSGAO+Woq91WjnpmxMYs4+sNJpGioPuVLBBqQ==", + "version": "1.157.18", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.157.18.tgz", + "integrity": "sha512-1UrRnIhD4Ar0PpXwzIkxD8nfjzmO7oYRh4CkSUO+Xc6aD5poNB62aUWPp3vS5jnXDNSk0vr+N4QAPebjPKw0Hw==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2522,8 +2522,8 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.157.15", - "@tanstack/router-generator": "1.157.15", + "@tanstack/router-core": "1.157.18", + "@tanstack/router-generator": "1.157.18", "@tanstack/router-utils": "1.154.7", "@tanstack/virtual-file-routes": "1.154.7", "babel-dead-code-elimination": "^1.0.11", @@ -2540,7 +2540,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.157.15", + "@tanstack/react-router": "^1.157.18", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" @@ -2660,9 +2660,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", - "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2670,9 +2670,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", - "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", + "version": "19.2.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz", + "integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -3659,24 +3659,24 @@ } }, "node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" + "react": "^19.2.4" } }, "node_modules/react-refresh": { @@ -3873,18 +3873,18 @@ } }, "node_modules/seroval": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", - "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.0.tgz", + "integrity": "sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==", "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/seroval-plugins": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.4.2.tgz", - "integrity": "sha512-X7p4MEDTi+60o2sXZ4bnDBhgsUYDSkQEvzYZuJyFqWg9jcoPsHts5nrg5O956py2wyt28lUrBxk0M0/wU8URpA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.0.tgz", + "integrity": "sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==", "license": "MIT", "engines": { "node": ">=10" @@ -3907,35 +3907,14 @@ } }, "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==", + "version": "1.9.11", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.11.tgz", + "integrity": "sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==", "license": "MIT", "dependencies": { "csstype": "^3.1.0", - "seroval": "~1.3.0", - "seroval-plugins": "~1.3.0" - } - }, - "node_modules/solid-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/solid-js/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" + "seroval": "~1.5.0", + "seroval-plugins": "~1.5.0" } }, "node_modules/source-map": { diff --git a/frontend/package.json b/frontend/package.json index 4ee8a87..b577c55 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,24 +18,24 @@ "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", - "@tanstack/react-devtools": "^0.9.2", - "@tanstack/react-router": "^1.157.15", - "@tanstack/react-router-devtools": "^1.157.15", - "@tanstack/router-plugin": "^1.157.15", + "@tanstack/react-devtools": "^0.9.4", + "@tanstack/react-router": "^1.157.18", + "@tanstack/react-router-devtools": "^1.157.18", + "@tanstack/router-plugin": "^1.157.18", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.563.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.18", "tw-animate-css": "^1.4.0" }, "devDependencies": { "@biomejs/biome": "2.3.13", - "@tanstack/devtools-vite": "^0.4.1", - "@types/node": "^25.0.10", - "@types/react": "^19.2.9", + "@tanstack/devtools-vite": "^0.5.0", + "@types/node": "^25.1.0", + "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.2", "typescript": "^5.9.3", From 1e2f42b403d2932ea440aefaadb6490e12e032d0 Mon Sep 17 00:00:00 2001 From: alex289 Date: Sat, 7 Feb 2026 12:38:58 +0100 Subject: [PATCH 12/12] feat: Apply review suggestions --- frontend/README.md | 51 ------ frontend/biome.json | 2 +- frontend/package-lock.json | 333 +++++++++++++++++++------------------ frontend/package.json | 17 +- frontend/src/main.tsx | 15 +- frontend/tsconfig.json | 1 - frontend/vite.config.ts | 3 +- 7 files changed, 192 insertions(+), 230 deletions(-) delete mode 100644 frontend/README.md diff --git a/frontend/README.md b/frontend/README.md deleted file mode 100644 index ccca479..0000000 --- a/frontend/README.md +++ /dev/null @@ -1,51 +0,0 @@ -Welcome to your new TanStack app! - -# Getting Started - -To run this application: - -```bash -npm install -npm run start -``` - -# Building For Production - -To build this application for production: - -```bash -npm run build -``` - -## Testing - -This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with: - -```bash -npm run test -``` - -## Styling - -This project uses [Tailwind CSS](https://tailwindcss.com/) for styling. - - -## Linting & Formatting - -This project uses [Biome](https://biomejs.dev/) for linting and formatting. The following scripts are available: - - -```bash -npm run lint -npm run format -npm run check -``` - - -## Shadcn - -Add components using the latest version of [Shadcn](https://ui.shadcn.com/). - -```bash -pnpm dlx shadcn@latest add button -``` diff --git a/frontend/biome.json b/frontend/biome.json index cdfd60b..fdfb2cb 100644 --- a/frontend/biome.json +++ b/frontend/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.14/schema.json", "vcs": { "enabled": false, "clientKind": "git", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7a9add4..7d88750 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,9 +11,9 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.4", - "@tanstack/react-router": "^1.157.18", - "@tanstack/react-router-devtools": "^1.157.18", - "@tanstack/router-plugin": "^1.157.18", + "@tanstack/react-router": "^1.158.4", + "@tanstack/react-router-devtools": "^1.158.4", + "@tanstack/router-plugin": "^1.158.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.563.0", @@ -24,23 +24,23 @@ "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.3.13", + "@biomejs/biome": "2.3.14", "@tanstack/devtools-vite": "^0.5.0", - "@types/node": "^25.1.0", - "@types/react": "^19.2.10", + "@types/node": "^25.2.1", + "@types/react": "^19.2.13", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.1.2", + "@vitejs/plugin-react": "^5.1.3", "typescript": "^5.9.3", "vite": "^7.3.1" } }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -49,29 +49,29 @@ } }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "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", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -88,13 +88,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -104,12 +104,12 @@ } }, "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==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -129,27 +129,27 @@ } }, "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==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "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==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -195,25 +195,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -285,31 +285,31 @@ } }, "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==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -317,9 +317,9 @@ } }, "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==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -330,9 +330,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.13.tgz", - "integrity": "sha512-Fw7UsV0UAtWIBIm0M7g5CRerpu1eKyKAXIazzxhbXYUyMkwNrkX/KLkGI7b+uVDQ5cLUMfOC9vR60q9IDYDstA==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.14.tgz", + "integrity": "sha512-QMT6QviX0WqXJCaiqVMiBUCr5WRQ1iFSjvOLoTk6auKukJMvnMzWucXpwZB0e8F00/1/BsS9DzcKgWH+CLqVuA==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -346,20 +346,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.13", - "@biomejs/cli-darwin-x64": "2.3.13", - "@biomejs/cli-linux-arm64": "2.3.13", - "@biomejs/cli-linux-arm64-musl": "2.3.13", - "@biomejs/cli-linux-x64": "2.3.13", - "@biomejs/cli-linux-x64-musl": "2.3.13", - "@biomejs/cli-win32-arm64": "2.3.13", - "@biomejs/cli-win32-x64": "2.3.13" + "@biomejs/cli-darwin-arm64": "2.3.14", + "@biomejs/cli-darwin-x64": "2.3.14", + "@biomejs/cli-linux-arm64": "2.3.14", + "@biomejs/cli-linux-arm64-musl": "2.3.14", + "@biomejs/cli-linux-x64": "2.3.14", + "@biomejs/cli-linux-x64-musl": "2.3.14", + "@biomejs/cli-win32-arm64": "2.3.14", + "@biomejs/cli-win32-x64": "2.3.14" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.13.tgz", - "integrity": "sha512-0OCwP0/BoKzyJHnFdaTk/i7hIP9JHH9oJJq6hrSCPmJPo8JWcJhprK4gQlhFzrwdTBAW4Bjt/RmCf3ZZe59gwQ==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.14.tgz", + "integrity": "sha512-UJGPpvWJMkLxSRtpCAKfKh41Q4JJXisvxZL8ChN1eNW3m/WlPFJ6EFDCE7YfUb4XS8ZFi3C1dFpxUJ0Ety5n+A==", "cpu": [ "arm64" ], @@ -374,9 +374,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.13.tgz", - "integrity": "sha512-AGr8OoemT/ejynbIu56qeil2+F2WLkIjn2d8jGK1JkchxnMUhYOfnqc9sVzcRxpG9Ycvw4weQ5sprRvtb7Yhcw==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.14.tgz", + "integrity": "sha512-PNkLNQG6RLo8lG7QoWe/hhnMxJIt1tEimoXpGQjwS/dkdNiKBLPv4RpeQl8o3s1OKI3ZOR5XPiYtmbGGHAOnLA==", "cpu": [ "x64" ], @@ -391,9 +391,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.13.tgz", - "integrity": "sha512-xvOiFkrDNu607MPMBUQ6huHmBG1PZLOrqhtK6pXJW3GjfVqJg0Z/qpTdhXfcqWdSZHcT+Nct2fOgewZvytESkw==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.14.tgz", + "integrity": "sha512-KT67FKfzIw6DNnUNdYlBg+eU24Go3n75GWK6NwU4+yJmDYFe9i/MjiI+U/iEzKvo0g7G7MZqoyrhIYuND2w8QQ==", "cpu": [ "arm64" ], @@ -408,9 +408,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.13.tgz", - "integrity": "sha512-TUdDCSY+Eo/EHjhJz7P2GnWwfqet+lFxBZzGHldrvULr59AgahamLs/N85SC4+bdF86EhqDuuw9rYLvLFWWlXA==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.14.tgz", + "integrity": "sha512-LInRbXhYujtL3sH2TMCH/UBwJZsoGwfQjBrMfl84CD4hL/41C/EU5mldqf1yoFpsI0iPWuU83U+nB2TUUypWeg==", "cpu": [ "arm64" ], @@ -425,9 +425,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.13.tgz", - "integrity": "sha512-s+YsZlgiXNq8XkgHs6xdvKDFOj/bwTEevqEY6rC2I3cBHbxXYU1LOZstH3Ffw9hE5tE1sqT7U23C00MzkXztMw==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.14.tgz", + "integrity": "sha512-ZsZzQsl9U+wxFrGGS4f6UxREUlgHwmEfu1IrXlgNFrNnd5Th6lIJr8KmSzu/+meSa9f4rzFrbEW9LBBA6ScoMA==", "cpu": [ "x64" ], @@ -442,9 +442,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.13.tgz", - "integrity": "sha512-0bdwFVSbbM//Sds6OjtnmQGp4eUjOTt6kHvR/1P0ieR9GcTUAlPNvPC3DiavTqq302W34Ae2T6u5VVNGuQtGlQ==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.14.tgz", + "integrity": "sha512-KQU7EkbBBuHPW3/rAcoiVmhlPtDSGOGRPv9js7qJVpYTzjQmVR+C9Rfcz+ti8YCH+zT1J52tuBybtP4IodjxZQ==", "cpu": [ "x64" ], @@ -459,9 +459,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.13.tgz", - "integrity": "sha512-QweDxY89fq0VvrxME+wS/BXKmqMrOTZlN9SqQ79kQSIc3FrEwvW/PvUegQF6XIVaekncDykB5dzPqjbwSKs9DA==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.14.tgz", + "integrity": "sha512-+IKYkj/pUBbnRf1G1+RlyA3LWiDgra1xpS7H2g4BuOzzRbRB+hmlw0yFsLprHhbbt7jUzbzAbAjK/Pn0FDnh1A==", "cpu": [ "arm64" ], @@ -476,9 +476,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.13.tgz", - "integrity": "sha512-trDw2ogdM2lyav9WFQsdsfdVy1dvZALymRpgmWsvSez0BJzBjulhOT/t+wyKeh3pZWvwP3VMs1SoOKwO3wecMQ==", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.14.tgz", + "integrity": "sha512-oizCjdyQ3WJEswpb3Chdngeat56rIdSYK12JI3iI11Mt5T5EXcZ7WLuowzEaFPNJ3zmOQFliMN8QY1Pi+qsfdQ==", "cpu": [ "x64" ], @@ -1588,9 +1588,9 @@ "license": "MIT" }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", "dev": true, "license": "MIT" }, @@ -2369,14 +2369,14 @@ } }, "node_modules/@tanstack/react-router": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.157.18.tgz", - "integrity": "sha512-qs//HcVhEZ0K2/Sqejol0vOWaFIh4EoYTQQix9FhHOyWvdUpGoTJS0+g/qxEnZZm7r9QNOrnyrYZ5CDAqnII6g==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.158.4.tgz", + "integrity": "sha512-i15xXumgvpuM+4NSuIwgouGezuj9eHjZsgpTZSQ7E9pa8rYmhZbWnf8xU68qaLmaKIol/e75o/YzVH2QWHs3iQ==", "license": "MIT", "dependencies": { "@tanstack/history": "1.154.14", "@tanstack/react-store": "^0.8.0", - "@tanstack/router-core": "1.157.18", + "@tanstack/router-core": "1.158.4", "isbot": "^5.1.22", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" @@ -2394,12 +2394,12 @@ } }, "node_modules/@tanstack/react-router-devtools": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.157.18.tgz", - "integrity": "sha512-JHSOnwj8wkim1AppgPT1Jp+NtmiiJ4yLZ//Vo0sfrQSgOzlZgdFg4OdQP+9rYzuj3BNz+XoDdokXQhJxiSqSww==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-router-devtools/-/react-router-devtools-1.158.4.tgz", + "integrity": "sha512-/EkrrJGTPC7MwLfcYYmZM71ANDMLbwcYvBtDA+48LqHUKal8mpWlaodiWdFFnVQ7ny/unbUxljgdrNV9YZiyFQ==", "license": "MIT", "dependencies": { - "@tanstack/router-devtools-core": "1.157.18" + "@tanstack/router-devtools-core": "1.158.4" }, "engines": { "node": ">=12" @@ -2409,8 +2409,8 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-router": "^1.157.18", - "@tanstack/router-core": "^1.157.18", + "@tanstack/react-router": "^1.158.4", + "@tanstack/router-core": "^1.158.4", "react": ">=18.0.0 || >=19.0.0", "react-dom": ">=18.0.0 || >=19.0.0" }, @@ -2439,9 +2439,9 @@ } }, "node_modules/@tanstack/router-core": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.157.18.tgz", - "integrity": "sha512-jGkyA3EEE01Sf6d4goi//poxQNb/Odc/GzpjZSW2zwG+wcXm9hEzcI6vU2IxhAU0dvvwQyQgtU1HXTcXQ/Xg4A==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.158.4.tgz", + "integrity": "sha512-KikgYdyrEFqsjjgv9pMhDTMmASMAyFRvUiKFdQPQtXq3aD1qv/zck4CbA4bfzp9N9nYu/qvWwU1mlYU4u5JeXg==", "license": "MIT", "dependencies": { "@tanstack/history": "1.154.14", @@ -2461,9 +2461,9 @@ } }, "node_modules/@tanstack/router-devtools-core": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.157.18.tgz", - "integrity": "sha512-+eh3XzBUuoGxJr8b9kCLdyJN+zPsAxtNggEvCal7iI8WE6q3ujjUPYiqHNI+MS4thtxaeUdAXlEjak/+fdBPdg==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-devtools-core/-/router-devtools-core-1.158.4.tgz", + "integrity": "sha512-9MKzstYp/6sNRSwJY2b9ipVW8b8/x1iSFNfLhOJur2tnjB3RhwCDfy0u+to70BrRpBEWeq7jvJoVdP029gzUUg==", "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -2478,7 +2478,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/router-core": "^1.157.18", + "@tanstack/router-core": "^1.158.4", "csstype": "^3.0.10" }, "peerDependenciesMeta": { @@ -2488,13 +2488,13 @@ } }, "node_modules/@tanstack/router-generator": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.157.18.tgz", - "integrity": "sha512-t6nZdaX+pYWaudwg5Yasu/o8IAK8FPc4Jwq+rZpyaCgeZn895Vc407hxoRss40/hK1jk03b8x349+b1JekiSqA==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.158.4.tgz", + "integrity": "sha512-RQmqMTT0oV8dS/3Glcq9SPzDZqOPyKb/LVFUkNoTfMwW88WyGnQcYqZAkmVk/CGBWWDfwObOUZoGq5jTF7bG8w==", "license": "MIT", "dependencies": { - "@tanstack/router-core": "1.157.18", - "@tanstack/router-utils": "1.154.7", + "@tanstack/router-core": "1.158.4", + "@tanstack/router-utils": "1.158.0", "@tanstack/virtual-file-routes": "1.154.7", "prettier": "^3.5.0", "recast": "^0.23.11", @@ -2511,9 +2511,9 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.157.18", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.157.18.tgz", - "integrity": "sha512-1UrRnIhD4Ar0PpXwzIkxD8nfjzmO7oYRh4CkSUO+Xc6aD5poNB62aUWPp3vS5jnXDNSk0vr+N4QAPebjPKw0Hw==", + "version": "1.158.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.158.4.tgz", + "integrity": "sha512-g2sytAhljw6Jd6Klu37OZ75+o+vhiGdbWtnBy/4rYLC4NN6hSnjgJQRI3+h1CI1KQ4EUgsZYZr/hgE1KHoiWYQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", @@ -2522,11 +2522,10 @@ "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", - "@tanstack/router-core": "1.157.18", - "@tanstack/router-generator": "1.157.18", - "@tanstack/router-utils": "1.154.7", + "@tanstack/router-core": "1.158.4", + "@tanstack/router-generator": "1.158.4", + "@tanstack/router-utils": "1.158.0", "@tanstack/virtual-file-routes": "1.154.7", - "babel-dead-code-elimination": "^1.0.11", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" @@ -2540,7 +2539,7 @@ }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", - "@tanstack/react-router": "^1.157.18", + "@tanstack/react-router": "^1.158.4", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" @@ -2564,15 +2563,17 @@ } }, "node_modules/@tanstack/router-utils": { - "version": "1.154.7", - "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.154.7.tgz", - "integrity": "sha512-61bGx32tMKuEpVRseu2sh1KQe8CfB7793Mch/kyQt0EP3tD7X0sXmimCl3truRiDGUtI0CaSoQV1NPjAII1RBA==", + "version": "1.158.0", + "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.158.0.tgz", + "integrity": "sha512-qZ76eaLKU6Ae9iI/mc5zizBX149DXXZkBVVO3/QRIll79uKLJZHQlMKR++2ba7JsciBWz1pgpIBcCJPE9S0LVg==", "license": "MIT", "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "ansis": "^4.1.0", + "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" @@ -2660,9 +2661,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", - "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.1.tgz", + "integrity": "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2670,9 +2671,9 @@ } }, "node_modules/@types/react": { - "version": "19.2.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz", - "integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==", + "version": "19.2.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", + "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -2688,16 +2689,16 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz", + "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.5", + "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", + "@rolldown/pluginutils": "1.0.0-rc.2", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -2779,9 +2780,9 @@ } }, "node_modules/babel-dead-code-elimination": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.11.tgz", - "integrity": "sha512-mwq3W3e/pKSI6TG8lXMiDWvEi1VXYlSBlJlB3l+I0bAb5u1RNUl88udos85eOPNK3m5EXK9uO7d2g08pesTySQ==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.12.tgz", + "integrity": "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==", "license": "MIT", "dependencies": { "@babel/core": "^7.23.7", @@ -2791,9 +2792,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.9.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", - "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -2857,9 +2858,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "funding": [ { "type": "opencollective", @@ -2994,9 +2995,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "license": "ISC" }, "node_modules/enhanced-resolve": { diff --git a/frontend/package.json b/frontend/package.json index b577c55..c5879ab 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,7 +4,8 @@ "type": "module", "scripts": { "dev": "vite --port 3000", - "build": "vite build && tsc", + "build": "vite build", + "typecheck": "tsc --noEmit", "preview": "vite preview", "format": "biome format --write", "format:check": "biome format", @@ -19,9 +20,9 @@ "@radix-ui/react-slot": "^1.2.4", "@tailwindcss/vite": "^4.1.18", "@tanstack/react-devtools": "^0.9.4", - "@tanstack/react-router": "^1.157.18", - "@tanstack/react-router-devtools": "^1.157.18", - "@tanstack/router-plugin": "^1.157.18", + "@tanstack/react-router": "^1.158.4", + "@tanstack/react-router-devtools": "^1.158.4", + "@tanstack/router-plugin": "^1.158.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.563.0", @@ -32,12 +33,12 @@ "tw-animate-css": "^1.4.0" }, "devDependencies": { - "@biomejs/biome": "2.3.13", + "@biomejs/biome": "2.3.14", "@tanstack/devtools-vite": "^0.5.0", - "@types/node": "^25.1.0", - "@types/react": "^19.2.10", + "@types/node": "^25.2.1", + "@types/react": "^19.2.13", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.1.2", + "@vitejs/plugin-react": "^5.1.3", "typescript": "^5.9.3", "vite": "^7.3.1" } diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index c070dc3..64882e8 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -21,7 +21,20 @@ const router = createRouter({

Not Found

- + + + +
+
+ ); + }, + defaultErrorComponent: ({ error }) => { + return ( +
+
+

Something went wrong

+
{error.message}
+
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index fbb99a2..43f06e7 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -20,7 +20,6 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true, - "baseUrl": ".", "paths": { "@/*": ["./src/*"] } diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 26ed28d..ac7aea3 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -28,9 +28,8 @@ export default defineConfig(({ mode }) => ({ ...(mode === "development" && { proxy: { '/api': { - target: 'http://localhost:8080/api', + target: 'http://localhost:8080', changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, ""), }, }, })