From 328294c0bfa1d7af1fa0d8322ff321e058494c1b Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 16:46:47 -0700 Subject: [PATCH 01/26] update library --- package.json | 4 +- pnpm-lock.yaml | 53 ++++++++++++++++++----- pnpm-workspace.yaml | 3 -- src/main.ts | 102 ++++++++++++++++++++++---------------------- 4 files changed, 96 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index 0c7f24a..e1f710e 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@typescript/typescript6": "^6.0.2", "@vitest/coverage-v8": "^5.0.0", "jsdom": "^30.0.1", - "solid-js": "^1.9.15", + "solid-js": "^2.0.0-rc.9", "typescript": "^7.0.2", "vite": "^8.2.2", "vite-plugin-dts": "^5.1.0", @@ -71,6 +71,6 @@ "vitest": "^5.0.0" }, "peerDependencies": { - "solid-js": "^1.9.4" + "solid-js": "^2.0.0-rc.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96d8d72..83945ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: devDependencies: '@solidjs/testing-library': specifier: ^0.8.10 - version: 0.8.10(solid-js@1.9.15) + version: 0.8.10(solid-js@2.0.0-rc.9) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -33,8 +33,8 @@ importers: specifier: ^30.0.1 version: 30.0.1 solid-js: - specifier: ^1.9.15 - version: 1.9.15 + specifier: ^2.0.0-rc.9 + version: 2.0.0-rc.9 typescript: specifier: ^7.0.2 version: 7.0.2 @@ -46,7 +46,7 @@ importers: version: 5.1.0(@microsoft/api-extractor@7.59.0(@types/node@26.5.0))(esbuild@0.27.7)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@7.2.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) vite-plugin-solid: specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@1.9.15)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) vitest: specifier: ^5.0.0 version: 5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) @@ -1827,6 +1827,10 @@ packages: resolution: {integrity: sha512-EGk9WkxnlQtqdERjPgS8gvWVjKLZnBQr95e65FOAs9MqkxVhHIjgipan7svZZ6n0rkp6vSc9GxyeY836boaT6w==} engines: {node: '>=22.12.0'} + '@solidjs/signals@2.0.0-rc.9': + resolution: {integrity: sha512-o3pqiTgpH5NR2DstiKrt9s/6+0YOFtv+MfvLONwLsS247I+EWMMyTu9BkRcgd35UR5Pa1DM16lI1/5uaIMY6Gw==} + engines: {node: '>=22.12.0'} + '@solidjs/testing-library@0.8.10': resolution: {integrity: sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ==} engines: {node: '>= 14'} @@ -3592,6 +3596,10 @@ packages: resolution: {integrity: sha512-0DwASKxvwXWAxCiea71cN3bmsyBIOUGmmg/pjSfhxPg+2pBVCh/ZKmwLNjKlPjc8SHeu52ZTio6tBBp1TcPB8A==} engines: {node: '>=22.12.0'} + solid-js@2.0.0-rc.9: + resolution: {integrity: sha512-J/oHWnWqe7S0FeIEdIRKDvyyo+HY/TYKr2PrIB8VlePMWuErDg78QHqdsAV7f6HKa9qhWR/23eqzR/ZRV9ep0g==} + engines: {node: '>=22.12.0'} + solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -5647,10 +5655,12 @@ snapshots: '@solidjs/signals@2.0.0-rc.8': {} - '@solidjs/testing-library@0.8.10(solid-js@1.9.15)': + '@solidjs/signals@2.0.0-rc.9': {} + + '@solidjs/testing-library@0.8.10(solid-js@2.0.0-rc.9)': dependencies: '@testing-library/dom': 10.4.1 - solid-js: 1.9.15 + solid-js: 2.0.0-rc.9 '@solidjs/vite-plugin@3.0.0-next.43(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.8)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2))': dependencies: @@ -6123,6 +6133,13 @@ snapshots: optionalDependencies: solid-js: 1.9.15 + babel-preset-solid@1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@2.0.0-rc.9): + dependencies: + '@babel/core': 7.29.7(supports-color@7.2.0) + babel-plugin-jsx-dom-expressions: 0.40.10(@babel/core@7.29.7(supports-color@7.2.0)) + optionalDependencies: + solid-js: 2.0.0-rc.9 + bail@2.0.2: {} balanced-match@4.0.4: @@ -8089,6 +8106,13 @@ snapshots: seroval: 1.6.7 seroval-plugins: 1.6.7(seroval@1.6.7) + solid-js@2.0.0-rc.9: + dependencies: + '@solidjs/signals': 2.0.0-rc.9 + csstype: 3.2.3 + seroval: 1.6.7 + seroval-plugins: 1.6.7(seroval@1.6.7) + solid-refresh@0.6.3(solid-js@1.9.15)(supports-color@7.2.0): dependencies: '@babel/generator': 7.29.8 @@ -8098,6 +8122,15 @@ snapshots: transitivePeerDependencies: - supports-color + solid-refresh@0.6.3(solid-js@2.0.0-rc.9)(supports-color@7.2.0): + dependencies: + '@babel/generator': 7.29.8 + '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/types': 7.29.8 + solid-js: 2.0.0-rc.9 + transitivePeerDependencies: + - supports-color + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -8435,14 +8468,14 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@1.9.15)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): dependencies: '@babel/core': 7.29.7(supports-color@7.2.0) '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@1.9.15) + babel-preset-solid: 1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@2.0.0-rc.9) merge-anything: 5.1.7 - solid-js: 1.9.15 - solid-refresh: 0.6.3(solid-js@1.9.15)(supports-color@7.2.0) + solid-js: 2.0.0-rc.9 + solid-refresh: 0.6.3(solid-js@2.0.0-rc.9)(supports-color@7.2.0) vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) vitefu: 1.1.3(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5b75954..f4a6b53 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,9 +7,6 @@ allowBuilds: sharp: true '@parcel/watcher': true -minimumReleaseAgeExclude: - - '@sparkstone/css@2.0.0' - overrides: '@kobalte/core>solid-js': 2.0.0-rc.8 '@kobalte/core>@solidjs/web': 2.0.0-rc.8 diff --git a/src/main.ts b/src/main.ts index 39c4d65..4167d4c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,10 +1,9 @@ -import { createSignal } from 'solid-js'; -import { createStore, SetStoreFunction } from 'solid-js/store'; +import { createSignal, createStore, StoreSetter } from 'solid-js'; type Falsy = false | 0 | '' | null | undefined | void; type MaybePromise = T | Promise; -export type OnFormSubmitResult = MaybePromise>; +export type OnFormSubmitResult = MaybePromise>; type ValidatorResponse = MaybePromise; @@ -12,19 +11,22 @@ export type Validator = Falsy | ((el: Element) => ValidatorResponse); type ValidatedElement = HTMLElement & { name: string }; -type OnFormSubmit = (el: Payload) => OnFormSubmitResult; +type OnFormSubmit = ( + el: Payload, +) => OnFormSubmitResult; declare module 'solid-js' { namespace JSX { interface Directives { - formSubmit: (callback: HTMLFormElement) => OnFormSubmitResult; + formSubmit: OnFormSubmit; validate: boolean | Validator[]; } } } + function checkValid( { element, validators = [] }: { element: HTMLInputElement; validators: Validator[] }, - setErrors: SetStoreFunction>, + setErrors: StoreSetter>, errorClass?: string, ) { return async () => { @@ -46,9 +48,10 @@ function checkValid( if (message) { errorClass && element.classList.toggle(errorClass, true); element.setAttribute('aria-invalid', 'true'); - setErrors({ - [element.name ?? element.dataset.name]: message, - } as Partial); + setErrors(draft => { + let name = element.name ?? element.dataset.name; + draft[name] = message; + }); } return message; }; @@ -61,29 +64,30 @@ export function useForm({ errorClass = '' } = {}) { const fields: Partial> = {}; - const validate = ( - ref: Element, - accessor: () => Falsy | Validator[] = () => {}, - ) => { - queueMicrotask(() => { - let name = ref.name ?? ref.dataset.name; - const accessorValue = accessor(); - const validators = Array.isArray(accessorValue) ? accessorValue : []; - let config; - fields[name] = config = { element: ref, validators }; - ref.onblur = () => { - setIsSubmitted(false); - return checkValid(config, setErrors, errorClass)(); - }; - ref.oninput = () => { - setIsSubmitted(false); - if (!errors[name]) return; - setErrors({ [name]: undefined } as Partial); - ref.setAttribute('aria-invalid', 'false'); - errorClass && ref.classList.toggle(errorClass, false); - }; - }); - }; + const validate = + (accessor: () => Falsy | Validator[] = () => {}) => + (ref: Element) => { + queueMicrotask(() => { + let name = ref.name ?? ref.dataset.name; + const accessorValue = accessor(); + const validators = Array.isArray(accessorValue) ? accessorValue : []; + let config; + fields[name] = config = { element: ref, validators }; + ref.onblur = () => { + setIsSubmitted(false); + return checkValid(config, setErrors, errorClass)(); + }; + ref.oninput = () => { + setIsSubmitted(false); + if (!errors[name]) return; + setErrors(draft => { + draft[name] = undefined; + }); + ref.setAttribute('aria-invalid', 'false'); + errorClass && ref.classList.toggle(errorClass, false); + }; + }); + }; /** * Validate a field based on name @@ -129,8 +133,10 @@ export function useForm({ errorClass = '' } = {}) { for (const name in callbackResult) { if (!(name in fields)) continue; fields[name]!.element.setAttribute('aria-invalid', 'true'); + setErrors(draft => { + draft[name] = callbackResult[name]; + }); } - setErrors(callbackResult); } else { clearErrors(); setIsSubmitted(true); @@ -155,25 +161,23 @@ export function useForm({ errorClass = '' } = {}) { ); } - const formSubmit = ( - ref: HTMLFormElement, - accessor: () => OnFormSubmit, - ) => { - const callback = accessor() || (() => {}); - setIsSubmitted(false); + const formSubmit = + (callback: OnFormSubmit = () => {}) => + (ref: HTMLFormElement) => { + setIsSubmitted(false); - ref.setAttribute('novalidate', ''); + ref.setAttribute('novalidate', ''); - ref.onsubmit = async e => { - e.preventDefault(); + ref.onsubmit = async e => { + e.preventDefault(); - await submit(callback, ref); - }; + await submit(callback, ref); + }; - ref.onreset = () => { - clearErrors(); + ref.onreset = () => { + clearErrors(); + }; }; - }; return { validate, @@ -184,9 +188,5 @@ export function useForm({ errorClass = '' } = {}) { isSubmitted, validateField, getFieldValue, - validateRef: - (...args: Validator[]) => - (ref: Element) => - validate(ref, () => args), }; } From 9e3722436d428bb8e65d744f8abb2d65377e0800 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 17:28:47 -0700 Subject: [PATCH 02/26] account for store batching --- src/main.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main.ts b/src/main.ts index 4167d4c..01fbd75 100644 --- a/src/main.ts +++ b/src/main.ts @@ -79,7 +79,6 @@ export function useForm({ errorClass = '' } = {}) { }; ref.oninput = () => { setIsSubmitted(false); - if (!errors[name]) return; setErrors(draft => { draft[name] = undefined; }); @@ -101,7 +100,7 @@ export function useForm({ errorClass = '' } = {}) { field.element.focus(); field.element.scrollIntoView({ behavior: 'smooth' }); } - return !errors[fieldName]; + return !error; } function getFieldValue(fieldName: keyof ErrorFields) { @@ -153,12 +152,11 @@ export function useForm({ errorClass = '' } = {}) { element.setCustomValidity?.(''); } - setErrors( - errors => - Object.fromEntries( - Object.entries(errors).map(([key, value]) => [key, undefined]), - ) as Partial, - ); + setErrors(draft => { + for (const field in Object.entries(draft)) { + draft[field] = undefined; + } + }); } const formSubmit = From 516c3f5a4e7409b868287e28dca7da1d5a057e04 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 17:31:45 -0700 Subject: [PATCH 03/26] account for store batching --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 01fbd75..68dc38f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -153,7 +153,7 @@ export function useForm({ errorClass = '' } = {}) { } setErrors(draft => { - for (const field in Object.entries(draft)) { + for (const field in draft) { draft[field] = undefined; } }); From ab4a85f944ccc17fcdb4744e5e1d7f193b8035a1 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 17:33:36 -0700 Subject: [PATCH 04/26] account for store batching --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 68dc38f..720f519 100644 --- a/src/main.ts +++ b/src/main.ts @@ -154,7 +154,7 @@ export function useForm({ errorClass = '' } = {}) { setErrors(draft => { for (const field in draft) { - draft[field] = undefined; + delete draft[field]; } }); } From 661e8ac4097bfddef8af86082d38e64ce175e03c Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 17:35:29 -0700 Subject: [PATCH 05/26] account for store batching --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 720f519..5cd7245 100644 --- a/src/main.ts +++ b/src/main.ts @@ -80,7 +80,7 @@ export function useForm({ errorClass = '' } = {}) { ref.oninput = () => { setIsSubmitted(false); setErrors(draft => { - draft[name] = undefined; + delete draft[name]; }); ref.setAttribute('aria-invalid', 'false'); errorClass && ref.classList.toggle(errorClass, false); From 0adc3488f4cea63de14246e7d3bfbb1d4b8725d5 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 23:55:34 +0000 Subject: [PATCH 06/26] test: run the suite against solid 2 Toolchain moves to @solidjs/vite-plugin, @solidjs/web and @solidjs/testing-library 1.0.0-beta.3, with jsxImportSource pointing at @solidjs/web. solid-js is pinned to 2.0.0-rc.8: rc.9 is inside pnpm's minimumReleaseAge cutoff and fails the lockfile policy check. Tests move off the directives to the ref factories, validateRef folds into validate, and createEffect takes its two-argument form. All 86 collect; 52 pass. The 34 failures share one cause: solid 2 defers store writes, where solid 1 applied them in the same tick as the event. Verified directly - after a blur the store reads undefined synchronously and holds the message a moment later. The bare no-await assertions were written as canaries for exactly this and have now fired. --- package.json | 10 +- pnpm-lock.yaml | 1568 ++++++++++++----------------------- pnpm-workspace.yaml | 12 + test/api.test.tsx | 24 +- test/helpers.ts | 13 +- test/solid2-store.test.tsx | 50 +- test/solid2-timing.test.tsx | 44 +- test/use-form.test.tsx | 6 +- test/validators.test.tsx | 4 +- tsconfig.json | 2 +- vite.config.ts | 2 +- 11 files changed, 627 insertions(+), 1108 deletions(-) diff --git a/package.json b/package.json index e1f710e..7c3d0cc 100644 --- a/package.json +++ b/package.json @@ -57,20 +57,22 @@ }, "homepage": "https://github.com/sparkstonepdx/solid-validation#readme", "devDependencies": { - "@solidjs/testing-library": "^0.8.10", + "@solidjs/testing-library": "1.0.0-beta.3", + "@solidjs/vite-plugin": "3.0.0-next.44", + "@solidjs/web": "2.0.0-rc.8", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^7.0.1", "@typescript/typescript6": "^6.0.2", "@vitest/coverage-v8": "^5.0.0", "jsdom": "^30.0.1", - "solid-js": "^2.0.0-rc.9", + "solid-js": "2.0.0-rc.8", "typescript": "^7.0.2", "vite": "^8.2.2", "vite-plugin-dts": "^5.1.0", - "vite-plugin-solid": "^2.11.14", "vitest": "^5.0.0" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.3" + "solid-js": "^2.0.0-rc.8", + "@solidjs/web": "^2.0.0-rc.8" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 83945ad..b341a81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,50 +15,53 @@ importers: .: devDependencies: '@solidjs/testing-library': - specifier: ^0.8.10 - version: 0.8.10(solid-js@2.0.0-rc.9) + specifier: 1.0.0-beta.3 + version: 1.0.0-beta.3(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(solid-js@2.0.0-rc.8) + '@solidjs/vite-plugin': + specifier: 3.0.0-next.44 + version: 3.0.0-next.44(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(solid-js@2.0.0-rc.8)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) + '@solidjs/web': + specifier: 2.0.0-rc.8 + version: 2.0.0-rc.8(solid-js@2.0.0-rc.8) '@testing-library/dom': specifier: ^10.4.1 - version: 10.4.1 + version: 10.4.2 '@testing-library/jest-dom': specifier: ^7.0.1 - version: 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0) + version: 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1) '@typescript/typescript6': specifier: ^6.0.2 version: 6.0.2 '@vitest/coverage-v8': specifier: ^5.0.0 - version: 5.0.0(vitest@5.0.0) + version: 5.0.1(vitest@5.0.1) jsdom: specifier: ^30.0.1 - version: 30.0.1 + version: 30.1.0 solid-js: - specifier: ^2.0.0-rc.9 - version: 2.0.0-rc.9 + specifier: 2.0.0-rc.8 + version: 2.0.0-rc.8 typescript: specifier: ^7.0.2 version: 7.0.2 vite: specifier: ^8.2.2 - version: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + version: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) vite-plugin-dts: specifier: ^5.1.0 - version: 5.1.0(@microsoft/api-extractor@7.59.0(@types/node@26.5.0))(esbuild@0.27.7)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@7.2.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) - vite-plugin-solid: - specifier: ^2.11.14 - version: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 5.1.0(esbuild@0.27.7)(rolldown@1.2.9)(rollup@4.63.3)(typescript@7.0.2)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) vitest: specifier: ^5.0.0 - version: 5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 5.0.1(@types/node@24.13.5)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.0)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) website/versions/v1: dependencies: '@astrojs/solid-js': specifier: ^5.0.0 - version: 5.1.3(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(solid-js@1.9.15)(supports-color@7.2.0)(terser@5.51.2) + version: 5.1.3(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)(solid-js@1.9.15) '@astrojs/starlight': specifier: ^0.30.0 - version: 0.30.6(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2))(supports-color@7.2.0) + version: 0.30.6(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2)) '@fontsource-variable/inter': specifier: ^5.1.0 version: 5.3.0 @@ -73,7 +76,7 @@ importers: version: link:../../.. astro: specifier: ^5.1.0 - version: 5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2) + version: 5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2) sass: specifier: ^1.80.0 version: 1.104.1 @@ -113,19 +116,19 @@ importers: devDependencies: '@solidjs/prerender': specifier: ^0.2.0 - version: 0.2.0(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(prerender-crawler@0.2.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2))) + version: 0.2.0(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(prerender-crawler@0.2.0(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1))) '@solidjs/vite-plugin': specifier: ^3.0.0-next.43 - version: 3.0.0-next.43(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.8)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 3.0.0-next.44(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(solid-js@2.0.0-rc.8)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) '@types/markdown-it': specifier: ^14.2.0 version: 14.2.0 filesystem-routing: specifier: 0.2.1 - version: 0.2.1(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 0.2.1(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) prerender-crawler: specifier: ^0.2.0 - version: 0.2.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + version: 0.2.0(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) sass: specifier: ^1.80.0 version: 1.104.1 @@ -134,7 +137,7 @@ importers: version: 5.9.3 vite: specifier: ^8.2.2 - version: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + version: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) packages: @@ -145,13 +148,13 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@asamuzakjp/css-color@6.0.7': - resolution: {integrity: sha512-vC/bk1Lz7Tn/EfU9/apOTBk80/8dyGyWMowPoV1tJ52muDGsDqt2HPT2klrFUiY60MQmQv9q8yIht15JnBgDGw==} - engines: {node: ^22.13.0 || >=24.0.0} + '@asamuzakjp/css-color@7.0.0': + resolution: {integrity: sha512-IxddtGnnoidVSO6O/aiTueptbTThHvi2qGHu9/AWuD1J7i86Ox+jl+Y5SXcDH1RixzQlP2cjH/PjnlImZiAurQ==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} - '@asamuzakjp/dom-selector@8.3.2': - resolution: {integrity: sha512-93Z1N+BQNXysodoicpOIyNh2drHfz/CTf9nnT0FEx72GJcIiwgydD7tGAr78j41LsYn3hlRn+LdGPuBLn1Bl8Q==} - engines: {node: ^22.13.0 || >=24.0.0} + '@asamuzakjp/dom-selector@9.1.4': + resolution: {integrity: sha512-ynDE7RDZM1z+YuSU+iGhRp8WcSXHqK9+G32ZEzsL35TKSoy72fYR7VfrJCQkWe3ciiIWGSTAIBc9XB5jVpqyTw==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} '@astrojs/compiler@2.13.1': resolution: {integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==} @@ -295,15 +298,15 @@ packages: resolution: {integrity: sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.3.0': - resolution: {integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==} + '@csstools/css-calc@3.4.0': + resolution: {integrity: sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.2.2': - resolution: {integrity: sha512-3QKjR/vxyjcSXBLgb6lP0S3MGdvwbmqSsvLPbYdVORqPDc8FX1HAJ0Spk38bxaRXgvENTA47tlhhbb5Z2e8hEg==} + '@csstools/css-color-parser@4.2.3': + resolution: {integrity: sha512-y4LpL+lmpuyKDiEFq2PnZUVFdAjsoB/qQJod79yLNokXyW7jewi+/WJ69EfItj8A2unWtxXnGjw6LYXgXu5ZjA==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -315,8 +318,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.12': - resolution: {integrity: sha512-3vLQK+dXxhBMR2Wx99PTCifE+vHtW2ndZWyla8yK813ev6oGhyn8Lja8jCyGAWTJ+LEYZK7EVtJxrDj8ztevJw==} + '@csstools/css-syntax-patches-for-csstree@1.1.14': + resolution: {integrity: sha512-HpbVXyrofRXpHpgkNIjU/3EWR4WJvOkO3emNK/L6X/mTJU7bGUI3AkkpoTNXznQLp0KRjLHELTGeKI5dIkI9JQ==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -980,9 +983,6 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@jridgewell/sourcemap-codec@1.6.0': resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} @@ -1004,21 +1004,6 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@microsoft/api-extractor-model@7.33.11': - resolution: {integrity: sha512-iDu1AtuRC2Z8XVs2SieZieVavF1FXPBX1C9pMexJh8Dx/Dd/3ZZ4nRQp/PU2Vk2rUHWuBz1wOyL4DcuhVnBXwg==} - engines: {node: '>=20.9.0'} - - '@microsoft/api-extractor@7.59.0': - resolution: {integrity: sha512-KDYV8kSVjmG8JJWVg1f1aKxteNG1IQ44D07Rjhlcci8wlqrSFNhUfgv7dJhwT0W2h3NDIL5Vz2f+/DfO4OpDHw==} - engines: {node: '>=20.9.0'} - hasBin: true - - '@microsoft/tsdoc-config@0.18.1': - resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==} - - '@microsoft/tsdoc@0.16.0': - resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@napi-rs/lzma-linux-x64-gnu@1.5.1': resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} engines: {node: ^22.20 || ^24.12 || >=25} @@ -1178,8 +1163,8 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-project/types@0.148.0': - resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==} + '@oxc-project/types@0.150.0': + resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} '@pagefind/darwin-arm64@1.5.2': resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} @@ -1301,98 +1286,98 @@ packages: resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} engines: {node: '>= 10.0.0'} - '@rolldown/binding-android-arm-eabi@1.2.7': - resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==} + '@rolldown/binding-android-arm-eabi@1.2.9': + resolution: {integrity: sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.2.7': - resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==} + '@rolldown/binding-android-arm64@1.2.9': + resolution: {integrity: sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.7': - resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==} + '@rolldown/binding-darwin-arm64@1.2.9': + resolution: {integrity: sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.7': - resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==} + '@rolldown/binding-darwin-x64@1.2.9': + resolution: {integrity: sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.7': - resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==} + '@rolldown/binding-freebsd-x64@1.2.9': + resolution: {integrity: sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.7': - resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': + resolution: {integrity: sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.7': - resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==} + '@rolldown/binding-linux-arm64-gnu@1.2.9': + resolution: {integrity: sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.7': - resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==} + '@rolldown/binding-linux-arm64-musl@1.2.9': + resolution: {integrity: sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.7': - resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.9': + resolution: {integrity: sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.7': - resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==} + '@rolldown/binding-linux-s390x-gnu@1.2.9': + resolution: {integrity: sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.7': - resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==} + '@rolldown/binding-linux-x64-gnu@1.2.9': + resolution: {integrity: sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.7': - resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==} + '@rolldown/binding-linux-x64-musl@1.2.9': + resolution: {integrity: sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.7': - resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==} + '@rolldown/binding-openharmony-arm64@1.2.9': + resolution: {integrity: sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.7': - resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==} + '@rolldown/binding-win32-arm64-msvc@1.2.9': + resolution: {integrity: sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.7': - resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==} + '@rolldown/binding-win32-x64-msvc@1.2.9': + resolution: {integrity: sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1409,177 +1394,144 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.63.1': - resolution: {integrity: sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==} + '@rollup/rollup-android-arm-eabi@4.63.3': + resolution: {integrity: sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.63.1': - resolution: {integrity: sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==} + '@rollup/rollup-android-arm64@4.63.3': + resolution: {integrity: sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.63.1': - resolution: {integrity: sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==} + '@rollup/rollup-darwin-arm64@4.63.3': + resolution: {integrity: sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.63.1': - resolution: {integrity: sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==} + '@rollup/rollup-darwin-x64@4.63.3': + resolution: {integrity: sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.63.1': - resolution: {integrity: sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==} + '@rollup/rollup-freebsd-arm64@4.63.3': + resolution: {integrity: sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.63.1': - resolution: {integrity: sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==} + '@rollup/rollup-freebsd-x64@4.63.3': + resolution: {integrity: sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.63.1': - resolution: {integrity: sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==} + '@rollup/rollup-linux-arm-gnueabihf@4.63.3': + resolution: {integrity: sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.63.1': - resolution: {integrity: sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==} + '@rollup/rollup-linux-arm-musleabihf@4.63.3': + resolution: {integrity: sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.63.1': - resolution: {integrity: sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==} + '@rollup/rollup-linux-arm64-gnu@4.63.3': + resolution: {integrity: sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.63.1': - resolution: {integrity: sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==} + '@rollup/rollup-linux-arm64-musl@4.63.3': + resolution: {integrity: sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.63.1': - resolution: {integrity: sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==} + '@rollup/rollup-linux-loong64-gnu@4.63.3': + resolution: {integrity: sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.63.1': - resolution: {integrity: sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==} + '@rollup/rollup-linux-loong64-musl@4.63.3': + resolution: {integrity: sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.63.1': - resolution: {integrity: sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==} + '@rollup/rollup-linux-ppc64-gnu@4.63.3': + resolution: {integrity: sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.63.1': - resolution: {integrity: sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==} + '@rollup/rollup-linux-ppc64-musl@4.63.3': + resolution: {integrity: sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.63.1': - resolution: {integrity: sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==} + '@rollup/rollup-linux-riscv64-gnu@4.63.3': + resolution: {integrity: sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.63.1': - resolution: {integrity: sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==} + '@rollup/rollup-linux-riscv64-musl@4.63.3': + resolution: {integrity: sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.63.1': - resolution: {integrity: sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==} + '@rollup/rollup-linux-s390x-gnu@4.63.3': + resolution: {integrity: sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.63.1': - resolution: {integrity: sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==} + '@rollup/rollup-linux-x64-gnu@4.63.3': + resolution: {integrity: sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.63.1': - resolution: {integrity: sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==} + '@rollup/rollup-linux-x64-musl@4.63.3': + resolution: {integrity: sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.63.1': - resolution: {integrity: sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==} + '@rollup/rollup-openbsd-x64@4.63.3': + resolution: {integrity: sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.63.1': - resolution: {integrity: sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==} + '@rollup/rollup-openharmony-arm64@4.63.3': + resolution: {integrity: sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.63.1': - resolution: {integrity: sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==} + '@rollup/rollup-win32-arm64-msvc@4.63.3': + resolution: {integrity: sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.63.1': - resolution: {integrity: sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==} + '@rollup/rollup-win32-ia32-msvc@4.63.3': + resolution: {integrity: sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.63.1': - resolution: {integrity: sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==} + '@rollup/rollup-win32-x64-gnu@4.63.3': + resolution: {integrity: sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.63.1': - resolution: {integrity: sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==} + '@rollup/rollup-win32-x64-msvc@4.63.3': + resolution: {integrity: sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==} cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.24.0': - resolution: {integrity: sha512-g/Z47ZwARn/VkTnHcyJslrR26erRf1G5JbqPlfGZGBCrOcrEt8fTQXXDVhUDDNl/g/v3TXI1dNiAAT5FEks8BA==} - engines: {node: '>=20.9.0'} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/problem-matcher@0.2.1': - resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/rig-package@0.7.3': - resolution: {integrity: sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA==} - - '@rushstack/terminal@0.24.3': - resolution: {integrity: sha512-KxphDhPGC4xDrKg8O4yrWCEpPMi87aJc1iycXqMVh1dLgV0M34hiH9ZTgWjBRmcrT/OIHoOeWf48npcQFzgp+g==} - engines: {node: '>=20.9.0'} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/ts-command-line@5.3.13': - resolution: {integrity: sha512-+jNbxhh8CkrZYxMk9X3GRYM2+Myr1xCCj+eHbJ9Vp+PCdNHS0TUl5QQFT6UbM/aTFRCzs5jiBTKYzBRpe5uYbQ==} - engines: {node: '>=20.9.0'} - '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} @@ -1761,8 +1713,8 @@ packages: '@solidjs/web': ^2.0.0-rc.0 solid-js: ^2.0.0-rc.0 - '@solidjs/babel-plugin@2.0.0-rc.8': - resolution: {integrity: sha512-lh2TjYxozlIvMNJVzkJl8lUZ3xZvJORL1YTybbixmm4RU7bRaNDpiOcNiJx3fHIDwwTy4RwBXKQ7nqYDy5He9Q==} + '@solidjs/babel-plugin@2.0.0-rc.9': + resolution: {integrity: sha512-Qd+qY9UCB3gYCWQSS3p9DETHx9igOnQWFo0xqqyFWO9xT0mo3SmAyfHbQXOLlpuwpPC2DJjzjtWqiT/HQHPYYQ==} peerDependencies: '@babel/core': ^7.20.12 '@tsrx/core': 0.1.63 @@ -1770,39 +1722,39 @@ packages: '@tsrx/core': optional: true - '@solidjs/compiler-darwin-arm64@2.0.0-rc.8': - resolution: {integrity: sha512-HWVgWLs1A9bUcdOtL2WUteTGmM4Bgb63J1htfxUt2BfstN1Of+X+QytaTYOG1U3cI9wcaHImryDNxgHkxqGLIA==} + '@solidjs/compiler-darwin-arm64@2.0.0-rc.9': + resolution: {integrity: sha512-pFEu7BYhEuCkwgAdveTkkOTYpkq4IMbGYTwLqOprk6Ts+65rHjrV7Pm+hkoETqaRzX66n1vThsSG/j1NPU8FsA==} cpu: [arm64] os: [darwin] - '@solidjs/compiler-darwin-x64@2.0.0-rc.8': - resolution: {integrity: sha512-d+XuMD9iUiE+p7l1xjF0tvatYcnhLBRcoHixGu38umTvGomZrpHypQLDDhY3baZIjlS/Pad0DzYN77TljySyrA==} + '@solidjs/compiler-darwin-x64@2.0.0-rc.9': + resolution: {integrity: sha512-bxJnKYUvqKyV/hzbgDi2VThb9D8NStr9+RFv1l4rjI8pXZxlqNSPGbISAdzk4DbbXNQdKHNl2ne0M1uuhXPpjA==} cpu: [x64] os: [darwin] - '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.8': - resolution: {integrity: sha512-GT3TXzWb5MjfplsXNUYHzzCe2sNZM1MSDinkPC2Zpty7X1By34pHjvfdFi6yq0zsb6iQZhRnZz8L2a7NHwfkMg==} + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.9': + resolution: {integrity: sha512-UzugKIkZDfMUJR4GqEeYX5bj5N4xl3TvnsxYhPfkDlulszw6RXpnya0l5xrPKY0woXKz4+rPnvUrA8zJjwJKdA==} cpu: [arm64] os: [linux] libc: [glibc] - '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.8': - resolution: {integrity: sha512-/0OsCDPhIijarLubxheHlHZ7sNZaWZQkRe4xwI9qf51aizXwz9Y0p4T4r4PudilnsfrqN+5ptUhtlmyfHDHs4A==} + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.9': + resolution: {integrity: sha512-vejdMmYyozeFmOK7uZ/THfIiASqMUYeNOsG8Gcve8LtSUgcGHYxVxcVvw7Aaf2bGyPCjv0AEKblbn/F9Bk1rlw==} cpu: [x64] os: [linux] libc: [glibc] - '@solidjs/compiler-wasm32-wasi@2.0.0-rc.8': - resolution: {integrity: sha512-azFGpzpjhmTUfkKHkUg5M2QAmtC3HB+gP0DrSOYH+QzPT3T2XTixy+NOhNxrLD2UZiNLn9FoB3iARJzd3BSbdA==} + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.9': + resolution: {integrity: sha512-MvRfGiJhEzn7PJumX8hzKjZjwhmLLa5yym3aG67rG9vs9EB3q2XO+syNUkmBXMMw9WQy3kc/jXh5xmrJz/N3Bg==} engines: {node: '>=14.0.0'} - '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.8': - resolution: {integrity: sha512-qZbumMy5Qm3ilhgaBY/aozo//EWnd1Kk12j+MqQEMzeZlOrnCrLcFZg06DI0cldval5I9UsiKC33Vv+Sn1njAw==} + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.9': + resolution: {integrity: sha512-u+Jh/5QA5jJf+VXInq/nQ7RINDIZXLI0WgErbeIIpdY0v01SdZ12wqi9P9iQSWIflF9ef0Pwa5MFde3E23xszQ==} cpu: [x64] os: [win32] - '@solidjs/compiler@2.0.0-rc.8': - resolution: {integrity: sha512-rjX98GSc5elXAdQU1N/LdYAITW46UW/nBZvx54NV9WOhaFKAsAA6vLMi3SuHMF9WCRRMikLs9+DjRK0ZHBtkfA==} + '@solidjs/compiler@2.0.0-rc.9': + resolution: {integrity: sha512-TzxMcJDhVswSEL3UtXuUWfFzIyNBx0LN6KAJZ6ryvlElAEdq2T2mpaw/Vn5fMjXcv0bCqas8CVADBhrkDVfPMg==} '@solidjs/meta@1.0.0-next.2': resolution: {integrity: sha512-4aqPczFqDdep4JTAUXfh4nyfq7InbTgimd7NuN6ZWWE29UPv0uR5dyr53yFcf2YgVXjFdX+JGhXtsE0njGL+fA==} @@ -1827,28 +1779,21 @@ packages: resolution: {integrity: sha512-EGk9WkxnlQtqdERjPgS8gvWVjKLZnBQr95e65FOAs9MqkxVhHIjgipan7svZZ6n0rkp6vSc9GxyeY836boaT6w==} engines: {node: '>=22.12.0'} - '@solidjs/signals@2.0.0-rc.9': - resolution: {integrity: sha512-o3pqiTgpH5NR2DstiKrt9s/6+0YOFtv+MfvLONwLsS247I+EWMMyTu9BkRcgd35UR5Pa1DM16lI1/5uaIMY6Gw==} - engines: {node: '>=22.12.0'} - - '@solidjs/testing-library@0.8.10': - resolution: {integrity: sha512-qdeuIerwyq7oQTIrrKvV0aL9aFeuwTd86VYD3afdq5HYEwoox1OBTJy4y8A3TFZr8oAR0nujYgCzY/8wgHGfeQ==} + '@solidjs/testing-library@1.0.0-beta.3': + resolution: {integrity: sha512-yJtAa6H76xr5lSkT7LVmaaTFCZZzxcwejzQ4UBV/+koZFByVZ5J0XMDVHZ539PGso+fyncI5iRxWyDWFqhtcLg==} engines: {node: '>= 14'} peerDependencies: - '@solidjs/router': '>=0.9.0' - solid-js: '>=1.0.0' - peerDependenciesMeta: - '@solidjs/router': - optional: true + '@solidjs/web': '>=2.0.0-0' + solid-js: '>=2.0.0-0' - '@solidjs/vite-plugin@3.0.0-next.43': - resolution: {integrity: sha512-7RNL9O3gzblgrGUJU5snRzC9AYAq285qoaSpi47kIXGDkKLDgIsjXfdElXM40w4SdP7mWLterhXYnA6M8CPXkg==} + '@solidjs/vite-plugin@3.0.0-next.44': + resolution: {integrity: sha512-P/jIo9khECJft0eS2VCYJq16/JPtqoeBqaw/33VAlov8DSkd/6DU605wUTTZ3ZzpB0BFjDrwlyInjKNxFH0oLQ==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@solidjs/start-devtools': ^1.0.0-next.2 - '@solidjs/web': ^2.0.0-rc.7 + '@solidjs/web': ^2.0.0-rc.9 '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.0.0 || ^7.0.0 - solid-js: ^2.0.0-rc.7 + solid-js: ^2.0.0-rc.9 vite: ^8.0.0 || ^9.0.0 peerDependenciesMeta: '@solidjs/start-devtools': @@ -1868,8 +1813,8 @@ packages: '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} - '@testing-library/dom@10.4.1': - resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + '@testing-library/dom@10.4.2': + resolution: {integrity: sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==} engines: {node: '>=18'} '@testing-library/jest-dom@7.0.1': @@ -1885,9 +1830,6 @@ packages: '@tybys/wasm-util@0.10.4': resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} - '@types/argparse@1.0.38': - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1954,9 +1896,6 @@ packages: '@types/node@24.13.5': resolution: {integrity: sha512-TXyindR+lBr22aJIdMQzCFHPHR6cR4js838mRDCSz5hOKWZvZwsXSSiXDmjRj4iJmgl+sR9O+1mkoVBSMadNug==} - '@types/node@26.5.0': - resolution: {integrity: sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==} - '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -2093,11 +2032,11 @@ packages: '@ungap/structured-clone@1.4.0': resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==} - '@vitest/coverage-v8@5.0.0': - resolution: {integrity: sha512-toMg6PZGCIa/lQNCDoASrfb1ly4hsUKXFtFYC9kD4t78o5Y6LyNJU7AENt8eHPr3quYdxaxK7hj2mnbFfUk9NA==} + '@vitest/coverage-v8@5.0.1': + resolution: {integrity: sha512-FRC8ACiudC3dI6MTplzRSYWHDRnIv2IPfbzs4FdoJNsMal/35sWV8hwIfV8ZcqzSPy+uXHeMVONt9CEqtOU17w==} peerDependencies: - '@vitest/browser': 5.0.0 - vitest: 5.0.0 + '@vitest/browser': 5.0.1 + vitest: 5.0.1 peerDependenciesMeta: '@vitest/browser': optional: true @@ -2110,8 +2049,8 @@ packages: resolution: {integrity: sha512-1EOLRfsTMnyAr3+kEAsP4o9dhaDlGPpD7H5iLBBeq//YpNB1VIahkPhB+eRp9N2Dkfw8oySROjE3yf9XDeaIkQ==} engines: {node: '>=22'} - '@vitest/mocker@5.0.0': - resolution: {integrity: sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==} + '@vitest/mocker@5.0.1': + resolution: {integrity: sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2121,8 +2060,8 @@ packages: vite: optional: true - '@vitest/spy@5.0.0': - resolution: {integrity: sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==} + '@vitest/spy@5.0.1': + resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==} '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -2148,28 +2087,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - - ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -2196,9 +2113,6 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -2257,15 +2171,11 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@4.0.4: - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} - engines: {node: 18 || 20 || >=22} - base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} - baseline-browser-mapping@2.11.21: - resolution: {integrity: sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==} + baseline-browser-mapping@2.11.25: + resolution: {integrity: sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==} engines: {node: '>=6.0.0'} hasBin: true @@ -2285,22 +2195,15 @@ packages: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} - engines: {node: 20 || >=22} - braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.9: - resolution: {integrity: sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==} + browserslist@4.29.0: + resolution: {integrity: sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - camelcase@8.0.0: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} @@ -2371,9 +2274,6 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -2509,8 +2409,8 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} - electron-to-chromium@1.5.423: - resolution: {integrity: sha512-rRZfTSY8ptHYMQxa+uIycJMFKmY1T0GIApNMXJYGehguTZa56TEEl19pKPCoBqk5Gpf7QizZn/jt7xur+DYxag==} + electron-to-chromium@1.5.430: + resolution: {integrity: sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -2533,10 +2433,6 @@ packages: resolution: {integrity: sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==} engines: {node: '>=20.19.0'} - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -2607,16 +2503,10 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-uri@3.1.7: - resolution: {integrity: sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==} - fastq@1.20.3: resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} @@ -2652,24 +2542,17 @@ packages: resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} engines: {node: '>=20'} - fs-extra@11.3.6: - resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} - engines: {node: '>=14.14'} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-east-asian-width@1.6.0: - resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} engines: {node: '>=18'} github-slugger@2.0.0: @@ -2682,20 +2565,9 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3@1.15.11: resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} - hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} @@ -2781,10 +2653,6 @@ packages: immutable@5.1.9: resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -2807,10 +2675,6 @@ packages: is-arrayish@0.3.4: resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -2858,13 +2722,6 @@ packages: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} - jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} - hasBin: true - - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -2875,8 +2732,8 @@ packages: resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true - jsdom@30.0.1: - resolution: {integrity: sha512-52v7mUVUfNQVYYqE1lcdaymWL0njO7lTLUog6ZvW2U5KsbiLk/GnZlVJ+qx0xfNJZ6Gn+KSpPNE52vurbxZwrA==} + jsdom@30.1.0: + resolution: {integrity: sha512-h/Q+H+KmlGf49ITw3TrykSVbg04S75S2O7ZtJc9gMGOWBrQRZmx5AJIKLtJ01e6Kszl+/tpFthCVqxNifxhoqg==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} peerDependencies: canvas: ^3.2.3 @@ -2889,17 +2746,11 @@ packages: engines: {node: '>=6'} hasBin: true - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonfile@6.2.1: - resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -3005,11 +2856,11 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magic-string@1.2.3: - resolution: {integrity: sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==} + magic-string@1.4.1: + resolution: {integrity: sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==} - magicast@0.5.4: - resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==} + magicast@0.5.5: + resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -3209,10 +3060,6 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.2.3: - resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} - engines: {node: 18 || 20 || >=22} - mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -3223,8 +3070,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.18: - resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3244,8 +3091,8 @@ packages: node-mock-http@1.0.5: resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==} - node-releases@2.0.54: - resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==} + node-releases@2.0.56: + resolution: {integrity: sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==} engines: {node: '>=18'} normalize-path@3.0.0: @@ -3255,8 +3102,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} engines: {node: '>=12.20.0'} ofetch@1.5.1: @@ -3312,9 +3159,6 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3481,11 +3325,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -3502,13 +3341,13 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown@1.2.7: - resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==} + rolldown@1.2.9: + resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.63.1: - resolution: {integrity: sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==} + rollup@4.63.3: + resolution: {integrity: sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3532,8 +3371,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -3596,10 +3435,6 @@ packages: resolution: {integrity: sha512-0DwASKxvwXWAxCiea71cN3bmsyBIOUGmmg/pjSfhxPg+2pBVCh/ZKmwLNjKlPjc8SHeu52ZTio6tBBp1TcPB8A==} engines: {node: '>=22.12.0'} - solid-js@2.0.0-rc.9: - resolution: {integrity: sha512-J/oHWnWqe7S0FeIEdIRKDvyyo+HY/TYKr2PrIB8VlePMWuErDg78QHqdsAV7f6HKa9qhWR/23eqzR/ZRV9ep0g==} - engines: {node: '>=22.12.0'} - solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -3609,13 +3444,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - source-map@0.7.6: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} @@ -3623,19 +3451,12 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3665,31 +3486,11 @@ packages: style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - svgo@4.1.0: resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} engines: {node: '>=16'} hasBin: true - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - terser@5.51.2: - resolution: {integrity: sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==} - engines: {node: '>=10'} - hasBin: true - tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -3701,6 +3502,10 @@ packages: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -3709,11 +3514,11 @@ packages: resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} - tldts-core@7.4.12: - resolution: {integrity: sha512-nYNzS2WRf4QJmjzFFgAxLOBjyBxAGRbCy9PVBPaglcYyYajh40VBn+v5Ngr96ZMc7oM0+aCJdtQnNejvdBnXMQ==} + tldts-core@7.4.13: + resolution: {integrity: sha512-mbYsrih5FRtGxs3Usvl/PqwJsNpp+jsmrdFviiK02teHDG0/HebBG/pqCylje3kzgXYzuLoHJF/0mz9W53t8Xg==} - tldts@7.4.12: - resolution: {integrity: sha512-WylhSDKVeYnWXL3a+vKTaOxjnOeEGw938hImY8zoRWJjRRK/Jp1K+IihBzIONpUmW4e3WmXT6q5FW6vlESVZCA==} + tldts@7.4.13: + resolution: {integrity: sha512-iHtaIWWIbMDkCeJdTBzZFGgbluE5J+oHlb2g7+oAz1S1gpuVpabRZdQyd471Vl8UUkcz2vXSL8xZH2kyCe8tfA==} hasBin: true to-regex-range@5.0.1: @@ -3782,9 +3587,6 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - undici-types@8.9.0: - resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} - undici@8.10.2: resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==} engines: {node: '>=22.19.0'} @@ -3825,10 +3627,6 @@ packages: unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - unplugin-dts@1.1.0: resolution: {integrity: sha512-KZJ+qk+lmd9dJY/PJvDRFL9BUtVubKDiX7Ai/X6mlkCArcQNzwmupKjVqHbRA42uqO5ZfFRFc+o8/OCbQ1GonQ==} peerDependencies: @@ -3925,8 +3723,8 @@ packages: uploadthing: optional: true - update-browserslist-db@1.3.2: - resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} + update-browserslist-db@1.3.3: + resolution: {integrity: sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4007,13 +3805,13 @@ packages: yaml: optional: true - vite@8.2.2: - resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==} + vite@8.3.0: + resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.4.0 || ^0.5.0 + '@vitejs/devtools': ^0.7.1 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -4058,20 +3856,20 @@ packages: vite: optional: true - vitest@5.0.0: - resolution: {integrity: sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==} + vitest@5.0.1: + resolution: {integrity: sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==} engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 5.0.0 - '@vitest/browser-preview': 5.0.0 + '@vitest/browser-playwright': 5.0.1 + '@vitest/browser-preview': 5.0.1 '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 - '@vitest/coverage-istanbul': 5.0.0 - '@vitest/coverage-v8': 5.0.0 - '@vitest/ui': 5.0.0 + '@vitest/coverage-istanbul': 5.0.1 + '@vitest/coverage-v8': 5.0.1 + '@vitest/ui': 5.0.1 happy-dom: '*' jsdom: '*' vite: ^6.4.0 || ^7.0.0 || ^8.0.0 @@ -4124,8 +3922,8 @@ packages: resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - whatwg-url@17.1.0: - resolution: {integrity: sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==} + whatwg-url@17.1.1: + resolution: {integrity: sha512-ohjk1mdUebJVadRt3bAhQhx8lSnISq+GDttK79LFl8EHQkAPvzwctoasC4hs8tBt6kLAncBWWyq1N52qEfKvDw==} engines: {node: ^22.14.0 || >=24.0.0} which-pm-runs@1.1.0: @@ -4203,15 +4001,15 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@asamuzakjp/css-color@6.0.7': + '@asamuzakjp/css-color@7.0.0': dependencies: - '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.2.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 lru-cache: 11.5.2 - '@asamuzakjp/dom-selector@8.3.2': + '@asamuzakjp/dom-selector@9.1.4': dependencies: bidi-js: 1.1.0 css-tree: 3.2.1 @@ -4222,7 +4020,7 @@ snapshots: '@astrojs/internal-helpers@0.7.6': {} - '@astrojs/markdown-remark@6.3.11(supports-color@7.2.0)': + '@astrojs/markdown-remark@6.3.11': dependencies: '@astrojs/internal-helpers': 0.7.6 '@astrojs/prism': 3.3.0 @@ -4234,8 +4032,8 @@ snapshots: mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 rehype-stringify: 10.0.1 - remark-gfm: 4.0.1(supports-color@7.2.0) - remark-parse: 11.0.0(supports-color@7.2.0) + remark-gfm: 4.0.1 + remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.3 shiki: 3.23.0 @@ -4248,18 +4046,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.14(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2))(supports-color@7.2.0)': + '@astrojs/mdx@4.3.14(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2))': dependencies: - '@astrojs/markdown-remark': 6.3.11(supports-color@7.2.0) - '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) + '@astrojs/markdown-remark': 6.3.11 + '@mdx-js/mdx': 3.1.1 acorn: 8.18.0 - astro: 5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2) + astro: 5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 piccolore: 0.1.3 rehype-raw: 7.0.0 - remark-gfm: 4.0.1(supports-color@7.2.0) + remark-gfm: 4.0.1 remark-smartypants: 3.0.3 source-map: 0.7.6 unist-util-visit: 5.1.0 @@ -4276,11 +4074,11 @@ snapshots: sitemap: 9.0.1 zod: 4.6.5 - '@astrojs/solid-js@5.1.3(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(solid-js@1.9.15)(supports-color@7.2.0)(terser@5.51.2)': + '@astrojs/solid-js@5.1.3(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)(solid-js@1.9.15)': dependencies: solid-js: 1.9.15 - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) - vite-plugin-solid: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@1.9.15)(supports-color@7.2.0)(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) + vite-plugin-solid: 2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(solid-js@1.9.15)(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)) transitivePeerDependencies: - '@testing-library/jest-dom' - '@types/node' @@ -4296,16 +4094,16 @@ snapshots: - tsx - yaml - '@astrojs/starlight@0.30.6(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2))(supports-color@7.2.0)': + '@astrojs/starlight@0.30.6(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2))': dependencies: - '@astrojs/mdx': 4.3.14(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2))(supports-color@7.2.0) + '@astrojs/mdx': 4.3.14(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2)) '@astrojs/sitemap': 3.7.4 '@pagefind/default-ui': 1.5.2 '@types/hast': 3.0.5 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2) - astro-expressive-code: 0.38.3(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2)) + astro: 5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2) + astro-expressive-code: 0.38.3(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2)) bcp-47: 2.1.1 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -4313,23 +4111,23 @@ snapshots: hastscript: 9.0.1 i18next: 23.16.8 js-yaml: 4.3.2 - mdast-util-directive: 3.1.0(supports-color@7.2.0) + mdast-util-directive: 3.1.0 mdast-util-to-markdown: 2.1.2 mdast-util-to-string: 4.0.0 pagefind: 1.5.2 rehype: 13.0.2 rehype-format: 5.0.1 - remark-directive: 3.0.1(supports-color@7.2.0) + remark-directive: 3.0.1 unified: 11.0.5 unist-util-visit: 5.1.0 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/telemetry@3.3.0(supports-color@7.2.0)': + '@astrojs/telemetry@3.3.0': dependencies: ci-info: 4.4.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 dlv: 1.1.3 dset: 3.1.4 is-docker: 3.0.0 @@ -4346,20 +4144,20 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7(supports-color@7.2.0)': + '@babel/core@7.29.7': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0) + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/traverse': 7.29.8 '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4378,7 +4176,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.9 + browserslist: 4.29.0 lru-cache: 5.1.1 semver: 6.3.1 @@ -4388,19 +4186,19 @@ snapshots: dependencies: '@babel/types': 7.29.8 - '@babel/helper-module-imports@7.29.7(supports-color@7.2.0)': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/traverse': 7.29.8 '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))(supports-color@7.2.0)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@7.2.0) + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -4421,9 +4219,9 @@ snapshots: dependencies: '@babel/types': 7.29.8 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/runtime@7.29.7': {} @@ -4434,7 +4232,7 @@ snapshots: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 - '@babel/traverse@7.29.8(supports-color@7.2.0)': + '@babel/traverse@7.29.8': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 @@ -4442,7 +4240,7 @@ snapshots: '@babel/parser': 7.29.8 '@babel/template': 7.29.7 '@babel/types': 7.29.8 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -4463,15 +4261,15 @@ snapshots: '@csstools/color-helpers@6.1.1': {} - '@csstools/css-calc@3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.2.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.2.3(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.1.1 - '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -4479,7 +4277,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.12(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.14(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -4905,12 +4703,6 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.11': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - optional: true - '@jridgewell/sourcemap-codec@1.6.0': {} '@jridgewell/trace-mapping@0.3.31': @@ -4954,7 +4746,7 @@ snapshots: '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) solid-js: 2.0.0-rc.8 - '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 @@ -4966,14 +4758,14 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.1 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) + hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 recma-jsx: 1.0.1(acorn@8.18.0) recma-stringify: 1.0.0 - rehype-recma: 1.0.0(supports-color@7.2.0) - remark-mdx: 3.1.1(supports-color@7.2.0) - remark-parse: 11.0.0(supports-color@7.2.0) + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 remark-rehype: 11.1.2 source-map: 0.7.6 unified: 11.0.5 @@ -4984,45 +4776,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@microsoft/api-extractor-model@7.33.11(@types/node@26.5.0)': - dependencies: - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.24.0(@types/node@26.5.0) - transitivePeerDependencies: - - '@types/node' - optional: true - - '@microsoft/api-extractor@7.59.0(@types/node@26.5.0)': - dependencies: - '@microsoft/api-extractor-model': 7.33.11(@types/node@26.5.0) - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.24.0(@types/node@26.5.0) - '@rushstack/rig-package': 0.7.3 - '@rushstack/terminal': 0.24.3(@types/node@26.5.0) - '@rushstack/ts-command-line': 5.3.13(@types/node@26.5.0) - diff: 8.0.4 - minimatch: 10.2.3 - resolve: 1.22.12 - semver: 7.7.4 - source-map: 0.6.1 - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - - '@microsoft/tsdoc-config@0.18.1': - dependencies: - '@microsoft/tsdoc': 0.16.0 - ajv: 8.18.0 - jju: 1.4.0 - resolve: 1.22.12 - optional: true - - '@microsoft/tsdoc@0.16.0': - optional: true - '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true @@ -5120,7 +4873,7 @@ snapshots: '@oxc-project/types@0.139.0': {} - '@oxc-project/types@0.148.0': {} + '@oxc-project/types@0.150.0': {} '@pagefind/darwin-arm64@1.5.2': optional: true @@ -5202,178 +4955,134 @@ snapshots: '@parcel/watcher-win32-x64': 2.6.0 optional: true - '@rolldown/binding-android-arm-eabi@1.2.7': + '@rolldown/binding-android-arm-eabi@1.2.9': optional: true - '@rolldown/binding-android-arm64@1.2.7': + '@rolldown/binding-android-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-arm64@1.2.7': + '@rolldown/binding-darwin-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-x64@1.2.7': + '@rolldown/binding-darwin-x64@1.2.9': optional: true - '@rolldown/binding-freebsd-x64@1.2.7': + '@rolldown/binding-freebsd-x64@1.2.9': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.7': + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.7': + '@rolldown/binding-linux-arm64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.7': + '@rolldown/binding-linux-arm64-musl@1.2.9': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.7': + '@rolldown/binding-linux-ppc64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.7': + '@rolldown/binding-linux-s390x-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.7': + '@rolldown/binding-linux-x64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-musl@1.2.7': + '@rolldown/binding-linux-x64-musl@1.2.9': optional: true - '@rolldown/binding-openharmony-arm64@1.2.7': + '@rolldown/binding-openharmony-arm64@1.2.9': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.7': + '@rolldown/binding-win32-arm64-msvc@1.2.9': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.7': + '@rolldown/binding-win32-x64-msvc@1.2.9': optional: true '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.4.0(rollup@4.63.1)': + '@rollup/pluginutils@5.4.0(rollup@4.63.3)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.7 optionalDependencies: - rollup: 4.63.1 + rollup: 4.63.3 - '@rollup/rollup-android-arm-eabi@4.63.1': + '@rollup/rollup-android-arm-eabi@4.63.3': optional: true - '@rollup/rollup-android-arm64@4.63.1': + '@rollup/rollup-android-arm64@4.63.3': optional: true - '@rollup/rollup-darwin-arm64@4.63.1': + '@rollup/rollup-darwin-arm64@4.63.3': optional: true - '@rollup/rollup-darwin-x64@4.63.1': + '@rollup/rollup-darwin-x64@4.63.3': optional: true - '@rollup/rollup-freebsd-arm64@4.63.1': + '@rollup/rollup-freebsd-arm64@4.63.3': optional: true - '@rollup/rollup-freebsd-x64@4.63.1': + '@rollup/rollup-freebsd-x64@4.63.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.63.1': + '@rollup/rollup-linux-arm-gnueabihf@4.63.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.63.1': + '@rollup/rollup-linux-arm-musleabihf@4.63.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.63.1': + '@rollup/rollup-linux-arm64-gnu@4.63.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.63.1': + '@rollup/rollup-linux-arm64-musl@4.63.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.63.1': + '@rollup/rollup-linux-loong64-gnu@4.63.3': optional: true - '@rollup/rollup-linux-loong64-musl@4.63.1': + '@rollup/rollup-linux-loong64-musl@4.63.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.63.1': + '@rollup/rollup-linux-ppc64-gnu@4.63.3': optional: true - '@rollup/rollup-linux-ppc64-musl@4.63.1': + '@rollup/rollup-linux-ppc64-musl@4.63.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.63.1': + '@rollup/rollup-linux-riscv64-gnu@4.63.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.63.1': + '@rollup/rollup-linux-riscv64-musl@4.63.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.63.1': + '@rollup/rollup-linux-s390x-gnu@4.63.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.63.1': + '@rollup/rollup-linux-x64-gnu@4.63.3': optional: true - '@rollup/rollup-linux-x64-musl@4.63.1': + '@rollup/rollup-linux-x64-musl@4.63.3': optional: true - '@rollup/rollup-openbsd-x64@4.63.1': + '@rollup/rollup-openbsd-x64@4.63.3': optional: true - '@rollup/rollup-openharmony-arm64@4.63.1': + '@rollup/rollup-openharmony-arm64@4.63.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.63.1': + '@rollup/rollup-win32-arm64-msvc@4.63.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.63.1': + '@rollup/rollup-win32-ia32-msvc@4.63.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.63.1': + '@rollup/rollup-win32-x64-gnu@4.63.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.63.1': - optional: true - - '@rushstack/node-core-library@5.24.0(@types/node@26.5.0)': - dependencies: - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-formats: 3.0.1(ajv@8.20.0) - fs-extra: 11.3.6 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.12 - semver: 7.7.4 - optionalDependencies: - '@types/node': 26.5.0 - optional: true - - '@rushstack/problem-matcher@0.2.1(@types/node@26.5.0)': - optionalDependencies: - '@types/node': 26.5.0 - optional: true - - '@rushstack/rig-package@0.7.3': - dependencies: - jju: 1.4.0 - resolve: 1.22.12 - optional: true - - '@rushstack/terminal@0.24.3(@types/node@26.5.0)': - dependencies: - '@rushstack/node-core-library': 5.24.0(@types/node@26.5.0) - '@rushstack/problem-matcher': 0.2.1(@types/node@26.5.0) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 26.5.0 - optional: true - - '@rushstack/ts-command-line@5.3.13(@types/node@26.5.0)': - dependencies: - '@rushstack/terminal': 0.24.3(@types/node@26.5.0) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' + '@rollup/rollup-win32-x64-msvc@4.63.3': optional: true '@shikijs/core@1.29.2': @@ -5598,55 +5307,55 @@ snapshots: '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) solid-js: 2.0.0-rc.8 - '@solidjs/babel-plugin@2.0.0-rc.8(@babel/core@7.29.7(supports-color@7.2.0))': + '@solidjs/babel-plugin@2.0.0-rc.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/types': 7.29.8 html-entities: 2.3.3 parse5: 7.3.0 - '@solidjs/compiler-darwin-arm64@2.0.0-rc.8': + '@solidjs/compiler-darwin-arm64@2.0.0-rc.9': optional: true - '@solidjs/compiler-darwin-x64@2.0.0-rc.8': + '@solidjs/compiler-darwin-x64@2.0.0-rc.9': optional: true - '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.8': + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.9': optional: true - '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.8': + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.9': optional: true - '@solidjs/compiler-wasm32-wasi@2.0.0-rc.8': + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.9': dependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) optional: true - '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.8': + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.9': optional: true - '@solidjs/compiler@2.0.0-rc.8': + '@solidjs/compiler@2.0.0-rc.9': optionalDependencies: - '@solidjs/compiler-darwin-arm64': 2.0.0-rc.8 - '@solidjs/compiler-darwin-x64': 2.0.0-rc.8 - '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.8 - '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.8 - '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.8 - '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.8 + '@solidjs/compiler-darwin-arm64': 2.0.0-rc.9 + '@solidjs/compiler-darwin-x64': 2.0.0-rc.9 + '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.9 + '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.9 + '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.9 + '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.9 '@solidjs/meta@1.0.0-next.2(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(solid-js@2.0.0-rc.8)': dependencies: '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) solid-js: 2.0.0-rc.8 - '@solidjs/prerender@0.2.0(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(prerender-crawler@0.2.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)))': + '@solidjs/prerender@0.2.0(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(prerender-crawler@0.2.0(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)))': dependencies: '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) - prerender-crawler: 0.2.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + prerender-crawler: 0.2.0(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) '@solidjs/router@2.0.0-next.24(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(solid-js@2.0.0-rc.8)': dependencies: @@ -5655,27 +5364,26 @@ snapshots: '@solidjs/signals@2.0.0-rc.8': {} - '@solidjs/signals@2.0.0-rc.9': {} - - '@solidjs/testing-library@0.8.10(solid-js@2.0.0-rc.9)': + '@solidjs/testing-library@1.0.0-beta.3(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(solid-js@2.0.0-rc.8)': dependencies: - '@testing-library/dom': 10.4.1 - solid-js: 2.0.0-rc.9 + '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) + '@testing-library/dom': 10.4.2 + solid-js: 2.0.0-rc.8 - '@solidjs/vite-plugin@3.0.0-next.43(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.8)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2))': + '@solidjs/vite-plugin@3.0.0-next.44(@solidjs/web@2.0.0-rc.8(solid-js@2.0.0-rc.8))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(solid-js@2.0.0-rc.8)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1))': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/core': 7.29.7(supports-color@7.2.0) - '@solidjs/babel-plugin': 2.0.0-rc.8(@babel/core@7.29.7(supports-color@7.2.0)) - '@solidjs/compiler': 2.0.0-rc.8 + '@babel/core': 7.29.7 + '@solidjs/babel-plugin': 2.0.0-rc.9(@babel/core@7.29.7) + '@solidjs/compiler': 2.0.0-rc.9 '@solidjs/web': 2.0.0-rc.8(solid-js@2.0.0-rc.8) '@types/babel__core': 7.20.5 merge-anything: 5.1.7 solid-js: 2.0.0-rc.8 - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) - vitefu: 1.1.3(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) + vitefu: 1.1.3(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) optionalDependencies: - '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0) + '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1) transitivePeerDependencies: - '@tsrx/core' - supports-color @@ -5692,7 +5400,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@testing-library/dom@10.4.1': + '@testing-library/dom@10.4.2': dependencies: '@babel/code-frame': 7.29.7 '@babel/runtime': 7.29.7 @@ -5703,26 +5411,23 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0)': + '@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1)': dependencies: '@adobe/css-tools': 4.5.0 - '@testing-library/dom': 10.4.1 + '@testing-library/dom': 10.4.2 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 picocolors: 1.1.1 redent: 3.0.0 optionalDependencies: - vitest: 5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + vitest: 5.0.1(@types/node@24.13.5)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.0)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 optional: true - '@types/argparse@1.0.38': - optional: true - '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -5800,13 +5505,9 @@ snapshots: dependencies: undici-types: 7.18.2 - '@types/node@26.5.0': - dependencies: - undici-types: 8.9.0 - '@types/sax@1.2.7': dependencies: - '@types/node': 26.5.0 + '@types/node': 24.13.5 '@types/unist@2.0.11': {} @@ -5878,17 +5579,17 @@ snapshots: '@ungap/structured-clone@1.4.0': {} - '@vitest/coverage-v8@5.0.0(vitest@5.0.0)': + '@vitest/coverage-v8@5.0.1(vitest@5.0.1)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/istanbul-lib-coverage': 1.0.1 '@vitest/istanbul-lib-report': 1.0.1 ast-v8-to-istanbul: 1.0.6 - magicast: 0.5.4 - obug: 2.1.4 + magicast: 0.5.5 + obug: 2.2.1 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + vitest: 5.0.1(@types/node@24.13.5)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.0)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) '@vitest/istanbul-lib-coverage@1.0.1': {} @@ -5896,25 +5597,25 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.1 - '@vitest/mocker@5.0.0(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2))': + '@vitest/mocker@5.0.1(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@vitest/spy': 5.0.0 + '@vitest/spy': 5.0.1 estree-walker: 3.0.3 - magic-string: 1.2.3 + magic-string: 1.4.1 optionalDependencies: - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) - '@vitest/mocker@5.0.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2))': + '@vitest/mocker@5.0.1(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@vitest/spy': 5.0.0 + '@vitest/spy': 5.0.1 estree-walker: 3.0.3 - magic-string: 1.2.3 + magic-string: 1.4.1 optionalDependencies: - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) - '@vitest/spy@5.0.0': {} + '@vitest/spy@5.0.1': {} '@volar/language-core@2.4.28': dependencies: @@ -5936,32 +5637,6 @@ snapshots: acorn@8.18.0: {} - ajv-draft-04@1.0.0(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 - optional: true - - ajv-formats@3.0.1(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 - optional: true - - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.7 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - optional: true - - ajv@8.20.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.7 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - optional: true - ansi-align@3.0.1: dependencies: string-width: 4.2.3 @@ -5981,11 +5656,6 @@ snapshots: arg@5.0.2: {} - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - optional: true - argparse@2.0.1: {} argparse@3.0.2: {} @@ -6008,20 +5678,20 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.38.3(astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2)): + astro-expressive-code@0.38.3(astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2)): dependencies: - astro: 5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2) + astro: 5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2) rehype-expressive-code: 0.38.3 - astro@5.18.2(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(rollup@4.63.1)(sass@1.104.1)(supports-color@7.2.0)(terser@5.51.2)(typescript@7.0.2): + astro@5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2): dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/internal-helpers': 0.7.6 - '@astrojs/markdown-remark': 6.3.11(supports-color@7.2.0) - '@astrojs/telemetry': 3.3.0(supports-color@7.2.0) + '@astrojs/markdown-remark': 6.3.11 + '@astrojs/telemetry': 3.3.0 '@capsizecss/unpack': 4.0.1 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.4.0(rollup@4.63.1) + '@rollup/pluginutils': 5.4.0(rollup@4.63.3) acorn: 8.18.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -6031,7 +5701,7 @@ snapshots: common-ancestor-path: 1.0.1 cookie: 1.1.1 cssesc: 3.0.0 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 deterministic-object-hash: 2.0.2 devalue: 5.9.2 diff: 8.0.4 @@ -6048,7 +5718,7 @@ snapshots: import-meta-resolve: 4.2.0 js-yaml: 4.3.2 magic-string: 0.30.21 - magicast: 0.5.4 + magicast: 0.5.5 mrmime: 2.0.1 neotraverse: 0.6.18 p-limit: 6.2.0 @@ -6058,11 +5728,11 @@ snapshots: picomatch: 4.0.7 prompts: 2.4.2 rehype: 13.0.2 - semver: 7.7.4 + semver: 7.8.5 shiki: 3.23.0 smol-toml: 1.8.0 svgo: 4.1.0 - tinyexec: 1.3.0 + tinyexec: 1.3.1 tinyglobby: 0.2.17 tsconfck: 3.1.6(typescript@7.0.2) ultrahtml: 1.7.0 @@ -6070,8 +5740,8 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.5 vfile: 6.0.3 - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) - vitefu: 1.1.3(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) + vitefu: 1.1.3(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -6117,37 +5787,27 @@ snapshots: axobject-query@4.1.0: {} - babel-plugin-jsx-dom-expressions@0.40.10(@babel/core@7.29.7(supports-color@7.2.0)): + babel-plugin-jsx-dom-expressions@0.40.10(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/types': 7.29.8 html-entities: 2.3.3 parse5: 7.3.0 - babel-preset-solid@1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@1.9.15): + babel-preset-solid@1.9.15(@babel/core@7.29.7)(solid-js@1.9.15): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - babel-plugin-jsx-dom-expressions: 0.40.10(@babel/core@7.29.7(supports-color@7.2.0)) + '@babel/core': 7.29.7 + babel-plugin-jsx-dom-expressions: 0.40.10(@babel/core@7.29.7) optionalDependencies: solid-js: 1.9.15 - babel-preset-solid@1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@2.0.0-rc.9): - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - babel-plugin-jsx-dom-expressions: 0.40.10(@babel/core@7.29.7(supports-color@7.2.0)) - optionalDependencies: - solid-js: 2.0.0-rc.9 - bail@2.0.2: {} - balanced-match@4.0.4: - optional: true - base-64@1.0.0: {} - baseline-browser-mapping@2.11.21: {} + baseline-browser-mapping@2.11.25: {} bcp-47-match@2.0.3: {} @@ -6174,25 +5834,17 @@ snapshots: widest-line: 5.0.0 wrap-ansi: 9.0.2 - brace-expansion@5.0.9: - dependencies: - balanced-match: 4.0.4 - optional: true - braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.9: + browserslist@4.29.0: dependencies: - baseline-browser-mapping: 2.11.21 + baseline-browser-mapping: 2.11.25 caniuse-lite: 1.0.30001810 - electron-to-chromium: 1.5.423 - node-releases: 2.0.54 - update-browserslist-db: 1.3.2(browserslist@4.28.9) - - buffer-from@1.1.2: - optional: true + electron-to-chromium: 1.5.430 + node-releases: 2.0.56 + update-browserslist-db: 1.3.3(browserslist@4.29.0) camelcase@8.0.0: {} @@ -6244,9 +5896,6 @@ snapshots: commander@11.1.0: {} - commander@2.20.3: - optional: true - common-ancestor-path@1.0.1: {} compare-versions@6.1.1: {} @@ -6304,11 +5953,9 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - debug@4.4.3(supports-color@7.2.0): + debug@4.4.3: dependencies: ms: 2.1.3 - optionalDependencies: - supports-color: 7.2.0 decimal.js@10.6.0: {} @@ -6364,7 +6011,7 @@ snapshots: dset@3.1.4: {} - electron-to-chromium@1.5.423: {} + electron-to-chromium@1.5.430: {} emoji-regex-xs@1.0.0: {} @@ -6378,9 +6025,6 @@ snapshots: entities@8.1.0: {} - es-errors@1.3.0: - optional: true - es-module-lexer@1.7.0: {} es-module-lexer@2.3.2: {} @@ -6511,9 +6155,6 @@ snapshots: extend@3.0.2: {} - fast-deep-equal@3.1.3: - optional: true - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6522,9 +6163,6 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-uri@3.1.7: - optional: true - fastq@1.20.3: dependencies: reusify: 1.1.0 @@ -6533,9 +6171,9 @@ snapshots: optionalDependencies: picomatch: 4.0.7 - filesystem-routing@0.2.1(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + filesystem-routing@0.2.1(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/micromatch': 4.0.10 @@ -6544,7 +6182,7 @@ snapshots: oxc-parser: 0.139.0 radix3: 1.1.2 optionalDependencies: - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) transitivePeerDependencies: - supports-color @@ -6562,22 +6200,12 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - fs-extra@11.3.6: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - optional: true - fsevents@2.3.3: optional: true - function-bind@1.1.2: - optional: true - gensync@1.0.0-beta.2: {} - get-east-asian-width@1.6.0: {} + get-east-asian-width@1.7.0: {} github-slugger@2.0.0: {} @@ -6587,9 +6215,6 @@ snapshots: glob-to-regexp@0.4.1: {} - graceful-fs@4.2.11: - optional: true - h3@1.15.11: dependencies: cookie-es: 1.2.3 @@ -6602,14 +6227,6 @@ snapshots: ufo: 1.6.4 uncrypto: 0.1.3 - has-flag@4.0.0: - optional: true - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - optional: true - hast-util-embedded@3.0.0: dependencies: '@types/hast': 3.0.5 @@ -6711,7 +6328,7 @@ snapshots: unist-util-visit: 5.1.0 zwitch: 2.0.4 - hast-util-to-estree@3.1.3(supports-color@7.2.0): + hast-util-to-estree@3.1.3: dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 @@ -6721,9 +6338,9 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) - mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) - mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -6746,7 +6363,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): + hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 @@ -6755,9 +6372,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) - mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) - mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -6821,9 +6438,6 @@ snapshots: immutable@5.1.9: {} - import-lazy@4.0.0: - optional: true - import-meta-resolve@4.2.0: {} indent-string@4.0.0: {} @@ -6841,11 +6455,6 @@ snapshots: is-arrayish@0.3.4: {} - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - optional: true - is-decimal@2.0.1: {} is-docker@3.0.0: {} @@ -6876,12 +6485,6 @@ snapshots: dependencies: is-inside-container: 1.0.0 - jiti@2.7.0: - optional: true - - jju@1.4.0: - optional: true - js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -6890,12 +6493,12 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@30.0.1: + jsdom@30.1.0: dependencies: - '@asamuzakjp/css-color': 6.0.7 - '@asamuzakjp/dom-selector': 8.3.2 + '@asamuzakjp/css-color': 7.0.0 + '@asamuzakjp/dom-selector': 9.1.4 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.12(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.14(css-tree@3.2.1) '@exodus/bytes': 1.15.1 css-tree: 3.2.1 data-urls: 7.0.0 @@ -6905,31 +6508,20 @@ snapshots: lru-cache: 11.5.2 parse5: 8.0.1 saxes: 6.0.0 - symbol-tree: 3.2.4 tough-cookie: 6.0.2 undici: 8.10.2 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 17.1.0 + whatwg-url: 17.1.1 xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' jsesc@3.1.0: {} - json-schema-traverse@1.0.0: - optional: true - json5@2.2.3: {} - jsonfile@6.2.1: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - optional: true - kleur@3.0.3: {} kolorist@1.8.0: {} @@ -7007,11 +6599,11 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 - magic-string@1.2.3: + magic-string@1.4.1: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 - magicast@0.5.4: + magicast@0.5.5: dependencies: '@babel/parser': 7.29.8 '@babel/types': 7.29.8 @@ -7036,13 +6628,13 @@ snapshots: '@types/unist': 3.0.3 unist-util-visit: 5.1.0 - mdast-util-directive@3.1.0(supports-color@7.2.0): + mdast-util-directive@3.1.0: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -7057,14 +6649,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.3(supports-color@7.2.0): + mdast-util-from-markdown@2.0.3: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2(supports-color@7.2.0) + micromark: 4.0.2 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -7082,67 +6674,67 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): + mdast-util-gfm-footnote@2.1.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.0(supports-color@7.2.0): + mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0(supports-color@7.2.0): + mdast-util-gfm-table@2.0.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): + mdast-util-gfm-task-list-item@2.0.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0(supports-color@7.2.0): + mdast-util-gfm@3.1.0: dependencies: - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0(supports-color@7.2.0) - mdast-util-gfm-strikethrough: 2.0.0(supports-color@7.2.0) - mdast-util-gfm-table: 2.0.0(supports-color@7.2.0) - mdast-util-gfm-task-list-item: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): + mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): + mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -7150,7 +6742,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -7159,23 +6751,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0(supports-color@7.2.0): + mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) - mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) - mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) - mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): + mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -7477,10 +7069,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2(supports-color@7.2.0): + micromark@4.0.2: dependencies: '@types/debug': 4.1.13 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -7506,11 +7098,6 @@ snapshots: min-indent@1.0.1: {} - minimatch@10.2.3: - dependencies: - brace-expansion: 5.0.9 - optional: true - mlly@1.8.2: dependencies: acorn: 8.18.0 @@ -7522,7 +7109,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.18: {} + nanoid@3.3.19: {} neotraverse@0.6.18: {} @@ -7537,7 +7124,7 @@ snapshots: node-mock-http@1.0.5: {} - node-releases@2.0.54: {} + node-releases@2.0.56: {} normalize-path@3.0.0: {} @@ -7545,7 +7132,7 @@ snapshots: dependencies: boolbase: 1.0.0 - obug@2.1.4: {} + obug@2.2.1: {} ofetch@1.5.1: dependencies: @@ -7646,9 +7233,6 @@ snapshots: path-browserify@1.0.1: {} - path-parse@1.0.7: - optional: true - pathe@2.0.3: {} piccolore@0.1.3: {} @@ -7683,13 +7267,13 @@ snapshots: postcss@8.5.28: dependencies: - nanoid: 3.3.18 + nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 - prerender-crawler@0.2.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + prerender-crawler@0.2.0(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): optionalDependencies: - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) pretty-format@27.5.1: dependencies: @@ -7794,11 +7378,11 @@ snapshots: hast-util-raw: 9.1.0 vfile: 6.0.3 - rehype-recma@1.0.0(supports-color@7.2.0): + rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 - hast-util-to-estree: 3.1.3(supports-color@7.2.0) + hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color @@ -7815,37 +7399,37 @@ snapshots: rehype-stringify: 10.0.1 unified: 11.0.5 - remark-directive@3.0.1(supports-color@7.2.0): + remark-directive@3.0.1: dependencies: '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0(supports-color@7.2.0) + mdast-util-directive: 3.1.0 micromark-extension-directive: 3.0.2 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-gfm@4.0.1(supports-color@7.2.0): + remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0(supports-color@7.2.0) + mdast-util-gfm: 3.1.0 micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0(supports-color@7.2.0) + remark-parse: 11.0.0 remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.1.1(supports-color@7.2.0): + remark-mdx@3.1.1: dependencies: - mdast-util-mdx: 3.0.0(supports-color@7.2.0) + mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0(supports-color@7.2.0): + remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3(supports-color@7.2.0) + mdast-util-from-markdown: 2.0.3 micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -7874,14 +7458,6 @@ snapshots: require-from-string@2.0.2: {} - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - optional: true - retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -7909,57 +7485,57 @@ snapshots: reusify@1.1.0: {} - rolldown@1.2.7: + rolldown@1.2.9: dependencies: - '@oxc-project/types': 0.148.0 + '@oxc-project/types': 0.150.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm-eabi': 1.2.7 - '@rolldown/binding-android-arm64': 1.2.7 - '@rolldown/binding-darwin-arm64': 1.2.7 - '@rolldown/binding-darwin-x64': 1.2.7 - '@rolldown/binding-freebsd-x64': 1.2.7 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.7 - '@rolldown/binding-linux-arm64-gnu': 1.2.7 - '@rolldown/binding-linux-arm64-musl': 1.2.7 - '@rolldown/binding-linux-ppc64-gnu': 1.2.7 - '@rolldown/binding-linux-s390x-gnu': 1.2.7 - '@rolldown/binding-linux-x64-gnu': 1.2.7 - '@rolldown/binding-linux-x64-musl': 1.2.7 - '@rolldown/binding-openharmony-arm64': 1.2.7 - '@rolldown/binding-win32-arm64-msvc': 1.2.7 - '@rolldown/binding-win32-x64-msvc': 1.2.7 - - rollup@4.63.1: + '@rolldown/binding-android-arm-eabi': 1.2.9 + '@rolldown/binding-android-arm64': 1.2.9 + '@rolldown/binding-darwin-arm64': 1.2.9 + '@rolldown/binding-darwin-x64': 1.2.9 + '@rolldown/binding-freebsd-x64': 1.2.9 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.9 + '@rolldown/binding-linux-arm64-gnu': 1.2.9 + '@rolldown/binding-linux-arm64-musl': 1.2.9 + '@rolldown/binding-linux-ppc64-gnu': 1.2.9 + '@rolldown/binding-linux-s390x-gnu': 1.2.9 + '@rolldown/binding-linux-x64-gnu': 1.2.9 + '@rolldown/binding-linux-x64-musl': 1.2.9 + '@rolldown/binding-openharmony-arm64': 1.2.9 + '@rolldown/binding-win32-arm64-msvc': 1.2.9 + '@rolldown/binding-win32-x64-msvc': 1.2.9 + + rollup@4.63.3: dependencies: '@types/estree': 1.0.9 optionalDependencies: '@napi-rs/lzma-linux-x64-gnu': 1.5.1 - '@rollup/rollup-android-arm-eabi': 4.63.1 - '@rollup/rollup-android-arm64': 4.63.1 - '@rollup/rollup-darwin-arm64': 4.63.1 - '@rollup/rollup-darwin-x64': 4.63.1 - '@rollup/rollup-freebsd-arm64': 4.63.1 - '@rollup/rollup-freebsd-x64': 4.63.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.63.1 - '@rollup/rollup-linux-arm-musleabihf': 4.63.1 - '@rollup/rollup-linux-arm64-gnu': 4.63.1 - '@rollup/rollup-linux-arm64-musl': 4.63.1 - '@rollup/rollup-linux-loong64-gnu': 4.63.1 - '@rollup/rollup-linux-loong64-musl': 4.63.1 - '@rollup/rollup-linux-ppc64-gnu': 4.63.1 - '@rollup/rollup-linux-ppc64-musl': 4.63.1 - '@rollup/rollup-linux-riscv64-gnu': 4.63.1 - '@rollup/rollup-linux-riscv64-musl': 4.63.1 - '@rollup/rollup-linux-s390x-gnu': 4.63.1 - '@rollup/rollup-linux-x64-gnu': 4.63.1 - '@rollup/rollup-linux-x64-musl': 4.63.1 - '@rollup/rollup-openbsd-x64': 4.63.1 - '@rollup/rollup-openharmony-arm64': 4.63.1 - '@rollup/rollup-win32-arm64-msvc': 4.63.1 - '@rollup/rollup-win32-ia32-msvc': 4.63.1 - '@rollup/rollup-win32-x64-gnu': 4.63.1 - '@rollup/rollup-win32-x64-msvc': 4.63.1 + '@rollup/rollup-android-arm-eabi': 4.63.3 + '@rollup/rollup-android-arm64': 4.63.3 + '@rollup/rollup-darwin-arm64': 4.63.3 + '@rollup/rollup-darwin-x64': 4.63.3 + '@rollup/rollup-freebsd-arm64': 4.63.3 + '@rollup/rollup-freebsd-x64': 4.63.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.63.3 + '@rollup/rollup-linux-arm-musleabihf': 4.63.3 + '@rollup/rollup-linux-arm64-gnu': 4.63.3 + '@rollup/rollup-linux-arm64-musl': 4.63.3 + '@rollup/rollup-linux-loong64-gnu': 4.63.3 + '@rollup/rollup-linux-loong64-musl': 4.63.3 + '@rollup/rollup-linux-ppc64-gnu': 4.63.3 + '@rollup/rollup-linux-ppc64-musl': 4.63.3 + '@rollup/rollup-linux-riscv64-gnu': 4.63.3 + '@rollup/rollup-linux-riscv64-musl': 4.63.3 + '@rollup/rollup-linux-s390x-gnu': 4.63.3 + '@rollup/rollup-linux-x64-gnu': 4.63.3 + '@rollup/rollup-linux-x64-musl': 4.63.3 + '@rollup/rollup-openbsd-x64': 4.63.3 + '@rollup/rollup-openharmony-arm64': 4.63.3 + '@rollup/rollup-win32-arm64-msvc': 4.63.3 + '@rollup/rollup-win32-ia32-msvc': 4.63.3 + '@rollup/rollup-win32-x64-gnu': 4.63.3 + '@rollup/rollup-win32-x64-msvc': 4.63.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -7982,7 +7558,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.4: {} + semver@7.8.5: {} seroval-plugins@1.5.6(seroval@1.5.6): dependencies: @@ -8000,7 +7576,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -8026,7 +7602,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -8106,56 +7682,25 @@ snapshots: seroval: 1.6.7 seroval-plugins: 1.6.7(seroval@1.6.7) - solid-js@2.0.0-rc.9: - dependencies: - '@solidjs/signals': 2.0.0-rc.9 - csstype: 3.2.3 - seroval: 1.6.7 - seroval-plugins: 1.6.7(seroval@1.6.7) - - solid-refresh@0.6.3(solid-js@1.9.15)(supports-color@7.2.0): + solid-refresh@0.6.3(solid-js@1.9.15): dependencies: '@babel/generator': 7.29.8 - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) + '@babel/helper-module-imports': 7.29.7 '@babel/types': 7.29.8 solid-js: 1.9.15 transitivePeerDependencies: - supports-color - solid-refresh@0.6.3(solid-js@2.0.0-rc.9)(supports-color@7.2.0): - dependencies: - '@babel/generator': 7.29.8 - '@babel/helper-module-imports': 7.29.7(supports-color@7.2.0) - '@babel/types': 7.29.8 - solid-js: 2.0.0-rc.9 - transitivePeerDependencies: - - supports-color - source-map-js@1.2.1: {} - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - optional: true - - source-map@0.6.1: - optional: true - source-map@0.7.6: {} space-separated-tokens@2.0.2: {} - sprintf-js@1.0.3: - optional: true - stackback@0.0.2: {} std-env@4.2.0: {} - string-argv@0.3.2: - optional: true - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -8165,7 +7710,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.6.0 + get-east-asian-width: 1.7.0 strip-ansi: 7.2.0 stringify-entities@4.0.4: @@ -8193,19 +7738,6 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - optional: true - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - optional: true - - supports-preserve-symlinks-flag@1.0.0: - optional: true - svgo@4.1.0: dependencies: commander: 11.1.0 @@ -8216,22 +7748,14 @@ snapshots: picocolors: 1.1.1 sax: 1.6.1 - symbol-tree@3.2.4: {} - - terser@5.51.2: - dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.18.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - tiny-inflate@1.0.3: {} tinybench@6.1.4: {} tinyexec@1.3.0: {} + tinyexec@1.3.1: {} + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.7) @@ -8239,11 +7763,11 @@ snapshots: tinyrainbow@3.1.1: {} - tldts-core@7.4.12: {} + tldts-core@7.4.13: {} - tldts@7.4.12: + tldts@7.4.13: dependencies: - tldts-core: 7.4.12 + tldts-core: 7.4.13 to-regex-range@5.0.1: dependencies: @@ -8251,7 +7775,7 @@ snapshots: tough-cookie@6.0.2: dependencies: - tldts: 7.4.12 + tldts: 7.4.13 tr46@6.0.0: dependencies: @@ -8306,8 +7830,6 @@ snapshots: undici-types@7.18.2: {} - undici-types@8.9.0: {} - undici@8.10.2: {} unified@11.0.5: @@ -8372,15 +7894,12 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - universalify@2.0.1: - optional: true - - unplugin-dts@1.1.0(@microsoft/api-extractor@7.59.0(@types/node@26.5.0))(esbuild@0.27.7)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@7.2.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + unplugin-dts@1.1.0(esbuild@0.27.7)(rolldown@1.2.9)(rollup@4.63.3)(typescript@7.0.2)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.63.1) + '@rollup/pluginutils': 5.4.0(rollup@4.63.3) '@volar/typescript': 2.4.28(typescript@7.0.2) compare-versions: 6.1.1 - debug: 4.4.3(supports-color@7.2.0) + debug: 4.4.3 glob-to-regexp: 0.4.1 kolorist: 1.8.0 local-pkg: 1.2.1 @@ -8388,11 +7907,10 @@ snapshots: typescript: 7.0.2 unplugin: 2.3.11 optionalDependencies: - '@microsoft/api-extractor': 7.59.0(@types/node@26.5.0) esbuild: 0.27.7 - rolldown: 1.2.7 - rollup: 4.63.1 - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + rolldown: 1.2.9 + rollup: 4.63.3 + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) transitivePeerDependencies: - supports-color @@ -8414,9 +7932,9 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 - update-browserslist-db@1.3.2(browserslist@4.28.9): + update-browserslist-db@1.3.3(browserslist@4.29.0): dependencies: - browserslist: 4.28.9 + browserslist: 4.29.0 escalade: 3.2.0 picocolors: 1.1.1 @@ -8437,13 +7955,12 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-dts@5.1.0(@microsoft/api-extractor@7.59.0(@types/node@26.5.0))(esbuild@0.27.7)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@7.2.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + vite-plugin-dts@5.1.0(esbuild@0.27.7)(rolldown@1.2.9)(rollup@4.63.3)(typescript@7.0.2)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): dependencies: - unplugin-dts: 1.1.0(@microsoft/api-extractor@7.59.0(@types/node@26.5.0))(esbuild@0.27.7)(rolldown@1.2.7)(rollup@4.63.1)(supports-color@7.2.0)(typescript@7.0.2)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + unplugin-dts: 1.1.0(esbuild@0.27.7)(rolldown@1.2.9)(rollup@4.63.3)(typescript@7.0.2)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) optionalDependencies: - '@microsoft/api-extractor': 7.59.0(@types/node@26.5.0) - rollup: 4.63.1 - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + rollup: 4.63.3 + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) transitivePeerDependencies: - '@rspack/core' - '@vue/language-core' @@ -8453,118 +7970,99 @@ snapshots: - typescript - webpack - vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@1.9.15)(supports-color@7.2.0)(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)): + vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1))(solid-js@1.9.15)(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)): dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) + '@babel/core': 7.29.7 '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@1.9.15) + babel-preset-solid: 1.9.15(@babel/core@7.29.7)(solid-js@1.9.15) merge-anything: 5.1.7 solid-js: 1.9.15 - solid-refresh: 0.6.3(solid-js@1.9.15)(supports-color@7.2.0) - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) - vitefu: 1.1.3(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)) - optionalDependencies: - '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0) - transitivePeerDependencies: - - supports-color - - vite-plugin-solid@2.11.14(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): - dependencies: - '@babel/core': 7.29.7(supports-color@7.2.0) - '@types/babel__core': 7.20.5 - babel-preset-solid: 1.9.15(@babel/core@7.29.7(supports-color@7.2.0))(solid-js@2.0.0-rc.9) - merge-anything: 5.1.7 - solid-js: 2.0.0-rc.9 - solid-refresh: 0.6.3(solid-js@2.0.0-rc.9)(supports-color@7.2.0) - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) - vitefu: 1.1.3(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + solid-refresh: 0.6.3(solid-js@1.9.15) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) + vitefu: 1.1.3(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)) optionalDependencies: - '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.1)(vitest@5.0.0) + '@testing-library/jest-dom': 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.1) transitivePeerDependencies: - supports-color - vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2): + vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.7) picomatch: 4.0.7 postcss: 8.5.28 - rollup: 4.63.1 + rollup: 4.63.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.5.0 + '@types/node': 24.13.5 fsevents: 2.3.3 - jiti: 2.7.0 lightningcss: 1.33.0 sass: 1.104.1 - terser: 5.51.2 - vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2): + vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 postcss: 8.5.28 - rolldown: 1.2.7 + rolldown: 1.2.9 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.5.0 + '@types/node': 24.13.5 esbuild: 0.27.7 fsevents: 2.3.3 - jiti: 2.7.0 sass: 1.104.1 - terser: 5.51.2 - vitefu@1.1.3(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)): + vitefu@1.1.3(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)): optionalDependencies: - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) - vitefu@1.1.3(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + vitefu@1.1.3(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): optionalDependencies: - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) - vitest@5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)): + vitest@5.0.1(@types/node@24.13.5)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.0)(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.0(vite@6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2)) + '@vitest/mocker': 5.0.1(vite@6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 1.2.3 - obug: 2.1.4 + magic-string: 1.4.1 + obug: 2.2.1 picomatch: 4.0.7 std-env: 4.2.0 tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 6.4.3(@types/node@26.5.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.104.1)(terser@5.51.2) + vite: 6.4.3(@types/node@24.13.5)(lightningcss@1.33.0)(sass@1.104.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.5.0 - '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) - jsdom: 30.0.1 + '@types/node': 24.13.5 + '@vitest/coverage-v8': 5.0.1(vitest@5.0.1) + jsdom: 30.1.0 transitivePeerDependencies: - msw - vitest@5.0.0(@types/node@26.5.0)(@vitest/coverage-v8@5.0.0)(jsdom@30.0.1)(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)): + vitest@5.0.1(@types/node@24.13.5)(@vitest/coverage-v8@5.0.1)(jsdom@30.1.0)(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.0(vite@8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2)) + '@vitest/mocker': 5.0.1(vite@8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 1.2.3 - obug: 2.1.4 + magic-string: 1.4.1 + obug: 2.2.1 picomatch: 4.0.7 std-env: 4.2.0 tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 8.2.2(@types/node@26.5.0)(esbuild@0.27.7)(jiti@2.7.0)(sass@1.104.1)(terser@5.51.2) + vite: 8.3.0(@types/node@24.13.5)(esbuild@0.27.7)(sass@1.104.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.5.0 - '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) - jsdom: 30.0.1 + '@types/node': 24.13.5 + '@vitest/coverage-v8': 5.0.1(vitest@5.0.1) + jsdom: 30.1.0 transitivePeerDependencies: - msw @@ -8590,7 +8088,7 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - whatwg-url@17.1.0: + whatwg-url@17.1.1: dependencies: '@exodus/bytes': 1.15.1 tr46: 6.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f4a6b53..95a14b7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,6 +7,18 @@ allowBuilds: sharp: true '@parcel/watcher': true +minimumReleaseAgeExclude: + - '@solidjs/babel-plugin@2.0.0-rc.9' + - '@solidjs/compiler-darwin-arm64@2.0.0-rc.9' + - '@solidjs/compiler-darwin-x64@2.0.0-rc.9' + - '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.9' + - '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.9' + - '@solidjs/compiler-wasm32-wasi@2.0.0-rc.9' + - '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.9' + - '@solidjs/compiler@2.0.0-rc.9' + - '@solidjs/vite-plugin@3.0.0-next.44' + - '@solidjs/web@2.0.0-rc.9' + overrides: '@kobalte/core>solid-js': 2.0.0-rc.8 '@kobalte/core>@solidjs/web': 2.0.0-rc.8 diff --git a/test/api.test.tsx b/test/api.test.tsx index b2410bf..d3ce4f3 100644 --- a/test/api.test.tsx +++ b/test/api.test.tsx @@ -14,7 +14,7 @@ describe('validateField', () => { const { validate, errors } = api; return ( <> - + {errors.username} ); @@ -32,7 +32,7 @@ describe('validateField', () => { function Form() { api = useForm(); const { validate } = api; - return ; + return ; } render(() =>
); await registered(); @@ -59,7 +59,7 @@ describe('getFieldValue', () => { function Form() { api = useForm(); const { validate } = api; - return ; + return ; } render(() => ); await registered(); @@ -80,15 +80,15 @@ describe('getFieldValue', () => { }); }); -describe('validateRef', () => { +describe('validate', () => { it('registers a child-owned field through a ref prop', async () => { - function EmailField(props: { validateRef: ReturnType>['validateRef'] }) { + function EmailField(props: { validate: ReturnType>['validate'] }) { return ( [minLength(6)])} data-testid='email' /> ); @@ -97,10 +97,10 @@ describe('validateRef', () => { const callback = vi.fn(); function Parent() { - const { validateRef, errors, submit } = useForm(); + const { validate, errors, submit } = useForm(); return ( <> - + {errors.email} + ))} + + {errors.plan} + +
+ + {isSubmitted() && {chosen} selected} +
+ + ); +} diff --git a/website/versions/v2/src/components/demos/SubmitDemo.tsx b/website/versions/v2/src/components/demos/SubmitDemo.tsx new file mode 100644 index 0000000..fc619a5 --- /dev/null +++ b/website/versions/v2/src/components/demos/SubmitDemo.tsx @@ -0,0 +1,60 @@ +import { useForm } from '@sparkstone/solid-validation'; + +type Fields = { email: string; handle: string; form: string }; + +const minLength = (min: number) => (el: HTMLInputElement) => + el.value.length < min && `Use at least ${min} characters`; + +const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); + +/** + * Exercises both submit paths on one page. + * + * The form uses formSubmit, which binds onsubmit directly to the element. + * The button beside it calls submit() from an inline-arrow onClick, which is + * the path that does not fire under jsdom in the test suite. If it works here, + * the failure is the test environment rather than the library. + */ +export default function SubmitDemo() { + const { formSubmit, validate, errors, isSubmitting, isSubmitted } = useForm(); + + async function onSubmit(form: HTMLFormElement) { + await wait(400); + const email = String(new FormData(form).get('email') ?? ''); + if (email.endsWith('@example.com')) return { email: 'That domain is not accepted' }; + } + + return ( + +

+ + Submit with the form button, then with the one that calls submit() from a + click handler. Both should behave identically. + +

+ + + + {errors.email} + + + [minLength(3)])} + data-testid='handle' + /> + {errors.handle} + +
+ + + {isSubmitted() && Saved} +
+ + ); +} diff --git a/website/versions/v2/src/content/v2/migrating.md b/website/versions/v2/src/content/v2/migrating.md new file mode 100644 index 0000000..4171b20 --- /dev/null +++ b/website/versions/v2/src/content/v2/migrating.md @@ -0,0 +1,97 @@ +--- +title: Migrating from v1 +--- + +v2 targets Solid 2. Two things drive every change below: Solid 2 removed `use:` +directives, and it batches store writes. + +## Directives become ref factories + +`use:validate` and `use:formSubmit` are gone, because Solid 2 has no directives. +Each is now a function you call, which returns a ref callback. + +```diff +-
+- +- +-
++
++ ++ [minLength(3)])} /> ++
+``` + +Destructuring `useForm()` is no longer required. The directive compiler needed +the names in scope; a ref factory is an ordinary value, so `form.validate(...)` +works as well. + +## validators take an accessor + +`validate` takes a function returning the array, not the array itself. The +directive compiler used to insert that wrapper for you. + +```diff +-use:validate={[minLength(3), noSpaces]} ++ref={validate(() => [minLength(3), noSpaces])} +``` + +The wrapper is what makes a conditional rule work, because the array is read +when the field is checked rather than when it mounts: + +```tsx + [isRequired, needsMatch() && mustMatch])} /> +``` + +`formSubmit` takes the callback directly. Your callback closes over its own +signals and reads them when it runs, so there is nothing to defer. + +## validateRef is gone + +It existed because directives could not cross a component boundary. Ref +factories can, so `validate` covers both cases and `validateRef` is removed. + +```diff +- ++ [minLength(3), noSpaces])} /> +``` + +Note the arguments become one array inside an accessor. + +## Errors arrive a tick later + +Solid 2 batches store writes. In v1 a blur on an empty required field put the +message in `errors` in the same tick as the event. It now lands on the next +flush. + +Nothing changes for rendering, since anything reading `errors.email` in JSX +updates when the write settles. It matters if you read the store imperatively +straight after an event: + +```ts +field.dispatchEvent(new FocusEvent('blur')); +errors.email; // still undefined here +``` + +`validateField` is unaffected. It awaits its own check and reports the result +directly rather than reading the store back. + +In tests, assert with `waitFor` rather than immediately after the action. + +## Cleared fields leave no key + +Clearing an error now deletes its key instead of setting it to `undefined`, so +`Object.keys(errors)` lists only fields that are currently failing. Code that +counts errors or iterates the store sees the difference; code that reads +`errors.email` does not. + +## Peer dependencies + +`@solidjs/web` joins `solid-js` as a peer, since Solid 2 puts the JSX runtime in +a separate package. + +```json +"peerDependencies": { + "solid-js": "^2.0.0", + "@solidjs/web": "^2.0.0" +} +``` diff --git a/website/versions/v2/src/content/v2/quick-start.md b/website/versions/v2/src/content/v2/quick-start.md index 1ba92f3..81c4e8a 100644 --- a/website/versions/v2/src/content/v2/quick-start.md +++ b/website/versions/v2/src/content/v2/quick-start.md @@ -17,6 +17,7 @@ Solid 1.9 or newer is the only peer dependency. Everything below runs as written. Copy the whole file. ```tsx +import { useForm, type Validator } from '@sparkstone/solid-validation'; const minLength = (min: number): Validator => @@ -31,13 +32,13 @@ export default function SignupForm() { } return ( -
+ - + {errors.email} - + [minLength(3)])} /> {errors.handle} `),p=n(``),d=t(`Saved`),f=e=>t=>t.value.lengthnew Promise(t=>setTimeout(t,e));function m(){let{formSubmit:t,validate:m,errors:h,isSubmitting:g,isSubmitted:_}=l();async function v(e){if(await p(400),String(new FormData(e).get(`email`)??``).endsWith(`@example.com`))return{email:`That domain is not accepted`}}var y=o(u),b=y.firstChild.nextSibling.nextSibling,x=b.nextSibling,S=x.nextSibling.nextSibling,C=S.nextSibling,w=C.nextSibling,T=w.firstChild,E=T.nextSibling.nextSibling,[D,O]=i(E.nextSibling),k=t(v);(typeof k==`function`||Array.isArray(k))&&s(()=>k,y);var A=m();(typeof A==`function`||Array.isArray(A))&&s(()=>A,b),c(x,()=>h.email);var j=m(()=>[f(3)]);return(typeof j==`function`||Array.isArray(j))&&s(()=>j,S),c(C,()=>h.handle),c(T,()=>g()?`Saving`:`Submit via form`),c(w,e((()=>{var e=r(()=>!!_());return()=>e()?o(d):_()})()),D,O),a(()=>g(),e=>{n(T,`disabled`,e)}),y}export{m as default}; \ No newline at end of file diff --git a/docs/assets/child-components-xOEB0jxC.js b/docs/assets/child-components-1UvvRKcp.js similarity index 95% rename from docs/assets/child-components-xOEB0jxC.js rename to docs/assets/child-components-1UvvRKcp.js index e8c364e..b8b56c3 100644 --- a/docs/assets/child-components-xOEB0jxC.js +++ b/docs/assets/child-components-1UvvRKcp.js @@ -1,4 +1,4 @@ -import{H as e}from"./dist-B5qRkI56.js";import{t}from"./MarkdownPage-UBS0bX0L.js";var n=`--- +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- title: Child components --- diff --git a/docs/assets/dist-B5qRkI56.js b/docs/assets/dist-B5qRkI56.js deleted file mode 100644 index 9c397bb..0000000 --- a/docs/assets/dist-B5qRkI56.js +++ /dev/null @@ -1 +0,0 @@ -var e=class extends Error{source;constructor(e){let t=Error,n=t.stackTraceLimit;n!==void 0&&(t.stackTraceLimit=0),super(),n!==void 0&&(t.stackTraceLimit=n),this.source=e}},t=class extends Error{source;constructor(e,t){super(t instanceof Error?t.message:String(t),{cause:t}),this.source=e}};function n(e){return e instanceof t?e.cause:e}var r=class extends Error{constructor(){super(``)}},i=class extends Error{constructor(){super(``)}},a=1024,o=2048,s=4096,c=1024,l=2048,u=4096,d=16384,f=1<<17,p=1<<19,m=1<<21,h={},g={},_={};function v(e){return e===_?void 0:e}var ee=typeof Proxy==`function`,te={},ne=Symbol(`refresh`),re=new WeakMap,y=new Set;function ie(e){let t=re.get(e);if(t)return b(t);let n=(e.o?.Gt)?.o?.Oe,r=n?b(n):null;return t={nn:e,he:new Set,tn:[[],[]],rn:null,ge:C,an:r},re.set(e,t),y.add(t),ae(e.o?.Le,t),ae(e.o?.Qe,t),t}function ae(e,t){if(!e)return;let n=re.get(e);if(!n)return;let r=b(n);r!==t&&r.nn===e&&!r.an&&(r.an=t)}function b(e){for(;e.rn;)e=e.rn;return e}function oe(e){if(!e.ge)return!1;for(let t of e.he)if(Ye(t)!==null)return!0;return!1}function se(e,t){if(e=b(e),t=b(t),e===t)return e;t.rn=e;for(let n of t.he)e.he.add(n);return t.he.clear(),e.tn[0].push(...t.tn[0]),e.tn[1].push(...t.tn[1]),t.tn[0].length=0,t.tn[1].length=0,e}function ce(e){let t=e.o?.Oe;if(!t)return;let n=b(t);if(y.has(n))return n;e.o!==null&&(e.o.Oe=void 0)}function le(e){if(ue(e)&&e.o?.Ot){let t=H(e).Ot=k(e.o?.Ot);if(t.ft!==!0)return t;e.o!==null&&(e.o.Ot=null)}return ce(e)?.ge??e.ge}function ue(e){let t=e.o;return t!==null&&t.be!==void 0&&t.be!==h}function de(e,t){let n=b(t),r=e.o?.Oe;if(r){if(r.rn){H(e).Oe=t,e.T|=c;return}let i=b(r);if(y.has(i)){i!==n&&!ue(e)&&(n.an&&b(n.an)===i?(H(e).Oe=t,e.T|=c):i.an&&b(i.an)===n||se(n,i));return}}H(e).Oe=t,e.T|=c}var fe=new Set,x={eE:Array(2e3).fill(void 0),tE:!1,Ke:0,EE:0},pe={eE:Array(2e3).fill(void 0),tE:!1,Ke:0,EE:0};function me(e){e.ie&16?e.ie&=-12:(M(e,pe),e.ie&=-4)}var S=0,C=null,he=!1,ge=!1,_e=!1,ve=0,ye=0;function be(){ye++}function xe(){ye--}var Se=new Set;function Ce(e){let t=e.m;return fe.size===0&&y.size===0&&e.Xt.length===0&&t.it.length===0&&t.A.length===0&&t.En.size===0&&Se.size===0}function we(){if(Se.size!==0)for(let e of Se){if(e.u!==null){Se.delete(e);continue}e.Ge===h&&(e.o?.be===void 0||e.o?.be===h)&&(e.o?.t||(Se.delete(e),e.T&262144?sn(e):e.o?.Ct?.()))}}function Te(){return{_e:S,$t:[],Re:new Map,it:[],A:[],En:new Set,ue:[],ei:{ti:[[],[]],Xt:[]},ft:!1,lt:new Set,Et:null}}function Ee(e,t){t.ft=e,e.ue.push(...t.ue);for(let n of y)n.ge===t&&(n.ge=e);t.it.length&&(e.it.push(...t.it),t.it.length=0),t.A.length&&(e.A.push(...t.A),t.A.length=0);for(let n of t.En)e.En.add(n);for(let[n,r]of t.Re){let t=e.Re.get(n);t||e.Re.set(n,t=new Set);for(let e of r)t.add(e)}for(let n of t.lt)e.lt.add(n);t.Et&&(e.Et??=[]).push(...t.Et)}function w(){if(ge){Oe();return}he||(he=!0,!ve&&!E.sn&&queueMicrotask(O))}function De(e){if(ge)return;ge=!0;let t=`[REACTIVITY_HALTED]`,n=e!==void 0&&globalThis.reportError;n||e===void 0?console.error(t):console.error(t,e),n&&n(e)}function Oe(){_e||(_e=!0,console.error(`[REACTIVITY_HALTED]`))}var ke=0,Ae=class{qe=null;ti=[[],[]];Xt=[];ii=0;created=S;addChild(e){this.Xt.push(e),e.qe=this}removeChild(e){let t=this.Xt.indexOf(e);t>=0&&(this.Xt.splice(t,1),e.qe=null)}notify(e,t,n,r){return this.qe?this.qe.notify(e,t,n,r):!1}run(e){if(this.ti[e-1].length){let t=this.ti[e-1];this.ti[e-1]=[],Ke(t,e)}let t=this.Xt,n=++ke;for(let r=0;r=x.Ke||this.ti[0].length!==0||this.ti[1].length!==0||this.m.$t.length!==0;return}this.sn=!0;try{if(wt(),nt(x,e.Fe),C){if(!Je(C)){let t=C;nt(pe,this.m===t?me:e.Fe),this.m===t&&(D=this.m=Te()),y.size&&(e.In(1),e.In(2)),this.stashQueues(t.ei),S++,he=x.EE>=x.Ke||this.m.$t.length>0,Ge(t.$t),C=null,He(null,!0);return}let t=C,n=this.m;if(n!==t&&n.$t.push(...t.$t),this.restoreQueues(t.ei),fe.delete(t),C=null,Ge(n.$t),He(t),n===t){let e=Te();e.$t=n.$t,e.it=n.it,e.A=n.A,e.En=n.En,D=this.m=e}}else Ce(this)?(Ve(),x.EE>=x.Ke&&(nt(x,e.Fe),Ve())):(fe.size&&nt(pe,e.Fe),He());S++,he=x.EE>=x.Ke||C!==null,y.size&&e.In(1),this.run(1),y.size&&e.In(2),this.run(2)}finally{this.sn=!1}}}notify(t,n,r,i){if(n&1){if(r&1){let n=i??t.o?._;if(n?.l)return!0;if(n&&(!C&&!t.ge&&D.$t.length&&this.initTransition(),C)){let r=n.source,i=C.Re.get(r);i||C.Re.set(r,i=new Set);let a=i.size;i.add(t),i.size!==a&&(w(),e.si?.(C))}}return!0}return!1}initTransition(e){if(e&&(e=k(e),e.ft===!0||e===C)||!e&&C&&C._e===S)return;if(!C)C=e??Te();else if(e){let t=C;Ee(e,t),this.restoreQueues(t.ei),fe.delete(t),C=e}fe.add(C),C._e=S;let t=this.m;if(t!==C){for(let e=0;e=x.Ke;if(o&&nt(x,T.Fe),r){if(D!==n){if(e===null||e===n)return}else o&&Ve();let t=e??n;if(t.it.length&&T.fn(t.it),i&&a){for(let e of i)e.ie&64||j(e);w()}if(t.lt.size){for(let e of t.lt)e.ie&64||j(e);t.lt.clear(),w()}if(t.A.length&&(T.G(t.A),E.Xt.length&&Ue(E)),t.En.size&&T.ni(t.En,e),Be.length!==0){for(;Be.length;)Le(Be.pop());x.EE>=x.Ke&&(nt(x,T.Fe),Ve())}we(),y.size&&T.dn(e)}}function Ue(e){for(let t of e.Xt)t.se?.(),Ue(t)}var We=0;function Ge(e){for(let t=0;t0)return e?e():void 0;if(e){ve++;try{return e()}finally{try{O()}finally{ve--}}}if(!E.sn&&!ge){for(;he||C;)E.flush();Fe=0}}function Ke(e,t){for(let n=0;ne.Be&&(t.Ke=e.Be),Qe(e,t)}function Ze(e,t){let n=(e.qe?.gt?e.qe.bt?.Be:e.qe?.Be)??-1;n>=e.Be&&(e.Be=n+1);let r=e.Be,i=t.eE[r];if(i===void 0)t.eE[r]=e;else{let t=i.Tt;t.Nt=e,e.Tt=t,i.Tt=e}r>t.EE&&(t.EE=r)}function Qe(e,t){let n=e.ie;n&1036||(n&1?e.ie=n&-4|10:(e.ie=n|8,t.tE&&tt(e)),n&16||Ze(e,t))}function $e(e,t){let n=e.ie;n&1052||(e.ie=n|16,Ze(e,t))}function M(e,t){let n=e.ie;if(!(n&24))return;e.ie=n&-25;let r=e.Be;if(e.Tt===e)t.eE[r]=void 0;else{let n=e.Nt,i=t.eE[r],a=n??i;e===i?t.eE[r]=n:e.Tt.Nt=n,a.Tt=e.Tt}e.Tt=e,e.Nt=void 0}function et(e){if(!e.tE){e.tE=!0;for(let t=0;t<=e.EE;t++)for(let n=e.eE[t];n!==void 0;n=n.Nt)n.ie&8&&tt(n)}}function tt(e,t=2){let n=e.ie;if(!((n&3)>=t)){e.ie=n&-4|t;for(let t=e.u;t!==null;t=t.Te)tt(t.Ie,1);if(e.T&4096)for(let t=e.o.i;t!==null;t=t.Ee)for(let e=t.u;e!==null;e=e.Te)tt(e.Ie,1)}}function nt(e,t){for(e.tE=!1,e.Ke=0;e.Ke<=e.EE;e.Ke++){let n=e.eE[e.Ke];for(;n!==void 0;)n.ie&8?t(n):rt(n,e),n=e.eE[e.Ke]}e.EE=0}function rt(e,t){M(e,t);let n=e.Be;for(let t=e.fe;t;t=t.ae){let e=t.Se,r=e.ce||e;r.oe&&r.Be>=n&&(n=r.Be+1)}if(e.Be!==n){e.Be=n;for(let t=e.u;t!==null;t=t.Te)$e(t.Ie,A(t.Ie))}}var it={};function at(e){let t=e.Ye;for(;t;){let e=t.ie;t.ie=e|32,e&24&&(M(t,e&32?pe:x),e&8?Qe(t,pe):$e(t,pe)),at(t),t=t.Ze}}function ot(e,t=!1,n){let r=e.ie;if(r&64)return;if(t){e.ie=r|64;let t=e;(t.o?.Le||t.o?.Qe)&&T.un(t)}t&&e.oe&&e.o!==null&&(e.o.Pe=null);let i=n?e.o?.Xe??null:e.Ye;for(;i;){let e=i.Ze,t=i;t.T&=-33,M(t,A(t)),xt(t),ot(i,!0),i=e}if(n?e.o!==null&&(e.o.Xe=null):(e.Ye=null,e.$e=0),t&&!n&&!(r&32)&&e.qe!==null&&!(e.qe.ie&64)){let t=e.St,n=e.Ze;t===null?e.qe.Ye=n:t.Ze=n,n!==null&&(n.St=t),e.St=null}if(st(e,n),t&&e.Ht){let t=e.Ht;e.Ht=void 0,t()}}function st(e,t){let n=t?e.o?.Je:e.we;if(n){if(Array.isArray(n))for(let e=0;ee(()=>n.dispose()))}function yt(e){let t=e.Se,n=e.ae,r=e.Te,i=e.en;if(r===null?t.dt=i:r.en=i,i!==null)i.Te=r;else if(t.u=r,r===null){t.T&262144?sn(t):t.o?.Ct?.();let e=t;e.oe&&e.T&32&&!(e.ie&32)&&!(e.S&1)&&St(e)}return n}function bt(e){let t=e.et,n=t===null?e.fe:t.ae;if(n!==null){do n=yt(n);while(n!==null);t===null?e.fe=null:t.ae=null}}function xt(e){let t=e.fe;if(t){do t=yt(t);while(t!==null);e.fe=null,e.et=null}}function St(e){M(e,A(e)),xt(e),ot(e,!0)}var Ct=new Set;function wt(){if(Ct.size!==0){for(let e of Ct)!e.u&&e.T&32&&!(e.S&1)&&!(e.ie&96)&&St(e);Ct.clear()}}function Tt(e,t,n=!1){let r=t.et;if(r!==null&&r.Se===e){r.je&&=n;return}let i=null,a=t.ie&4;if(a&&(i=r===null?t.fe:r.ae,i!==null&&i.Se===e)){i.yt=t.tt,t.et=i,i.je=n;return}let o=e.dt;if(o!==null&&o.Ie===t&&(!a||o.yt===t.tt)){a?o.je&&=n:o.je=n;return}let s=t.et=e.dt={Se:e,Ie:t,ae:i,en:o,Te:null,yt:t.tt,je:n};r===null?t.fe=s:r.ae=s,o===null?e.u=s:o.Te=s,Pe()}function Et(e,t){return!e.o?.le?.has(t)&&((H(e).le??=new Set).add(t),!0)}function Dt(e,t){let n=e.o?.le;return n?.delete(t)?(n.size||(e.o.le=void 0),!0):!1}function Ot(e){e.o!==null&&(e.o.le=void 0)}function kt(e,t){for(let n=e.fe;n;n=n.ae){let e=n.Se.ce||n.Se;if(e===t||e.o?.le?.has(t))return!0}return!1}function At(e,t){H(e).de=!0,t.source&&Et(e,t.source),e.S&2||jt(e,t.source,t)}function jt(t,n,r){if(!n){t.o!==null&&(t.o._=null);return}if(r instanceof e&&r.source===n){H(t)._=r;return}let i=t.o?._;(!(i instanceof e)||i.source!==n)&&(H(t)._=new e(n))}function Mt(e,t){for(let n=e.u;n!==null;n=n.Te)t(n.Ie,n);for(let n=e.o?.i??null;n!==null;n=n.Ee)for(let e=n.u;e!==null;e=e.Te)t(e.Ie,e)}function Nt(e){e.oe&&e.T&32&&!e.u&&!(e.ie&32)&&!(e.S&1)&&St(e)}function Pt(e){let t,n=new Set,r=e=>{n.has(e)||(n.add(e),!e.u&&e.T&32&&(t??=[]).push(e),Mt(e,r))};if(Mt(e,r),t)for(let e of t)Nt(e)}function Ft(e,t){let n=!1,r=new Set,i=e=>{r.has(e)||(r.add(e),e.o?._===t&&(j(e),n=!0),Mt(e,i))};Mt(e,i),n&&w()}function It(e,t=e){Dt(e,t);let n=!1,r,i=new Set,a=T.Ne,o=s=>{if(i.has(s)||t!==e&&kt(s,t)||!Dt(s,t))return;i.add(s),s._e=S;let c=s.o?.le?.values().next().value,l=s.S&2;c?(l||jt(s,c),a?.(s)):(s.S&=-2,l||jt(s),a?.(s),s.o?.de&&(j(s),n=!0),s.o!==null&&(s.o.de=!1),!s.u&&s.T&32&&(r??=[]).push(s)),Mt(s,o)};if(Mt(e,o),r)for(let e of r)Nt(e);n&&w()}function Lt(e){return typeof e==`object`&&!!e&&typeof e.then==`function`}function Rt(e){let t=e.o?.De;t!=null&&(e.o.De=null,t())}function zt(t,n,r){let i=!1,a=!1;if(typeof n==`object`&&n&&W(()=>{i=n[Symbol.asyncIterator],a=!i&&Lt(n)}),!a&&!i)return t.o!==null&&(t.o.Pe=null),t.Ae=!1,n;H(t).Pe=n;let o=Fe,s,c=()=>{let e=le(t);if(t.o?.Oe&&(e=Ye(t)??e),e&&t.S&4&&!k(e).Re.has(t)){t.ge=null;return}E.initTransition(e)},l=r=>{if(t.o?.Pe!==n)return;let i=r instanceof e;if(i&&t.Ae){t.o!==null&&(t.o.Pe=null),At(t,r),t._e=S;return}c(),Vt(t,i?1:2,r),i&&It(t),t._e=S,i||Pt(t)},u=(e,i)=>{if(t.o?.Pe!==n||t.ie&130)return;Ie(o),c();let a=!!(t.S&4),s=t.o?.Ue;bt(t),Bt(t),s&&(t.o.Ue=!0);let u=ce(t);if(u&&u.he.delete(t),r){try{r(e)}catch(e){l(e);return}a&&Bt(t,!0)}else if(t.o?.be!==void 0)t.Ge===h&&je(t),t.Ge=e,T.pe?.(t,e),ue(t)?T.ye(t,e):Le(t),t._e=S;else if(u){let n=t.Ce,r=t.me,i=t.ve;try{(!n&&a||!i||!i(e,r))&&(t.me=e,t._e=S,T.pe?.(t,e),Le(t,!0))}catch(e){Vt(t,2,e)}}else try{K(t,()=>e)}catch(e){Vt(t,2,e)}t.Ge===h&&(t.Ae=!1,s&&(t.o.Ue=!1)),It(t),w(),O(),i?.()},d=()=>t.T&32&&!t.u&&!(t.S&1)?(St(t),!0):!1,f=(e,r)=>{let i=e[Symbol.asyncIterator](),a=!1,o=!1,c=!r,f=()=>{if(!o){o=!0;try{let e=i.return?.();Lt(e)&&e.then(void 0,()=>{})}catch{}}};r?r(f):mt(f),H(t).De=f;let p=()=>{d()||m()},m=()=>{let e,r,f=!1,h=!1,g=!0,_=i.next();if((Lt(_)?_:{then:e=>void e(_)}).then(r=>{if(g&&c)e=r,f=!0,r.done&&(o=!0);else if(t.o?.Pe!==n)return;else r.done?(o=!0,a?(w(),O()):u(void 0),d()):(a=!0,u(r.value,p))},e=>{g&&c?(r=e,h=!0):t.o?.Pe===n&&(o=!0,l(e),d())}),g=!1,h){if(o=!0,l(r),c)throw r;return!0}return f&&!e.done?(s=e.value,a=!0,m()):f&&e.done},h=m();return c=!1,a||h},p=null,m=(e,t)=>{let n=!1;if(typeof e==`object`&&e&&W(()=>{n=e[Symbol.asyncIterator]}),!n)return!1;let r=f(e,t);return t||(p=r),!0};if(a){let r=!1,i=!1,a,o=!0,c=e=>{t.we?Array.isArray(t.we)?t.we.push(e):t.we=[t.we,e]:t.we=e};if(n.then(e=>{o?(s=e,r=!0):t.o?.Pe===n&&!(t.ie&64)&&m(e,c)||(u(e),d())},e=>{o?(a=e,i=!0):(l(e),d())}),o=!1,i)throw l(a),a;if(r)m(s)||(t.Ae=!1);else{if(t.Ae)return t.me;throw E.initTransition(le(t)),new e(L)}}if(i&&m(n),p!==null){if(!p){if(t.Ae)return t.me;throw E.initTransition(le(t)),new e(L)}t.Ae=!1}return s}function Bt(e,t=!1){e.o?.le&&Ot(e),e.o?.de&&e.o!==null&&(e.o.de=!1),e.o!==null&&(e.o.Ue=!1),e.S=t?0:e.S&4,e.o?._&&jt(e),(e.o?.Le||e.o?.Qe)&&T.Ne(e),e.o?.i&&e.T&2048&&T.ke!==null&&T.ke(e);let n=rn(e);n&&n.call(e)}function Vt(n,r,i,a,o){r===2&&!(i instanceof t)&&!(i instanceof e)&&(i=new t(n,i));let s=r===1&&i instanceof e?i.source:void 0,c=s===n,l=r===1&&n.o?.be!==void 0&&!c,u=l&&ue(n);a||(r===1&&s?(Et(n,s),n.S&1||(n.T&=~m),n.S=1|n.S&4,jt(n,s,i)):(Ot(n),n.S=r|(r===2?0:n.S&4),H(n)._=i),T.Ne?.(n),n.o?.i&&n.T&2048&&T.ke!==null&&T.ke(n)),o&&!a&&de(n,o);let d=a||u,f=a||l?void 0:o,p=rn(n);if(p){if(a&&r===1)return;d?p.call(n,r,i):p.call(n);return}Mt(n,(t,n)=>{if(t._e=S,r===1&&s&&!t.o?.le?.has(s)||r!==1&&(t.o?._!==i||t.o?.le)){if(n.je&&r!==1&&!(i instanceof e)){j(t),w();return}!d&&!t.ge&&je(t),Vt(t,r,i,d,f)}})}T.Fe=e=>{e.Ce===3?(M(e,A(e)),e.He=!0,e.C.enqueue(2,e.Ve)):B(e)},T.We=ot;var P=!1;function Ht(e){Gt=e}function Ut(e){I=e}function Wt(e){L=e}var F=!1,Gt=!1,I=!1,L=null,R=null,z=!1,Kt=null;function qt(e){for(;e;){if(e.Me)return!0;e=e.qe}return!1}function Jt(e){z=e,e&&!Kt&&(Kt=new Set)}function Yt(e){e.Me=!0}function Xt(e){e.Me=!1,Zt(e),w()}function Zt(e){let t=e.Ye;for(;t;){if(t.Me){t=t.Ze;continue}if(t.oe){let e=t;e.T&=-9,e.ie&256&&(e.ie&=-257,e.ie|=2,x.Ke>e.Be&&(x.Ke=e.Be),Qe(e,x))}Zt(t),t=t.Ze}}function Qt(){if(Kt){for(let e of Kt)delete e.o?.ze,e.sp!==void 0&&(e.sp=void 0);Kt=null}z=!1}function B(t,n=!1){Pe();let r=t.Ce;if(!n){if(t.ge&&(!r||C)&&C!==t.ge&&E.initTransition(t.ge),M(t,A(t)),t.o!==null&&(t.o.Pe=null,Rt(t)),t.ge||r===3)ot(t);else if(t.Ye!==null||t.we!==null){at(t);let e=H(t);e.Je=t.we,e.Xe=t.Ye,t.we=null,t.Ye=null,t.$e=0}}let i=!!(t.ie&128),a=!!(t.T&128)&&t.o?.be!==h&&t.o?.be!==void 0,c=!!(t.S&4),l=t.S&2?t.o?._:void 0,u=t.S&1?t.o?.le:void 0,d=t.o?.le?.has(t),f=(t.ie&o)!==0,p=t.Ae,m=L;L=t,t.et=null,t.tt++,t.ie=4,t._e=S;let g=t.Ge===h?t.me:t.Ge,ee=t.Be,te=!1,ne=P,re=R;P=!0;let y=I;if(I=!1,i){let e=T.nt(t,!0);e?R=e:e===!1&&(i=!1)}else if(C&&!n&&C.it.length){let e=T.nt(t,!1);e&&(i=!0,R=e)}let ie=r&&r!==2,ae=F;ie&&(F=!0),r&&C!==null&&C.lt.size&&C.lt.delete(t);try{if(t.T&64)g=t.oe(g),t.o!==null&&(t.o.Pe=null),t.Ae=!1;else{let e=t.o?.Pe,n=t.oe(g),r=typeof n==`object`&&!!n,i=t.o?.Pe!==e;g=i||!r?n:zt(t,n),!i&&!r&&(t.o!==null&&(t.o.Pe=null),t.Ae=!1)}(t.S!==0||t.o!==null)&&Bt(t,n),t.T&1024&&t.o?.Oe&&T.ut(t)}catch(n){let r=n instanceof e;if(r&&t.Ae)At(t,n);else{r&&R&&T.ot(t);let e=!1;r&&(H(t).de=!0,T.st!==null&&(e=T.st(t,f))),Vt(t,r?1:2,n,void 0,r?t.o?.Oe:void 0),r&&d&&!t.o?.Pe&&It(t),e&&T.k(t)}}finally{P=ne,I=y,ie&&(F=ae),te=(t.ie&s)!==0,t.ie=0|(n?t.ie&256:0),L=m}if(!t.o?._){bt(t);let e=a?v(t.o?.be):i||t.Ge===h?t.me:t.Ge,o=!1;try{o=!r&&c||!t.ve||!t.ve(e,g)}catch(e){Vt(t,2,e)}if(r&&o&&(t.He=!t.o?._,!n)){t.C.enqueue(r,t.rt??=T.ct.bind(null,t));let e=t._t;e!==C&&(t._t=C,e!==null&&(e=k(e))!==C&&!e.ft&&((e.Et??=[]).push(t),C!==null&&(C.Et??=[]).push(t)))}if(!t.o?._){if(o){let e=a?t.o?.be:void 0;n||r&&(C!==t.ge||C===null||t.T&32768)||i?(t.me=g,a&&i&&(H(t).be=g===void 0?_:g,t.Ge=h)):(t.Ge=g,p&&(t.Ae=!0),(C||t.ge)&&T.pe!==null&&T.pe(t,g)),t.u!==null&&(!a||i||t.o?.be!==e)?Le(t,i||a):a&&!i&&t.o.It!==S&&T.ye(t,g)}else if(a)t.Ge===h&&je(t),t.Ge=g,p&&(t.Ae=!0),T.ye(t,g);else if(t.Be!=ee)for(let e=t.u;e!==null;e=e.Te)$e(e.Ie,A(e.Ie))}if(!o&&!t.o?._&&(l!==void 0&&Ft(t,l),u))for(let e of u)e!==t&&It(t,e);d&&!(t.S&5)&&It(t)}R=re,(t.Ge!==h||t.o!==null&&(t.o.Xe!==null||t.o.Je!==null)||t.S&5)&&(!n||t.S&1)&&(!t.ge||a)&&je(t),t.ge&&r&&C!==t.ge&&Xe(t.ge,()=>B(t)),te&&(j(t),w())}function $t(e){if(!(e.ie&68)){if(e.ie&1)for(let t=e.fe;t;t=t.ae){let n=t.Se,r=n.ce||n;if(r.oe&&$t(r),e.ie&2)break}(e.ie&130||e.o?._&&e._e=n.Ke?(tt(t),et(n),$t(i)):t.T&65536&&$t(i);let r=i.Be;r>=t.Be&&e.qe!==t&&(t.Be=r+1)}if(i.S&1){if(t&&(!F||i.S&4||i.T&2097152||i.T&1024&&T.Mt(i)||!pn(i,t))){if(R===null||T.qt(i))throw!P&&e!==t&&Tt(e,t),i.o?._}else if(!t&&i.S&4)throw i.o?._}if(i.oe&&i.S&2){if(P&&!Gt&&i._e{let t=e.Ht;e.Ht=void 0,t?.()}):console.error(t)}catch(t){if(!e.C.notify(e,2,2))throw De(t),t}return}let i=e.Ht;e.Ht=void 0;try{i?.(),e.Ht=e.ht(e.me,e.Ft)}catch(n){if(H(e)._=new t(e,n),e.S|=2,!e.C.notify(e,2,2))throw De(n),n}finally{e.Ft=e.me,e.He=!1}}T.ct=xn;function Sn(e,t){let n=()=>{if(!(!r.He||r.ie&64))try{r.He=!1,B(r)}finally{}},r=V(()=>{let t=r.Ht;r.Ht=void 0,t?.();let n=gn(e);r.Ht=n},{...t,lazy:!0});r.Ht=void 0,r.T=r.T&-33|16,r.He=!0,r.Ce=3,r.Ve=n,j(r),w()}nn(bn);function Cn(e){return mt(e)}function J(e){let t=G.bind(null,e);return t[ne]=e,t}function wn(e,t){if(typeof e==`function`){let n=V(e,t);return n.T&=-33,[J(n),hn.bind(null,n)]}let n=U(e,t);return[J(n),K.bind(null,n)]}function Y(e,t){return J(V(e,t))}function Tn(e,t,n){yn(e,t.effect||t,t.error,{user:!0,...n})}function En(e,t,n){yn(e,t,void 0,n)}function Dn(e,t){Sn(e,t)}function On(e){let t=N();t&&!(t.T&16)?Sn(()=>W(e),void 0):E.enqueue(2,()=>{e()})}var kn=Symbol(0),An=Symbol(0);function jn(e){return Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function Mn(e,t,n){let r=typeof n?.keyed==`function`?n.keyed:void 0,i=t.length>1,a=t,o={ts:_t(),ss:0,es:e,rs:[],ns:a,hs:[],fs:[],xt:r,cs:r||n?.keyed===!1?[]:void 0,ls:i&&n?.keyed!==!1?[]:void 0,us:n?.keyed===!1,ps:n?.fallback},s=V(In.bind(o),void 0);return o.ts.bt=s,s.T&=-33,J(s)}var Nn={ownedWrite:!0};function Pn(e,t,n,r){let i=e.rs,a=e.ss-1,o=[],s=[],c=[],l=256,u=r,d=r,f=!1;for(;u<=a&&d<=n-1;){let e=i[u],r=t[d];if(e===r){f||=(c.push(u,d,0),!0),c[c.length-1]++,u++,d++;continue}f=!1;let p=-1,m=Math.min(32-o.length,a-u,l);for(let e=1;e<=m;e++)if(i[u+e]===r){p=e;break}l-=p===-1?m:p;let h=-1;m=Math.min(32-s.length,n-1-d,l);for(let n=1;n<=m;n++)if(t[d+n]===e){h=n;break}if(l-=h===-1?m:h,p!==-1&&(h===-1||p<=h)){for(;p-->0;)o.push(u++);continue}if(h!==-1){for(;h-->0;)s.push(d++);continue}if(l<=0||o.length===32||s.length===32)return!1;o.push(u++),s.push(d++)}for(;u<=a;u++){if(o.length===32)return!1;o.push(u)}for(;d<=n-1;d++){if(s.length===32)return!1;s.push(d)}return Fn(e,t,n,o,s,c)}function Fn(e,t,n,r,i,a){let o=e.rs,s,c,l;if(i.length!==0)for(l=Array(r.length),c=0;c>6]);for(let t=0;t>6,t=r[i[c]&63];f[e]=u[t],p[e]=d[t]}for(e.hs=f,e.fs=p,e.ss=n,e.rs=t.slice(0),s=0;s{let n,r,i,a,o=this.cs?this.us?()=>(i[r]=U(e[r],Nn),this.ns(J(i[r]),r)):()=>(i[r]=U(e[r],Nn),a&&(a[r]=U(r,Nn)),this.ns(J(i[r]),a?J(a[r]):void 0)):this.ls?()=>{let t=e[r];return a[r]=U(r,Nn),this.ns(t,J(a[r]))}:()=>{let t=e[r];return this.ns(t)};if(t===0)this.ss!==0&&(this.ts.dispose(!1),this.fs=[],this.rs=[],this.hs=[],this.ss=0,this.cs&&=[],this.ls&&=[]),this.ps&&!this.hs[0]&&(this.fs[0]?.dispose(),this.hs[0]=q(this.fs[0]=_t(),this.ps));else if(this.ss===0){let s=Array(t),c=Array(t);i=this.cs&&Array(t),a=this.ls&&Array(t);try{for(r=0;r=s&&l>=s&&(this.rs[c]===e[l]||this.cs&&Ln(this.xt,this.rs[c],e[l]));c--,l--);if(s===t&&this.ss===t){this.rs=e.slice(0);return}if(t<=this.ss&&c-s>64&&this.cs===void 0&&this.ls===void 0){let n=s+(l-s>>1),r=e[n],i=Math.min(c,n+32),a=Math.max(s,n-32);for(;a<=i&&this.rs[a]!==r;)a++;if(a<=i&&Pn(this,e,t,s))return}let g=t-this.ss,_=Array(t),v=Array(t);for(i=this.cs?Array(t):void 0,a=this.ls?Array(t):void 0,f=new Map,p=Array(l+1),r=l;r>=s;r--)u=e[r],d=this.xt?this.xt(u):u,n=f.get(d),p[r]=n===void 0?-1:n,f.set(d,r);for(n=s;n<=c;n++)u=this.rs[n],d=this.xt?this.xt(u):u,r=f.get(d),r!==void 0&&r!==-1?(_[r]=this.hs[n],v[r]=this.fs[n],i&&(i[r]=this.cs[n]),a&&(a[r]=this.ls[n]),r=p[r],f.set(d,r)):(m??=[]).push(this.fs[n]);try{for(r=s;r<=l;r++)v[r]===void 0&&((h??=[]).push(v[r]=_t()),_[r]=q(v[r],o))}catch(e){if(h)for(n=0;n{let i=e===void 0?r.S:e,a=t===void 0?r.o?._:t;r.S&=~r.R;let o=r.C.notify(r,3,i,a),s=i&~r.R&3;if(s&&(r.S&=~s,r.o?._===a&&!(r.S&3)&&r.o!==null&&(r.o._=void 0)),!o&&i&2)throw De(n(a)),a},r.R=t,r.T&=-33,B(r,!0),r}function zn(e,t,n,r){let i=e.C;return i.addChild(e.C=n),mt(()=>i.removeChild(e.C)),q(e,()=>{let e=V(t);return Rn(()=>Gn(G(e)),r)})}var Bn=Symbol(),Vn=class extends Ae{ee;v=new Set;te;U=!0;D=U(!1,{ownedWrite:!0,H:!0});_;P=U(!1,{ownedWrite:!0,H:!0});W;L=!1;re;ne=Bn;constructor(e){super(),this.ee=e}run(e){if(e&&!G(this.D))return super.run(e)}notify(e,t,r,i){if(!(t&this.ee))return super.notify(e,t,r,i);if(this.L&&this.re){let e=W(()=>{try{return this.re()}catch{return Bn}});e!==this.ne&&(this.ne=e,this.L=!1,this.v.clear())}if(this.ee&1&&this.L)return super.notify(e,t,r,i);if(r&this.ee){this.U=!0;let t=i?.source||e.o?._?.source;if(t){let e=this.v.size===0;this.v.add(t),e&&K(this.D,!0),this.ee&2&&K(this._,n(t.o?._))}}return t&=~this.ee,!t||super.notify(e,t,r,i)}se(){for(let e of this.v)(e.ie&64||!e.o?.t&&!(e.S&this.ee)&&!(this.ee&2&&e.S&1))&&this.v.delete(e);if(!this.v.size&&(this.U=this.ee&1&&this.U&&!this.L&&this.te?!!(this.te.S&this.ee):!1,!this.U&&(K(this.D,!1),this.re)))try{this.ne=W(()=>this.re())}catch{}}};function Hn(t,n,r,i){let a=_t(),o=new Vn(t);t===2&&(o._=U(void 0,{ownedWrite:!0,H:!0})),i&&(o.re=i);let s=o.te=zn(a,n,o,t);return W(()=>{let n=!1;try{G(s)}catch(t){if(t instanceof e)n=!0;else throw t}o.U=n||!!(s.S&t)||s.o?._ instanceof e}),J(V(()=>{if(!G(o.D)){let e=G(s);if(!W(()=>G(o.D)))return o.L=!0,e}return r(o)},{H:!0}))}function Un(e,t,n){return Hn(1,e,()=>t(),n?.on)}function Wn(e,t){return Hn(2,e,e=>t(J(e._),()=>{for(let t of e.v)t.oe!==void 0&&B(t);w()}))}function Gn(e,t){if(typeof e==`function`&&!e.length){if(t?.doNotUnwrap)return e;do e=e();while(typeof e==`function`&&!e.length)}if(!t?.skipNonRendered||e!=null&&e!==!0&&e!==!1&&e!==``){if(Array.isArray(e)){let n=[];return Kn(e,n,t)?()=>{let e=[];return Kn(n,e,{...t,doNotUnwrap:!1}),e}:n}return e}}function Kn(t,n=[],r){let i=null,a=!1;for(let o=0;o=0;t--){let r=Yn(n[t]);if(e in r)return r[e]}},has(e){for(let t=n.length-1;t>=0;t--)if(e in Yn(n[t]))return!0;return!1},keys(){let e=new Set;for(let t=0;t=0;e--){let t=n[e];if(!t){e===a&&a--;continue}let o=Object.getOwnPropertyNames(t);for(let n=o.length-1;n>=0;n--){let s=o[n];if(s!==`__proto__`&&s!==`constructor`&&!r[s]){i||=e!==a;let n=Object.getOwnPropertyDescriptor(t,s);r[s]=n.get?{enumerable:!0,configurable:!0,get:n.get.bind(t)}:n}}}if(!i)return n[a];let o={},s=Object.keys(r);for(let e=s.length-1;e>=0;e--){let t=s[e],n=r[t];n.get?Object.defineProperty(o,t,n):o[t]=n.value}return o[Xn]=n,o}function $n(e,...t){if(ee&&An in e)return new Proxy({get(n){return n===Xn||t.includes(n)?void 0:e[n]},has(n){return n!==Xn&&!t.includes(n)&&n in e},keys(){return jn(e).filter(e=>!t.includes(e))}},Jn);let n={},r=Object.getOwnPropertyNames(e),i=t.length>4&&r.length>t.length?new Set(t):void 0;for(let a of r)if(i?!i.has(a):!t.includes(a)){let t=Object.getOwnPropertyDescriptor(e,a);!t.get&&!t.set&&t.enumerable&&t.writable&&t.configurable?n[a]=t.value:Object.defineProperty(n,a,t)}return n}var er=!1;function tr(e,t){let n=Symbol(t&&t.name||``);function r(e){return vt(()=>(vn(r,e.value),rr(()=>e.children)))}return r.id=n,r.defaultValue=e,r}function nr(e){return _n(e)}function rr(e){let t=Y(e,{lazy:!0}),n=Y(()=>Gn(t()),{lazy:!0,sync:!0});return n.toArray=()=>{let e=n();return Array.isArray(e)?e:e==null?[]:[e]},n}var ir={id:Symbol(`NoHydrateContext`),defaultValue:!1},X={hydrating:!1,registry:void 0,done:!1};function ar(){let e=N();if(!e)throw Error(`getNextContextId cannot be used under non-hydrating context`);if(!_n(ir))return lt(e)}var or=null,sr=0,cr=!1,lr=null;function ur(){if(lr)return;let e=N();if(e){for(;e._parent;)e=e._parent;Yt(e),lr=e}}function dr(){return!cr&&(X.hydrating||sr>0)}function fr(e){if(cr||!X.hydrating&&sr===0){queueMicrotask(e);return}or||=[],or.push(e)}function pr(){if(cr)return;cr=!0,gr=!0,Qt(),Jt(!1),O();let e=or;if(or=null,e)for(let t of e)t();setTimeout(()=>{globalThis._$HY&&(globalThis._$HY.done=!0),X.registry?.clear()})}function mr(){!hr&&sr===0&&pr()}var hr=!1,gr=!1,_r,vr,yr,br,xr,Sr,Cr,wr=(()=>{class e{catch(){return new e}then(){return new e}finally(){return new e}}for(let t of[`all`,`allSettled`,`any`,`race`,`reject`,`resolve`])e[t]=()=>new e;return e})();function Tr(e,t){let n=fetch,r=Promise;try{window.fetch=()=>new wr,Promise=wr;let n=e(t);return n&&typeof n[Symbol.asyncIterator]==`function`&&n[Symbol.asyncIterator]().next(),n&&typeof n.then==`function`&&n.then(void 0,()=>{}),n}finally{window.fetch=n,Promise=r}}function Er(e){return{then(t){t(e)}}}function Dr(e,t,n){if(t(),typeof e==`object`&&e){if(Pr(n)&&typeof e.then==`function`)return{then:e.then.bind(e)};if(e.s===2)throw typeof e.then==`function`&&e.then(void 0,()=>{}),e.v;if(e.s===1)return e.v}return e}var Or=new WeakSet;function kr(e,t,n){let r=N();return X.done||!X.has(r.id)?e(t):(Or.has(r)?n?.ssrSource!==`hybrid`&&Nr():Or.add(r),Dr(X.load(r.id),()=>{let r=Tr(e,t);return n?.ssrSource!==`hybrid`&&r!=null&&r[jr]&&Nr(),r},n))}var Ar={then(){}},jr=Symbol.for(`solid.LiveSource`),Mr;function Nr(){if(!Mr){let[e,t]=wn(!1);Mr=e,fr(()=>{Mr=void 0,t(!0)})}Mr()}function Pr(e){return typeof e==`object`&&!!e&&(`loadingValue`in e||e.seedLoadingValue===!0)}function Fr(e,t){let n=e.return?.(t);return n&&typeof n.then==`function`?n:Er(n??{done:!0,value:t})}function Ir(e,t){let n=!0,r=null;return{next(){if(n){n=!1;let r=e.next();return r&&typeof r.then==`function`?r:t?Promise.resolve(r):Er(r)}if(r){let e=r;return r=null,e}let i=e.next();if(i&&typeof i.then==`function`)return i;let a=i;for(;!i.done;){let t=e.next();if(t&&typeof t.then==`function`){r=t;break}i=t,i.done?a!==i&&(r=Promise.resolve(i)):a=i}return Promise.resolve(a)},return(t){return r=null,Fr(e,t)}}}function Lr(e){return e!=null&&typeof e[Symbol.asyncIterator]==`function`}function Rr(e,t,n){let r=dt(N());if(!X.has(r))return null;let i=X.load(r);if(!Lr(i))return null;let a=Ir(i[Symbol.asyncIterator](),Pr(n)),o=!1,s={next(){let e=a.next();return{then(t,n){return e.then(e=>(e.done&&(o=!0),t(e)),e=>{if(o=!0,n)return n(e);throw e})}}},return(e){return a.return(e)}},c={[Symbol.asyncIterator](){return s}};return e(e=>o?t(e):(Tr(t,e),c),n)}function zr(e){let[t,n]=wn(!1,{ownedWrite:!0}),r=e(t);return n(!0),r}function Br(e,t,n){ur();let r=n?.ssrSource;if(r===`client`)return zr(r=>e(e=>r()?t(e):Ar,n));if(r===`hybrid`&&X.has(dt(N()))){let r=!1,i=e=>{let n=t(e);return r=Lr(n),n};return zr(a=>e(e=>a()&&r?t(e):kr(i,e,n),n))}let i=Rr(e,t,n);return i===null?e(e=>kr(t,e,n),n):i}function Vr(e,t){return!X.hydrating||t?.transparent?Y(e,t):Br(Y,e,t)}function Hr(e,t){return typeof e!=`function`||!X.hydrating?wn(e,t):Br(wn,e,t)}function Ur(e,t){if(!X.hydrating)return Wn(e,t);ur();let n=dt(N());if(X.has(n)){let r=X.load(n);if(r!==void 0){let n=!0;return Wn(()=>{if(n)throw n=!1,r;return e()},t)}}return Wn(e,t)}function Wr(e,t,n,r){if(!X.hydrating||r?.transparent)return e(t,n,r);if(r?.ssrSource===`client`){let i=!1;zr(a=>e(e=>a()?(i=!0,t(e)):e,(e,t)=>{if(i)return n(e,t)},r));return}ur(),e(e=>kr(t,e),n,r)}function Gr(e,t,n){return Wr(En,e,t,n)}function Kr(e,t,n){return Wr(Tn,e,t,n)}function qr(e,t,n){let r=N(),i=r&&r.id!=null?dt(r):void 0,a=i==null?void 0:globalThis._$HY?.modules?.[i];if(a){let e=n?a[n]:a.default;return()=>e}if(!e&&t)throw Error(`lazy() module "${t}" (hydration id "${i}") was not preloaded before hydration.`);return e}function Jr(){_r=Vr,vr=Hr,yr=Ur,br=Gr,xr=Kr,Sr=wi,Cr=qr,X.getNextContextId=ar,X.isHydrationInProgress=dr,X.onHydrationEnd=fr;let e=globalThis._$HY;if(e&&!e.fr){e.f||=ci,e.fr={pending:mi,subscribe:hi,claim:ui,release:di};let t=e.fe;e.fe=(e,n)=>{t&&t(e,n);for(let t of ai)t(e,n)},gi(e)}hr=X.hydrating,gr=X.done,Object.defineProperty(X,"hydrating",{get(){return hr},set(e){let t=hr;hr=e,!t&&e?(cr=!1,gr=!1,Jt(!0),lr=null):t&&!e&&(lr&&=(Xt(lr),null),mr())},configurable:!0,enumerable:!0}),Object.defineProperty(X,"done",{get(){return gr},set(e){gr=e,e&&pr()},configurable:!0,enumerable:!0})}var Yr=(...e)=>(_r||Y)(...e),Xr=(...e)=>(vr||wn)(...e),Zr=(...e)=>(yr||Wn)(...e),Qr=(...e)=>(br||En)(...e),$r=(...e)=>(xr||Tn)(...e);function ei(){Jt(!1);let[e,t]=wn(void 0,{equals:!1});return e(),Jt(!0),t}function ti(e,t,n,r,i=!0){let a=X.boundaryScopes?.get(t);if(!r())return;if(ht(e)){mr();return}let o=X.registry,s=X.gather;a&&(X.registry=a.registry,X.gather=a.gather);try{i&&X.gather?.(t),hr=i,i&&(Yt(e),lr=e),n(),O(),i&&(lr=null),hr=!1,i&&Xt(e),O()}finally{a&&(X.registry=o,X.gather=s)}mr()}function ni(e,t){sr++,X.captureBoundaryScope?.(t);let n=!1,r=()=>{if(n)return!1;n=!0,sr--,X.boundaryScopes?.delete(t);let e=ri.get(t);return e&&(e.claimed=!1),!0};Cn(()=>{ht(e)&&(X.cleanupFragment?.(t),r()&&mr())});let i=ei();return[i,n=>ti(e,t,i,r,n),r]}var ri=new Map,ii=new Set,ai=new Set,oi=new Map;function si(e){let t=ri.get(e);return t||ri.set(e,t={}),t}function ci(e){let t=si(e);return!cr||t.claimed?globalThis.$dfr(e):(t.held=!0,0)}function li(e){let t=ri.get(e);t&&t.held&&(t.held=!1,globalThis.$dfr(e))}function ui(e){si(e).claimed=!0,li(e)}function di(e){let t=ri.get(e);t&&(t.claimed=!1)}function fi(e,t){if(ii.has(t))return!1;let n=e.r[t+`_fr`];return!n||typeof n!=`object`?!1:n.s?e.v&&e.v[t]||!document.getElementById(t)?!1:!!document.getElementById(`pl-`+t):!0}function pi(e){let t=globalThis._$HY;return t&&t.v&&t.v[e]||document.getElementById(e)?!1:!!document.getElementById(`pl-`+e)}function mi(){let e=globalThis._$HY;if(!e||!e.r)return!1;for(let t in e.r)if(t.length>3&&t.endsWith(`_fr`)&&fi(e,t.slice(0,-3)))return!0;return!1}function hi(e){return ai.add(e),()=>ai.delete(e)}function gi(e){typeof document>`u`||document.readyState!==`loading`||document.addEventListener(`DOMContentLoaded`,()=>{if(e.r){for(let t in e.r){if(t.length<=3||!t.endsWith(`_fr`))continue;let n=e.r[t];n&&typeof n==`object`&&!n.s&&vi(e,t.slice(0,-3))}setTimeout(()=>_i(e))}},{once:!0})}function _i(e){let t=globalThis.$R;if(!t||typeof t!=`object`)return;let n,r=t=>{if(!t||typeof t!=`object`||typeof t.f!=`function`||!t.p||typeof t.p.then!=`function`||t.p.s)return;if(!n){n=new Map;for(let t in e.r)n.set(e.r[t],t)}let r=n.get(t.p);if(r!==void 0){delete e.r[r];return}let i=Error(`Hydration value was truncated: the stream ended before it settled.`);t.f(i),t.p.s=2,t.p.v=i,t.p.then(void 0,()=>{})};for(let e in t){let n=t[e];if(Array.isArray(n))for(let e of n)r(e);else r(n)}}function vi(e,t){if(ii.has(t))return;ii.add(t);let n=Error(`Hydration fragment "${t}" was truncated: the stream ended before its content arrived.`),r=e.r[t+`_fr`];r&&typeof r==`object`&&(r.s=2,r.v=n);let i=oi.get(t);i&&(oi.delete(t),i(n));for(let e of ai)e(t)}function yi(e){return new Promise((t,n)=>oi.set(e,n))}function bi(e,t,n,r=!0,i){let a=(i?Promise.race([Promise.resolve(e),i]):Promise.resolve(e)).then(()=>(e&&typeof e==`object`&&(e.s=1),!0),t=>(e&&typeof e==`object`&&(e.s=2,e.v=t),r));if(!n){a.then(e=>t(e));return}let o=n.then(()=>!0,e=>(xi(e),!1));Promise.all([a,o]).then(([e,n])=>t(n?e:!1))}function xi(e){console.error(`Hydration module preload failed; rendering boundary content on the client:`,e)}function Si(e,t,n){X.gather?.(e);let r=()=>queueMicrotask(t);return n?(n.then(r,e=>{xi(e),queueMicrotask(()=>t(!1))}),!0):(r(),!1)}var Ci=(e,t,n)=>(Sr||Un)(e,t,n);function wi(e,t,n){if(!X.hydrating)return Un(e,t,n);let r=!1;return Y(()=>{let i=N(),a=i.id,o;if(X.hydrating&&X.has(a+`_assets`)){let e=X.load(a+`_assets`);e&&typeof e==`object`&&(o=X.loadModuleAssets?.(e))}if(X.hydrating&&X.has(a)){let s=X.load(a),c;if(s&&(typeof s!=`object`||s.s==null?c=s:s.s===1||s.s===2?X.gather?.(a):c=s),s&&typeof s==`object`&&s.s===1&&c==null&&!r){if(o){r=!0;let[,e]=ni(i,a);Si(a,e,o);return}return Un(e,t,n)}if(c){let[e,n,r]=ni(i,a);if(c!==`$$f`)bi(c,n,o);else{let t=()=>{r()&&(e(),mr())};o?o.then(()=>queueMicrotask(t),e=>{xi(e),queueMicrotask(t)}):queueMicrotask(t)}return t()}}if(X.hydrating&&X.has(a+`_fr`)&&!r){let s=X.load(a+`_fr`);if(li(a),s&&typeof s==`object`&&s.s===1&&!o&&!pi(a))return X.gather?.(a),Un(e,t,n);r=!0;let[,c]=ni(i,a);if(s&&typeof s==`object`&&s.s===1&&pi(a)){let e=()=>c(!1);return o?o.then(()=>queueMicrotask(e),t=>{xi(t),queueMicrotask(e)}):queueMicrotask(e),t()}if(s&&typeof s==`object`&&(s.s===1||s.s===2)){if(s.s===2){s.catch?.(()=>{});let e=()=>c(!1);o?o.then(()=>queueMicrotask(e),t=>{xi(t),queueMicrotask(e)}):queueMicrotask(e);return}Si(a,c,o);return}return ui(a),bi(s,c,o,!1,yi(a)),t()}if(o&&!X.has(a)){let[,e]=ni(i,a);o.then(()=>e(),t=>{xi(t),e(!1)});return}return Un(e,t,n)})}function Ti(e,t,n){return W(()=>e(t||{}))}function Ei(e,t,n){let r=t?.export,i,a,o=()=>{if(a)return a;let t=a=e();return t.then(e=>{i=()=>r?e[r]:e.default},()=>{a===t&&(a=void 0)}),t},s=e=>{X.hydrating&&(i=Cr(i,n,r));let t=i;t||=(o(),Y(()=>o().then(e=>r?e[r]:e.default)));let a;return Y(()=>(a=(i||t)())?W(()=>a(e)):``,{sync:!0})};return s.preload=o,s.moduleUrl=n,s}var Di=0;function Oi(){return X.hydrating?X.getNextContextId():`cl-${Di++}`}var ki=e=>`Stale read from <${e}>.`;function Ai(e){let t=`fallback`in e?{keyed:e.keyed,fallback:()=>e.fallback}:{keyed:e.keyed},n=N(),r,i=()=>q(n,()=>Mn(()=>e.each,e.children,t));return X.hydrating&&(r=i()),()=>(r??=i())()}function ji(e){let t=e.keyed,n=Y(()=>e.when,void 0),r=t?n:Y(n,{equals:(e,t)=>!e==!t,sync:!0});return Y(()=>{let i=r();if(i){let a=e.children;return typeof a==`function`&&a.length>0?W(t?()=>a(i):()=>a(()=>{if(!W(r))throw ki(`Show`);return n()}),er):a}return e.fallback},{sync:!0})}function Mi(e){let t=rr(()=>e.children),n=Y(()=>{let e=t.toArray(),n=()=>void 0;for(let t=0;ta()?void 0:i.when,void 0),s=i.keyed?o:Y(o,{equals:(e,t)=>!e==!t,sync:!0});n=()=>{let e=a();if(e)return e;let t=s();return t?[r,t,o,i]:void 0}}return n},{sync:!0});return Y(()=>{let t=n()();if(!t)return e.fallback;let[r,i,a,o]=t,s=o.children;return typeof s==`function`&&s.length>0?o.keyed?W(()=>s(i),er):W(()=>s(()=>{if(W(n)()?.[0]!==r)throw ki(`Match`);return a()}),er):s},{sync:!0})}function Ni(e){return e}function Pi(e){return Zr(()=>e.children,(t,n)=>{let r=e.fallback;return typeof r==`function`&&r.length?r(t,n):r})}function Fi(e){return Ci(()=>e.children,()=>e.fallback,`on`in e?{on:()=>e.on}:void 0)}var Ii=`modulepreload`,Li=function(e){return`/solid-validation/`+e},Ri={},zi=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Li(t,n),t=s(t),t in Ri)return;Ri[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ii,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Bi={INPUT:{value:1,defaultValue:2,checked:1,defaultChecked:2},SELECT:{value:1},OPTION:{value:1,selected:1,defaultSelected:2},TEXTAREA:{value:1,defaultValue:2},VIDEO:{muted:1,defaultMuted:2},AUDIO:{muted:1,defaultMuted:2}},Vi=new Set([`innerHTML`,`textContent`,`innerText`,`children`]),Z=Symbol(`slot`),Hi=Symbol(`host`),Ui=new Set([`beforeinput`,`click`,`dblclick`,`contextmenu`,`focusin`,`focusout`,`input`,`keydown`,`keyup`,`mousedown`,`mousemove`,`mouseout`,`mouseover`,`mouseup`,`pointerdown`,`pointermove`,`pointerout`,`pointerover`,`pointerup`,`touchend`,`touchmove`,`touchstart`]),Wi=new Set(`altGlyph.altGlyphDef.altGlyphItem.animate.animateColor.animateMotion.animateTransform.circle.clipPath.color-profile.cursor.defs.desc.ellipse.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feDistantLight.feDropShadow.feFlood.feFuncA.feFuncB.feFuncG.feFuncR.feGaussianBlur.feImage.feMerge.feMergeNode.feMorphology.feOffset.fePointLight.feSpecularLighting.feSpotLight.feTile.feTurbulence.filter.font.font-face.font-face-format.font-face-name.font-face-src.font-face-uri.foreignObject.g.glyph.glyphRef.hkern.image.line.linearGradient.marker.mask.metadata.missing-glyph.mpath.path.pattern.polygon.polyline.radialGradient.rect.set.stop.svg.switch.symbol.text.textPath.tref.tspan.use.view.vkern`.split(`.`)),Gi=new Set(`annotation.annotation-xml.maction.math.menclose.merror.mfenced.mfrac.mi.mmultiscripts.mn.mo.mover.mpadded.mphantom.mprescripts.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msubsup.msup.mtable.mtd.mtext.mtr.munder.munderover.semantics`.split(`.`)),Ki={svg:`http://www.w3.org/2000/svg`,mathml:`http://www.w3.org/1998/Math/MathML`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`},qi={transparent:!0,sync:!0},Ji={sync:!0};function Yi(e,t,n){Qr(e,t,n?{sync:!0,...n,transparent:!n.scope}:qi)}function Xi(e){return Yr(()=>e(),Ji)}function Zi(e,t,n,r){let i=n.length,a=t.length,o=i,s=0,c=0,l=t[a-1],u=l[Z],d=l.parentNode===e&&(!u||u===r)?l.nextSibling:r||null,f=null,p,m,h=t=>{if(!t)return!1;let n=t[Z];return t.parentNode===e&&(!n||n===r)};for(;s=a-1||c>=o)break}while(t[s]===n[o-1]&&n[c]===t[a-1]);else do if(e.insertBefore(t[--a],p),c++,s>=a-1||c>=o)break;while(t[s]===n[o-1]&&n[c]===t[a-1])}else{if(!f){f=new Map;let e=c;for(;ei-c){let a=t[s],o=a[Z],l=a.parentNode===e&&(!o||o===r)?a:d;for(;cString.fromCharCode(e.charCodeAt(0)+32))}function ca(e,t){let n=String(t.href||t.src||``),r=`res:`+e+`:`+(t.rel||``)+`:`+n.length+`:`+n;for(let e=0;ee.seq-t.seq);for(let e=0;e{let t=ba.get(e);t||(q(null,()=>{t=Yr(()=>e)}),ba.set(e,t)),t()},Sa=`_$SOLID_EVENT_OWNER`,Ca=Symbol(),wa=Object.prototype.hasOwnProperty,Ta={},Ea=new Set,Da=new Map;function Oa(){}function ka(e){return null}var Aa=Oa;function ja(e,t,n,r={}){let i;Fa(t);try{vt(a=>{if(i=a,t===document){let t=e();Yi(()=>Gn(t),()=>{})}else{let i=e();co(t,()=>i,t.firstChild?null:void 0,n,{...r.insertOptions,schedule:!0})}},{id:r.renderId}),O()}catch(e){throw i&&i(),Ia(t),e}return()=>{i(),Ia(t),t.textContent=``}}function Ma(e,t,n){let r=document.createElement(`template`);return r.innerHTML=e,n===2?r.content.firstChild.firstChild:r.content.firstChild}function Na(e,t){let n;return t===1?r=>document.importNode(n||=Ma(e,r,t),!0):r=>(n||=Ma(e,r,t)).cloneNode(!0)}function Pa(e){for(let t=0,n=e.length;tza(n,t,e)))}}function Fa(e){let t=La(e,e);t&&(t.roots=(t.roots||0)+1)}function Ia(e){let t=Da.get(e);t&&(t.roots>1?t.roots--:delete t.roots),Ra(e,e)}function La(e,t=e){if(!e||!t)return;let n=Da.get(e);return n||Da.set(e,n={owners:new Map,handlers:new Map}),n.owners.set(t,(n.owners.get(t)||0)+1),Ea.forEach(t=>za(t,e,n)),n}function Ra(e,t=e){let n=Da.get(e);if(!n)return;let r=n.owners.get(t);r>1?n.owners.set(t,r-1):n.owners.delete(t),!n.owners.size&&(n.handlers.forEach((t,n)=>e.removeEventListener(n,t)),Da.delete(e))}function za(e,t,n){if(n.handlers.has(e))return;let r=e=>Xo(e,t,n);n.handlers.set(e,r),t.addEventListener(e,r)}function Ba(e){for(;e;){if(Da.get(e)?.roots)return e;e=e._$host||e.parentNode||e.host}}function Va(e,t){let n=e,r=0;for(;n;){if(t.owners.has(n))return{owner:n,distance:r};r++,n=n._$host||n.parentNode||n.host}}function Ha(e,t,n){if($(e))return;let r=e.nodeName;t===`value`&&r===`SELECT`?queueMicrotask(()=>e.value=n)||(e.value=n):e[t]=(t===`value`||t===`defaultValue`)&&(r===`INPUT`||r===`TEXTAREA`)?n??``:n}var Ua=null,Wa=Symbol.for(`solid.element-claims`);function Ga(e){return(Ua||=globalThis[Wa]=[]).push(e),()=>{let t=Ua.indexOf(e);t>-1&&Ua.splice(t,1)}}function Ka(e){if(Ua!==null)for(let t=0;t-1?n.split(`:`).pop():n):e.setAttributeNS(t,n,r===!0?``:r))}function Ya(e,t,n){if(typeof t==`number`&&(t=``+t),typeof n==`number`&&(n=``+n),$(e)){e._$classes=t&&typeof t==`object`?qo(t):void 0;return}if(t==null||t===!1){(n||e._$classes)&&(e.removeAttribute(`class`),e._$classes=void 0);return}if(typeof t==`string`){e._$classes=void 0,t!==n&&e.setAttribute(`class`,t);return}let r;typeof n==`string`?(r={},e.removeAttribute(`class`)):r=e._$classes||qo(n||{}),t=qo(t);let i=Object.keys(t),a=Object.keys(r),o,s;for(o=0,s=a.length;or.call(e,n[1],t);return i[Ca]=n,e.addEventListener(t,i),i}return e.addEventListener(t,n,typeof n!=`function`&&n),n}function Za(e,t,n){if($(e))return;if(!t){(n||e._$styles)&&(qa(e,`style`),e._$styles=void 0);return}let r=e.style;if(typeof t==`string`)return e._$styles=void 0,r.cssText=t;typeof n==`string`&&(r.cssText=``,n=void 0);let i=e._$styles;i||=e._$styles=n?{...n}:{};let a,o;for(o in i)(!wa.call(t,o)||t[o]==null)&&(r.removeProperty(o),delete i[o]);for(o in t)wa.call(t,o)&&(a=t[o],a!=null&&a!==i[o]&&(r.setProperty(o,a),i[o]=a))}function Qa(e){if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(Qa);if(e[An]!==e)return e;let t=$a(e),n={};for(let r=0;r(typeof t==`function`?t():t)??{};return n||co(e,()=>{let e=i();return wa.call(e,`children`)?e.children:void 0}),Yi(()=>{let t=i(),n=wa.call(t,`ref`)&&t.ref;(typeof n==`function`||Array.isArray(n))&&ro(()=>n,e)},()=>{}),Yi(()=>{let e=i(),t={},n=Zn(e);if(n!==void 0)for(let e=0;elo(e,t,!0,r,!0)),r}function to(e,t){let n=$a(t);for(let r=0;re&&e(t)):e(t)}function ro(e,t){let n=W(e);q(null,()=>no(n,t))}function io(e){return e.$s=!0,e}var ao={scope:!0},Q=null;function oo(){Q={claimInitial(e,t,n){return $(e)&&(!t&&n===void 0&&e&&(n=[...e.childNodes]),Array.isArray(n)&&so(n)),n},reclaimRegion(e,t,n){if(!X.hydrating||!e||!t.isConnected)return e;let r=Array.isArray(e)?e[0]:e;if(!r||!r.nodeType||r.isConnected)return e;let i;if(n){i=[];let e=n.previousSibling,t=0;for(;e;){if(e.nodeType===8){let n=e.nodeValue;if(n===`/`)t++;else if(n===`$`){if(t===0)break;t--}}i.unshift(e),e=e.previousSibling}}else i=[...t.childNodes];return so(i)},dedupEvent(e){return!!(X.registry&&X.events&&X.events.find(([t,n])=>n===e))}}}function so(e){let t=0;for(let n=0;n{Q!==null&&(s=Q.reclaimRegion(s,e,n));let c=Qo(t(),s,a,!0);return typeof c==`function`?(Yi(()=>(Q!==null&&(s=Q.reclaimRegion(s,e,n)),Qo(c,s,a)),t=>{s=Zo(e,t,s,n),o&&$o(s,o)},r!==void 0&&!(i&&i.schedule)?{...i,schedule:!0}:i),Ta):c},t=>{t!==Ta&&(s=Zo(e,t,s,n),o&&$o(s,o))},t.$s?i?{...i,scope:!0}:ao:i)}function lo(e,t,n,r={},i=!1){let a=e.nodeName;t||={};for(let n in r)if(!(n in t)){if(n===`children`)continue;r[n]=Yo(e,n,null,r[n],i,a)}for(let o in t){if(o===`children`){n||Zo(e,Qo(t.children,void 0,!1));continue}r[o]=Yo(e,o,t[o],r[o],i,a)}}var uo=100,fo=new Map;function po(e){return e.policy===`exclusive`?`x|`+e.key:e.type===`inline-style`?`i|`+e.id:e.type+`|`+e.href}function mo(e,t,n,r){let i=document.querySelectorAll(e);outer:for(let e=0;e0),r){e.loadState=`loaded`,e.loadPromise=_o;return}e.loadState=`pending`,e.loadPromise=new Promise(t=>{let r=n=>{e.loadState=n,t()};n.addEventListener(`load`,()=>r(`loaded`),{once:!0}),n.addEventListener(`error`,()=>r(`errored`),{once:!0})})}function yo(e){if(e.policy===`exclusive`||e.type===`inline-style`)return;let t=po(e),n=fo.get(t);n||(n={count:0,element:null,timer:null},fo.set(t,n));let r=!0;if(!n.element||!n.element.isConnected){let t=mo(`link[rel="${e.type===`module`?`modulepreload`:`stylesheet`}"]`,`href`,e.href);!t&&e.type===`style`&&(t=mo(`link[rel="preload"][as="style"]`,`href`,e.href)),t||(r=!1,t=document.createElement(`link`),e.type===`style`?(t.setAttribute(`rel`,`preload`),t.setAttribute(`as`,`style`)):t.setAttribute(`rel`,`modulepreload`),t.setAttribute(`href`,e.href),document.body||t.setAttribute(`blocking`,`render`)),e.attrs&&ho(t,e.attrs),t.isConnected||document.head.appendChild(t),n.element=t,n.loadState=void 0,n.loadPromise=void 0}return e.type===`style`&&vo(n,r),n}function bo(e){let t=po(e),n=fo.get(t);if(e.policy===`exclusive`){n||(n={original:e.get(),set:e.set,writers:[]},fo.set(t,n));let r={value:e.value};n.writers.push(r),n.set(r.value);let i=!1;return()=>{if(i)return;i=!0;let e=n.writers.indexOf(r),a=e===n.writers.length-1;n.writers.splice(e,1),a&&(n.writers.length?n.set(n.writers[n.writers.length-1].value):(n.set(n.original),fo.delete(t)))}}n||(n={count:0,element:null,timer:null},fo.set(t,n)),n.timer&&(clearTimeout(n.timer),n.timer=null),n.count++,!n.element||!n.element.isConnected?n.element=go(e):e.type===`style`&&n.element.getAttribute(`rel`)===`preload`&&(n.element.removeAttribute(`as`),n.element.setAttribute(`rel`,`stylesheet`));let r=!1;return()=>{r||(r=!0,!(--n.count>0)&&(n.timer=setTimeout(()=>{fo.delete(t),n.element&&n.element.remove()},uo)))}}var xo=null,So=0,Co=0,wo=null,To=null,Eo=null,Do=!1,Oo=new Set;function ko(){if(xo)return;xo=[],wo=new Map,To=new Map;let e=document.querySelector(`title`);Eo=e?e.hasAttribute(`data-dh`)?e.getAttribute(`data-dhf`):e.textContent:null,globalThis._$HY&&(globalThis._$HY.h=Ao)}function Ao(e){for(let t=0;t{let e=yo(t);n&&e.loadState===`pending`&&typeof xa==`function`&&xa(e.loadPromise)},()=>bo(t))}function Bo(e){ko();let t={seq:-1,tags:null},n=++Co;Yi(()=>{let t=typeof e==`function`?e():e;Array.isArray(t)||(t=[t]);let r=[],i=[];for(let e=0;e{for(let t=0;t{let e=xo.indexOf(t);e>-1&&xo.splice(e,1),No()}})}function Vo(e){let t=globalThis._$HY;if(!t)return;let n=[];for(let r in e){if(t.modules[r])continue;let i=new URL(e[r],document.baseURI).href;t.loading[r]||(t.loading[r]=zi(()=>import(i).then(e=>{t.modules[r]=e},e=>{throw delete t.loading[r],e}),[])),n.push(t.loading[r])}return n.length?Promise.all(n).then(()=>{}):void 0}function Ho(e,t,n={}){if(Jr(),oo(),globalThis._$HY.done)return ja(e,t,[...t.childNodes],n);let r=(t.nodeType===9?t:t.ownerDocument).head;if(r&&t.contains(r)){let e=r.firstChild;for(;e&&e.nodeType===1&&e.hasAttribute(`data-dh`)&&!e.hasAttribute(`data-dhf`);){let t=e.nextSibling;r.appendChild(e),e=t}}n.renderId||=``,globalThis._$HY.modules||(globalThis._$HY.modules={}),globalThis._$HY.loading||(globalThis._$HY.loading={}),X.completed=globalThis._$HY.completed,X.events=globalThis._$HY.events,X.load=e=>globalThis._$HY.r[e],X.has=e=>e in globalThis._$HY.r,X.gather=e=>is(t,e),X.loadModuleAssets=Vo,X.cleanupFragment=e=>{let t=document.getElementById(`pl-`+e);if(t){let n=t.nextSibling;for(;n;){let t=n.nextSibling;if(n.nodeType===8&&n.nodeValue===`pl-`+e){n.remove();break}n.remove(),n=t}t.remove()}},X.registry=new Map,X.boundaryScopes||=new Map,X.captureBoundaryScope=e=>{X.registry&&X.boundaryScopes.set(e,{registry:X.registry,gather:X.gather})},X.hydrating=!0;let i=globalThis._$HY.r,a=i&&(i[n.renderId+`_assets`]||i._assets);if(a&&typeof a==`object`){let r=Vo(a);if(r){is(t,n.renderId);let i=X.registry,a=X.gather,o;return r.then(()=>{X.registry=i,X.gather=a,X.hydrating=!0;try{o=ja(e,t,[...t.childNodes],n)}finally{X.hydrating=!1}},r=>{if(X.hydrating=!1,X.registry=void 0,t.nodeType===9){(globalThis.reportError||console.error)(r);return}console.error(`Hydration module preload failed, falling back to client render:`,r),o=ja(e,t,[...t.childNodes],n)}),()=>o&&o()}}try{return is(t,n.renderId),ja(e,t,[...t.childNodes],n)}finally{X.hydrating=!1}}function Uo(e){let t,n;if(!$()||!(t=X.registry.get(n=as()))){if(!e)throw Error(`Hydration Mismatch. Unable to find DOM nodes for hydration key: ${n}`);return e(!0)}return X.completed&&X.completed.add(t),X.registry.delete(n),t}function Wo(e,t){for(;e&&e.localName!==t;)e=e.nextSibling;return e}function Go(e){let t=e,n=0,r=[];if($(e))for(;t;){if(t.nodeType===8){let e=t.nodeValue;if(e===`$`)n++;else if(e===`/`){if(n===0)return[t,r];n--}}r.push(t),t=t.nextSibling}return[t,r]}function Ko(){X.events&&!X.events.queued&&(queueMicrotask(()=>{let{completed:e,events:t}=X;if(t){for(t.queued=!1;t.length;){let[n,r]=t[0];if(!e.has(n))return;t.shift();let i,a,o,s;for(let[e,t]of Da){if(!t.handlers.has(r.type))continue;let n=Va(r.target,t);n&&(i?(s||=[{container:i,state:a,distance:o}],s.push({container:e,state:t,distance:n.distance})):(i=e,a=t,o=n.distance))}if(s){s.sort((e,t)=>e.distance-t.distance);for(let e=0;en,e),n;let o=t.indexOf(`:`)>-1;if(!o&&t.slice(0,2)===`on`){let i=t.slice(2).toLowerCase(),a=Ui.has(i);if(!a&&r){if(Array.isArray(n)&&typeof r==`function`&&r[Ca]===n)return r;e.removeEventListener(i,r,typeof r!=`function`&&r)}if(a||n){let t=Xa(e,i,n,a);if(a&&Pa([i]),!a)return t}}else if(o&&t.slice(0,5)===`prop:`||Vi.has(t)||Bi[a]?.[t]){if(o)t=t.slice(5);else if($(e))return n;t===`value`&&a===`SELECT`?queueMicrotask(()=>e.value=n)||(e.value=n):(t===`value`||t===`defaultValue`)&&(a===`INPUT`||a===`TEXTAREA`)?e[t]=n??``:e[t]=n}else{let r=o&&Ki[t.split(`:`)[0]];r?Ja(e,r,t,n):qa(e,t,n)}return n}function Xo(e,t,n){if(Q!==null&&Q.dedupEvent(e))return;let r=e[Sa],i;if(r){if(r===!0||r===t||!t.contains(r))return;i=r}let a=n&&(n.owners.size===1&&n.owners.has(t)?t:Va(e.target,n)?.owner);if(n&&!a||a&&a===i)return;e[Sa]=a||!0;let o=i||e.target,s=`$$${e.type}`,c=e.target,l=a||t||e.currentTarget,u=t=>Object.defineProperty(e,"target",{configurable:!0,value:t}),d=()=>{let t=o[s];if(t===void 0&&o.hasAttribute&&o.hasAttribute(`_bnd`)){let n=globalThis[Symbol.for(`solid.bnd`)];n&&(t=n.resolve(o,e.type))}if(t&&!o.disabled){let n=o[`${s}Data`];if(n===void 0?typeof t==`function`?t.call(o,e):t.handleEvent(e):t.call(o,n,e),e.cancelBubble)return}return o.host&&typeof o.host!=`string`&&!o.host._$host&&o.contains(e.target)&&u(o.host),!0},f=()=>{for(;o&&d()&&o!==l&&o.parentNode!==l;)o=o._$host||o.parentNode||o.host};if(Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return o||l||document}}),i)i===e.target&&(o=i._$host||i.parentNode||i.host),o&&o!==l&&f();else if(e.composedPath){let t=e.composedPath();if(t.length){u(t[0]);for(let e=0;e=0;a--){let o=t[a];if(r!==o){let t=o[Z],s=o.parentNode===e&&(!t||t===n);r&&!i&&!a?s?e.replaceChild(r,o):e.insertBefore(r,n):s&&o.remove()}else i=!0}}else r&&e.insertBefore(r,n);r&&n&&(r[Z]=n)}function is(e,t){let n=e.querySelectorAll(`*[_hk]`);for(let r=0;rus(e))}function us(e){let t=document.createTextNode(``),n=document.createTextNode(``),r=document.createTextNode(``),i=()=>e.mount||document.body,a=Yr(()=>[n,e.children],{ssrSource:`client`,loadingValue:void 0});return Qr(()=>[i(),a(),N()],([,e,a])=>{let o=W(i);o.appendChild(r);let s=q(a,()=>vt(n=>(co(o,e,r,void 0,{host:()=>t.parentNode}),n)));return()=>{s();let e=n;for(;e;){let t=e.nextSibling;if(o.removeChild(e),e===r)break;e=t}}},{schedule:!0,ssrSource:`client`}),$r(i,()=>{let e=W(i),n=Ba(t);if(n&&!n.contains(e))return La(e,n),()=>Ra(e,n)},{ssrSource:`client`}),X.hydrating?Yr(()=>t,{ssrSource:`client`,loadingValue:void 0}):t}var ds=Symbol.for(`solid.component-binding`);function fs(e){return e!==null&&(typeof e==`function`||typeof e==`object`)&&e[ds]||void 0}function ps(e,t){let n=0,r=new Set,i,a=(e,t)=>{let n=fs(e);if(!n)return e;i=n.address;let a=fs(t);if(a&&a.component===n.component){for(let e of r)e(n.address);return t}return e},o=Yr(t=>{let r=e();if(!r||typeof r.then!=`function`)return a(r,t);let i=++n;return{then:(e,o)=>r.then(r=>e(i===n?a(r,t):r),o)}},{lazy:!0});return e=>Yr(()=>{let t=o();switch(typeof t){case`function`:{let n=fs(t);if(n){let[t,a]=Xr(i??n.address);return r.add(a),Cn(()=>r.delete(a)),W(()=>n.component(e,t))}return W(()=>t(e))}case`string`:let n=X.hydrating?Uo():hs(t,W(()=>e.is));return eo(n,e),n}})}function ms(e){return Ti(ps(()=>e.component),$n(e,`component`))}function hs(e,t=void 0){return Wi.has(e)?document.createElementNS(Ki.svg,e):Gi.has(e)?document.createElementNS(Ki.mathml,e):document.createElement(e,{is:t})}function gs(e,t){}var _s=tr(null),vs=e=>typeof e==`function`?vs(e()):Array.isArray(e)?e.map(vs).join(``):e==null?``:String(e);function ys(e,t,n){let r=$n(t,`key`,`children`),i=n?Yr(()=>vs(t.children)):void 0,a={tag:e,props:n?Qn(r,{get children(){return i()}}):r,key:()=>t.key},o=nr(_s);return o?o(a):Bo(a),null}var bs=e=>ys(`title`,e,!0);export{$n as $,d as $t,Ha as A,ye as At,Mi as B,Fe as Bt,Xi as C,pt as Ct,Ko as D,et as Dt,Ga as E,Qe as Et,Pi as F,be as Ft,Yr as G,de as Gt,Ti as H,w as Ht,Ai as I,xe as It,Oi as J,ue as Jt,Qr as K,b as Kt,Fi as L,O as Lt,Za as M,C as Mt,Na as N,S as Nt,io as O,A as Ot,zi as P,k as Pt,Qn as Q,re as Qt,Ni as R,E as Rt,_a as S,vt as St,ro as T,j as Tt,tr as U,Ie as Ut,rr as V,je as Vt,$r as W,y as Wt,X,ce as Xt,Ei as Y,oe as Yt,nr as Z,le as Zt,pa as _,F as _t,cs as a,a as an,H as at,co as b,Lt as bt,ma as c,ln as ct,Uo as d,G as dt,l as en,Dn as et,Go as f,q as ft,ya as g,K as gt,ga as h,Ht as ht,ls as i,_ as in,R as it,eo as j,We as jt,qa as k,T as kt,Pa as l,Gt as lt,Aa as m,Ut as mt,ms as n,p as nn,On as nt,Xa as o,v as on,I as ot,Wo as p,Wt as pt,Xr as q,ie as qt,ka as r,h as rn,L as rt,Ka as s,e as sn,un as st,bs as t,c as tn,Cn as tt,Yi as u,fn as ut,gs as v,P as vt,Qa as w,N as wt,ss as x,Tt as xt,Ho as y,W as yt,ji as z,Le as zt}; \ No newline at end of file diff --git a/docs/assets/dist-Bb9UN4y3.js b/docs/assets/dist-Bb9UN4y3.js new file mode 100644 index 0000000..7e978a6 --- /dev/null +++ b/docs/assets/dist-Bb9UN4y3.js @@ -0,0 +1 @@ +import{$ as e,G as t,N as n,Q as r,U as i,et as a}from"./web-D5piyuW3.js";var o=i(null),s=e=>typeof e==`function`?s(e()):Array.isArray(e)?e.map(s).join(``):e==null?``:String(e);function c(i,c,l){let u=a(c,`key`,`children`),d=l?t(()=>s(c.children)):void 0,f={tag:i,props:l?e(u,{get children(){return d()}}):u,key:()=>c.key},p=r(o);return p?p(f):n(f),null}var l=e=>c(`title`,e,!0);export{l as t}; \ No newline at end of file diff --git a/docs/assets/index-BIXPduqt.js b/docs/assets/index-CJwwqj-f.js similarity index 93% rename from docs/assets/index-BIXPduqt.js rename to docs/assets/index-CJwwqj-f.js index d814461..8ed7ccb 100644 --- a/docs/assets/index-BIXPduqt.js +++ b/docs/assets/index-CJwwqj-f.js @@ -1,4 +1,4 @@ -import{H as e}from"./dist-B5qRkI56.js";import{t}from"./MarkdownPage-UBS0bX0L.js";var n=`--- +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- title: solid-validation --- diff --git a/docs/assets/main-CNsrLAVq.js b/docs/assets/main-CNsrLAVq.js new file mode 100644 index 0000000..a8c4d3e --- /dev/null +++ b/docs/assets/main-CNsrLAVq.js @@ -0,0 +1 @@ +import{J as e,q as t}from"./web-D5piyuW3.js";function n({element:e,validators:t=[]},n,r){return async()=>{e.setCustomValidity?.(``),e.checkValidity?.();let i=e.validationMessage;if(!i)for(let n of t){if(!n)continue;let t=await n(e);if(t){i=t,e.setCustomValidity?.(t);break}}return i&&(r&&e.classList.toggle(r,!0),e.setAttribute(`aria-invalid`,`true`),n(t=>{let n=e.name??e.dataset.name;t[n]=i})),i}}function r({errorClass:r=``}={}){let[i,a]=e({}),[o,s]=t(!1),[c,l]=t(!1),u={},d=(e=()=>{})=>t=>{queueMicrotask(()=>{let i=t.name??t.dataset.name,o=e(),s=Array.isArray(o)?o:[],c;u[i]=c={element:t,validators:s},t.onblur=()=>(l(!1),n(c,a,r)()),t.oninput=()=>{l(!1),a(e=>{delete e[i]}),t.setAttribute(`aria-invalid`,`false`),r&&t.classList.toggle(r,!1)}})};async function f(e){let t=u[e];if(!t)return!1;let i=await n(t,a,r)();return(t.element.validationMessage||i)&&(t.element.focus(),t.element.scrollIntoView({behavior:`smooth`})),!i}function p(e){return u[e]?.element.value}async function m(e,t){let i=!1;for(let e in u){let t=u[e];if(!t)continue;let o=await n(t,a,r)();!i&&(t.element.validationMessage||o)&&(t.element.focus(),t.element.scrollIntoView({behavior:`smooth`}),document.contains(t.element)?i=!0:delete u[e])}if(i)return;s(!0);let o=await e(t);if(o instanceof Object)for(let e in o)e in u&&(u[e].element.setAttribute(`aria-invalid`,`true`),a(t=>{t[e]=o[e]}));else h(),l(!0);s(!1)}function h(){for(let e in u){let t=u[e]?.element;t&&(t.setAttribute(`aria-invalid`,`false`),r&&t.classList.toggle(r,!1),t.setCustomValidity?.(``))}a(e=>{for(let t in e)delete e[t]})}return{validate:d,formSubmit:(e=()=>{})=>t=>{l(!1),t.setAttribute(`novalidate`,``),t.onsubmit=async n=>{n.preventDefault(),await m(e,t)},t.onreset=()=>{h()}},submit:m,errors:i,isSubmitting:o,isSubmitted:c,validateField:f,getFieldValue:p}}export{r as t}; \ No newline at end of file diff --git a/docs/assets/migrating-DSc22lk1.js b/docs/assets/migrating-DSc22lk1.js new file mode 100644 index 0000000..cff398f --- /dev/null +++ b/docs/assets/migrating-DSc22lk1.js @@ -0,0 +1,98 @@ +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- +title: Migrating from v1 +--- + +v2 targets Solid 2. Two things drive every change below: Solid 2 removed \`use:\` +directives, and it batches store writes. + +## Directives become ref factories + +\`use:validate\` and \`use:formSubmit\` are gone, because Solid 2 has no directives. +Each is now a function you call, which returns a ref callback. + +\`\`\`diff +- +- +- +- ++
++ ++ [minLength(3)])} /> ++
+\`\`\` + +Destructuring \`useForm()\` is no longer required. The directive compiler needed +the names in scope; a ref factory is an ordinary value, so \`form.validate(...)\` +works as well. + +## validators take an accessor + +\`validate\` takes a function returning the array, not the array itself. The +directive compiler used to insert that wrapper for you. + +\`\`\`diff +-use:validate={[minLength(3), noSpaces]} ++ref={validate(() => [minLength(3), noSpaces])} +\`\`\` + +The wrapper is what makes a conditional rule work, because the array is read +when the field is checked rather than when it mounts: + +\`\`\`tsx + [isRequired, needsMatch() && mustMatch])} /> +\`\`\` + +\`formSubmit\` takes the callback directly. Your callback closes over its own +signals and reads them when it runs, so there is nothing to defer. + +## validateRef is gone + +It existed because directives could not cross a component boundary. Ref +factories can, so \`validate\` covers both cases and \`validateRef\` is removed. + +\`\`\`diff +- ++ [minLength(3), noSpaces])} /> +\`\`\` + +Note the arguments become one array inside an accessor. + +## Errors arrive a tick later + +Solid 2 batches store writes. In v1 a blur on an empty required field put the +message in \`errors\` in the same tick as the event. It now lands on the next +flush. + +Nothing changes for rendering, since anything reading \`errors.email\` in JSX +updates when the write settles. It matters if you read the store imperatively +straight after an event: + +\`\`\`ts +field.dispatchEvent(new FocusEvent('blur')); +errors.email; // still undefined here +\`\`\` + +\`validateField\` is unaffected. It awaits its own check and reports the result +directly rather than reading the store back. + +In tests, assert with \`waitFor\` rather than immediately after the action. + +## Cleared fields leave no key + +Clearing an error now deletes its key instead of setting it to \`undefined\`, so +\`Object.keys(errors)\` lists only fields that are currently failing. Code that +counts errors or iterates the store sees the difference; code that reads +\`errors.email\` does not. + +## Peer dependencies + +\`@solidjs/web\` joins \`solid-js\` as a peer, since Solid 2 puts the JSX runtime in +a separate package. + +\`\`\`json +"peerDependencies": { + "solid-js": "^2.0.0", + "@solidjs/web": "^2.0.0" +} +\`\`\` +`;function r(){return e(t,{source:n})}export{r as default}; \ No newline at end of file diff --git a/docs/assets/outside-forms-BcT8pRzV.js b/docs/assets/outside-forms-Du1gvEe2.js similarity index 96% rename from docs/assets/outside-forms-BcT8pRzV.js rename to docs/assets/outside-forms-Du1gvEe2.js index 0e76e27..820cf29 100644 --- a/docs/assets/outside-forms-BcT8pRzV.js +++ b/docs/assets/outside-forms-Du1gvEe2.js @@ -1,4 +1,4 @@ -import{H as e}from"./dist-B5qRkI56.js";import{t}from"./MarkdownPage-UBS0bX0L.js";var n=`--- +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- title: Outside a form --- diff --git a/docs/assets/pocketbase-X-m651hn.js b/docs/assets/pocketbase-BDkaBwB7.js similarity index 96% rename from docs/assets/pocketbase-X-m651hn.js rename to docs/assets/pocketbase-BDkaBwB7.js index cd343d6..0b0445a 100644 --- a/docs/assets/pocketbase-X-m651hn.js +++ b/docs/assets/pocketbase-BDkaBwB7.js @@ -1,4 +1,4 @@ -import{H as e}from"./dist-B5qRkI56.js";import{t}from"./MarkdownPage-UBS0bX0L.js";var n=`--- +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- title: PocketBase --- diff --git a/docs/assets/quick-start-y23vUdJU.js b/docs/assets/quick-start-r2IvBghu.js similarity index 85% rename from docs/assets/quick-start-y23vUdJU.js rename to docs/assets/quick-start-r2IvBghu.js index d2119f3..5db0d87 100644 --- a/docs/assets/quick-start-y23vUdJU.js +++ b/docs/assets/quick-start-r2IvBghu.js @@ -1,4 +1,4 @@ -import{H as e}from"./dist-B5qRkI56.js";import{t}from"./MarkdownPage-UBS0bX0L.js";var n=`--- +import{H as e}from"./web-D5piyuW3.js";import{t}from"./MarkdownPage-B5iwZh1f.js";var n=`--- title: Quick start --- @@ -17,6 +17,7 @@ Solid 1.9 or newer is the only peer dependency. Everything below runs as written. Copy the whole file. \`\`\`tsx +import { useForm, type Validator } from '@sparkstone/solid-validation'; const minLength = (min: number): Validator => @@ -31,13 +32,13 @@ export default function SignupForm() { } return ( -
+ - + {errors.email} - + [minLength(3)])} /> {errors.handle}
\ No newline at end of file +

Calling submit() yourself, without a form element:

+

No form element. The button calls submit() from a click handler, and the plan group is registered with data-name.

\ No newline at end of file diff --git a/docs/v2/troubleshooting/index.html b/docs/v2/troubleshooting/index.html index a05470d..81989c3 100644 --- a/docs/v2/troubleshooting/index.html +++ b/docs/v2/troubleshooting/index.html @@ -1,4 +1,4 @@ -Troubleshooting - solid-validation

solid-validation

v2 (Solid 2)GitHub

Troubleshooting

use:validate does nothing

+})($R[3],!0);Troubleshooting - solid-validation

solid-validation

v2 (Solid 2)GitHub

Troubleshooting

use:validate does nothing

Directives are compiled away by babel-preset-solid, so they need Solid's JSX transform. They work in any project built with vite-plugin-solid, SolidStart, or Astro with @astrojs/solid-js. They do not work in a project running only the TypeScript JSX transform.

If the form renders but no field is ever checked, this is almost always why.

TypeScript says use:validate does not exist

From 1cffef67a1f38bf5dd53a7439143691a0fab1a4c Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Sat, 19 Sep 2026 02:56:55 +0000 Subject: [PATCH 10/26] docs: real state in the submit demo, and shiki highlighting The imperative demo held its selection in a plain variable, so choosing a plan re-rendered nothing and there was no way to tell a click had landed. It uses a signal now, marks the pressed button, and logs each step, so a failure says which half broke rather than just sitting there. Code blocks go through shiki, using its sync engine so rendering stays synchronous for the prerender. Both themes are emitted as css variables and app.scss swaps them on data-color-scheme, so code follows the rest of the page. The v2 landing page pointed at a demo that does not exist; it now shows the submit one. --- docs/assets/ImperativeSubmitDemo-Dpq5TJkz.js | 1 - docs/assets/ImperativeSubmitDemo-DqIDtCpz.js | 1 + docs/assets/MarkdownPage-B5iwZh1f.js | 14 -- docs/assets/MarkdownPage-BE134o7D.js | 165 ++++++++++++++++++ docs/assets/SubmitDemo-CvB0fGkM.js | 1 + docs/assets/SubmitDemo-m1EbVQ-V.js | 1 - ...vvRKcp.js => child-components-DP3I9qv1.js} | 2 +- .../{index-CJwwqj-f.js => index-d9UmPAav.js} | 4 +- ...ting-DSc22lk1.js => migrating-BOlT52Rj.js} | 2 +- ...-Du1gvEe2.js => outside-forms-CyZf3zPL.js} | 2 +- ...ase-BDkaBwB7.js => pocketbase-DMD9vA5y.js} | 2 +- ...rt-r2IvBghu.js => quick-start-CgRyXifX.js} | 2 +- ...-BXLuSrb0.js => server-errors-BgQwzBAI.js} | 2 +- ...ms-ByFbTr9_.js => serverForms-BswTAfP_.js} | 2 +- ...gAKLuMO.js => troubleshooting-BKhi4lXL.js} | 2 +- .../{types-CcB9WBnR.js => types-CcX2cIS_.js} | 2 +- ...-form-C-HEONsz.js => use-form-Cq6O90Ud.js} | 2 +- ...ors-D3Os4N99.js => validators-D2PfSFLD.js} | 2 +- ...irtual_solid-ssr-entry-client-B_Z2ulH9.js} | 4 +- ...rtual_solid-ssr-entry-client-BqopbAcY.css} | 2 +- docs/v2/api/types/index.html | 66 +++---- docs/v2/api/use-form/index.html | 80 ++++----- docs/v2/guides/child-components/index.html | 54 +++--- docs/v2/guides/outside-forms/index.html | 62 +++---- docs/v2/guides/pocketbase/index.html | 74 ++++---- docs/v2/guides/server-errors/index.html | 52 +++--- docs/v2/guides/validators/index.html | 44 ++--- docs/v2/index.html | 26 +-- docs/v2/migrating/index.html | 54 +++--- docs/v2/quick-start/index.html | 92 +++++----- docs/v2/troubleshooting/index.html | 18 +- pnpm-lock.yaml | 126 +++++++++++++ website/versions/v2/package.json | 6 +- .../v2/src/components/MarkdownPage.tsx | 40 ++++- .../components/demos/ImperativeSubmitDemo.tsx | 57 ++++-- .../v2/src/components/demos/SubmitDemo.tsx | 4 +- website/versions/v2/src/content/v2/index.md | 2 +- website/versions/v2/src/styles/app.scss | 35 ++++ 38 files changed, 741 insertions(+), 366 deletions(-) delete mode 100644 docs/assets/ImperativeSubmitDemo-Dpq5TJkz.js create mode 100644 docs/assets/ImperativeSubmitDemo-DqIDtCpz.js delete mode 100644 docs/assets/MarkdownPage-B5iwZh1f.js create mode 100644 docs/assets/MarkdownPage-BE134o7D.js create mode 100644 docs/assets/SubmitDemo-CvB0fGkM.js delete mode 100644 docs/assets/SubmitDemo-m1EbVQ-V.js rename docs/assets/{child-components-1UvvRKcp.js => child-components-DP3I9qv1.js} (98%) rename docs/assets/{index-CJwwqj-f.js => index-d9UmPAav.js} (97%) rename docs/assets/{migrating-DSc22lk1.js => migrating-BOlT52Rj.js} (99%) rename docs/assets/{outside-forms-Du1gvEe2.js => outside-forms-CyZf3zPL.js} (98%) rename docs/assets/{pocketbase-BDkaBwB7.js => pocketbase-DMD9vA5y.js} (98%) rename docs/assets/{quick-start-r2IvBghu.js => quick-start-CgRyXifX.js} (99%) rename docs/assets/{server-errors-BXLuSrb0.js => server-errors-BgQwzBAI.js} (98%) rename docs/assets/{serverForms-ByFbTr9_.js => serverForms-BswTAfP_.js} (99%) rename docs/assets/{troubleshooting-DgAKLuMO.js => troubleshooting-BKhi4lXL.js} (94%) rename docs/assets/{types-CcB9WBnR.js => types-CcX2cIS_.js} (98%) rename docs/assets/{use-form-C-HEONsz.js => use-form-Cq6O90Ud.js} (98%) rename docs/assets/{validators-D3Os4N99.js => validators-D2PfSFLD.js} (98%) rename docs/assets/{virtual_solid-ssr-entry-client-Bv11yjTg.js => virtual_solid-ssr-entry-client-B_Z2ulH9.js} (98%) rename docs/assets/{virtual_solid-ssr-entry-client-B0qum1hI.css => virtual_solid-ssr-entry-client-BqopbAcY.css} (98%) diff --git a/docs/assets/ImperativeSubmitDemo-Dpq5TJkz.js b/docs/assets/ImperativeSubmitDemo-Dpq5TJkz.js deleted file mode 100644 index 12eac55..0000000 --- a/docs/assets/ImperativeSubmitDemo-Dpq5TJkz.js +++ /dev/null @@ -1 +0,0 @@ -import{D as e,E as t,M as n,O as r,S as i,c as a,d as o,l as s,u as c,w as l,y as u}from"./web-D5piyuW3.js";import{t as d}from"./main-CNsrLAVq.js";var f=n(`

No form element. The button calls submit() from a click handler, and the plan group is registered with data-name.

`),p=n(`
    `),g=i(``),d=t(`Saved`),f=e=>t=>t.value.lengthnew Promise(t=>setTimeout(t,e));function m(){let{formSubmit:t,validate:m,errors:h,isSubmitting:g,isSubmitted:_}=l();async function v(e){if(await p(400),String(new FormData(e).get(`email`)??``).endsWith(`@example.com`))return{email:`That domain is not accepted`}}var y=o(u),b=y.firstChild.nextSibling.nextSibling,x=b.nextSibling,S=x.nextSibling.nextSibling,C=S.nextSibling,w=C.nextSibling,T=w.firstChild,E=T.nextSibling.nextSibling,[D,O]=i(E.nextSibling),k=t(v);(typeof k==`function`||Array.isArray(k))&&s(()=>k,y);var A=m();(typeof A==`function`||Array.isArray(A))&&s(()=>A,b),c(x,()=>h.email);var j=m(()=>[f(3)]);return(typeof j==`function`||Array.isArray(j))&&s(()=>j,S),c(C,()=>h.handle),c(T,()=>g()?`Saving`:`Submit via form`),c(w,e((()=>{var e=r(()=>!!_());return()=>e()?o(d):_()})()),D,O),a(()=>g(),e=>{n(T,`disabled`,e)}),y}export{m as default}; \ No newline at end of file diff --git a/docs/assets/SubmitDemo-m1EbVQ-V.js b/docs/assets/SubmitDemo-m1EbVQ-V.js deleted file mode 100644 index 27f81a9..0000000 --- a/docs/assets/SubmitDemo-m1EbVQ-V.js +++ /dev/null @@ -1 +0,0 @@ -import{D as e,M as t,O as n,S as r,d as i,l as a,u as o,w as s,y as c}from"./web-D5piyuW3.js";import{t as l}from"./main-CNsrLAVq.js";var u=t(`

    Submit with the form button, then with the one that calls submit() from a click handler. Both should behave identically.

      `),b=a(`

      That form is running the real library. Two directives, one store:

      diff --git a/docs/v2/migrating/index.html b/docs/v2/migrating/index.html index be585e9..0969ff2 100644 --- a/docs/v2/migrating/index.html +++ b/docs/v2/migrating/index.html @@ -1,4 +1,4 @@ -Migrating from v1 - solid-validation

      solid-validation

      v2 (Solid 2)GitHub
      +})($R[3],!0);Migrating from v1 - solid-validation

      solid-validation

      v2 (Solid 2)GitHub

      Migrating from v1

      v2 targets Solid 2. Two things drive every change below: Solid 2 removed use: directives, and it batches store writes.

      diff --git a/docs/v2/quick-start/index.html b/docs/v2/quick-start/index.html index a585c64..3459482 100644 --- a/docs/v2/quick-start/index.html +++ b/docs/v2/quick-start/index.html @@ -1,4 +1,4 @@ -Quick start - solid-validation

      solid-validation

      v2 (Solid 2)GitHub
      +})($R[3],!0);Quick start - solid-validation

      solid-validation

      v2 (Solid 2)GitHub

      Quick start

      npm install @sparkstone/solid-validation
      pnpm add @sparkstone/solid-validation
      diff --git a/docs/v2/troubleshooting/index.html b/docs/v2/troubleshooting/index.html index 3fcf3ad..61fb8d1 100644 --- a/docs/v2/troubleshooting/index.html +++ b/docs/v2/troubleshooting/index.html @@ -1,4 +1,4 @@ -Troubleshooting - solid-validation

      solid-validation

      v2 (Solid 2)GitHub
      +})($R[3],!0);Troubleshooting - solid-validation

      solid-validation

      v2 (Solid 2)GitHub

      Troubleshooting

      use:validate does nothing

      Directives are compiled away by babel-preset-solid, so they need Solid's JSX transform. They work in any project built with vite-plugin-solid, SolidStart, or Astro with @astrojs/solid-js. They do not work in a project running only the TypeScript JSX transform.

      diff --git a/website/versions/v2/src/styles/app.scss b/website/versions/v2/src/styles/app.scss index efcd3f6..ec1abf1 100644 --- a/website/versions/v2/src/styles/app.scss +++ b/website/versions/v2/src/styles/app.scss @@ -310,18 +310,37 @@ * inline; this swaps to the dark set when the framework is in dark mode, so the * code blocks follow the rest of the page instead of being fixed to one theme. */ +/* + * Shiki emits both themes as CSS variables on every token. The framework picks + * its scheme from prefers-color-scheme and lets [data-color-scheme] override + * it, so code blocks follow the same two rules rather than the attribute alone. + */ .shiki, .shiki span { color: var(--shiki-light); background-color: var(--shiki-light-bg); } +@media (prefers-color-scheme: dark) { + :root:not([data-color-scheme='light']) .shiki, + :root:not([data-color-scheme='light']) .shiki span { + color: var(--shiki-dark); + background-color: var(--shiki-dark-bg); + } +} + [data-color-scheme='dark'] .shiki, [data-color-scheme='dark'] .shiki span { color: var(--shiki-dark); background-color: var(--shiki-dark-bg); } +[data-color-scheme='light'] .shiki, +[data-color-scheme='light'] .shiki span { + color: var(--shiki-light); + background-color: var(--shiki-light-bg); +} + .shiki { padding: 1rem 1.15rem; border: var(--border-width) solid oklch(from var(--color) var(--surface-lc-3) h); From dcda2e34b47ff6651bf17091a0c779df58152c69 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Sat, 19 Sep 2026 05:19:50 +0000 Subject: [PATCH 18/26] docs: let the kobalte layer style the version switcher Pulls in @sparkstone/css/classless/kobalte, which keys on kobalte's own state attributes, and points the switcher's parts at the classes it styles: btn on the trigger, dropdown-content on the content, menu on the listbox, menu-item on each option. The hand-written .docs-version-placeholder rule is gone, and the pre-hydration fallback wears the same btn classes as the trigger so the swap is not visible. --- ...ents-CCPJkB2a.js => child-components-wW1k3nKH.js} | 2 +- .../{migrating-C2R5wTCf.js => migrating-BiD54IcG.js} | 2 +- ...e-forms-C0R2mxc2.js => outside-forms-BQB_cL6V.js} | 2 +- ...pocketbase-CizKHN8j.js => pocketbase-B_jUUgVY.js} | 2 +- ...ick-start-B6FSV7ik.js => quick-start-B3xK5-Eb.js} | 2 +- ...-errors-BtgiQ35E.js => server-errors-1YFGfDmx.js} | 2 +- ...rverForms-D9INH16L.js => serverForms-ChripYmQ.js} | 2 +- ...oting-DvAfwN6m.js => troubleshooting-Bg8rCbVX.js} | 2 +- docs/assets/{types-CqGH6AZb.js => types-DufGqtGH.js} | 2 +- .../{use-form-B_xfc2kg.js => use-form-CQSB-P-k.js} | 2 +- docs/assets/{v2-CFvUt-PV.js => v2-D47gNxAl.js} | 2 +- ...validators-askjW_zv.js => validators-DHvzpOF-.js} | 2 +- .../virtual_solid-ssr-entry-client-BnAEUF6I.css | 1 + ...js => virtual_solid-ssr-entry-client-Bpzgn6ZA.js} | 4 ++-- .../virtual_solid-ssr-entry-client-DTjixuZj.css | 1 - docs/v2/api/types/index.html | 4 ++-- docs/v2/api/use-form/index.html | 4 ++-- docs/v2/guides/child-components/index.html | 4 ++-- docs/v2/guides/outside-forms/index.html | 4 ++-- docs/v2/guides/pocketbase/index.html | 4 ++-- docs/v2/guides/server-errors/index.html | 4 ++-- docs/v2/guides/validators/index.html | 4 ++-- docs/v2/index.html | 4 ++-- docs/v2/migrating/index.html | 4 ++-- docs/v2/quick-start/index.html | 4 ++-- docs/v2/troubleshooting/index.html | 4 ++-- pnpm-lock.yaml | 10 ++++++++-- website/versions/v2/package.json | 2 +- .../versions/v2/src/components/VersionSwitcher.tsx | 10 +++++----- website/versions/v2/src/styles/app.scss | 12 +++--------- 30 files changed, 54 insertions(+), 54 deletions(-) rename docs/assets/{child-components-CCPJkB2a.js => child-components-wW1k3nKH.js} (99%) rename docs/assets/{migrating-C2R5wTCf.js => migrating-BiD54IcG.js} (99%) rename docs/assets/{outside-forms-C0R2mxc2.js => outside-forms-BQB_cL6V.js} (99%) rename docs/assets/{pocketbase-CizKHN8j.js => pocketbase-B_jUUgVY.js} (99%) rename docs/assets/{quick-start-B6FSV7ik.js => quick-start-B3xK5-Eb.js} (99%) rename docs/assets/{server-errors-BtgiQ35E.js => server-errors-1YFGfDmx.js} (99%) rename docs/assets/{serverForms-D9INH16L.js => serverForms-ChripYmQ.js} (99%) rename docs/assets/{troubleshooting-DvAfwN6m.js => troubleshooting-Bg8rCbVX.js} (98%) rename docs/assets/{types-CqGH6AZb.js => types-DufGqtGH.js} (99%) rename docs/assets/{use-form-B_xfc2kg.js => use-form-CQSB-P-k.js} (99%) rename docs/assets/{v2-CFvUt-PV.js => v2-D47gNxAl.js} (99%) rename docs/assets/{validators-askjW_zv.js => validators-DHvzpOF-.js} (99%) create mode 100644 docs/assets/virtual_solid-ssr-entry-client-BnAEUF6I.css rename docs/assets/{virtual_solid-ssr-entry-client-CaaYd2GF.js => virtual_solid-ssr-entry-client-Bpzgn6ZA.js} (94%) delete mode 100644 docs/assets/virtual_solid-ssr-entry-client-DTjixuZj.css diff --git a/docs/assets/child-components-CCPJkB2a.js b/docs/assets/child-components-wW1k3nKH.js similarity index 99% rename from docs/assets/child-components-CCPJkB2a.js rename to docs/assets/child-components-wW1k3nKH.js index e5031b0..1eed397 100644 --- a/docs/assets/child-components-CCPJkB2a.js +++ b/docs/assets/child-components-wW1k3nKH.js @@ -1,4 +1,4 @@ -import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-CaaYd2GF.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Child components - solid-validation`}),` +import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-Bpzgn6ZA.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Child components - solid-validation`}),` `,e(i.h1,{children:`Child components`}),` `,e(i.p,{get children(){return[`Directives are compile-time syntax, not values. `,e(i.code,{children:`use:validate`}),` cannot be forwarded as a prop, spread onto a child, or stored in a variable and applied later. Once a field moves into its own component, the directive stops being an option.`]}}),` `,e(i.p,{get children(){return[e(i.code,{children:`validateRef`}),` is the same registration behind a plain ref function:`]}}),` diff --git a/docs/assets/migrating-C2R5wTCf.js b/docs/assets/migrating-BiD54IcG.js similarity index 99% rename from docs/assets/migrating-C2R5wTCf.js rename to docs/assets/migrating-BiD54IcG.js index a82aedf..b232869 100644 --- a/docs/assets/migrating-C2R5wTCf.js +++ b/docs/assets/migrating-BiD54IcG.js @@ -1,4 +1,4 @@ -import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-CaaYd2GF.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Migrating from v1 - solid-validation`}),` +import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-Bpzgn6ZA.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Migrating from v1 - solid-validation`}),` `,e(i.h1,{children:`Migrating from v1`}),` `,e(i.p,{get children(){return[`v2 targets Solid 2. Two things drive every change below: Solid 2 removed `,e(i.code,{children:`use:`}),` directives, and it batches store writes.`]}}),` diff --git a/docs/assets/outside-forms-C0R2mxc2.js b/docs/assets/outside-forms-BQB_cL6V.js similarity index 99% rename from docs/assets/outside-forms-C0R2mxc2.js rename to docs/assets/outside-forms-BQB_cL6V.js index 76c64c6..399c024 100644 --- a/docs/assets/outside-forms-C0R2mxc2.js +++ b/docs/assets/outside-forms-BQB_cL6V.js @@ -1,4 +1,4 @@ -import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-CaaYd2GF.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Outside a form - solid-validation`}),` +import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-Bpzgn6ZA.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`Outside a form - solid-validation`}),` `,e(i.h1,{children:`Outside a form`}),` `,e(i.p,{children:`Not every required choice is an input. A plan picker, a map marker, a signature pad and a file dropzone all have a valid and an invalid state, and none of them are form controls.`}),` `,e(i.p,{get children(){return[e(i.code,{children:`use:validate`}),` works on any element. Give it a `,e(i.code,{children:`data-name`}),` so its errors have a key, and call `,e(i.code,{children:`submit()`}),` yourself instead of relying on a form:`]}}),` diff --git a/docs/assets/pocketbase-CizKHN8j.js b/docs/assets/pocketbase-B_jUUgVY.js similarity index 99% rename from docs/assets/pocketbase-CizKHN8j.js rename to docs/assets/pocketbase-B_jUUgVY.js index 58aaa50..21fedf4 100644 --- a/docs/assets/pocketbase-CizKHN8j.js +++ b/docs/assets/pocketbase-B_jUUgVY.js @@ -1,4 +1,4 @@ -import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-CaaYd2GF.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`PocketBase - solid-validation`}),` +import{H as e,et as t}from"./web-CX4CTzKu.js";import{l as n}from"./virtual_solid-ssr-entry-client-Bpzgn6ZA.js";import{t as r}from"./components-BNUblAyO.js";var i=void 0;function a(t){let i={code:`code`,h1:`h1`,h2:`h2`,p:`p`,pre:`pre`,span:`span`,...r(),...t.components};return[e(n,{children:`PocketBase - solid-validation`}),` `,e(i.h1,{children:`PocketBase`}),` `,e(i.p,{children:`Two helpers ship from a separate entry point, so nothing PocketBase-related reaches your bundle unless you import it:`}),` `,e(i.pre,{class:`shiki shiki-themes github-light-default github-dark-default`,style:{"--shiki-light":`#1f2328`,"--shiki-dark":`#e6edf3`,"--shiki-light-bg":`#ffffff`,"--shiki-dark-bg":`#0d1117`},tabindex:`0`,get children(){return e(i.code,{get children(){return[e(i.span,{class:`line`,get children(){return e(i.span,{style:{"--shiki-light":`#1F2328`,"--shiki-dark":`#E6EDF3`},children:` parsePocketbaseError,`})}}),` diff --git a/docs/assets/quick-start-B6FSV7ik.js b/docs/assets/quick-start-B3xK5-Eb.js similarity index 99% rename from docs/assets/quick-start-B6FSV7ik.js rename to docs/assets/quick-start-B3xK5-Eb.js index d64467b..0226ac2 100644 --- a/docs/assets/quick-start-B6FSV7ik.js +++ b/docs/assets/quick-start-B3xK5-Eb.js @@ -1,4 +1,4 @@ -import{D as e,E as t,H as n,I as r,J as i,M as a,O as o,S as s,c,d as l,et as u,l as d,u as f,w as p,y as m}from"./web-CX4CTzKu.js";import{l as h}from"./virtual_solid-ssr-entry-client-CaaYd2GF.js";import{t as g}from"./components-BNUblAyO.js";import{n as _,t as v}from"./SubmitDemo-P88BpRrn.js";var y=a(`

      Press Continue with no plan chosen and it should refuse. Choose one and it should say Continuing for 400ms, then Done. The log records every step.

      Plan
        `),b=a(`
          `),b=a(`

          That form is running the real library. Two directives, one store:

          diff --git a/docs/v2/migrating/index.html b/docs/v2/migrating/index.html index 0969ff2..42d64ae 100644 --- a/docs/v2/migrating/index.html +++ b/docs/v2/migrating/index.html @@ -1,4 +1,4 @@ -Migrating from v1 - solid-validation

          solid-validation

          v2 (Solid 2)GitHub
          +})($R[3],!0);Migrating from v1 - solid-validation

          solid-validation

          v2 (Solid 2)GitHub

          Migrating from v1

          v2 targets Solid 2. Two things drive every change below: Solid 2 removed use: directives, and it batches store writes.

          diff --git a/docs/v2/quick-start/index.html b/docs/v2/quick-start/index.html index 3459482..b257976 100644 --- a/docs/v2/quick-start/index.html +++ b/docs/v2/quick-start/index.html @@ -1,4 +1,4 @@ -Quick start - solid-validation

          solid-validation

          v2 (Solid 2)GitHub
          +})($R[3],!0);Quick start - solid-validation

          solid-validation

          v2 (Solid 2)GitHub

          Quick start

          npm install @sparkstone/solid-validation
          pnpm add @sparkstone/solid-validation
          diff --git a/docs/v2/troubleshooting/index.html b/docs/v2/troubleshooting/index.html index 61fb8d1..1bace31 100644 --- a/docs/v2/troubleshooting/index.html +++ b/docs/v2/troubleshooting/index.html @@ -1,4 +1,4 @@ -Troubleshooting - solid-validation

          solid-validation

          v2 (Solid 2)GitHub
          +})($R[3],!0);Troubleshooting - solid-validation

          solid-validation

          v2 (Solid 2)GitHub

          Troubleshooting

          use:validate does nothing

          Directives are compiled away by babel-preset-solid, so they need Solid's JSX transform. They work in any project built with vite-plugin-solid, SolidStart, or Astro with @astrojs/solid-js. They do not work in a project running only the TypeScript JSX transform.

          diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a3ae4a..e572c22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,8 +105,8 @@ importers: specifier: 2.0.0-rc.9 version: 2.0.0-rc.9(solid-js@2.0.0-rc.9) '@sparkstone/css': - specifier: ^2.0.0 - version: 2.0.0 + specifier: file:/mnt/user-data/uploads/sparkstone-css-2_0_0.tgz + version: file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz '@sparkstone/solid-validation': specifier: workspace:^ version: link:../../.. @@ -1883,6 +1883,10 @@ packages: '@sparkstone/css@2.0.0': resolution: {integrity: sha512-PdzK83KTAtlHRdJjWWMzi8fg0E40I7Bkdd7DX9IqgCrbjnknVWe3YAfvYZlbF/b/RfaC9I6LHOdPuRfPMbRvIg==} + '@sparkstone/css@file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz': + resolution: {integrity: sha512-G8eZzWkf3PwSWXeMISHDiChvdkfrY5hOlrWzaLAEpBZtsw849JTsIGCjj5ja+8hEez0H27HgelnrirSqiemrdg==, tarball: file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz} + version: 2.0.0 + '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} @@ -5578,6 +5582,8 @@ snapshots: '@sparkstone/css@2.0.0': {} + '@sparkstone/css@file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz': {} + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 diff --git a/website/versions/v2/package.json b/website/versions/v2/package.json index 3c97477..90f1bd9 100644 --- a/website/versions/v2/package.json +++ b/website/versions/v2/package.json @@ -13,7 +13,7 @@ "@solidjs/meta": "1.0.0-next.2", "@solidjs/router": "2.0.0-next.26", "@solidjs/web": "2.0.0-rc.9", - "@sparkstone/css": "^2.0.0", + "@sparkstone/css": "file:/mnt/user-data/uploads/sparkstone-css-2_0_0.tgz", "@sparkstone/solid-validation": "workspace:^", "markdown-it": "^15.0.2", "shiki": "^4.4.3", diff --git a/website/versions/v2/src/components/VersionSwitcher.tsx b/website/versions/v2/src/components/VersionSwitcher.tsx index eeee67d..6c062bc 100644 --- a/website/versions/v2/src/components/VersionSwitcher.tsx +++ b/website/versions/v2/src/components/VersionSwitcher.tsx @@ -37,7 +37,7 @@ export default function VersionSwitcher() { return ( {current().label}}> + fallback={{current().label}}> options={all()} optionValue='id' @@ -48,16 +48,16 @@ export default function VersionSwitcher() { window.location.href = next.path; }} itemComponent={props => ( - + {props.item.rawValue.label} )}> - + >{state => state.selectedOption().label} - - + + diff --git a/website/versions/v2/src/styles/app.scss b/website/versions/v2/src/styles/app.scss index ec1abf1..28d8f73 100644 --- a/website/versions/v2/src/styles/app.scss +++ b/website/versions/v2/src/styles/app.scss @@ -1,6 +1,9 @@ // The classless build styles bare semantic elements, which is what the docs // markup and the demos use. The default export is the class-based build. @use '@sparkstone/css/src/classless.scss'; +// Kobalte's parts are styled by their own layer, keyed on its state +// attributes, so the version switcher needs no hand-written rules. +@use '@sparkstone/css/src/classless/kobalte.scss'; /* * Colour comes from @sparkstone/css via oklch relative syntax: the -lc @@ -248,15 +251,6 @@ color: var(--error-color); } -.docs-version-placeholder { - display: inline-block; - padding: 0.4rem 0.7rem; - border: var(--border-width) solid oklch(from var(--color) var(--surface-lc-3) h); - border-radius: var(--border-radius); - font-size: 0.875rem; - color: oklch(from var(--color) var(--text-lc-3) h); -} - /* ---------- responsive ---------- */ @media (max-width: 80rem) { From 12eb72846b157cd662a366a54688546d075c6590 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Fri, 18 Sep 2026 22:27:36 -0700 Subject: [PATCH 19/26] WIP --- pnpm-lock.yaml | 10 +++++----- website/versions/v2/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e572c22..79082c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,8 +105,8 @@ importers: specifier: 2.0.0-rc.9 version: 2.0.0-rc.9(solid-js@2.0.0-rc.9) '@sparkstone/css': - specifier: file:/mnt/user-data/uploads/sparkstone-css-2_0_0.tgz - version: file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz + specifier: https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5 + version: https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5 '@sparkstone/solid-validation': specifier: workspace:^ version: link:../../.. @@ -1883,8 +1883,8 @@ packages: '@sparkstone/css@2.0.0': resolution: {integrity: sha512-PdzK83KTAtlHRdJjWWMzi8fg0E40I7Bkdd7DX9IqgCrbjnknVWe3YAfvYZlbF/b/RfaC9I6LHOdPuRfPMbRvIg==} - '@sparkstone/css@file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz': - resolution: {integrity: sha512-G8eZzWkf3PwSWXeMISHDiChvdkfrY5hOlrWzaLAEpBZtsw849JTsIGCjj5ja+8hEez0H27HgelnrirSqiemrdg==, tarball: file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz} + '@sparkstone/css@https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5': + resolution: {integrity: sha512-G8eZzWkf3PwSWXeMISHDiChvdkfrY5hOlrWzaLAEpBZtsw849JTsIGCjj5ja+8hEez0H27HgelnrirSqiemrdg==, tarball: https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5} version: 2.0.0 '@swc/helpers@0.5.23': @@ -5582,7 +5582,7 @@ snapshots: '@sparkstone/css@2.0.0': {} - '@sparkstone/css@file:../../../mnt/user-data/uploads/sparkstone-css-2_0_0.tgz': {} + '@sparkstone/css@https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5': {} '@swc/helpers@0.5.23': dependencies: diff --git a/website/versions/v2/package.json b/website/versions/v2/package.json index 90f1bd9..b7313d7 100644 --- a/website/versions/v2/package.json +++ b/website/versions/v2/package.json @@ -13,7 +13,7 @@ "@solidjs/meta": "1.0.0-next.2", "@solidjs/router": "2.0.0-next.26", "@solidjs/web": "2.0.0-rc.9", - "@sparkstone/css": "file:/mnt/user-data/uploads/sparkstone-css-2_0_0.tgz", + "@sparkstone/css": "https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5", "@sparkstone/solid-validation": "workspace:^", "markdown-it": "^15.0.2", "shiki": "^4.4.3", From 69fc46cc355a26bbcc7efd3d6a7abf84bb7048ca Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Sat, 19 Sep 2026 05:34:12 +0000 Subject: [PATCH 20/26] docs: segmented control for the plan picker, and three more demos The imperative submit demo used bare buttons and a signal; it uses kobalte's SegmentedControl with the segmented classes now, which is what that control is for and what the kobalte layer styles. Three demos on pages that had none: an async availability check with real latency behind a cheap length check, server errors coming back as both a field error and a form-level one, and a cross-field password match read through getFieldValue rather than a signal. No build output: run pnpm build:all after merging. --- .../components/demos/AsyncValidatorDemo.tsx | 49 ++++++++++++++++ .../src/components/demos/CrossFieldDemo.tsx | 53 +++++++++++++++++ .../components/demos/ImperativeSubmitDemo.tsx | 57 +++++++------------ .../src/components/demos/ServerErrorDemo.tsx | 46 +++++++++++++++ .../v2/src/routes/v2/guides/server-errors.mdx | 3 + .../v2/src/routes/v2/guides/validators.mdx | 6 ++ 6 files changed, 178 insertions(+), 36 deletions(-) create mode 100644 website/versions/v2/src/components/demos/AsyncValidatorDemo.tsx create mode 100644 website/versions/v2/src/components/demos/CrossFieldDemo.tsx create mode 100644 website/versions/v2/src/components/demos/ServerErrorDemo.tsx diff --git a/website/versions/v2/src/components/demos/AsyncValidatorDemo.tsx b/website/versions/v2/src/components/demos/AsyncValidatorDemo.tsx new file mode 100644 index 0000000..fe6204c --- /dev/null +++ b/website/versions/v2/src/components/demos/AsyncValidatorDemo.tsx @@ -0,0 +1,49 @@ +import { useForm, type Validator } from '@sparkstone/solid-validation'; + +type Fields = { username: string }; + +const taken = ['ada', 'grace', 'alan']; + +const minLength = + (min: number): Validator => + el => + el.value.length < min && `Use at least ${min} characters`; + +/** Stands in for a network call, latency included. */ +const isAvailable: Validator = async el => { + const value = el.value.toLowerCase(); + await new Promise(resolve => setTimeout(resolve, 600)); + return taken.includes(value) && `${el.value} is already taken`; +}; + +export default function AsyncValidatorDemo() { + const { formSubmit, validate, errors, isSubmitting, isSubmitted } = useForm(); + + return ( +
          {})}> +

          + + Try ada, grace or alan. The availability check + waits 600ms, and length is checked first so the slow call only runs when it has to. + +

          + + + [minLength(3), isAvailable])} + /> + {errors.username} + +
          + + {isSubmitted() && Available} +
          +
          + ); +} diff --git a/website/versions/v2/src/components/demos/CrossFieldDemo.tsx b/website/versions/v2/src/components/demos/CrossFieldDemo.tsx new file mode 100644 index 0000000..6e645eb --- /dev/null +++ b/website/versions/v2/src/components/demos/CrossFieldDemo.tsx @@ -0,0 +1,53 @@ +import { useForm, type Validator } from '@sparkstone/solid-validation'; + +type Fields = { password: string; confirm: string }; + +export default function CrossFieldDemo() { + const { formSubmit, validate, getFieldValue, errors, isSubmitting, isSubmitted } = + useForm(); + + const minLength = + (min: number): Validator => + el => + el.value.length < min && `Use at least ${min} characters`; + + // Reads the other field through the form rather than a signal, so the rule + // lives with the field it belongs to. + const mustMatch: Validator = el => + el.value !== getFieldValue('password') && 'Passwords do not match'; + + return ( +
          {})}> +

          + Fill in both, then change the first one and blur the second. +

          + + + [minLength(8)])} + /> + {errors.password} + + + [mustMatch])} + /> + {errors.confirm} + +
          + + {isSubmitted() && Saved} +
          +
          + ); +} diff --git a/website/versions/v2/src/components/demos/ImperativeSubmitDemo.tsx b/website/versions/v2/src/components/demos/ImperativeSubmitDemo.tsx index 2cae16c..44c7591 100644 --- a/website/versions/v2/src/components/demos/ImperativeSubmitDemo.tsx +++ b/website/versions/v2/src/components/demos/ImperativeSubmitDemo.tsx @@ -1,3 +1,4 @@ +import { SegmentedControl } from '@kobalte/core/segmented-control'; import { useForm } from '@sparkstone/solid-validation'; import { For, createSignal } from 'solid-js'; @@ -7,66 +8,50 @@ const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); const plans = ['Hobby', 'Studio', 'Agency']; /** - * submit() called from an inline-arrow onClick, which is the shape that never - * fires under jsdom in the test suite. Every step reports what it did, so a - * failure here says which half broke. + * A control that is not a form field at all: the group is registered with + * data-name and checked by submit(), which is called from a click handler + * rather than a form's submit event. */ export default function ImperativeSubmitDemo() { - const [chosen, setChosen] = createSignal(null); - const [log, setLog] = createSignal([]); - const note = (line: string) => setLog(lines => [...lines, line]); - + const [plan, setPlan] = createSignal(''); const { validate, submit, errors, isSubmitting, isSubmitted } = useForm(); - const planChosen = () => !chosen() && 'Choose a plan to continue'; + const planChosen = () => !plan() && 'Choose a plan to continue'; return (

          - Press Continue with no plan chosen and it should refuse. Choose one and it should say - Continuing for 400ms, then Done. The log records every step. + Press Continue with nothing chosen and it refuses. Pick a plan and it runs for 400ms.

          [planChosen])} data-name='plan'> Plan - - {name => ( - - )} - + + + + {option => ( + + + {option} + + )} + +
          {errors.plan}
          - {isSubmitted() && Done} + {isSubmitted() && Subscribed to {plan()}}
          - -
            - {line =>
          1. {line}
          2. }
            -
          ); } diff --git a/website/versions/v2/src/components/demos/ServerErrorDemo.tsx b/website/versions/v2/src/components/demos/ServerErrorDemo.tsx new file mode 100644 index 0000000..763448c --- /dev/null +++ b/website/versions/v2/src/components/demos/ServerErrorDemo.tsx @@ -0,0 +1,46 @@ +import { useForm } from '@sparkstone/solid-validation'; +import { Show } from 'solid-js'; + +type Fields = { email: string; form: string }; + +const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); + +export default function ServerErrorDemo() { + const { formSubmit, validate, errors, isSubmitting, isSubmitted } = useForm(); + + async function onSubmit(form: HTMLFormElement) { + await wait(500); + const email = String(new FormData(form).get('email') ?? ''); + if (email.endsWith('@example.com')) return { email: 'That domain is not accepted' }; + if (email.startsWith('down')) return { form: 'The signup service is unavailable.' }; + } + + return ( +
          +

          + + Everything passes locally, then the server disagrees. Anything at{' '} + @example.com comes back as a field error; an address starting with{' '} + down comes back as a form-level one. + +

          + + + + + + + + {errors.email} + +
          + + {isSubmitted() && Account created} +
          +
          + ); +} diff --git a/website/versions/v2/src/routes/v2/guides/server-errors.mdx b/website/versions/v2/src/routes/v2/guides/server-errors.mdx index 42bf8ad..36ab101 100644 --- a/website/versions/v2/src/routes/v2/guides/server-errors.mdx +++ b/website/versions/v2/src/routes/v2/guides/server-errors.mdx @@ -1,4 +1,5 @@ import { Title } from '@solidjs/meta'; +import ServerErrorDemo from '../../../components/demos/ServerErrorDemo'; Server-side errors - solid-validation @@ -56,3 +57,5 @@ async function onSubmit(form: HTMLFormElement) { ## Clearing server errors Server errors behave like any other error once they are in the store. The next input into a field clears its message. A form-level key that belongs to no field is not attached to any input, so it stays until the next successful submit or a form reset. + + diff --git a/website/versions/v2/src/routes/v2/guides/validators.mdx b/website/versions/v2/src/routes/v2/guides/validators.mdx index 3253541..c0288ae 100644 --- a/website/versions/v2/src/routes/v2/guides/validators.mdx +++ b/website/versions/v2/src/routes/v2/guides/validators.mdx @@ -1,4 +1,6 @@ import { Title } from '@solidjs/meta'; +import AsyncValidatorDemo from '../../../components/demos/AsyncValidatorDemo'; +import CrossFieldDemo from '../../../components/demos/CrossFieldDemo'; Writing validators - solid-validation @@ -28,6 +30,8 @@ Native constraints are checked before any of your validators. An empty `required ## Async validators + + A validator may return a promise. It is awaited before the next one runs, so a slow check never races a fast one. ```ts @@ -64,3 +68,5 @@ const planChosen = () => !plan() && 'Choose a plan to continue'; ``` See [Outside a form](/v1/guides/outside-forms/). + + From 8ba1a3428f7ea2ee351d1bfd167c99ea9c91f96f Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 20:07:42 +0000 Subject: [PATCH 21/26] release: 2.0.0, with v2 as the default docs The library is 2.0.0 and targets Solid 2; its peers move to rc.9, which is the release the tree runs on. The changelog records every breaking change and says plainly that Solid 1 projects should stay on 1.x. versions.json makes v2 current, so the root redirect goes to /v2/. v1 is frozen and is not rebuilt, but its site now pins ^1.6.1 from npm instead of following the workspace, so an accidental build:all cannot build its demos against 2.x. The v2 docs and the readme now describe the v2 api. Code moves from the directives to the ref factories. The child components guide is rewritten, since it documented validateRef, which no longer exists. Troubleshooting drops the two directive sections for the failures people actually hit on v2: mismatched solid releases breaking event handlers, and errors arriving a flush later. The api reference gives the real signatures, and submit is documented as returning a boolean. One claim is corrected rather than converted: the docs said the validator accessor is read when a field is checked. It is read once, at registration, so they now say that and show where to put a condition that has to change while the form is open. No build output: run pnpm build after merging. --- changelog.md | 32 +++++++++ package.json | 6 +- readme.md | 68 +++++++++---------- website/versions.json | 5 +- website/versions/v1/package.json | 2 +- .../versions/v2/src/routes/v2/api/types.mdx | 22 +----- .../v2/src/routes/v2/api/use-form.mdx | 22 +++--- .../src/routes/v2/guides/child-components.mdx | 29 ++++---- .../v2/src/routes/v2/guides/outside-forms.mdx | 6 +- .../v2/src/routes/v2/guides/validators.mdx | 6 +- website/versions/v2/src/routes/v2/index.mdx | 10 +-- .../versions/v2/src/routes/v2/migrating.mdx | 12 +++- .../versions/v2/src/routes/v2/quick-start.mdx | 8 +-- .../v2/src/routes/v2/troubleshooting.mdx | 19 ++---- 14 files changed, 126 insertions(+), 121 deletions(-) diff --git a/changelog.md b/changelog.md index e7c4795..fee24eb 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,38 @@ All notable changes to `@sparkstone/solid-validation` will be documented in this The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.0] + +Targets Solid 2. **Projects on Solid 1 should stay on 1.x**: this release will +not run there, and 1.6.1 remains supported for Solid 1. The v1 documentation +stays published alongside the v2 docs. + +The [migration guide](https://sparkstonepdx.github.io/solid-validation/v2/migrating/) +covers each change below with before and after code. + +### Changed +- **Directives are replaced by ref factories.** Solid 2 has no `use:` + directives. `use:validate` becomes `ref={validate()}` and + `use:formSubmit={onSubmit}` becomes `ref={formSubmit(onSubmit)}`. +- **`validate` takes an accessor** returning the validator array: + `ref={validate(() => [minLength(3)])}`. +- **`submit()` returns `Promise`**: `true` when the submission went + through, `false` when validation refused or the callback returned errors. It + returned `void` before, so a caller could not tell whether it ran. +- **Cleared errors delete their key** instead of setting it to `undefined`, so + `Object.keys(errors)` lists only fields that are currently failing. +- **Errors arrive on the next flush.** Solid 2 batches store writes, so an error + is no longer in the store in the same tick as the event that caused it. + Rendering is unaffected; imperative reads and tests should wait. +- Peer dependencies are now `solid-js` and `@solidjs/web`, both `^2.0.0-rc.9`. + +### Removed +- **`validateRef`.** It existed because a directive could not be passed as a + prop. `validate` returns an ordinary ref callback, so it covers that case: + `ref={props.validate(() => [...])}`. + +--- + ## [1.6.1] ### Changed diff --git a/package.json b/package.json index 386eeca..2d51666 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sparkstone/solid-validation", - "version": "1.6.1", + "version": "2.0.0", "description": "A lightweight form validation library for Solid.js with PocketBase integration.", "type": "module", "source": "src/main.ts", @@ -72,7 +72,7 @@ "vitest": "^5.0.0" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.8", - "solid-js": "^2.0.0-rc.8" + "solid-js": "^2.0.0-rc.9", + "@solidjs/web": "^2.0.0-rc.9" } } diff --git a/readme.md b/readme.md index f7488cf..e550b8d 100644 --- a/readme.md +++ b/readme.md @@ -2,6 +2,11 @@ A lightweight and flexible validation library for Solid.js. It provides a simple API to validate form inputs, handle submission state, and manage error messages. It also supports validation outside of forms and inputs. +Full documentation, with live demos: https://sparkstonepdx.github.io/solid-validation/ + +> **Solid 1?** Install 1.x: `npm install @sparkstone/solid-validation@1`. +> 2.x requires Solid 2. The [v1 docs](https://sparkstonepdx.github.io/solid-validation/v1/) are still published. + ## Installation ```sh @@ -32,7 +37,6 @@ pnpm add @sparkstone/solid-validation - [`errors`](#errors) - [`isSubmitting`](#issubmitting) - [`isSubmitted`](#issubmitted) - - [`validateRef`](#validateref) - [`validateField`](#validatefield) - [`getFieldValue`](#getfieldvalue) @@ -68,8 +72,8 @@ function MyForm() { } return ( -
          - + + {errors.username} [min5Characters])} /> {errors.message} @@ -98,10 +102,10 @@ function MyForm() { You can validate any element, not just form inputs: ```tsx -
          +
          [myCustomValidator])} data-name='customField'>
          ``` -- When using `use:validate` on non-input elements, you **must** supply a `data-name` attribute for error tracking. +- When using `ref={validate()}` on non-input elements, you **must** supply a `data-name` attribute for error tracking. - Validation can be triggered manually using the `submit()` function, even without a form. - On validation failure, the library will automatically scroll the invalid element into view and focus it if possible. @@ -118,7 +122,7 @@ function MyComponent() { return ( <> -
          +
          [myCustomValidator])} data-name='customField' /> {errors.customField} @@ -128,18 +132,18 @@ function MyComponent() { ### Passing Validation to Child Components -`use:validate` is a Solid.js directive and cannot be passed as a prop. Use `validateRef` instead โ€” it returns a `ref`-compatible function that registers the element with the parent form's validation context. +`validate` returns an ordinary ref callback, so it can be passed down as a prop like any other value. -Pass `validateRef` down as a prop and call it in the child with any validators: +Pass `validate` down as a prop and call it in the child with any validators: ```tsx // ParentForm.tsx function ParentForm() { - const { formSubmit, validateRef, errors } = useForm(); + const { formSubmit, validate, errors } = useForm(); return ( - - + + {errors.username} @@ -152,7 +156,7 @@ function ParentForm() { import { useForm } from '@sparkstone/solid-validation'; interface UsernameFieldProps { - validateRef: ReturnType['validateRef']; + validate: ReturnType['validate']; } function UsernameField(props: UsernameFieldProps) { @@ -161,13 +165,13 @@ function UsernameField(props: UsernameFieldProps) { type='text' name='username' required - ref={props.validateRef(minLength)} + ref={props.validate(() => [minLength])} /> ); } ``` -The child component owns its own validators โ€” the parent just passes `validateRef` down without needing to know what rules each field applies. +The child component owns its own validators โ€” the parent just passes `validate` down without needing to know what rules each field applies. ## API @@ -183,23 +187,27 @@ const { formSubmit, validate } = useForm({ errorClass: 'input-error' }); ##### `validate` -`validate(ref: HTMLElement, validators?: Validator[])` +`validate(accessor?: () => Validator[]): (ref: HTMLElement) => void` -Registers an element for validation. Can be used as a directive on both form inputs and other HTML elements. Validation runs on `blur`; errors are cleared reactively on `input` once a field has been marked invalid. +Returns a ref callback that registers an element for validation, on form inputs and on other elements alike. Validation runs on `blur` and on submit, and an error clears when the field is typed into. ```tsx - + [minLength(3), isEmail])} name='email' /> + +// native constraints only + ``` -Falsy values are allowed in the validators array, enabling conditional validation: +The array is read once, when the field registers, so a condition inside it is evaluated at mount. For a rule that should switch on and off while the form is open, put the condition inside the validator, where it is read on every check: ```tsx - +const mustMatch: Validator = el => + needsMatch() && el.value !== getFieldValue('password') && 'Passwords do not match'; ``` ##### `formSubmit` -`formSubmit(ref: HTMLFormElement, callback: OnFormSubmit)` +`formSubmit(callback?: OnFormSubmit): (ref: HTMLFormElement) => void` Handles form submission. Runs all registered validations, focuses and scrolls to the first failing field, and calls the callback only if all fields pass. Automatically adds `novalidate` to the form element and clears errors on form reset. @@ -219,10 +227,12 @@ If the callback returns nothing (or `void`), all errors are cleared and `isSubmi ##### `submit` -`submit(callback: (payload?: Payload) => Promise, payload?: Payload): Promise` +`submit(callback: (payload?: Payload) => Promise, payload?: Payload): Promise` Triggers validation manually without a form element. Useful for validating arbitrary elements or building custom submission flows. Behaves the same as `formSubmit` โ€” clears errors and sets `isSubmitted` on success, or merges returned errors on failure. +Resolves to `true` when the submission went through, and `false` when validation refused or the callback returned errors. A refused submit is an ordinary outcome, not an exception, so it never rejects. + ##### `errors` `errors: Partial>` @@ -241,20 +251,6 @@ Reactive store of current validation error messages, keyed by field name (from ` `true` after a successful submission (callback returned `void`). Reset to `false` on the next input event. -##### `validateRef` - -`validateRef(...validators: Validator[]): (ref: HTMLElement) => void` - -Returns a `ref`-compatible function that registers an element with the form's validation context. Use this in place of `use:validate` when passing validation into child components as a prop. - -```tsx -// with validators - - -// without validators (relies on native constraint validation only) - -``` - ##### `validateField` `validateField(fieldName: string): Promise` diff --git a/website/versions.json b/website/versions.json index 704b4b8..974cab0 100644 --- a/website/versions.json +++ b/website/versions.json @@ -1,20 +1,19 @@ { "root": "/solid-validation/", - "current": "v1", + "current": "v2", "versions": [ { "id": "v1", "label": "v1 (Solid 1)", "library": "1.x", "path": "/solid-validation/v1/", - "source": "workspace" + "source": "npm" }, { "id": "v2", "label": "v2 (Solid 2)", "library": "2.x", "path": "/solid-validation/v2/", - "prerelease": true, "source": "workspace" } ] diff --git a/website/versions/v1/package.json b/website/versions/v1/package.json index c909c2a..bd5737e 100644 --- a/website/versions/v1/package.json +++ b/website/versions/v1/package.json @@ -17,7 +17,7 @@ "solid-js": "^1.9.4", "@sparkstone/css": "^2.0.0", "sass": "^1.80.0", - "@sparkstone/solid-validation": "workspace:^" + "@sparkstone/solid-validation": "^1.6.1" }, "devDependencies": {} } diff --git a/website/versions/v2/src/routes/v2/api/types.mdx b/website/versions/v2/src/routes/v2/api/types.mdx index 0f99360..04bb9f8 100644 --- a/website/versions/v2/src/routes/v2/api/types.mdx +++ b/website/versions/v2/src/routes/v2/api/types.mdx @@ -25,7 +25,7 @@ const hasSelection: Validator = el => `Falsy` is part of the union so a conditional entry type-checks without a cast: ```tsx - + [required, needsMatch() && mustMatch])} /> ``` ## Falsy @@ -44,26 +44,6 @@ type ValidatorResponse = MaybePromise; A message, nothing, or a promise of either. -## JSX.Directives - -The package augments Solid's directive interface: - -```ts -declare module 'solid-js' { - namespace JSX { - interface Directives { - formSubmit: (callback: HTMLFormElement) => any; - validate: boolean | Validator[]; - } - } -} -``` - -The augmentation is applied by importing anything from the package. Two things follow from these signatures: - -`validate` accepts `boolean`, which is what makes bare `use:validate` with no value valid. Passing `true` explicitly is the same as passing nothing. - -`validate` is typed as `Validator[]`, so the array does not narrow to your element. Annotate each validator with its own `Validator` to keep the element typed. ## Typing errors diff --git a/website/versions/v2/src/routes/v2/api/use-form.mdx b/website/versions/v2/src/routes/v2/api/use-form.mdx index a0c680d..74ea8ad 100644 --- a/website/versions/v2/src/routes/v2/api/use-form.mdx +++ b/website/versions/v2/src/routes/v2/api/use-form.mdx @@ -26,14 +26,14 @@ A class name toggled on any element that fails validation, alongside `aria-inval ## validate ```ts -validate(ref: HTMLElement, accessor?: () => Validator[] | Falsy): void +validate(accessor?: () => Validator[] | Falsy): (ref: HTMLElement) => void ``` -Registers an element, used as a directive. +Returns a ref callback that registers the element it is attached to. The accessor returns the validators to run after the browser's own constraints pass; with no accessor, only the native constraints apply. ```tsx - - + + [minLength(3)])} /> ``` Registration is deferred to a microtask, so a field is not queryable in the same synchronous tick it renders in. Attaches `blur` and `input` handlers by assigning `onblur` and `oninput`, which replaces any handler already assigned that way on the same element. @@ -45,13 +45,13 @@ The store key comes from `name`, falling back to `data-name`. ## formSubmit ```ts -formSubmit(ref: HTMLFormElement, accessor: () => OnFormSubmit): void +formSubmit(callback?: OnFormSubmit): (ref: HTMLFormElement) => void ``` -Takes over a form's submit event, used as a directive. +Returns a ref callback that takes over the form's submit event. The callback is passed directly rather than through an accessor: it closes over its own signals and reads them when it runs. ```tsx -
          + ``` On attach it sets `novalidate` on the form. On submit it calls `preventDefault()` and runs the same sequence as `submit`, passing the form element to your callback. On reset it clears every error. @@ -120,16 +120,16 @@ isSubmitted: () => boolean --- -## validateRef +## validate ```ts -validateRef(...validators: Validator[]): (ref: HTMLElement) => void +validate(() => [...validators: Validator[]]): (ref: HTMLElement) => void ``` -Returns a ref-compatible function that registers an element. The value form of `use:validate`, for fields inside child components. Validators are passed as arguments rather than as an array. +Returns a ref-compatible function that registers an element. The value form of `ref={validate()}`, for fields inside child components. Validators are passed as arguments rather than as an array. ```tsx - + [isCorporateAddress])} /> ``` See [Child components](/v1/guides/child-components/). diff --git a/website/versions/v2/src/routes/v2/guides/child-components.mdx b/website/versions/v2/src/routes/v2/guides/child-components.mdx index 254ef17..155b205 100644 --- a/website/versions/v2/src/routes/v2/guides/child-components.mdx +++ b/website/versions/v2/src/routes/v2/guides/child-components.mdx @@ -4,18 +4,16 @@ import { Title } from '@solidjs/meta'; # Child components -Directives are compile-time syntax, not values. `use:validate` cannot be forwarded as a prop, spread onto a child, or stored in a variable and applied later. Once a field moves into its own component, the directive stops being an option. - -`validateRef` is the same registration behind a plain ref function: +`validate` returns an ordinary ref callback, so it crosses a component boundary like any other value. Pass it down as a prop and let the child decide its own rules. ```tsx // Parent function ProfileForm() { - const { formSubmit, validateRef, errors } = useForm(); + const { formSubmit, validate, errors } = useForm(); return ( - - + + ); @@ -24,32 +22,31 @@ function ProfileForm() { ```tsx // Child -type ValidateRef = ReturnType['validateRef']; +type Validate = ReturnType['validate']; -function HandleField(props: { validateRef: ValidateRef; error?: string }) { - return ( - - ); +function HandleField(props: { validate: Validate; error?: string }) { + return [minLength(3), noSpaces])} />; } ``` - -Validators are passed as arguments rather than as an array, and the child decides what they are. The parent supplies the registration function and never learns what rules the field applies. Adding a rule to `HandleField` changes nothing in `ProfileForm`. +The parent supplies the registration function and never learns what rules the field applies. Adding a rule to `HandleField` changes nothing in `ProfileForm`. With no validators, native constraints still apply: ```tsx - + ``` +This is also why v2 has no `validateRef`. In v1, `use:validate` was a directive: compile-time syntax that could not be passed as a prop, so a second, ref-shaped entry point was needed for exactly this case. A ref factory covers both. + ## Passing errors down The `errors` store is a Solid store proxy, so reading `errors.handle` in the parent and passing the result as a prop stays reactive. Passing the whole store down also works if a child needs several keys: ```tsx - + ``` ## One useForm per form -`useForm` creates an independent store and field registry each time it is called. A child that calls `useForm` itself gets its own form, and its fields will not be checked when the parent submits. Call it once at the top of the form and pass `validateRef` down. +`useForm` creates an independent store and field registry each time it is called. A child that calls `useForm` itself gets its own form, and its fields are not checked when the parent submits. Call it once at the top of the form and pass `validate` down. diff --git a/website/versions/v2/src/routes/v2/guides/outside-forms.mdx b/website/versions/v2/src/routes/v2/guides/outside-forms.mdx index 3127893..abfbba9 100644 --- a/website/versions/v2/src/routes/v2/guides/outside-forms.mdx +++ b/website/versions/v2/src/routes/v2/guides/outside-forms.mdx @@ -6,7 +6,7 @@ import { Title } from '@solidjs/meta'; Not every required choice is an input. A plan picker, a map marker, a signature pad and a file dropzone all have a valid and an invalid state, and none of them are form controls. -`use:validate` works on any element. Give it a `data-name` so its errors have a key, and call `submit()` yourself instead of relying on a form: +`ref={validate()}` works on any element. Give it a `data-name` so its errors have a key, and call `submit()` yourself instead of relying on a form: ```tsx function PlanPicker() { @@ -17,7 +17,7 @@ function PlanPicker() { return ( <> -
          +
          [planChosen])} data-name='plan'> {name => } @@ -56,7 +56,7 @@ function choose(name: string) { ## Mixing both -Registered elements all live in the same form, whether they are inputs or not. A `
          ` containing a `div use:validate` validates both on submit, and a single `errors` store covers them. +Registered elements all live in the same form, whether they are inputs or not. A `` containing a `div ref={validate()}` validates both on submit, and a single `errors` store covers them. ## Unmounted elements diff --git a/website/versions/v2/src/routes/v2/guides/validators.mdx b/website/versions/v2/src/routes/v2/guides/validators.mdx index c0288ae..c024b81 100644 --- a/website/versions/v2/src/routes/v2/guides/validators.mdx +++ b/website/versions/v2/src/routes/v2/guides/validators.mdx @@ -23,7 +23,7 @@ Return a string to fail. Return anything falsy to pass, which includes `undefine Validators run in array order and stop at the first failure. Put the cheap checks first: ```tsx - + [minLength(3), isUsernameAvailable])} /> ``` Native constraints are checked before any of your validators. An empty `required` field never reaches your code, so you do not need to handle the empty case yourself. @@ -49,7 +49,7 @@ There is no debounce built in. Since validators only run on blur and on submit, Falsy entries in the array are skipped, so a rule can be switched off inline without building the array conditionally: ```tsx - + [isRequired, needsConfirmation() && mustMatchPassword])} /> ``` ## The message reaches the element too @@ -64,7 +64,7 @@ A validator receives whatever element it was attached to. On a `div`, `el.value` const [plan, setPlan] = createSignal(null); const planChosen = () => !plan() && 'Choose a plan to continue'; -
          ; +
          [planChosen])} data-name='plan' />; ``` See [Outside a form](/v1/guides/outside-forms/). diff --git a/website/versions/v2/src/routes/v2/index.mdx b/website/versions/v2/src/routes/v2/index.mdx index 824b74c..a1b9961 100644 --- a/website/versions/v2/src/routes/v2/index.mdx +++ b/website/versions/v2/src/routes/v2/index.mdx @@ -7,16 +7,16 @@ import SubmitDemo from '../../components/demos/SubmitDemo'; -That form is running the real library. Two directives, one store: +That form is running the real library. Two ref factories, one store: ```tsx const { formSubmit, validate, errors, isSubmitting } = useForm(); - - + + {errors.email} - + [minLength(3), noSpaces])} /> {errors.handle} ``` @@ -25,7 +25,7 @@ const { formSubmit, validate, errors, isSubmitting } = useForm(); `required`, `type="email"`, `minlength` and `pattern` already work in every browser. What browsers do not give you is the error message in a place you can style, position and translate. `useForm` runs the native check, falls through to your own validators when the native check passes, and writes whatever failed into a reactive store keyed by field name. -There is no schema to declare and no field registry to keep in sync. A field joins the form by being marked with `use:validate`, and it leaves when it unmounts. +There is no schema to declare and no field registry to keep in sync. A field joins the form by being marked with `ref={validate()}`, and it leaves when it unmounts. ## What it does not do diff --git a/website/versions/v2/src/routes/v2/migrating.mdx b/website/versions/v2/src/routes/v2/migrating.mdx index 79b7253..0ef7096 100644 --- a/website/versions/v2/src/routes/v2/migrating.mdx +++ b/website/versions/v2/src/routes/v2/migrating.mdx @@ -37,13 +37,21 @@ directive compiler used to insert that wrapper for you. +ref={validate(() => [minLength(3), noSpaces])} ``` -The wrapper is what makes a conditional rule work, because the array is read -when the field is checked rather than when it mounts: +The directive compiler used to insert that wrapper for you. The array is read +once, when the field registers, so a condition inside it is evaluated at mount: ```tsx [isRequired, needsMatch() && mustMatch])} /> ``` +To change a field's rules later, put the condition inside the validator, where +it is read every time the field is checked: + +```ts +const mustMatchWhenNeeded: Validator = el => + needsMatch() && el.value !== getFieldValue('password') && 'Passwords do not match'; +``` + `formSubmit` takes the callback directly. Your callback closes over its own signals and reads them when it runs, so there is nothing to defer. diff --git a/website/versions/v2/src/routes/v2/quick-start.mdx b/website/versions/v2/src/routes/v2/quick-start.mdx index 40d790a..1ec9c5b 100644 --- a/website/versions/v2/src/routes/v2/quick-start.mdx +++ b/website/versions/v2/src/routes/v2/quick-start.mdx @@ -60,11 +60,11 @@ That is the whole API for a normal form. Here it is running: ## What each piece does -`useForm()` returns everything the form needs. Destructuring it is required, not stylistic: `use:validate` only compiles when `validate` exists as a variable in scope. +`useForm()` returns everything the form needs. Destructuring it is required, not stylistic: `ref={validate()}` only compiles when `validate` exists as a variable in scope. -`use:validate` puts a field in the form. With no value it checks the browser's own rules, which is where `required` and `type="email"` are handled. With an array it runs your validators after those pass. +`ref={validate()}` puts a field in the form. With no value it checks the browser's own rules, which is where `required` and `type="email"` are handled. With an array it runs your validators after those pass. -`use:formSubmit` takes over the submit event. Your callback runs only once every field passes, and receives the form element. +`formSubmit(onSubmit)` returns a ref that takes over the form's submit event. Your callback runs only once every field passes, and receives the form element. `errors` is a store keyed by each field's `name`. Render `errors.email` wherever the message should appear. @@ -97,7 +97,7 @@ const { validate } = useForm({ errorClass: 'is-invalid' }); ## Next -Server errors, async checks, and fields outside a form are all in the guides. If `use:validate` reports a type error or seems to do nothing, see [Troubleshooting](/v1/troubleshooting). +Server errors, async checks, and fields outside a form are all in the guides. If `ref={validate()}` reports a type error or seems to do nothing, see [Troubleshooting](/v1/troubleshooting). Calling `submit()` yourself, without a form element: diff --git a/website/versions/v2/src/routes/v2/troubleshooting.mdx b/website/versions/v2/src/routes/v2/troubleshooting.mdx index 32d6858..027f3c5 100644 --- a/website/versions/v2/src/routes/v2/troubleshooting.mdx +++ b/website/versions/v2/src/routes/v2/troubleshooting.mdx @@ -4,24 +4,17 @@ import { Title } from '@solidjs/meta'; # Troubleshooting -## use:validate does nothing +## Click handlers do nothing -Directives are compiled away by `babel-preset-solid`, so they need Solid's JSX transform. They work in any project built with `vite-plugin-solid`, SolidStart, or Astro with `@astrojs/solid-js`. They do not work in a project running only the TypeScript JSX transform. +If `onClick` and other event handlers never fire, but a form still submits, your Solid packages are from different releases. Solid 2 ships `solid-js`, `@solidjs/web`, `@solidjs/vite-plugin` and `@solidjs/router` together, and mixing releases breaks event delegation: the compiler and the runtime disagree on the property a handler is stored under, so the handler is attached and never read. -If the form renders but no field is ever checked, this is almost always why. +Keep all four on the same release. Their `peerDependencies` say which one each expects. -## TypeScript says use:validate does not exist +## Errors appear a moment after the event -The directive types come from the package itself, so importing `useForm` is what registers them. If the error persists, your `tsconfig.json` is not pointing JSX at Solid: +Solid 2 batches store writes, so an error lands on the next flush rather than in the same tick as the blur that caused it. Anything reading `errors.email` in JSX updates when the write settles, so rendering is unaffected. -```json -{ - "compilerOptions": { - "jsx": "preserve", - "jsxImportSource": "solid-js" - } -} -``` +It matters only when reading the store imperatively straight after an event, and in tests. Assert with `waitFor` rather than immediately after the action. ## Errors land under the wrong key From 9619e26b2372d7622de9d6405282371fe64b0bde Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 20:22:25 +0000 Subject: [PATCH 22/26] test: pin down when the validator accessor is read Two tests switch a conditional rule on and off after the field mounts. Both fail against the current library, which reads the accessor once during registration, and both pass when the read moves to check time. They were checked in both directions before committing, so they fail for that reason and no other. Signal writes are batched in Solid 2 as well as store writes, so each test lets its signal flush before the blur that reads it; without that, the switched-on case fails even with the fix in place. Also fixes the two submission-signal tests. They failed on an effect callback returning seen.push(...), which is a length rather than a cleanup. The [isSubmitting, isSubmitted] sequence they assert is intact under Solid 2: [false, false], then [true, false] while the callback runs, then [false, true]. --- test/solid2-timing.test.tsx | 8 +++-- test/validators.test.tsx | 59 +++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/test/solid2-timing.test.tsx b/test/solid2-timing.test.tsx index 6ab8926..c985478 100644 --- a/test/solid2-timing.test.tsx +++ b/test/solid2-timing.test.tsx @@ -318,7 +318,9 @@ describe('submission signals', () => { const { formSubmit, validate, isSubmitting, isSubmitted } = useForm(); createEffect( () => [isSubmitting(), isSubmitted()] as [boolean, boolean], - pair => seen.push(pair), + pair => { + seen.push(pair); + }, ); return (
          pending.promise)} data-testid='form'> @@ -346,7 +348,9 @@ describe('submission signals', () => { const { formSubmit, validate, isSubmitting } = useForm(); createEffect( () => isSubmitting(), - value => seen.push(value), + value => { + seen.push(value); + }, ); return ( {})} data-testid='form'> diff --git a/test/validators.test.tsx b/test/validators.test.tsx index 871380b..1f01865 100644 --- a/test/validators.test.tsx +++ b/test/validators.test.tsx @@ -1,5 +1,6 @@ import { render, screen } from '@solidjs/testing-library'; import { describe, expect, it, vi } from 'vitest'; +import { createSignal } from 'solid-js'; import { useForm, type Validator } from '../src/main'; import { asyncValidator, blur, registered, typeInto, waitFor } from './helpers'; @@ -144,3 +145,61 @@ describe('native constraints', () => { expect(custom).toHaveBeenCalledTimes(1); }); }); + +describe('validator accessor', () => { + // The accessor exists so the array can depend on reactive state. These pin + // down when it is read: if only at registration, a condition inside it is + // frozen at mount and flipping the signal changes nothing. + function Conditional(props: { on: () => boolean }) { + const { validate, errors } = useForm(); + const alwaysFails: Validator = () => 'Conditional rule failed'; + return ( + <> + [props.on() && alwaysFails])} + data-testid='field' + /> + {errors.field} + + ); + } + + it('applies a rule that is switched on after the field mounts', async () => { + const [on, setOn] = createSignal(false); + render(() => ); + await registered(); + + await blur(screen.getByTestId('field')); + expect(screen.getByTestId('error')).toBeEmptyDOMElement(); + + // Signal writes are batched in Solid 2 as well, so let this one flush + // before the blur reads it. + setOn(true); + await new Promise(resolve => setTimeout(resolve, 0)); + await blur(screen.getByTestId('field')); + + await waitFor(() => + expect(screen.getByTestId('error')).toHaveTextContent('Conditional rule failed'), + ); + }); + + it('stops applying a rule that is switched off after the field mounts', async () => { + const [on, setOn] = createSignal(true); + render(() => ); + await registered(); + + await blur(screen.getByTestId('field')); + await waitFor(() => + expect(screen.getByTestId('error')).toHaveTextContent('Conditional rule failed'), + ); + + setOn(false); + await new Promise(resolve => setTimeout(resolve, 0)); + await typeInto(screen.getByTestId('field') as HTMLInputElement, 'x'); + await blur(screen.getByTestId('field')); + + await waitFor(() => expect(screen.getByTestId('error')).toBeEmptyDOMElement()); + }); +}); From be638cd9b57537e82b22140a12168d97327d0f80 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 14:02:33 -0700 Subject: [PATCH 23/26] fix to match tests --- pnpm-lock.yaml | 13 +++++++++++-- src/main.ts | 16 ++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79082c1..7bd5d4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,8 +72,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 '@sparkstone/solid-validation': - specifier: workspace:^ - version: link:../../.. + specifier: ^1.6.1 + version: 1.6.1(solid-js@1.9.15) astro: specifier: ^5.1.0 version: 5.18.2(@types/node@24.13.5)(lightningcss@1.33.0)(rollup@4.63.3)(sass@1.104.1)(typescript@7.0.2)(yaml@2.9.1) @@ -1887,6 +1887,11 @@ packages: resolution: {integrity: sha512-G8eZzWkf3PwSWXeMISHDiChvdkfrY5hOlrWzaLAEpBZtsw849JTsIGCjj5ja+8hEez0H27HgelnrirSqiemrdg==, tarball: https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5} version: 2.0.0 + '@sparkstone/solid-validation@1.6.1': + resolution: {integrity: sha512-5LJJjFYFC1GN9U6fk0L7IK3oLMNA/wNjaL5KI8DeeKQDRdWvpShTRsjWFKaQMOor7DLhIaJhosaKLqG+u8+iWQ==} + peerDependencies: + solid-js: ^1.9.4 + '@swc/helpers@0.5.23': resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} @@ -5584,6 +5589,10 @@ snapshots: '@sparkstone/css@https://pkg.pr.new/sparkstonepdx/css/@sparkstone/css@43cdfe5': {} + '@sparkstone/solid-validation@1.6.1(solid-js@1.9.15)': + dependencies: + solid-js: 1.9.15 + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 diff --git a/src/main.ts b/src/main.ts index 02eba48..34eb795 100644 --- a/src/main.ts +++ b/src/main.ts @@ -69,10 +69,14 @@ export function useForm({ errorClass = '' } = {}) { (ref: Element) => { queueMicrotask(() => { let name = ref.name ?? ref.dataset.name; - const accessorValue = accessor(); - const validators = Array.isArray(accessorValue) ? accessorValue : []; let config; - fields[name] = config = { element: ref, validators }; + fields[name] = config = { + element: ref, + get validators() { + const accessorValue = accessor(); + return Array.isArray(accessorValue) ? accessorValue : []; + }, + }; ref.onblur = () => { setIsSubmitted(false); return checkValid(config, setErrors, errorClass)(); @@ -133,10 +137,10 @@ export function useForm({ errorClass = '' } = {}) { for (const name in callbackResult) { if (!(name in fields)) continue; fields[name]!.element.setAttribute('aria-invalid', 'true'); - setErrors(draft => { - draft[name] = callbackResult[name]; - }); } + setErrors(draft => { + Object.assign(draft, callbackResult); + }); } else { clearErrors(); setIsSubmitted(true); From 975370041ce9736f45dc3096160043534017446a Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 21:03:40 +0000 Subject: [PATCH 24/26] test: fix the three remaining solid 2 failures All three were test problems rather than library bugs. The remount test set a signal false then true in the same tick. Solid 2 batches those into no change, so Show never unmounted and the element was the same one. It flushes between the two writes now. The no-owner test called validate(input), the v1 directive signature. In v2 validate is a ref factory, so that passed the input as the accessor and never registered anything; submit then had no fields and ran the callback. It calls validate()(input). The constructor test asserted that key is dropped, which was Solid 1.9.15 behaviour. Solid 2 stores it as an ordinary key, so the expectation follows, and the test is renamed to say what it now checks. --- test/solid2-store.test.tsx | 8 +++++--- test/solid2-timing.test.tsx | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/test/solid2-store.test.tsx b/test/solid2-store.test.tsx index 317d456..a9b9d9d 100644 --- a/test/solid2-store.test.tsx +++ b/test/solid2-store.test.tsx @@ -283,14 +283,16 @@ describe('field names that stress the proxy', () => { // Divergence 2: `constructor` is passed straight through to the target, so the // write is silently dropped. The field is still marked invalid in the DOM, so // the failure mode is an invalid input with no reachable message. - it('never stores an error under "constructor"', async () => { + // Solid 1.9.4 stored this key, 1.9.15 dropped it, and Solid 2 stores it again + // as an ordinary key. Pinned here so the next change is noticed. + it('stores an error under "constructor" like any other key', async () => { const errors = nameProbe('constructor'); await registered(); await blur(screen.getByTestId('field')); - expect(typeof errors().constructor).toBe('function'); - expect(Object.keys(errors())).toHaveLength(0); + expect(typeof errors().constructor).toBe('string'); + expect(Object.keys(errors())).toContain('constructor'); expect(screen.getByTestId('field')).toHaveAttribute('aria-invalid', 'true'); }); diff --git a/test/solid2-timing.test.tsx b/test/solid2-timing.test.tsx index c985478..a993b1f 100644 --- a/test/solid2-timing.test.tsx +++ b/test/solid2-timing.test.tsx @@ -1,5 +1,5 @@ import { render, screen } from '@solidjs/testing-library'; -import { Show, createEffect, createSignal } from 'solid-js'; +import { Show, createEffect, createSignal, flush } from 'solid-js'; import { describe, expect, it, vi } from 'vitest'; import { useForm, type Validator } from '../src/main'; import { @@ -85,6 +85,7 @@ describe('registration deferral', () => { const first = screen.getByTestId('toggle'); setVisible(false); + flush(); setVisible(true); await registered(); @@ -158,7 +159,7 @@ describe('ownership and disposal', () => { input.name = 'loose'; input.required = true; document.body.append(input); - validate(input); + validate()(input); await registered(); await submit(callback); From 8794ffc726ef4216511a4b6fa8122fe3b69d0c70 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 21:17:47 +0000 Subject: [PATCH 25/26] ci: continuous releases and docs previews Mirrors the workflows in the css repo. Continuous Releases publishes each push and pull request to pkg.pr.new; Docs Preview deploys each pull request's docs to its own surge.sh domain, comments the link, and tears it down on close. Three differences from the css repo, each commented in place: - Continuous Releases runs the test suite before publishing, since this library has one. - The docs build is pnpm --dir website build; the root build is the library only. - The site is built for /solid-validation/, so the surge deploy nests the build one directory down and adds a root page that forwards to it. pnpm is pinned through packageManager, and pkg-pr-new and surge are dev dependencies so CI runs them from the lockfile. The lockfile is not in this commit: run pnpm install and commit it before these workflows can run with --frozen-lockfile. --- .github/workflows/docs-preview.yml | 131 +++++++++++++++++++++++++++++ .github/workflows/pkg-pr-new.yml | 48 +++++++++++ .gitignore | 3 + package.json | 3 + 4 files changed, 185 insertions(+) create mode 100644 .github/workflows/docs-preview.yml create mode 100644 .github/workflows/pkg-pr-new.yml diff --git a/.github/workflows/docs-preview.yml b/.github/workflows/docs-preview.yml new file mode 100644 index 0000000..df4296e --- /dev/null +++ b/.github/workflows/docs-preview.yml @@ -0,0 +1,131 @@ +name: ๐Ÿ“š Docs Preview + +# Publishes each pull request's docs to its own surge.sh domain, comments the +# link on the PR, and tears the site down when the PR closes. Pair it with the +# pkg.pr.new comment from Continuous Releases and a PR has both an installable +# package and the docs that describe it. +# +# Needs one repository secret, SURGE_TOKEN: run `npx surge token` locally. + +on: + pull_request: + types: [opened, synchronize, reopened, closed] + +permissions: + contents: read + pull-requests: write + +concurrency: + group: docs-preview-${{ github.event.pull_request.number }} + cancel-in-progress: true + +env: + DOMAIN: sparkstonepdx-solid-validation-pr-${{ github.event.pull_request.number }}.surge.sh + +jobs: + deploy: + name: "๐Ÿ“š Deploy docs preview" + # Pull requests from forks get no secrets, so they can't deploy. + if: >- + github.event.action != 'closed' && + github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + # matches packageManager in package.json + version: 12.4.2 + + - name: Use Node.js 24 + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + # The root build is the library only; the docs build lives in website/ + # and builds the library itself first. It writes the newest version and + # the root index into docs/, next to the frozen v1 already committed. + - name: Build + run: pnpm --dir website build + + # The site is built for /solid-validation/, the path GitHub Pages serves + # it under, but a surge domain serves from its root. Placing the build + # one directory down keeps every path valid, and a root page forwards. + - name: Stage for surge + run: | + mkdir -p surge/solid-validation + cp -r docs/. surge/solid-validation/ + cat > surge/index.html <<'HTML' + + + + solid-validation docs + HTML + + - name: Deploy to surge.sh + run: pnpm exec surge ./surge "$DOMAIN" + env: + SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }} + + - name: Comment the preview link + uses: actions/github-script@v7 + with: + script: | + const marker = ''; + const body = `${marker}\n๐Ÿ“š Docs preview: https://${process.env.DOMAIN}/solid-validation/\n\nBuilt from ${context.payload.pull_request.head.sha.slice(0, 7)}.`; + const { owner, repo } = context.repo; + const issue_number = context.payload.pull_request.number; + const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number }); + const existing = comments.find(c => c.body?.startsWith(marker)); + if (existing) await github.rest.issues.updateComment({ owner, repo, comment_id: existing.id, body }); + else await github.rest.issues.createComment({ owner, repo, issue_number, body }); + + teardown: + name: "๐Ÿงน Tear down docs preview" + if: >- + github.event.action == 'closed' && + github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 12.4.2 + + - name: Use Node.js 24 + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Tear down surge.sh site + run: pnpm exec surge teardown "$DOMAIN" + env: + SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }} + + - name: Mark the comment as removed + uses: actions/github-script@v7 + with: + script: | + const marker = ''; + const { owner, repo } = context.repo; + const issue_number = context.payload.pull_request.number; + const comments = await github.paginate(github.rest.issues.listComments, { owner, repo, issue_number }); + const existing = comments.find(c => c.body?.startsWith(marker)); + if (existing) { + await github.rest.issues.updateComment({ + owner, repo, comment_id: existing.id, + body: `${marker}\n๐Ÿ“š Docs preview removed: the pull request was closed.`, + }); + } diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml new file mode 100644 index 0000000..90ac57c --- /dev/null +++ b/.github/workflows/pkg-pr-new.yml @@ -0,0 +1,48 @@ +name: โšก๏ธ Continuous Releases + +on: + push: + branches: + - main + merge_group: + pull_request: + +jobs: + cr: + name: "โšก๏ธ Continuous Releases" + + strategy: + fail-fast: false + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + # matches packageManager in package.json + version: 12.4.2 + + - name: Use Node.js 24 + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + # Unlike the css repo, this library has a test suite, so a build that + # fails it is not published as an installable preview. + - name: Test + run: pnpm test + + - name: Build + run: pnpm run build + + # pkg.pr.new asks that CI runs it from the lockfile rather than through + # dlx, so the version is pinned with everything else. Run from the root, + # it publishes the library only: the docs sites are private. + - name: Release + run: pnpm exec pkg-pr-new publish --compact diff --git a/.gitignore b/.gitignore index e487bf2..f346aa9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ coverage # The built site is committed: github pages serves the repo's /docs folder. !/docs + +# Staging directory for surge.sh docs previews, built in CI. +surge diff --git a/package.json b/package.json index 2d51666..22e20a1 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "2.0.0", "description": "A lightweight form validation library for Solid.js with PocketBase integration.", "type": "module", + "packageManager": "pnpm@12.4.2", "source": "src/main.ts", "types": "./dist/main.d.ts", "exports": { @@ -65,7 +66,9 @@ "@typescript/typescript6": "^6.0.2", "@vitest/coverage-v8": "^5.0.0", "jsdom": "^30.0.1", + "pkg-pr-new": "^0.0.88", "solid-js": "2.0.0-rc.9", + "surge": "^0.44.3", "typescript": "^7.0.2", "vite": "^8.2.2", "vite-plugin-dts": "^5.1.0", From 947004496bbc5a4be278b9dfad61b6e93bbe7af0 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Mon, 21 Sep 2026 17:45:23 -0700 Subject: [PATCH 26/26] install --- pnpm-lock.yaml | 377 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 377 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7bd5d4f..831f024 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,161 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.4.2 + version: 12.4.2 + +packages: + + '@pnpm/exe.android-arm64@12.4.2': + resolution: {integrity: sha512-E255MbcQ0V1577M2BV0ajWuP7KmTPYA0jqZnk3rK6Lq3kTvZWulMMb7iqRmnLsQbyWTkMEB2CfyM70loVDA8xg==} + cpu: [arm64] + os: [android] + + '@pnpm/exe.android-x64@12.4.2': + resolution: {integrity: sha512-J1pSeCUwuKxMG70ZzpWn8JzElxiEa8NN/3N0SlZRtU2xbztChaJCKF3HaBNIj9yPfeofWzJo/lwNvDDjraQuZw==} + cpu: [x64] + os: [android] + + '@pnpm/exe.darwin-arm64@12.4.2': + resolution: {integrity: sha512-A0WDo8iErfZBXgrLseQxw8i8Y9ctUpOEl/Uu+cubnTzpD8tT9ykIB548L8YTM2WD4OS+ZOHSxy8aGZcvKq8PaQ==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.4.2': + resolution: {integrity: sha512-MSgJdovBWHcb5DEOvfPH9yNi/T5O1Xa4ess+E1ESGo/5yuty7S4JoiIjami+fsNXfnoQMlwsMUqYU4zAvBcNCw==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.freebsd-x64@12.4.2': + resolution: {integrity: sha512-h2YumlQSNvgbRPv+RXwABohX65f9bOBZn+jMIt7bFDISZPCzQ+Nvpt6Awbp4ip5PwQgYxbu5iREJ1fHE39Fm8A==} + cpu: [x64] + os: [freebsd] + + '@pnpm/exe.linux-arm64-musl@12.4.2': + resolution: {integrity: sha512-LwSEtSEDTv6S51YLs3YvSkPyun/QmfMic1UGICUkPWFu6ByP43RdMlkKvmVkfGhAYCpnxO057vrmyJqtfZrPCA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.4.2': + resolution: {integrity: sha512-2dSiDXyhx+RTHsewxex8f/jVjqQXWJ2oow4kCVHEWdZKeBpgMxvZ6fHkTAUBJXgqhbKIDHvuNlZBP7gJfUWL5A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-ppc64@12.4.2': + resolution: {integrity: sha512-8Itc+jQk+MTz04LS9D1RcH+VctAWmzM4l1cJQ+Sx7pAJNo7EKHdRMbC0Tok1jyQ7eEHNJZD5EleYneZqWfZM+g==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-riscv64@12.4.2': + resolution: {integrity: sha512-hleOeqhTVpH+z9RVMGnxvU4ZnrkBUClWjCbHD9u6kwyqhGSpevoU1wTGish+CBRhmIgMAy9pAfFpqhbAKOKNfw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-s390x@12.4.2': + resolution: {integrity: sha512-LAsQRRdP9aToENR6dtcIJ9l+e1zMYOX0tQcLGpRyLPVBQcYRLlvAPcmDshsiIHQjp05SDa9FI0czX1ZQ1a7a/A==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.4.2': + resolution: {integrity: sha512-kzfzH2/0BWdTABK14Yj5a1xsdkTEQUp2eXEPNakaD9jKL025lq3hyaKHIz/gIZaPDMe/1bFFK/En4ztFlbBJxw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.4.2': + resolution: {integrity: sha512-/pbt0UVTa8NMDhzOWLQRfZ6G9ROKXlJPZtx845BqyWfc7hCrWXhTLBd70yO2y8+E+IWN3oHM1s/JsIQNGk1yvg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.4.2': + resolution: {integrity: sha512-PsW19e4dAUNpZ0cS9flaxFuAmpt2dKlH/Vvi8TZ4qyJjjQzue/CEsWm+6wKVP4CJ7IT8RdL4qh+soOPWIgF2Zw==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.4.2': + resolution: {integrity: sha512-+xGoeE0g55ztWvl8i5QqdmNfW3nIrTVcoQrNshEOwxthm9Ag48oXton3uxOA3/SANyz5AXexEjj2KO20NnOrEw==} + cpu: [x64] + os: [win32] + + pnpm@12.4.2: + resolution: {integrity: sha512-CK3GYTGAJ1x8ntraOdzwjJxhrU5+rzMKTzRh8QKw+QdCNFTRF/mOctR/7wYWBwZE17/8lzpqV/UJCm18NosHyQ==} + engines: {node: '>=18.*'} + hasBin: true + +snapshots: + + '@pnpm/exe.android-arm64@12.4.2': + optional: true + + '@pnpm/exe.android-x64@12.4.2': + optional: true + + '@pnpm/exe.darwin-arm64@12.4.2': + optional: true + + '@pnpm/exe.darwin-x64@12.4.2': + optional: true + + '@pnpm/exe.freebsd-x64@12.4.2': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.4.2': + optional: true + + '@pnpm/exe.linux-arm64@12.4.2': + optional: true + + '@pnpm/exe.linux-ppc64@12.4.2': + optional: true + + '@pnpm/exe.linux-riscv64@12.4.2': + optional: true + + '@pnpm/exe.linux-s390x@12.4.2': + optional: true + + '@pnpm/exe.linux-x64-musl@12.4.2': + optional: true + + '@pnpm/exe.linux-x64@12.4.2': + optional: true + + '@pnpm/exe.win32-arm64@12.4.2': + optional: true + + '@pnpm/exe.win32-x64@12.4.2': + optional: true + + pnpm@12.4.2: + optionalDependencies: + '@pnpm/exe.android-arm64': 12.4.2 + '@pnpm/exe.android-x64': 12.4.2 + '@pnpm/exe.darwin-arm64': 12.4.2 + '@pnpm/exe.darwin-x64': 12.4.2 + '@pnpm/exe.freebsd-x64': 12.4.2 + '@pnpm/exe.linux-arm64': 12.4.2 + '@pnpm/exe.linux-arm64-musl': 12.4.2 + '@pnpm/exe.linux-ppc64': 12.4.2 + '@pnpm/exe.linux-riscv64': 12.4.2 + '@pnpm/exe.linux-s390x': 12.4.2 + '@pnpm/exe.linux-x64': 12.4.2 + '@pnpm/exe.linux-x64-musl': 12.4.2 + '@pnpm/exe.win32-arm64': 12.4.2 + '@pnpm/exe.win32-x64': 12.4.2 + +--- lockfileVersion: '9.0' settings: @@ -38,9 +196,15 @@ importers: jsdom: specifier: ^30.0.1 version: 30.1.0 + pkg-pr-new: + specifier: ^0.0.88 + version: 0.0.88 solid-js: specifier: 2.0.0-rc.9 version: 2.0.0-rc.9 + surge: + specifier: ^0.44.3 + version: 0.44.3 typescript: specifier: ^7.0.2 version: 7.0.2 @@ -321,6 +485,10 @@ packages: resolution: {integrity: sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==} engines: {node: '>=18'} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@csstools/color-helpers@6.1.1': resolution: {integrity: sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==} engines: {node: '>=20.19.0'} @@ -1000,6 +1168,10 @@ packages: '@internationalized/number@3.6.8': resolution: {integrity: sha512-8UmMFia46DUt+k97zKd9fKWXcWHR+k8ae3eYzILETuT2KbIvLyOfac7zesw+sJdRAAZ7Q9pM1Mk22aXp2LD0Ig==} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -2316,10 +2488,17 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chartscii@4.0.3: + resolution: {integrity: sha512-nVTuqmt+z/U/rLgf3bGruQRKPDnshfmWFZ5ol1HygAB94MT02GX1N4pwe31KaWgovhYYmI/xhdXEHyGAVFe3Sw==} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + ci-info@4.4.0: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} @@ -2328,6 +2507,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2349,6 +2532,10 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2739,9 +2926,20 @@ packages: http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + human-readable-numbers@0.9.5: + resolution: {integrity: sha512-VC1uYLm7FR+4UkLaQdXPLodz7xTVLBte3X6iMCYK/uPJywoHyEZfR40+kCN4YqYd+FNCPJAJNYv2CSMvAprgsQ==} + i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + ignore@7.0.9: + resolution: {integrity: sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==} + engines: {node: '>= 4'} + immutable@5.1.9: resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} @@ -2775,6 +2973,9 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-domain@0.0.1: + resolution: {integrity: sha512-hLm9uZUDm/sk0+xZgxyJluSf4B37sg3ivzv4ndTxNCAMnWFUUsHh1u4eh2maEcEvQl3mc65a9pJ/KURGItbLIg==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3165,9 +3366,23 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + moniker@0.1.2: + resolution: {integrity: sha512-Uj9iV0QYr6281G+o0TvqhKwHHWB2Q/qUTT4LPQ3qDGc0r8cbMuqQjRXPZuVZ+gcL7APx+iQgE8lcfWPrj1LsLA==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -3175,6 +3390,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + nanoid@3.3.19: resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3184,6 +3402,9 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} + netrc@0.1.4: + resolution: {integrity: sha512-ye8AIYWQcP9MvoM1i0Z2jV0qed31Z8EWXYnyGNkiUAd+Fo8J+7uy90xTV8g/oAbhtjkY7iZbNTizQaXdKUuwpQ==} + nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} @@ -3281,6 +3502,10 @@ packages: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} + pkg-pr-new@0.0.88: + resolution: {integrity: sha512-Xc6PMJ2gher0WZP+rtjefFk26hIb7V1PTLL30bmy1Z2vsRmSvqiss7Ag1XUdyplTGYzIlFNJp4L3vMNmK44N6g==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -3319,6 +3544,10 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3346,6 +3575,10 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + read@1.0.5: + resolution: {integrity: sha512-hDLATrzYLoMu23c/69pMC6u3fO3Y0qLTIygJkEZHLOn+AO2gSapu6QgrgwX9ehyVtaRoZVZbF4IuiZPPRdGgdg==} + engines: {node: '>=0.8'} + readdirp@5.1.1: resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} engines: {node: '>= 20.19.0'} @@ -3566,6 +3799,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -3595,17 +3831,43 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + styl3@3.1.1: + resolution: {integrity: sha512-WRTBm/bs2ZfkbIQTk59xfJ0x/X4VKUSm/3u6egDFHNrYCcXYfWauBgq129whvYREvEOlOPQjDu1TARHyxCzCjQ==} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + surge-ignore@0.3.0: + resolution: {integrity: sha512-tFq03FSTC2w6iVyJkzgFzwa2+lW4DZheIvStTO4Vn82Mk1x9aJyt/WUz5sKZE9woCn5dPB7nLARVFqJXDv5trA==} + + surge-sdk@0.20.0: + resolution: {integrity: sha512-ARgx8F64NhkxzuEsvGAZeXWPnsOr9hWW3W44au/nSFJLnL3s0o1K9KGBU2j9tBUa8xz7klolFRvbV8gzaiEMVQ==} + engines: {node: '>=18.13'} + + surge-stream@0.20.0: + resolution: {integrity: sha512-omvx31wB1xGfoFb2GTiWDjyzk5pEjgRIUZnlwfkfJtbH2HQv3oEwWy75BPA7i/vNjoqmu45ZJR54LCNHsF+4hw==} + engines: {node: '>=18.13'} + + surge@0.44.3: + resolution: {integrity: sha512-yC6Io4d6RuJ2OcWf8BghKHGvUOXsq4SvavWohC6zB4gkj849nzDek1FKpsaZfRLwwF3mxhrlNozAAoC2qfG4rA==} + engines: {node: '>=18.13'} + hasBin: true + svgo@4.1.0: resolution: {integrity: sha512-bkxnTg1kSU0guhIBmibA6UUhrQmPVA1XsQLN+ylCd+UWzbnLkySOcXpyk1mrl05f+pcaCx2eHb+sp6BgMZWX+Q==} engines: {node: '>=16'} hasBin: true + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} + engines: {node: '>=18'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -3853,6 +4115,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + url-parse-as-address@1.0.0: + resolution: {integrity: sha512-1WJ8YX1Kcec9wgxy8d/ATzGP1ayO6BRnd3iB6NlM+7cOnn6U8p5PKppRTCPLobh3CSdJ4d0TdPjopzyU2KcVFw==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4067,6 +4332,10 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} + xbytes@1.9.1: + resolution: {integrity: sha512-29E0ygMFWrM5JW2W1ypmezjyR2FOS5aCszdLe620ymSJBoZzL0/RCLJKCoUFu3DfQGhZ/FWykEBp5dfEy6+hjA==} + engines: {node: '>=1'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -4080,6 +4349,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@2.9.1: resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} engines: {node: '>= 14.6'} @@ -4388,6 +4661,9 @@ snapshots: dependencies: fontkitten: 1.0.3 + '@colors/colors@1.5.0': + optional: true + '@csstools/color-helpers@6.1.1': {} '@csstools/css-calc@3.4.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': @@ -4820,6 +5096,10 @@ snapshots: dependencies: '@swc/helpers': 0.5.23 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.6.0 @@ -6061,14 +6341,26 @@ snapshots: character-reference-invalid@2.0.1: {} + chartscii@4.0.3: + dependencies: + styl3: 3.1.1 + chokidar@5.0.0: dependencies: readdirp: 5.1.1 + chownr@3.0.0: {} + ci-info@4.4.0: {} cli-boxes@3.0.0: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + clsx@2.1.1: {} collapse-white-space@2.1.0: {} @@ -6089,6 +6381,8 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + colors@1.4.0: {} + comma-separated-tokens@2.0.3: {} commander@11.1.0: {} @@ -6639,10 +6933,16 @@ snapshots: http-cache-semantics@4.2.0: {} + human-readable-numbers@0.9.5: {} + i18next@23.16.8: dependencies: '@babel/runtime': 7.29.7 + ignore@7.0.5: {} + + ignore@7.0.9: {} + immutable@5.1.9: {} import-meta-resolve@4.2.0: {} @@ -6666,6 +6966,8 @@ snapshots: is-docker@3.0.0: {} + is-domain@0.0.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -7336,6 +7638,14 @@ snapshots: min-indent@1.0.1: {} + minimist@1.2.8: {} + + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + mlly@1.8.2: dependencies: acorn: 8.18.0 @@ -7343,14 +7653,20 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 + moniker@0.1.2: {} + mrmime@2.0.1: {} ms@2.1.3: {} + mute-stream@0.0.8: {} + nanoid@3.3.19: {} neotraverse@0.6.18: {} + netrc@0.1.4: {} + nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -7481,6 +7797,8 @@ snapshots: picomatch@4.0.7: {} + pkg-pr-new@0.0.88: {} + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -7521,6 +7839,8 @@ snapshots: prismjs@1.30.0: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -7540,6 +7860,10 @@ snapshots: react-is@17.0.2: {} + read@1.0.5: + dependencies: + mute-stream: 0.0.8 + readdirp@5.1.1: {} recma-build-jsx@1.0.0: @@ -7964,6 +8288,10 @@ snapshots: space-separated-tokens@2.0.2: {} + split@1.0.1: + dependencies: + through: 2.3.8 + stackback@0.0.2: {} std-env@4.2.0: {} @@ -7997,6 +8325,8 @@ snapshots: dependencies: min-indent: 1.0.1 + styl3@3.1.1: {} + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -8005,6 +8335,37 @@ snapshots: dependencies: inline-style-parser: 0.2.7 + surge-ignore@0.3.0: {} + + surge-sdk@0.20.0: {} + + surge-stream@0.20.0: + dependencies: + ignore: 7.0.5 + split: 1.0.1 + surge-ignore: 0.3.0 + tar: 7.5.22 + + surge@0.44.3: + dependencies: + chartscii: 4.0.3 + cli-table3: 0.6.5 + colors: 1.4.0 + human-readable-numbers: 0.9.5 + ignore: 7.0.9 + is-domain: 0.0.1 + minimist: 1.2.8 + moniker: 0.1.2 + netrc: 0.1.4 + progress: 2.0.3 + prompts: 2.4.2 + read: 1.0.5 + surge-ignore: 0.3.0 + surge-sdk: 0.20.0 + surge-stream: 0.20.0 + url-parse-as-address: 1.0.0 + xbytes: 1.9.1 + svgo@4.1.0: dependencies: commander: 11.1.0 @@ -8015,6 +8376,16 @@ snapshots: picocolors: 1.1.1 sax: 1.6.1 + tar@7.5.22: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + + through@2.3.8: {} + tiny-inflate@1.0.3: {} tinybench@6.1.4: {} @@ -8219,6 +8590,8 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + url-parse-as-address@1.0.0: {} + util-deprecate@1.0.2: {} vfile-location@5.0.3: @@ -8396,6 +8769,8 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + xbytes@1.9.1: {} + xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} @@ -8404,6 +8779,8 @@ snapshots: yallist@3.1.1: {} + yallist@5.0.0: {} + yaml@2.9.1: {} yargs-parser@21.1.1: {}