From 1adfe9b6ce8cc870d4019e6bcad109729bf4676a Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Sat, 14 Dec 2024 18:06:08 +0800 Subject: [PATCH 01/14] feat: implement grid list in home page --- package.json | 55 +- pnpm-lock.yaml | 2195 +++++++++-------- src/lib/server/grid-service.ts | 65 +- .../shadcn/components/ui/badge/badge.svelte | 13 + src/lib/shadcn/components/ui/badge/index.ts | 19 + .../shadcn/components/ui/button/button.svelte | 24 + src/lib/shadcn/components/ui/button/index.ts | 48 + src/lib/shadcn/components/ui/input/index.ts | 29 + .../shadcn/components/ui/input/input.svelte | 41 + .../shadcn/components/ui/pagination/index.ts | 24 + .../ui/pagination/pagination-content.svelte | 13 + .../ui/pagination/pagination-ellipsis.svelte | 15 + .../ui/pagination/pagination-item.svelte | 13 + .../ui/pagination/pagination-link.svelte | 33 + .../pagination/pagination-next-button.svelte | 21 + .../pagination/pagination-prev-button.svelte | 21 + .../ui/pagination/pagination.svelte | 32 + src/lib/shadcn/components/ui/table/index.ts | 28 + .../components/ui/table/table-body.svelte | 13 + .../components/ui/table/table-caption.svelte | 13 + .../components/ui/table/table-cell.svelte | 17 + .../components/ui/table/table-footer.svelte | 13 + .../components/ui/table/table-head.svelte | 18 + .../components/ui/table/table-header.svelte | 14 + .../components/ui/table/table-row.svelte | 19 + .../shadcn/components/ui/table/table.svelte | 15 + src/lib/shadcn/utils.ts | 56 + src/lib/utils/debounce.ts | 7 + src/routes/+layout.svelte | 14 +- src/routes/+page.svelte | 44 +- src/routes/GridList.svelte | 116 + 31 files changed, 1989 insertions(+), 1059 deletions(-) create mode 100644 src/lib/shadcn/components/ui/badge/badge.svelte create mode 100644 src/lib/shadcn/components/ui/badge/index.ts create mode 100644 src/lib/shadcn/components/ui/button/button.svelte create mode 100644 src/lib/shadcn/components/ui/button/index.ts create mode 100644 src/lib/shadcn/components/ui/input/index.ts create mode 100644 src/lib/shadcn/components/ui/input/input.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/index.ts create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-content.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-ellipsis.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-item.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-link.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-next-button.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination-prev-button.svelte create mode 100644 src/lib/shadcn/components/ui/pagination/pagination.svelte create mode 100644 src/lib/shadcn/components/ui/table/index.ts create mode 100644 src/lib/shadcn/components/ui/table/table-body.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-caption.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-cell.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-footer.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-head.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-header.svelte create mode 100644 src/lib/shadcn/components/ui/table/table-row.svelte create mode 100644 src/lib/shadcn/components/ui/table/table.svelte create mode 100644 src/lib/shadcn/utils.ts create mode 100644 src/lib/utils/debounce.ts create mode 100644 src/routes/GridList.svelte diff --git a/package.json b/package.json index 734a29c..5111dbf 100644 --- a/package.json +++ b/package.json @@ -16,37 +16,44 @@ "@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", + "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", + "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", "dotenv": "^16.4.7", + "lucide-svelte": "^0.468.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..580026e 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/lodash': + specifier: ^4.17.13 + version: 4.17.13 dotenv: specifier: ^16.4.7 version: 16.4.7 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + lucide-svelte: + specifier: ^0.468.0 + version: 0.468.0(svelte@5.12.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,92 @@ 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 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) + 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 +147,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 +234,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 +520,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/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.5.0': - resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==} + '@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/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@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/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@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 +577,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 +603,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 +641,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 + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tailwindcss/typography@0.5.13': - resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} + '@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 +874,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/lodash@4.17.13': + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + '@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 +948,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 +962,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 +1009,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 +1034,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 +1049,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 +1085,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 +1097,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 +1133,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 +1161,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 +1174,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 +1194,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 +1204,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 +1218,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 +1237,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 +1275,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 +1289,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 +1326,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 +1337,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 +1361,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 +1392,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 +1402,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 +1410,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 +1436,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 +1473,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 +1493,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 +1528,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 +1557,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 +1572,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 +1583,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 +1594,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: @@ -1438,22 +1642,27 @@ packages: lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@10.2.2: 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 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 +1678,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,10 +1700,6 @@ 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 - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -1503,9 +1708,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 +1719,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 +1750,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 +1793,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 +1808,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 +1865,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 +1891,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 +1910,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 +1931,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 +1958,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 +1971,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 +1990,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 +2018,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 +2035,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 +2055,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 +2087,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 +2108,47 @@ 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'} - 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@5.12.0: + resolution: {integrity: sha512-nOd7uj0D/4A3IrHnltaFYndVPGViYSs0s+Zi3N4uQg3owJt9RoiUdwxYx8qjorj5CtaGsx8dNYsFVbH6czrGNg==} + engines: {node: '>=18'} - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} - engines: {node: '>=16'} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + tailwind-merge@2.5.5: + resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} - tailwind-variants@0.2.1: - resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==} + 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 +2156,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 +2200,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 +2226,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 +2274,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 +2339,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 +2372,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 +2392,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 +2401,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 +2452,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 +2520,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 +2693,44 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.5.0': {} + '@eslint/js@9.16.0': {} + + '@eslint/object-schema@2.1.5': {} - '@eslint/object-schema@2.1.4': {} + '@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 + + '@floating-ui/utils@0.2.8': {} + + '@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 +2752,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 +2762,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 +2795,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 +2979,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/lodash@4.17.13': {} + '@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 +3082,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 +3141,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 +3181,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 +3221,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 +3233,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 +3269,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 +3296,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 +3316,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 +3333,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 +3347,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 +3373,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 +3441,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 +3481,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 +3509,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 +3552,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 +3580,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 +3591,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 +3623,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 +3647,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.0.11: {} + husky@9.1.7: {} ignore@5.3.1: {} @@ -3434,13 +3660,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 +3684,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 +3710,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 +3720,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 +3728,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 +3737,7 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -3560,22 +3771,25 @@ snapshots: lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} + 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 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 +3801,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 +3820,10 @@ snapshots: minipass@7.1.2: {} - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - mri@1.2.0: {} mrmime@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} mz@2.7.0: @@ -3623,12 +3834,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 +3852,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 +3898,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 +3909,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 +3921,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 +3972,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 +4014,7 @@ snapshots: dependencies: picomatch: 2.3.1 - regenerator-runtime@0.14.1: {} + readdirp@4.0.2: {} require-directory@2.1.1: {} @@ -3832,10 +4032,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 +4054,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 +4087,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 +4099,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 +4131,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 +4153,58 @@ 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-hmr@0.16.0(svelte@4.2.18): - 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-radix@2.0.1(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 +4215,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 +4233,6 @@ snapshots: text-extensions@2.4.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -4083,13 +4254,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 +4268,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 +4336,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 +4375,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 +4400,6 @@ snapshots: yocto-queue@1.0.0: {} + zimmerframe@1.1.2: {} + zod@3.23.8: {} diff --git a/src/lib/server/grid-service.ts b/src/lib/server/grid-service.ts index f85ffb8..b21f0a7 100644 --- a/src/lib/server/grid-service.ts +++ b/src/lib/server/grid-service.ts @@ -106,16 +106,22 @@ export const DeleteGridSchema = z.object({ 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(); +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.date(), + updated_at: z.date(), + }) + .array(), +}); /** Type for the returned record of many grids */ export type GridList = z.output; @@ -154,17 +160,36 @@ 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 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 [data, count] = await sql.begin(async (sql) => { + const data: GridList["data"] = await sql` + SELECT ${sql(GridListSchema.shape.data.element.keyof().options)} + FROM "grids" + ${where} + LIMIT ${page_size} + OFFSET ${(page - 1) * page_size} + `; + + const count: [{ count: number }] = await sql` + SELECT COUNT(id) + FROM "grids" + ${where} + `; + + return [data, count[0].count]; + }); + + const result: GridList = { + data, + count, + page, + page_size, + page_last: Math.ceil(count / page_size), + }; return result; } 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/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/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/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/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/utils/debounce.ts b/src/lib/utils/debounce.ts new file mode 100644 index 0000000..d0927b0 --- /dev/null +++ b/src/lib/utils/debounce.ts @@ -0,0 +1,7 @@ +export function debounce(cb: () => void, t: number) { + let timer: NodeJS.Timeout; + return () => { + clearTimeout(timer); + timer = setTimeout(() => cb(), t); + }; +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 51caaf5..689d274 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,7 +1,19 @@ - + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5982b0a..66f23ea 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,42 @@ -

    Welcome to SvelteKit

    -

    Visit kit.svelte.dev to read the documentation

    + + +
    +
    +
    +

    + Pathfinding +

    +

    visualize search algorithms on custom mazes

    +
    +
    + +
    +
    + + +
    +
    + + +
    + +
    +
    + © {new Date().getFullYear()} Theone Eclarin. All rights reserved. +
    +
    + + diff --git a/src/routes/GridList.svelte b/src/routes/GridList.svelte new file mode 100644 index 0000000..2e80d5c --- /dev/null +++ b/src/routes/GridList.svelte @@ -0,0 +1,116 @@ + + +
    + {#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} + {grid.size}×{grid.size} + + {#each grid.tags as tag} + {tag} + {/each} + + + {/each} + + +
    + {/if} +
    + +
    + + + + + + {#each pages as page (page.key)} + {#if page.type === "ellipsis"} + + + + {:else if page.value > 0} + + + {page.value} + + + {/if} + {/each} + + + + + +
    From 98d1a56c36fea176073cf724c704ee62f8b20e53 Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Sat, 14 Dec 2024 18:06:52 +0800 Subject: [PATCH 02/14] fix: eslint issues --- src/hooks.server.ts | 1 + src/routes/GridList.svelte | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) 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/routes/GridList.svelte b/src/routes/GridList.svelte index 2e80d5c..9b77af0 100644 --- a/src/routes/GridList.svelte +++ b/src/routes/GridList.svelte @@ -32,12 +32,15 @@ } const refreshQuery = debounce(() => { - client.invalidateQueries({ queryKey: ["grids"] }); + void client.invalidateQueries({ queryKey: ["grids"] }); }, 200); $effect(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions search; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions current_page; + // eslint-disable-next-line @typescript-eslint/no-unused-expressions current_page_size; refreshQuery(); }); From 417189c517a9a24fd20fe6a56d35b0cb845303f5 Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Mon, 16 Dec 2024 19:10:03 +0800 Subject: [PATCH 03/14] feat: integrate create, update, delete in frontend --- package.json | 2 + pnpm-lock.yaml | 40 +++-- src/lib/server/grid-service.ts | 163 +++--------------- .../ui/dialog/dialog-content.svelte | 36 ++++ .../ui/dialog/dialog-description.svelte | 16 ++ .../components/ui/dialog/dialog-footer.svelte | 16 ++ .../components/ui/dialog/dialog-header.svelte | 13 ++ .../ui/dialog/dialog-overlay.svelte | 21 +++ .../components/ui/dialog/dialog-portal.svelte | 9 + .../components/ui/dialog/dialog-title.svelte | 16 ++ src/lib/shadcn/components/ui/dialog/index.ts | 37 ++++ src/lib/shadcn/components/ui/label/index.ts | 7 + .../shadcn/components/ui/label/label.svelte | 19 ++ src/lib/shadcn/components/ui/sonner/index.ts | 1 + .../shadcn/components/ui/sonner/sonner.svelte | 20 +++ .../components/ui/toggle-group/index.ts | 23 +++ .../ui/toggle-group/toggle-group-item.svelte | 31 ++++ .../ui/toggle-group/toggle-group.svelte | 31 ++++ src/lib/shadcn/components/ui/toggle/index.ts | 31 ++++ .../shadcn/components/ui/toggle/toggle.svelte | 27 +++ src/lib/shadcn/components/ui/tooltip/index.ts | 15 ++ .../ui/tooltip/tooltip-content.svelte | 28 +++ src/lib/types/grid-service.ts | 140 +++++++++++++++ src/routes/+layout.svelte | 3 + src/routes/+page.svelte | 48 +++++- src/routes/GridCreate.svelte | 104 +++++++++++ src/routes/GridDelete.svelte | 31 ++++ src/routes/GridList.svelte | 54 +++++- src/routes/api/grids/+server.ts | 3 +- src/routes/api/grids/[id]/+server.ts | 5 +- src/routes/grids/[id]/+page.svelte | 138 +++++++++++++++ src/routes/grids/[id]/+page.ts | 8 + src/routes/grids/[id]/GridCanvas.svelte | 69 ++++++++ src/routes/grids/[id]/GridCanvasHelpers.ts | 160 +++++++++++++++++ 34 files changed, 1193 insertions(+), 172 deletions(-) create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-content.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-description.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-footer.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-header.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-portal.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/dialog-title.svelte create mode 100644 src/lib/shadcn/components/ui/dialog/index.ts create mode 100644 src/lib/shadcn/components/ui/label/index.ts create mode 100644 src/lib/shadcn/components/ui/label/label.svelte create mode 100644 src/lib/shadcn/components/ui/sonner/index.ts create mode 100644 src/lib/shadcn/components/ui/sonner/sonner.svelte create mode 100644 src/lib/shadcn/components/ui/toggle-group/index.ts create mode 100644 src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte create mode 100644 src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte create mode 100644 src/lib/shadcn/components/ui/toggle/index.ts create mode 100644 src/lib/shadcn/components/ui/toggle/toggle.svelte create mode 100644 src/lib/shadcn/components/ui/tooltip/index.ts create mode 100644 src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte create mode 100644 src/lib/types/grid-service.ts create mode 100644 src/routes/GridCreate.svelte create mode 100644 src/routes/GridDelete.svelte create mode 100644 src/routes/grids/[id]/+page.svelte create mode 100644 src/routes/grids/[id]/+page.ts create mode 100644 src/routes/grids/[id]/GridCanvas.svelte create mode 100644 src/routes/grids/[id]/GridCanvasHelpers.ts diff --git a/package.json b/package.json index 5111dbf..d954896 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "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", @@ -38,6 +39,7 @@ "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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 580026e..af69501 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,15 +11,9 @@ importers: '@tanstack/svelte-query': specifier: ^5.62.7 version: 5.62.7(svelte@5.12.0) - '@types/lodash': - specifier: ^4.17.13 - version: 4.17.13 dotenv: specifier: ^16.4.7 version: 16.4.7 - lodash: - specifier: ^4.17.21 - version: 4.17.21 lucide-svelte: specifier: ^0.468.0 version: 0.468.0(svelte@5.12.0) @@ -87,6 +81,9 @@ importers: husky: 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.49 version: 8.4.49 @@ -108,6 +105,9 @@ importers: 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 @@ -886,9 +886,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/lodash@4.17.13': - resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} - '@types/node@20.14.8': resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} @@ -1642,9 +1639,6 @@ packages: lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@10.2.2: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} @@ -1700,6 +1694,11 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + 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==} engines: {node: '>=4'} @@ -2131,6 +2130,11 @@ packages: peerDependencies: svelte: ^5.0.0 + svelte-sonner@0.3.28: + resolution: {integrity: sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.1 + svelte@5.12.0: resolution: {integrity: sha512-nOd7uj0D/4A3IrHnltaFYndVPGViYSs0s+Zi3N4uQg3owJt9RoiUdwxYx8qjorj5CtaGsx8dNYsFVbH6czrGNg==} engines: {node: '>=18'} @@ -2990,8 +2994,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/lodash@4.17.13': {} - '@types/node@20.14.8': dependencies: undici-types: 5.26.5 @@ -3771,8 +3773,6 @@ snapshots: lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} - lru-cache@10.2.2: {} lucide-svelte@0.468.0(svelte@5.12.0): @@ -3820,6 +3820,10 @@ snapshots: minipass@7.1.2: {} + mode-watcher@0.5.0(svelte@5.12.0): + dependencies: + svelte: 5.12.0 + mri@1.2.0: {} mrmime@2.0.0: {} @@ -4179,6 +4183,10 @@ snapshots: dependencies: svelte: 5.12.0 + svelte-sonner@0.3.28(svelte@5.12.0): + dependencies: + svelte: 5.12.0 + svelte@5.12.0: dependencies: '@ampproject/remapping': 2.3.0 diff --git a/src/lib/server/grid-service.ts b/src/lib/server/grid-service.ts index b21f0a7..6acbbfe 100644 --- a/src/lib/server/grid-service.ts +++ b/src/lib/server/grid-service.ts @@ -1,145 +1,23 @@ -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 { 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({ - 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.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 */ @@ -170,6 +48,7 @@ export class GridService { SELECT ${sql(GridListSchema.shape.data.element.keyof().options)} FROM "grids" ${where} + ORDER BY "updated_at" DESC LIMIT ${page_size} OFFSET ${(page - 1) * page_size} `; @@ -225,12 +104,12 @@ export class GridService { /** Updates a grid record in the database */ async update(dto: UpdateGridDto) { - const params = UpdateGridSchema.parse(dto); + const { id, data: params } = UpdateGridSchema.parse(dto); const columns = Object.keys(params) as (keyof typeof params)[]; const result: GridRecord[] = await sql` UPDATE grids SET ${sql(params, ...columns)} - WHERE "id" = ${params.id} + WHERE "id" = ${id} RETURNING ${sql(GridRecordSchema.keyof().options)} `; 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..edb2013 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,36 @@ + + + + + + + + + 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..d81345a --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,16 @@ + + + + + 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..35c41ab --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,16 @@ + + +
    + +
    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..cab902f --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,21 @@ + + + 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..62a8035 --- /dev/null +++ b/src/lib/shadcn/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,16 @@ + + + + + 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/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..b84a8e1 --- /dev/null +++ b/src/lib/shadcn/components/ui/label/label.svelte @@ -0,0 +1,19 @@ + + + + + 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..7d5b2f1 --- /dev/null +++ b/src/lib/shadcn/components/ui/sonner/sonner.svelte @@ -0,0 +1,20 @@ + + + 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..dad2a13 --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,31 @@ + + + + + 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..3c5d07e --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,31 @@ + + + + + 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..07ca583 --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle/index.ts @@ -0,0 +1,31 @@ +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..81abfcf --- /dev/null +++ b/src/lib/shadcn/components/ui/toggle/toggle.svelte @@ -0,0 +1,27 @@ + + + + + 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..2d91445 --- /dev/null +++ b/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/src/lib/types/grid-service.ts b/src/lib/types/grid-service.ts new file mode 100644 index 0000000..d6b9419 --- /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(1).max(30), + data: GridNodeEnum.array().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(1).max(30), + data: GridNodeEnum.array().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.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; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 689d274..3d22000 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,6 +2,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/svelte-query"; import "../app.css"; import { browser } from "$app/environment"; + import { Toaster } from '$lib/shadcn/components/ui/sonner'; const queryClient = new QueryClient({ defaultOptions: { @@ -16,4 +17,6 @@ + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 66f23ea..2cb40bf 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,9 +1,42 @@
    @@ -17,11 +50,22 @@ -
    +
    + + + + $gridsCreate.mutateAsync(data)}> + + + + Add Grid +
    diff --git a/src/routes/GridCreate.svelte b/src/routes/GridCreate.svelte new file mode 100644 index 0000000..b8bc876 --- /dev/null +++ b/src/routes/GridCreate.svelte @@ -0,0 +1,104 @@ + + + + + {@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..1854aa7 --- /dev/null +++ b/src/routes/GridDelete.svelte @@ -0,0 +1,31 @@ + + + + + {@render children()} + + + + Delete Grid + Are you sure you want to delete "{identifier}"? This is an irreversible action. + + + + + + \ No newline at end of file diff --git a/src/routes/GridList.svelte b/src/routes/GridList.svelte index 9b77af0..a40e98c 100644 --- a/src/routes/GridList.svelte +++ b/src/routes/GridList.svelte @@ -1,10 +1,14 @@ + +
    +
    + +
    +

    + {$query.data?.name} +

    +
    +
    + +
    +
    + {#if $query.data} + {#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..1e7ccfb --- /dev/null +++ b/src/routes/grids/[id]/+page.ts @@ -0,0 +1,8 @@ +import type { PageLoad } from "./$types"; + +export const load: PageLoad = ({ params }) => { + return { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access + 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..8c2b418 --- /dev/null +++ b/src/routes/grids/[id]/GridCanvas.svelte @@ -0,0 +1,69 @@ + + +
    + +
    diff --git a/src/routes/grids/[id]/GridCanvasHelpers.ts b/src/routes/grids/[id]/GridCanvasHelpers.ts new file mode 100644 index 0000000..2d51615 --- /dev/null +++ b/src/routes/grids/[id]/GridCanvasHelpers.ts @@ -0,0 +1,160 @@ +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 }) { + 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; 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; y += cell_size) { + ctx.moveTo(0, y); + ctx.lineTo(canvas_size, y); + } + + ctx.stroke(); +} + +/** + * Draws the grid cells + */ +export function drawGridCells({ ctx, data, size }: { ctx: CanvasRenderingContext2D; data: GridNode[]; size: number }) { + const canvas_size = ctx.canvas.clientWidth; + const cell_size = canvas_size / size; + + 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, yi * cell_size, cell_size, cell_size); + } + } + } +} + +/** + * Draws the pointer + */ +export function drawPointer({ + ctx, + grid_size, + pointer, + mousexy, +}: { + ctx: CanvasRenderingContext2D; + grid_size: number; + pointer?: PointerType; + mousexy: [number, number]; +}) { + 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(); + } +} + +/** + * Draws the grid + */ +export function drawGrid({ + ctx, + grid, + pointer, + mousexy, +}: { + ctx: CanvasRenderingContext2D; + grid: GridRecord; + pointer?: PointerType; + mousexy?: [number, number]; +}) { + drawGridCells({ ctx, data: grid.data, size: grid.size }); + drawGridLines({ ctx, size: grid.size }); + + if (mousexy) + drawPointer({ + ctx, + grid_size: grid.size, + pointer, + mousexy, + }); +} From e49a216043fe5bdbc68e7eaeaa49085496b8f0fa Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Mon, 16 Dec 2024 19:11:00 +0800 Subject: [PATCH 04/14] fix: prettier & eslint issues --- .../ui/dialog/dialog-content.svelte | 10 ++-- .../ui/dialog/dialog-description.svelte | 5 +- .../components/ui/dialog/dialog-footer.svelte | 5 +- .../ui/dialog/dialog-overlay.svelte | 5 +- .../components/ui/dialog/dialog-title.svelte | 5 +- .../shadcn/components/ui/label/label.svelte | 8 +--- .../shadcn/components/ui/sonner/sonner.svelte | 6 +-- .../ui/toggle-group/toggle-group-item.svelte | 5 +- .../ui/toggle-group/toggle-group.svelte | 3 +- src/lib/shadcn/components/ui/toggle/index.ts | 3 +- .../shadcn/components/ui/toggle/toggle.svelte | 3 +- .../ui/tooltip/tooltip-content.svelte | 8 +--- src/routes/+layout.svelte | 4 +- src/routes/+page.svelte | 32 ++++++------- src/routes/GridCreate.svelte | 47 +++++++++++++------ src/routes/GridDelete.svelte | 39 +++++++++------ src/routes/GridList.svelte | 22 ++++----- src/routes/api/grids/tags/+server.ts | 3 +- src/routes/grids/[id]/+page.svelte | 30 ++++++------ src/routes/grids/[id]/+page.ts | 1 - src/routes/grids/[id]/GridCanvas.svelte | 2 +- 21 files changed, 125 insertions(+), 121 deletions(-) diff --git a/src/lib/shadcn/components/ui/dialog/dialog-content.svelte b/src/lib/shadcn/components/ui/dialog/dialog-content.svelte index edb2013..9b6219c 100644 --- a/src/lib/shadcn/components/ui/dialog/dialog-content.svelte +++ b/src/lib/shadcn/components/ui/dialog/dialog-content.svelte @@ -20,15 +20,13 @@ {transition} {transitionConfig} class={cn( - "bg-background fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg sm:rounded-lg md:w-full", - className + "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg md:w-full", + className, )} - {...$$restProps} - > + {...$$restProps}> + class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"> Close diff --git a/src/lib/shadcn/components/ui/dialog/dialog-description.svelte b/src/lib/shadcn/components/ui/dialog/dialog-description.svelte index d81345a..ea80173 100644 --- a/src/lib/shadcn/components/ui/dialog/dialog-description.svelte +++ b/src/lib/shadcn/components/ui/dialog/dialog-description.svelte @@ -8,9 +8,6 @@ export { className as class }; - + diff --git a/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte b/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte index 35c41ab..9ddba02 100644 --- a/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte +++ b/src/lib/shadcn/components/ui/dialog/dialog-footer.svelte @@ -8,9 +8,6 @@ export { className as class }; -
    +
    diff --git a/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte b/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte index cab902f..dc1fe21 100644 --- a/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte +++ b/src/lib/shadcn/components/ui/dialog/dialog-overlay.svelte @@ -16,6 +16,5 @@ + class={cn("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm ", className)} + {...$$restProps} /> diff --git a/src/lib/shadcn/components/ui/dialog/dialog-title.svelte b/src/lib/shadcn/components/ui/dialog/dialog-title.svelte index 62a8035..b16c270 100644 --- a/src/lib/shadcn/components/ui/dialog/dialog-title.svelte +++ b/src/lib/shadcn/components/ui/dialog/dialog-title.svelte @@ -8,9 +8,6 @@ export { className as class }; - + diff --git a/src/lib/shadcn/components/ui/label/label.svelte b/src/lib/shadcn/components/ui/label/label.svelte index b84a8e1..858e89a 100644 --- a/src/lib/shadcn/components/ui/label/label.svelte +++ b/src/lib/shadcn/components/ui/label/label.svelte @@ -9,11 +9,7 @@ + class={cn("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", className)} + {...$$restProps}> diff --git a/src/lib/shadcn/components/ui/sonner/sonner.svelte b/src/lib/shadcn/components/ui/sonner/sonner.svelte index 7d5b2f1..902f06f 100644 --- a/src/lib/shadcn/components/ui/sonner/sonner.svelte +++ b/src/lib/shadcn/components/ui/sonner/sonner.svelte @@ -10,11 +10,11 @@ class="toaster group" toastOptions={{ classes: { - toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg", + toast: + "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg", description: "group-[.toast]:text-muted-foreground", actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground", cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground", }, }} - {...$$restProps} -/> + {...$$restProps} /> 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 index dad2a13..d979c91 100644 --- a/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group-item.svelte @@ -22,10 +22,9 @@ variant: ctx.variant || variant, size: ctx.size || size, }), - className + className, )} {value} - {...$$restProps} -> + {...$$restProps}> diff --git a/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte b/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte index 3c5d07e..2c907a9 100644 --- a/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte +++ b/src/lib/shadcn/components/ui/toggle-group/toggle-group.svelte @@ -25,7 +25,6 @@ class={cn("flex items-center justify-center gap-1", className)} bind:value {...$$restProps} - let:builder -> + let:builder> diff --git a/src/lib/shadcn/components/ui/toggle/index.ts b/src/lib/shadcn/components/ui/toggle/index.ts index 07ca583..558ebfa 100644 --- a/src/lib/shadcn/components/ui/toggle/index.ts +++ b/src/lib/shadcn/components/ui/toggle/index.ts @@ -6,8 +6,7 @@ export const toggleVariants = tv({ variants: { variant: { default: "bg-transparent", - outline: - "border-input hover:bg-accent hover:text-accent-foreground border bg-transparent shadow-sm", + outline: "border-input hover:bg-accent hover:text-accent-foreground border bg-transparent shadow-sm", }, size: { default: "h-9 px-3", diff --git a/src/lib/shadcn/components/ui/toggle/toggle.svelte b/src/lib/shadcn/components/ui/toggle/toggle.svelte index 81abfcf..fb73d0b 100644 --- a/src/lib/shadcn/components/ui/toggle/toggle.svelte +++ b/src/lib/shadcn/components/ui/toggle/toggle.svelte @@ -21,7 +21,6 @@ class={cn(toggleVariants({ variant, size, className }))} {...$$restProps} on:click - on:keydown -> + on:keydown> diff --git a/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte b/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte index 2d91445..7489eef 100644 --- a/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte +++ b/src/lib/shadcn/components/ui/tooltip/tooltip-content.svelte @@ -18,11 +18,7 @@ {transition} {transitionConfig} {sideOffset} - class={cn( - "bg-primary text-primary-foreground z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs", - className - )} - {...$$restProps} -> + class={cn("z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground", className)} + {...$$restProps}> diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 3d22000..2bc7078 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,7 +2,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/svelte-query"; import "../app.css"; import { browser } from "$app/environment"; - import { Toaster } from '$lib/shadcn/components/ui/sonner'; + import { Toaster } from "$lib/shadcn/components/ui/sonner"; const queryClient = new QueryClient({ defaultOptions: { @@ -17,6 +17,6 @@ - + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 2cb40bf..69c7c58 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -4,10 +4,10 @@ import GridList from "./GridList.svelte"; import Button from "$lib/shadcn/components/ui/button/button.svelte"; import * as Tooltip from "$lib/shadcn/components/ui/tooltip"; - import GridCreate from './GridCreate.svelte'; - import { createMutation, useQueryClient } from '@tanstack/svelte-query'; - import type { CreateGridDto, GridRecord } from '$lib/types/grid-service'; - import { toast } from 'svelte-sonner'; + import GridCreate from "./GridCreate.svelte"; + import { createMutation, useQueryClient } from "@tanstack/svelte-query"; + import type { CreateGridDto, GridRecord } from "$lib/types/grid-service"; + import { toast } from "svelte-sonner"; let search = $state(""); @@ -16,26 +16,26 @@ { mutationFn: async (data: CreateGridDto) => { const url = `http://localhost:5173/api/grids`; - const response = await fetch(url, { - method: "POST", - body: JSON.stringify(data) + const response = await fetch(url, { + method: "POST", + body: JSON.stringify(data), }); const json = (await response.json()) as GridRecord; return json; }, onMutate() { - void client.invalidateQueries({ queryKey: ["grids"] }) + void client.invalidateQueries({ queryKey: ["grids"] }); }, onError(error) { toast.error(error.name, { - description: error.message - }) + description: error.message, + }); }, onSuccess() { - toast.success("Grid has been added.") - } - }, - client + toast.success("Grid has been added."); + }, + }, + client, ); @@ -50,7 +50,7 @@
    -
    +
    @@ -59,7 +59,7 @@ $gridsCreate.mutateAsync(data)}> - diff --git a/src/routes/GridCreate.svelte b/src/routes/GridCreate.svelte index b8bc876..12c9ea0 100644 --- a/src/routes/GridCreate.svelte +++ b/src/routes/GridCreate.svelte @@ -1,10 +1,10 @@ @@ -62,17 +62,36 @@
    - +
    - +
    - +
    @@ -81,7 +100,7 @@ -
    removeTag(tag)}> +
    removeTag(tag)}> {tag}
    {/each} diff --git a/src/routes/GridDelete.svelte b/src/routes/GridDelete.svelte index 1854aa7..56fe805 100644 --- a/src/routes/GridDelete.svelte +++ b/src/routes/GridDelete.svelte @@ -1,31 +1,40 @@ - + {@render children()} Delete Grid - Are you sure you want to delete "{identifier}"? This is an irreversible action. + Are you sure you want to delete "{identifier}"? This is an irreversible action. - + - \ No newline at end of file + diff --git a/src/routes/GridList.svelte b/src/routes/GridList.svelte index a40e98c..d0c27f4 100644 --- a/src/routes/GridList.svelte +++ b/src/routes/GridList.svelte @@ -5,10 +5,10 @@ import * as Table from "$lib/shadcn/components/ui/table"; import { debounce } from "$lib/utils/debounce"; import { createMutation, createQuery, useQueryClient } from "@tanstack/svelte-query"; - import { Trash } from 'lucide-svelte'; - import Button from '$lib/shadcn/components/ui/button/button.svelte'; - import GridDelete from './GridDelete.svelte'; - import { toast } from 'svelte-sonner'; + import { Trash } from "lucide-svelte"; + import Button from "$lib/shadcn/components/ui/button/button.svelte"; + import GridDelete from "./GridDelete.svelte"; + import { toast } from "svelte-sonner"; let { search = $bindable() }: { search: string } = $props(); let current_page = $state(1); @@ -25,7 +25,7 @@ const response = await fetch(url); const json = (await response.json()) as GridList; return json; - } + }, }, client, ); @@ -42,13 +42,13 @@ void client.invalidateQueries({ queryKey: ["grids"] }); }, onError(error) { - toast.error(error.name, { description: error.message }) + toast.error(error.name, { description: error.message }); }, onSuccess() { - toast.success("Grid has been deleted.") - } - }, - client + toast.success("Grid has been deleted."); + }, + }, + client, ); // svelte-ignore non_reactive_update @@ -111,7 +111,7 @@ $gridsDelete.mutateAsync(grid.id)}> 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 index efab532..4393311 100644 --- a/src/routes/grids/[id]/+page.svelte +++ b/src/routes/grids/[id]/+page.svelte @@ -11,8 +11,8 @@ import * as Tooltip from "$lib/shadcn/components/ui/tooltip"; import Button from "$lib/shadcn/components/ui/button/button.svelte"; import { goto } from "$app/navigation"; - import { onMount } from 'svelte'; - import { toast } from 'svelte-sonner'; + import { onMount } from "svelte"; + import { toast } from "svelte-sonner"; let { data }: { data: PageData } = $props(); let pointer: PointerType | undefined = $state("pen"); @@ -38,36 +38,36 @@ if (!$query.data) return; const url = `http://localhost:5173/api/grids/${data.id}`; - const response = await fetch(url, { + const response = await fetch(url, { method: "PATCH", body: JSON.stringify({ size: $query.data.size, - data: $query.data.data - }) + data: $query.data.data, + }), }); const json = (await response.json()) as GridRecord; return json; }, onError(error) { toast.error(error.name, { - description: error.message - }) + description: error.message, + }); }, onSuccess() { - toast.success("Grid has been updated.") - } - }, - client + toast.success("Grid has been updated."); + }, + }, + client, ); onMount(() => { void $query.refetch(); - }) + }); -
    +
    - @@ -79,7 +79,7 @@
    -
    +
    {#if $query.data} {#each $query.data.tags as tag}
    diff --git a/src/routes/grids/[id]/+page.ts b/src/routes/grids/[id]/+page.ts index 1e7ccfb..eeea054 100644 --- a/src/routes/grids/[id]/+page.ts +++ b/src/routes/grids/[id]/+page.ts @@ -2,7 +2,6 @@ import type { PageLoad } from "./$types"; export const load: PageLoad = ({ params }) => { return { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access id: params.id, }; }; diff --git a/src/routes/grids/[id]/GridCanvas.svelte b/src/routes/grids/[id]/GridCanvas.svelte index 8c2b418..371b758 100644 --- a/src/routes/grids/[id]/GridCanvas.svelte +++ b/src/routes/grids/[id]/GridCanvas.svelte @@ -31,7 +31,7 @@ // Edit Grid Data on click and hold canvas.addEventListener("click", () => editPointedCell()); canvas.addEventListener("mousemove", () => { - if (mousedown) editPointedCell() + if (mousedown) editPointedCell(); }); requestAnimationFrame(function callback() { From e55a28cf9f0c428ac0e4742e936384f124f825bf Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Tue, 17 Dec 2024 08:14:59 +0800 Subject: [PATCH 05/14] fix: set minimum grid size to 5x5 --- src/lib/types/grid-service.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/types/grid-service.ts b/src/lib/types/grid-service.ts index d6b9419..70327b4 100644 --- a/src/lib/types/grid-service.ts +++ b/src/lib/types/grid-service.ts @@ -14,8 +14,8 @@ export const CreateGridSchema = z .object({ name: z.string().max(30), tags: z.string().max(30).array().max(10).default([]), - size: z.number().int().min(1).max(30), - data: GridNodeEnum.array().max(900), + 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) { @@ -67,8 +67,8 @@ export const UpdateGridSchema = z .object({ name: z.string().max(30), tags: z.string().max(30).array().max(10), - size: z.number().int().min(1).max(30), - data: GridNodeEnum.array().max(900), + size: z.number().int().min(5).max(30), + data: GridNodeEnum.array().min(25).max(900), }) .partial(), }) From 41978709a1d9bcdac617bec300a662d1e4522a84 Mon Sep 17 00:00:00 2001 From: Theone Eclarin Date: Tue, 17 Dec 2024 09:24:45 +0800 Subject: [PATCH 06/14] fix: date and timezone misalignment --- package.json | 2 ++ pnpm-lock.yaml | 17 +++++++++++++++++ src/lib/server/grid-service.ts | 18 ++++++++++-------- src/lib/types/grid-service.ts | 8 ++++---- src/lib/utils/shift-from-utc.ts | 23 +++++++++++++++++++++++ src/routes/+page.svelte | 4 +--- src/routes/GridList.svelte | 8 +++----- src/routes/grids/[id]/+page.svelte | 26 +++++++++++++++++++++----- 8 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 src/lib/utils/shift-from-utc.ts diff --git a/package.json b/package.json index d954896..45bc1ab 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,10 @@ "type": "module", "dependencies": { "@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", "svelte-radix": "^2.0.1", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af69501..93fce89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,12 +11,18 @@ importers: '@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 @@ -886,6 +892,9 @@ packages: '@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==} @@ -1648,6 +1657,10 @@ packages: 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==} @@ -2994,6 +3007,8 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/luxon@3.4.2': {} + '@types/node@20.14.8': dependencies: undici-types: 5.26.5 @@ -3779,6 +3794,8 @@ snapshots: dependencies: svelte: 5.12.0 + luxon@3.5.0: {} + magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 diff --git a/src/lib/server/grid-service.ts b/src/lib/server/grid-service.ts index 6acbbfe..9a36a24 100644 --- a/src/lib/server/grid-service.ts +++ b/src/lib/server/grid-service.ts @@ -16,6 +16,7 @@ import { type ReadOneGridDto, type UpdateGridDto, } from "$lib/types/grid-service"; +import { shiftFromUTC } from "$lib/utils/shift-from-utc"; import { sql } from "./sql"; /** Service for performing CRUD on the stored grids in the database */ @@ -59,7 +60,7 @@ export class GridService { ${where} `; - return [data, count[0].count]; + return [data, Number(count[0].count)]; }); const result: GridList = { @@ -70,6 +71,7 @@ export class GridService { page_last: Math.ceil(count / page_size), }; + shiftFromUTC(result); return result; } @@ -81,7 +83,7 @@ export class GridService { FROM "grids" WHERE "id" = ${id} `; - + shiftFromUTC(result); return result[0]; } @@ -98,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 { id, data: 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)} + SET ${sql({ ...data, updated_at: sql`CURRENT_TIMESTAMP` }, ...columns, "updated_at")} WHERE "id" = ${id} RETURNING ${sql(GridRecordSchema.keyof().options)} `; - + shiftFromUTC(result); return result[0]; } @@ -124,7 +126,7 @@ export class GridService { WHERE "id" = ${id} RETURNING ${sql(GridRecordSchema.keyof().options)} `; - + shiftFromUTC(result); return result[0]; } } diff --git a/src/lib/types/grid-service.ts b/src/lib/types/grid-service.ts index 70327b4..991ff0e 100644 --- a/src/lib/types/grid-service.ts +++ b/src/lib/types/grid-service.ts @@ -116,8 +116,8 @@ export const GridListSchema = z.object({ name: z.string(), tags: z.string().array(), size: z.number(), - created_at: z.date(), - updated_at: z.date(), + created_at: z.coerce.date(), + updated_at: z.coerce.date(), }) .array(), }); @@ -132,8 +132,8 @@ export const GridRecordSchema = z.object({ tags: z.string().array(), size: z.number(), data: GridNodeEnum.array(), - created_at: z.date(), - updated_at: z.date(), + created_at: z.coerce.date(), + updated_at: z.coerce.date(), }); /** Type for the returned record of one grid */ 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/routes/+page.svelte b/src/routes/+page.svelte index 69c7c58..8961335 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -23,9 +23,6 @@ const json = (await response.json()) as GridRecord; return json; }, - onMutate() { - void client.invalidateQueries({ queryKey: ["grids"] }); - }, onError(error) { toast.error(error.name, { description: error.message, @@ -33,6 +30,7 @@ }, onSuccess() { toast.success("Grid has been added."); + void client.invalidateQueries({ queryKey: ["grids"] }); }, }, client, diff --git a/src/routes/GridList.svelte b/src/routes/GridList.svelte index d0c27f4..ae22714 100644 --- a/src/routes/GridList.svelte +++ b/src/routes/GridList.svelte @@ -1,5 +1,5 @@
    @@ -135,7 +153,7 @@ {/if}
    - +
    @@ -170,7 +188,7 @@
    -