diff --git a/eslint.config.js b/eslint.config.js index 444fcd0..872df75 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -29,6 +29,7 @@ export default ts.config( argsIgnorePattern: '^_' } ], + 'no-prototype-builtins': 'off', 'no-useless-escape': 'warn' } }, diff --git a/jsrepo-build-config.json b/jsrepo-build-config.json index ea7a252..f923140 100644 --- a/jsrepo-build-config.json +++ b/jsrepo-build-config.json @@ -9,6 +9,7 @@ "doNotListCategories": [], "listBlocks": [ "button", + "chat", "code", "field-set", "ipv4address-input", @@ -21,7 +22,8 @@ "tree-view", "active.svelte", "shortcut.svelte", - "context-provider" + "context-provider", + "use-auto-scroll.svelte" ], "listCategories": [], "excludeDeps": ["svelte"], diff --git a/jsrepo-manifest.json b/jsrepo-manifest.json index 60d29b0..5956c31 100644 --- a/jsrepo-manifest.json +++ b/jsrepo-manifest.json @@ -2,6 +2,21 @@ { "name": "ui", "blocks": [ + { + "name": "avatar", + "directory": "src/lib/components/ui/avatar", + "category": "ui", + "tests": false, + "subdirectory": true, + "list": false, + "files": ["avatar-fallback.svelte", "avatar-image.svelte", "avatar.svelte", "index.ts"], + "localDependencies": ["utils/utils"], + "dependencies": [], + "devDependencies": ["bits-ui@1.0.0-next.77"], + "_imports_": { + "$lib/utils/utils.js": "{{utils/utils}}.js" + } + }, { "name": "button", "directory": "src/lib/components/ui/button", @@ -14,13 +29,44 @@ "dependencies": [], "devDependencies": [ "lucide-svelte@^0.469.0", - "bits-ui@1.0.0-next.74", + "bits-ui@1.0.0-next.77", "tailwind-variants@^0.3.0" ], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } }, + { + "name": "chat", + "directory": "src/lib/components/ui/chat", + "category": "ui", + "tests": false, + "subdirectory": true, + "list": true, + "files": [ + "chat-bubble-avatar.svelte", + "chat-bubble-message.svelte", + "chat-bubble.svelte", + "chat-list.svelte", + "index.ts", + "loading-dots.svelte" + ], + "localDependencies": [ + "ui/avatar", + "utils/utils", + "ui/button", + "hooks/use-auto-scroll.svelte" + ], + "dependencies": [], + "devDependencies": ["bits-ui@1.0.0-next.77", "lucide-svelte@^0.469.0"], + "_imports_": { + "$lib/components/ui/avatar": "{{ui/avatar}}", + "$lib/utils/utils.js": "{{utils/utils}}.js", + "$lib/utils/utils": "{{utils/utils}}", + "$lib/components/ui/button": "{{ui/button}}", + "$lib/hooks/use-auto-scroll.svelte.js": "{{hooks/use-auto-scroll.svelte}}.js" + } + }, { "name": "code", "directory": "src/lib/components/ui/code", @@ -31,7 +77,7 @@ "files": ["code.svelte", "copy.svelte", "index.ts", "langs.ts", "shiki-provider.svelte"], "localDependencies": ["utils/utils", "ui/button", "utils/context-provider"], "dependencies": [], - "devDependencies": ["tailwind-variants@^0.3.0", "lucide-svelte@^0.469.0", "shiki@^1.24.4"], + "devDependencies": ["tailwind-variants@^0.3.0", "lucide-svelte@^0.469.0", "shiki@^1.26.1"], "_imports_": { "$lib/utils/utils": "{{utils/utils}}", "$lib/components/ui/button": "{{ui/button}}", @@ -48,7 +94,7 @@ "files": ["index.ts"], "localDependencies": [], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74"], + "devDependencies": ["bits-ui@1.0.0-next.77"], "_imports_": {} }, { @@ -73,7 +119,7 @@ ], "localDependencies": ["ui/dialog", "utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74", "lucide-svelte@^0.469.0"], + "devDependencies": ["bits-ui@1.0.0-next.77", "lucide-svelte@^0.469.0"], "_imports_": { "$lib/components/ui/dialog/index.js": "{{ui/dialog}}/index.js", "$lib/utils/utils.js": "{{utils/utils}}.js" @@ -97,7 +143,7 @@ ], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74", "lucide-svelte@^0.469.0"], + "devDependencies": ["bits-ui@1.0.0-next.77", "lucide-svelte@^0.469.0"], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } @@ -122,7 +168,7 @@ ], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["vaul-svelte@1.0.0-next.3", "bits-ui@1.0.0-next.74"], + "devDependencies": ["vaul-svelte@1.0.0-next.3", "bits-ui@1.0.0-next.77"], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } @@ -149,7 +195,7 @@ ], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74", "lucide-svelte@^0.469.0"], + "devDependencies": ["bits-ui@1.0.0-next.77", "lucide-svelte@^0.469.0"], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } @@ -170,7 +216,7 @@ ], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74", "tailwind-variants@^0.3.0"], + "devDependencies": ["bits-ui@1.0.0-next.77", "tailwind-variants@^0.3.0"], "_imports_": { "$lib/utils/utils": "{{utils/utils}}", "$lib/utils/utils.js": "{{utils/utils}}.js" @@ -275,7 +321,7 @@ "files": ["index.ts", "popover-content.svelte"], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74"], + "devDependencies": ["bits-ui@1.0.0-next.77"], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } @@ -290,7 +336,7 @@ "files": ["index.ts", "scroll-area-scrollbar.svelte", "scroll-area.svelte"], "localDependencies": ["utils/utils"], "dependencies": [], - "devDependencies": ["bits-ui@1.0.0-next.74"], + "devDependencies": ["bits-ui@1.0.0-next.77"], "_imports_": { "$lib/utils/utils.js": "{{utils/utils}}.js" } @@ -380,6 +426,24 @@ } ] }, + { + "name": "hooks", + "blocks": [ + { + "name": "use-auto-scroll.svelte", + "directory": "src/lib/hooks", + "category": "hooks", + "tests": false, + "subdirectory": false, + "list": true, + "files": ["use-auto-scroll.svelte.ts"], + "localDependencies": [], + "_imports_": {}, + "dependencies": [], + "devDependencies": [] + } + ] + }, { "name": "utils", "blocks": [ diff --git a/package.json b/package.json index d1e9b7e..95a883c 100644 --- a/package.json +++ b/package.json @@ -15,26 +15,25 @@ }, "devDependencies": { "@eslint/compat": "^1.2.3", - "@fontsource/geist-mono": "^5.1.0", - "@fontsource/inter": "^5.1.0", + "@fontsource/geist-mono": "^5.1.1", "@sveltejs/adapter-vercel": "^5.5.2", - "@sveltejs/kit": "^2.15.1", + "@sveltejs/kit": "^2.15.2", "@sveltejs/vite-plugin-svelte": "^5.0.3", "autoprefixer": "^10.4.20", - "bits-ui": "1.0.0-next.74", + "bits-ui": "1.0.0-next.77", "clsx": "^2.1.1", "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.45.1", "globals": "^15.14.0", - "jsrepo": "^1.23.1", + "jsrepo": "^1.24.0", "lucide-svelte": "^0.469.0", "mode-watcher": "^0.5.0", "prettier": "^3.3.2", "prettier-plugin-svelte": "^3.2.6", "prettier-plugin-tailwindcss": "^0.6.5", - "shiki": "^1.24.4", - "svelte": "^5.16.0", + "shiki": "^1.26.1", + "svelte": "^5.16.5", "svelte-check": "^4.0.0", "svelte-sonner": "^0.3.28", "svelte-tel-input": "^3.5.2", @@ -43,8 +42,11 @@ "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "typescript": "^5.5.0", - "typescript-eslint": "^8.18.2", + "typescript-eslint": "^8.19.1", "vaul-svelte": "1.0.0-next.3", - "vite": "^6.0.6" + "vite": "^6.0.7" + }, + "dependencies": { + "@fontsource-variable/inter": "^5.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41cb1cc..7a85a67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,31 +7,32 @@ settings: importers: .: + dependencies: + '@fontsource-variable/inter': + specifier: ^5.1.1 + version: 5.1.1 devDependencies: '@eslint/compat': specifier: ^1.2.3 version: 1.2.4(eslint@9.17.0(jiti@1.21.6)) '@fontsource/geist-mono': - specifier: ^5.1.0 - version: 5.1.0 - '@fontsource/inter': - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.1.1 + version: 5.1.1 '@sveltejs/adapter-vercel': specifier: ^5.5.2 - version: 5.5.2(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(rollup@4.28.0) + version: 5.5.2(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(rollup@4.28.0) '@sveltejs/kit': - specifier: ^2.15.1 - version: 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + specifier: ^2.15.2 + version: 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + version: 5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) bits-ui: - specifier: 1.0.0-next.74 - version: 1.0.0-next.74(svelte@5.16.0) + specifier: 1.0.0-next.77 + version: 1.0.0-next.77(svelte@5.16.5) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -43,43 +44,43 @@ importers: version: 9.1.0(eslint@9.17.0(jiti@1.21.6)) eslint-plugin-svelte: specifier: ^2.45.1 - version: 2.46.1(eslint@9.17.0(jiti@1.21.6))(svelte@5.16.0) + version: 2.46.1(eslint@9.17.0(jiti@1.21.6))(svelte@5.16.5) globals: specifier: ^15.14.0 version: 15.14.0 jsrepo: - specifier: ^1.23.1 - version: 1.23.1(typescript@5.7.2) + specifier: ^1.24.0 + version: 1.24.0(typescript@5.7.2) lucide-svelte: specifier: ^0.469.0 - version: 0.469.0(svelte@5.16.0) + version: 0.469.0(svelte@5.16.5) mode-watcher: specifier: ^0.5.0 - version: 0.5.0(svelte@5.16.0) + version: 0.5.0(svelte@5.16.5) prettier: specifier: ^3.3.2 version: 3.4.2 prettier-plugin-svelte: specifier: ^3.2.6 - version: 3.3.2(prettier@3.4.2)(svelte@5.16.0) + version: 3.3.2(prettier@3.4.2)(svelte@5.16.5) prettier-plugin-tailwindcss: specifier: ^0.6.5 - version: 0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.0))(prettier@3.4.2) + version: 0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.5))(prettier@3.4.2) shiki: - specifier: ^1.24.4 - version: 1.24.4 + specifier: ^1.26.1 + version: 1.26.1 svelte: - specifier: ^5.16.0 - version: 5.16.0 + specifier: ^5.16.5 + version: 5.16.5 svelte-check: specifier: ^4.0.0 - version: 4.1.1(picomatch@4.0.2)(svelte@5.16.0)(typescript@5.7.2) + version: 4.1.1(picomatch@4.0.2)(svelte@5.16.5)(typescript@5.7.2) svelte-sonner: specifier: ^0.3.28 - version: 0.3.28(svelte@5.16.0) + version: 0.3.28(svelte@5.16.5) svelte-tel-input: specifier: ^3.5.2 - version: 3.5.2(svelte@5.16.0) + version: 3.5.2(svelte@5.16.5) tailwind-merge: specifier: ^2.6.0 version: 2.6.0 @@ -96,14 +97,14 @@ importers: specifier: ^5.5.0 version: 5.7.2 typescript-eslint: - specifier: ^8.18.2 - version: 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + specifier: ^8.19.1 + version: 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) vaul-svelte: specifier: 1.0.0-next.3 - version: 1.0.0-next.3(svelte@5.16.0) + version: 1.0.0-next.3(svelte@5.16.5) vite: - specifier: ^6.0.6 - version: 6.0.6(jiti@1.21.6)(yaml@2.6.1) + specifier: ^6.0.7 + version: 6.0.7(jiti@1.21.6)(yaml@2.6.1) packages: @@ -501,11 +502,11 @@ packages: '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - '@fontsource/geist-mono@5.1.0': - resolution: {integrity: sha512-MDFgmKUdDbV357vD2bOZAro597Nd2md01GAdr3GSZteCJQdPT/UhHUBCAxl9KUiH03aMPFM9Rx7x8/EtrJmpKg==} + '@fontsource-variable/inter@5.1.1': + resolution: {integrity: sha512-OpXFTmiH6tHkYijMvQTycFKBLK4X+SRV6tet1m4YOUH7SzIIlMqDja+ocDtiCA72UthBH/vF+3ZtlMr2rN/wIw==} - '@fontsource/inter@5.1.0': - resolution: {integrity: sha512-zKZR3kf1G0noIes1frLfOHP5EXVVm0M7sV/l9f/AaYf+M/DId35FO4LkigWjqWYjTJZGgplhdv4cB+ssvCqr5A==} + '@fontsource/geist-mono@5.1.1': + resolution: {integrity: sha512-Rr/VXX3qyRsLgEFwFUqhDS7PORzQUBDLoQc8bONbBz+hZ+SD8U0nEzHqRFBzT3zFcsf/0bMyCQPZUktKwPt3GQ==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -789,20 +790,26 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@1.24.4': - resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} + '@shikijs/core@1.26.1': + resolution: {integrity: sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==} + + '@shikijs/engine-javascript@1.26.1': + resolution: {integrity: sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==} - '@shikijs/engine-javascript@1.24.4': - resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} + '@shikijs/engine-oniguruma@1.26.1': + resolution: {integrity: sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==} - '@shikijs/engine-oniguruma@1.24.4': - resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} + '@shikijs/langs@1.26.1': + resolution: {integrity: sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==} - '@shikijs/types@1.24.4': - resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} + '@shikijs/themes@1.26.1': + resolution: {integrity: sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==} - '@shikijs/vscode-textmate@9.3.1': - resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} + '@shikijs/types@1.26.1': + resolution: {integrity: sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} @@ -813,8 +820,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.15.1': - resolution: {integrity: sha512-8t7D3hQHbUDMiaQ2RVnjJJ/+Ur4Fn/tkeySJCsHtX346Q9cp3LAnav8xXdfuqYNJwpUGX0x3BqF1uvbmXQw93A==} + '@sveltejs/kit@2.15.2': + resolution: {integrity: sha512-p208T1kdM6zd8k4YXIUM60pLWQ8dZqehXSiqn4NulXHyHibX53uIAL2xtNL8GjxX2IVPqPRT978MwVYhCKExdQ==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -840,8 +847,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@ts-morph/common@0.25.0': - resolution: {integrity: sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==} + '@ts-morph/common@0.26.0': + resolution: {integrity: sha512-/RmKAtctStXqM5nECMQ46duT74Hoig/DBzhWXGHcodlDNrgRbsbwwHqSKFNbca6z9Xt/CUWMeXOsC9QEN1+rqw==} '@types/aws-lambda@8.10.146': resolution: {integrity: sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==} @@ -864,51 +871,51 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.18.2': - resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} + '@typescript-eslint/eslint-plugin@8.19.1': + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} 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: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.18.2': - resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} + '@typescript-eslint/parser@8.19.1': + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} 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/scope-manager@8.18.2': - resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} + '@typescript-eslint/scope-manager@8.19.1': + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.18.2': - resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} + '@typescript-eslint/type-utils@8.19.1': + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} 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/types@8.18.2': - resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} + '@typescript-eslint/types@8.19.1': + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.18.2': - resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} + '@typescript-eslint/typescript-estree@8.19.1': + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.18.2': - resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} + '@typescript-eslint/utils@8.19.1': + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} 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.18.2': - resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} + '@typescript-eslint/visitor-keys@8.19.1': + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -931,6 +938,20 @@ packages: '@vue/compiler-ssr@3.5.13': resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} @@ -1039,11 +1060,11 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bits-ui@1.0.0-next.74: - resolution: {integrity: sha512-cazru5+NBKBCeK9KCV/OFy5I/B1zxOJGl5WpInzPTEPla5G9qZK9nrnXr6BbExKdhgusTiMm3h4Yvq4E5WHGJA==} + bits-ui@1.0.0-next.77: + resolution: {integrity: sha512-IV0AyVEvsRkXv4s/fl4iea5E9W2b9EBf98s9mRMKMc1xHxM9MmtM2r6MZMqftHQ/c+gHTIt3A9EKuTlh7uay8w==} engines: {node: '>=18', pnpm: '>=8.7.0'} peerDependencies: - svelte: ^5.0.0 + svelte: ^5.11.0 bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} @@ -1120,8 +1141,8 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + commander@13.0.0: + resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} engines: {node: '>=18'} commander@4.1.1: @@ -1152,6 +1173,9 @@ packages: engines: {node: '>=4'} hasBin: true + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -1586,8 +1610,8 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - jsrepo@1.23.1: - resolution: {integrity: sha512-jemPWAFfv/CSAo0ZnM1NEa7kK3y8Jrl+jthIlcYF1X9VL76nJB1RpNNwCwt0kdUSZvLOz9mjmsQ14JHNZLZG+Q==} + jsrepo@1.24.0: + resolution: {integrity: sha512-g1wHKH/Cm79cfPqEuuUJ9ayMiZ2GTui/P/v5i64sE+6OYi2a6GeleTzsexPk4oH3M6+LwC1Yn+5ldRZwWwfmgQ==} hasBin: true keyv@4.5.4: @@ -1765,15 +1789,15 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - octokit@4.0.2: - resolution: {integrity: sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg==} + octokit@4.0.3: + resolution: {integrity: sha512-kfqH80Yuuux4fLbZ4SvObjCvVu89U0eCh5+fulh6tr/hJkDYS1inXDGnNJDOp312GANMEhWWMLYmjQR8MvSSMQ==} engines: {node: '>= 18'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oniguruma-to-es@0.8.1: - resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} + oniguruma-to-es@0.10.0: + resolution: {integrity: sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -1830,8 +1854,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.0: + resolution: {integrity: sha512-G7n4uhtk9qJt2hlD+UFfsIGY854wpF+zs2bUbQ3CQEUTcn7v25LRsrmurOxTo4bJgjE4qkyshd9ldsEuY9M6xg==} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2012,14 +2036,14 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} - regex-recursion@5.0.0: - resolution: {integrity: sha512-UwyOqeobrCCqTXPcsSqH4gDhOjD5cI/b8kjngWgSZbxYh5yVjAwTjO5+hAuPRNiuR70+5RlWSs+U9PVcVcW9Lw==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.0.2: - resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -2056,10 +2080,15 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - runed@0.15.4: - resolution: {integrity: sha512-kmbpstUd7v2FdlBM+MT78IyuOVd38tq/e7MHvVb0fnVCsPSPMD/m2Xh+wUhzg9qCJgxRjBbIKu68DlH/x5VXJA==} + runed@0.20.0: + resolution: {integrity: sha512-YqPxaUdWL5nUXuSF+/v8a+NkVN8TGyEGbQwTA25fLY35MR/2bvZ1c6sCbudoo1kT4CAJPh4kUkcgGVxW127WKw==} + peerDependencies: + svelte: ^5.7.0 + + runed@0.22.0: + resolution: {integrity: sha512-ZWVXWhOr0P5xdNgtviz6D1ivLUDWKLCbeC5SUEJ3zBkqLReVqWHenFxMNFeFaiC5bfxhFxyxzyzB+98uYFtwdA==} peerDependencies: - svelte: ^5.0.0-next.1 + svelte: ^5.7.0 sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -2081,8 +2110,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.24.4: - resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==} + shiki@1.26.1: + resolution: {integrity: sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==} signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -2182,8 +2211,14 @@ packages: peerDependencies: svelte: ^5.0.0-next.126 - svelte@5.16.0: - resolution: {integrity: sha512-Ygqsiac6UogVED2ruKclU+pOeMThxWtp9LG+li7BXeDKC2paVIsRTMkNmcON4Zejerd1s5sZHWx6ZtU85xklVg==} + svelte-toolbelt@0.7.0: + resolution: {integrity: sha512-i/Tv4NwAWWqJnK5H0F8y/ubDnogDYlwwyzKhrspTUFzrFuGnYshqd2g4/R43ds841wmaFiSW/HsdsdWhPOlrAA==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.0.0 + + svelte@5.16.5: + resolution: {integrity: sha512-zTG45crJUGjNYQgmQ0YDxFJ7ge1O6ZwevPxGgGOxuMOXOQhcH9LC9GEx2JS9/BlkhxdsO8ETofQ76ouFwDVpCQ==} engines: {node: '>=18'} tailwind-merge@2.6.0: @@ -2219,10 +2254,6 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tinyglobby@0.2.10: - resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} - engines: {node: '>=12.0.0'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2241,17 +2272,17 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-morph@24.0.0: - resolution: {integrity: sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==} + ts-morph@25.0.0: + resolution: {integrity: sha512-ERPTUVO5qF8cEGJgAejGOsCVlbk8d0SDyiJsucKQT5XgqoZslv0Qml+gnui6Yy6o+uQqw5SestyW2HvlVtT/Sg==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2264,8 +2295,8 @@ packages: resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} engines: {node: '>=16'} - typescript-eslint@8.18.2: - resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} + typescript-eslint@8.19.1: + resolution: {integrity: sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2317,8 +2348,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valibot@0.42.1: - resolution: {integrity: sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==} + valibot@1.0.0-beta.11: + resolution: {integrity: sha512-Ztl5Iks1Ql7Z6CwkS5oyqguN3G8tmUiNlsHpqbDt6DLMpm+eu+n8Q7f921gI3uHvNZ8xDVkd4cEJP5t+lELOfw==} peerDependencies: typescript: '>=5' peerDependenciesMeta: @@ -2341,8 +2372,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.0.6: - resolution: {integrity: sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -2389,6 +2420,14 @@ packages: vite: optional: true + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -2691,9 +2730,9 @@ snapshots: '@floating-ui/utils@0.2.8': {} - '@fontsource/geist-mono@5.1.0': {} + '@fontsource-variable/inter@5.1.1': {} - '@fontsource/inter@5.1.0': {} + '@fontsource/geist-mono@5.1.1': {} '@humanfs/core@0.19.1': {} @@ -2982,38 +3021,46 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@1.24.4': + '@shikijs/core@1.26.1': dependencies: - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.24.4': + '@shikijs/engine-javascript@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 - oniguruma-to-es: 0.8.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 0.10.0 - '@shikijs/engine-oniguruma@1.24.4': + '@shikijs/engine-oniguruma@1.26.1': dependencies: - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/types@1.24.4': + '@shikijs/langs@1.26.1': dependencies: - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/types': 1.26.1 + + '@shikijs/themes@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + + '@shikijs/types@1.26.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.1': {} + '@shikijs/vscode-textmate@10.0.1': {} '@sindresorhus/merge-streams@4.0.0': {} - '@sveltejs/adapter-vercel@5.5.2(@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(rollup@4.28.0)': + '@sveltejs/adapter-vercel@5.5.2(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(rollup@4.28.0)': dependencies: - '@sveltejs/kit': 2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + '@sveltejs/kit': 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) '@vercel/nft': 0.27.9(rollup@4.28.0) esbuild: 0.24.0 transitivePeerDependencies: @@ -3021,9 +3068,9 @@ snapshots: - rollup - supports-color - '@sveltejs/kit@2.15.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1))': + '@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 @@ -3035,29 +3082,29 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.0 - svelte: 5.16.0 + svelte: 5.16.5 tiny-glob: 0.2.9 - vite: 6.0.6(jiti@1.21.6)(yaml@2.6.1) + vite: 6.0.7(jiti@1.21.6)(yaml@2.6.1) - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) debug: 4.4.0 - svelte: 5.16.0 - vite: 6.0.6(jiti@1.21.6)(yaml@2.6.1) + svelte: 5.16.5 + vite: 6.0.7(jiti@1.21.6)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.0)(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)))(svelte@5.16.5)(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.16.0 - vite: 6.0.6(jiti@1.21.6)(yaml@2.6.1) - vitefu: 1.0.4(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)) + svelte: 5.16.5 + vite: 6.0.7(jiti@1.21.6)(yaml@2.6.1) + vitefu: 1.0.4(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)) transitivePeerDependencies: - supports-color @@ -3065,11 +3112,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@ts-morph/common@0.25.0': + '@ts-morph/common@0.26.0': dependencies: + fast-glob: 3.3.2 minimatch: 9.0.5 path-browserify: 1.0.1 - tinyglobby: 0.2.10 '@types/aws-lambda@8.10.146': {} @@ -3089,81 +3136,81 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 eslint: 9.17.0(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.7.2) + ts-api-utils: 2.0.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0 eslint: 9.17.0(jiti@1.21.6) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.18.2': + '@typescript-eslint/scope-manager@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 - '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) debug: 4.4.0 eslint: 9.17.0(jiti@1.21.6) - ts-api-utils: 1.4.3(typescript@5.7.2) + ts-api-utils: 2.0.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.18.2': {} + '@typescript-eslint/types@8.19.1': {} - '@typescript-eslint/typescript-estree@8.18.2(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.2) + ts-api-utils: 2.0.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/utils@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) eslint: 9.17.0(jiti@1.21.6) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.18.2': + '@typescript-eslint/visitor-keys@8.19.1': dependencies: - '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/types': 8.19.1 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.2.0': {} @@ -3217,6 +3264,28 @@ snapshots: '@vue/compiler-dom': 3.5.13 '@vue/shared': 3.5.13 + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.7.2) + '@vue/shared@3.5.13': {} abbrev@2.0.0: {} @@ -3307,15 +3376,15 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - bits-ui@1.0.0-next.74(svelte@5.16.0): + bits-ui@1.0.0-next.77(svelte@5.16.5): dependencies: '@floating-ui/core': 1.6.8 '@floating-ui/dom': 1.6.12 '@internationalized/date': 3.6.0 esm-env: 1.2.1 - runed: 0.15.4(svelte@5.16.0) - svelte: 5.16.0 - svelte-toolbelt: 0.4.6(svelte@5.16.0) + runed: 0.22.0(svelte@5.16.5) + svelte: 5.16.5 + svelte-toolbelt: 0.7.0(svelte@5.16.5) bottleneck@2.19.5: {} @@ -3388,7 +3457,7 @@ snapshots: comma-separated-tokens@2.0.3: {} - commander@12.1.0: {} + commander@13.0.0: {} commander@4.1.1: {} @@ -3418,6 +3487,8 @@ snapshots: cssesc@3.0.0: {} + csstype@3.1.3: {} + data-uri-to-buffer@4.0.1: {} debounce-fn@6.0.0: @@ -3540,7 +3611,7 @@ snapshots: dependencies: eslint: 9.17.0(jiti@1.21.6) - eslint-plugin-svelte@2.46.1(eslint@9.17.0(jiti@1.21.6))(svelte@5.16.0): + eslint-plugin-svelte@2.46.1(eslint@9.17.0(jiti@1.21.6))(svelte@5.16.5): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.6)) '@jridgewell/sourcemap-codec': 1.5.0 @@ -3553,9 +3624,9 @@ snapshots: postcss-safe-parser: 6.0.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 semver: 7.6.3 - svelte-eslint-parser: 0.43.0(svelte@5.16.0) + svelte-eslint-parser: 0.43.0(svelte@5.16.5) optionalDependencies: - svelte: 5.16.0 + svelte: 5.16.5 transitivePeerDependencies: - ts-node @@ -3892,15 +3963,14 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - jsrepo@1.23.1(typescript@5.7.2): + jsrepo@1.24.0(typescript@5.7.2): dependencies: '@biomejs/js-api': 0.7.1(@biomejs/wasm-nodejs@1.9.4) '@biomejs/wasm-nodejs': 1.9.4 '@clack/prompts': 0.9.0 - '@vue/compiler-sfc': 3.5.13 ansi-regex: 6.1.0 chalk: 5.4.1 - commander: 12.1.0 + commander: 13.0.0 conf: 13.1.0 diff: 7.0.0 escape-string-regexp: 5.0.0 @@ -3908,15 +3978,17 @@ snapshots: execa: 9.5.2 get-tsconfig: 4.8.1 node-fetch: 3.3.2 - octokit: 4.0.2 + octokit: 4.0.3 package-manager-detector: 0.2.8 parse5: 7.2.1 - pathe: 1.1.2 + pathe: 2.0.0 prettier: 3.4.2 - svelte: 5.16.0 - ts-morph: 24.0.0 - valibot: 0.42.1(typescript@5.7.2) + semver: 7.6.3 + svelte: 5.16.5 + ts-morph: 25.0.0 + valibot: 1.0.0-beta.11(typescript@5.7.2) validate-npm-package-name: 6.0.0 + vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - '@biomejs/wasm-bundler' - '@biomejs/wasm-web' @@ -3953,9 +4025,9 @@ snapshots: lru-cache@10.4.3: {} - lucide-svelte@0.469.0(svelte@5.16.0): + lucide-svelte@0.469.0(svelte@5.16.5): dependencies: - svelte: 5.16.0 + svelte: 5.16.5 magic-string@0.30.17: dependencies: @@ -4016,9 +4088,9 @@ snapshots: mkdirp@3.0.1: {} - mode-watcher@0.5.0(svelte@5.16.0): + mode-watcher@0.5.0(svelte@5.16.5): dependencies: - svelte: 5.16.0 + svelte: 5.16.5 mri@1.2.0: {} @@ -4069,7 +4141,7 @@ snapshots: object-hash@3.0.0: {} - octokit@4.0.2: + octokit@4.0.3: dependencies: '@octokit/app': 15.1.1 '@octokit/core': 6.1.2 @@ -4086,11 +4158,11 @@ snapshots: dependencies: wrappy: 1.0.2 - oniguruma-to-es@0.8.1: + oniguruma-to-es@0.10.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.2 - regex-recursion: 5.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 optionator@0.9.4: dependencies: @@ -4140,7 +4212,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - pathe@1.1.2: {} + pathe@2.0.0: {} picocolors@1.1.1: {} @@ -4206,16 +4278,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.0): + prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.5): dependencies: prettier: 3.4.2 - svelte: 5.16.0 + svelte: 5.16.5 - prettier-plugin-tailwindcss@0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.0))(prettier@3.4.2): + prettier-plugin-tailwindcss@0.6.9(prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.16.5))(prettier@3.4.2): dependencies: prettier: 3.4.2 optionalDependencies: - prettier-plugin-svelte: 3.3.2(prettier@3.4.2)(svelte@5.16.0) + prettier-plugin-svelte: 3.3.2(prettier@3.4.2)(svelte@5.16.5) prettier@3.4.2: {} @@ -4239,13 +4311,14 @@ snapshots: readdirp@4.0.2: {} - regex-recursion@5.0.0: + regex-recursion@5.1.1: dependencies: + regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.0.2: + regex@5.1.1: dependencies: regex-utilities: 2.3.0 @@ -4297,10 +4370,15 @@ snapshots: dependencies: queue-microtask: 1.2.3 - runed@0.15.4(svelte@5.16.0): + runed@0.20.0(svelte@5.16.5): + dependencies: + esm-env: 1.2.1 + svelte: 5.16.5 + + runed@0.22.0(svelte@5.16.5): dependencies: esm-env: 1.2.1 - svelte: 5.16.0 + svelte: 5.16.5 sade@1.8.1: dependencies: @@ -4316,13 +4394,15 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.24.4: + shiki@1.26.1: dependencies: - '@shikijs/core': 1.24.4 - '@shikijs/engine-javascript': 1.24.4 - '@shikijs/engine-oniguruma': 1.24.4 - '@shikijs/types': 1.24.4 - '@shikijs/vscode-textmate': 9.3.1 + '@shikijs/core': 1.26.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/langs': 1.26.1 + '@shikijs/themes': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 signal-exit@4.1.0: {} @@ -4390,19 +4470,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.1.1(picomatch@4.0.2)(svelte@5.16.0)(typescript@5.7.2): + svelte-check@4.1.1(picomatch@4.0.2)(svelte@5.16.5)(typescript@5.7.2): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.1 fdir: 6.4.2(picomatch@4.0.2) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.16.0 + svelte: 5.16.5 typescript: 5.7.2 transitivePeerDependencies: - picomatch - svelte-eslint-parser@0.43.0(svelte@5.16.0): + svelte-eslint-parser@0.43.0(svelte@5.16.5): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -4410,24 +4490,31 @@ snapshots: postcss: 8.4.49 postcss-scss: 4.0.9(postcss@8.4.49) optionalDependencies: - svelte: 5.16.0 + svelte: 5.16.5 - svelte-sonner@0.3.28(svelte@5.16.0): + svelte-sonner@0.3.28(svelte@5.16.5): dependencies: - svelte: 5.16.0 + svelte: 5.16.5 - svelte-tel-input@3.5.2(svelte@5.16.0): + svelte-tel-input@3.5.2(svelte@5.16.5): dependencies: libphonenumber-js: 1.10.43 - svelte: 5.16.0 + svelte: 5.16.5 - svelte-toolbelt@0.4.6(svelte@5.16.0): + svelte-toolbelt@0.4.6(svelte@5.16.5): dependencies: clsx: 2.1.1 style-to-object: 1.0.8 - svelte: 5.16.0 + svelte: 5.16.5 - svelte@5.16.0: + svelte-toolbelt@0.7.0(svelte@5.16.5): + dependencies: + clsx: 2.1.1 + runed: 0.20.0(svelte@5.16.5) + style-to-object: 1.0.8 + svelte: 5.16.5 + + svelte@5.16.5: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -4504,11 +4591,6 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 - tinyglobby@0.2.10: - dependencies: - fdir: 6.4.2(picomatch@4.0.2) - picomatch: 4.0.2 - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4521,15 +4603,15 @@ snapshots: trim-lines@3.0.1: {} - ts-api-utils@1.4.3(typescript@5.7.2): + ts-api-utils@2.0.0(typescript@5.7.2): dependencies: typescript: 5.7.2 ts-interface-checker@0.1.13: {} - ts-morph@24.0.0: + ts-morph@25.0.0: dependencies: - '@ts-morph/common': 0.25.0 + '@ts-morph/common': 0.26.0 code-block-writer: 13.0.3 tslib@2.8.1: {} @@ -4540,11 +4622,11 @@ snapshots: type-fest@4.30.0: {} - typescript-eslint@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2): + typescript-eslint@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.1(eslint@9.17.0(jiti@1.21.6))(typescript@5.7.2) eslint: 9.17.0(jiti@1.21.6) typescript: 5.7.2 transitivePeerDependencies: @@ -4595,17 +4677,17 @@ snapshots: util-deprecate@1.0.2: {} - valibot@0.42.1(typescript@5.7.2): + valibot@1.0.0-beta.11(typescript@5.7.2): optionalDependencies: typescript: 5.7.2 validate-npm-package-name@6.0.0: {} - vaul-svelte@1.0.0-next.3(svelte@5.16.0): + vaul-svelte@1.0.0-next.3(svelte@5.16.5): dependencies: - bits-ui: 1.0.0-next.74(svelte@5.16.0) - svelte: 5.16.0 - svelte-toolbelt: 0.4.6(svelte@5.16.0) + bits-ui: 1.0.0-next.77(svelte@5.16.5) + svelte: 5.16.5 + svelte-toolbelt: 0.4.6(svelte@5.16.5) vfile-message@4.0.2: dependencies: @@ -4617,7 +4699,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@6.0.6(jiti@1.21.6)(yaml@2.6.1): + vite@6.0.7(jiti@1.21.6)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.4.49 @@ -4627,9 +4709,19 @@ snapshots: jiti: 1.21.6 yaml: 2.6.1 - vitefu@1.0.4(vite@6.0.6(jiti@1.21.6)(yaml@2.6.1)): + vitefu@1.0.4(vite@6.0.7(jiti@1.21.6)(yaml@2.6.1)): optionalDependencies: - vite: 6.0.6(jiti@1.21.6)(yaml@2.6.1) + vite: 6.0.7(jiti@1.21.6)(yaml@2.6.1) + + vue@3.5.13(typescript@5.7.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.7.2 web-streams-polyfill@3.3.3: {} diff --git a/src/lib/components/ui/avatar/avatar-fallback.svelte b/src/lib/components/ui/avatar/avatar-fallback.svelte new file mode 100644 index 0000000..0f42fe6 --- /dev/null +++ b/src/lib/components/ui/avatar/avatar-fallback.svelte @@ -0,0 +1,16 @@ + + + diff --git a/src/lib/components/ui/avatar/avatar-image.svelte b/src/lib/components/ui/avatar/avatar-image.svelte new file mode 100644 index 0000000..94021a7 --- /dev/null +++ b/src/lib/components/ui/avatar/avatar-image.svelte @@ -0,0 +1,16 @@ + + + diff --git a/src/lib/components/ui/avatar/avatar.svelte b/src/lib/components/ui/avatar/avatar.svelte new file mode 100644 index 0000000..447db2a --- /dev/null +++ b/src/lib/components/ui/avatar/avatar.svelte @@ -0,0 +1,16 @@ + + + diff --git a/src/lib/components/ui/avatar/index.ts b/src/lib/components/ui/avatar/index.ts new file mode 100644 index 0000000..9585f8a --- /dev/null +++ b/src/lib/components/ui/avatar/index.ts @@ -0,0 +1,13 @@ +import Root from './avatar.svelte'; +import Image from './avatar-image.svelte'; +import Fallback from './avatar-fallback.svelte'; + +export { + Root, + Image, + Fallback, + // + Root as Avatar, + Image as AvatarImage, + Fallback as AvatarFallback +}; diff --git a/src/lib/components/ui/chat/chat-bubble-avatar.svelte b/src/lib/components/ui/chat/chat-bubble-avatar.svelte new file mode 100644 index 0000000..12458ed --- /dev/null +++ b/src/lib/components/ui/chat/chat-bubble-avatar.svelte @@ -0,0 +1,17 @@ + + + diff --git a/src/lib/components/ui/chat/chat-bubble-message.svelte b/src/lib/components/ui/chat/chat-bubble-message.svelte new file mode 100644 index 0000000..af05c8c --- /dev/null +++ b/src/lib/components/ui/chat/chat-bubble-message.svelte @@ -0,0 +1,28 @@ + + +
+ {#if typing} +
+ +
+ {:else} + {@render children?.()} + {/if} +
diff --git a/src/lib/components/ui/chat/chat-bubble.svelte b/src/lib/components/ui/chat/chat-bubble.svelte new file mode 100644 index 0000000..2553d3a --- /dev/null +++ b/src/lib/components/ui/chat/chat-bubble.svelte @@ -0,0 +1,17 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ui/chat/chat-list.svelte b/src/lib/components/ui/chat/chat-list.svelte new file mode 100644 index 0000000..8b2ca6f --- /dev/null +++ b/src/lib/components/ui/chat/chat-list.svelte @@ -0,0 +1,47 @@ + + +
+
+ {@render children?.()} +
+ {#if !autoScroll.isAtBottom} +
+ +
+ {/if} +
diff --git a/src/lib/components/ui/chat/index.ts b/src/lib/components/ui/chat/index.ts new file mode 100644 index 0000000..c010b02 --- /dev/null +++ b/src/lib/components/ui/chat/index.ts @@ -0,0 +1,10 @@ +import Bubble from './chat-bubble.svelte'; +import BubbleMessage from './chat-bubble-message.svelte'; +import BubbleAvatar from './chat-bubble-avatar.svelte'; +import List from './chat-list.svelte'; +import * as Avatar from '$lib/components/ui/avatar'; + +const BubbleAvatarImage = Avatar.Image; +const BubbleAvatarFallback = Avatar.Fallback; + +export { List, Bubble, BubbleMessage, BubbleAvatar, BubbleAvatarImage, BubbleAvatarFallback }; diff --git a/src/lib/components/ui/chat/loading-dots.svelte b/src/lib/components/ui/chat/loading-dots.svelte new file mode 100644 index 0000000..300dadd --- /dev/null +++ b/src/lib/components/ui/chat/loading-dots.svelte @@ -0,0 +1,42 @@ + + +
+ {#each { length: 3 } as _} + + {/each} +
+ + diff --git a/src/lib/components/ui/input/input.svelte b/src/lib/components/ui/input/input.svelte index ea61a48..c08a5b9 100644 --- a/src/lib/components/ui/input/input.svelte +++ b/src/lib/components/ui/input/input.svelte @@ -14,7 +14,7 @@ {}, - controlledOpen = false, class: className, style, children, @@ -23,18 +22,13 @@ }: WithElementRef> & { open?: boolean; onOpenChange?: (open: boolean) => void; - controlledOpen?: boolean; } = $props(); const sidebar = setSidebar({ open: () => open, setOpen: (value: boolean) => { - if (controlledOpen) { - onOpenChange(value); - } else { - open = value; - onOpenChange(value); - } + open = value; + onOpenChange(value); // This sets the cookie to keep the sidebar state. document.cookie = `${SIDEBAR_COOKIE_NAME}=${open}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`; diff --git a/src/lib/components/ui/sidebar/sidebar.svelte b/src/lib/components/ui/sidebar/sidebar.svelte index 2e6f783..1e8057c 100644 --- a/src/lib/components/ui/sidebar/sidebar.svelte +++ b/src/lib/components/ui/sidebar/sidebar.svelte @@ -35,12 +35,7 @@ {@render children?.()} {:else if sidebar.isMobile} - + sidebar.openMobile, (v) => sidebar.setOpenMobile(v)} {...restProps}> + * import { UseAutoScroll } from '$lib/hooks/use-auto-scroll.svelte'; + * + * let { children } = $props(); + * + * const autoScroll = new UseAutoScroll(); + * + * + *
+ *
+ * {@render children?.()} + *
+ * {#if !autoScroll.isAtBottom} + * + * {/if} + *
+ * ``` + */ +export class UseAutoScroll { + #ref = $state(); + #scrollY: number = $state(0); + #userHasScrolled = $state(false); + private lastScrollHeight = 0; + + // This sets everything up once #ref is bound + set ref(ref: HTMLElement | undefined) { + this.#ref = ref; + + if (!this.#ref) return; + + this.lastScrollHeight = this.#ref.scrollHeight; + + // start from bottom or start position + this.#ref.scrollTo(0, this.#scrollY ? this.#scrollY : this.#ref.scrollHeight); + + this.#ref.addEventListener('scroll', () => { + if (!this.#ref) return; + + this.#scrollY = this.#ref.scrollTop; + + this.disableAutoScroll(); + }); + + window.addEventListener('resize', () => { + this.scrollToBottom(true); + }); + + // should detect when something changed that effected the scroll height + const observer = new MutationObserver(() => { + if (!this.#ref) return; + + if (this.#ref.scrollHeight !== this.lastScrollHeight) { + this.scrollToBottom(true); + } + + this.lastScrollHeight = this.#ref.scrollHeight; + }); + + observer.observe(this.#ref, { childList: true }); + } + + get ref() { + return this.#ref; + } + + get scrollY() { + return this.#scrollY; + } + + /** Checks if the container is scrolled to the bottom */ + get isAtBottom() { + if (!this.#ref) return true; + + return this.#scrollY + this.#ref.offsetHeight >= this.#ref.scrollHeight; + } + + /** Disables auto scrolling until the container is scrolled back to the bottom */ + disableAutoScroll() { + if (this.isAtBottom) { + this.#userHasScrolled = false; + } else { + this.#userHasScrolled = true; + } + } + + /** Scrolls the container to the bottom */ + scrollToBottom(auto = false) { + if (!this.#ref) return; + + // don't auto scroll if user has scrolled + if (auto && this.#userHasScrolled) return; + + this.#ref.scrollTo(0, this.#ref.scrollHeight); + } +} diff --git a/src/lib/map.ts b/src/lib/map.ts index 62d222a..a26ba72 100644 --- a/src/lib/map.ts +++ b/src/lib/map.ts @@ -27,6 +27,13 @@ const map: Record = { specifier: 'ui/button', source: 'src/lib/components/ui/button/button.svelte' }, + { + name: 'Chat', + description: 'Components for creating live chats.', + href: '/components/chat', + specifier: 'ui/chat', + source: 'src/lib/components/ui/chat' + }, { name: 'Code', description: 'A code component.', @@ -114,6 +121,16 @@ const map: Record = { source: 'src/lib/actions/shortcut.svelte.ts' } ], + Hooks: [ + { + name: 'UseAutoScroll', + description: + 'A hook to enable the creation of containers that automatically scroll to the bottom of their content.', + href: '/hooks/use-auto-scroll', + specifier: 'hooks/use-auto-scroll.svelte', + source: 'src/lib/hooks/use-auto-scroll.svelte.ts' + } + ], Utils: [ { name: 'Context Provider', diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 23063c3..d3c684a 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,6 +1,6 @@

@@ -19,6 +20,7 @@ +

diff --git a/src/routes/components/chat/+page.svelte b/src/routes/components/chat/+page.svelte new file mode 100644 index 0000000..d195aa9 --- /dev/null +++ b/src/routes/components/chat/+page.svelte @@ -0,0 +1,37 @@ + + +Basic + + + + +Usage + + import * as Chat from "$lib/components/ui/chat"; +\<\/script\> + + + + + + + CN + + + + Hello, World! + + +`} +/> diff --git a/src/routes/components/chat/basic.svelte b/src/routes/components/chat/basic.svelte new file mode 100644 index 0000000..9c91e2e --- /dev/null +++ b/src/routes/components/chat/basic.svelte @@ -0,0 +1,94 @@ + + +
+
+
+ + + + {initials(data.friend.name)} + + +
+ {data.friend.name} + Active 2 mins ago +
+
+
+ + + +
+
+ + {#each messages as message} + {@const sender = data.users.find((u) => u.id === message.senderId)} + + + + + + {initials(sender?.name ?? '')} + + + +

{message.message}

+
+ {message.sentAt} +
+
+
+ {/each} + + + + + {initials(data.friend.name)} + + + + +
+
{ + e.preventDefault(); + + messages.push({ message, senderId: data.user.id, sentAt: formatShortTime(new Date()) }); + + message = ''; + }} + class="flex place-items-center gap-2 p-2" + > + + + +
+
diff --git a/src/routes/components/chat/data.ts b/src/routes/components/chat/data.ts new file mode 100644 index 0000000..ddb0fa3 --- /dev/null +++ b/src/routes/components/chat/data.ts @@ -0,0 +1,76 @@ +import type { Message, User } from './types'; +import { formatShortTime } from './utils'; + +const firstMessageMinutesAgo = 25; + +const now = new Date(); +const baseTime = new Date(now.getTime() - firstMessageMinutesAgo * 60000); + +export const messages: Message[] = [ + { + senderId: '123456', + message: 'Hey, did you see Svelte 5 just got released?', + sentAt: formatShortTime(new Date(baseTime.getTime())) + }, + { + senderId: '654321', + message: 'Yes! The runes system looks really interesting!', + sentAt: formatShortTime(new Date(baseTime.getTime() + 3 * 60000)) + }, + { + senderId: '123456', + message: 'Right? Such a big change from the previous reactive system', + sentAt: formatShortTime(new Date(baseTime.getTime() + 5 * 60000)) + }, + { + senderId: '654321', + message: 'Have you tried migrating any projects to it yet?', + sentAt: formatShortTime(new Date(baseTime.getTime() + 8 * 60000)) + }, + { + senderId: '123456', + message: 'Just started with a small one. The migration guide is super helpful', + sentAt: formatShortTime(new Date(baseTime.getTime() + 10 * 60000)) + }, + { + senderId: '654321', + message: 'Any breaking changes causing issues?', + sentAt: formatShortTime(new Date(baseTime.getTime() + 13 * 60000)) + }, + { + senderId: '123456', + message: 'The new $state syntax took some getting used to, but its cleaner now', + sentAt: formatShortTime(new Date(baseTime.getTime() + 15 * 60000)) + }, + { + senderId: '654321', + message: 'The performance improvements are impressive too', + sentAt: formatShortTime(new Date(baseTime.getTime() + 18 * 60000)) + }, + { + senderId: '123456', + message: 'Yeah, the compiler optimizations are amazing. Much faster now', + sentAt: formatShortTime(new Date(baseTime.getTime() + 20 * 60000)) + }, + { + senderId: '654321', + message: 'Looking forward to using it in my next project!', + sentAt: formatShortTime(new Date(baseTime.getTime() + 23 * 60000)) + } +]; + +export const user: User = { + id: '123456', + name: 'Jane Doe', + username: '@janedoe', + img: 'https://images.freeimages.com/images/large-previews/971/basic-shape-avatar-1632968.jpg?fmt=webp&h=350' +}; + +export const friend: User = { + id: '654321', + name: 'John Doe', + username: '@johndoe', + img: 'https://images.freeimages.com/images/large-previews/fdd/man-avatar-1632964.jpg?fmt=webp&h=35' +}; + +export const users = [user, friend]; diff --git a/src/routes/components/chat/examples.ts b/src/routes/components/chat/examples.ts new file mode 100644 index 0000000..e9253ad --- /dev/null +++ b/src/routes/components/chat/examples.ts @@ -0,0 +1,11 @@ +import Basic from './basic.svelte'; +import basicRaw from './basic.svelte?raw'; + +const examples = { + basic: { + code: basicRaw, + Component: Basic + } +}; + +export { examples }; diff --git a/src/routes/components/chat/types.ts b/src/routes/components/chat/types.ts new file mode 100644 index 0000000..eaa1231 --- /dev/null +++ b/src/routes/components/chat/types.ts @@ -0,0 +1,12 @@ +export type User = { + id: string; + username: string; + name: string; + img: string; +}; + +export type Message = { + senderId: string; + message: string; + sentAt: string; +}; diff --git a/src/routes/components/chat/utils.ts b/src/routes/components/chat/utils.ts new file mode 100644 index 0000000..f58f265 --- /dev/null +++ b/src/routes/components/chat/utils.ts @@ -0,0 +1,13 @@ +export const formatShortTime = (date: Date) => { + return date.toLocaleTimeString('en-US', { + hour: 'numeric', + minute: '2-digit', + hour12: true + }); +}; + +export const initials = (name: string) => + name + .split(' ') + .map((n) => n[0]) + .join(''); diff --git a/src/routes/hooks/use-auto-scroll/+page.svelte b/src/routes/hooks/use-auto-scroll/+page.svelte new file mode 100644 index 0000000..23dcc89 --- /dev/null +++ b/src/routes/hooks/use-auto-scroll/+page.svelte @@ -0,0 +1,31 @@ + + + +Usage +

Create a container that automatically scrolls to the bottom.

+ + import { UseAutoScroll } from '$lib/hooks/use-auto-scroll.svelte'; + + let { children } = $props(); + + const autoScroll = new UseAutoScroll(); +\<\/script\> + +
+
+ {@render children?.()} +
+ {#if !autoScroll.isAtBottom} + + {/if} +
`} +/> diff --git a/tailwind.config.ts b/tailwind.config.ts index 06d15e1..39c0547 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -67,7 +67,7 @@ const config: Config = { sm: 'calc(var(--radius) - 4px)' }, fontFamily: { - sans: ['Inter', 'sans-serif'], + sans: ['Inter Variable', 'sans-serif'], mono: ['Geist Mono', 'monospace'] }, keyframes: {