diff --git a/.github/workflows/svelte_check.yml b/.github/workflows/svelte_check.yml index f066486..7d3f0a0 100644 --- a/.github/workflows/svelte_check.yml +++ b/.github/workflows/svelte_check.yml @@ -2,6 +2,10 @@ name: Run_Svelte_Check_on_PRs on: pull_request: + branches: + - master + - main + - development workflow_dispatch: diff --git a/.github/workflows/svelte_integration.yml b/.github/workflows/svelte_integration.yml new file mode 100644 index 0000000..b662bb1 --- /dev/null +++ b/.github/workflows/svelte_integration.yml @@ -0,0 +1,57 @@ +name: Run_Svelte_Integration_on_PRs + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + + + workflow_dispatch: + +jobs: + e2e-tests: + name: Run end-to-end tests + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: pnpm-setup + uses: pnpm/action-setup@v4 + with: + version: 10 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22.x + cache: 'pnpm' + - name: Install dependencies + run: pnpm install + - name: Install playwright browsers + run: pnpm exec playwright install --with-deps + - name: Run tests + env: + WALLABAG_MAX_ARTICLES: ${{ secrets.WALLABAG_MAX_ARTICLES }} + WALLABAG_MAX_PAGES: ${{ secrets.WALLABAG_MAX_PAGES }} + WALLABAG_CLIENT_ID: ${{ secrets.WALLABAG_CLIENT_ID }} + WALLABAG_CLIENT_SECRET: ${{ secrets.WALLABAG_CLIENT_SECRET }} + WALLABAG_USERNAME: ${{ secrets.WALLABAG_USERNAME }} + WALLABAG_PASSWORD: ${{ secrets.WALLABAG_PASSWORD }} + WALLABAG_URL: ${{ secrets.WALLABAG_URL }} + BANDCAMP_USERNAME: ${{ secrets.BANDCAMP_USERNAME }} + PUBLIC_SITE_URL: ${{ secrets.PUBLIC_SITE_URL }} + PUBLIC_URL: ${{ secrets.PUBLIC_URL }} + PUBLIC_UMAMI_DO_NOT_TRACK: ${{ secrets.PUBLIC_UMAMI_DO_NOT_TRACK }} + PUBLIC_UMAMI_URL: ${{ secrets.PUBLIC_UMAMI_URL }} + PUBLIC_UMAMI_ID: ${{ secrets.PUBLIC_UMAMI_ID }} + PAGE_SIZE: ${{ secrets.PAGE_SIZE }} + USE_REDIS_CACHE: 'false' + REDIS_URI: ${{ secrets.REDIS_URI }} + run: pnpm test:integration + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.github/workflows/svelte_unit.yml b/.github/workflows/svelte_unit.yml new file mode 100644 index 0000000..8dd386c --- /dev/null +++ b/.github/workflows/svelte_unit.yml @@ -0,0 +1,58 @@ +name: Run_Svelte_Unit_on_PRs + +on: + push: + branches: + - master + - main + - development + pull_request: + branches: + - master + - main + - development + + workflow_dispatch: + +env: + WALLABAG_MAX_ARTICLES: ${{ secrets.WALLABAG_MAX_ARTICLES }} + WALLABAG_MAX_PAGES: ${{ secrets.WALLABAG_MAX_PAGES }} + WALLABAG_CLIENT_ID: ${{ secrets.WALLABAG_CLIENT_ID }} + WALLABAG_CLIENT_SECRET: ${{ secrets.WALLABAG_CLIENT_SECRET }} + WALLABAG_USERNAME: ${{ secrets.WALLABAG_USERNAME }} + WALLABAG_PASSWORD: ${{ secrets.WALLABAG_PASSWORD }} + WALLABAG_URL: ${{ secrets.WALLABAG_URL }} + BANDCAMP_USERNAME: ${{ secrets.BANDCAMP_USERNAME }} + PUBLIC_SITE_URL: ${{ secrets.PUBLIC_SITE_URL }} + PUBLIC_URL: ${{ secrets.PUBLIC_URL }} + PUBLIC_UMAMI_DO_NOT_TRACK: ${{ secrets.PUBLIC_UMAMI_DO_NOT_TRACK }} + PUBLIC_UMAMI_URL: ${{ secrets.PUBLIC_UMAMI_URL }} + PUBLIC_UMAMI_ID: ${{ secrets.PUBLIC_UMAMI_ID }} + PAGE_SIZE: ${{ secrets.PAGE_SIZE }} + USE_REDIS_CACHE: ${{ secrets.USE_REDIS_CACHE }} + REDIS_URI: ${{ secrets.REDIS_URI }} + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: pnpm-setup + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22.x + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Execute unit tests + run: pnpm test:unit diff --git a/.gitignore b/.gitignore index 15629aa..17fbd9a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,7 @@ vite.config.ts.timestamp-* # Sentry Config File .sentryclirc + +# Test Results +test-results +test-results/* diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 0000000..e538225 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,19 @@ +import type { StorybookConfig } from '@storybook/sveltekit'; + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|ts|svelte)"], + addons: [ + "@storybook/addon-svelte-csf", + "@chromatic-com/storybook", + "@storybook/addon-docs", + "@storybook/addon-a11y" + ], + framework: { + name: "@storybook/sveltekit", + options: {}, + }, + core: { + disableTelemetry: true, + }, +}; +export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 0000000..eef60a4 --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,16 @@ +import '../src/styles/styles.pcss'; + +import type { Preview } from '@storybook/sveltekit'; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +}; + +export default preview; diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..d871317 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "workbench.colorTheme": "Dark+ (default dark)", +} diff --git a/package.json b/package.json index 12a7d52..f7af65e 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,68 @@ { - "name": "personal-website-sveltekit", - "version": "1.0.0", - "private": true, - "type": "module", - "scripts": { - "dev": "NODE_OPTIONS=\"--inspect\" vite dev --host", - "build": "vite build", - "preview": "vite preview", - "test": "npm run test:integration && npm run test:unit", - "test:ui": "svelte-kit sync && playwright test --ui", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "biome lint --error-on-warnings .", - "format": "biome format --write .", - "test:integration": "playwright test", - "test:unit": "vitest" - }, - "devDependencies": { - "@biomejs/biome": "^2.1.4", - "@internationalized/date": "^3.8.2", - "@playwright/test": "^1.54.2", - "@sveltejs/enhanced-img": "^0.5.1", - "@sveltejs/kit": "^2.29.0", - "@sveltejs/vite-plugin-svelte": "^5.1.1", - "@unpic/svelte": "^1.0.0", - "@zerodevx/svelte-img": "^2.1.2", - "autoprefixer": "^10.4.21", - "just-intersect": "^4.3.0", - "postcss": "^8.5.6", - "postcss-custom-media": "^11.0.6", - "postcss-import": "^16.1.1", - "postcss-load-config": "^6.0.1", - "postcss-preset-env": "^10.2.4", - "satori": "^0.12.2", - "satori-html": "^0.3.2", - "svelte": "^5.38.1", - "svelte-check": "^4.3.1", - "svelte-meta-tags": "^4.4.0", - "svelte-preprocess": "^6.0.3", - "svelte-sequential-preprocessor": "^2.0.2", - "tslib": "^2.8.1", - "typescript": "^5.9.2", - "vanilla-lazyload": "^19.1.3", - "vite": "^6.3.5", - "vite-imagetools": "^7.1.1", - "vitest": "^3.2.4" - }, - "dependencies": { - "@resvg/resvg-js": "^2.6.2", - "@sveltejs/adapter-node": "^5.2.14", - "@vercel/og": "^0.6.8", - "bits-ui": "2.9.2", - "flexsearch": "^0.8.205", - "ioredis": "^5.7.0", - "lucide-svelte": "^0.539.0", - "scrape-it": "^6.1.11", - "sharp": "^0.34.3", - "svelte-local-storage-store": "^0.6.4" - } + "name": "personal-website-sveltekit", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "NODE_OPTIONS=\"--inspect\" vite dev --host", + "build": "vite build", + "preview": "vite preview", + "test": "npm run test:integration && npm run test:unit", + "test:ui": "svelte-kit sync && playwright test --ui", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "biome lint --error-on-warnings .", + "format": "biome format --write .", + "storybook": "storybook dev -p 6006", + "test:integration": "playwright test", + "test:unit": "vitest" + }, + "devDependencies": { + "@biomejs/biome": "^2.2.2", + "@chromatic-com/storybook": "^4.1.1", + "@internationalized/date": "^3.9.0", + "@playwright/test": "^1.55.0", + "@storybook/addon-a11y": "^9.1.3", + "@storybook/addon-docs": "^9.1.3", + "@storybook/addon-svelte-csf": "^5.0.8", + "@storybook/sveltekit": "^9.1.3", + "@sveltejs/enhanced-img": "^0.5.1", + "@sveltejs/kit": "^2.36.3", + "@sveltejs/vite-plugin-svelte": "^5.1.1", + "@unpic/svelte": "^1.0.0", + "@zerodevx/svelte-img": "^2.1.2", + "autoprefixer": "^10.4.21", + "just-intersect": "^4.3.0", + "postcss": "^8.5.6", + "postcss-custom-media": "^11.0.6", + "postcss-import": "^16.1.1", + "postcss-load-config": "^6.0.1", + "postcss-preset-env": "^10.3.0", + "satori": "^0.16.2", + "satori-html": "^0.3.2", + "storybook": "^9.1.3", + "svelte": "^5.38.5", + "svelte-check": "^4.3.1", + "svelte-meta-tags": "^4.4.0", + "svelte-preprocess": "^6.0.3", + "svelte-sequential-preprocessor": "^2.0.2", + "tslib": "^2.8.1", + "typescript": "^5.9.2", + "vanilla-lazyload": "^19.1.3", + "vite": "^6.3.5", + "vite-imagetools": "^7.1.1", + "vitest": "^3.2.4" + }, + "dependencies": { + "@resvg/resvg-js": "^2.6.2", + "@sveltejs/adapter-node": "^5.3.1", + "@vercel/og": "^0.8.5", + "bits-ui": "2.9.4", + "flexsearch": "^0.8.205", + "ioredis": "^5.7.0", + "lucide-svelte": "^0.542.0", + "scrape-it": "^6.1.11", + "sharp": "^0.34.3", + "svelte-local-storage-store": "^0.6.4" + } } diff --git a/playwright.config.ts b/playwright.config.ts index 3cf8326..f974312 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,12 +1,32 @@ import type { PlaywrightTestConfig } from '@playwright/test'; const config: PlaywrightTestConfig = { - webServer: { - command: 'pnpm run build && pnpm run preview', - port: 4173 - }, - testDir: 'tests', - testMatch: /(.+\.)?(test|spec)\.[jt]s/ + webServer: { + command: 'pnpm -s exec svelte-kit sync && pnpm run build && pnpm run preview', + port: 4173, + timeout: 180_000, + reuseExistingServer: true + }, + testDir: 'tests', + testMatch: /(.+\.)?(test|spec)\.[jt]s/, + use: { + baseURL: 'http://localhost:4173' + }, + // Run on main browsers: Chromium (Chrome), Firefox, WebKit (Safari) + projects: [ + { + name: 'chromium', + use: { browserName: 'chromium' } + }, + { + name: 'firefox', + use: { browserName: 'firefox' } + }, + { + name: 'webkit', + use: { browserName: 'webkit' } + } + ] }; export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dff238c..bc8eda2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,14 +12,14 @@ importers: specifier: ^2.6.2 version: 2.6.2 '@sveltejs/adapter-node': - specifier: ^5.2.14 - version: 5.2.14(@sveltejs/kit@2.29.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0))) + specifier: ^5.3.1 + version: 5.3.1(@sveltejs/kit@2.36.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))) '@vercel/og': - specifier: ^0.6.8 - version: 0.6.8 + specifier: ^0.8.5 + version: 0.8.5 bits-ui: - specifier: 2.9.2 - version: 2.9.2(@internationalized/date@3.8.2)(svelte@5.38.1) + specifier: 2.9.4 + version: 2.9.4(@internationalized/date@3.9.0)(svelte@5.38.5) flexsearch: specifier: ^0.8.205 version: 0.8.205 @@ -27,8 +27,8 @@ importers: specifier: ^5.7.0 version: 5.7.0 lucide-svelte: - specifier: ^0.539.0 - version: 0.539.0(svelte@5.38.1) + specifier: ^0.542.0 + version: 0.542.0(svelte@5.38.5) scrape-it: specifier: ^6.1.11 version: 6.1.11 @@ -37,32 +37,47 @@ importers: version: 0.34.3 svelte-local-storage-store: specifier: ^0.6.4 - version: 0.6.4(svelte@5.38.1) + version: 0.6.4(svelte@5.38.5) devDependencies: '@biomejs/biome': - specifier: ^2.1.4 - version: 2.1.4 + specifier: ^2.2.2 + version: 2.2.2 + '@chromatic-com/storybook': + specifier: ^4.1.1 + version: 4.1.1(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) '@internationalized/date': - specifier: ^3.8.2 - version: 3.8.2 + specifier: ^3.9.0 + version: 3.9.0 '@playwright/test': - specifier: ^1.54.2 - version: 1.54.2 + specifier: ^1.55.0 + version: 1.55.0 + '@storybook/addon-a11y': + specifier: ^9.1.3 + version: 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) + '@storybook/addon-docs': + specifier: ^9.1.3 + version: 9.1.3(@types/react@19.1.10)(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) + '@storybook/addon-svelte-csf': + specifier: ^5.0.8 + version: 5.0.8(@storybook/svelte@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5))(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) + '@storybook/sveltekit': + specifier: ^9.1.3 + version: 9.1.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) '@sveltejs/enhanced-img': specifier: ^0.5.1 - version: 0.5.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(rollup@4.34.8)(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + version: 0.5.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(rollup@4.34.8)(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) '@sveltejs/kit': - specifier: ^2.29.0 - version: 2.29.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + specifier: ^2.36.3 + version: 2.36.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) '@sveltejs/vite-plugin-svelte': specifier: ^5.1.1 - version: 5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + version: 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) '@unpic/svelte': specifier: ^1.0.0 - version: 1.0.0(svelte@5.38.1) + version: 1.0.0(svelte@5.38.5) '@zerodevx/svelte-img': specifier: ^2.1.2 - version: 2.1.2(rollup@4.34.8)(svelte@5.38.1) + version: 2.1.2(rollup@4.34.8)(svelte@5.38.5) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -82,26 +97,29 @@ importers: specifier: ^6.0.1 version: 6.0.1(postcss@8.5.6)(yaml@2.7.0) postcss-preset-env: - specifier: ^10.2.4 - version: 10.2.4(postcss@8.5.6) + specifier: ^10.3.0 + version: 10.3.0(postcss@8.5.6) satori: - specifier: ^0.12.2 - version: 0.12.2 + specifier: ^0.16.2 + version: 0.16.2 satori-html: specifier: ^0.3.2 version: 0.3.2 + storybook: + specifier: ^9.1.3 + version: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) svelte: - specifier: ^5.38.1 - version: 5.38.1 + specifier: ^5.38.5 + version: 5.38.5 svelte-check: specifier: ^4.3.1 - version: 4.3.1(picomatch@4.0.2)(svelte@5.38.1)(typescript@5.9.2) + version: 4.3.1(picomatch@4.0.2)(svelte@5.38.5)(typescript@5.9.2) svelte-meta-tags: specifier: ^4.4.0 - version: 4.4.0(svelte@5.38.1) + version: 4.4.0(svelte@5.38.5) svelte-preprocess: specifier: ^6.0.3 - version: 6.0.3(postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.7.0))(postcss@8.5.6)(svelte@5.38.1)(typescript@5.9.2) + version: 6.0.3(postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.7.0))(postcss@8.5.6)(svelte@5.38.5)(typescript@5.9.2) svelte-sequential-preprocessor: specifier: ^2.0.2 version: 2.0.2 @@ -126,63 +144,84 @@ importers: packages: + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@biomejs/biome@2.1.4': - resolution: {integrity: sha512-QWlrqyxsU0FCebuMnkvBIkxvPqH89afiJzjMl+z67ybutse590jgeaFdDurE9XYtzpjRGTI1tlUZPGWmbKsElA==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.28.3': + resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@2.2.2': + resolution: {integrity: sha512-j1omAiQWCkhuLgwpMKisNKnsM6W8Xtt1l0WZmqY/dFj8QPNkIoTvk4tSsi40FaAAkBE1PU0AFG2RWFBWenAn+w==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.1.4': - resolution: {integrity: sha512-sCrNENE74I9MV090Wq/9Dg7EhPudx3+5OiSoQOkIe3DLPzFARuL1dOwCWhKCpA3I5RHmbrsbNSRfZwCabwd8Qg==} + '@biomejs/cli-darwin-arm64@2.2.2': + resolution: {integrity: sha512-6ePfbCeCPryWu0CXlzsWNZgVz/kBEvHiPyNpmViSt6A2eoDf4kXs3YnwQPzGjy8oBgQulrHcLnJL0nkCh80mlQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.1.4': - resolution: {integrity: sha512-gOEICJbTCy6iruBywBDcG4X5rHMbqCPs3clh3UQ+hRKlgvJTk4NHWQAyHOXvaLe+AxD1/TNX1jbZeffBJzcrOw==} + '@biomejs/cli-darwin-x64@2.2.2': + resolution: {integrity: sha512-Tn4JmVO+rXsbRslml7FvKaNrlgUeJot++FkvYIhl1OkslVCofAtS35MPlBMhXgKWF9RNr9cwHanrPTUUXcYGag==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.1.4': - resolution: {integrity: sha512-nYr7H0CyAJPaLupFE2cH16KZmRC5Z9PEftiA2vWxk+CsFkPZQ6dBRdcC6RuS+zJlPc/JOd8xw3uCCt9Pv41WvQ==} + '@biomejs/cli-linux-arm64-musl@2.2.2': + resolution: {integrity: sha512-/MhYg+Bd6renn6i1ylGFL5snYUn/Ct7zoGVKhxnro3bwekiZYE8Kl39BSb0MeuqM+72sThkQv4TnNubU9njQRw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@2.1.4': - resolution: {integrity: sha512-juhEkdkKR4nbUi5k/KRp1ocGPNWLgFRD4NrHZSveYrD6i98pyvuzmS9yFYgOZa5JhaVqo0HPnci0+YuzSwT2fw==} + '@biomejs/cli-linux-arm64@2.2.2': + resolution: {integrity: sha512-JfrK3gdmWWTh2J5tq/rcWCOsImVyzUnOS2fkjhiYKCQ+v8PqM+du5cfB7G1kXas+7KQeKSWALv18iQqdtIMvzw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@2.1.4': - resolution: {integrity: sha512-lvwvb2SQQHctHUKvBKptR6PLFCM7JfRjpCCrDaTmvB7EeZ5/dQJPhTYBf36BE/B4CRWR2ZiBLRYhK7hhXBCZAg==} + '@biomejs/cli-linux-x64-musl@2.2.2': + resolution: {integrity: sha512-ZCLXcZvjZKSiRY/cFANKg+z6Fhsf9MHOzj+NrDQcM+LbqYRT97LyCLWy2AS+W2vP+i89RyRM+kbGpUzbRTYWig==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@2.1.4': - resolution: {integrity: sha512-Eoy9ycbhpJVYuR+LskV9s3uyaIkp89+qqgqhGQsWnp/I02Uqg2fXFblHJOpGZR8AxdB9ADy87oFVxn9MpFKUrw==} + '@biomejs/cli-linux-x64@2.2.2': + resolution: {integrity: sha512-Ogb+77edO5LEP/xbNicACOWVLt8mgC+E1wmpUakr+O4nKwLt9vXe74YNuT3T1dUBxC/SnrVmlzZFC7kQJEfquQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@2.1.4': - resolution: {integrity: sha512-3WRYte7orvyi6TRfIZkDN9Jzoogbv+gSvR+b9VOXUg1We1XrjBg6WljADeVEaKTvOcpVdH0a90TwyOQ6ue4fGw==} + '@biomejs/cli-win32-arm64@2.2.2': + resolution: {integrity: sha512-wBe2wItayw1zvtXysmHJQoQqXlTzHSpQRyPpJKiNIR21HzH/CrZRDFic1C1jDdp+zAPtqhNExa0owKMbNwW9cQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.1.4': - resolution: {integrity: sha512-tBc+W7anBPSFXGAoQW+f/+svkpt8/uXfRwDzN1DvnatkRMt16KIYpEi/iw8u9GahJlFv98kgHcIrSsZHZTR0sw==} + '@biomejs/cli-win32-x64@2.2.2': + resolution: {integrity: sha512-DAuHhHekGfiGb6lCcsT4UyxQmVwQiBCBUMwVra/dcOSs9q8OhfaZgey51MlekT3p8UwRqtXQfFuEJBhJNdLZwg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] + '@chromatic-com/storybook@4.1.1': + resolution: {integrity: sha512-+Ib4cHtEjKl/Do+4LyU0U1FhLPbIU2Q/zgbOKHBCV+dTC4T3/vGzPqiGsgkdnZyTsK/zXg96LMPSPC4jjOiapg==} + engines: {node: '>=20.0.0', yarn: '>=1.22.18'} + peerDependencies: + storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 + '@csstools/cascade-layer-name-parser@2.0.5': resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} engines: {node: '>=18'} @@ -190,8 +229,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/color-helpers@5.0.2': - resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} '@csstools/css-calc@2.1.4': @@ -201,8 +240,8 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-color-parser@3.0.10': - resolution: {integrity: sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==} + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} engines: {node: '>=18'} peerDependencies: '@csstools/css-parser-algorithms': ^3.0.5 @@ -225,32 +264,44 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 + '@csstools/postcss-alpha-function@1.0.0': + resolution: {integrity: sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + '@csstools/postcss-cascade-layers@5.0.2': resolution: {integrity: sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-function@4.0.10': - resolution: {integrity: sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==} + '@csstools/postcss-color-function-display-p3-linear@1.0.0': + resolution: {integrity: sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-function@3.0.10': - resolution: {integrity: sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==} + '@csstools/postcss-color-function@4.0.11': + resolution: {integrity: sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-color-mix-variadic-function-arguments@1.0.0': - resolution: {integrity: sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==} + '@csstools/postcss-color-mix-function@3.0.11': + resolution: {integrity: sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-content-alt-text@2.0.6': - resolution: {integrity: sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==} + '@csstools/postcss-color-mix-variadic-function-arguments@1.0.1': + resolution: {integrity: sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-content-alt-text@2.0.7': + resolution: {integrity: sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -267,26 +318,26 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-gamut-mapping@2.0.10': - resolution: {integrity: sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==} + '@csstools/postcss-gamut-mapping@2.0.11': + resolution: {integrity: sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-gradients-interpolation-method@5.0.10': - resolution: {integrity: sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==} + '@csstools/postcss-gradients-interpolation-method@5.0.11': + resolution: {integrity: sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-hwb-function@4.0.10': - resolution: {integrity: sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==} + '@csstools/postcss-hwb-function@4.0.11': + resolution: {integrity: sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-ic-unit@4.0.2': - resolution: {integrity: sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==} + '@csstools/postcss-ic-unit@4.0.3': + resolution: {integrity: sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -303,8 +354,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-light-dark-function@2.0.9': - resolution: {integrity: sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==} + '@csstools/postcss-light-dark-function@2.0.10': + resolution: {integrity: sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -363,14 +414,14 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-oklab-function@4.0.10': - resolution: {integrity: sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==} + '@csstools/postcss-oklab-function@4.0.11': + resolution: {integrity: sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 - '@csstools/postcss-progressive-custom-properties@4.1.0': - resolution: {integrity: sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==} + '@csstools/postcss-progressive-custom-properties@4.2.0': + resolution: {integrity: sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -381,8 +432,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-relative-color-syntax@3.0.10': - resolution: {integrity: sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==} + '@csstools/postcss-relative-color-syntax@3.0.11': + resolution: {integrity: sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -405,8 +456,8 @@ packages: peerDependencies: postcss: ^8.4 - '@csstools/postcss-text-decoration-shorthand@4.0.2': - resolution: {integrity: sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==} + '@csstools/postcss-text-decoration-shorthand@4.0.3': + resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -600,8 +651,8 @@ packages: '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/dom@1.7.3': - resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} @@ -833,8 +884,8 @@ packages: cpu: [x64] os: [win32] - '@internationalized/date@3.8.2': - resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} + '@internationalized/date@3.9.0': + resolution: {integrity: sha512-yaN3brAnHRD+4KyyOsJyk49XUvj2wtbNACSqg0bz3u8t2VuzhC8Q5dfRnrSxjnnbDb+ienBnkn1TzQfE154vyg==} '@ioredis/commands@1.3.0': resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} @@ -866,8 +917,17 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@playwright/test@1.54.2': - resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} + '@mdx-js/react@3.1.0': + resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@neoconfetti/react@1.0.0': + resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} + + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} engines: {node: '>=18'} hasBin: true @@ -1193,13 +1253,87 @@ packages: '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@storybook/addon-a11y@9.1.3': + resolution: {integrity: sha512-U+In40S6HCvRN2at+/wn1ECmqFfLa7vPePkR5c9b+Zh2aVNfv+3JbjXfbp29FocTj4ooYsPRYFq7cdzXBjXZ1A==} + peerDependencies: + storybook: ^9.1.3 + + '@storybook/addon-docs@9.1.3': + resolution: {integrity: sha512-iCzuHRyUgir2+ExqPO4ouxm90zW+6dkNuB4lyyFwNU10slJhVT8yGPk8PVOT6LhXMIii+7Hqc4dB0tj+kLOW/A==} + peerDependencies: + storybook: ^9.1.3 + + '@storybook/addon-svelte-csf@5.0.8': + resolution: {integrity: sha512-RJZdlImptVUfidsdZWovdnhPqU7bmvp47rtVV9a71ZaC2gV+XAi4sim0+FWxmyY1DWo3tUQtu82B0xo42lT0XQ==} + peerDependencies: + '@storybook/svelte': ^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 + '@sveltejs/vite-plugin-svelte': ^4.0.0 || ^5.0.0 || ^6.0.0 + storybook: ^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 || ^10.0.0-0 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@storybook/builder-vite@9.1.3': + resolution: {integrity: sha512-bstS/GsVJ5zVkRKAJociocA2omxU4CaNAP58fxS280JiRYgcrRaydDd7vwk6iGJ3xWbzwV0wH8SP54LVNyRY6Q==} + peerDependencies: + storybook: ^9.1.3 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@storybook/csf-plugin@9.1.3': + resolution: {integrity: sha512-wqh+tTCX2WZqVDVjhk/a6upsyYj/Kc85Wf6ywPx4pcFYxQZxiKF/wtuM9yzEpZC6fZHNvlKkzXWvP4wJOnm+zg==} + peerDependencies: + storybook: ^9.1.3 + + '@storybook/csf@0.1.13': + resolution: {integrity: sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==} + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@1.4.0': + resolution: {integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + + '@storybook/react-dom-shim@9.1.3': + resolution: {integrity: sha512-zIgFwZqV8cvE+lzJDcD13rItxoWyYNUWu7eJQAnHz5RnyHhpu6rFgQej7i6J3rPmy9xVe+Rq6XsXgDNs6pIekQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^9.1.3 + + '@storybook/svelte-vite@9.1.3': + resolution: {integrity: sha512-Sex/MZFt8stwHJ99493LvifBQMXZvzrNkLJtOcWKmam1EML3KehlLPJalSIKaJUg6/+6+xnHUhcaW6Qxp7mkAg==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + storybook: ^9.1.3 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@storybook/svelte@9.1.3': + resolution: {integrity: sha512-6/IFxSIEFcQFqqsmjt8c1a0aDvteIHVlJ189qnIZPGV58+2vq1wkF96nRYv70L4Jm6Q8Z2s/tlHVcl7xNG8vjw==} + engines: {node: '>=20.0.0'} + peerDependencies: + storybook: ^9.1.3 + svelte: ^5.0.0 + + '@storybook/sveltekit@9.1.3': + resolution: {integrity: sha512-8E6TdHO4CLf8tRutwA+ZGk3N7cd/X3WmmJ0LnJYOCKrCFGTWcwZsU1++37fR4D5LJvl93jBAfthy4K5FfInumQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + storybook: ^9.1.3 + svelte: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + '@sveltejs/acorn-typescript@1.0.5': resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/adapter-node@5.2.14': - resolution: {integrity: sha512-TjJvfw0HZlbBGGAW2vFtdGjdKhqpGW3ZDIz0nzy8Zx6Ki6oFmYTjV5Kwn3LWTsyjbsUSXhfFPCuYop3z1iS9qQ==} + '@sveltejs/adapter-node@5.3.1': + resolution: {integrity: sha512-PSoGfa9atkmuixe7jvuS2tsUohVZF20So87ASzfMRGTTNqEd8s48KAodlv3CzHwq9XO/BM8KsQLpqqsr/6dmuA==} peerDependencies: '@sveltejs/kit': ^2.4.0 @@ -1210,14 +1344,18 @@ packages: svelte: ^5.0.0 vite: '>= 5.0.0' - '@sveltejs/kit@2.29.0': - resolution: {integrity: sha512-gOynQRBThrtF/RjljB8Oybs9VHVmLbk9q7E7ALJT6ImppJtc/yx3sTGiBV64y+lwmagnBCmEMmJ40CVChGy8lA==} + '@sveltejs/kit@2.36.3': + resolution: {integrity: sha512-MVzwZz1GFznEQbL3f0i2v9AIc3lZH01izQj6XfIrthmZAwOzyXJCgXbLRss8vk//HfYsE4w6Tz+ukbf3rScPNQ==} engines: {node: '>=18.13'} hasBin: true peerDependencies: + '@opentelemetry/api': ^1.0.0 '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true '@sveltejs/vite-plugin-svelte-inspector@4.0.1': resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} @@ -1237,6 +1375,23 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.8.0': + resolution: {integrity: sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -1252,6 +1407,12 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/react@19.1.10': + resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1263,8 +1424,8 @@ packages: peerDependencies: svelte: ^5 - '@vercel/og@0.6.8': - resolution: {integrity: sha512-e4kQK9mP8ntpo3dACWirGod/hHv4qO5JMj9a/0a2AZto7b4persj5YP7t1Er372gTtYFTYxNhMx34jRvHooglw==} + '@vercel/og@0.8.5': + resolution: {integrity: sha512-fHqnxfBYcwkamlEgcIzaZqL8IHT09hR7FZL7UdMTdGJyoaBzM/dY6ulO5Swi4ig30FrBJI9I2C+GLV9sb9vexA==} engines: {node: '>=16'} '@vitest/expect@3.2.4': @@ -1311,6 +1472,21 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} + engines: {node: '>=12'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + 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'} @@ -1322,6 +1498,10 @@ packages: assured@1.0.16: resolution: {integrity: sha512-KwttBV8EIJw4/KqRFTJzKELLm9c3d1V9+fefORWv8cJNgKouuCRQ5rvCgjpBwA1AxVwqpR5Y1ePLU5SINJzhQg==} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1332,6 +1512,10 @@ packages: peerDependencies: postcss: ^8.1.0 + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + axios@1.8.4: resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} @@ -1346,8 +1530,12 @@ packages: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} - bits-ui@2.9.2: - resolution: {integrity: sha512-GGbyr4oVKtHin//Q0AhlygkasmfWt328VjsnmB3sP+h8Sh+Eyghm+1AQ8o+xQMDCYbdL35JZ9UZGTZYTMar4Uw==} + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + bits-ui@2.9.4: + resolution: {integrity: sha512-Cqn685P6DDuEyBZT/CWMyS5+8JAnYbctvoEVPcmiut+HUpG3SozVgjoDaUib5VG4ZYUKEi1FPwHxiXo9c6J0PA==} engines: {node: '>=20'} peerDependencies: '@internationalized/date': ^3.8.1 @@ -1402,6 +1590,18 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chromatic@12.2.0: + resolution: {integrity: sha512-GswmBW9ZptAoTns1BMyjbm55Z7EsIJnUvYKdQqXIBZIKbGErmpA+p4c0BYA+nzw5B0M+rb3Iqp1IaH8TFwIQew==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1458,6 +1658,10 @@ packages: resolution: {integrity: sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==} engines: {node: '>=16'} + css-gradient-parser@0.0.17: + resolution: {integrity: sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==} + engines: {node: '>=16'} + css-has-pseudo@7.0.2: resolution: {integrity: sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==} engines: {node: '>=18'} @@ -1484,14 +1688,20 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - cssdb@8.3.1: - resolution: {integrity: sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssdb@8.4.0: + resolution: {integrity: sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -1510,6 +1720,17 @@ packages: supports-color: optional: true + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1521,6 +1742,10 @@ packages: deffy@2.2.5: resolution: {integrity: sha512-6TX2cfIo97eKqWmqgMDAUulCwnveAe3K+4VGsTGPJsL3NtSEnSBFZ3sUXdS4EBhZ8GbdaZBzXQ04ton18dJrug==} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1529,6 +1754,10 @@ packages: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} @@ -1537,8 +1766,14 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} - devalue@5.1.1: - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + devalue@5.3.2: + resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1563,8 +1798,9 @@ packages: electron-to-chromium@1.5.191: resolution: {integrity: sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex-xs@2.0.1: + resolution: {integrity: sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==} + engines: {node: '>=10.0.0'} encoding-sniffer@0.2.1: resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} @@ -1599,6 +1835,14 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es-toolkit@1.39.10: + resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + esbuild@0.25.4: resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} @@ -1614,6 +1858,17 @@ packages: esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrap@1.2.2: + resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} + + esrap@1.4.9: + resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} + esrap@2.1.0: resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} @@ -1654,6 +1909,10 @@ packages: fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + flexsearch@0.8.205: resolution: {integrity: sha512-REFjMqy86DKkCTJ4gIE42c9MVm9t1vUWfEub/8taixYuhvyu4jd4XmFALk5VuKW4GH4VLav8A4BJboTsslHF1w==} @@ -1701,6 +1960,9 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1732,6 +1994,10 @@ packages: resolution: {integrity: sha512-8Aa4NecBBGmTkaAUjcuRYgTPKHCsBEWYmCnvKCL6/bxedehtVVFyZPdXe8DD0Nevd6UWBq85ifUaJ8498lgqNQ==} engines: {node: '>=18.0.0'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -1746,6 +2012,11 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + is-empty-obj@1.0.14: resolution: {integrity: sha512-NE153YABOyMzd97pyD5QyOulWzav99vCMlFzoxJp6BScLTR6E9TrS4JGSGKeK77Ic0tUvbxRqKl2iw++d53X8A==} @@ -1758,12 +2029,22 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + iterate-object@1.3.5: resolution: {integrity: sha512-eL23u8oFooYTq6TtJKjp2RYjZnCkUYQvC0T/6fJfWykXJ3quvdDdzKZ3CEjy8b3JGOvLTjDYMEMIp5243R906A==} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + just-intersect@4.3.0: resolution: {integrity: sha512-XdAiJUmfM7VOoBUh7I4xo+0YYuzCPiV0Xf21oAmR+1j6a/P8KxJUCigZDblmURZmkIWffNziY2sbSaHrJbNcuA==} @@ -1793,11 +2074,18 @@ packages: loupe@3.2.0: resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} - lucide-svelte@0.539.0: - resolution: {integrity: sha512-p4k3GOje/9Si1eIkg1W1OQUhozeja5Ka5shjVpfyP5X2ye+B7sfyMnX3d5D2et+MYJwUFGrMna5MIYgq6bLfqw==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lucide-svelte@0.542.0: + resolution: {integrity: sha512-KxqJycY4EWaGy1zk/7sqEcf48j4YaP9zEujYczzrsw5j9b9b5pjAJ1qGFKZvD7T6xz9reSYAfUAd6Bz62TdqGw==} peerDependencies: svelte: ^3 || ^4 || ^5.0.0-next.42 + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -1816,6 +2104,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -1832,6 +2124,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -1848,6 +2143,10 @@ packages: obj-def@1.0.10: resolution: {integrity: sha512-RJpNUkO+1r/rXTBs82iU4scoC9Q1yp9HZbSk0ldpFe8362S6eTjUjSgTmECa1TtOBIe5pn4pwSzxIiWc8+jmWg==} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -1863,6 +2162,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -1891,13 +2193,13 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - playwright-core@1.54.2: - resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} engines: {node: '>=18'} hasBin: true - playwright@1.54.2: - resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} engines: {node: '>=18'} hasBin: true @@ -1913,8 +2215,8 @@ packages: peerDependencies: postcss: ^8.4.6 - postcss-color-functional-notation@7.0.10: - resolution: {integrity: sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==} + postcss-color-functional-notation@7.0.11: + resolution: {integrity: sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -1955,8 +2257,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-double-position-gradients@6.0.2: - resolution: {integrity: sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==} + postcss-double-position-gradients@6.0.3: + resolution: {integrity: sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -1996,8 +2298,8 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-lab-function@7.0.10: - resolution: {integrity: sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==} + postcss-lab-function@7.0.11: + resolution: {integrity: sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -2055,8 +2357,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@10.2.4: - resolution: {integrity: sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==} + postcss-preset-env@10.3.0: + resolution: {integrity: sha512-khE99iwEbWLzXBVFNsS0QdnfYXDpqH/pxoHFcaCaVlh+e29swc3UyiLSSJ89dTK8e+Si3wNKYDGs6jEMmbE8TQ==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -2089,9 +2391,25 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} + peerDependencies: + react: ^19.1.1 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -2099,6 +2417,14 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + redis-errors@1.2.0: resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} engines: {node: '>=4'} @@ -2140,10 +2466,17 @@ packages: satori-html@0.3.2: resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} - satori@0.12.2: - resolution: {integrity: sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA==} + satori@0.16.0: + resolution: {integrity: sha512-ZvHN3ygzZ8FuxjSNB+mKBiF/NIoqHzlBGbD0MJiT+MvSsFOvotnWOhdTjxKzhHRT2wPC1QbhLzx2q/Y83VhfYQ==} engines: {node: '>=16'} + satori@0.16.2: + resolution: {integrity: sha512-tORnR2UZ1cB9N81WDjx5ZC4ToPmkybnJWyR8N1OC/z+5kWZcG1mcLssJ5WLNBj1lNr2igIFW0bIiugCxRKL/jQ==} + engines: {node: '>=16'} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + schema-dts@1.1.5: resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==} @@ -2186,6 +2519,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2195,9 +2532,26 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + storybook@9.1.3: + resolution: {integrity: sha512-Sm+qP3iGb/QKx/jTYdfE0mIeTmA2HF+5k9fD70S9oOJq3F9UdW8MLgs+5PE+E/xAfDjZU4OWAKEOyA6EYIvQHg==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} @@ -2211,6 +2565,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svelte-ast-print@0.4.2: + resolution: {integrity: sha512-hRHHufbJoArFmDYQKCpCvc0xUuIEfwYksvyLYEQyH+1xb5LD5sM/IthfooCdXZQtOIqXz6xm7NmaqdfwG4kh6w==} + engines: {node: '>=18'} + peerDependencies: + svelte: ^5.0.0 + svelte-check@4.3.1: resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==} engines: {node: '>= 18.0.0'} @@ -2282,12 +2642,18 @@ packages: peerDependencies: svelte: ^5.30.2 + svelte2tsx@0.7.42: + resolution: {integrity: sha512-PSNrKS16aVdAajoFjpF5M0t6TA7ha7GcKbBajD9RG3M+vooAuvLnWAGUSC6eJL4zEOVbOWKtcS2BuY4rxPljoA==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + svelte@4.2.20: resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==} engines: {node: '>=16'} - svelte@5.38.1: - resolution: {integrity: sha512-fO6CLDfJYWHgfo6lQwkQU2vhCiHc2MBl6s3vEhK+sSZru17YL4R5s1v14ndRpqKAIkq8nCz6MTk1yZbESZWeyQ==} + svelte@5.38.5: + resolution: {integrity: sha512-4Go68OcH6VL4plTJMxry8ZQFxnZ8pu2EA5nNPxNHOUgCd/0lo00JZh8wnAQ2mdEK09GSYuumG+14Egk7thd6Lw==} engines: {node: '>=18'} tabbable@6.2.0: @@ -2296,6 +2662,9 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -2326,12 +2695,20 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} @@ -2350,9 +2727,17 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unpic@4.1.2: resolution: {integrity: sha512-sau6i25EUxumNIL7e0kDpPWkVw3yxghLYcEwxPvm08263UfABDxtUJPT3H55z7W15cVXJB/PEhw4z6Oc+idWCA==} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -2454,6 +2839,9 @@ packages: jsdom: optional: true + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -2467,74 +2855,110 @@ packages: engines: {node: '>=8'} hasBin: true + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + yaml@2.7.0: resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true - yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} snapshots: + '@adobe/css-tools@4.4.4': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@biomejs/biome@2.1.4': + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/runtime@7.28.3': {} + + '@biomejs/biome@2.2.2': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.1.4 - '@biomejs/cli-darwin-x64': 2.1.4 - '@biomejs/cli-linux-arm64': 2.1.4 - '@biomejs/cli-linux-arm64-musl': 2.1.4 - '@biomejs/cli-linux-x64': 2.1.4 - '@biomejs/cli-linux-x64-musl': 2.1.4 - '@biomejs/cli-win32-arm64': 2.1.4 - '@biomejs/cli-win32-x64': 2.1.4 + '@biomejs/cli-darwin-arm64': 2.2.2 + '@biomejs/cli-darwin-x64': 2.2.2 + '@biomejs/cli-linux-arm64': 2.2.2 + '@biomejs/cli-linux-arm64-musl': 2.2.2 + '@biomejs/cli-linux-x64': 2.2.2 + '@biomejs/cli-linux-x64-musl': 2.2.2 + '@biomejs/cli-win32-arm64': 2.2.2 + '@biomejs/cli-win32-x64': 2.2.2 - '@biomejs/cli-darwin-arm64@2.1.4': + '@biomejs/cli-darwin-arm64@2.2.2': optional: true - '@biomejs/cli-darwin-x64@2.1.4': + '@biomejs/cli-darwin-x64@2.2.2': optional: true - '@biomejs/cli-linux-arm64-musl@2.1.4': + '@biomejs/cli-linux-arm64-musl@2.2.2': optional: true - '@biomejs/cli-linux-arm64@2.1.4': + '@biomejs/cli-linux-arm64@2.2.2': optional: true - '@biomejs/cli-linux-x64-musl@2.1.4': + '@biomejs/cli-linux-x64-musl@2.2.2': optional: true - '@biomejs/cli-linux-x64@2.1.4': + '@biomejs/cli-linux-x64@2.2.2': optional: true - '@biomejs/cli-win32-arm64@2.1.4': + '@biomejs/cli-win32-arm64@2.2.2': optional: true - '@biomejs/cli-win32-x64@2.1.4': + '@biomejs/cli-win32-x64@2.2.2': optional: true + '@chromatic-com/storybook@4.1.1(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))': + dependencies: + '@neoconfetti/react': 1.0.0 + chromatic: 12.2.0 + filesize: 10.1.6 + jsonfile: 6.2.0 + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/color-helpers@5.0.2': {} + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: - '@csstools/color-helpers': 5.0.2 + '@csstools/color-helpers': 5.1.0 '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 @@ -2550,44 +2974,62 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-alpha-function@1.0.0(postcss@8.5.6)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) + '@csstools/utilities': 2.0.0(postcss@8.5.6) + postcss: 8.5.6 + '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.6)': dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) postcss: 8.5.6 postcss-selector-parser: 7.1.0 - '@csstools/postcss-color-function@4.0.10(postcss@8.5.6)': + '@csstools/postcss-color-function-display-p3-linear@1.0.0(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-color-mix-function@3.0.10(postcss@8.5.6)': + '@csstools/postcss-color-function@4.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-color-mix-variadic-function-arguments@1.0.0(postcss@8.5.6)': + '@csstools/postcss-color-mix-function@3.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-content-alt-text@2.0.6(postcss@8.5.6)': + '@csstools/postcss-color-mix-variadic-function-arguments@1.0.1(postcss@8.5.6)': + dependencies: + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) + '@csstools/utilities': 2.0.0(postcss@8.5.6) + postcss: 8.5.6 + + '@csstools/postcss-content-alt-text@2.0.7(postcss@8.5.6)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 @@ -2604,34 +3046,34 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@2.0.10(postcss@8.5.6)': + '@csstools/postcss-gamut-mapping@2.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.6 - '@csstools/postcss-gradients-interpolation-method@5.0.10(postcss@8.5.6)': + '@csstools/postcss-gradients-interpolation-method@5.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-hwb-function@4.0.10(postcss@8.5.6)': + '@csstools/postcss-hwb-function@4.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-ic-unit@4.0.2(postcss@8.5.6)': + '@csstools/postcss-ic-unit@4.0.3(postcss@8.5.6)': dependencies: - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -2646,11 +3088,11 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 7.1.0 - '@csstools/postcss-light-dark-function@2.0.9(postcss@8.5.6)': + '@csstools/postcss-light-dark-function@2.0.10(postcss@8.5.6)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 @@ -2703,16 +3145,16 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@4.0.10(postcss@8.5.6)': + '@csstools/postcss-oklab-function@4.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - '@csstools/postcss-progressive-custom-properties@4.1.0(postcss@8.5.6)': + '@csstools/postcss-progressive-custom-properties@4.2.0(postcss@8.5.6)': dependencies: postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -2724,12 +3166,12 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.6 - '@csstools/postcss-relative-color-syntax@3.0.10(postcss@8.5.6)': + '@csstools/postcss-relative-color-syntax@3.0.11(postcss@8.5.6)': dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 @@ -2752,9 +3194,9 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.6 - '@csstools/postcss-text-decoration-shorthand@4.0.2(postcss@8.5.6)': + '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.6)': dependencies: - '@csstools/color-helpers': 5.0.2 + '@csstools/color-helpers': 5.1.0 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -2870,7 +3312,7 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.3': + '@floating-ui/dom@1.7.4': dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 @@ -3038,7 +3480,7 @@ snapshots: '@img/sharp-win32-x64@0.34.3': optional: true - '@internationalized/date@3.8.2': + '@internationalized/date@3.9.0': dependencies: '@swc/helpers': 0.5.17 @@ -3076,9 +3518,17 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@playwright/test@1.54.2': + '@mdx-js/react@3.1.0(@types/react@19.1.10)(react@19.1.1)': dependencies: - playwright: 1.54.2 + '@types/mdx': 2.0.13 + '@types/react': 19.1.10 + react: 19.1.1 + + '@neoconfetti/react@1.0.0': {} + + '@playwright/test@1.55.0': + dependencies: + playwright: 1.55.0 '@polka/url@1.0.0-next.29': {} @@ -3295,6 +3745,101 @@ snapshots: '@standard-schema/spec@1.0.0': {} + '@storybook/addon-a11y@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))': + dependencies: + '@storybook/global': 5.0.0 + axe-core: 4.10.3 + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + + '@storybook/addon-docs@9.1.3(@types/react@19.1.10)(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@19.1.10)(react@19.1.1) + '@storybook/csf-plugin': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) + '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@storybook/react-dom-shim': 9.1.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-svelte-csf@5.0.8(@storybook/svelte@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5))(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': + dependencies: + '@storybook/csf': 0.1.13 + '@storybook/svelte': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) + dedent: 1.6.0 + es-toolkit: 1.39.10 + esrap: 1.4.9 + magic-string: 0.30.17 + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + svelte: 5.38.5 + svelte-ast-print: 0.4.2(svelte@5.38.5) + vite: 6.3.5(yaml@2.7.0) + zimmerframe: 1.1.2 + transitivePeerDependencies: + - babel-plugin-macros + + '@storybook/builder-vite@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(vite@6.3.5(yaml@2.7.0))': + dependencies: + '@storybook/csf-plugin': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0))) + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + ts-dedent: 2.2.0 + vite: 6.3.5(yaml@2.7.0) + + '@storybook/csf-plugin@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))': + dependencies: + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + unplugin: 1.16.1 + + '@storybook/csf@0.1.13': + dependencies: + type-fest: 2.19.0 + + '@storybook/global@5.0.0': {} + + '@storybook/icons@1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + + '@storybook/react-dom-shim@9.1.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))': + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + + '@storybook/svelte-vite@9.1.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': + dependencies: + '@storybook/builder-vite': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(vite@6.3.5(yaml@2.7.0)) + '@storybook/svelte': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) + magic-string: 0.30.17 + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + svelte: 5.38.5 + svelte2tsx: 0.7.42(svelte@5.38.5)(typescript@5.9.2) + typescript: 5.9.2 + vite: 6.3.5(yaml@2.7.0) + + '@storybook/svelte@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)': + dependencies: + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + svelte: 5.38.5 + ts-dedent: 2.2.0 + type-fest: 2.19.0 + + '@storybook/sveltekit@9.1.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': + dependencies: + '@storybook/builder-vite': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(vite@6.3.5(yaml@2.7.0)) + '@storybook/svelte': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5) + '@storybook/svelte-vite': 9.1.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) + storybook: 9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)) + svelte: 5.38.5 + vite: 6.3.5(yaml@2.7.0) + transitivePeerDependencies: + - '@sveltejs/vite-plugin-svelte' + '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.1)': dependencies: acorn: 8.14.1 @@ -3303,36 +3848,36 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-node@5.2.14(@sveltejs/kit@2.29.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))': + '@sveltejs/adapter-node@5.3.1(@sveltejs/kit@2.36.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))': dependencies: '@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8) '@rollup/plugin-json': 6.1.0(rollup@4.34.8) '@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.8) - '@sveltejs/kit': 2.29.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + '@sveltejs/kit': 2.36.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) rollup: 4.34.8 - '@sveltejs/enhanced-img@0.5.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(rollup@4.34.8)(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0))': + '@sveltejs/enhanced-img@0.5.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(rollup@4.34.8)(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) magic-string: 0.30.17 sharp: 0.34.3 - svelte: 5.38.1 - svelte-parse-markup: 0.1.5(svelte@5.38.1) + svelte: 5.38.5 + svelte-parse-markup: 0.1.5(svelte@5.38.5) vite: 6.3.5(yaml@2.7.0) vite-imagetools: 7.1.1(rollup@4.34.8) zimmerframe: 1.1.2 transitivePeerDependencies: - rollup - '@sveltejs/kit@2.29.0(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0))': + '@sveltejs/kit@2.36.3(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 - devalue: 5.1.1 + devalue: 5.3.2 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.17 @@ -3340,26 +3885,26 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.1 - svelte: 5.38.1 + svelte: 5.38.5 vite: 6.3.5(yaml@2.7.0) - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) debug: 4.4.1 - svelte: 5.38.1 + svelte: 5.38.5 vite: 6.3.5(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.1)(vite@6.3.5(yaml@2.7.0)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)))(svelte@5.38.5)(vite@6.3.5(yaml@2.7.0)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.38.1 + svelte: 5.38.5 vite: 6.3.5(yaml@2.7.0) vitefu: 1.1.1(vite@6.3.5(yaml@2.7.0)) transitivePeerDependencies: @@ -3369,6 +3914,32 @@ snapshots: dependencies: tslib: 2.8.1 + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.28.3 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.8.0': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@types/aria-query@5.0.4': {} + '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 @@ -3381,23 +3952,28 @@ snapshots: '@types/estree@1.0.7': {} + '@types/mdx@2.0.13': {} + + '@types/react@19.1.10': + dependencies: + csstype: 3.1.3 + '@types/resolve@1.20.2': {} '@unpic/core@1.0.1': dependencies: unpic: 4.1.2 - '@unpic/svelte@1.0.0(svelte@5.38.1)': + '@unpic/svelte@1.0.0(svelte@5.38.5)': dependencies: '@unpic/core': 1.0.1 style-object-to-css-string: 1.1.3 - svelte: 5.38.1 + svelte: 5.38.5 - '@vercel/og@0.6.8': + '@vercel/og@0.8.5': dependencies: '@resvg/resvg-wasm': 2.4.0 - satori: 0.12.2 - yoga-wasm-web: 0.3.3 + satori: 0.16.0 '@vitest/expect@3.2.4': dependencies: @@ -3441,9 +4017,9 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 - '@zerodevx/svelte-img@2.1.2(rollup@4.34.8)(svelte@5.38.1)': + '@zerodevx/svelte-img@2.1.2(rollup@4.34.8)(svelte@5.38.5)': dependencies: - svelte: 5.38.1 + svelte: 5.38.5 vite-imagetools: 6.2.9(rollup@4.34.8) transitivePeerDependencies: - rollup @@ -3452,6 +4028,16 @@ snapshots: acorn@8.15.0: {} + ansi-regex@5.0.1: {} + + ansi-regex@6.2.0: {} + + ansi-styles@5.2.0: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + aria-query@5.3.2: {} assertion-error@2.0.1: {} @@ -3461,6 +4047,10 @@ snapshots: noop6: 1.0.10 sliced: 1.0.1 + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + asynckit@0.4.0: {} autoprefixer@10.4.21(postcss@8.5.6): @@ -3473,6 +4063,8 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 + axe-core@4.10.3: {} + axios@1.8.4: dependencies: follow-redirects: 1.15.9 @@ -3491,15 +4083,19 @@ snapshots: base64-js@0.0.8: {} - bits-ui@2.9.2(@internationalized/date@3.8.2)(svelte@5.38.1): + better-opn@3.0.2: + dependencies: + open: 8.4.2 + + bits-ui@2.9.4(@internationalized/date@3.9.0)(svelte@5.38.5): dependencies: '@floating-ui/core': 1.7.3 - '@floating-ui/dom': 1.7.3 - '@internationalized/date': 3.8.2 + '@floating-ui/dom': 1.7.4 + '@internationalized/date': 3.9.0 esm-env: 1.2.2 - runed: 0.29.2(svelte@5.38.1) - svelte: 5.38.1 - svelte-toolbelt: 0.9.3(svelte@5.38.1) + runed: 0.29.2(svelte@5.38.5) + svelte: 5.38.5 + svelte-toolbelt: 0.9.3(svelte@5.38.5) tabbable: 6.2.0 boolbase@1.0.0: {} @@ -3573,6 +4169,8 @@ snapshots: dependencies: readdirp: 4.1.2 + chromatic@12.2.0: {} + clsx@2.1.1: {} cluster-key-slot@1.1.2: {} @@ -3622,6 +4220,8 @@ snapshots: css-gradient-parser@0.0.16: {} + css-gradient-parser@0.0.17: {} + css-has-pseudo@7.0.2(postcss@8.5.6): dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) @@ -3654,10 +4254,14 @@ snapshots: css-what@6.2.2: {} - cssdb@8.3.1: {} + css.escape@1.5.1: {} + + cssdb@8.4.0: {} cssesc@3.0.0: {} + csstype@3.1.3: {} + debug@4.4.0: dependencies: ms: 2.1.3 @@ -3666,6 +4270,10 @@ snapshots: dependencies: ms: 2.1.3 + dedent-js@1.0.1: {} + + dedent@1.6.0: {} + deep-eql@5.0.2: {} deepmerge@4.3.1: {} @@ -3674,15 +4282,23 @@ snapshots: dependencies: typpy: 2.4.0 + define-lazy-prop@2.0.0: {} + delayed-stream@1.0.0: {} denque@2.1.0: {} + dequal@2.0.3: {} + detect-libc@2.0.3: {} detect-libc@2.0.4: {} - devalue@5.1.1: {} + devalue@5.3.2: {} + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} dom-serializer@2.0.0: dependencies: @@ -3712,7 +4328,7 @@ snapshots: electron-to-chromium@1.5.191: {} - emoji-regex@10.4.0: {} + emoji-regex-xs@2.0.1: {} encoding-sniffer@0.2.1: dependencies: @@ -3746,6 +4362,15 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es-toolkit@1.39.10: {} + + esbuild-register@3.6.0(esbuild@0.25.4): + dependencies: + debug: 4.4.1 + esbuild: 0.25.4 + transitivePeerDependencies: + - supports-color + esbuild@0.25.4: optionalDependencies: '@esbuild/aix-ppc64': 0.25.4 @@ -3780,6 +4405,17 @@ snapshots: esm-env@1.2.2: {} + esprima@4.0.1: {} + + esrap@1.2.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.7 + + esrap@1.4.9: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + esrap@2.1.0: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -3806,6 +4442,8 @@ snapshots: fflate@0.7.4: {} + filesize@10.1.6: {} + flexsearch@0.8.205: {} follow-redirects@1.15.9: {} @@ -3851,6 +4489,9 @@ snapshots: gopd@1.2.0: {} + graceful-fs@4.2.11: + optional: true + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -3880,6 +4521,8 @@ snapshots: imagetools-core@7.1.0: {} + indent-string@4.0.0: {} + inline-style-parser@0.2.4: {} ioredis@5.7.0: @@ -3902,6 +4545,8 @@ snapshots: dependencies: hasown: 2.0.2 + is-docker@2.2.1: {} + is-empty-obj@1.0.14: {} is-module@1.0.0: {} @@ -3914,10 +4559,22 @@ snapshots: dependencies: '@types/estree': 1.0.7 + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + iterate-object@1.3.5: {} + js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + just-intersect@4.3.0: {} kleur@4.1.5: {} @@ -3939,9 +4596,15 @@ snapshots: loupe@3.2.0: {} - lucide-svelte@0.539.0(svelte@5.38.1): + lower-case@2.0.2: dependencies: - svelte: 5.38.1 + tslib: 2.8.1 + + lucide-svelte@0.542.0(svelte@5.38.5): + dependencies: + svelte: 5.38.5 + + lz-string@1.5.0: {} magic-string@0.30.17: dependencies: @@ -3957,6 +4620,8 @@ snapshots: dependencies: mime-db: 1.52.0 + min-indent@1.0.1: {} + mri@1.2.0: {} mrmime@2.0.1: {} @@ -3965,6 +4630,11 @@ snapshots: nanoid@3.3.11: {} + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + node-releases@2.0.19: {} noop6@1.0.10: {} @@ -3979,6 +4649,12 @@ snapshots: dependencies: deffy: 2.2.5 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + pako@0.2.9: {} parse-css-color@0.2.1: @@ -3999,6 +4675,11 @@ snapshots: dependencies: entities: 6.0.1 + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + path-parse@1.0.7: {} pathe@2.0.3: {} @@ -4019,11 +4700,11 @@ snapshots: pify@2.3.0: {} - playwright-core@1.54.2: {} + playwright-core@1.55.0: {} - playwright@1.54.2: + playwright@1.55.0: dependencies: - playwright-core: 1.54.2 + playwright-core: 1.55.0 optionalDependencies: fsevents: 2.3.2 @@ -4037,12 +4718,12 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@7.0.10(postcss@8.5.6): + postcss-color-functional-notation@7.0.11(postcss@8.5.6): dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 @@ -4088,9 +4769,9 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 7.1.0 - postcss-double-position-gradients@6.0.2(postcss@8.5.6): + postcss-double-position-gradients@6.0.3(postcss@8.5.6): dependencies: - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -4126,12 +4807,12 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.10 - postcss-lab-function@7.0.10(postcss@8.5.6): + postcss-lab-function@7.0.11(postcss@8.5.6): dependencies: - '@csstools/css-color-parser': 3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 @@ -4172,22 +4853,24 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-preset-env@10.2.4(postcss@8.5.6): + postcss-preset-env@10.3.0(postcss@8.5.6): dependencies: + '@csstools/postcss-alpha-function': 1.0.0(postcss@8.5.6) '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.6) - '@csstools/postcss-color-function': 4.0.10(postcss@8.5.6) - '@csstools/postcss-color-mix-function': 3.0.10(postcss@8.5.6) - '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.0(postcss@8.5.6) - '@csstools/postcss-content-alt-text': 2.0.6(postcss@8.5.6) + '@csstools/postcss-color-function': 4.0.11(postcss@8.5.6) + '@csstools/postcss-color-function-display-p3-linear': 1.0.0(postcss@8.5.6) + '@csstools/postcss-color-mix-function': 3.0.11(postcss@8.5.6) + '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.1(postcss@8.5.6) + '@csstools/postcss-content-alt-text': 2.0.7(postcss@8.5.6) '@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.6) '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.6) - '@csstools/postcss-gamut-mapping': 2.0.10(postcss@8.5.6) - '@csstools/postcss-gradients-interpolation-method': 5.0.10(postcss@8.5.6) - '@csstools/postcss-hwb-function': 4.0.10(postcss@8.5.6) - '@csstools/postcss-ic-unit': 4.0.2(postcss@8.5.6) + '@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.6) + '@csstools/postcss-gradients-interpolation-method': 5.0.11(postcss@8.5.6) + '@csstools/postcss-hwb-function': 4.0.11(postcss@8.5.6) + '@csstools/postcss-ic-unit': 4.0.3(postcss@8.5.6) '@csstools/postcss-initial': 2.0.1(postcss@8.5.6) '@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.6) - '@csstools/postcss-light-dark-function': 2.0.9(postcss@8.5.6) + '@csstools/postcss-light-dark-function': 2.0.10(postcss@8.5.6) '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.6) '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.6) '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.6) @@ -4197,14 +4880,14 @@ snapshots: '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.6) '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.6) '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.6) - '@csstools/postcss-oklab-function': 4.0.10(postcss@8.5.6) - '@csstools/postcss-progressive-custom-properties': 4.1.0(postcss@8.5.6) + '@csstools/postcss-oklab-function': 4.0.11(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6) '@csstools/postcss-random-function': 2.0.1(postcss@8.5.6) - '@csstools/postcss-relative-color-syntax': 3.0.10(postcss@8.5.6) + '@csstools/postcss-relative-color-syntax': 3.0.11(postcss@8.5.6) '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.6) '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.6) '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.6) - '@csstools/postcss-text-decoration-shorthand': 4.0.2(postcss@8.5.6) + '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.6) '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6) '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6) autoprefixer: 10.4.21(postcss@8.5.6) @@ -4212,24 +4895,24 @@ snapshots: css-blank-pseudo: 7.0.1(postcss@8.5.6) css-has-pseudo: 7.0.2(postcss@8.5.6) css-prefers-color-scheme: 10.0.0(postcss@8.5.6) - cssdb: 8.3.1 + cssdb: 8.4.0 postcss: 8.5.6 postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.6) postcss-clamp: 4.1.0(postcss@8.5.6) - postcss-color-functional-notation: 7.0.10(postcss@8.5.6) + postcss-color-functional-notation: 7.0.11(postcss@8.5.6) postcss-color-hex-alpha: 10.0.0(postcss@8.5.6) postcss-color-rebeccapurple: 10.0.0(postcss@8.5.6) postcss-custom-media: 11.0.6(postcss@8.5.6) postcss-custom-properties: 14.0.6(postcss@8.5.6) postcss-custom-selectors: 8.0.5(postcss@8.5.6) postcss-dir-pseudo-class: 9.0.1(postcss@8.5.6) - postcss-double-position-gradients: 6.0.2(postcss@8.5.6) + postcss-double-position-gradients: 6.0.3(postcss@8.5.6) postcss-focus-visible: 10.0.1(postcss@8.5.6) postcss-focus-within: 9.0.1(postcss@8.5.6) postcss-font-variant: 5.0.0(postcss@8.5.6) postcss-gap-properties: 6.0.0(postcss@8.5.6) postcss-image-set-function: 7.0.0(postcss@8.5.6) - postcss-lab-function: 7.0.10(postcss@8.5.6) + postcss-lab-function: 7.0.11(postcss@8.5.6) postcss-logical: 8.1.0(postcss@8.5.6) postcss-nesting: 13.0.2(postcss@8.5.6) postcss-opacity-percentage: 3.0.0(postcss@8.5.6) @@ -4267,14 +4950,42 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + proxy-from-env@1.1.0: {} + react-dom@19.1.1(react@19.1.1): + dependencies: + react: 19.1.1 + scheduler: 0.26.0 + + react-is@17.0.2: {} + + react@19.1.1: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 readdirp@4.1.2: {} + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + redis-errors@1.2.0: {} redis-parser@3.0.0: @@ -4340,10 +5051,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.40.2 fsevents: 2.3.3 - runed@0.29.2(svelte@5.38.1): + runed@0.29.2(svelte@5.38.5): dependencies: esm-env: 1.2.2 - svelte: 5.38.1 + svelte: 5.38.5 sade@1.8.1: dependencies: @@ -4355,19 +5066,35 @@ snapshots: dependencies: ultrahtml: 1.5.3 - satori@0.12.2: + satori@0.16.0: dependencies: '@shuding/opentype.js': 1.4.0-beta.0 css-background-parser: 0.1.0 css-box-shadow: 1.0.0-3 css-gradient-parser: 0.0.16 css-to-react-native: 3.2.0 - emoji-regex: 10.4.0 + emoji-regex-xs: 2.0.1 escape-html: 1.0.3 linebreak: 1.1.0 parse-css-color: 0.2.1 postcss-value-parser: 4.2.0 - yoga-wasm-web: 0.3.3 + yoga-layout: 3.2.1 + + satori@0.16.2: + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-gradient-parser: 0.0.17 + css-to-react-native: 3.2.0 + emoji-regex-xs: 2.0.1 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-layout: 3.2.1 + + scheduler@0.26.0: {} schema-dts@1.1.5: {} @@ -4465,14 +5192,46 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.6.1: {} + stackback@0.0.2: {} standard-as-callback@2.1.0: {} std-env@3.9.0: {} + storybook@9.1.3(@testing-library/dom@10.4.1)(vite@6.3.5(yaml@2.7.0)): + dependencies: + '@storybook/global': 5.0.0 + '@testing-library/jest-dom': 6.8.0 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.3.5(yaml@2.7.0)) + '@vitest/spy': 3.2.4 + better-opn: 3.0.2 + esbuild: 0.25.4 + esbuild-register: 3.6.0(esbuild@0.25.4) + recast: 0.23.11 + semver: 7.7.2 + ws: 8.18.3 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - msw + - supports-color + - utf-8-validate + - vite + string.prototype.codepointat@0.2.1: {} + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.2.0 + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-literal@3.0.0: dependencies: js-tokens: 9.0.1 @@ -4485,34 +5244,40 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.1(picomatch@4.0.2)(svelte@5.38.1)(typescript@5.9.2): + svelte-ast-print@0.4.2(svelte@5.38.5): + dependencies: + esrap: 1.2.2 + svelte: 5.38.5 + zimmerframe: 1.1.2 + + svelte-check@4.3.1(picomatch@4.0.2)(svelte@5.38.5)(typescript@5.9.2): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.3 fdir: 6.4.4(picomatch@4.0.2) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.38.1 + svelte: 5.38.5 typescript: 5.9.2 transitivePeerDependencies: - picomatch - svelte-local-storage-store@0.6.4(svelte@5.38.1): + svelte-local-storage-store@0.6.4(svelte@5.38.5): dependencies: - svelte: 5.38.1 + svelte: 5.38.5 - svelte-meta-tags@4.4.0(svelte@5.38.1): + svelte-meta-tags@4.4.0(svelte@5.38.5): dependencies: schema-dts: 1.1.5 - svelte: 5.38.1 + svelte: 5.38.5 - svelte-parse-markup@0.1.5(svelte@5.38.1): + svelte-parse-markup@0.1.5(svelte@5.38.5): dependencies: - svelte: 5.38.1 + svelte: 5.38.5 - svelte-preprocess@6.0.3(postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.7.0))(postcss@8.5.6)(svelte@5.38.1)(typescript@5.9.2): + svelte-preprocess@6.0.3(postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.7.0))(postcss@8.5.6)(svelte@5.38.5)(typescript@5.9.2): dependencies: - svelte: 5.38.1 + svelte: 5.38.5 optionalDependencies: postcss: 8.5.6 postcss-load-config: 6.0.1(postcss@8.5.6)(yaml@2.7.0) @@ -4523,12 +5288,19 @@ snapshots: svelte: 4.2.20 tslib: 2.7.0 - svelte-toolbelt@0.9.3(svelte@5.38.1): + svelte-toolbelt@0.9.3(svelte@5.38.5): dependencies: clsx: 2.1.1 - runed: 0.29.2(svelte@5.38.1) + runed: 0.29.2(svelte@5.38.5) style-to-object: 1.0.9 - svelte: 5.38.1 + svelte: 5.38.5 + + svelte2tsx@0.7.42(svelte@5.38.5)(typescript@5.9.2): + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.38.5 + typescript: 5.9.2 svelte@4.2.20: dependencies: @@ -4547,7 +5319,7 @@ snapshots: magic-string: 0.30.17 periscopic: 3.1.0 - svelte@5.38.1: + svelte@5.38.5: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.0 @@ -4568,6 +5340,8 @@ snapshots: tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -4590,10 +5364,14 @@ snapshots: totalist@3.0.1: {} + ts-dedent@2.2.0: {} + tslib@2.7.0: {} tslib@2.8.1: {} + type-fest@2.19.0: {} + typescript@5.9.2: {} typpy@2.4.0: @@ -4609,8 +5387,15 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 + universalify@2.0.1: {} + unpic@4.1.2: {} + unplugin@1.16.1: + dependencies: + acorn: 8.15.0 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -4718,6 +5503,8 @@ snapshots: - tsx - yaml + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 @@ -4729,9 +5516,11 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + ws@8.18.3: {} + yaml@2.7.0: optional: true - yoga-wasm-web@0.3.3: {} + yoga-layout@3.2.1: {} zimmerframe@1.1.2: {} diff --git a/src/ambient.d.ts b/src/ambient.d.ts index 4de9fb8..f319e2d 100644 --- a/src/ambient.d.ts +++ b/src/ambient.d.ts @@ -1,6 +1,14 @@ // Stop warnings of all imports from your image assets directory. -declare module '$lib/assets/*' { - const image: Record; - export default image; +// Enhanced images (?enhanced) provide a Picture for +declare module '$lib/assets/*?enhanced' { + import type { Picture } from '@sveltejs/enhanced-img'; + const picture: Picture; + export default picture; +} + +// Plain asset imports fallback to string URLs +declare module '$lib/assets/*' { + const src: string; + export default src; } diff --git a/src/app.postcss b/src/app.postcss deleted file mode 100644 index 2e1e086..0000000 --- a/src/app.postcss +++ /dev/null @@ -1 +0,0 @@ -/* Write your global styles here, in PostCSS syntax */ diff --git a/src/index.test.ts b/src/index.test.ts deleted file mode 100644 index e07cbbd..0000000 --- a/src/index.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, it, expect } from 'vitest'; - -describe('sum test', () => { - it('adds 1 + 2 to equal 3', () => { - expect(1 + 2).toBe(3); - }); -}); diff --git a/src/lib/api.test.ts b/src/lib/api.test.ts new file mode 100644 index 0000000..fe1d05b --- /dev/null +++ b/src/lib/api.test.ts @@ -0,0 +1,145 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +// Hoisted mocks to satisfy Vitest's module mock hoisting +const hoisted = vi.hoisted(() => { + return { + redisMock: { + get: vi.fn(), + set: vi.fn(), + ttl: vi.fn(), + }, + } as const; +}); + +// Mock env constants used by fetchArticlesApi +vi.mock('$env/static/private', () => ({ + PAGE_SIZE: '10', + USE_REDIS_CACHE: 'true', // enable cache to test both hit/miss paths with stubs + WALLABAG_CLIENT_ID: 'client-id', + WALLABAG_CLIENT_SECRET: 'client-secret', + WALLABAG_PASSWORD: 'password', + WALLABAG_URL: 'https://wallabag.example', + WALLABAG_USERNAME: 'username', +})); + +// Mock redis client so no real connection is used +vi.mock('$lib/server/redis', () => ({ + redis: hoisted.redisMock, +})); + +// Helper to mock global fetch responses +function makeJsonResponse(data: T, headers: Record = {}) { + return { + ok: true, + status: 200, + statusText: 'OK', + headers: { get: (k: string) => headers[k.toLowerCase()] ?? null }, + json: async () => data, + } as const; +} + +// Import after mocks are set up +import { fetchArticlesApi } from './api'; + +describe('fetchArticlesApi (unit, mocked)', () => { + beforeEach(() => { + vi.resetAllMocks(); + }); + + it('fetches and maps articles on cache miss, then stores in redis', async () => { + // Cache miss setup + hoisted.redisMock.get.mockResolvedValueOnce(null); + hoisted.redisMock.ttl.mockResolvedValueOnce(0); + + // Mock token fetch + const token = { access_token: 'access-token' } as const; + // Mock entries fetch + const wallabagResponse = { + _embedded: { + items: [ + { + title: 'Great Post', + url: 'https://example.com/post', + domain_name: 'www.example.com', + hashed_url: 'hash123', + reading_time: 7, + preview_picture: 'https://example.com/img.jpg', + created_at: '2024-01-01T00:00:00Z', + updated_at: '2024-01-02T00:00:00Z', + archived_at: null, + tags: [{ slug: 'programming' }], + }, + ], + }, + page: 1, + pages: 5, + total: 100, + limit: 10, + } as const; + + const fetchMock = vi.fn(async (input: unknown) => { + const url = String(input); + if (url.endsWith('/oauth/v2/token')) { + return makeJsonResponse(token); + } + if (url.startsWith('https://wallabag.example/api/entries.json')) { + return makeJsonResponse(wallabagResponse, { 'cache-control': 'max-age=60' }); + } + throw new Error('Unexpected fetch to ' + url); + }); + // @ts-expect-error assign to global + global.fetch = fetchMock; + + const result = await fetchArticlesApi('GET', 'entries', { page: '1', limit: '10' }); + + expect(fetchMock).toHaveBeenCalledTimes(2); + expect(result.currentPage).toBe(1); + expect(result.totalPages).toBe(5); + expect(result.limit).toBe(10); + expect(result.totalArticles).toBe(100); + expect(result.cacheControl).toBe('max-age=60'); + + expect(result.articles.length).toBe(1); + const article = result.articles[0]; + expect(article.title).toBe('Great Post'); + expect(article.url).toBeInstanceOf(URL); + expect(article.url.hostname).toBe('example.com'); + expect(article.domain_name).toBe('example.com'); + + // Stored in Redis with EX for 12 hours + expect(hoisted.redisMock.set).toHaveBeenCalled(); + const setArgs = (hoisted.redisMock.set as unknown as { mock: { calls: unknown[][] } }).mock + .calls[0] as [string, string, 'EX', number]; + expect(setArgs[0]).toContain('perPage=10'); + expect(setArgs[0]).toContain('page=1'); + expect(setArgs[2]).toBe('EX'); + expect(setArgs[3]).toBe(43200); + }); + + it('returns cached response and cacheControl when redis has value (cache hit)', async () => { + const cached = { + articles: [], + currentPage: 2, + totalPages: 3, + limit: 10, + totalArticles: 20, + }; + + hoisted.redisMock.get.mockResolvedValueOnce(JSON.stringify(cached)); + hoisted.redisMock.ttl.mockResolvedValueOnce(321); + + const fetchMock = vi.fn(); + // @ts-expect-error assign to global + global.fetch = fetchMock; + + const result = await fetchArticlesApi('GET', 'entries', { page: '2', limit: '10' }); + + // No network calls on cache hit + expect(fetchMock).not.toHaveBeenCalled(); + expect(result.currentPage).toBe(2); + expect(result.totalPages).toBe(3); + expect(result.limit).toBe(10); + expect(result.totalArticles).toBe(20); + expect(result.cacheControl).toBe('max-age=321'); + }); +}); diff --git a/src/lib/components/Articles.stories.svelte b/src/lib/components/Articles.stories.svelte new file mode 100644 index 0000000..023ffb8 --- /dev/null +++ b/src/lib/components/Articles.stories.svelte @@ -0,0 +1,18 @@ + + + diff --git a/src/lib/components/Articles.svelte b/src/lib/components/Articles.svelte index 22f5c20..44a4370 100644 --- a/src/lib/components/Articles.svelte +++ b/src/lib/components/Articles.svelte @@ -62,7 +62,6 @@ title: `Link to ${article.title}`, target: "_blank", }} - iconData={{ iconClass: "center" }} />

{article.domain_name}

@@ -81,7 +80,7 @@ {/if} {#if page.url.pathname === "/"} - {`${totalArticles} more articles`} {/if} diff --git a/src/lib/components/ArticlesSkeleton.stories.svelte b/src/lib/components/ArticlesSkeleton.stories.svelte new file mode 100644 index 0000000..af8294b --- /dev/null +++ b/src/lib/components/ArticlesSkeleton.stories.svelte @@ -0,0 +1,13 @@ + + + diff --git a/src/lib/components/ArticlesSkeleton.svelte b/src/lib/components/ArticlesSkeleton.svelte index 5f0829a..928b02c 100644 --- a/src/lib/components/ArticlesSkeleton.svelte +++ b/src/lib/components/ArticlesSkeleton.svelte @@ -12,26 +12,22 @@

-

- + Loading domain...

-

- + Loading tags...

diff --git a/src/lib/components/Bandcamp.stories.svelte b/src/lib/components/Bandcamp.stories.svelte new file mode 100644 index 0000000..26950a8 --- /dev/null +++ b/src/lib/components/Bandcamp.stories.svelte @@ -0,0 +1,39 @@ + + + diff --git a/src/lib/components/Bandcamp.svelte b/src/lib/components/Bandcamp.svelte index b4fbdcd..dac0343 100644 --- a/src/lib/components/Bandcamp.svelte +++ b/src/lib/components/Bandcamp.svelte @@ -1,10 +1,10 @@ + + diff --git a/src/lib/components/BandcampAlbum.svelte b/src/lib/components/BandcampAlbum.svelte new file mode 100644 index 0000000..60e8674 --- /dev/null +++ b/src/lib/components/BandcampAlbum.svelte @@ -0,0 +1,45 @@ + + + + + diff --git a/src/lib/components/ContactHub.stories.svelte b/src/lib/components/ContactHub.stories.svelte new file mode 100644 index 0000000..9d7eabc --- /dev/null +++ b/src/lib/components/ContactHub.stories.svelte @@ -0,0 +1,40 @@ + + + diff --git a/src/lib/components/ContactHub.svelte b/src/lib/components/ContactHub.svelte index d7c1705..e1ef638 100644 --- a/src/lib/components/ContactHub.svelte +++ b/src/lib/components/ContactHub.svelte @@ -1,12 +1,12 @@ + + diff --git a/src/lib/components/ExternalLink.svelte b/src/lib/components/ExternalLink.svelte index 25930b4..c7895f5 100644 --- a/src/lib/components/ExternalLink.svelte +++ b/src/lib/components/ExternalLink.svelte @@ -1,28 +1,31 @@ -{#snippet externalLink({ iconData, linkData, textData }: ExternalLinkType)} +{#snippet externalLink({ iconData = { type: 'icon', icon: ExternalLink }, linkData, textData }: ExternalLinkType)} + + {linkData?.title ?? `Open ${linkData?.ariaLabel} externally`} + {@render (icon as any)()} {:else if type === "icon" && icon} {@const Icon = icon} - + {linkData?.title ?? `Open ${linkData?.ariaLabel} externally`} {:else} {@const Icon = ExternalLink} - + {linkData?.title ?? `Open ${linkData?.ariaLabel} externally`} {/if} {/snippet} diff --git a/src/lib/components/LazyImage.stories.svelte b/src/lib/components/LazyImage.stories.svelte new file mode 100644 index 0000000..4bb2fa4 --- /dev/null +++ b/src/lib/components/LazyImage.stories.svelte @@ -0,0 +1,29 @@ + + + diff --git a/src/lib/components/Link.stories.svelte b/src/lib/components/Link.stories.svelte new file mode 100644 index 0000000..3af107f --- /dev/null +++ b/src/lib/components/Link.stories.svelte @@ -0,0 +1,16 @@ + + + + + Go Home + + diff --git a/src/lib/components/Link.svelte b/src/lib/components/Link.svelte index 5c600f3..510dfc5 100644 --- a/src/lib/components/Link.svelte +++ b/src/lib/components/Link.svelte @@ -4,18 +4,12 @@ target?: string; href: string; ariaLabel: string; - children?: import('svelte').Snippet; + children?: import("svelte").Snippet; } - let { - rel = '', - target = '', - href, - ariaLabel, - children - }: Props = $props(); + let { rel = "", target = "", href, ariaLabel, children }: Props = $props(); {@render children?.()} - \ No newline at end of file + diff --git a/src/lib/components/Pagination.stories.svelte b/src/lib/components/Pagination.stories.svelte new file mode 100644 index 0000000..ea18051 --- /dev/null +++ b/src/lib/components/Pagination.stories.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/lib/components/Pagination.svelte b/src/lib/components/Pagination.svelte index 07b7642..8ebb131 100644 --- a/src/lib/components/Pagination.svelte +++ b/src/lib/components/Pagination.svelte @@ -1,7 +1,7 @@ - goto(`${base}/${page}`)}> + goto(`${base}/${page}`)} +> {#snippet children({ pages })} - + {#each pages as page (page.key)} {#if page.type === "ellipsis"} -
...
+
+ ... +
{:else} - - {page.value} - + {#snippet child({ props })} + + {/snippet} {/if} {/each} - + {/snippet} @@ -92,31 +100,28 @@ } :global([data-selected]) { - a { - color: var(--shellYellow); - } + color: var(--shellYellow); } - :global([data-pagination-root]) { - display: flex; - align-content: center; - align-items: center; - justify-items: center; - border: 1px solid var(--grey); - margin: 3rem 0; - border-radius: 5px; - text-align: center; - font-size: 1.5rem; - } + :global([data-pagination-root]) { + display: flex; + align-content: center; + align-items: center; + justify-items: center; + border: 1px solid var(--grey); + margin: 3rem 0; + border-radius: 5px; + text-align: center; + font-size: 1.5rem; + } :global([data-pagination-page]) { padding: 1rem; flex: 1; + border: 0; border-right: 1px solid var(--grey); + background: transparent; text-decoration: none; - - a { - text-decoration: none; - } + cursor: pointer; } - \ No newline at end of file + diff --git a/src/lib/components/Tag.stories.svelte b/src/lib/components/Tag.stories.svelte new file mode 100644 index 0000000..22e3eee --- /dev/null +++ b/src/lib/components/Tag.stories.svelte @@ -0,0 +1,14 @@ + + + diff --git a/src/lib/components/footer/Footer.stories.svelte b/src/lib/components/footer/Footer.stories.svelte new file mode 100644 index 0000000..792953a --- /dev/null +++ b/src/lib/components/footer/Footer.stories.svelte @@ -0,0 +1,12 @@ + + + diff --git a/src/lib/components/footer/index.svelte b/src/lib/components/footer/index.svelte index 7275655..cdf8127 100644 --- a/src/lib/components/footer/index.svelte +++ b/src/lib/components/footer/index.svelte @@ -1,24 +1,30 @@