diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index eadc1c56..f86438d7 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,7 +4,6 @@ about: Suggest an idea or feature for SveltePlot title: '' labels: enhancement assignees: '' - --- **Is your feature request related to a problem? Please describe.** diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..6b12cf9e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,32 @@ +name: Lint Check + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v3 + with: + version: 10 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Run linting + run: pnpm run lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b09c2a09..17ffb221 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,32 +1,32 @@ name: Run Tests on: - push: - branches: [ main ] - pull_request: - branches: [ main ] + push: + branches: [main] + pull_request: + branches: [main] jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Install pnpm - uses: pnpm/action-setup@v3 - with: - version: 10 - run_install: false - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install - - - name: Run Vitest tests - run: pnpm test + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v3 + with: + version: 10 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Run Vitest tests + run: pnpm test diff --git a/config/sidebar.ts b/config/sidebar.ts index 82bfa689..b6f2f6a4 100644 --- a/config/sidebar.ts +++ b/config/sidebar.ts @@ -6,15 +6,15 @@ export default { items: [ { title: 'Getting started', - to: '/getting-started/' + to: '/getting-started' }, { title: 'Why SveltePlot?', - to: '/why-svelteplot/' + to: '/why-svelteplot' } // { // title: 'Introduction', - // to: '/introduction/' + // to: '/introduction' // } ] }, @@ -24,24 +24,24 @@ export default { items: [ { title: 'Plot', - to: '/features/plot/' + to: '/features/plot' }, { title: 'Marks', - to: '/features/marks/' + to: '/features/marks' }, { title: 'Scales', - to: '/features/scales/' + to: '/features/scales' }, { title: 'Transforms', - to: '/features/transforms/' + to: '/features/transforms' }, { - title: 'Faceting', - to: '/features/facets/' + title: 'Facets', + to: '/features/facets' } ] }, @@ -49,46 +49,46 @@ export default { title: 'Marks', collapsible: true, items: [ - { title: 'Area', to: '/marks/area/' }, - { title: 'Arrow', to: '/marks/arrow/' }, - { title: 'Axis', to: '/marks/axis/' }, - { title: 'Bar', to: '/marks/bar/' }, - { title: 'Bollinger', to: '/marks/bollinger/' }, - { title: 'Box', to: '/marks/box/' }, - { title: 'Brush', to: '/marks/brush/' }, - { title: 'Cell', to: '/marks/cell/' }, - { title: 'Custom', to: '/marks/custom/' }, - { title: 'Difference', to: '/marks/difference/' }, - { title: 'Dot', to: '/marks/dot/' }, - { title: 'Frame', to: '/marks/frame/' }, - { title: 'Geo', to: '/marks/geo/' }, - { title: 'Grid', to: '/marks/grid/' }, - { title: 'Line', to: '/marks/line/' }, - { title: 'Link', to: '/marks/link/' }, - { title: 'Pointer', to: '/marks/pointer/' }, - { title: 'Vector', to: '/marks/vector/' }, - { title: 'Rect', to: '/marks/rect/' }, - { title: 'Regression', to: '/marks/regression/' }, - { title: 'Rule', to: '/marks/rule/' }, - { title: 'Text', to: '/marks/text/' }, - { title: 'Tick', to: '/marks/tick/' } + { title: 'Area', to: '/marks/area' }, + { title: 'Arrow', to: '/marks/arrow' }, + { title: 'Axis', to: '/marks/axis' }, + { title: 'Bar', to: '/marks/bar' }, + { title: 'Bollinger', to: '/marks/bollinger' }, + { title: 'Box', to: '/marks/box' }, + { title: 'Brush', to: '/marks/brush' }, + { title: 'Cell', to: '/marks/cell' }, + { title: 'Custom', to: '/marks/custom' }, + { title: 'Difference', to: '/marks/difference' }, + { title: 'Dot', to: '/marks/dot' }, + { title: 'Frame', to: '/marks/frame' }, + { title: 'Geo', to: '/marks/geo' }, + { title: 'Grid', to: '/marks/grid' }, + { title: 'Line', to: '/marks/line' }, + { title: 'Link', to: '/marks/link' }, + { title: 'Pointer', to: '/marks/pointer' }, + { title: 'Rect', to: '/marks/rect' }, + { title: 'Regression', to: '/marks/regression' }, + { title: 'Rule', to: '/marks/rule' }, + { title: 'Text', to: '/marks/text' }, + { title: 'Tick', to: '/marks/tick' }, + { title: 'Vector', to: '/marks/vector' } ] }, { title: 'Transforms', collapsible: true, items: [ - { title: 'Bin', to: '/transforms/bin/' }, - { title: 'Filter', to: '/transforms/filter/' }, - { title: 'Group', to: '/transforms/group/' }, - { title: 'Interval', to: '/transforms/interval/' }, - { title: 'Map', to: '/transforms/map/' }, - { title: 'Normalize', to: '/transforms/normalize/' }, - { title: 'Select', to: '/transforms/select/' }, - { title: 'Shift', to: '/transforms/shift/' }, - { title: 'Sort', to: '/transforms/sort/' }, - { title: 'Stack', to: '/transforms/stack/' }, - { title: 'Window', to: '/transforms/window/' } + { title: 'Bin', to: '/transforms/bin' }, + { title: 'Filter', to: '/transforms/filter' }, + { title: 'Group', to: '/transforms/group' }, + { title: 'Interval', to: '/transforms/interval' }, + { title: 'Map', to: '/transforms/map' }, + { title: 'Normalize', to: '/transforms/normalize' }, + { title: 'Select', to: '/transforms/select' }, + { title: 'Shift', to: '/transforms/shift' }, + { title: 'Sort', to: '/transforms/sort' }, + { title: 'Stack', to: '/transforms/stack' }, + { title: 'Window', to: '/transforms/window' } ] }, { @@ -97,27 +97,27 @@ export default { items: [ { title: 'Markers', - to: '/features/markers/' + to: '/features/markers' }, { title: 'Transforms', - to: '/features/transforms/' + to: '/features/transforms' }, { title: 'Projections', - to: '/features/projections/' + to: '/features/projections' }, { title: 'Interactivity', - to: '/features/interactivity/' + to: '/features/interactivity' }, { title: 'Defaults', - to: '/features/defaults/' + to: '/features/defaults' }, { title: 'Gradients', - to: '/features/gradients/' + to: '/features/gradients' } ] } diff --git a/package.json b/package.json index 4b2d188f..8db0e438 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelteplot", - "version": "0.2.5", + "version": "0.2.6", "license": "ISC", "author": { "name": "Gregor Aisch", @@ -53,13 +53,13 @@ "@sveltejs/adapter-auto": "^6.0.1", "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/eslint-config": "^8.2.0", - "@sveltejs/kit": "^2.21.0", + "@sveltejs/kit": "^2.21.1", "@sveltejs/package": "^2.3.11", "@sveltejs/vite-plugin-svelte": "5.0.3", "@sveltepress/theme-default": "^6.0.3", "@sveltepress/twoslash": "^1.2.2", "@sveltepress/vite": "^1.2.2", - "@testing-library/svelte": "^5.2.7", + "@testing-library/svelte": "^5.2.8", "@testing-library/user-event": "^14.6.1", "@types/d3-array": "^3.2.1", "@types/d3-color": "^3.1.3", @@ -77,9 +77,9 @@ "d3-dsv": "^3.0.1", "d3-fetch": "^3.0.1", "d3-force": "^3.0.0", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "eslint-config-prettier": "^10.1.5", - "eslint-plugin-svelte": "3.7.0", + "eslint-plugin-svelte": "3.9.0", "jsdom": "^26.1.0", "prettier": "^3.5.3", "prettier-plugin-svelte": "^3.4.0", @@ -97,7 +97,7 @@ "typedoc-plugin-markdown": "^4.6.3", "typescript": "^5.8.3", "vite": "^6.3.5", - "vitest": "^3.1.3", + "vitest": "^3.1.4", "vitest-matchmedia-mock": "^2.0.3" }, "types": "./dist/index.d.ts", @@ -116,9 +116,9 @@ "d3-scale-chromatic": "^3.1.0", "d3-shape": "^3.2.0", "d3-time": "^3.1.0", - "es-toolkit": "^1.37.2", + "es-toolkit": "^1.38.0", "fast-equals": "^5.2.2", "merge-deep": "^3.0.3", - "svelte": "5.30.1" + "svelte": "5.33.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9db2f52..2836b37a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^3.1.0 version: 3.1.0 es-toolkit: - specifier: ^1.37.2 - version: 1.37.2 + specifier: ^1.38.0 + version: 1.38.0 fast-equals: specifier: ^5.2.2 version: 5.2.2 @@ -57,8 +57,8 @@ importers: specifier: ^3.0.3 version: 3.0.3 svelte: - specifier: 5.30.1 - version: 5.30.1 + specifier: 5.33.2 + version: 5.33.2 devDependencies: '@aitodotai/json-stringify-pretty-compact': specifier: ^1.3.0 @@ -68,34 +68,34 @@ importers: version: 11.13.5 '@sveltejs/adapter-auto': specifier: ^6.0.1 - version: 6.0.1(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))) + version: 6.0.1(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))) '@sveltejs/adapter-static': specifier: ^3.0.8 - version: 3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))) + version: 3.0.8(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))) '@sveltejs/eslint-config': specifier: ^8.2.0 - version: 8.2.0(@stylistic/eslint-plugin-js@1.7.2(eslint@9.26.0(jiti@1.21.0)))(eslint-config-prettier@10.1.5(eslint@9.26.0(jiti@1.21.0)))(eslint-plugin-n@17.10.1(eslint@9.26.0(jiti@1.21.0)))(eslint-plugin-svelte@3.7.0(eslint@9.26.0(jiti@1.21.0))(svelte@5.30.1))(eslint@9.26.0(jiti@1.21.0))(typescript-eslint@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(typescript@5.8.3) + version: 8.2.0(@stylistic/eslint-plugin-js@1.7.2(eslint@9.27.0(jiti@1.21.0)))(eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@1.21.0)))(eslint-plugin-n@17.10.1(eslint@9.27.0(jiti@1.21.0)))(eslint-plugin-svelte@3.9.0(eslint@9.27.0(jiti@1.21.0))(svelte@5.33.2))(eslint@9.27.0(jiti@1.21.0))(typescript-eslint@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(typescript@5.8.3) '@sveltejs/kit': - specifier: ^2.21.0 - version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + specifier: ^2.21.1 + version: 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@sveltejs/package': specifier: ^2.3.11 - version: 2.3.11(svelte@5.30.1)(typescript@5.8.3) + version: 2.3.11(svelte@5.33.2)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: 5.0.3 - version: 5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + version: 5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@sveltepress/theme-default': specifier: ^6.0.3 - version: 6.0.3(8842574121344738c5d79b13fa3b12b2) + version: 6.0.3(0f9affb99b0fca83246224c5605f9aba) '@sveltepress/twoslash': specifier: ^1.2.2 - version: 1.2.2(svelte@5.30.1)(typescript@5.8.3) + version: 1.2.2(svelte@5.33.2)(typescript@5.8.3) '@sveltepress/vite': specifier: ^1.2.2 - version: 1.2.2(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + version: 1.2.2(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@testing-library/svelte': - specifier: ^5.2.7 - version: 5.2.7(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + specifier: ^5.2.8 + version: 5.2.8(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.0) @@ -131,10 +131,10 @@ importers: version: 3.1.7 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + version: 8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) csstype: specifier: ^3.1.3 version: 3.1.3 @@ -148,14 +148,14 @@ importers: specifier: ^3.0.0 version: 3.0.0 eslint: - specifier: ^9.26.0 - version: 9.26.0(jiti@1.21.0) + specifier: ^9.27.0 + version: 9.27.0(jiti@1.21.0) eslint-config-prettier: specifier: ^10.1.5 - version: 10.1.5(eslint@9.26.0(jiti@1.21.0)) + version: 10.1.5(eslint@9.27.0(jiti@1.21.0)) eslint-plugin-svelte: - specifier: 3.7.0 - version: 3.7.0(eslint@9.26.0(jiti@1.21.0))(svelte@5.30.1) + specifier: 3.9.0 + version: 3.9.0(eslint@9.27.0(jiti@1.21.0))(svelte@5.33.2) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -164,7 +164,7 @@ importers: version: 3.5.3 prettier-plugin-svelte: specifier: ^3.4.0 - version: 3.4.0(prettier@3.5.3)(svelte@5.30.1) + version: 3.4.0(prettier@3.5.3)(svelte@5.33.2) remark-code-extra: specifier: ^1.0.1 version: 1.0.1 @@ -179,10 +179,10 @@ importers: version: 1.89.0 svelte-check: specifier: ^4.2.1 - version: 4.2.1(picomatch@4.0.2)(svelte@5.30.1)(typescript@5.8.3) + version: 4.2.1(picomatch@4.0.2)(svelte@5.33.2)(typescript@5.8.3) svelte-eslint-parser: specifier: 1.2.0 - version: 1.2.0(svelte@5.30.1) + version: 1.2.0(svelte@5.33.2) svelte-highlight: specifier: ^7.8.3 version: 7.8.3 @@ -208,8 +208,8 @@ importers: specifier: ^6.3.5 version: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) vitest: - specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) + specifier: ^3.1.4 + version: 3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) vitest-matchmedia-mock: specifier: ^2.0.3 version: 2.0.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) @@ -1271,12 +1271,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1295,24 +1289,24 @@ packages: resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.26.0': - resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + '@eslint/js@9.27.0': + resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.6.0': @@ -1378,10 +1372,6 @@ packages: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - '@modelcontextprotocol/sdk@1.11.0': - resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} - engines: {node: '>=18'} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1682,8 +1672,8 @@ packages: typescript: '>= 5' typescript-eslint: '>= 8' - '@sveltejs/kit@2.21.0': - resolution: {integrity: sha512-kvu4h9qXduiPk1Q1oqFKDLFGu/7mslEYbVaqpbBcBxjlRJnvNCFwEvEwKt0Mx9TtSi8J77xRelvJobrGlst4nQ==} + '@sveltejs/kit@2.21.1': + resolution: {integrity: sha512-vLbtVwtDcK8LhJKnFkFYwM0uCdFmzioQnif0bjEYH1I24Arz22JPr/hLUiXGVYAwhu8INKx5qrdvr4tHgPwX6w==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1739,8 +1729,8 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/svelte@5.2.7': - resolution: {integrity: sha512-aGhUaFmEXEVost4QOsbHUUbHLwi7ZZRRxAHFDO2Cmr0BZD3/3+XvaYEPq70Rdw0NRNjdqZHdARBEcrCOkPuAqw==} + '@testing-library/svelte@5.2.8': + resolution: {integrity: sha512-ucQOtGsJhtawOEtUmbR4rRh53e6RbM1KUluJIXRmh6D4UzxR847iIqqjRtg9mHNFmGQ8Vkam9yVcR5d1mhIHKA==} engines: {node: '>= 10'} peerDependencies: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 @@ -2070,11 +2060,11 @@ packages: '@vite-pwa/assets-generator': optional: true - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + '@vitest/expect@3.1.4': + resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==} - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + '@vitest/mocker@3.1.4': + resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -2084,24 +2074,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} - - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/pretty-format@3.1.4': + resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==} - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/runner@3.1.4': + resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==} - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/snapshot@3.1.4': + resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==} - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/spy@3.1.4': + resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} + '@vitest/utils@3.1.4': + resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -2227,10 +2213,6 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2263,10 +2245,6 @@ packages: peerDependencies: esbuild: '>=0.18' - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2380,39 +2358,19 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - core-js-compat@3.35.0: resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -2573,10 +2531,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2609,9 +2563,6 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -2629,10 +2580,6 @@ packages: emoticon@4.0.1: resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -2674,8 +2621,8 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es-toolkit@1.37.2: - resolution: {integrity: sha512-ADDfk+pPFF0ofMpRAIc6on01p8heiuwuuJsYLzTP4UOjxVK9QsE2+0D1Q4J/zX2XBo6ac+27H5++YBIwmGAX/g==} + es-toolkit@1.38.0: + resolution: {integrity: sha512-OT3AxczYYd3W50bCj4V0hKoOAfqIy9tof0leNQYekEDxVKir3RTVTJOLij7VAe6fsCNsGhC0JqIkURpMXTCSEA==} esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} @@ -2691,9 +2638,6 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -2730,8 +2674,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-svelte@3.7.0: - resolution: {integrity: sha512-/MQ9gYLbA24AFUN0QwpzRqi4VCISaRyt8xa2t3iVnI5mWa38xuTXM+iz/8LxKCg34jX2PfPcEkZH7CUem/Eugw==} + eslint-plugin-svelte@3.9.0: + resolution: {integrity: sha512-nvIUNyyPGbr5922Kd1p/jXe+FfNdVPXsxLyrrXpwfSbZZEFdAYva9O/gm2lObC/wXkQo/AUmQkAihfmNJYeCjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 @@ -2752,8 +2696,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.26.0: - resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + eslint@9.27.0: + resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2806,18 +2750,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.6: - resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} - engines: {node: '>=18.0.0'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2826,16 +2758,6 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2881,10 +2803,6 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -2918,14 +2836,6 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - front-matter@3.2.1: resolution: {integrity: sha512-YUhgEhbL6tG+Ok3vTGIoSDKqcr47aSDvyhEqIv8B+YuBJFsPnOiArNXTPp2yO07NL+a0L4+2jXlKlKqyVcsRRA==} @@ -3005,6 +2915,10 @@ packages: resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} engines: {node: '>=18'} + globals@16.2.0: + resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + engines: {node: '>=18'} + globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -3078,10 +2992,6 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -3138,10 +3048,6 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -3237,9 +3143,6 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} @@ -3524,18 +3427,10 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - merge-deep@3.0.3: resolution: {integrity: sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==} engines: {node: '>=0.10.0'} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3637,14 +3532,6 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -3686,10 +3573,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -3717,10 +3600,6 @@ packages: nwsapi@2.2.16: resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -3736,10 +3615,6 @@ packages: ofetch@1.3.4: resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3780,10 +3655,6 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -3802,10 +3673,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3834,10 +3701,6 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - pkg-types@1.1.3: resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} @@ -3906,10 +3769,6 @@ packages: property-information@6.4.0: resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -3918,24 +3777,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} - react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -4053,10 +3900,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -4109,17 +3952,9 @@ packages: engines: {node: '>=10'} hasBin: true - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} @@ -4131,9 +3966,6 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shallow-clone@0.1.2: resolution: {integrity: sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==} engines: {node: '>=0.10.0'} @@ -4219,10 +4051,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -4299,8 +4127,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@5.30.1: - resolution: {integrity: sha512-QIYtKnJGkubWXtNkrUBKVCvyo9gjcccdbnvXfwsGNhvbeNNdQjRDTa/BiQcJ2kWXbXPQbWKyT7CUu53KIj1rfw==} + svelte@5.33.2: + resolution: {integrity: sha512-uiyusx2rUa9NmVMaIcShnZyDhOfFXxgkn5eXOcgjDBL3RYQGR1+7TctPcI6AWNbu4gHWF5xZ/TlFM7nnw5H+JQ==} engines: {node: '>=18'} svg-path-parser@1.1.0: @@ -4363,10 +4191,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - topojson-client@3.1.0: resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} hasBin: true @@ -4428,10 +4252,6 @@ packages: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -4561,10 +4381,6 @@ packages: vite: optional: true - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -4581,18 +4397,14 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + vite-node@3.1.4: + resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -4669,16 +4481,16 @@ packages: vitest-matchmedia-mock@2.0.3: resolution: {integrity: sha512-Oa2fI+dfaqcs67D08PqBL0D+Ymm4MYGZn1WimUgfZGDxp9/eb8gl6xqPmhjyrV3p9KdhKj2tp6E1b4YWiSg1lw==} - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + vitest@3.1.4: + resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 + '@vitest/browser': 3.1.4 + '@vitest/ui': 3.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4831,14 +4643,6 @@ packages: zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.3: - resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} - zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -5983,14 +5787,9 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.26.0(jiti@1.21.0))': - dependencies: - eslint: 9.26.0(jiti@1.21.0) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@1.21.0))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@1.21.0))': dependencies: - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -6005,7 +5804,7 @@ snapshots: '@eslint/config-helpers@0.2.1': {} - '@eslint/core@0.13.0': + '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 @@ -6023,13 +5822,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.26.0': {} + '@eslint/js@9.27.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.3.1': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.0 levn: 0.4.1 '@floating-ui/core@1.6.0': @@ -6102,21 +5901,6 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@modelcontextprotocol/sdk@1.11.0': - dependencies: - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.0(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.3 - zod-to-json-schema: 3.24.5(zod@3.24.3) - transitivePeerDependencies: - - supports-color - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6348,12 +6132,12 @@ snapshots: '@sindresorhus/is@4.6.0': {} - '@stylistic/eslint-plugin-js@1.7.2(eslint@9.26.0(jiti@1.21.0))': + '@stylistic/eslint-plugin-js@1.7.2(eslint@9.27.0(jiti@1.21.0))': dependencies: '@types/eslint': 8.56.10 acorn: 8.14.1 escape-string-regexp: 4.0.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -6368,29 +6152,29 @@ snapshots: dependencies: acorn: 8.14.1 - '@sveltejs/adapter-auto@6.0.1(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))': + '@sveltejs/adapter-auto@6.0.1(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))': + '@sveltejs/adapter-static@3.0.8(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@1.7.2(eslint@9.26.0(jiti@1.21.0)))(eslint-config-prettier@10.1.5(eslint@9.26.0(jiti@1.21.0)))(eslint-plugin-n@17.10.1(eslint@9.26.0(jiti@1.21.0)))(eslint-plugin-svelte@3.7.0(eslint@9.26.0(jiti@1.21.0))(svelte@5.30.1))(eslint@9.26.0(jiti@1.21.0))(typescript-eslint@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(typescript@5.8.3)': + '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@1.7.2(eslint@9.27.0(jiti@1.21.0)))(eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@1.21.0)))(eslint-plugin-n@17.10.1(eslint@9.27.0(jiti@1.21.0)))(eslint-plugin-svelte@3.9.0(eslint@9.27.0(jiti@1.21.0))(svelte@5.33.2))(eslint@9.27.0(jiti@1.21.0))(typescript-eslint@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(typescript@5.8.3)': dependencies: - '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.26.0(jiti@1.21.0)) - eslint: 9.26.0(jiti@1.21.0) - eslint-config-prettier: 10.1.5(eslint@9.26.0(jiti@1.21.0)) - eslint-plugin-n: 17.10.1(eslint@9.26.0(jiti@1.21.0)) - eslint-plugin-svelte: 3.7.0(eslint@9.26.0(jiti@1.21.0))(svelte@5.30.1) + '@stylistic/eslint-plugin-js': 1.7.2(eslint@9.27.0(jiti@1.21.0)) + eslint: 9.27.0(jiti@1.21.0) + eslint-config-prettier: 10.1.5(eslint@9.27.0(jiti@1.21.0)) + eslint-plugin-n: 17.10.1(eslint@9.27.0(jiti@1.21.0)) + eslint-plugin-svelte: 3.9.0(eslint@9.27.0(jiti@1.21.0))(svelte@5.33.2) globals: 15.9.0 typescript: 5.8.3 - typescript-eslint: 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + typescript-eslint: 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) - '@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@types/cookie': 0.6.0 acorn: 8.14.1 cookie: 0.6.0 @@ -6402,58 +6186,58 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 3.0.0 - svelte: 5.30.1 + svelte: 5.33.2 vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) - '@sveltejs/package@2.3.11(svelte@5.30.1)(typescript@5.8.3)': + '@sveltejs/package@2.3.11(svelte@5.33.2)(typescript@5.8.3)': dependencies: chokidar: 4.0.3 kleur: 4.1.5 sade: 1.8.1 semver: 7.6.3 - svelte: 5.30.1 - svelte2tsx: 0.7.34(svelte@5.30.1)(typescript@5.8.3) + svelte: 5.33.2 + svelte2tsx: 0.7.34(svelte@5.33.2)(typescript@5.8.3) transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) debug: 4.4.0 - svelte: 5.30.1 + svelte: 5.33.2 vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.30.1 + svelte: 5.33.2 vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) vitefu: 1.0.4(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) transitivePeerDependencies: - supports-color - '@sveltepress/theme-default@6.0.3(8842574121344738c5d79b13fa3b12b2)': + '@sveltepress/theme-default@6.0.3(0f9affb99b0fca83246224c5605f9aba)': dependencies: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.22.1)(search-insights@2.13.0) '@shikijs/twoslash': 1.24.0(typescript@5.8.3) - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@sveltepress/twoslash': 1.2.2(svelte@5.30.1)(typescript@5.8.3) - '@sveltepress/vite': 1.2.2(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltepress/twoslash': 1.2.2(svelte@5.33.2)(typescript@5.8.3) + '@sveltepress/vite': 1.2.2(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) '@unocss/extractor-svelte': 0.61.9 - '@vite-pwa/sveltekit': 0.6.6(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(vite-plugin-pwa@0.19.0(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0)) + '@vite-pwa/sveltekit': 0.6.6(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(vite-plugin-pwa@0.19.0(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0)) lru-cache: 10.4.3 mdast-util-from-markdown: 2.0.0 mdast-util-gfm: 3.0.0 shiki: 1.24.0 - svelte: 5.30.1 + svelte: 5.33.2 uid: 2.0.2 unist-util-visit: 5.0.0 unocss: 0.61.9(postcss@8.5.3)(rollup@2.79.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) @@ -6474,7 +6258,7 @@ snapshots: - typescript - vite-plugin-pwa - '@sveltepress/twoslash@1.2.2(svelte@5.30.1)(typescript@5.8.3)': + '@sveltepress/twoslash@1.2.2(svelte@5.33.2)(typescript@5.8.3)': dependencies: '@floating-ui/dom': 1.6.3 '@shikijs/twoslash': 1.24.0(typescript@5.8.3) @@ -6483,18 +6267,18 @@ snapshots: mdast-util-to-hast: 13.1.0 shiki: 1.24.0 source-map-js: 1.2.1 - svelte: 5.30.1 - svelte2tsx: 0.7.34(svelte@5.30.1)(typescript@5.8.3) + svelte: 5.33.2 + svelte2tsx: 0.7.34(svelte@5.33.2)(typescript@5.8.3) twoslash: 0.2.12(typescript@5.8.3) twoslash-protocol: 0.2.12 transitivePeerDependencies: - supports-color - typescript - '@sveltepress/vite@1.2.2(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@sveltepress/vite@1.2.2(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(rollup@2.79.1)(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) cross-spawn: 7.0.6 fs-extra: 11.2.0 lru-cache: 10.4.3 @@ -6509,7 +6293,7 @@ snapshots: remark-rehype: 11.1.0 remark-stringify: 11.0.0 shiki: 1.24.0 - svelte: 5.30.1 + svelte: 5.33.2 unified: 11.0.4 unist-util-visit: 5.0.0 vfile: 6.0.1 @@ -6532,13 +6316,13 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/svelte@5.2.7(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@testing-library/svelte@5.2.8(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: '@testing-library/dom': 10.4.0 - svelte: 5.30.1 + svelte: 5.33.2 optionalDependencies: vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': dependencies: @@ -6648,16 +6432,16 @@ snapshots: '@types/unist@3.0.2': {} - '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/parser': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) - '@typescript-eslint/utils': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/type-utils': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/utils': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.4.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -6668,15 +6452,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) graphemer: 1.4.0 ignore: 7.0.4 natural-compare: 1.4.0 @@ -6685,27 +6469,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/parser@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/types': 7.7.0 '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.7.0 debug: 4.4.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 debug: 4.4.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6720,24 +6504,24 @@ snapshots: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/type-utils@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.8.3) - '@typescript-eslint/utils': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/utils': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) ts-api-utils: 1.3.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -6776,27 +6560,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/utils@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.7.0 '@typescript-eslint/types': 7.7.0 '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.8.3) - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.32.1(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6982,58 +6766,53 @@ snapshots: - rollup - supports-color - '@vite-pwa/sveltekit@0.6.6(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(vite-plugin-pwa@0.19.0(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0))': + '@vite-pwa/sveltekit@0.6.6(@sveltejs/kit@2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(vite-plugin-pwa@0.19.0(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0))': dependencies: - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.30.1)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)))(svelte@5.33.2)(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) kolorist: 1.8.0 tinyglobby: 0.2.13 vite-plugin-pwa: 0.19.0(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) - '@vitest/expect@3.1.3': + '@vitest/expect@3.1.4': dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + '@vitest/spy': 3.1.4 + '@vitest/utils': 3.1.4 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': + '@vitest/mocker@3.1.4(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1))': dependencies: - '@vitest/spy': 3.1.3 + '@vitest/spy': 3.1.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) - '@vitest/pretty-format@3.1.3': + '@vitest/pretty-format@3.1.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.3': + '@vitest/runner@3.1.4': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.1.4 pathe: 2.0.3 - '@vitest/snapshot@3.1.3': + '@vitest/snapshot@3.1.4': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.1.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.3': + '@vitest/spy@3.1.4': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.1.3': + '@vitest/utils@3.1.4': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.1.4 loupe: 3.1.3 tinyrainbow: 2.0.0 - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -7173,20 +6952,6 @@ snapshots: binary-extensions@2.2.0: {} - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.0 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.0 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -7220,8 +6985,6 @@ snapshots: esbuild: 0.21.5 load-tsconfig: 0.2.5 - bytes@3.1.2: {} - cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -7331,31 +7094,16 @@ snapshots: consola@3.2.3: {} - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cookie-signature@1.2.2: {} - cookie@0.6.0: {} - cookie@0.7.2: {} - core-js-compat@3.35.0: dependencies: browserslist: 4.23.3 - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -7501,8 +7249,6 @@ snapshots: defu@6.1.4: {} - depd@2.0.0: {} - dequal@2.0.3: {} destr@2.0.3: {} @@ -7530,8 +7276,6 @@ snapshots: duplexer@0.1.2: {} - ee-first@1.1.1: {} - ejs@3.1.9: dependencies: jake: 10.8.7 @@ -7544,8 +7288,6 @@ snapshots: emoticon@4.0.1: {} - encodeurl@2.0.0: {} - enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -7623,7 +7365,7 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es-toolkit@1.37.2: {} + es-toolkit@1.38.0: {} esbuild@0.21.5: optionalDependencies: @@ -7681,56 +7423,55 @@ snapshots: escalade@3.1.2: {} - escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.26.0(jiti@1.21.0)): + eslint-compat-utils@0.5.1(eslint@9.27.0(jiti@1.21.0)): dependencies: - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) semver: 7.6.3 - eslint-config-prettier@10.1.5(eslint@9.26.0(jiti@1.21.0)): + eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@1.21.0)): dependencies: - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) - eslint-plugin-es-x@7.8.0(eslint@9.26.0(jiti@1.21.0)): + eslint-plugin-es-x@7.8.0(eslint@9.27.0(jiti@1.21.0)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.26.0(jiti@1.21.0) - eslint-compat-utils: 0.5.1(eslint@9.26.0(jiti@1.21.0)) + eslint: 9.27.0(jiti@1.21.0) + eslint-compat-utils: 0.5.1(eslint@9.27.0(jiti@1.21.0)) - eslint-plugin-n@17.10.1(eslint@9.26.0(jiti@1.21.0)): + eslint-plugin-n@17.10.1(eslint@9.27.0(jiti@1.21.0)): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) enhanced-resolve: 5.17.1 - eslint: 9.26.0(jiti@1.21.0) - eslint-plugin-es-x: 7.8.0(eslint@9.26.0(jiti@1.21.0)) + eslint: 9.27.0(jiti@1.21.0) + eslint-plugin-es-x: 7.8.0(eslint@9.27.0(jiti@1.21.0)) get-tsconfig: 4.7.6 globals: 15.9.0 ignore: 5.3.1 minimatch: 9.0.5 semver: 7.6.3 - eslint-plugin-svelte@3.7.0(eslint@9.26.0(jiti@1.21.0))(svelte@5.30.1): + eslint-plugin-svelte@3.9.0(eslint@9.27.0(jiti@1.21.0))(svelte@5.33.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) '@jridgewell/sourcemap-codec': 1.5.0 - eslint: 9.26.0(jiti@1.21.0) + eslint: 9.27.0(jiti@1.21.0) esutils: 2.0.3 + globals: 16.2.0 known-css-properties: 0.36.0 postcss: 8.5.3 postcss-load-config: 3.1.4(postcss@8.5.3) postcss-safe-parser: 7.0.1(postcss@8.5.3) semver: 7.6.3 - svelte-eslint-parser: 1.2.0(svelte@5.30.1) + svelte-eslint-parser: 1.2.0(svelte@5.33.2) optionalDependencies: - svelte: 5.30.1 + svelte: 5.33.2 transitivePeerDependencies: - ts-node @@ -7743,20 +7484,19 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.26.0(jiti@1.21.0): + eslint@9.27.0(jiti@1.21.0): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.26.0(jiti@1.21.0)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@1.21.0)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.1 - '@eslint/core': 0.13.0 + '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.2.8 + '@eslint/js': 9.27.0 + '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 - '@modelcontextprotocol/sdk': 1.11.0 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -7781,7 +7521,6 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.3 - zod: 3.24.3 optionalDependencies: jiti: 1.21.0 transitivePeerDependencies: @@ -7827,14 +7566,6 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} - - eventsource-parser@3.0.1: {} - - eventsource@3.0.6: - dependencies: - eventsource-parser: 3.0.1 - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -7849,42 +7580,6 @@ snapshots: expect-type@1.2.1: {} - express-rate-limit@7.5.0(express@5.1.0): - dependencies: - express: 5.1.0 - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.1 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -7927,17 +7622,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.0: - dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - find-root@1.1.0: {} find-up@5.0.0: @@ -7966,10 +7650,6 @@ snapshots: format@0.2.2: {} - forwarded@0.2.0: {} - - fresh@2.0.0: {} - front-matter@3.2.1: dependencies: js-yaml: 3.14.1 @@ -8059,6 +7739,8 @@ snapshots: globals@15.9.0: {} + globals@16.2.0: {} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 @@ -8134,14 +7816,6 @@ snapshots: html-void-elements@3.0.0: {} - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 @@ -8205,8 +7879,6 @@ snapshots: internmap@2.0.3: {} - ipaddr.js@1.9.1: {} - is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -8285,8 +7957,6 @@ snapshots: is-potential-custom-element-name@1.0.1: {} - is-promise@4.0.0: {} - is-reference@3.0.3: dependencies: '@types/estree': 1.0.7 @@ -8649,16 +8319,12 @@ snapshots: mdurl@2.0.0: {} - media-typer@1.1.0: {} - merge-deep@3.0.3: dependencies: arr-union: 3.1.0 clone-deep: 0.2.4 kind-of: 3.2.2 - merge-descriptors@2.0.0: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -8876,12 +8542,6 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 - mime-db@1.54.0: {} - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - mimic-fn@2.1.0: {} minimatch@3.1.2: @@ -8918,8 +8578,6 @@ snapshots: natural-compare@1.4.0: {} - negotiator@1.0.0: {} - no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -8947,8 +8605,6 @@ snapshots: nwsapi@2.2.16: {} - object-assign@4.1.1: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -8966,10 +8622,6 @@ snapshots: node-fetch-native: 1.6.4 ufo: 1.5.4 - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -9034,8 +8686,6 @@ snapshots: dependencies: entities: 4.5.0 - parseurl@1.3.3: {} - pascal-case@3.1.2: dependencies: no-case: 3.0.4 @@ -9049,8 +8699,6 @@ snapshots: path-parse@1.0.7: {} - path-to-regexp@8.2.0: {} - path-type@4.0.0: {} pathe@1.1.2: {} @@ -9067,8 +8715,6 @@ snapshots: picomatch@4.0.2: {} - pkce-challenge@5.0.0: {} - pkg-types@1.1.3: dependencies: confbox: 0.1.7 @@ -9105,10 +8751,10 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.30.1): + prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.33.2): dependencies: prettier: 3.5.3 - svelte: 5.30.1 + svelte: 5.33.2 prettier@3.5.3: {} @@ -9124,34 +8770,16 @@ snapshots: property-information@6.4.0: {} - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - punycode.js@2.3.1: {} punycode@2.3.1: {} - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - queue-microtask@1.2.3: {} randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - range-parser@1.2.1: {} - - raw-body@3.0.0: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - unpipe: 1.0.0 - react-is@17.0.2: {} readdirp@3.6.0: @@ -9332,16 +8960,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.40.0 fsevents: 2.3.3 - router@2.2.0: - dependencies: - debug: 4.4.0 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - rrweb-cssom@0.8.0: {} run-applescript@7.0.0: {} @@ -9391,35 +9009,10 @@ snapshots: semver@7.6.3: {} - send@1.2.0: - dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - serialize-javascript@4.0.0: dependencies: randombytes: 2.1.0 - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - set-cookie-parser@2.6.0: {} set-function-length@1.1.1: @@ -9435,8 +9028,6 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - setprototypeof@1.2.0: {} - shallow-clone@0.1.2: dependencies: is-extendable: 0.1.1 @@ -9532,8 +9123,6 @@ snapshots: stackback@0.0.2: {} - statuses@2.0.1: {} - std-env@3.9.0: {} string.prototype.matchall@4.0.10: @@ -9595,19 +9184,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.2.1(picomatch@4.0.2)(svelte@5.30.1)(typescript@5.8.3): + svelte-check@4.2.1(picomatch@4.0.2)(svelte@5.33.2)(typescript@5.8.3): 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.30.1 + svelte: 5.33.2 typescript: 5.8.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.2.0(svelte@5.30.1): + svelte-eslint-parser@1.2.0(svelte@5.33.2): dependencies: eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -9616,20 +9205,20 @@ snapshots: postcss-scss: 4.0.9(postcss@8.5.3) postcss-selector-parser: 7.0.0 optionalDependencies: - svelte: 5.30.1 + svelte: 5.33.2 svelte-highlight@7.8.3: dependencies: highlight.js: 11.11.1 - svelte2tsx@0.7.34(svelte@5.30.1)(typescript@5.8.3): + svelte2tsx@0.7.34(svelte@5.33.2)(typescript@5.8.3): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 5.30.1 + svelte: 5.33.2 typescript: 5.8.3 - svelte@5.30.1: + svelte@5.33.2: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -9695,8 +9284,6 @@ snapshots: dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} - topojson-client@3.1.0: dependencies: commander: 2.20.3 @@ -9752,12 +9339,6 @@ snapshots: type-fest@0.16.0: {} - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.5 @@ -9798,12 +9379,12 @@ snapshots: typescript: 5.8.3 yaml: 2.7.1 - typescript-eslint@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3): + typescript-eslint@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) - '@typescript-eslint/parser': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) - '@typescript-eslint/utils': 7.7.0(eslint@9.26.0(jiti@1.21.0))(typescript@5.8.3) - eslint: 9.26.0(jiti@1.21.0) + '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3))(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/parser': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) + '@typescript-eslint/utils': 7.7.0(eslint@9.27.0(jiti@1.21.0))(typescript@5.8.3) + eslint: 9.27.0(jiti@1.21.0) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -9927,8 +9508,6 @@ snapshots: - rollup - supports-color - unpipe@1.0.0: {} - upath@1.2.0: {} update-browserslist-db@1.1.0(browserslist@4.23.3): @@ -9943,8 +9522,6 @@ snapshots: util-deprecate@1.0.2: {} - vary@1.1.2: {} - vfile-message@4.0.2: dependencies: '@types/unist': 3.0.2 @@ -9956,7 +9533,7 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@3.1.3(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1): + vite-node@3.1.4(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.0 @@ -10027,7 +9604,7 @@ snapshots: vitest-matchmedia-mock@2.0.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1): dependencies: - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/debug' @@ -10049,15 +9626,15 @@ snapshots: - tsx - yaml - vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1): + vitest@3.1.4(@types/debug@4.1.12)(@types/node@20.10.8)(jiti@1.21.0)(jsdom@26.1.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1): dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + '@vitest/expect': 3.1.4 + '@vitest/mocker': 3.1.4(vite@6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1)) + '@vitest/pretty-format': 3.1.4 + '@vitest/runner': 3.1.4 + '@vitest/snapshot': 3.1.4 + '@vitest/spy': 3.1.4 + '@vitest/utils': 3.1.4 chai: 5.2.0 debug: 4.4.0 expect-type: 1.2.1 @@ -10070,7 +9647,7 @@ snapshots: tinypool: 1.0.2 tinyrainbow: 2.0.0 vite: 6.3.5(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) + vite-node: 3.1.4(@types/node@20.10.8)(jiti@1.21.0)(sass@1.89.0)(terser@5.26.0)(tsx@4.16.5)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -10271,10 +9848,4 @@ snapshots: zimmerframe@1.1.2: {} - zod-to-json-schema@3.24.5(zod@3.24.3): - dependencies: - zod: 3.24.3 - - zod@3.24.3: {} - zwitch@2.0.4: {} diff --git a/src/lib/Mark.svelte b/src/lib/Mark.svelte index 2eeeeef6..35fd59bb 100644 --- a/src/lib/Mark.svelte +++ b/src/lib/Mark.svelte @@ -174,7 +174,9 @@ ScaledChannelName, ScaleName ][]) { - if (array1[i][channel] !== array2[i][channel]) return true; + if (!isEqual(array1[i][channel], array2[i][channel])) { + return true; + } } } return false; @@ -284,7 +286,7 @@ {#if errors.length} - {#each errors as error, i} + {#each errors as error, i (i)} {error} {/each} diff --git a/src/lib/Plot.svelte b/src/lib/Plot.svelte index 65c9e2bb..665c5412 100644 --- a/src/lib/Plot.svelte +++ b/src/lib/Plot.svelte @@ -4,7 +4,7 @@ their data and channels and computes the shared scales. The Plot component is split into two parts. This is the outer Plot which - provides convenient defaults and automatically adds axes etc to the grapihcs. + provides convenient defaults and automatically adds axes etc to the graphics. The downside is that it adds a bunch of imports that you may not be using. To help with this you can use the core/Plot component directly for a more low-level Plot wrapper. @@ -74,7 +74,7 @@ {#if restOptions.title}

{restOptions.title}

{/if} {#if restOptions.subtitle}

{restOptions.subtitle}

{/if} - {#if userHeader}{@render userHeader()}{/if} + {#if userHeader}{@render userHeader?.()}{/if} {#if restOptions.color?.legend} {/if} @@ -85,7 +85,7 @@ {#snippet footer()} {#if restOptions.caption}
{restOptions.caption}
{/if} - {#if userFooter}{@render userFooter()}{/if} + {#if userFooter}{@render userFooter?.()}{/if} {/snippet} -{#each fxValues as facetX, i} - {#each fyValues as facetY, j} +{#each fxValues as facetX, i (i)} + {#each fyValues as facetY, j (j)} = $props(); // automatic margins can be applied by the marks, registered // with their respective unique identifier as keys @@ -78,6 +62,7 @@ initialWidth: 500, inset: 0, colorScheme: 'turbo', + unknown: '#cccccc', dotRadius: 3, frame: false, axes: true, @@ -95,6 +80,21 @@ ...getContext>('svelteplot/defaults') }; + let { + header, + footer, + overlay, + underlay, + children, + facetAxes, + testid, + facet, + class: className = '', + css = DEFAULTS.css, + width: fixedWidth, + ...initialOpts + }: Partial = $props(); + let width = $state(DEFAULTS.initialWidth); setContext('svelteplot/_defaults', DEFAULTS); @@ -161,7 +161,7 @@ ); // if the plot is showing filled dot marks we're using different defaults - // for the symbol axis range, so we're passing on this info to the createScales + // for the symbol axis range, so we're passing on this info to the computeScales // function below const hasFilledDotMarks = $derived( !!explicitMarks.find((d) => d.type === 'dot' && d.options.fill) @@ -232,6 +232,7 @@ let facetWidth: number | null = $state(null); let facetHeight: number | null = $state(null); + // eslint-disable-next-line svelte/prefer-writable-derived let plotState: PlotState = $state(computePlotState()); $effect(() => { @@ -454,7 +455,8 @@ symbol: { type: 'ordinal' }, fx: { type: 'band', axis: 'top' }, fy: { type: 'band', axis: 'right' }, - locale: DEFAULTS.locale + locale: DEFAULTS.locale, + css: DEFAULTS.css }; } @@ -471,7 +473,7 @@ data-testid={testid}> {#if header}
- {#if header}{@render header()}{/if} + {@render header?.()}
{/if}
@@ -500,11 +502,11 @@ {/if} - {#if overlay}
{@render overlay()}
{/if} + {#if overlay}
{@render overlay?.()}
{/if}
{#if footer} {/if} diff --git a/src/lib/helpers/autoScales.ts b/src/lib/helpers/autoScales.ts index 9c1418f0..b83272fb 100644 --- a/src/lib/helpers/autoScales.ts +++ b/src/lib/helpers/autoScales.ts @@ -47,6 +47,7 @@ import callWithProps from './callWithProps.js'; import { interpolateLab, interpolateRound } from 'd3-interpolate'; import { coalesce, maybeNumber } from './index.js'; import { getLogTicks } from './getLogTicks.js'; +import { isPlainObject } from 'es-toolkit'; const Scales: Record< ScaleType, @@ -137,30 +138,30 @@ export function autoScale({ range, ...((type === 'linear' || type === 'log') && scaleOptions.nice ? { - nice: scaleOptions.nice ? niceTickCount : true - } + nice: scaleOptions.nice ? niceTickCount : true + } : {}), ...(type === 'linear' ? { - clamp: scaleOptions.clamp, - ...(scaleOptions.round ? { interpolate: interpolateRound } : {}) - } + clamp: scaleOptions.clamp, + ...(scaleOptions.round ? { interpolate: interpolateRound } : {}) + } : {}), ...(type === 'log' ? { - base: scaleOptions.base || 10 - } + base: scaleOptions.base || 10 + } : {}), ...(type === 'symlog' ? { - constant: scaleOptions.constant || 1 - } + constant: scaleOptions.constant || 1 + } : {}), ...(type === 'band' || type === 'point' ? { - align: scaleOptions.align, - padding: maybeNumber(coalesce(scaleOptions.padding, plotOptions.padding, 0.15)) - } + align: scaleOptions.align, + padding: maybeNumber(coalesce(scaleOptions.padding, plotOptions.padding, 0.15)) + } : {}) }; @@ -207,28 +208,43 @@ export function autoScaleColor({ scheme, interpolate, pivot, - n = type === 'threshold' ? domain.length + 1 : 9 + n = type === 'threshold' ? domain.length + 1 : 9, + unknown = plotDefaults.unknown } = scaleOptions; if (type === 'categorical' || type === 'ordinal') { // categorical - const scheme_ = scheme || plotDefaults.categoricalColorScheme; + let scheme_ = scheme || plotDefaults.categoricalColorScheme; + + if (isPlainObject(scheme_)) { + const newScheme = Object.values(scheme_); + const newDomain = Object.keys(scheme_); + // for every value in domain that's not part of the scheme, map to unknown + for (const v of domain) { + if (scheme_[v] == null) { + newDomain.push(v); + newScheme.push(unknown); + } + } + domain = newDomain; + scheme_ = newScheme; + } + // categorical scale range = Array.isArray(scheme_) ? scheme_ : isCategoricalScheme(scheme_) - ? categoricalSchemes.get(scheme_) - : ordinalScheme(scheme_)(domain.length); + ? categoricalSchemes.get(scheme_) + : ordinalScheme(scheme_)(domain.length); fn = scaleOrdinal().domain(domain).range(range); } else if (!!ThresholdScales[type]) { - const scheme_ = scheme || plotDefaults.colorScheme; range = Array.isArray(scheme_) && (scaleOptions.n == null || scaleOptions.n === scheme_.length) ? scheme_.slice(0) : Array.isArray(scheme_) - ? // interpolate n colors from custom colors + ? // interpolate n colors from custom colors d3Range(n) .map((i) => i / (n - 1)) .map( @@ -237,11 +253,11 @@ export function autoScaleColor({ scheme_ ).interpolate(interpolateLab) ) - : interpolate - ? d3Range(n).map((i) => interpolate(i / (n - 1))) - : isOrdinalScheme(scheme_) - ? ordinalScheme(scheme_)(n) - : null; + : interpolate + ? d3Range(n).map((i) => interpolate(i / (n - 1))) + : isOrdinalScheme(scheme_) + ? ordinalScheme(scheme_)(n) + : null; if (range == null) { throw new Error('unknown ordinal scheme ' + scheme_); @@ -307,25 +323,25 @@ function getScaleRange( return name === 'opacity' ? [0, 1] : name === 'length' - ? [0, 20] - : name === 'x' - ? [ - marginLeft + (insetLeft || inset || 0), - marginLeft + plotWidth - (insetRight || inset || 0) + ? [0, 20] + : name === 'x' + ? [ + marginLeft + (insetLeft || inset || 0), + marginLeft + plotWidth - (insetRight || inset || 0) + ] + : name === 'y' + ? [ + plotHeight + marginTop - (insetBottom || inset || 0), + marginTop + (insetTop || inset || 0) ] - : name === 'y' - ? [ - plotHeight + marginTop - (insetBottom || inset || 0), - marginTop + (insetTop || inset || 0) - ] - : name === 'r' - ? [0, 10] - : name === 'symbol' - ? // Plot is smart enough to pick different default shapes depending on wether - // or not there are filled dot marks in the plot, so we have to pass this - // information all the way here - plotHasFilledDotMarks - ? ['circle', 'cross', 'diamond', 'square', 'star', 'triangle', 'wye'] - : ['circle', 'plus', 'times', 'triangle2', 'asterisk', 'square2', 'diamond2'] - : []; + : name === 'r' + ? [0, 10] + : name === 'symbol' + ? // Plot is smart enough to pick different default shapes depending on whether + // or not there are filled dot marks in the plot, so we have to pass this + // information all the way here + plotHasFilledDotMarks + ? ['circle', 'cross', 'diamond', 'square', 'star', 'triangle', 'wye'] + : ['circle', 'plus', 'times', 'triangle2', 'asterisk', 'square2', 'diamond2'] + : []; } diff --git a/src/lib/helpers/callWithProps.ts b/src/lib/helpers/callWithProps.ts index 78f3259d..25d707fb 100644 --- a/src/lib/helpers/callWithProps.ts +++ b/src/lib/helpers/callWithProps.ts @@ -4,7 +4,7 @@ type Setter = (v: any) => void; /** * Helper function to call a D3 "function class" while also calling - * porperty setter functions on the result. + * property setter functions on the result. */ export default function ( d3func: () => Record, diff --git a/src/lib/helpers/facets.ts b/src/lib/helpers/facets.ts index 5cbdf88f..8ed7f1b5 100644 --- a/src/lib/helpers/facets.ts +++ b/src/lib/helpers/facets.ts @@ -1,4 +1,4 @@ -import type { GenericMarkOptions, Mark, PlotScale, RawValue } from '$lib/types.js'; +import type { GenericMarkOptions, Mark, RawValue } from '$lib/types.js'; import { resolveChannel } from './resolve.js'; /** diff --git a/src/lib/helpers/getBaseStyles.ts b/src/lib/helpers/getBaseStyles.ts index bc141cec..cbe3c601 100644 --- a/src/lib/helpers/getBaseStyles.ts +++ b/src/lib/helpers/getBaseStyles.ts @@ -18,6 +18,7 @@ const styleProps: Partial> = { fontWeight: 'font-weight', fontStyle: 'font-style', textAnchor: 'text-anchor', + fontVariant: 'font-variant', cursor: 'cursor', pointerEvents: 'pointer-events' }; diff --git a/src/lib/helpers/group.test.ts b/src/lib/helpers/group.test.ts index 102e6517..432a7240 100644 --- a/src/lib/helpers/group.test.ts +++ b/src/lib/helpers/group.test.ts @@ -27,7 +27,7 @@ describe('groupFacetsAndZ', () => { expect(result).toEqual([2, 1, 1, 1]); }); - it('implicitely groups by fill and stroke if z is not present', () => { + it('implicitly groups by fill and stroke if z is not present', () => { const items = [ { color: 'red', value: 10 }, { color: 'red', value: 15 }, diff --git a/src/lib/helpers/index.test.ts b/src/lib/helpers/index.test.ts index 88136dac..690da416 100644 --- a/src/lib/helpers/index.test.ts +++ b/src/lib/helpers/index.test.ts @@ -1,4 +1,4 @@ -import { coalesce, isObject, pick, omit } from './index'; +import { coalesce, isObject, omit } from './index'; import { describe, it, expect } from 'vitest'; describe('coalesce', () => { diff --git a/src/lib/helpers/index.ts b/src/lib/helpers/index.ts index eea4338b..7f51116e 100644 --- a/src/lib/helpers/index.ts +++ b/src/lib/helpers/index.ts @@ -1,10 +1,4 @@ -import type { - BaseMarkProps, - ChannelAccessor, - ChannelName, - DataRecord, - RawValue -} from '$lib/types.js'; +import type { ChannelAccessor, ChannelName, DataRecord, RawValue } from '$lib/types.js'; import type { Snippet } from 'svelte'; import { resolveProp } from './resolve.js'; import { isDate } from '$lib/helpers/typeChecks.js'; diff --git a/src/lib/helpers/projection.ts b/src/lib/helpers/projection.ts index 353632dc..b2983cb8 100644 --- a/src/lib/helpers/projection.ts +++ b/src/lib/helpers/projection.ts @@ -1,6 +1,6 @@ import { geoClipRectangle, geoPath, geoTransform } from 'd3-geo'; -import { constant, isObject, isValid } from './index.js'; +import { constant, isObject } from './index.js'; const identity = constant({ stream: (stream) => stream }); diff --git a/src/lib/helpers/reduce.test.ts b/src/lib/helpers/reduce.test.ts index 26fc4887..2ff3e409 100644 --- a/src/lib/helpers/reduce.test.ts +++ b/src/lib/helpers/reduce.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; import { reduceOutputs, type ReducerName } from './reduce.js'; -import type { ChannelAccessor, ChannelName, RawValue } from '$lib/types.js'; +import type { ChannelAccessor, ChannelName } from '$lib/types.js'; describe('reduceOutputs', () => { it('should correctly reduce outputs', () => { diff --git a/src/lib/helpers/reduce.ts b/src/lib/helpers/reduce.ts index f1b58ede..fdfa65d0 100644 --- a/src/lib/helpers/reduce.ts +++ b/src/lib/helpers/reduce.ts @@ -1,12 +1,5 @@ -import type { - ChannelAccessor, - ChannelName, - Channels, - DataRecord, - DataRow, - RawValue -} from '$lib/types.js'; -import { min, max, mode, sum, mean, median, variance, deviation, quantile, range } from 'd3-array'; +import type { ChannelName, Channels, DataRecord, DataRow, RawValue } from '$lib/types.js'; +import { min, max, mode, sum, mean, median, variance, deviation, quantile } from 'd3-array'; import { resolveChannel } from './resolve.js'; import { POSITION_CHANNELS } from './index.js'; diff --git a/src/lib/helpers/resolve.test.ts b/src/lib/helpers/resolve.test.ts index ebe1ae21..95c4ec23 100644 --- a/src/lib/helpers/resolve.test.ts +++ b/src/lib/helpers/resolve.test.ts @@ -2,7 +2,6 @@ import { describe, it, expect } from 'vitest'; import { resolveChannel, resolveProp } from './resolve.js'; import { RAW_VALUE } from '$lib/transforms/recordize.js'; - describe('resolveProp', () => { it('resolves string keys', () => { expect(resolveProp('key', { key: 42 })).toBe(42); diff --git a/src/lib/helpers/resolve.ts b/src/lib/helpers/resolve.ts index f207e3c9..c2cc6a54 100644 --- a/src/lib/helpers/resolve.ts +++ b/src/lib/helpers/resolve.ts @@ -3,7 +3,6 @@ import isDataRecord from '$lib/helpers/isDataRecord.js'; import isRawValue from '$lib/helpers/isRawValue.js'; import type { MarkStyleProps, PlotState, ScaledDataRecord } from '$lib/types.js'; import { isValid } from './isValid.js'; -import { pick } from 'es-toolkit'; import type { ScaleName, @@ -32,7 +31,11 @@ export function resolveProp( return datum == null ? accessor() : accessor(datum[RAW_VALUE] != null ? datum[RAW_VALUE] : datum); - } else if ((typeof accessor === 'string' || typeof accessor === 'symbol') && datum && datum[accessor] !== undefined) { + } else if ( + (typeof accessor === 'string' || typeof accessor === 'symbol') && + datum && + datum[accessor] !== undefined + ) { return datum[accessor] as T; } return isRawValue(accessor) ? accessor : _defaultValue; @@ -54,14 +57,14 @@ export function toChannelOption( return isDataRecord(channel) ? (channel as ChannelOptions) : { - value: channel, - scale: - (!isPositionScale && !isOpacityScale && typeof channel === 'number') || - typeof channel === 'undefined' - ? null - : CHANNEL_SCALE[name], - channel: null - }; + value: channel, + scale: + (!isPositionScale && !isOpacityScale && typeof channel === 'number') || + typeof channel === 'undefined' + ? null + : CHANNEL_SCALE[name], + channel: null + }; } export function resolveChannel( @@ -96,7 +99,11 @@ function resolve( // so we're passing the original value to accessor functions instead of our wrapped record return accessor(datum[RAW_VALUE] != null ? datum[RAW_VALUE] : datum); // use accessor string - if ((typeof accessor === 'string' || typeof accessor === 'symbol') && datum[accessor] !== undefined) return datum[accessor]; + if ( + (typeof accessor === 'string' || typeof accessor === 'symbol') && + datum[accessor] !== undefined + ) + return datum[accessor]; // fallback to channel name as accessor if (accessor === null && datum[channel] !== undefined) return datum[channel]; return isRawValue(accessor) ? accessor : null; @@ -111,10 +118,10 @@ function resolve( return typeof accessor === 'function' ? accessor(datum) : accessor !== null && isRawValue(accessor) - ? accessor - : !Array.isArray(datum) && (scale === 'x' || scale === 'y') - ? datum - : null; + ? accessor + : !Array.isArray(datum) && (scale === 'x' || scale === 'y') + ? datum + : null; } } @@ -197,7 +204,7 @@ export function resolveStyles( recomputeChannels = false ): [string | null, string | null] { const styleProps = { - ...getBaseStylesObject(datum.datum, channels), + ...getBaseStylesObject(datum?.datum, channels), fill: 'none', stroke: 'none', ...(defaultColorProp && channels[oppositeColor[defaultColorProp]] == null @@ -209,7 +216,7 @@ export function resolveStyles( .map(([key, cssAttr]) => [ key, cssAttr, - recomputeChannels ? resolveChannel(key, datum.datum, channels) : datum[key] + recomputeChannels ? resolveChannel(key, datum?.datum, channels) : datum?.[key] ]) .filter( ([key, , value]) => diff --git a/src/lib/helpers/scales.ts b/src/lib/helpers/scales.ts index 706a3ccb..2d5be986 100644 --- a/src/lib/helpers/scales.ts +++ b/src/lib/helpers/scales.ts @@ -1,4 +1,4 @@ -import { extent, range as d3Range, ascending } from 'd3-array'; +import { extent, ascending } from 'd3-array'; import { isColorOrNull, @@ -135,16 +135,16 @@ export function computeScales( const projection = plotOptions.projection ? createProjection( - { projOptions: plotOptions.projection, inset: plotOptions.inset }, - { - width: plotWidth, - height: plotHeight, - marginBottom: plotOptions.marginBottom, - marginLeft: plotOptions.marginLeft, - marginRight: plotOptions.marginRight, - marginTop: plotOptions.marginTop - } - ) + { projOptions: plotOptions.projection, inset: plotOptions.inset }, + { + width: plotWidth, + height: plotHeight, + marginBottom: plotOptions.marginBottom, + marginLeft: plotOptions.marginLeft, + marginRight: plotOptions.marginRight, + marginTop: plotOptions.marginTop + } + ) : null; return { x, y, r, color, opacity, length, symbol, fx, fy, projection }; } @@ -214,8 +214,8 @@ export function createScale( name === 'color' ? isColorOrNull : name === 'symbol' - ? isSymbolOrNull - : false; + ? isSymbolOrNull + : false; let allValuesAreOutputType = !!isOutputType && mark.data.length > 0; @@ -251,7 +251,10 @@ export function createScale( for (const datum of mark.data) { const value = resolveProp(channelOptions.value, datum); dataValues.add(value); - if (name === 'color' && scaleOptions.type === 'quantile' || scaleOptions.type === 'quantile-cont') { + if ( + (name === 'color' && scaleOptions.type === 'quantile') || + scaleOptions.type === 'quantile-cont' + ) { allDataValues.push(value); } } @@ -296,7 +299,8 @@ export function createScale( valueArr.sort(ascending); } - const valueArray = type === 'quantile' || type === 'quantile-cont' ? allDataValues.toSorted() : valueArr; + const valueArray = + type === 'quantile' || type === 'quantile-cont' ? allDataValues.toSorted() : valueArr; const domain = scaleOptions.domain ? isOrdinal @@ -308,10 +312,10 @@ export function createScale( type === 'categorical' || type === 'quantile' || type === 'quantile-cont' - ? name === 'y' - ? valueArray.toReversed() - : valueArray - : extent(scaleOptions.zero ? [0, ...valueArray] : valueArray); + ? name === 'y' + ? valueArray.toReversed() + : valueArray + : extent(scaleOptions.zero ? [0, ...valueArray] : valueArray); if (!scaleOptions.scale) { throw new Error(`No scale function defined for ${name}`); @@ -341,8 +345,8 @@ export function createScale( type === 'time' ? null : propNames.size === 1 - ? `${[...propNames.values()][0]}${type === 'log' ? ' (log)' : ''}` - : null + ? `${[...propNames.values()][0]}${type === 'log' ? ' (log)' : ''}` + : null }; } @@ -402,9 +406,9 @@ const scaledChannelNames: ScaledChannelName[] = [ ]; /** - * Mark channels can explicitely or implicitely be exempt from being + * Mark channels can explicitly or implicitly be exempt from being * mapped to a scale, so everywhere where values are being mapped to - * scales, we need to check if the the scale is supposed to be used + * scales, we need to check if the scale is supposed to be used * not. That's what this function is used for. */ export function getUsedScales( @@ -419,8 +423,8 @@ export function getUsedScales( return [ channel, !skipMarks.has(mark.id) && - toChannelOption(channel, options[channel]).scale !== null && - !plot.scales[scale].isDummy + toChannelOption(channel, options[channel]).scale !== null && + !plot.scales[scale].isDummy ]; }) ) as { [k in ScaledChannelName]: boolean }; @@ -450,7 +454,7 @@ export function projectXY( ): [number, number] { if (scales.projection) { // TODO: pretty sure this is not how projection streams are supposed to be used - // efficiantly, in observable plot, all data points of a mark are projected using + // efficiently, in observable plot, all data points of a mark are projected using // the same stream let x_, y_; const stream = scales.projection.stream({ @@ -474,8 +478,8 @@ export function projectX(channel: 'x' | 'x1' | 'x2', scales: PlotScales, value: (channel === 'x' && scales.x.type === 'band' ? scales.x.fn.bandwidth() * 0.5 : channel === 'x2' && scales.x.type === 'band' - ? scales.x.fn.bandwidth() - : 0) + ? scales.x.fn.bandwidth() + : 0) ); } @@ -485,7 +489,7 @@ export function projectY(channel: 'y' | 'y1' | 'y2', scales: PlotScales, value: (channel === 'y' && scales.y.type === 'band' ? scales.y.fn.bandwidth() * 0.5 : channel === 'y2' && scales.y.type === 'band' - ? scales.y.fn.bandwidth() - : 0) + ? scales.y.fn.bandwidth() + : 0) ); } diff --git a/src/lib/helpers/typeChecks.ts b/src/lib/helpers/typeChecks.ts index f9614132..04d8ff22 100644 --- a/src/lib/helpers/typeChecks.ts +++ b/src/lib/helpers/typeChecks.ts @@ -47,14 +47,16 @@ export function isColorOrNull(v: RawValue | null | undefined) { if (v == null) return true; if (typeof v === 'string') { v = `${v}`.toLowerCase(); - return (v === 'currentcolor' || + return ( + v === 'currentcolor' || CSS_VAR.test(v) || CSS_COLOR.test(v) || CSS_COLOR_MIX.test(v) || CSS_COLOR_CONTRAST.test(v) || CSS_RGBA.test(v) || CSS_URL.test(v) || - color(v) !== null) + color(v) !== null + ); } return false; } diff --git a/src/lib/marks/Area.svelte b/src/lib/marks/Area.svelte index 0e19c8bb..f9adda22 100644 --- a/src/lib/marks/Area.svelte +++ b/src/lib/marks/Area.svelte @@ -1,16 +1,21 @@ + {:else} - {#each grouped as areaData} + {#each grouped as areaData, i (i)} {#snippet el(datum: ScaledDataRecord)} + {@const title = resolveProp(options.title, datum.datum, '')} {@const [style, styleClass] = resolveStyles( plot, datum, @@ -133,7 +126,8 @@ class={['svelteplot-area', className, styleClass]} clip-path={options.clipPath} d={areaPath(areaData)} - {style} /> + {style} + >{#if title}{title}{/if} {/snippet} {#if areaData.length > 0} {#if options.href} diff --git a/src/lib/marks/AreaX.svelte b/src/lib/marks/AreaX.svelte index c1b19f06..0a10c6fb 100644 --- a/src/lib/marks/AreaX.svelte +++ b/src/lib/marks/AreaX.svelte @@ -1,17 +1,18 @@ + - - diff --git a/src/lib/marks/Arrow.svelte b/src/lib/marks/Arrow.svelte index f757e23e..644cdaae 100644 --- a/src/lib/marks/Arrow.svelte +++ b/src/lib/marks/Arrow.svelte @@ -1,33 +1,14 @@ - - + + + + + + + + + + + diff --git a/src/lib/marks/BollingerY.svelte b/src/lib/marks/BollingerY.svelte index a3441f94..c5a5ca49 100644 --- a/src/lib/marks/BollingerY.svelte +++ b/src/lib/marks/BollingerY.svelte @@ -2,12 +2,8 @@ @component line representing a moving average and an area representing volatility as a band --> - + + diff --git a/src/lib/marks/BoxX.svelte b/src/lib/marks/BoxX.svelte index abb75779..35650961 100644 --- a/src/lib/marks/BoxX.svelte +++ b/src/lib/marks/BoxX.svelte @@ -1,3 +1,6 @@ + + diff --git a/src/lib/marks/BrushY.svelte b/src/lib/marks/BrushY.svelte index b35ac76c..5fe054f6 100644 --- a/src/lib/marks/BrushY.svelte +++ b/src/lib/marks/BrushY.svelte @@ -1,7 +1,11 @@ + + diff --git a/src/lib/marks/Cell.svelte b/src/lib/marks/Cell.svelte index c2088f0a..60daa848 100644 --- a/src/lib/marks/Cell.svelte +++ b/src/lib/marks/Cell.svelte @@ -2,11 +2,7 @@ @component For arbitrary rectangles, requires band x and y scales --> - + + - type CellXProps = BaseMarkProps & { - data: DataRow[]; - x?: ChannelAccessor; - fill?: ChannelAccessor; - stroke?: ChannelAccessor; - } & RectMarkProps; + + + - {#each data as datum} + {#each data as datum, i (i)} {@const x_ = resolveChannel('x', datum, { x, y })} {@const y_ = resolveChannel('y', datum, { x, y })} {#if isValid(x_) && isValid(y_)} diff --git a/src/lib/marks/CustomMarkHTML.svelte b/src/lib/marks/CustomMarkHTML.svelte index 7f4f1294..77425267 100644 --- a/src/lib/marks/CustomMarkHTML.svelte +++ b/src/lib/marks/CustomMarkHTML.svelte @@ -75,7 +75,7 @@ {#snippet customMarks()} - {#each data as datum} + {#each data as datum, i (i)} {@const [px, py] = getXY(datum)} {#if isValid(px) && isValid(py)}
- import type { - BaseMarkProps, - ChannelAccessor, - ConstantAccessor, - CurveName, - DataRecord, - PlotContext - } from '$lib/types.js'; - import { Line, Area } from '$lib/index.js'; - import { randomId, coalesce } from '$lib/helpers/index.js'; - import { getContext } from 'svelte'; - import { extent, max, min } from 'd3-array'; - import { resolveChannel } from '$lib/helpers/resolve.js'; - import type { CurveFactory } from 'd3-shape'; - - type DifferenceYMarkProps = { + + + + + diff --git a/src/lib/marks/DotY.svelte b/src/lib/marks/DotY.svelte index 128dd7f1..81099b5e 100644 --- a/src/lib/marks/DotY.svelte +++ b/src/lib/marks/DotY.svelte @@ -1,8 +1,15 @@ + + + diff --git a/src/lib/marks/Frame.svelte b/src/lib/marks/Frame.svelte index 4d5d2689..c0153ee1 100644 --- a/src/lib/marks/Frame.svelte +++ b/src/lib/marks/Frame.svelte @@ -1,16 +1,20 @@ - - let { automatic, class: className = '', ...options }: FrameMarkProps = $props(); + - + {#snippet children({ usedScales })} + + {/snippet} diff --git a/src/lib/marks/Geo.svelte b/src/lib/marks/Geo.svelte index ecb780f1..cd56da36 100644 --- a/src/lib/marks/Geo.svelte +++ b/src/lib/marks/Geo.svelte @@ -1,12 +1,26 @@ + + + + + + diff --git a/src/lib/marks/LineY.svelte b/src/lib/marks/LineY.svelte index f81b2a2b..14ba10da 100644 --- a/src/lib/marks/LineY.svelte +++ b/src/lib/marks/LineY.svelte @@ -1,8 +1,11 @@ + diff --git a/src/lib/marks/Link.svelte b/src/lib/marks/Link.svelte index 0b360d3c..00d50f32 100644 --- a/src/lib/marks/Link.svelte +++ b/src/lib/marks/Link.svelte @@ -1,3 +1,22 @@ + + + + + + + - {#each groups as group} + {#each groups as group, g (g)} {/each} diff --git a/src/lib/marks/RegressionY.svelte b/src/lib/marks/RegressionY.svelte index 6191ea35..c141e245 100644 --- a/src/lib/marks/RegressionY.svelte +++ b/src/lib/marks/RegressionY.svelte @@ -1,3 +1,10 @@ + + + - {#each groups as group} + {#each groups as group, i (i)} {/each} diff --git a/src/lib/marks/RuleX.svelte b/src/lib/marks/RuleX.svelte index ad0fbcce..cd8d31af 100644 --- a/src/lib/marks/RuleX.svelte +++ b/src/lib/marks/RuleX.svelte @@ -1,3 +1,18 @@ + + + + + + diff --git a/src/lib/marks/Spike.svelte b/src/lib/marks/Spike.svelte index 7e1f8a77..35218f9f 100644 --- a/src/lib/marks/Spike.svelte +++ b/src/lib/marks/Spike.svelte @@ -1,6 +1,14 @@ + + + 0}
- {#each plot.scales.color.domain as value} + {#each plot.scales.color.domain as value (value)} {@const symbolV = plot.scales.symbol.fn(value)} {@const symbolType = maybeSymbol(symbolV)} {@const color = plot.colorSymbolRedundant diff --git a/src/lib/marks/Text.svelte b/src/lib/marks/Text.svelte index d1e51d8a..7f84e330 100644 --- a/src/lib/marks/Text.svelte +++ b/src/lib/marks/Text.svelte @@ -1,26 +1,13 @@ - + + + + @@ -170,7 +170,7 @@ implement canvas rendering for vector mark {:else} - {#each scaledData as d} + {#each scaledData as d, i (i)} {@const r = resolveChannel('r', d.datum, { r: 3, ...args })} {#if d.valid && isValid(r)} {@const dx = +resolveProp(args.dx, d.datum, 0)} diff --git a/src/lib/marks/helpers/BaseAxisX.svelte b/src/lib/marks/helpers/BaseAxisX.svelte index 2e002978..daa2f33d 100644 --- a/src/lib/marks/helpers/BaseAxisX.svelte +++ b/src/lib/marks/helpers/BaseAxisX.svelte @@ -11,7 +11,7 @@ RawValue, ScaleType } from '$lib/types.js'; - import { resolveScaledStyles, resolveProp } from '$lib/helpers/resolve.js'; + import { resolveProp, resolveStyles } from '$lib/helpers/resolve.js'; import { max } from 'd3-array'; import { randomId, testFilter } from '$lib/helpers/index.js'; @@ -88,7 +88,7 @@ const T = tickObjects.length; for (let i = 0; i < T; i++) { let j = i; - // find the preceeding tick that was not hidden + // find the preceding tick that was not hidden do { j--; } while (j >= 0 && tickObjects[j].hidden); @@ -142,7 +142,7 @@ - {#each positionedTicks as tick, t} + {#each positionedTicks as tick, t (t)} {#if testFilter(tick.value, options) && !tick.hidden} {@const textLines = tick.text} {@const prevTextLines = t && positionedTicks[t - 1].text} @@ -152,27 +152,41 @@ {@const moveDown = (tickSize + tickPadding + (tickRotate !== 0 ? tickFontSize * 0.35 : 0)) * (anchor === 'bottom' ? 1 : -1)} + {@const [textStyle, textClass] = resolveStyles( + plot, + tick, + { + fontVariant: isQuantitative ? 'tabular-nums' : 'normal', + ...options, + fontSize: tickFontSize, + stroke: null + }, + 'fill', + { x: true } + )} 0 ? 'start' : 'middle'}> {#if tickSize} + {@const [tickLineStyle, tickLineClass] = resolveStyles( + plot, + tick, + options, + 'stroke', + { x: true } + )} {/if} {!prevTextLines || prevTextLines[i] !== line ? line diff --git a/src/lib/marks/helpers/BaseAxisY.svelte b/src/lib/marks/helpers/BaseAxisY.svelte index 21f9489e..119bef86 100644 --- a/src/lib/marks/helpers/BaseAxisY.svelte +++ b/src/lib/marks/helpers/BaseAxisY.svelte @@ -1,7 +1,7 @@ - {#each positionedTicks as tick, t} + {#each positionedTicks as tick, t (t)} {#if testFilter(tick.value, options) && !tick.hidden} {@const tickClass_ = resolveProp(tickClass, tick.value)} + {@const [textStyle, textClass] = resolveStyles( + plot, + tick, + { + fontVariant: isQuantitative ? 'tabular-nums' : 'normal', + ...options, + fontSize: tickFontSize, + stroke: null + }, + 'fill', + { y: true } + )} {#if tickSize} + {@const [tickLineStyle, tickLineClass] = resolveStyles( + plot, + tick, + options, + 'stroke', + { y: true } + )} {/if} {Array.isArray(tick.text) ? tick.text.join(' ') : tick.text} diff --git a/src/lib/marks/helpers/DotCanvas.svelte b/src/lib/marks/helpers/DotCanvas.svelte index ac3c510c..a897b6ce 100644 --- a/src/lib/marks/helpers/DotCanvas.svelte +++ b/src/lib/marks/helpers/DotCanvas.svelte @@ -6,7 +6,6 @@ ScaledDataRecord, PlotContext } from '$lib/types.js'; - import { CSS_VAR } from '$lib/constants.js'; import { resolveProp } from '$lib/helpers/resolve.js'; import { maybeSymbol } from '$lib/helpers/symbols.js'; import { symbol as d3Symbol } from 'd3-shape'; diff --git a/src/lib/marks/helpers/GeoCanvas.svelte b/src/lib/marks/helpers/GeoCanvas.svelte index d45867e9..c9284462 100644 --- a/src/lib/marks/helpers/GeoCanvas.svelte +++ b/src/lib/marks/helpers/GeoCanvas.svelte @@ -8,7 +8,7 @@ } from '$lib/types.js'; import { CSS_VAR } from '$lib/constants.js'; import { resolveProp, resolveScaledStyleProps } from '$lib/helpers/resolve.js'; - import { getContext, untrack } from 'svelte'; + import { getContext } from 'svelte'; import { type GeoPath } from 'd3-geo'; import CanvasLayer from './CanvasLayer.svelte'; import type { Attachment } from 'svelte/attachments'; diff --git a/src/lib/marks/helpers/LinearGradientX.svelte b/src/lib/marks/helpers/LinearGradientX.svelte index 2cc27bf6..4d64d50b 100644 --- a/src/lib/marks/helpers/LinearGradientX.svelte +++ b/src/lib/marks/helpers/LinearGradientX.svelte @@ -21,7 +21,7 @@ - {#each projectedStops as { px, color }} + {#each projectedStops as { px, color }, i (i)} {/each} diff --git a/src/lib/marks/helpers/LinearGradientY.svelte b/src/lib/marks/helpers/LinearGradientY.svelte index 5418e1ff..8ee1f6f0 100644 --- a/src/lib/marks/helpers/LinearGradientY.svelte +++ b/src/lib/marks/helpers/LinearGradientY.svelte @@ -21,7 +21,7 @@ - {#each projectedStops as { py, color }} + {#each projectedStops as { py, color }, i (i)} {/each} diff --git a/src/lib/marks/helpers/MarkerPath.svelte b/src/lib/marks/helpers/MarkerPath.svelte index 72d4c691..8ca944f6 100644 --- a/src/lib/marks/helpers/MarkerPath.svelte +++ b/src/lib/marks/helpers/MarkerPath.svelte @@ -25,7 +25,7 @@ datum: DataRecord; /** * the marker shape to use at the start of the path, defaults to - * cirlce + * circle */ markerStart?: boolean | MarkerShape; /** @@ -96,7 +96,7 @@ class={className} stroke-width={strokeWidth_} use:addEventHandlers={{ getPlotState, options: mark.options, datum }}> - {#each Object.entries( { start: markerStart, mid: markerMid, end: markerEnd, all: marker } ) as [key, marker]} + {#each Object.entries( { start: markerStart, mid: markerMid, end: markerEnd, all: marker } ) as [key, marker] (key)} {@const markerId = `marker-${key === 'all' ? '' : `${key}-`}${id}`} {#if isSnippet(marker)} {@render marker(markerId, color)} diff --git a/src/lib/marks/helpers/RectPath.svelte b/src/lib/marks/helpers/RectPath.svelte index 565c76bc..0b35cc65 100644 --- a/src/lib/marks/helpers/RectPath.svelte +++ b/src/lib/marks/helpers/RectPath.svelte @@ -25,7 +25,8 @@ Helper component for rendering rectangular marks in SVG height, useInsetAsFallbackVertically = true, useInsetAsFallbackHorizontally = true, - usedScales + usedScales, + fallbackStyle = 'fill' }: { datum: ScaledDataRecord; class: string | null; @@ -47,39 +48,40 @@ Helper component for rendering rectangular marks in SVG */ useInsetAsFallbackHorizontally?: boolean; usedScales: UsedScales; + fallbackStyle?: 'fill' | 'stroke'; } = $props(); const { getPlotState } = getContext('svelteplot'); const plot = $derived(getPlotState()); - const dx = $derived(+(resolveProp(options.dx, datum.datum, 0) as number)); - const dy = $derived(+(resolveProp(options.dy, datum.datum, 0) as number)); - const inset = $derived(+(resolveProp(options.inset, datum.datum, 0) as number)); + const dx = $derived(+(resolveProp(options.dx, datum?.datum, 0) as number)); + const dy = $derived(+(resolveProp(options.dy, datum?.datum, 0) as number)); + const inset = $derived(+(resolveProp(options.inset, datum?.datum, 0) as number)); const insetLeft = $derived( +(resolveProp( options.insetLeft, - datum.datum, + datum?.datum, useInsetAsFallbackHorizontally ? inset : 0 ) as number) ); const insetRight = $derived( +(resolveProp( options.insetRight, - datum.datum, + datum?.datum, useInsetAsFallbackHorizontally ? inset : 0 ) as number) ); const insetTop = $derived( +(resolveProp( options.insetTop, - datum.datum, + datum?.datum, useInsetAsFallbackVertically ? inset : 0 ) as number) ); const insetBottom = $derived( +(resolveProp( options.insetBottom, - datum.datum, + datum?.datum, useInsetAsFallbackVertically ? inset : 0 ) as number) ); @@ -94,12 +96,14 @@ Helper component for rendering rectangular marks in SVG borderRadius.bottomLeft ?? 0 ) > 0) ); - const [style, styleClass] = $derived(resolveStyles(plot, datum, options, 'fill', usedScales)); + const [style, styleClass] = $derived( + resolveStyles(plot, datum, options, fallbackStyle, usedScales) + ); {#if hasBorderRadius} {:else} {/if} diff --git a/src/lib/marks/helpers/events.ts b/src/lib/marks/helpers/events.ts index 8d5cf2a7..044eb28e 100644 --- a/src/lib/marks/helpers/events.ts +++ b/src/lib/marks/helpers/events.ts @@ -1,6 +1,6 @@ -import type { BaseMarkProps, DataRecord, PlotScale, PlotScales, PlotState } from '$lib/types.js'; +import type { BaseMarkProps, DataRecord, PlotScale, PlotState } from '$lib/types.js'; import type { MouseEventHandler } from 'svelte/elements'; -import { invert, pick } from 'es-toolkit'; +import { pick } from 'es-toolkit'; import { RAW_VALUE } from '$lib/transforms/recordize.js'; import { INDEX } from '$lib/constants.js'; @@ -15,14 +15,14 @@ declare global { } /** - * Translates client coordinates (clientX, clientY) to the layer coordinates + * Translates client coordinates (clientX, clientY) to the layer coordinates * of the plot frame, regardless of which element triggered the event */ export function clientToLayerCoordinates( event: MouseEvent, plotBody: HTMLElement | null | undefined ): [number, number] { - // If layerX/Y already exist and the target is the plot frame (rect element), + // If layerX/Y already exist and the target is the plot frame (rect element), // we can use them directly // if (event.layerX !== undefined && (event.target as SVGElement).tagName === 'rect') { // return [event.layerX, event.layerY]; @@ -34,10 +34,7 @@ export function clientToLayerCoordinates( const plotBodyRect = plotBody.getBoundingClientRect(); // Calculate the coordinates relative to the plot body - return [ - event.clientX - plotBodyRect.left, - event.clientY - plotBodyRect.top - ]; + return [event.clientX - plotBodyRect.left, event.clientY - plotBodyRect.top]; } export function addEventHandlers( @@ -77,7 +74,7 @@ export function addEventHandlers( 'ontouchcancel', 'ontouchend', 'ontouchmove', - 'onwheel', + 'onwheel' ]); const listeners = new Map>(); diff --git a/src/lib/transforms/bin.test.ts b/src/lib/transforms/bin.test.ts index 3f554a29..d8478715 100644 --- a/src/lib/transforms/bin.test.ts +++ b/src/lib/transforms/bin.test.ts @@ -73,7 +73,7 @@ describe('binX', () => { y: d })); - it('bins dailys into weekly data', () => { + it('bins daily into weekly data', () => { const { data, ...channels } = binX( { data: dailyData, @@ -119,7 +119,7 @@ describe('binX', () => { expect(binDuration).toBeLessThanOrEqual(7 * 24 * 60 * 60 * 1000); }); - // it.only('bins dailys into weekly data', () => { + // it.only('bins daily into weekly data', () => { // const { data, ...channels } = binX( // { // data: dailyData, diff --git a/src/lib/transforms/bin.ts b/src/lib/transforms/bin.ts index c4898276..0c75331a 100644 --- a/src/lib/transforms/bin.ts +++ b/src/lib/transforms/bin.ts @@ -5,13 +5,12 @@ import { maybeInterval } from '$lib/helpers/autoTicks.js'; import { bin as d3Bin, extent, - groups as d3Groups, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, type ThresholdCountGenerator } from 'd3-array'; -import { Reducer, reduceOutputs, type ReducerName } from '$lib/helpers/reduce.js'; +import { reduceOutputs, type ReducerName } from '$lib/helpers/reduce.js'; import { groupFacetsAndZ } from '$lib/helpers/group.js'; import { isDate } from '$lib/helpers/typeChecks.js'; @@ -159,7 +158,7 @@ export function binY( } /** - * for binning in x and y dimension simulatenously + * for binning in x and y dimension simultaneously */ export function bin( { data, ...channels }: TransformArg, diff --git a/src/lib/transforms/interval.test.ts b/src/lib/transforms/interval.test.ts index 24ecd474..802e5eb0 100644 --- a/src/lib/transforms/interval.test.ts +++ b/src/lib/transforms/interval.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi } from 'vitest'; +import { describe, it, expect } from 'vitest'; import { intervalX, intervalY } from './interval.js'; describe('intervalX', () => { @@ -53,7 +53,7 @@ describe('intervalX', () => { const xTime = item.x.getTime(); // x1 should be before x - expect(x1Time).toBeLessThan(xTime); + expect(x1Time).toBeLessThanOrEqual(xTime); // x2 should be after x expect(x2Time).toBeGreaterThan(xTime); diff --git a/src/lib/transforms/recordize.ts b/src/lib/transforms/recordize.ts index a4043b92..b5125ae0 100644 --- a/src/lib/transforms/recordize.ts +++ b/src/lib/transforms/recordize.ts @@ -19,7 +19,7 @@ export function recordizeX( data: data.map((value, index) => ({ __value: value, ...(withIndex ? { [INDEX]: index } : {}), - [RAW_VALUE]: value, + [RAW_VALUE]: value })) as DataRecord[], ...channels, x: RAW_VALUE, @@ -44,7 +44,7 @@ export function recordizeY( return { data: Array.from(data).map((value, index) => ({ ...(withIndex ? { __index: index } : {}), - [RAW_VALUE]: value, + [RAW_VALUE]: value })) as DataRecord[], ...channels, ...(withIndex ? { x: '__index' } : {}), @@ -93,10 +93,10 @@ export function recordize({ data, ...channels }: TransformArgsRow): TransformArg if (!isDataRecord(data[0])) { return { data: (data as RawValue[]).map((d) => ({ - [RAW_VALUE]: d, + [RAW_VALUE]: d })) as DataRecord[], - ...channels, + ...channels }; } return { data, ...channels }; -} \ No newline at end of file +} diff --git a/src/lib/transforms/rename.test.ts b/src/lib/transforms/rename.test.ts index e453a54d..dfe06725 100644 --- a/src/lib/transforms/rename.test.ts +++ b/src/lib/transforms/rename.test.ts @@ -1,8 +1,6 @@ import { describe, it, expect } from 'vitest'; -import { renameChannels, renameChannelsAndData, replaceChannels } from './rename.js'; +import { renameChannels } from './rename.js'; import type { DataRecord } from '$lib/types.js'; -import { csvParse } from 'd3-dsv'; -import { readFileSync } from 'fs'; const inputData: DataRecord[] = [ { year: 2000, facet: 'A', value: 10 }, diff --git a/src/lib/transforms/shift.ts b/src/lib/transforms/shift.ts index 3b59174c..53bc35b8 100644 --- a/src/lib/transforms/shift.ts +++ b/src/lib/transforms/shift.ts @@ -1,6 +1,6 @@ import { resolveChannel } from '$lib/helpers/resolve.js'; import { maybeTimeInterval } from '$lib/helpers/time.js'; -import type { ChannelName, DataRecord, TransformArg } from '$lib/types.js'; +import type { DataRecord, TransformArg } from '$lib/types.js'; type RequireAtLeastOne = Pick> & { diff --git a/src/lib/transforms/window.ts b/src/lib/transforms/window.ts index 041b158d..d3585205 100644 --- a/src/lib/transforms/window.ts +++ b/src/lib/transforms/window.ts @@ -1,6 +1,6 @@ import { maybeInterval } from '$lib/helpers/autoTicks.js'; import { isValid } from '$lib/helpers/index.js'; -import { Reducer, mayberReducer, type ReducerName } from '$lib/helpers/reduce.js'; +import { mayberReducer, type ReducerName } from '$lib/helpers/reduce.js'; import { resolveChannel } from '$lib/helpers/resolve.js'; import type { DataRecord, ScaledChannelName, TransformArg } from '$lib/types.js'; import { groups as d3Groups } from 'd3-array'; diff --git a/src/lib/types.ts b/src/lib/types.ts index 7e83e2cf..7b782c76 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -151,12 +151,12 @@ export type ScaleOptions = { base?: number; // sorting for band and point scales sort?: - | ChannelAccessor - | ((a: RawValue, b: RawValue) => number) - | { - channel: string; - order: 'ascending' | 'descending'; - }; + | ChannelAccessor + | ((a: RawValue, b: RawValue) => number) + | { + channel: string; + order: 'ascending' | 'descending'; + }; // symlog scales constant?: number; }; @@ -164,18 +164,18 @@ export type ScaleOptions = { export type ColorScaleOptions = ScaleOptions & { legend: boolean; type: - | ScaleType - | 'categorical' - | 'sequential' - | 'cyclical' - | 'threshold' - | 'quantile' - | 'quantize' - | 'diverging' - | 'diverging-log' - | 'diverging-pow' - | 'diverging-sqrt' - | 'diverging-symlog'; + | ScaleType + | 'categorical' + | 'sequential' + | 'cyclical' + | 'threshold' + | 'quantile' + | 'quantize' + | 'diverging' + | 'diverging-log' + | 'diverging-pow' + | 'diverging-sqrt' + | 'diverging-symlog'; scheme: string; /** * fallback color used for null/undefined @@ -394,9 +394,9 @@ export type PlotOptions = { */ locale: string; /** - * + * pass a @emotion/css function to style plot using dynamic classes */ - css: (d: string) => string; + css: (d: string) => string | undefined; }; export type PlotDefaults = { @@ -438,6 +438,11 @@ export type PlotDefaults = { */ numberFormat: Intl.NumberFormatOptions; markerDotRadius: number; + /** + * fallback color to be used for null/NA + */ + unknown: string; + css: (d: string) => string | undefined; }; export type GenericMarkOptions = Record; @@ -474,9 +479,9 @@ export type PlotScale = { uniqueScaleProps: Set; skip: Map>; fn: ScaleLinear & - ScaleBand & - ScaleOrdinal & - ScaleOrdinal; + ScaleBand & + ScaleOrdinal & + ScaleOrdinal; }; export type CurveName = @@ -627,6 +632,19 @@ export type FacetContext = { getFacetState: () => FacetState; }; +export type LinkableMarkProps = { + /** + * simple browser tooltip to be displayed on mouseover + */ + title: ConstantAccessor; + /** + * if set, the mark element will be wrapped in a link + * element + */ + href: ConstantAccessor; + target: ConstantAccessor<'_self' | '_blank' | string>; +}; + export type BaseMarkProps = Partial<{ /** * Filter the data without modifying the inferred scales @@ -683,31 +701,21 @@ export type BaseMarkProps = Partial<{ ontouchcancel?: MouseEventHandler; oncontextmenu?: MouseEventHandler; onwheel?: MouseEventHandler; - /** - * simple browser tooltip to be displayed on mouseover - */ - title: ConstantAccessor; - /** - * if set, the mark element will be wrapped in a link - * element - */ - href: ConstantAccessor; - target: ConstantAccessor<'_self' | '_blank' | string>; /** * if you want to give your mark element an extra CSS class */ - class: string; + class: string | null; cursor: ConstantAccessor; }>; export type BorderRadius = | number | { - topLeft?: number; - topRight?: number; - bottomRight?: number; - bottomLeft?: number; - }; + topLeft?: number; + topRight?: number; + bottomRight?: number; + bottomLeft?: number; + }; export type BaseRectMarkProps = { inset?: ConstantAccessor; @@ -795,6 +803,7 @@ export type MarkStyleProps = | 'fill' | 'fillOpacity' | 'fontWeight' + | 'fontVariant' | 'fontSize' | 'fontStyle' | 'stroke' @@ -894,4 +903,4 @@ export type MapMethod = export type MapOptions = Partial>; -export type UsedScales = Record; \ No newline at end of file +export type UsedScales = Record; diff --git a/src/lib/ui/RadioInput.svelte b/src/lib/ui/RadioInput.svelte index 703b93ba..3015b6c7 100644 --- a/src/lib/ui/RadioInput.svelte +++ b/src/lib/ui/RadioInput.svelte @@ -18,7 +18,7 @@ {#if label} {/if} - {#each options as p} + {#each options as p (p)}