diff --git a/README.md b/README.md index 95a29e6..6225a21 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,49 @@ -# pathfinding +# 🗺️ pathfinding -🗺️ visualize pathfinding on custom mazes | made with sveltekit 💼 +A **CRUD** application made with _SvelteKit_ for visualizing the \*A\*\* algorithm on customizable mazes. Originally made for our CS116 Project. -# create-svelte +## Setup -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). +### Installation -## Creating a project +Install the latest _NodeJS_ LTS version from the [official website](https://nodejs.org/en) or through Node Version Manager: [`nvm` for Linux](https://github.com/nvm-sh/nvm), and [`nvm-win` for Windows](https://github.com/coreybutler/nvm-windows). -If you're seeing this, you've probably already done this step. Congrats! +Afterwards, install dependencies (preferably `pnpm`) with the following commands: -```bash -# create a new project in the current directory -npm create svelte@latest - -# create a new project in my-app -npm create svelte@latest my-app +``` +npm install -g pnpm +pnpm install ``` -## Developing +### Docker (for development) -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: +_Docker Compose_ is used to run necessary third-party services such as _PostgreSQL_ for development. Install _Docker Desktop_ from the [offical website](https://docs.docker.com/desktop/) to start. ```bash -npm run dev +# start containers +docker-compose up -d -# or start the server and open the app in a new browser tab -npm run dev -- --open +# stop containers +docker-compose stop + +# delete containers (--volumes is optional if you also want to remove data volumes) +docker-compose down --volumes ``` -## Building +## Development -To create a production version of your app: +### Database Migration -```bash -npm run build +The project lacks a Database Migration Framework for automatically syncing schemas. In order to setup the database schema for this project, a simple script can be used instead whicn can be executed with the following command. + +``` +pnpm vite-node "./src/lib/server/migrations/migrate" ``` -You can preview the production build with `npm run preview`. +### Development Server + +Start the development server with the following command. -> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. +``` +pnpm run dev +``` diff --git a/package.json b/package.json index 734a29c..f14e260 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "geoplot", + "name": "pathfinding", "version": "0.0.1", "private": true, "scripts": { @@ -16,37 +16,48 @@ "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@faker-js/faker": "^9.3.0", - "@sveltejs/adapter-auto": "^3.2.2", - "@sveltejs/kit": "^2.5.17", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "@tailwindcss/typography": "^0.5.13", - "@types/eslint": "^8.56.10", - "autoprefixer": "^10.4.19", - "eslint": "^9.5.0", + "@sveltejs/adapter-auto": "^3.3.1", + "@sveltejs/kit": "^2.11.1", + "@sveltejs/vite-plugin-svelte": "^5.0.2", + "@tailwindcss/typography": "^0.5.15", + "@types/eslint": "^9.6.1", + "@typescript-eslint/parser": "^8.18.0", + "autoprefixer": "^10.4.20", + "bits-ui": "^0.21.16", + "clsx": "^2.1.1", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.40.0", - "globals": "^15.6.0", - "husky": "^9.0.11", - "postcss": "^8.4.38", - "prettier": "^3.3.2", - "prettier-plugin-svelte": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.6.5", - "svelte": "^4.2.18", - "svelte-check": "^3.8.1", - "tailwindcss": "^3.4.4", - "tslib": "^2.6.3", - "typescript": "~5.4.5", - "typescript-eslint": "8.0.0-alpha.30", - "vite": "^5.3.1", + "eslint-plugin-svelte": "^2.46.1", + "espree": "^10.3.0", + "globals": "^15.13.0", + "husky": "^9.1.7", + "mode-watcher": "^0.5.0", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.2", + "prettier-plugin-tailwindcss": "^0.6.9", + "svelte": "^5.12.0", + "svelte-check": "^4.1.1", + "svelte-eslint-parser": "^0.43.0", + "svelte-sonner": "^0.3.28", + "tailwind-merge": "^2.5.5", + "tailwind-variants": "^0.3.0", + "tailwindcss": "^3.4.16", + "tslib": "^2.8.1", + "typescript": "~5.7.2", + "typescript-eslint": "^8.18.0", + "vite": "^6.0.3", "vite-node": "^2.1.8" }, "type": "module", "dependencies": { - "clsx": "^2.1.1", + "@tanstack/svelte-query": "^5.62.7", + "@types/luxon": "^3.4.2", "dotenv": "^16.4.7", + "lucide-svelte": "^0.468.0", + "luxon": "^3.5.0", "postgres": "^3.4.5", - "tailwind-merge": "^2.3.0", - "tailwind-variants": "^0.2.1", + "svelte-radix": "^2.0.1", "zod": "^3.23.8" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 291c9ed..93fce89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,28 +8,34 @@ importers: .: dependencies: - clsx: - specifier: ^2.1.1 - version: 2.1.1 + '@tanstack/svelte-query': + specifier: ^5.62.7 + version: 5.62.7(svelte@5.12.0) + '@types/luxon': + specifier: ^3.4.2 + version: 3.4.2 dotenv: specifier: ^16.4.7 version: 16.4.7 + lucide-svelte: + specifier: ^0.468.0 + version: 0.468.0(svelte@5.12.0) + luxon: + specifier: ^3.5.0 + version: 3.5.0 postgres: specifier: ^3.4.5 version: 3.4.5 - tailwind-merge: - specifier: ^2.3.0 - version: 2.3.0 - tailwind-variants: - specifier: ^0.2.1 - version: 0.2.1(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5))) + svelte-radix: + specifier: ^2.0.1 + version: 2.0.1(svelte@5.12.0) zod: specifier: ^3.23.8 version: 3.23.8 devDependencies: '@commitlint/cli': specifier: ^19.3.0 - version: 19.3.0(@types/node@20.14.8)(typescript@5.4.5) + version: 19.3.0(@types/node@20.14.8)(typescript@5.7.2) '@commitlint/config-conventional': specifier: ^19.2.2 version: 19.2.2 @@ -37,71 +43,98 @@ importers: specifier: ^9.3.0 version: 9.3.0 '@sveltejs/adapter-auto': - specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.17(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8))) + specifier: ^3.3.1 + version: 3.3.1(@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5))) '@sveltejs/kit': - specifier: ^2.5.17 - version: 2.5.17(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) + specifier: ^2.11.1 + version: 2.11.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) + specifier: ^5.0.2 + version: 5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) '@tailwindcss/typography': - specifier: ^0.5.13 - version: 0.5.13(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5))) + specifier: ^0.5.15 + version: 0.5.15(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2))) '@types/eslint': - specifier: ^8.56.10 - version: 8.56.10 + specifier: ^9.6.1 + version: 9.6.1 + '@typescript-eslint/parser': + specifier: ^8.18.0 + version: 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) autoprefixer: - specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.38) + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + bits-ui: + specifier: ^0.21.16 + version: 0.21.16(svelte@5.12.0) + clsx: + specifier: ^2.1.1 + version: 2.1.1 eslint: - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.16.0 + version: 9.16.0(jiti@1.21.6) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.5.0) + version: 9.1.0(eslint@9.16.0(jiti@1.21.6)) eslint-plugin-svelte: - specifier: ^2.40.0 - version: 2.40.0(eslint@9.5.0)(svelte@4.2.18)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) + specifier: ^2.46.1 + version: 2.46.1(eslint@9.16.0(jiti@1.21.6))(svelte@5.12.0)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) + espree: + specifier: ^10.3.0 + version: 10.3.0 globals: - specifier: ^15.6.0 - version: 15.6.0 + specifier: ^15.13.0 + version: 15.13.0 husky: - specifier: ^9.0.11 - version: 9.0.11 + specifier: ^9.1.7 + version: 9.1.7 + mode-watcher: + specifier: ^0.5.0 + version: 0.5.0(svelte@5.12.0) postcss: - specifier: ^8.4.38 - version: 8.4.38 + specifier: ^8.4.49 + version: 8.4.49 prettier: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.4.2 + version: 3.4.2 prettier-plugin-svelte: - specifier: ^3.2.5 - version: 3.2.5(prettier@3.3.2)(svelte@4.2.18) + specifier: ^3.3.2 + version: 3.3.2(prettier@3.4.2)(svelte@5.12.0) prettier-plugin-tailwindcss: - specifier: ^0.6.5 - version: 0.6.5(prettier-plugin-svelte@3.2.5(prettier@3.3.2)(svelte@4.2.18))(prettier@3.3.2) + specifier: ^0.6.9 + version: 0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.12.0))(prettier@3.4.2) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: ^5.12.0 + version: 5.12.0 svelte-check: - specifier: ^3.8.1 - version: 3.8.1(@babel/core@7.24.7)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)))(postcss@8.4.38)(svelte@4.2.18) + specifier: ^4.1.1 + version: 4.1.1(svelte@5.12.0)(typescript@5.7.2) + svelte-eslint-parser: + specifier: ^0.43.0 + version: 0.43.0(svelte@5.12.0) + svelte-sonner: + specifier: ^0.3.28 + version: 0.3.28(svelte@5.12.0) + tailwind-merge: + specifier: ^2.5.5 + version: 2.5.5 + tailwind-variants: + specifier: ^0.3.0 + version: 0.3.0(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2))) tailwindcss: - specifier: ^3.4.4 - version: 3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) + specifier: ^3.4.16 + version: 3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) tslib: - specifier: ^2.6.3 - version: 2.6.3 + specifier: ^2.8.1 + version: 2.8.1 typescript: - specifier: ~5.4.5 - version: 5.4.5 + specifier: ~5.7.2 + version: 5.7.2 typescript-eslint: - specifier: 8.0.0-alpha.30 - version: 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) + specifier: ^8.18.0 + version: 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) vite: - specifier: ^5.3.1 - version: 5.3.1(@types/node@20.14.8) + specifier: ^6.0.3 + version: 6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5) vite-node: specifier: ^2.1.8 version: 2.1.8(@types/node@20.14.8) @@ -120,81 +153,14 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} - engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} - engines: {node: '>=6.9.0'} - '@commitlint/cli@19.3.0': resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} engines: {node: '>=v18'} @@ -274,138 +240,282 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -416,26 +526,55 @@ packages: resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.16.0': - resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/js@9.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.5.0': - resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@faker-js/faker@9.3.0': resolution: {integrity: sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -444,6 +583,13 @@ packages: resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@internationalized/date@3.6.0': + resolution: {integrity: sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -463,12 +609,20 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@melt-ui/svelte@0.76.2': + resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==} + peerDependencies: + svelte: '>=3 <5' + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -493,114 +647,220 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.18.0': resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.18.0': resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.18.0': resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.18.0': resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.18.0': resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.18.0': resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.18.0': resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.18.0': resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.18.0': resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.18.0': resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.18.0': resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.18.0': resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.18.0': resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} cpu: [x64] os: [win32] - '@sveltejs/adapter-auto@3.2.2': - resolution: {integrity: sha512-Mso5xPCA8zgcKrv+QioVlqMZkyUQ5MjDJiEPuG/Z7cV/5tmwV7LmcVWk5tZ+H0NCOV1x12AsoSpt/CwFwuVXMA==} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} + cpu: [x64] + os: [win32] + + '@sveltejs/adapter-auto@3.3.1': + resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.5.17': - resolution: {integrity: sha512-wiADwq7VreR3ctOyxilAZOfPz3Jiy2IIp2C8gfafhTdQaVuGIHllfqQm8dXZKADymKr3uShxzgLZFT+a+CM4kA==} + '@sveltejs/kit@2.11.1': + resolution: {integrity: sha512-dAiHDEd+AOm20eYdMPV1a2eKBOc0s/7XsSs7PCoNv2kKS7BAoVRC9uzR+FQmxLtp8xuEo9z8CtrMQoszkThltQ==} engines: {node: '>=18.13'} hasBin: true peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 + vite: ^5.0.3 || ^6.0.0 - '@sveltejs/vite-plugin-svelte-inspector@2.1.0': - resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 - '@sveltejs/vite-plugin-svelte@3.1.1': - resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte@5.0.2': + resolution: {integrity: sha512-GElAxQMlznx1pRdodtkmiyBZcjlaJntJ8APa2hBhnbUAJqKAFGdmwjRPJhh+2DMxwARRLBzQIs/iZ5EbR4X/og==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 - '@tailwindcss/typography@0.5.13': - resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/typography@0.5.15': + resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' + + '@tanstack/query-core@5.62.7': + resolution: {integrity: sha512-fgpfmwatsrUal6V+8EC2cxZIQVl9xvL7qYa03gsdsCy985UTUlS4N+/3hCzwR0PclYDqisca2AqR1BVgJGpUDA==} + + '@tanstack/svelte-query@5.62.7': + resolution: {integrity: sha512-WTu70TtgX90r8OVlvQbRhDAnj12mvQRQ5Sp+2Dgsvdq1b3uDWwjV9ufhyhAM/2YkY03Gtlfs2GL1fyMhSx9tbQ==} + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -620,76 +880,69 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/luxon@3.4.2': + resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} + '@types/node@20.14.8': resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} - '@types/pug@2.0.10': - resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - - '@typescript-eslint/eslint-plugin@8.0.0-alpha.30': - resolution: {integrity: sha512-2CBUupdkfbE3eATph4QeZejvT+M+1bVur+zXlVx09WN31phap51ps/qemeclnCbGEz6kTgBDmScrr9XmmF8/Pg==} + '@typescript-eslint/eslint-plugin@8.18.0': + resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.0.0-alpha.30': - resolution: {integrity: sha512-tAYgFmgXU1MlCK3nbblUvJlDSibBvxtAQXGrF3IG0KmnRza9FXILZifHWL0rrwacDn40K53K607Fk2QkMjiGgw==} + '@typescript-eslint/parser@8.18.0': + resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.0.0-alpha.30': - resolution: {integrity: sha512-FGW/iPWGyPFamAVZ60oCAthMqQrqafUGebF8UKuq/ha+e9SVG6YhJoRzurlQXOVf8dHfOhJ0ADMXyFnMc53clg==} + '@typescript-eslint/scope-manager@8.18.0': + resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.0.0-alpha.30': - resolution: {integrity: sha512-FrnhlCKEKZKRbpDviHkIU9tayIUGTOfa+SjvrRv6p/AJIUv6QT8oRboRjLH/cCuwUEbM0k5UtRWYug4albHUqQ==} + '@typescript-eslint/type-utils@8.18.0': + resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.0.0-alpha.30': - resolution: {integrity: sha512-4WzLlw27SO9pK9UFj/Hu7WGo8WveT0SEiIpFVsV2WwtQmLps6kouwtVCB8GJPZKJyurhZhcqCoQVQFmpv441Vg==} + '@typescript-eslint/types@8.18.0': + resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.0.0-alpha.30': - resolution: {integrity: sha512-WSXbc9ZcXI+7yC+6q95u77i8FXz6HOLsw3ST+vMUlFy1lFbXyFL/3e6HDKQCm2Clt0krnoCPiTGvIn+GkYPn4Q==} + '@typescript-eslint/typescript-estree@8.18.0': + resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.0.0-alpha.30': - resolution: {integrity: sha512-rfhqfLqFyXhHNDwMnHiVGxl/Z2q/3guQ1jLlGQ0hi9Rb7inmwz42crM+NnLPR+2vEnwyw1P/g7fnQgQ3qvFx4g==} + '@typescript-eslint/utils@8.18.0': + resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.0.0-alpha.30': - resolution: {integrity: sha512-XZuNurZxBqmr6ZIRIwWFq7j5RZd6ZlkId/HZEWyfciK+CWoyOxSF9Pv2VXH9Rlu2ZG2PfbhLz2Veszl4Pfn7yA==} + '@typescript-eslint/visitor-keys@8.18.0': + resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} JSONStream@1.3.5: @@ -701,6 +954,11 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-typescript@1.4.13: + resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} + peerDependencies: + acorn: '>=8.9.0' + acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -710,6 +968,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -752,25 +1015,23 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -779,6 +1040,11 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bits-ui@0.21.16: + resolution: {integrity: sha512-XFZ7/bK7j/K+5iktxX/ZpmoFHjYjpPzP5EOO/4bWiaFg5TG1iMcfjDhlBTQnJxD6BoVoHuqeZPHZvaTgF4Iv3Q==} + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.118 + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -789,20 +1055,11 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.24.2: resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -834,6 +1091,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -842,9 +1103,6 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -881,9 +1139,6 @@ packages: engines: {node: '>=16'} hasBin: true - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -912,9 +1167,9 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -925,15 +1180,6 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -954,12 +1200,8 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -968,10 +1210,6 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} @@ -986,9 +1224,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.810: - resolution: {integrity: sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==} - electron-to-chromium@1.5.72: resolution: {integrity: sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==} @@ -1008,14 +1243,16 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -1044,12 +1281,12 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-svelte@2.40.0: - resolution: {integrity: sha512-JuOzmfVaMeEkBASL7smHu3tIU4D9rWkHuRNV+zm/5zgAwiZVvxrXM7TcfIOS+U7VXOr4uCZuE+kZTVTzS0IE+Q==} + eslint-plugin-svelte@2.46.1: + resolution: {integrity: sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.155 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true @@ -1058,28 +1295,33 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.5.0: - resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==} + eslint@9.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + esm-env@1.2.1: + resolution: {integrity: sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==} - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -1090,6 +1332,9 @@ packages: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} + esrap@1.2.3: + resolution: {integrity: sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1098,9 +1343,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -1125,6 +1367,14 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1148,6 +1398,9 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + focus-trap@7.6.2: + resolution: {integrity: sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==} + foreground-child@3.2.1: resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} @@ -1155,9 +1408,6 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1166,10 +1416,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1196,39 +1442,24 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.6.0: - resolution: {integrity: sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==} + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} engines: {node: '>=18'} globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1248,8 +1479,8 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -1268,13 +1499,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1310,12 +1534,8 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -1343,11 +1563,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -1363,11 +1578,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -1379,8 +1589,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - known-css-properties@0.32.0: - resolution: {integrity: sha512-PXuex21brpp7qENI143ZL5cWQcMR4IZVeeZv9ew6dg+bZX2xRUu/NzGKudZJY5DO4APiMkNPYIF8VGIdY08Tdw==} + known-css-properties@0.35.0: + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -1390,8 +1600,8 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: @@ -1442,18 +1652,24 @@ packages: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-svelte@0.468.0: + resolution: {integrity: sha512-n0ecAFtCY5LEeL+PJ1Xj4n3c2gzj8tMpak0KMGnvoSJEjCsCnRB0mekBtJZAo7beyynW9Qj5Um1KfMBAeTNplw==} + peerDependencies: + svelte: ^3 || ^4 || ^5.0.0-next.42 + + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.15: + resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -1469,14 +1685,14 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1491,9 +1707,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mode-watcher@0.5.0: + resolution: {integrity: sha512-5E6fh/aXhAVv+U+DbeM0hCmskQE9u7WSmvnCRijJB/MJu7HtB73sjiCaZ9n1M8QHmzLrBFo8XBAUcWXkDm8Z9A==} + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.1 mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -1503,9 +1720,6 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1517,12 +1731,14 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.0.9: + resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} + engines: {node: ^18 || >=20} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -1546,9 +1762,6 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -1592,10 +1805,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1611,16 +1820,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -1675,8 +1877,8 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -1701,11 +1903,15 @@ packages: resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} engines: {node: '>=4'} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} postgres@3.4.5: @@ -1716,14 +1922,14 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@3.2.5: - resolution: {integrity: sha512-vP/M/Goc8z4iVIvrwXwbrYVjJgA0Hf8PO1G4LBh/ocSt6vUP6sLvyu9F3ABEGr+dbKyxZjEKLkeFsWy/yYl0HQ==} + prettier-plugin-svelte@3.3.2: + resolution: {integrity: sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - prettier-plugin-tailwindcss@0.6.5: - resolution: {integrity: sha512-axfeOArc/RiGHjOIy9HytehlC0ZLeMaqY09mm8YCkMzznKiDkwFzOpBvtuhuv3xG5qB73+Mj7OCe2j/L1ryfuQ==} + prettier-plugin-tailwindcss@0.6.9: + resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -1737,6 +1943,7 @@ packages: prettier-plugin-import-sort: '*' prettier-plugin-jsdoc: '*' prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' prettier-plugin-organize-attributes: '*' prettier-plugin-organize-imports: '*' prettier-plugin-sort-imports: '*' @@ -1763,6 +1970,8 @@ packages: optional: true prettier-plugin-marko: optional: true + prettier-plugin-multiline-arrays: + optional: true prettier-plugin-organize-attributes: optional: true prettier-plugin-organize-imports: @@ -1774,8 +1983,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true @@ -1793,8 +2002,9 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -1820,16 +2030,16 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rollup@4.18.0: resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1837,13 +2047,6 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} @@ -1864,20 +2067,12 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - sorcery@0.11.1: - resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} - hasBin: true + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} split2@4.2.0: @@ -1904,10 +2099,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1929,79 +2120,52 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-check@3.8.1: - resolution: {integrity: sha512-KlQ0TRVe01mdvh49Ylkr9FQxO/UWbQOtaIrccl3gjgkvby1TxY41VkT7ijCl6i29FjaJPE4m6YGmhdqov0MfkA==} + svelte-check@4.1.1: + resolution: {integrity: sha512-NfaX+6Qtc8W/CyVGS/F7/XdiSSyXz+WGYA9ZWV3z8tso14V2vzjfXviKaTFEzB7g8TqfgO2FOzP6XT4ApSTUTw==} + engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' - svelte-eslint-parser@0.39.1: - resolution: {integrity: sha512-0VR9gq2TOdSrJW94Qf2F3XrzXRQomXQtRZGFS3FEUr3G4J8DcpqXfBF1HJyOa3dACyGsKiBbOPF56pBgYaqXBA==} + svelte-eslint-parser@0.43.0: + resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.115 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true - svelte-hmr@0.16.0: - resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} + svelte-radix@2.0.1: + resolution: {integrity: sha512-YrX44Dj+Rp6YZuPSjdmyd6P8QTkb2NXwySUCZYzjwkP6Cl3dZaTBPPeaSOutP3v3ycQ2XwyNOpyn4p0QcN+uYQ==} + engines: {node: '>=18.0.0', npm: '>=7.0.0'} peerDependencies: - svelte: ^3.19.0 || ^4.0.0 + svelte: ^5.0.0 - svelte-preprocess@5.1.4: - resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} - engines: {node: '>= 16.0.0'} + svelte-sonner@0.3.28: + resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} - engines: {node: '>=16'} + svelte@5.12.0: + resolution: {integrity: sha512-nOd7uj0D/4A3IrHnltaFYndVPGViYSs0s+Zi3N4uQg3owJt9RoiUdwxYx8qjorj5CtaGsx8dNYsFVbH6czrGNg==} + engines: {node: '>=18'} - tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwind-variants@0.2.1: - resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==} + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + + tailwind-variants@0.3.0: + resolution: {integrity: sha512-ho2k5kn+LB1fT5XdNS3Clb96zieWxbStE9wNLK7D0AV64kdZMaYzAKo0fWl6fXLPY99ffF9oBJnIj5escEl/8A==} engines: {node: '>=16.x', pnpm: '>=7.x'} peerDependencies: tailwindcss: '*' - tailwindcss@3.4.4: - resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + tailwindcss@3.4.16: + resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} engines: {node: '>=14.0.0'} hasBin: true @@ -2009,9 +2173,6 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -2056,24 +2217,22 @@ packages: '@swc/wasm': optional: true - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.0.0-alpha.30: - resolution: {integrity: sha512-/vGhBMsK1TpadQh1eQ02c5pyiPGmKR9cVzX5C9plZ+LC0HPLpWoJbbTVfQN7BkIK7tUxDt2BFr3pFL5hDDrx7g==} + typescript-eslint@8.18.0: + resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true @@ -2084,12 +2243,6 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -2138,10 +2291,50 @@ packages: terser: optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.0.4: + resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: vite: optional: true @@ -2163,16 +2356,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -2202,6 +2389,9 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -2219,90 +2409,8 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - optional: true - - '@babel/compat-data@7.26.3': - optional: true - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.24.7) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - optional: true - - '@babel/generator@7.26.3': - dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - optional: true - - '@babel/helper-compilation-targets@7.25.9': - dependencies: - '@babel/compat-data': 7.26.3 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - optional: true - - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 - transitivePeerDependencies: - - supports-color - optional: true - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 - transitivePeerDependencies: - - supports-color - optional: true - - '@babel/helper-string-parser@7.25.9': - optional: true - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.25.9': - optional: true - - '@babel/helper-validator-option@7.25.9': - optional: true - - '@babel/helpers@7.26.0': - dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - optional: true - '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 @@ -2310,46 +2418,11 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.26.3': - dependencies: - '@babel/types': 7.26.3 - optional: true - - '@babel/runtime@7.24.7': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - optional: true - - '@babel/traverse@7.26.4': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - optional: true - - '@babel/types@7.26.3': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - optional: true - - '@commitlint/cli@19.3.0(@types/node@20.14.8)(typescript@5.4.5)': + '@commitlint/cli@19.3.0(@types/node@20.14.8)(typescript@5.7.2)': dependencies: '@commitlint/format': 19.3.0 '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.14.8)(typescript@5.4.5) + '@commitlint/load': 19.2.0(@types/node@20.14.8)(typescript@5.7.2) '@commitlint/read': 19.2.1 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -2396,15 +2469,15 @@ snapshots: '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.2.0(@types/node@20.14.8)(typescript@5.4.5)': + '@commitlint/load@19.2.0(@types/node@20.14.8)(typescript@5.7.2)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 '@commitlint/resolve-extends': 19.1.0 '@commitlint/types': 19.0.3 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.4.5) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.8)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.8)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -2464,92 +2537,170 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.24.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.24.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.24.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.24.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.24.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.24.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.24.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.24.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.24.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.24.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.24.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.24.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.24.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.24.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.24.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.24.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.24.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.24.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.24.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.24.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.24.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.5.0)': + '@esbuild/win32-x64@0.24.0': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.16.0(jiti@1.21.6))': dependencies: - eslint: 9.5.0 + eslint: 9.16.0(jiti@1.21.6) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.10.1': {} - '@eslint/config-array@0.16.0': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.5 + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.5 - espree: 10.1.0 + debug: 4.4.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 @@ -2559,16 +2710,44 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.5.0': {} + '@eslint/js@9.16.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.4': + dependencies: + levn: 0.4.1 + + '@faker-js/faker@9.3.0': {} + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 - '@eslint/object-schema@2.1.4': {} + '@floating-ui/utils@0.2.8': {} - '@faker-js/faker@9.3.0': {} + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.0 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.4.1': {} + + '@internationalized/date@3.6.0': + dependencies: + '@swc/helpers': 0.5.15 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2590,6 +2769,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -2598,9 +2779,19 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 optional: true + '@melt-ui/svelte@0.76.2(svelte@5.12.0)': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/dom': 1.6.12 + '@internationalized/date': 3.6.0 + dequal: 2.0.3 + focus-trap: 7.6.2 + nanoid: 5.0.9 + svelte: 5.12.0 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2621,104 +2812,171 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.18.0': optional: true + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + '@rollup/rollup-android-arm64@4.18.0': optional: true + '@rollup/rollup-android-arm64@4.28.1': + optional: true + '@rollup/rollup-darwin-arm64@4.18.0': optional: true + '@rollup/rollup-darwin-arm64@4.28.1': + optional: true + '@rollup/rollup-darwin-x64@4.18.0': optional: true + '@rollup/rollup-darwin-x64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.28.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.28.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.18.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.18.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.28.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.18.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.18.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.28.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.18.0': optional: true + '@rollup/rollup-linux-x64-musl@4.28.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.18.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.28.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.18.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.28.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.17(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))': + '@rollup/rollup-win32-x64-msvc@4.28.1': + optional: true + + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))': dependencies: - '@sveltejs/kit': 2.5.17(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) + '@sveltejs/kit': 2.11.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.5.17(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8))': + '@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) + '@sveltejs/vite-plugin-svelte': 5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) '@types/cookie': 0.6.0 cookie: 0.6.0 - devalue: 5.0.0 - esm-env: 1.0.0 + devalue: 5.1.1 + esm-env: 1.2.1 import-meta-resolve: 4.1.0 kleur: 4.1.5 magic-string: 0.30.10 mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 - sirv: 2.0.4 - svelte: 4.2.18 + sirv: 3.0.0 + svelte: 5.12.0 tiny-glob: 0.2.9 - vite: 5.3.1(@types/node@20.14.8) + vite: 6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5) - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) - debug: 4.3.5 - svelte: 4.2.18 - vite: 5.3.1(@types/node@20.14.8) + '@sveltejs/vite-plugin-svelte': 5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) + debug: 4.4.0 + svelte: 5.12.0 + vite: 6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8))': + '@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)))(svelte@4.2.18)(vite@5.3.1(@types/node@20.14.8)) - debug: 4.3.5 + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)))(svelte@5.12.0)(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) + debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.10 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) - vite: 5.3.1(@types/node@20.14.8) - vitefu: 0.2.5(vite@5.3.1(@types/node@20.14.8)) + magic-string: 0.30.15 + svelte: 5.12.0 + vite: 6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5) + vitefu: 1.0.4(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)) transitivePeerDependencies: - supports-color - '@tailwindcss/typography@0.5.13(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)))': + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) + + '@tanstack/query-core@5.62.7': {} + + '@tanstack/svelte-query@5.62.7(svelte@5.12.0)': + dependencies: + '@tanstack/query-core': 5.62.7 + svelte: 5.12.0 '@tsconfig/node10@1.0.11': optional: true @@ -2738,101 +2996,99 @@ snapshots: '@types/cookie@0.6.0': {} - '@types/eslint@8.56.10': + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/json-schema@7.0.15': {} + '@types/luxon@3.4.2': {} + '@types/node@20.14.8': dependencies: undici-types: 5.26.5 - '@types/pug@2.0.10': {} - - '@typescript-eslint/eslint-plugin@8.0.0-alpha.30(@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.0.0-alpha.30 - '@typescript-eslint/type-utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 - eslint: 9.5.0 + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 9.16.0(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': + '@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.0.0-alpha.30 - '@typescript-eslint/types': 8.0.0-alpha.30 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 - debug: 4.3.5 - eslint: 9.5.0 - optionalDependencies: - typescript: 5.4.5 + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.4.0 + eslint: 9.16.0(jiti@1.21.6) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.0.0-alpha.30': + '@typescript-eslint/scope-manager@8.18.0': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.30 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 - '@typescript-eslint/type-utils@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - debug: 4.3.5 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + debug: 4.4.0 + eslint: 9.16.0(jiti@1.21.6) + ts-api-utils: 1.3.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - - eslint - supports-color - '@typescript-eslint/types@8.0.0-alpha.30': {} + '@typescript-eslint/types@8.18.0': {} - '@typescript-eslint/typescript-estree@8.0.0-alpha.30(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.30 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 - debug: 4.3.5 - globby: 11.1.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.4.0 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.4 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5)': + '@typescript-eslint/utils@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.30 - '@typescript-eslint/types': 8.0.0-alpha.30 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.4.5) - eslint: 9.5.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + eslint: 9.16.0(jiti@1.21.6) + typescript: 5.7.2 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@8.0.0-alpha.30': + '@typescript-eslint/visitor-keys@8.18.0': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.30 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 JSONStream@1.3.5: dependencies: @@ -2843,13 +3099,23 @@ snapshots: dependencies: acorn: 8.12.0 + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-typescript@1.4.13(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.3.4: dependencies: - acorn: 8.12.0 + acorn: 8.14.0 optional: true acorn@8.12.0: {} + acorn@8.14.0: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2892,32 +3158,33 @@ snapshots: argparse@2.0.1: {} - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.2: {} array-ify@1.0.0: {} - array-union@2.1.0: {} - - autoprefixer@10.4.19(postcss@8.4.38): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: - browserslist: 4.23.1 + browserslist: 4.24.2 caniuse-lite: 1.0.30001687 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 + picocolors: 1.1.1 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 + axobject-query@4.1.0: {} balanced-match@1.0.2: {} binary-extensions@2.3.0: {} + bits-ui@0.21.16(svelte@5.12.0): + dependencies: + '@internationalized/date': 3.6.0 + '@melt-ui/svelte': 0.76.2(svelte@5.12.0) + nanoid: 5.0.9 + svelte: 5.12.0 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -2931,22 +3198,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.1: - dependencies: - caniuse-lite: 1.0.30001687 - electron-to-chromium: 1.4.810 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) - browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001687 electron-to-chromium: 1.5.72 node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.2) - optional: true - - buffer-crc32@1.0.0: {} cac@6.7.14: {} @@ -2981,6 +3238,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -2989,14 +3250,6 @@ snapshots: clsx@2.1.1: {} - code-red@1.0.4: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.12.0 - estree-walker: 3.0.3 - periscopic: 3.1.0 - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -3033,26 +3286,23 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - convert-source-map@2.0.0: - optional: true - cookie@0.6.0: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.8)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5): + cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.8)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): dependencies: '@types/node': 20.14.8 - cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.6 - typescript: 5.4.5 + typescript: 5.7.2 - cosmiconfig@9.0.0(typescript@5.4.5): + cosmiconfig@9.0.0(typescript@5.7.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.4.5 + typescript: 5.7.2 create-require@1.1.1: optional: true @@ -3063,19 +3313,16 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-tree@2.3.1: + cross-spawn@7.0.6: dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 cssesc@3.0.0: {} dargs@8.1.0: {} - debug@4.3.5: - dependencies: - ms: 2.1.2 - debug@4.4.0: dependencies: ms: 2.1.3 @@ -3086,19 +3333,13 @@ snapshots: dequal@2.0.3: {} - detect-indent@6.1.0: {} - - devalue@5.0.0: {} + devalue@5.1.1: {} didyoumean@1.2.2: {} diff@4.0.2: optional: true - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - dlv@1.1.3: {} dot-prop@5.3.0: @@ -3109,10 +3350,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.810: {} - - electron-to-chromium@1.5.72: - optional: true + electron-to-chromium@1.5.72: {} emoji-regex@8.0.0: {} @@ -3126,8 +3364,6 @@ snapshots: es-module-lexer@1.5.4: {} - es6-promise@3.3.1: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3154,40 +3390,66 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + escalade@3.1.2: {} - escalade@3.2.0: - optional: true + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.5.0): + eslint-compat-utils@0.5.1(eslint@9.16.0(jiti@1.21.6)): dependencies: - eslint: 9.5.0 + eslint: 9.16.0(jiti@1.21.6) semver: 7.6.2 - eslint-config-prettier@9.1.0(eslint@9.5.0): + eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)): dependencies: - eslint: 9.5.0 + eslint: 9.16.0(jiti@1.21.6) - eslint-plugin-svelte@2.40.0(eslint@9.5.0)(svelte@4.2.18)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)): + eslint-plugin-svelte@2.46.1(eslint@9.16.0(jiti@1.21.6))(svelte@5.12.0)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0(jiti@1.21.6)) '@jridgewell/sourcemap-codec': 1.4.15 - eslint: 9.5.0 - eslint-compat-utils: 0.5.1(eslint@9.5.0) + eslint: 9.16.0(jiti@1.21.6) + eslint-compat-utils: 0.5.1(eslint@9.16.0(jiti@1.21.6)) esutils: 2.0.3 - known-css-properties: 0.32.0 - postcss: 8.4.38 - postcss-load-config: 3.1.4(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) - postcss-safe-parser: 6.0.0(postcss@8.4.38) + known-css-properties: 0.35.0 + postcss: 8.4.49 + postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) + postcss-safe-parser: 6.0.0(postcss@8.4.49) postcss-selector-parser: 6.1.0 semver: 7.6.2 - svelte-eslint-parser: 0.39.1(svelte@4.2.18) + svelte-eslint-parser: 0.43.0(svelte@5.12.0) optionalDependencies: - svelte: 4.2.18 + svelte: 5.12.0 transitivePeerDependencies: - ts-node @@ -3196,33 +3458,37 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.0.1: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.5.0: + eslint@9.16.0(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/config-array': 0.16.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.5.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.4 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 + cross-spawn: 7.0.6 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 8.0.1 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3232,25 +3498,23 @@ snapshots: ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - esm-env@1.0.0: {} + esm-env@1.2.1: {} - espree@10.1.0: + espree@10.3.0: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 4.0.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: @@ -3262,16 +3526,17 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@1.2.3: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.5 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 estraverse@5.3.0: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.5 - esutils@2.0.3: {} execa@8.0.1: @@ -3304,6 +3569,8 @@ snapshots: dependencies: reusify: 1.0.4 + fdir@6.4.2: {} + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -3330,6 +3597,10 @@ snapshots: flatted@3.3.1: {} + focus-trap@7.6.2: + dependencies: + tabbable: 6.2.0 + foreground-child@3.2.1: dependencies: cross-spawn: 7.0.3 @@ -3337,16 +3608,11 @@ snapshots: fraction.js@4.3.7: {} - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true function-bind@1.1.2: {} - gensync@1.0.0-beta.2: - optional: true - get-caller-file@2.0.5: {} get-stream@8.0.1: {} @@ -3374,41 +3640,18 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - global-directory@4.0.1: dependencies: ini: 4.1.1 - globals@11.12.0: - optional: true - globals@14.0.0: {} - globals@15.6.0: {} + globals@15.13.0: {} globalyzer@0.1.0: {} - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - globrex@0.1.2: {} - graceful-fs@4.2.11: {} - graphemer@1.4.0: {} has-flag@3.0.0: {} @@ -3421,7 +3664,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.0.11: {} + husky@9.1.7: {} ignore@5.3.1: {} @@ -3434,13 +3677,6 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - ini@4.1.1: {} is-arrayish@0.2.1: {} @@ -3465,11 +3701,9 @@ snapshots: is-obj@2.0.0: {} - is-path-inside@3.0.3: {} - - is-reference@3.0.2: + is-reference@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 is-stream@3.0.0: {} @@ -3493,9 +3727,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@3.0.2: - optional: true - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -3506,9 +3737,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json5@2.2.3: - optional: true - jsonparse@1.3.1: {} keyv@4.5.4: @@ -3517,7 +3745,7 @@ snapshots: kleur@4.1.5: {} - known-css-properties@0.32.0: {} + known-css-properties@0.35.0: {} levn@0.4.1: dependencies: @@ -3526,7 +3754,7 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -3562,20 +3790,23 @@ snapshots: lru-cache@10.2.2: {} - lru-cache@5.1.1: + lucide-svelte@0.468.0(svelte@5.12.0): dependencies: - yallist: 3.1.1 - optional: true + svelte: 5.12.0 + + luxon@3.5.0: {} magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.15: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-error@1.3.6: optional: true - mdn-data@2.0.30: {} - meow@12.1.1: {} merge-stream@2.0.0: {} @@ -3587,9 +3818,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mimic-fn@4.0.0: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 - min-indent@1.0.1: {} + mimic-fn@4.0.0: {} minimatch@3.1.2: dependencies: @@ -3603,16 +3837,14 @@ snapshots: minipass@7.1.2: {} - mkdirp@0.5.6: + mode-watcher@0.5.0(svelte@5.12.0): dependencies: - minimist: 1.2.8 + svelte: 5.12.0 mri@1.2.0: {} mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} mz@2.7.0: @@ -3623,12 +3855,11 @@ snapshots: nanoid@3.3.7: {} - natural-compare@1.4.0: {} + nanoid@5.0.9: {} - node-releases@2.0.14: {} + natural-compare@1.4.0: {} - node-releases@2.0.19: - optional: true + node-releases@2.0.19: {} normalize-path@3.0.0: {} @@ -3642,10 +3873,6 @@ snapshots: object-hash@3.0.0: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -3692,8 +3919,6 @@ snapshots: path-exists@5.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -3705,20 +3930,11 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.2 - path-type@4.0.0: {} - pathe@1.1.2: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.0.1: {} - picocolors@1.1.1: - optional: true + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -3726,46 +3942,46 @@ snapshots: pirates@4.0.6: {} - postcss-import@15.1.0(postcss@8.4.38): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.38 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.38): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.38 + postcss: 8.4.49 - postcss-load-config@3.1.4(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)): + postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.14.8)(typescript@5.4.5) + postcss: 8.4.49 + ts-node: 10.9.2(@types/node@20.14.8)(typescript@5.7.2) - postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)): dependencies: - lilconfig: 3.1.2 + lilconfig: 3.1.3 yaml: 2.4.5 optionalDependencies: - postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.14.8)(typescript@5.4.5) + postcss: 8.4.49 + ts-node: 10.9.2(@types/node@20.14.8)(typescript@5.7.2) - postcss-nested@6.0.1(postcss@8.4.38): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - postcss-safe-parser@6.0.0(postcss@8.4.38): + postcss-safe-parser@6.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.38 + postcss: 8.4.49 - postcss-scss@4.0.9(postcss@8.4.38): + postcss-scss@4.0.9(postcss@8.4.49): dependencies: - postcss: 8.4.38 + postcss: 8.4.49 postcss-selector-parser@6.0.10: dependencies: @@ -3777,30 +3993,35 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} - postcss@8.4.38: + postcss@8.4.49: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.1 + source-map-js: 1.2.1 postgres@3.4.5: {} prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.2.5(prettier@3.3.2)(svelte@4.2.18): + prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.12.0): dependencies: - prettier: 3.3.2 - svelte: 4.2.18 + prettier: 3.4.2 + svelte: 5.12.0 - prettier-plugin-tailwindcss@0.6.5(prettier-plugin-svelte@3.2.5(prettier@3.3.2)(svelte@4.2.18))(prettier@3.3.2): + prettier-plugin-tailwindcss@0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.12.0))(prettier@3.4.2): dependencies: - prettier: 3.3.2 + prettier: 3.4.2 optionalDependencies: - prettier-plugin-svelte: 3.2.5(prettier@3.3.2)(svelte@4.2.18) + prettier-plugin-svelte: 3.3.2(prettier@3.4.2)(svelte@5.12.0) - prettier@3.3.2: {} + prettier@3.4.2: {} punycode@2.3.1: {} @@ -3814,7 +4035,7 @@ snapshots: dependencies: picomatch: 2.3.1 - regenerator-runtime@0.14.1: {} + readdirp@4.0.2: {} require-directory@2.1.1: {} @@ -3832,10 +4053,6 @@ snapshots: reusify@1.0.4: {} - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - rollup@4.18.0: dependencies: '@types/estree': 1.0.5 @@ -3858,6 +4075,31 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 + rollup@4.28.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -3866,16 +4108,6 @@ snapshots: dependencies: mri: 1.2.0 - sander@0.5.1: - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - - semver@6.3.1: - optional: true - semver@7.6.2: {} set-cookie-parser@2.6.0: {} @@ -3888,22 +4120,13 @@ snapshots: signal-exit@4.1.0: {} - sirv@2.0.4: + sirv@3.0.0: dependencies: '@polka/url': 1.0.0-next.25 mrmime: 2.0.0 totalist: 3.0.1 - slash@3.0.0: {} - - sorcery@0.11.1: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - buffer-crc32: 1.0.0 - minimist: 1.2.8 - sander: 0.5.1 - - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} split2@4.2.0: {} @@ -3929,10 +4152,6 @@ snapshots: strip-final-newline@3.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@3.1.1: {} sucrase@3.35.0: @@ -3955,83 +4174,62 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.1(@babel/core@7.24.7)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)))(postcss@8.4.38)(svelte@4.2.18): + svelte-check@4.1.1(svelte@5.12.0)(typescript@5.7.2): dependencies: '@jridgewell/trace-mapping': 0.3.25 - chokidar: 3.6.0 - fast-glob: 3.3.2 - import-fresh: 3.3.0 - picocolors: 1.0.1 + chokidar: 4.0.1 + fdir: 6.4.2 + picocolors: 1.1.1 sade: 1.8.1 - svelte: 4.2.18 - svelte-preprocess: 5.1.4(@babel/core@7.24.7)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)))(postcss@8.4.38)(svelte@4.2.18)(typescript@5.4.5) - typescript: 5.4.5 + svelte: 5.12.0 + typescript: 5.7.2 transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss + - picomatch - svelte-eslint-parser@0.39.1(svelte@4.2.18): + svelte-eslint-parser@0.43.0(svelte@5.12.0): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.38 - postcss-scss: 4.0.9(postcss@8.4.38) + postcss: 8.4.49 + postcss-scss: 4.0.9(postcss@8.4.49) optionalDependencies: - svelte: 4.2.18 + svelte: 5.12.0 - svelte-hmr@0.16.0(svelte@4.2.18): + svelte-radix@2.0.1(svelte@5.12.0): dependencies: - svelte: 4.2.18 + svelte: 5.12.0 - svelte-preprocess@5.1.4(@babel/core@7.24.7)(postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)))(postcss@8.4.38)(svelte@4.2.18)(typescript@5.4.5): + svelte-sonner@0.3.28(svelte@5.12.0): dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.10 - sorcery: 0.11.1 - strip-indent: 3.0.0 - svelte: 4.2.18 - optionalDependencies: - '@babel/core': 7.24.7 - postcss: 8.4.38 - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) - typescript: 5.4.5 + svelte: 5.12.0 - svelte@4.2.18: + svelte@5.12.0: dependencies: '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.0 '@types/estree': 1.0.5 - acorn: 8.12.0 - aria-query: 5.3.0 - axobject-query: 4.0.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 + acorn: 8.14.0 + acorn-typescript: 1.4.13(acorn@8.14.0) + aria-query: 5.3.2 + axobject-query: 4.1.0 + esm-env: 1.2.1 + esrap: 1.2.3 + is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.10 - periscopic: 3.1.0 + magic-string: 0.30.15 + zimmerframe: 1.1.2 - tailwind-merge@2.3.0: - dependencies: - '@babel/runtime': 7.24.7 + tabbable@6.2.0: {} - tailwind-variants@0.2.1(tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5))): + tailwind-merge@2.5.5: {} + + tailwind-variants@0.3.0(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2))): dependencies: - tailwind-merge: 2.3.0 - tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) + tailwind-merge: 2.5.5 + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) - tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)): + tailwindcss@3.4.16(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -4042,17 +4240,17 @@ snapshots: glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-import: 15.1.0(postcss@8.4.38) - postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5)) - postcss-nested: 6.0.1(postcss@8.4.38) - postcss-selector-parser: 6.1.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2)) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -4060,8 +4258,6 @@ snapshots: text-extensions@2.4.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -4083,13 +4279,13 @@ snapshots: totalist@3.0.1: {} - ts-api-utils@1.3.0(typescript@5.4.5): + ts-api-utils@1.3.0(typescript@5.7.2): dependencies: - typescript: 5.4.5 + typescript: 5.7.2 ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@20.14.8)(typescript@5.4.5): + ts-node@10.9.2(@types/node@20.14.8)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -4097,52 +4293,44 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.14.8 - acorn: 8.12.0 + acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optional: true - tslib@2.6.3: {} + tslib@2.8.1: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5): + typescript-eslint@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.30(@typescript-eslint/parser@8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5) - '@typescript-eslint/parser': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.5.0)(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + eslint: 9.16.0(jiti@1.21.6) + typescript: 5.7.2 transitivePeerDependencies: - - eslint - supports-color - typescript@5.4.5: {} + typescript@5.7.2: {} undici-types@5.26.5: {} unicorn-magic@0.1.0: {} - update-browserslist-db@1.0.16(browserslist@4.23.1): - dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 - update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 - optional: true uri-js@4.4.1: dependencies: @@ -4173,15 +4361,26 @@ snapshots: vite@5.3.1(@types/node@20.14.8): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 + postcss: 8.4.49 rollup: 4.18.0 optionalDependencies: '@types/node': 20.14.8 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.3.1(@types/node@20.14.8)): + vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5): + dependencies: + esbuild: 0.24.0 + postcss: 8.4.49 + rollup: 4.28.1 optionalDependencies: - vite: 5.3.1(@types/node@20.14.8) + '@types/node': 20.14.8 + fsevents: 2.3.3 + jiti: 1.21.6 + yaml: 2.4.5 + + vitefu@1.0.4(vite@6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5)): + optionalDependencies: + vite: 6.0.3(@types/node@20.14.8)(jiti@1.21.6)(yaml@2.4.5) which@2.0.2: dependencies: @@ -4201,13 +4400,8 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - y18n@5.0.8: {} - yallist@3.1.1: - optional: true - yaml@1.10.2: {} yaml@2.4.5: {} @@ -4231,4 +4425,6 @@ snapshots: yocto-queue@1.0.0: {} + zimmerframe@1.1.2: {} + zod@3.23.8: {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 54b09a8..06b46b2 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -2,6 +2,7 @@ import { tryJSON } from "$lib/utils/try-json"; import type { Handle, HandleServerError } from "@sveltejs/kit"; import { ZodError } from "zod"; +// eslint-disable-next-line @typescript-eslint/unbound-method export const handle: Handle = async ({ event, resolve }) => { const response = await resolve(event); diff --git a/src/lib/client/base-url.client.ts b/src/lib/client/base-url.client.ts new file mode 100644 index 0000000..a5eae55 --- /dev/null +++ b/src/lib/client/base-url.client.ts @@ -0,0 +1,3 @@ +export function baseUrl() { + return window.origin; +} diff --git a/src/lib/pathfinding/a-star.ts b/src/lib/pathfinding/a-star.ts new file mode 100644 index 0000000..df167e6 --- /dev/null +++ b/src/lib/pathfinding/a-star.ts @@ -0,0 +1,150 @@ +import { GridNode } from "$lib/types/grid-service"; +import { PriorityQueue } from "./priority-queue"; + +type Point = readonly [number, number]; + +/** + * Graph Node for a cell in the Grid + */ +interface Node { + point: Point; + f: number; + g: number; + h: number; + previous?: Node; +} + +/** + * Incremental implementation for the A-Star Algorithm + */ +export class AStar { + constructor( + public readonly size: number, + public readonly grid: GridNode[], + ) { + if (size * size != grid.length) throw new Error("Provided size and grid data does not match."); + + this.end = [size - 1, size - 1]; + + if (grid[0] == GridNode.empty) + this.openlist.insert({ + point: this.start, + f: this.heuristic(this.start, this.end), + g: 0, + h: this.heuristic(this.start, this.end), + }); + } + + status: "no-solution" | "ongoing" | "finished" | undefined; + start = [0, 0] as Point; + end: Point; + + /** Last visited node by the algorithm */ + lastnode: Node | undefined; + + /** The potential next nodes to visit in the grid */ + openlist = new PriorityQueue((a, b) => a.f - b.f); + + /** The already visited nodes in the grid */ + closedset = new Map(); + + private serialize([x, y]: Point) { + return `${x},${y}`; + } + + private equals([ax, ay]: Point, [bx, by]: Point) { + return ax == bx && ay == by; + } + + /** Educated guess for how far a cell is from another cell */ + private heuristic([ax, ay]: Point, [bx, by]: Point) { + return Math.sqrt((ax - bx) ** 2 + (ay - by) ** 2); // Euclidean Distance + } + + /** Checks if a point is within-bounds and in an empty cell */ + private isvacant([x, y]: Point) { + if (x < 0 || this.size <= x) return false; + if (y < 0 || this.size <= y) return false; + if (this.grid[x + y * this.size] != GridNode.empty) return false; + return true; + } + + /** Returns all the valid neighboring cells of a given cell */ + private neighbors([x, y]: Point): Point[] { + const neighbors: Point[] = [ + [x + 0, y - 1], // up + [x - 1, y - 1], // up-left + [x - 1, y + 0], // left + [x - 1, y + 1], // down-left + [x + 0, y + 1], // down + [x + 1, y + 1], // down-right + [x + 1, y + 0], // right + [x + 1, y - 1], // up-right + ]; + + return neighbors.filter((point) => this.isvacant(point)); + } + + /** Returns the current "shortest" path by backtracking the last visited node */ + public currentpath() { + const path: Point[] = []; + let current = this.lastnode; + while (current) { + path.unshift(current.point); + current = current.previous; + } + return path; + } + + /** Runs a single pass/iteration of the a-star algorithm */ + public step() { + if (this.status == "finished" || this.status == "no-solution") return; + + if (this.openlist.isempty()) { + this.status = "no-solution"; + return; + } + + // Move best guess from open list to closed set (smallest accumulated and heuristic cost) + const current = this.openlist.popmin()!; + this.lastnode = current; + this.closedset.set(this.serialize(current.point), current.point); + + // Check if goal has been reached + if (this.equals(current.point, this.end)) { + this.status = "finished"; + return; + } + + // Process neighbors + for (const neighbor_point of this.neighbors(current.point)) { + // Skip if neighbor has been visited + if (this.closedset.has(this.serialize(neighbor_point))) continue; + + // Compute neighbor node weights + const g = current.g + this.heuristic(current.point, neighbor_point); + const h = this.heuristic(neighbor_point, this.end); + const neighbor_node: Node = { + point: neighbor_point, + previous: current, + f: g + h, + g, + h, + }; + + // Check if node is already listed: + // - add if not yet + // - update accumulated cost if new discovered path has lower cost + const node = this.openlist.find((node) => this.equals(node.point, neighbor_point)); + if (!node) this.openlist.insert(neighbor_node); + else if (g < node.g) { + node.g = g; + node.h = h; + node.f = g + h; + node.previous = current; + } + } + + this.status = "ongoing"; + } +} diff --git a/src/lib/pathfinding/priority-queue.ts b/src/lib/pathfinding/priority-queue.ts new file mode 100644 index 0000000..377cedc --- /dev/null +++ b/src/lib/pathfinding/priority-queue.ts @@ -0,0 +1,71 @@ +class BinaryNode { + constructor(public value: T) {} + public left?: BinaryNode; + public right?: BinaryNode; +} + +/** A Binary-Tree based implementation of a Priority Queue */ +export class PriorityQueue { + private root?: BinaryNode; + + constructor(private readonly comparator: (a: T, b: T) => number) { + this.comparator = comparator; + } + + /** Traverses the tree in a preorder manner */ + public preorder(callback: (value: T) => unknown) { + _preorder(this.root); + + function _preorder(node: BinaryNode | undefined) { + if (!node) return; + callback(node.value); + _preorder(node.left); + _preorder(node.right); + } + } + + /** Inserts the value in the priority queue */ + public insert(value: T) { + this.root = this.insertnode(this.root, value); + } + + private insertnode(node: BinaryNode | undefined, value: T): BinaryNode { + if (!node) return new BinaryNode(value); + if (this.comparator(value, node.value) < 0) node.left = this.insertnode(node.left, value); + else node.right = this.insertnode(node.right, value); + return node; + } + + /** Removes the smallest value in the priority queue */ + public popmin(): T | undefined { + if (!this.root) return undefined; + const { minnode, parent } = this.findmin(this.root, undefined); + if (!parent) this.root = minnode.right; + else parent.left = minnode.right; + return minnode.value; + } + + private findmin( + node: BinaryNode, + parent: BinaryNode | undefined, + ): { minnode: BinaryNode; parent?: BinaryNode } { + if (!node.left) return { minnode: node, parent }; + return this.findmin(node.left, node); + } + + /** Finds the node that satisfies the predicate in a preorder manner */ + public find(predicate: (value: T) => boolean) { + return _find(this.root); + + function _find(node: BinaryNode | undefined): T | undefined { + if (!node) return undefined; + else if (predicate(node.value)) return node.value; + else return _find(node.left) ?? _find(node.right); + } + } + + /** Checks if the queue is empty */ + isempty() { + return !this.root; + } +} diff --git a/src/lib/server/grid-service.ts b/src/lib/server/grid-service.ts index f85ffb8..9a36a24 100644 --- a/src/lib/server/grid-service.ts +++ b/src/lib/server/grid-service.ts @@ -1,139 +1,24 @@ -import { z } from "zod"; +import { + CreateGridSchema, + DeleteGridSchema, + GridListSchema, + GridRecordSchema, + ReadGridTagsSchema, + ReadManyGridSchema, + ReadOneGridSchema, + UpdateGridSchema, + type CreateGridDto, + type DeleteGridDto, + type GridList, + type GridRecord, + type ReadGridTagsDto, + type ReadManyGridDto, + type ReadOneGridDto, + type UpdateGridDto, +} from "$lib/types/grid-service"; +import { shiftFromUTC } from "$lib/utils/shift-from-utc"; import { sql } from "./sql"; -/** Represents the state of the node in the Grid */ -export enum GridNode { - empty = 0, - block = 1, -} - -/** Schema for the state of the node in the Grid */ -export const GridNodeEnum = z.nativeEnum(GridNode); - -/** Schema for the inputs for creating a grid */ -export const CreateGridSchema = z - .object({ - name: z.string().max(30), - tags: z.string().max(30).array().default([]), - size: z.number().int().min(1).max(1000), - data: GridNodeEnum.array().max(1000), - }) - .superRefine((value, ctx) => { - if (value.size ** 2 != value.data.length) { - ctx.addIssue({ - code: "custom", - fatal: true, - message: "Grid data and grid size does not match.", - }); - } - }); - -/** Type for the inputs for creating a grid */ -export type CreateGridDto = z.input; - -/** Schema for the inputs for reading many grids */ -export const ReadManyGridSchema = z.object({ - page: z.coerce.number().min(1).default(1), - page_size: z.coerce.number().min(1).max(50).default(1), - name: z.string().optional(), - size: z.tuple([z.coerce.number(), z.coerce.number()]).optional(), - tags: z.string().array().optional(), -}); - -/** Type for the inputs for reading many grids */ -export type ReadManyGridDto = z.input; - -/** Schema for the inputs for reading one grid */ -export const ReadOneGridSchema = z.object({ - id: z.string().uuid(), -}); - -/** Type for the inputs for reading one grid */ -export type ReadOneGridDto = z.input; - -/** Schema for the inputs for reading grid tags */ -export const ReadGridTagsSchema = z.object({ - page: z.coerce.number().min(1).default(1), - page_size: z.coerce.number().min(1).max(50).default(1), -}); - -/** Type for the inputs for reading grid tags */ -export type ReadGridTagsDto = z.input; - -/** Schema for the inputs for updating one grid */ -export const UpdateGridSchema = z - .object({ - id: z.string().uuid(), - data: z - .object({ - name: z.string().max(30), - tags: z.string().max(30).array(), - size: z.number().int().min(1).max(1000), - data: GridNodeEnum.array().max(1000), - }) - .partial(), - }) - .superRefine((value, ctx) => { - const grid = value.data; - if (!grid.size != !grid.data) { - ctx.addIssue({ - code: "custom", - fatal: true, - message: "Both grid data and size must exist when updating either.", - }); - } - - if (grid.size && grid.data) { - if (grid.size ** 2 != grid.data.length) { - ctx.addIssue({ - code: "custom", - fatal: true, - message: "Grid data and grid size does not match.", - }); - } - } - }); - -/** Type for the inputs for updating one grid */ -export type UpdateGridDto = z.input; - -/** Schema for the inputs for deleting one grid */ -export const DeleteGridSchema = z.object({ - id: z.string().uuid(), -}); - -/** Type for the inputs for deleting one grid */ -export type DeleteGridDto = z.input; - -/** Schema for the returned record of many grids */ -export const GridListSchema = z - .object({ - id: z.string().uuid(), - name: z.string(), - tags: z.string().array(), - size: z.number(), - created_at: z.date(), - updated_at: z.date(), - }) - .array(); - -/** Type for the returned record of many grids */ -export type GridList = z.output; - -/** Schema for the returned record of one grid */ -export const GridRecordSchema = z.object({ - id: z.string().uuid(), - name: z.string(), - tags: z.string().array(), - size: z.number(), - data: GridNodeEnum.array(), - created_at: z.date(), - updated_at: z.date(), -}); - -/** Type for the returned record of one grid */ -export type GridRecord = z.output; - /** Service for performing CRUD on the stored grids in the database */ export class GridService { /** Inserts a grid record into the database */ @@ -154,18 +39,39 @@ export class GridService { const { page, page_size, name, size } = params; const tags = [...new Set(params.tags)]; - const where_name = name ? sql` AND "name" LIKE ${"%" + name + "%"}` : sql``; - const where_size = size ? sql` AND ${size[0]} <= "size" AND "size" <= ${size[1]}` : sql``; - const where_tags = tags ? sql` AND "tags" @> ${tags}` : sql``; + const where_name = name ? sql` OR "name" LIKE ${"%" + name + "%"}` : sql``; + const where_size = size ? sql` OR ${size[0]} <= "size" AND "size" <= ${size[1]}` : sql``; + const where_tags = tags ? sql` OR ARRAY_TO_STRING("tags", ',') LIKE ${"%" + tags.join(",") + "%"}` : sql``; + const where = name || size || tags ? sql`WHERE FALSE${where_name}${where_size}${where_tags}` : sql``; + + const [data, count] = await sql.begin(async (sql) => { + const data: GridList["data"] = await sql` + SELECT ${sql(GridListSchema.shape.data.element.keyof().options)} + FROM "grids" + ${where} + ORDER BY "updated_at" DESC + LIMIT ${page_size} + OFFSET ${(page - 1) * page_size} + `; - const result: GridList = await sql` - SELECT ${sql(GridListSchema.element.keyof().options)} - FROM "grids" - WHERE TRUE${where_name}${where_size}${where_tags} - LIMIT ${page_size} - OFFSET ${(page - 1) * page_size} - `; + const count: [{ count: number }] = await sql` + SELECT COUNT(id) + FROM "grids" + ${where} + `; + return [data, Number(count[0].count)]; + }); + + const result: GridList = { + data, + count, + page, + page_size, + page_last: Math.ceil(count / page_size), + }; + + shiftFromUTC(result); return result; } @@ -177,7 +83,7 @@ export class GridService { FROM "grids" WHERE "id" = ${id} `; - + shiftFromUTC(result); return result[0]; } @@ -194,21 +100,21 @@ export class GridService { SELECT ARRAY_AGG("tag") as "tags" FROM "tags_cte" `; - + shiftFromUTC(result); return result[0].tags; } /** Updates a grid record in the database */ async update(dto: UpdateGridDto) { - const params = UpdateGridSchema.parse(dto); - const columns = Object.keys(params) as (keyof typeof params)[]; + const { id, data } = UpdateGridSchema.parse(dto); + const columns = Object.keys(data) as (keyof typeof data)[]; const result: GridRecord[] = await sql` UPDATE grids - SET ${sql(params, ...columns)} - WHERE "id" = ${params.id} + SET ${sql({ ...data, updated_at: sql`CURRENT_TIMESTAMP` }, ...columns, "updated_at")} + WHERE "id" = ${id} RETURNING ${sql(GridRecordSchema.keyof().options)} `; - + shiftFromUTC(result); return result[0]; } @@ -220,7 +126,7 @@ export class GridService { WHERE "id" = ${id} RETURNING ${sql(GridRecordSchema.keyof().options)} `; - + shiftFromUTC(result); return result[0]; } } diff --git a/src/lib/server/migrations/migrate.server.ts b/src/lib/server/migrations/migrate.server.ts new file mode 100644 index 0000000..dfe086c --- /dev/null +++ b/src/lib/server/migrations/migrate.server.ts @@ -0,0 +1,5 @@ +import { up } from "./202412100611_create_tables"; + +void (async () => { + await up(); +})(); diff --git a/src/lib/shadcn/components/ui/badge/badge.svelte b/src/lib/shadcn/components/ui/badge/badge.svelte new file mode 100644 index 0000000..e22dd72 --- /dev/null +++ b/src/lib/shadcn/components/ui/badge/badge.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/badge/index.ts b/src/lib/shadcn/components/ui/badge/index.ts new file mode 100644 index 0000000..306bda4 --- /dev/null +++ b/src/lib/shadcn/components/ui/badge/index.ts @@ -0,0 +1,19 @@ +import { type VariantProps, tv } from "tailwind-variants"; + +export { default as Badge } from "./badge.svelte"; +export const badgeVariants = tv({ + base: "focus:ring-ring inline-flex select-none items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2", + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/80 border-transparent shadow", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/80 border-transparent shadow", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, +}); + +export type Variant = VariantProps["variant"]; diff --git a/src/lib/shadcn/components/ui/button/button.svelte b/src/lib/shadcn/components/ui/button/button.svelte new file mode 100644 index 0000000..884cef7 --- /dev/null +++ b/src/lib/shadcn/components/ui/button/button.svelte @@ -0,0 +1,24 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/button/index.ts b/src/lib/shadcn/components/ui/button/index.ts new file mode 100644 index 0000000..b04e39b --- /dev/null +++ b/src/lib/shadcn/components/ui/button/index.ts @@ -0,0 +1,48 @@ +import type { Button as ButtonPrimitive } from "bits-ui"; +import { type VariantProps, tv } from "tailwind-variants"; +import Root from "./button.svelte"; + +const buttonVariants = tv({ + base: "focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50", + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm", + outline: "border-input bg-background hover:bg-accent hover:text-accent-foreground border shadow-sm", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-sm", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, +}); + +type Variant = VariantProps["variant"]; +type Size = VariantProps["size"]; + +type Props = ButtonPrimitive.Props & { + variant?: Variant; + size?: Size; +}; + +type Events = ButtonPrimitive.Events; + +export { + Root, + type Props, + type Events, + // + Root as Button, + type Props as ButtonProps, + type Events as ButtonEvents, + buttonVariants, +}; diff --git a/src/lib/shadcn/components/ui/dialog/dialog-content.svelte b/src/lib/shadcn/components/ui/dialog/dialog-content.svelte new file mode 100644 index 0000000..9b6219c --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,34 @@ + + + + + + + + + Close + + + diff --git a/src/lib/shadcn/components/ui/dialog/dialog-description.svelte b/src/lib/shadcn/components/ui/dialog/dialog-description.svelte new file mode 100644 index 0000000..ea80173 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte b/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 0000000..9ddba02 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,13 @@ + + +
+ +
diff --git a/src/lib/shadcn/components/ui/dialog/dialog-header.svelte b/src/lib/shadcn/components/ui/dialog/dialog-header.svelte new file mode 100644 index 0000000..add1d2b --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,13 @@ + + +
+ +
diff --git a/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte b/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 0000000..dc1fe21 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/lib/shadcn/components/ui/dialog/dialog-portal.svelte b/src/lib/shadcn/components/ui/dialog/dialog-portal.svelte new file mode 100644 index 0000000..400e62b --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-portal.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/dialog/dialog-title.svelte b/src/lib/shadcn/components/ui/dialog/dialog-title.svelte new file mode 100644 index 0000000..b16c270 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/dialog/index.ts b/src/lib/shadcn/components/ui/dialog/index.ts new file mode 100644 index 0000000..b17ba5e --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/index.ts @@ -0,0 +1,37 @@ +import { Dialog as DialogPrimitive } from "bits-ui"; + +import Title from "./dialog-title.svelte"; +import Portal from "./dialog-portal.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; + +const Root = DialogPrimitive.Root; +const Trigger = DialogPrimitive.Trigger; +const Close = DialogPrimitive.Close; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Close, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription, + Close as DialogClose, +}; diff --git a/src/lib/shadcn/components/ui/input/index.ts b/src/lib/shadcn/components/ui/input/index.ts new file mode 100644 index 0000000..75e3bc2 --- /dev/null +++ b/src/lib/shadcn/components/ui/input/index.ts @@ -0,0 +1,29 @@ +import Root from "./input.svelte"; + +export type FormInputEvent = T & { + currentTarget: EventTarget & HTMLInputElement; +}; +export type InputEvents = { + blur: FormInputEvent; + change: FormInputEvent; + click: FormInputEvent; + focus: FormInputEvent; + focusin: FormInputEvent; + focusout: FormInputEvent; + keydown: FormInputEvent; + keypress: FormInputEvent; + keyup: FormInputEvent; + mouseover: FormInputEvent; + mouseenter: FormInputEvent; + mouseleave: FormInputEvent; + mousemove: FormInputEvent; + paste: FormInputEvent; + input: FormInputEvent; + wheel: FormInputEvent; +}; + +export { + Root, + // + Root as Input, +}; diff --git a/src/lib/shadcn/components/ui/input/input.svelte b/src/lib/shadcn/components/ui/input/input.svelte new file mode 100644 index 0000000..923c8d7 --- /dev/null +++ b/src/lib/shadcn/components/ui/input/input.svelte @@ -0,0 +1,41 @@ + + + diff --git a/src/lib/shadcn/components/ui/label/index.ts b/src/lib/shadcn/components/ui/label/index.ts new file mode 100644 index 0000000..8bfca0b --- /dev/null +++ b/src/lib/shadcn/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label, +}; diff --git a/src/lib/shadcn/components/ui/label/label.svelte b/src/lib/shadcn/components/ui/label/label.svelte new file mode 100644 index 0000000..858e89a --- /dev/null +++ b/src/lib/shadcn/components/ui/label/label.svelte @@ -0,0 +1,15 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/pagination/index.ts b/src/lib/shadcn/components/ui/pagination/index.ts new file mode 100644 index 0000000..5641d52 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/index.ts @@ -0,0 +1,24 @@ +import Root from "./pagination.svelte"; +import Content from "./pagination-content.svelte"; +import Item from "./pagination-item.svelte"; +import Link from "./pagination-link.svelte"; +import PrevButton from "./pagination-prev-button.svelte"; +import NextButton from "./pagination-next-button.svelte"; +import Ellipsis from "./pagination-ellipsis.svelte"; +export { + Root, + Content, + Item, + Link, + PrevButton, + NextButton, + Ellipsis, + // + Root as Pagination, + Content as PaginationContent, + Item as PaginationItem, + Link as PaginationLink, + PrevButton as PaginationPrevButton, + NextButton as PaginationNextButton, + Ellipsis as PaginationEllipsis, +}; diff --git a/src/lib/shadcn/components/ui/pagination/pagination-content.svelte b/src/lib/shadcn/components/ui/pagination/pagination-content.svelte new file mode 100644 index 0000000..a6fb439 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-content.svelte @@ -0,0 +1,13 @@ + + +
    + +
diff --git a/src/lib/shadcn/components/ui/pagination/pagination-ellipsis.svelte b/src/lib/shadcn/components/ui/pagination/pagination-ellipsis.svelte new file mode 100644 index 0000000..e1e8757 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-ellipsis.svelte @@ -0,0 +1,15 @@ + + + diff --git a/src/lib/shadcn/components/ui/pagination/pagination-item.svelte b/src/lib/shadcn/components/ui/pagination/pagination-item.svelte new file mode 100644 index 0000000..fe81460 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-item.svelte @@ -0,0 +1,13 @@ + + +
  • + +
  • diff --git a/src/lib/shadcn/components/ui/pagination/pagination-link.svelte b/src/lib/shadcn/components/ui/pagination/pagination-link.svelte new file mode 100644 index 0000000..adc3694 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-link.svelte @@ -0,0 +1,33 @@ + + + + {page.value} + diff --git a/src/lib/shadcn/components/ui/pagination/pagination-next-button.svelte b/src/lib/shadcn/components/ui/pagination/pagination-next-button.svelte new file mode 100644 index 0000000..79cb683 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-next-button.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/pagination/pagination-prev-button.svelte b/src/lib/shadcn/components/ui/pagination/pagination-prev-button.svelte new file mode 100644 index 0000000..42a3133 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination-prev-button.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/pagination/pagination.svelte b/src/lib/shadcn/components/ui/pagination/pagination.svelte new file mode 100644 index 0000000..2012021 --- /dev/null +++ b/src/lib/shadcn/components/ui/pagination/pagination.svelte @@ -0,0 +1,32 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/sonner/index.ts b/src/lib/shadcn/components/ui/sonner/index.ts new file mode 100644 index 0000000..1ad9f4a --- /dev/null +++ b/src/lib/shadcn/components/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from "./sonner.svelte"; diff --git a/src/lib/shadcn/components/ui/sonner/sonner.svelte b/src/lib/shadcn/components/ui/sonner/sonner.svelte new file mode 100644 index 0000000..902f06f --- /dev/null +++ b/src/lib/shadcn/components/ui/sonner/sonner.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/lib/shadcn/components/ui/table/index.ts b/src/lib/shadcn/components/ui/table/index.ts new file mode 100644 index 0000000..14695c8 --- /dev/null +++ b/src/lib/shadcn/components/ui/table/index.ts @@ -0,0 +1,28 @@ +import Root from "./table.svelte"; +import Body from "./table-body.svelte"; +import Caption from "./table-caption.svelte"; +import Cell from "./table-cell.svelte"; +import Footer from "./table-footer.svelte"; +import Head from "./table-head.svelte"; +import Header from "./table-header.svelte"; +import Row from "./table-row.svelte"; + +export { + Root, + Body, + Caption, + Cell, + Footer, + Head, + Header, + Row, + // + Root as Table, + Body as TableBody, + Caption as TableCaption, + Cell as TableCell, + Footer as TableFooter, + Head as TableHead, + Header as TableHeader, + Row as TableRow, +}; diff --git a/src/lib/shadcn/components/ui/table/table-body.svelte b/src/lib/shadcn/components/ui/table/table-body.svelte new file mode 100644 index 0000000..76b388f --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-body.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/table/table-caption.svelte b/src/lib/shadcn/components/ui/table/table-caption.svelte new file mode 100644 index 0000000..0aacb93 --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-caption.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/table/table-cell.svelte b/src/lib/shadcn/components/ui/table/table-cell.svelte new file mode 100644 index 0000000..4508a7f --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-cell.svelte @@ -0,0 +1,17 @@ + + +[role=checkbox]]:translate-y-[2px]", className)} + {...$$restProps} + on:click + on:keydown> + + diff --git a/src/lib/shadcn/components/ui/table/table-footer.svelte b/src/lib/shadcn/components/ui/table/table-footer.svelte new file mode 100644 index 0000000..494cf47 --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-footer.svelte @@ -0,0 +1,13 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/table/table-head.svelte b/src/lib/shadcn/components/ui/table/table-head.svelte new file mode 100644 index 0000000..bc3005d --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-head.svelte @@ -0,0 +1,18 @@ + + +[role=checkbox]]:translate-y-[2px]", + className, + )} + {...$$restProps}> + + diff --git a/src/lib/shadcn/components/ui/table/table-header.svelte b/src/lib/shadcn/components/ui/table/table-header.svelte new file mode 100644 index 0000000..e8930ef --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-header.svelte @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/lib/shadcn/components/ui/table/table-row.svelte b/src/lib/shadcn/components/ui/table/table-row.svelte new file mode 100644 index 0000000..728e2c0 --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table-row.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/table/table.svelte b/src/lib/shadcn/components/ui/table/table.svelte new file mode 100644 index 0000000..6d1ce0e --- /dev/null +++ b/src/lib/shadcn/components/ui/table/table.svelte @@ -0,0 +1,15 @@ + + +
    + + +
    +
    diff --git a/src/lib/shadcn/components/ui/toggle-group/index.ts b/src/lib/shadcn/components/ui/toggle-group/index.ts new file mode 100644 index 0000000..2a9c87a --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle-group/index.ts @@ -0,0 +1,23 @@ +import type { VariantProps } from "tailwind-variants"; +import { getContext, setContext } from "svelte"; +import Root from "./toggle-group.svelte"; +import Item from "./toggle-group-item.svelte"; +import type { toggleVariants } from "$lib/shadcn/components/ui/toggle/index.js"; + +export type ToggleVariants = VariantProps; + +export function setToggleGroupCtx(props: ToggleVariants) { + setContext("toggleGroup", props); +} + +export function getToggleGroupCtx() { + return getContext("toggleGroup"); +} + +export { + Root, + Item, + // + Root as ToggleGroup, + Item as ToggleGroupItem, +}; diff --git a/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte b/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte new file mode 100644 index 0000000..d979c91 --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,30 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte b/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte new file mode 100644 index 0000000..2c907a9 --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,30 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/toggle/index.ts b/src/lib/shadcn/components/ui/toggle/index.ts new file mode 100644 index 0000000..558ebfa --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle/index.ts @@ -0,0 +1,30 @@ +import { type VariantProps, tv } from "tailwind-variants"; +import Root from "./toggle.svelte"; + +export const toggleVariants = tv({ + base: "hover:bg-muted hover:text-muted-foreground focus-visible:ring-ring data-[state=on]:bg-accent data-[state=on]:text-accent-foreground inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50", + variants: { + variant: { + default: "bg-transparent", + outline: "border-input hover:bg-accent hover:text-accent-foreground border bg-transparent shadow-sm", + }, + size: { + default: "h-9 px-3", + sm: "h-8 px-2", + lg: "h-10 px-3", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, +}); + +export type Variant = VariantProps["variant"]; +export type Size = VariantProps["size"]; + +export { + Root, + // + Root as Toggle, +}; diff --git a/src/lib/shadcn/components/ui/toggle/toggle.svelte b/src/lib/shadcn/components/ui/toggle/toggle.svelte new file mode 100644 index 0000000..fb73d0b --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle/toggle.svelte @@ -0,0 +1,26 @@ + + + + + diff --git a/src/lib/shadcn/components/ui/tooltip/index.ts b/src/lib/shadcn/components/ui/tooltip/index.ts new file mode 100644 index 0000000..7d0444d --- /dev/null +++ b/src/lib/shadcn/components/ui/tooltip/index.ts @@ -0,0 +1,15 @@ +import { Tooltip as TooltipPrimitive } from "bits-ui"; +import Content from "./tooltip-content.svelte"; + +const Root = TooltipPrimitive.Root; +const Trigger = TooltipPrimitive.Trigger; + +export { + Root, + Trigger, + Content, + // + Root as Tooltip, + Content as TooltipContent, + Trigger as TooltipTrigger, +}; diff --git a/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte b/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte new file mode 100644 index 0000000..7489eef --- /dev/null +++ b/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,24 @@ + + + + + diff --git a/src/lib/shadcn/utils.ts b/src/lib/shadcn/utils.ts new file mode 100644 index 0000000..ccaec55 --- /dev/null +++ b/src/lib/shadcn/utils.ts @@ -0,0 +1,56 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; +import type { TransitionConfig } from "svelte/transition"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +type FlyAndScaleParams = { + y?: number; + x?: number; + start?: number; + duration?: number; +}; + +export const flyAndScale = ( + node: Element, + params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }, +): TransitionConfig => { + const style = getComputedStyle(node); + const transform = style.transform === "none" ? "" : style.transform; + + const scaleConversion = (valueA: number, scaleA: [number, number], scaleB: [number, number]) => { + const [minA, maxA] = scaleA; + const [minB, maxB] = scaleB; + + const percentage = (valueA - minA) / (maxA - minA); + const valueB = percentage * (maxB - minB) + minB; + + return valueB; + }; + + const styleToString = (style: Record): string => { + return Object.keys(style).reduce((str, key) => { + if (style[key] === undefined) return str; + return str + `${key}:${style[key]};`; + }, ""); + }; + + return { + duration: params.duration ?? 200, + delay: 0, + css: (t) => { + const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); + const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); + const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); + + return styleToString({ + transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, + opacity: t, + }); + }, + easing: cubicOut, + }; +}; diff --git a/src/lib/types/grid-service.ts b/src/lib/types/grid-service.ts new file mode 100644 index 0000000..991ff0e --- /dev/null +++ b/src/lib/types/grid-service.ts @@ -0,0 +1,140 @@ +import { z } from "zod"; + +/** Represents the state of the node in the Grid */ +export enum GridNode { + empty = 0, + block = 1, +} + +/** Schema for the state of the node in the Grid */ +export const GridNodeEnum = z.nativeEnum(GridNode); + +/** Schema for the inputs for creating a grid */ +export const CreateGridSchema = z + .object({ + name: z.string().max(30), + tags: z.string().max(30).array().max(10).default([]), + size: z.number().int().min(5).max(30), + data: GridNodeEnum.array().min(25).max(900), + }) + .superRefine((value, ctx) => { + if (value.size ** 2 != value.data.length) { + ctx.addIssue({ + code: "custom", + fatal: true, + message: "Grid data and grid size does not match.", + }); + } + }); + +/** Type for the inputs for creating a grid */ +export type CreateGridDto = z.input; + +/** Schema for the inputs for reading many grids */ +export const ReadManyGridSchema = z.object({ + page: z.coerce.number().min(1).default(1), + page_size: z.coerce.number().min(1).max(50).default(1), + name: z.string().optional(), + size: z.tuple([z.coerce.number(), z.coerce.number()]).optional(), + tags: z.string().array().optional(), +}); + +/** Type for the inputs for reading many grids */ +export type ReadManyGridDto = z.input; + +/** Schema for the inputs for reading one grid */ +export const ReadOneGridSchema = z.object({ + id: z.string().uuid(), +}); + +/** Type for the inputs for reading one grid */ +export type ReadOneGridDto = z.input; + +/** Schema for the inputs for reading grid tags */ +export const ReadGridTagsSchema = z.object({ + page: z.coerce.number().min(1).default(1), + page_size: z.coerce.number().min(1).max(50).default(1), +}); + +/** Type for the inputs for reading grid tags */ +export type ReadGridTagsDto = z.input; + +/** Schema for the inputs for updating one grid */ +export const UpdateGridSchema = z + .object({ + id: z.string().uuid(), + data: z + .object({ + name: z.string().max(30), + tags: z.string().max(30).array().max(10), + size: z.number().int().min(5).max(30), + data: GridNodeEnum.array().min(25).max(900), + }) + .partial(), + }) + .superRefine((value, ctx) => { + const grid = value.data; + if (!grid.size != !grid.data) { + ctx.addIssue({ + code: "custom", + fatal: true, + message: "Both grid data and size must exist when updating either.", + }); + } + + if (grid.size && grid.data) { + if (grid.size ** 2 != grid.data.length) { + ctx.addIssue({ + code: "custom", + fatal: true, + message: "Grid data and grid size does not match.", + }); + } + } + }); + +/** Type for the inputs for updating one grid */ +export type UpdateGridDto = z.input; + +/** Schema for the inputs for deleting one grid */ +export const DeleteGridSchema = z.object({ + id: z.string().uuid(), +}); + +/** Type for the inputs for deleting one grid */ +export type DeleteGridDto = z.input; + +/** Schema for the returned record of many grids */ +export const GridListSchema = z.object({ + page: z.number(), + page_size: z.number(), + page_last: z.number(), + count: z.number(), + data: z + .object({ + id: z.string().uuid(), + name: z.string(), + tags: z.string().array(), + size: z.number(), + created_at: z.coerce.date(), + updated_at: z.coerce.date(), + }) + .array(), +}); + +/** Type for the returned record of many grids */ +export type GridList = z.output; + +/** Schema for the returned record of one grid */ +export const GridRecordSchema = z.object({ + id: z.string().uuid(), + name: z.string(), + tags: z.string().array(), + size: z.number(), + data: GridNodeEnum.array(), + created_at: z.coerce.date(), + updated_at: z.coerce.date(), +}); + +/** Type for the returned record of one grid */ +export type GridRecord = z.output; diff --git a/src/lib/utils/debounce.ts b/src/lib/utils/debounce.ts new file mode 100644 index 0000000..da9fc88 --- /dev/null +++ b/src/lib/utils/debounce.ts @@ -0,0 +1,10 @@ +/** + * Helper function for debouncing + */ +export function debounce(cb: () => void, t: number) { + let timer: NodeJS.Timeout; + return () => { + clearTimeout(timer); + timer = setTimeout(() => cb(), t); + }; +} diff --git a/src/lib/utils/maybe.ts b/src/lib/utils/maybe.ts index 954f064..957e8b2 100644 --- a/src/lib/utils/maybe.ts +++ b/src/lib/utils/maybe.ts @@ -1,3 +1,6 @@ +/** + * Helper function for coalescing "falsy" values to undefined + */ export function maybe(value: unknown) { // null if (value === null) return undefined; diff --git a/src/lib/utils/shift-from-utc.ts b/src/lib/utils/shift-from-utc.ts new file mode 100644 index 0000000..8a93608 --- /dev/null +++ b/src/lib/utils/shift-from-utc.ts @@ -0,0 +1,23 @@ +import { DateTime } from "luxon"; + +/** + * Adjusts the `Date` values recursively in an object from UTC to Local timezone + */ +export function shiftFromUTC(object: T) { + const keys = Object.keys(object); + for (const key of keys) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access + const property: unknown = (object as any)[key]; + if (!property) continue; + if (property && typeof property == "object") shiftFromUTC(property); + if (!(property instanceof Date)) continue; + + const datetime = DateTime.fromJSDate(property); + if (!datetime.isValid) continue; + + const converted = datetime.setZone("UTC", { keepLocalTime: true }).toLocal().toJSDate(); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-member-access + (object as any)[key] = converted; + } +} diff --git a/src/lib/utils/try-json.ts b/src/lib/utils/try-json.ts index 5a9a441..449f15c 100644 --- a/src/lib/utils/try-json.ts +++ b/src/lib/utils/try-json.ts @@ -1,3 +1,6 @@ +/** + * Helper function for checking if value is JSON without throwing errors + */ export function tryJSON(value: string) { try { // eslint-disable-next-line @typescript-eslint/no-unsafe-return diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 51caaf5..2bc7078 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,7 +1,22 @@ - + + + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5982b0a..650b33f 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,103 @@ -

    Welcome to SvelteKit

    -

    Visit kit.svelte.dev to read the documentation

    + + +
    +
    +
    +

    + Pathfinding +

    +

    + visualize the + A* + algorithm on custom mazes +

    +
    +
    + +
    +
    + + +
    + + + + $gridsCreate.mutateAsync(data)}> + + + + Add Grid + +
    + + +
    + +
    +
    + © {new Date().getFullYear()} Theone Eclarin. All rights reserved. +
    +
    + + diff --git a/src/routes/GridCreate.svelte b/src/routes/GridCreate.svelte new file mode 100644 index 0000000..f96106c --- /dev/null +++ b/src/routes/GridCreate.svelte @@ -0,0 +1,123 @@ + + + + + {@render children()} + + + + Add Grid + Specify name & size. Click "Create" when you're done. + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + {#each tags as tag} + + + +
    removeTag(tag)}> + {tag} +
    + {/each} +
    +
    +
    + + + + +
    +
    diff --git a/src/routes/GridDelete.svelte b/src/routes/GridDelete.svelte new file mode 100644 index 0000000..56fe805 --- /dev/null +++ b/src/routes/GridDelete.svelte @@ -0,0 +1,40 @@ + + + + + {@render children()} + + + + Delete Grid + Are you sure you want to delete "{identifier}"? This is an irreversible action. + + + + + + diff --git a/src/routes/GridList.svelte b/src/routes/GridList.svelte new file mode 100644 index 0000000..3149402 --- /dev/null +++ b/src/routes/GridList.svelte @@ -0,0 +1,183 @@ + + +
    + {#if $gridsQuery.isLoading} + Loading ... + {/if} + + {#if $gridsQuery.error} + Error: {$gridsQuery.error.message} + {/if} + + {#if $gridsQuery.isSuccess} +
    + + + + Name + Size + Tags + + + + {#each $gridsQuery.data.data as grid (grid.id)} + + viewGridRecord(grid.id)}> + {grid.name} + + viewGridRecord(grid.id)}> + {grid.size}×{grid.size} + + viewGridRecord(grid.id)}> + {#each grid.tags as tag} + {tag} + {/each} + + + $gridsDelete.mutateAsync(grid.id)}> + + + + + {/each} + + +
    + {/if} +
    + +
    + + + + + + {#each pages as page (page.key)} + {#if page.type === "ellipsis"} + + + + {:else if page.value > 0} + + + {page.value} + + + {/if} + {/each} + + + + + +
    diff --git a/src/routes/api/grids/+server.ts b/src/routes/api/grids/+server.ts index f4f0ea5..1d39212 100644 --- a/src/routes/api/grids/+server.ts +++ b/src/routes/api/grids/+server.ts @@ -1,6 +1,7 @@ import { maybe } from "$lib/utils/maybe"; -import { CreateGridSchema, GridService, ReadManyGridSchema } from "$lib/server/grid-service"; +import { CreateGridSchema, ReadManyGridSchema } from "$lib/types/grid-service"; import { json, type RequestEvent } from "@sveltejs/kit"; +import { GridService } from "$lib/server/grid-service"; /** GET list of grids from the server */ export async function GET(event: RequestEvent) { @@ -23,6 +24,6 @@ export async function GET(event: RequestEvent) { export async function POST(event: RequestEvent) { const service = new GridService(); const dto = CreateGridSchema.parse(await event.request.json()); - const result = service.create(dto); + const result = await service.create(dto); return json(result); } diff --git a/src/routes/api/grids/[id]/+server.ts b/src/routes/api/grids/[id]/+server.ts index 1057799..266df8e 100644 --- a/src/routes/api/grids/[id]/+server.ts +++ b/src/routes/api/grids/[id]/+server.ts @@ -1,4 +1,5 @@ -import { DeleteGridSchema, GridService, ReadOneGridSchema, UpdateGridSchema } from "$lib/server/grid-service"; +import { GridService } from "$lib/server/grid-service"; +import { DeleteGridSchema, ReadOneGridSchema, UpdateGridSchema } from "$lib/types/grid-service"; import { json, type RequestEvent } from "@sveltejs/kit"; /** GET a grid and its data from the server */ @@ -17,7 +18,7 @@ export async function PATCH(event: RequestEvent) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data: await event.request.json(), }); - const result = await service.readOne(dto); + const result = await service.update(dto); return json(result); } diff --git a/src/routes/api/grids/tags/+server.ts b/src/routes/api/grids/tags/+server.ts index 2af75de..256a5fb 100644 --- a/src/routes/api/grids/tags/+server.ts +++ b/src/routes/api/grids/tags/+server.ts @@ -1,6 +1,7 @@ import { maybe } from "$lib/utils/maybe"; -import { GridService, ReadGridTagsSchema } from "$lib/server/grid-service"; +import { GridService } from "$lib/server/grid-service"; import { json, type RequestEvent } from "@sveltejs/kit"; +import { ReadGridTagsSchema } from "$lib/types/grid-service"; /** GET tags used by the grids from the server */ export async function GET(event: RequestEvent) { diff --git a/src/routes/grids/[id]/+page.svelte b/src/routes/grids/[id]/+page.svelte new file mode 100644 index 0000000..fa29273 --- /dev/null +++ b/src/routes/grids/[id]/+page.svelte @@ -0,0 +1,221 @@ + + +
    +
    + +
    +

    + {$query.data?.name} +

    +
    +
    + +
    +
    + {#if $query.data} +
    +
    Created at:
    +
    + {$query.data.created_at.toLocaleString(undefined, { day: "numeric", month: "short", year: "numeric" })} +
    +
    {$query.data.created_at.toLocaleTimeString()}
    +
    +
    +
    +
    Updated at:
    +
    + {$query.data.updated_at.toLocaleString(undefined, { day: "numeric", month: "short", year: "numeric" })} +
    +
    {$query.data.updated_at.toLocaleTimeString()}
    +
    +
    + {#each $query.data.tags as tag} +
    + {tag} +
    + {/each} + {/if} +
    + + + +
    + + + + + + + + Add Block + + + + + + + + Erase + + + + +
    + +
    + +
    + +
    +
    +
    +
    diff --git a/src/routes/grids/[id]/+page.ts b/src/routes/grids/[id]/+page.ts new file mode 100644 index 0000000..eeea054 --- /dev/null +++ b/src/routes/grids/[id]/+page.ts @@ -0,0 +1,7 @@ +import type { PageLoad } from "./$types"; + +export const load: PageLoad = ({ params }) => { + return { + id: params.id, + }; +}; diff --git a/src/routes/grids/[id]/GridCanvas.svelte b/src/routes/grids/[id]/GridCanvas.svelte new file mode 100644 index 0000000..8fb99dd --- /dev/null +++ b/src/routes/grids/[id]/GridCanvas.svelte @@ -0,0 +1,76 @@ + + +
    + +
    diff --git a/src/routes/grids/[id]/GridCanvasHelpers.ts b/src/routes/grids/[id]/GridCanvasHelpers.ts new file mode 100644 index 0000000..f13fa33 --- /dev/null +++ b/src/routes/grids/[id]/GridCanvasHelpers.ts @@ -0,0 +1,249 @@ +import type { AStar } from "$lib/pathfinding/a-star"; +import { GridNode, type GridRecord } from "$lib/types/grid-service"; + +export type PointerType = "pen" | "eraser"; + +/** + * Rescales the Canvas for High-Resolution Screens + */ +export function rescaleCanvas({ ctx }: { ctx: CanvasRenderingContext2D }) { + const canvas = ctx.canvas; + + // Get the DPR and size of the canvas + const dpr = window.devicePixelRatio; + const width = canvas.width; + const height = canvas.height; + + // Set the "actual" size of the canvas + canvas.width = width * dpr; + canvas.height = height * dpr; + + // Scale the context to ensure correct drawing operations + ctx.scale(dpr, dpr); + + // Set the "drawn" size of the canvas + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; +} + +/** + * Maps the current mouse position to the cell index + */ +export function mouseToCell({ + canvas_size, + grid_size, + mousexy, +}: { + canvas_size: number; + grid_size: number; + mousexy: [number, number]; +}) { + const mousexy_normal = [mousexy[0] / canvas_size, mousexy[1] / canvas_size]; + const cell_index = [Math.floor(mousexy_normal[0] * grid_size), Math.floor(mousexy_normal[1] * grid_size)]; + return cell_index; +} + +/** + * Draws the grid lines + */ +export function drawGridLines({ ctx, size }: { ctx: CanvasRenderingContext2D; size: number }) { + ctx.save(); + + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / size; + + ctx.strokeStyle = "rgb(208, 208, 211)"; + ctx.lineWidth = 1; + + ctx.beginPath(); + + // draw vertical lines left-to-right + for (let x = cell_size; x < canvas_size - 1; x += cell_size) { + ctx.moveTo(x, 0); + ctx.lineTo(x, canvas_size); + } + + // draw horizontal lines top-to-bottom + for (let y = cell_size; y < canvas_size - 1; y += cell_size) { + ctx.moveTo(0, y); + ctx.lineTo(canvas_size, y); + } + + ctx.stroke(); + + ctx.restore(); +} + +/** + * Draws the grid cells + */ +export function drawGridCells({ ctx, data, size }: { ctx: CanvasRenderingContext2D; data: GridNode[]; size: number }) { + ctx.save(); + + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / size; + const inset = cell_size * 0.25; + + for (let xi = 0; xi < size; xi++) { + for (let yi = 0; yi < size; yi++) { + const node = data[xi + yi * size]; + if (node == GridNode.block) { + ctx.fillStyle = "rgb(208, 208, 211)"; + ctx.fillRect(xi * cell_size + inset, yi * cell_size + inset, cell_size - inset * 2, cell_size - inset * 2); + } + } + } + + ctx.restore(); +} + +/** + * Draws the pointer + */ +export function drawPointer({ + ctx, + grid_size, + pointer, + mousexy, +}: { + ctx: CanvasRenderingContext2D; + grid_size: number; + pointer?: PointerType; + mousexy: [number, number]; +}) { + ctx.save(); + + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / grid_size; + const [xi, yi] = mouseToCell({ canvas_size, grid_size, mousexy }); + const x = xi * cell_size; + const y = yi * cell_size; + + ctx.lineWidth = cell_size * 0.15; + ctx.lineCap = "round"; + + // Draw + sign + if (pointer == "pen") { + ctx.strokeStyle = "rgb(138, 237, 195)"; + ctx.beginPath(); + ctx.moveTo(x + cell_size * 0.5, y + cell_size * 0.25); + ctx.lineTo(x + cell_size * 0.5, y + cell_size * 0.75); + ctx.moveTo(x + cell_size * 0.25, y + cell_size * 0.5); + ctx.lineTo(x + cell_size * 0.75, y + cell_size * 0.5); + ctx.stroke(); + } + + // Draw x sign + if (pointer == "eraser") { + ctx.strokeStyle = "rgb(251, 113, 133)"; + ctx.beginPath(); + ctx.moveTo(x + cell_size * 0.25, y + cell_size * 0.25); + ctx.lineTo(x + cell_size * 0.75, y + cell_size * 0.75); + ctx.moveTo(x + cell_size * 0.25, y + cell_size * 0.75); + ctx.lineTo(x + cell_size * 0.75, y + cell_size * 0.25); + ctx.stroke(); + } + + ctx.restore(); +} + +export function drawMarkers({ ctx, grid_size }: { ctx: CanvasRenderingContext2D; grid_size: number }) { + ctx.save(); + + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / grid_size; + ctx.fillStyle = "rgb(60, 60, 62)"; + ctx.font = `bold ${cell_size / 2}px 'Arial'`; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + + // Draw Start + ctx.fillText("S", cell_size * 0.5, cell_size * 0.5); + + // Draw Finish + ctx.fillText("F", canvas_size - cell_size * 0.5, canvas_size - cell_size * 0.5); + + ctx.restore(); +} + +export function drawAStar({ + ctx, + grid_size, + astar, +}: { + ctx: CanvasRenderingContext2D; + grid_size: number; + astar: AStar; +}) { + ctx.save(); + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / grid_size; + + // Open List + ctx.fillStyle = "rgba(254, 240, 138, 0.25)"; + astar.openlist.preorder(({ point }) => { + ctx.fillRect(point[0] * cell_size, point[1] * cell_size, cell_size, cell_size); + }); + + // Closed Set + ctx.fillStyle = "rgba(165, 243, 252, 0.25)"; + for (const [x, y] of astar.closedset.values()) { + ctx.fillRect(x * cell_size, y * cell_size, cell_size, cell_size); + } + + path: { + ctx.strokeStyle = "rgb(254, 240, 138)"; + if (astar.status == "no-solution") ctx.strokeStyle = "rgb(252, 165, 165)"; + if (astar.status == "finished") ctx.strokeStyle = "rgb(134, 239, 172)"; + + ctx.lineWidth = cell_size * 0.2; + ctx.lineCap = "round"; + const path = astar.currentpath(); + if (path.length == 0) break path; + + ctx.beginPath(); + ctx.moveTo(path[0][0] * cell_size + cell_size / 2, path[0][1] * cell_size + cell_size / 2); + for (let i = 1; i < path.length; i++) { + ctx.lineTo(path[i][0] * cell_size + cell_size / 2, path[i][1] * cell_size + cell_size / 2); + } + ctx.stroke(); + } + + ctx.restore(); +} + +/** + * Draws the grid + */ +export function drawGrid({ + ctx, + grid, + pointer, + mousexy, + astar, +}: { + ctx: CanvasRenderingContext2D; + grid: GridRecord; + pointer?: PointerType; + mousexy?: [number, number]; + astar?: AStar; +}) { + ctx.save(); + + drawGridCells({ ctx, data: grid.data, size: grid.size }); + drawGridLines({ ctx, size: grid.size }); + + drawMarkers({ ctx, grid_size: grid.size }); + + if (astar) drawAStar({ ctx, grid_size: grid.size, astar }); + + if (mousexy) + drawPointer({ + ctx, + grid_size: grid.size, + pointer, + mousexy, + }); + + ctx.restore(); +}