diff --git a/.changeset/active-element-solid2-migration.md b/.changeset/active-element-solid2-migration.md new file mode 100644 index 000000000..5f8139a51 --- /dev/null +++ b/.changeset/active-element-solid2-migration.md @@ -0,0 +1,18 @@ +--- +"@solid-primitives/active-element": major +--- + +Migrate to Solid.js v2.0 (beta.12) + +## Breaking Changes + +**Peer dependencies**: `solid-js@^2.0.0-beta.12` and `@solidjs/web@^2.0.0-beta.12` are now required. + +- `makeFocusListener` and `createFocusSignal` have moved to `@solid-primitives/focus`. Import them from there instead: + ```ts + // Before + import { makeFocusListener, createFocusSignal } from "@solid-primitives/active-element"; + // After + import { makeFocusListener, createFocusSignal } from "@solid-primitives/focus"; + ``` +- `isServer` is now sourced from `@solidjs/web` internally (no user-facing API change) diff --git a/.changeset/autofocus-solid2-migration.md b/.changeset/autofocus-solid2-migration.md deleted file mode 100644 index a9c43b560..000000000 --- a/.changeset/autofocus-solid2-migration.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"@solid-primitives/autofocus": major ---- - -Migrate to Solid.js v2.0 (beta.10) - -## Breaking Changes - -**Peer dependencies**: `solid-js@^2.0.0-beta.10` and `@solidjs/web@^2.0.0-beta.10` are now required. - -- `autofocus` is now a **ref callback factory** (`use:autofocus` directive removed; Solid 2.0 no longer supports `use:` directives): - ```tsx - // Before - - // After - - - // Before - - // After - - ``` -- `JSX` type is now imported from `@solidjs/web` (was `solid-js`) -- `onMount` replaced by `onSettled` from `solid-js` -- `createAutofocus` uses split `createEffect(compute, apply)` form with proper timeout cleanup on re-focus diff --git a/.changeset/focus-solid2-migration.md b/.changeset/focus-solid2-migration.md new file mode 100644 index 000000000..fb95c2c84 --- /dev/null +++ b/.changeset/focus-solid2-migration.md @@ -0,0 +1,40 @@ +--- +"@solid-primitives/focus": major +--- + +Migrate to Solid.js v2.0 (beta.12) + +## Breaking Changes + +**Peer dependencies**: `solid-js@^2.0.0-beta.12` and `@solidjs/web@^2.0.0-beta.12` are now required. + +- `autofocus` is now a **ref callback factory** (`use:autofocus` directive removed; Solid 2.0 no longer supports `use:` directives): + ```tsx + // Before + + // After + + + // Before + + // After + + ``` +- `JSX` type is now imported from `@solidjs/web` (was `solid-js`) +- `onMount` replaced by `onSettled` from `solid-js` +- `createAutofocus` uses split `createEffect(compute, apply)` form with proper timeout cleanup on re-focus + +## New Primitives + +`makeFocusListener` and `createFocusSignal` have moved here from `@solid-primitives/active-element`: + +- **`makeFocusListener(target, callback, useCapture?)`** — attaches `focus`/`blur` listeners to an element, calling `callback` with the new boolean focus state. Returns a cleanup function. + ```ts + const clear = makeFocusListener(el, isFocused => console.log(isFocused)); + clear(); // remove listeners + ``` +- **`createFocusSignal(target)`** — reactive signal that tracks whether `target` is focused. + ```ts + const isFocused = createFocusSignal(() => el); + isFocused(); // boolean + ``` diff --git a/.changeset/pre.json b/.changeset/pre.json index 36ae70b02..15aaaabeb 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -5,7 +5,7 @@ "@solid-primitives/active-element": "2.1.5", "@solid-primitives/analytics": "0.2.1", "@solid-primitives/audio": "1.4.4", - "@solid-primitives/autofocus": "0.1.4", + "@solid-primitives/focus": "0.1.4", "@solid-primitives/bounds": "0.1.5", "@solid-primitives/broadcast-channel": "0.1.1", "@solid-primitives/clipboard": "1.6.4", diff --git a/packages/active-element/dev/index.tsx b/packages/active-element/dev/index.tsx deleted file mode 100644 index e483c2e20..000000000 --- a/packages/active-element/dev/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { createActiveElement, focus } from "../src/index.js"; -import { type Component, createSignal, Index, onMount, type ParentComponent } from "solid-js"; - -import { genNodeList } from "./utils.js"; -// prevent tree-shaking -focus; - -const Node: ParentComponent<{ x: number; y: number; size: number }> = props => { - const [isFocused, setIsFocused] = createSignal(false); - - return ( - - ); -}; - -const Client: Component = () => { - const [list, setList] = createSignal(genNodeList()); - const shuffle = () => setList(genNodeList()); - const activeEl = createActiveElement(); - - return ( -
- - {item => ( - - {item().id} - - )} - - -
- Active Element:{" "} - {activeEl() && activeEl()?.tagName !== "BODY" ? activeEl()?.textContent : "null"} -
-
- ); -}; - -export default function App() { - const [mounted, setMounted] = createSignal(false); - onMount(() => setMounted(true)); - return <>{mounted() && }; -} diff --git a/packages/active-element/dev/utils.ts b/packages/active-element/dev/utils.ts deleted file mode 100644 index 27f7439c5..000000000 --- a/packages/active-element/dev/utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const genNodeList = () => - Array.from({ length: 10 }, (_, id) => ({ - x: Math.random() * (window.innerWidth - 192), - y: Math.random() * (window.innerHeight - 192), - size: Math.random() + 0.15, - id, - })); diff --git a/packages/active-element/package.json b/packages/active-element/package.json index c24f9793a..3543e89da 100644 --- a/packages/active-element/package.json +++ b/packages/active-element/package.json @@ -16,8 +16,7 @@ "name": "active-element", "stage": 3, "list": [ - "createActiveElement", - "createFocusSignal" + "createActiveElement" ], "category": "Inputs", "gzip": 942 @@ -39,7 +38,6 @@ } }, "scripts": { - "dev": "node --import=@nothing-but/node-resolve-ts --experimental-transform-types ../../scripts/dev.ts", "build": "node --import=@nothing-but/node-resolve-ts --experimental-transform-types ../../scripts/build.ts", "vitest": "vitest -c ../../configs/vitest.config.ts", "test": "pnpm run vitest", @@ -56,10 +54,12 @@ "@solid-primitives/utils": "workspace:^" }, "peerDependencies": { - "solid-js": "^1.6.12" + "@solidjs/web": "^2.0.0-beta.14", + "solid-js": "^2.0.0-beta.14" }, "typesVersions": {}, "devDependencies": { - "solid-js": "^1.9.7" + "@solidjs/web": "2.0.0-beta.14", + "solid-js": "2.0.0-beta.14" } } diff --git a/packages/active-element/src/index.ts b/packages/active-element/src/index.ts index 307bcb7c3..e651fdf92 100644 --- a/packages/active-element/src/index.ts +++ b/packages/active-element/src/index.ts @@ -1,21 +1,7 @@ -import { type Accessor, type JSX } from "solid-js"; -import { isServer } from "solid-js/web"; -import { - type MaybeAccessor, - type Directive, - createHydratableSignal, -} from "@solid-primitives/utils"; -import { makeEventListener, createEventListener } from "@solid-primitives/event-listener"; - -declare module "solid-js" { - namespace JSX { - interface Directives { - focus: (isActive: boolean) => void; - } - } -} -// This ensures the `JSX` import won't fall victim to tree shaking -export type E = JSX.Element; +import { type Accessor, onCleanup } from "solid-js"; +import { isServer } from "@solidjs/web"; +import { createHydratableSignal } from "@solid-primitives/utils"; +import { makeEventListener } from "@solid-primitives/event-listener"; const getActiveElement = () => document.activeElement === document.body ? null : document.activeElement; @@ -61,67 +47,25 @@ export function createActiveElement(): Accessor { } /** - * Attaches "blur" and "focus" event listeners to the element. - * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/active-element#makeFocusListener - * @param target element - * @param callback handle focus change - * @param useCapture activates capturing, which allows to listen on events at the root that don't support bubbling. - * @returns function for clearing event listeners - * @example - * const [isFocused, setIsFocused] = createSignal(false) - * const clear = makeFocusListener(focused => setIsFocused(focused)); - * // remove listeners (happens also on cleanup) - * clear(); - */ -export function makeFocusListener( - target: Element, - callback: (isActive: boolean) => void, - useCapture = true, -): VoidFunction { - if (isServer) { - return () => void 0; - } - const clear1 = makeEventListener(target, "blur", callback.bind(void 0, false), useCapture); - const clear2 = makeEventListener(target, "focus", callback.bind(void 0, true), useCapture); - return () => (clear1(), clear2()); -} - -/** - * Provides a signal representing element's focus state. - * @param target element or a reactive function returning one - * @returns boolean signal representing element's focus state - * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/active-element#createFocusSignal - * @example - * const isFocused = createFocusSignal(() => el) - * isFocused() // T: boolean - */ -export function createFocusSignal(target: MaybeAccessor): Accessor { - if (isServer) { - return () => false; - } - const [isActive, setIsActive] = createHydratableSignal( - false, - () => document.activeElement === target, - ); - createEventListener(target, "blur", () => setIsActive(false), true); - createEventListener(target, "focus", () => setIsActive(true), true); - return isActive; -} - -/** - * A directive that notifies you when the element becomes active or inactive. + * A ref factory that notifies you when the element becomes active or inactive. * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/active-element#focus * * @example * const [active, setActive] = createSignal(false) - * + * */ -export const focus: Directive<(isActive: boolean) => void> = (target, props) => { - if (isServer) { - return; - } - const callback = props(); - callback(document.activeElement === target); - makeFocusListener(target, callback); -}; +export function focus(callback: (isActive: boolean) => void): (target: Element) => void { + if (isServer) return () => {}; + let cleanup: (() => void) | null = null; + onCleanup(() => cleanup?.()); + return (target: Element) => { + callback(document.activeElement === target); + const c1 = makeEventListener(target, "blur", () => callback(false), true); + const c2 = makeEventListener(target, "focus", () => callback(true), true); + cleanup = () => { + c1(); + c2(); + }; + }; +} diff --git a/packages/active-element/stories/active-element.stories.tsx b/packages/active-element/stories/active-element.stories.tsx new file mode 100644 index 000000000..10b62955a --- /dev/null +++ b/packages/active-element/stories/active-element.stories.tsx @@ -0,0 +1,145 @@ +import { createSignal, For } from "solid-js"; +import preview from "../../../.storybook/preview.js"; +import { + createActiveElement, + makeActiveElementListener, + focus, +} from "@solid-primitives/active-element"; +import readme from "../README.md?raw"; +import { + Badge, + BoolRow, + colors, + Container, + EventLog, + font, + inputStyle, +} from "../../../.storybook/ui/index.js"; + + +const meta = preview.meta({ + title: "Inputs/Active Element", + tags: ["autodocs"], + parameters: { + layout: "centered", + docs: { + description: { + component: readme, + }, + }, + }, +}); + +export default meta; + +export const ReactiveActiveElement = meta.story({ + name: "Reactive active element", + parameters: { + docs: { + description: { + story: + "`createActiveElement()` returns a reactive accessor that tracks `document.activeElement` globally. It updates whenever focus moves anywhere in the document — click or tab between the inputs below to see it update.", + }, + }, + }, + render: () => { + const activeEl = createActiveElement(); + + const label = () => { + const el = activeEl(); + if (!el) return "none"; + return (el as HTMLInputElement).placeholder || el.tagName.toLowerCase(); + }; + + return ( + +
+ Active element + {label()} +
+ + + + +
+ ); + }, +}); + +export const ActiveElementListener = meta.story({ + name: "Imperative listener", + parameters: { + docs: { + description: { + story: + "`makeActiveElementListener(callback)` attaches `focus` and `blur` capture listeners to the window and calls the callback with the newly active element (or `null` when focus leaves entirely). Returns a cleanup function to remove the listeners.", + }, + }, + }, + render: () => { + const [log, setLog] = createSignal<{ label: string; time: string }[]>([]); + + const addLog = (el: Element | null) => { + const name = el + ? (el as HTMLInputElement).placeholder || el.tagName.toLowerCase() + : "(none)"; + setLog(prev => + [{ label: `→ ${name}`, time: new Date().toLocaleTimeString() }, ...prev].slice(0, 5), + ); + }; + + makeActiveElementListener(addLog); + + return ( + + + + + + + ); + }, +}); + +export const FocusDirective = meta.story({ + name: "Focus ref factory", + parameters: { + docs: { + description: { + story: + "`focus(callback)` is a ref factory — call it with a setter and pass the result to `ref`. It fires the callback with `true` when the element gains focus and `false` when it blurs. Each element tracks its own active state independently.", + }, + }, + }, + render: () => { + const fields = ["Name", "Email", "Message"]; + + const FocusedInput = (props: { label: string }) => { + const [isFocused, setIsFocused] = createSignal(false); + return ( +
+ + + {isFocused() ? "active" : "—"} + +
+ ); + }; + + return ( + + {label => } + + ); + }, +}); diff --git a/packages/active-element/test/index.test.ts b/packages/active-element/test/index.test.ts index 25d67e2eb..2d82e3c8c 100644 --- a/packages/active-element/test/index.test.ts +++ b/packages/active-element/test/index.test.ts @@ -1,12 +1,6 @@ import { createRoot } from "solid-js"; import { describe, test, expect } from "vitest"; -import { - makeActiveElementListener, - createActiveElement, - makeFocusListener, - createFocusSignal, - focus, -} from "../src/index.js"; +import { makeActiveElementListener, createActiveElement, focus } from "../src/index.js"; const dispatchFocusEvent = ( target: Element | Window = window, @@ -40,29 +34,6 @@ describe("makeActiveElementListener", () => { })); }); -describe("makeFocusListener", () => { - test("works properly", () => - createRoot(dispose => { - const el = document.createElement("div"); - const captured: any[] = []; - const clear = makeFocusListener(el, e => captured.push(e)); - expect(captured).toEqual([]); - dispatchFocusEvent(el, "focus"); - expect(captured).toEqual([true]); - dispatchFocusEvent(el, "blur"); - expect(captured).toEqual([true, false]); - clear(); - dispatchFocusEvent(el, "focus"); - expect(captured).toEqual([true, false]); - makeFocusListener(el, e => captured.push(e)); - dispatchFocusEvent(el, "blur"); - expect(captured).toEqual([true, false, false]); - dispose(); - dispatchFocusEvent(el, "focus"); - expect(captured).toEqual([true, false, false]); - })); -}); - describe("createActiveElement", () => { test("works properly", () => createRoot(dispose => { @@ -72,28 +43,13 @@ describe("createActiveElement", () => { })); }); -describe("createFocusSignal", () => { - test("works properly", () => - createRoot(dispose => { - const el = document.createElement("div"); - const activeEl = createFocusSignal(el); - expect(activeEl()).toBe(false); - dispatchFocusEvent(el, "focus"); - expect(activeEl()).toBe(true); - dispatchFocusEvent(el, "blur"); - expect(activeEl()).toBe(false); - dispose(); - dispatchFocusEvent(el, "focus"); - expect(activeEl()).toBe(false); - })); -}); - -describe("use:focus", () => { +describe("focus", () => { test("works properly", () => createRoot(dispose => { const el = document.createElement("div"); let captured!: boolean; - focus(el, () => e => (captured = e)); + const ref = focus(e => (captured = e)); + ref(el); expect(captured).toBe(false); dispatchFocusEvent(el, "focus"); expect(captured).toBe(true); diff --git a/packages/active-element/test/server.test.ts b/packages/active-element/test/server.test.ts index 830c9fb3d..558d9566d 100644 --- a/packages/active-element/test/server.test.ts +++ b/packages/active-element/test/server.test.ts @@ -1,8 +1,7 @@ import { describe, test, expect, vi } from "vitest"; -import { makeActiveElementListener, createActiveElement, createFocusSignal } from "../src/index.js"; +import { makeActiveElementListener, createActiveElement } from "../src/index.js"; describe("API doesn't break in SSR", () => { - // check if the API doesn't throw when calling it in SSR test("makeActiveElementListener() - SSR", () => { const cb = vi.fn(); expect(() => makeActiveElementListener(cb)).not.toThrow(); @@ -12,10 +11,4 @@ describe("API doesn't break in SSR", () => { test("createActiveElement() - SSR", () => { expect(() => createActiveElement()).not.toThrow(); }); - - test("createFocusSignal() - SSR", () => { - const el = vi.fn(); - expect(() => createFocusSignal(el)).not.toThrow(); - expect(el).not.toBeCalled(); - }); }); diff --git a/packages/autofocus/README.md b/packages/autofocus/README.md deleted file mode 100644 index 8bff83ef9..000000000 --- a/packages/autofocus/README.md +++ /dev/null @@ -1,75 +0,0 @@ -

- Solid Primitives Autofocus -

- -# @solid-primitives/autofocus - -[![size](https://img.shields.io/badge/size-191_B-blue?style=for-the-badge)](https://bundlephobia.com/package/@solid-primitives/autofocus) -[![version](https://img.shields.io/npm/v/@solid-primitives/autofocus?style=for-the-badge)](https://www.npmjs.com/package/@solid-primitives/autofocus) -[![stage](https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-1.json)](https://github.com/solidjs-community/solid-primitives#contribution-process) - -Primitives for autofocusing HTML elements. - -The native autofocus attribute only works on page load, which makes it incompatible with SolidJS. These primitives run on render, allowing autofocus on initial render as well as dynamically added components. - -- [`autofocus`](#autofocus) - Directive to autofocus an element on render. -- [`createAutofocus`](#createautofocus) - Reactive primitive to autofocus an element on render. - -## Installation - -```bash -npm install @solid-primitives/autofocus -# or -yarn add @solid-primitives/autofocus -# or -pnpm add @solid-primitives/autofocus -``` - -## `autofocus` - -### How to use it - -`autofocus` is a ref callback factory. It uses the native `autofocus` attribute to determine whether to focus the element. - -```tsx -import { autofocus } from "@solid-primitives/autofocus"; - -; -``` - -To conditionally enable autofocus, control the `autofocus` attribute directly — the `autofocus()` ref only focuses when the attribute is present, so removing it is sufficient to opt out: - -```tsx -// Conditionally autofocus by toggling the attribute -; -``` - -> **Note:** The `enabled` parameter was removed because it was redundant — the same effect is achieved by omitting the `autofocus` attribute. Previously, Solid directives always received an accessor argument whether you used it or not, which gave the impression an explicit toggle was necessary. - -### `createAutofocus` - -`createAutofocus` reactively autofocuses an element passed in as a signal. - -```tsx -import { createAutofocus } from "@solid-primitives/autofocus"; - -// Using ref -let ref!: HTMLButtonElement; -createAutofocus(() => ref); - -; - -// Using ref signal -const [ref, setRef] = createSignal(); -createAutofocus(ref); - -; -``` - -## Changelog - -See [CHANGELOG.md](./CHANGELOG.md) diff --git a/packages/autofocus/dev/index.tsx b/packages/autofocus/dev/index.tsx deleted file mode 100644 index 2fd98d359..000000000 --- a/packages/autofocus/dev/index.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { type Component, createSignal, Switch, Match } from "solid-js"; -import { autofocus, createAutofocus } from "../src/index.js"; - -autofocus; - -const AutofocusDirective: Component = () => { - return ( - - ); -}; - -const AutofocusRef: Component = () => { - let ref!: HTMLButtonElement; - - createAutofocus(() => ref); - - return ( - - ); -}; - -const AutofocusRefSignal: Component = () => { - const [ref, setRef] = createSignal(); - - createAutofocus(ref); - - return ( - - ); -}; - -const App: Component = () => { - const [toggle, setToggle] = createSignal(0); - - return ( -
-
- - - no autofocus}> - - - - - - - - - - -
-
- ); -}; - -export default App; diff --git a/packages/autofocus/stories/autofocus.stories.tsx b/packages/autofocus/stories/autofocus.stories.tsx deleted file mode 100644 index 56caff277..000000000 --- a/packages/autofocus/stories/autofocus.stories.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import { createSignal, Show } from "solid-js"; -import preview from "../../../.storybook/preview.js"; -import { autofocus, createAutofocus } from "@solid-primitives/autofocus"; -import readme from "../README.md?raw"; -import { Button, Container } from "../../../.storybook/ui/index.js"; - -const meta = preview.meta({ - title: "DOM/Autofocus", - tags: ["autodocs"], - parameters: { - layout: "centered", - docs: { - description: { - component: readme, - }, - }, - }, -}); - -export default meta; - -export const AutofocusRefCallback = meta.story({ - name: "autofocus() ref callback", - parameters: { - docs: { - description: { - story: - "`autofocus()` is a ref callback factory. Attach it via `ref={autofocus()}` and include the native `autofocus` attribute — the primitive checks for that attribute before focusing, so removing it is all you need to opt out. Unmount and remount the input below to see it re-focus each time.", - }, - }, - }, - render: () => { - const [mounted, setMounted] = createSignal(true); - - return ( - -

autofocus()

- - - - - - - -

- The native autofocus attribute alone only fires on page load. This - primitive re-applies it on every render. -

-
- ); - }, -}); - -export const ConditionalAutofocus = meta.story({ - name: "Conditional autofocus", - parameters: { - docs: { - description: { - story: - "Toggle the `autofocus` attribute to enable or disable focusing — no extra API needed. `autofocus()` only calls `.focus()` when the attribute is present on the element at settle time.", - }, - }, - }, - render: () => { - const [enabled, setEnabled] = createSignal(true); - const [mounted, setMounted] = createSignal(true); - - return ( - -

Conditional autofocus

- - - - - - - - -
- ); - }, -}); - -export const CreateAutofocusLetRef = meta.story({ - name: "createAutofocus — let ref", - parameters: { - docs: { - description: { - story: - "`createAutofocus(() => ref)` integrates with the reactive lifecycle using a plain `let` ref variable. The element receives focus after the component settles — no `autofocus` attribute required.", - }, - }, - }, - render: () => { - const [mounted, setMounted] = createSignal(true); - - const FocusedInput = () => { - let ref!: HTMLInputElement; - createAutofocus(() => ref); - return ( - - ); - }; - - return ( - -

createAutofocus — let ref

- - - - - - -
- ); - }, -}); - -export const CreateAutofocusSignalRef = meta.story({ - name: "createAutofocus — signal ref", - parameters: { - docs: { - description: { - story: - "`createAutofocus(ref)` also accepts a signal accessor — pass `ref={setRef}` on the element. Focus re-fires whenever the signal changes to a new element, making it easy to shift focus as the DOM updates.", - }, - }, - }, - render: () => { - const [mounted, setMounted] = createSignal(true); - - const FocusedInput = () => { - const [ref, setRef] = createSignal(); - createAutofocus(ref); - return ( - - ); - }; - - return ( - -

createAutofocus — signal ref

- - - - - - - -

- The signal approach is useful when you need to store the ref elsewhere — e.g.{" "} - const [ref, setRef] = createSignal() at an outer scope. -

-
- ); - }, -}); diff --git a/packages/autofocus/test/index.test.tsx b/packages/autofocus/test/index.test.tsx deleted file mode 100644 index d7bc0b901..000000000 --- a/packages/autofocus/test/index.test.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { describe, test, expect, vi, beforeEach, afterAll, beforeAll } from "vitest"; -import { createRoot, createSignal, flush } from "solid-js"; -import { autofocus, createAutofocus } from "../src/index.js"; - -let focused: HTMLElement | null = null; - -const original_focus = HTMLElement.prototype.focus; -HTMLElement.prototype.focus = function (this) { - focused = this; -}; - -beforeAll(() => { - vi.useFakeTimers(); -}); - -beforeEach(() => { - vi.clearAllTimers(); - focused = null; -}); - -afterAll(() => { - vi.useRealTimers(); - HTMLElement.prototype.focus = original_focus; -}); - -describe("autofocus", () => { - test("focuses the element with autofocus attribute", () => { - const el = document.createElement("button"); - el.setAttribute("autofocus", ""); - - const dispose = createRoot(dispose => { - // Phase 1: factory registers onSettled - const ref = autofocus(); - // Phase 2: ref callback receives the element - ref(el); - return dispose; - }); - - flush(); - expect(focused).toBe(null); - vi.runAllTimers(); - expect(focused).toBe(el); - - dispose(); - }); - - test("doesn't focus when autofocus HTML attribute is absent", () => { - const el = document.createElement("button"); - - const dispose = createRoot(dispose => { - const ref = autofocus(); - ref(el); - return dispose; - }); - - flush(); - expect(focused).toBe(null); - vi.runAllTimers(); - expect(focused).toBe(null); - - dispose(); - }); - -}); - -describe("createAutofocus", () => { - const el = document.createElement("button"), - el2 = document.createElement("button"); - - test("createAutofocus focuses the element", () => { - const dispose = createRoot(dispose => { - createAutofocus(() => el); - return dispose; - }); - - flush(); - expect(focused).toBe(null); - vi.runAllTimers(); - expect(focused).toBe(el); - - dispose(); - }); - - test("createAutofocus works with signal", () => { - const [ref, setRef] = createSignal(); - - const dispose = createRoot(dispose => { - createAutofocus(ref); - return dispose; - }); - - flush(); - expect(focused).toBe(null); - vi.runAllTimers(); - expect(focused).toBe(null); - - setRef(el); - flush(); - expect(focused).toBe(null); - vi.runAllTimers(); - expect(focused).toBe(el); - - setRef(el2); - flush(); - expect(focused).toBe(el); - vi.runAllTimers(); - expect(focused).toBe(el2); - - dispose(); - - setRef(el); - expect(focused).toBe(el2); - vi.runAllTimers(); - expect(focused).toBe(el2); - }); -}); diff --git a/packages/autofocus/CHANGELOG.md b/packages/focus/CHANGELOG.md similarity index 98% rename from packages/autofocus/CHANGELOG.md rename to packages/focus/CHANGELOG.md index 976ecae9d..ac009a623 100644 --- a/packages/autofocus/CHANGELOG.md +++ b/packages/focus/CHANGELOG.md @@ -1,4 +1,4 @@ -# @solid-primitives/autofocus +# @solid-primitives/focus ## 0.1.4 diff --git a/packages/autofocus/LICENSE b/packages/focus/LICENSE similarity index 84% rename from packages/autofocus/LICENSE rename to packages/focus/LICENSE index 38b41d975..7a35c2e14 100644 --- a/packages/autofocus/LICENSE +++ b/packages/focus/LICENSE @@ -2,6 +2,10 @@ MIT License Copyright (c) 2021 Solid Primitives Working Group +The `createFocusTrap` primitive is ported from solid-focus-trap: + Copyright (c) 2023 Jasmin Noetzli (GiyoMoon) + https://github.com/corvudev/corvu/tree/main/packages/solid-focus-trap + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights @@ -18,4 +22,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/packages/focus/README.md b/packages/focus/README.md new file mode 100644 index 000000000..ad52e5625 --- /dev/null +++ b/packages/focus/README.md @@ -0,0 +1,159 @@ +

+ Solid Primitives Focus +

+ +# @solid-primitives/focus + +[![size](https://img.shields.io/bundlephobia/minzip/@solid-primitives/focus?style=for-the-badge&label=size)](https://bundlephobia.com/package/@solid-primitives/focus) +[![version](https://img.shields.io/npm/v/@solid-primitives/focus?style=for-the-badge)](https://www.npmjs.com/package/@solid-primitives/focus) +[![stage](https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Fraw.githubusercontent.com%2Fsolidjs-community%2Fsolid-primitives%2Fmain%2Fassets%2Fbadges%2Fstage-1.json)](https://github.com/solidjs-community/solid-primitives#contribution-process) + +Primitives for autofocusing HTML elements and trapping focus within a container. + +The native `autofocus` attribute only works on page load, which makes it incompatible with SolidJS. These primitives run on render, allowing autofocus on initial render as well as dynamically added components. + +- [`autofocus`](#autofocus) - Ref callback factory to autofocus an element on render. +- [`createAutofocus`](#createautofocus) - Reactive primitive to autofocus an element on render. +- [`createFocusTrap`](#createfocustrap) - Traps focus inside a given DOM element. + +## Installation + +```bash +npm install @solid-primitives/focus +# or +yarn add @solid-primitives/focus +# or +pnpm add @solid-primitives/focus +``` + +## `autofocus` + +### How to use it + +`autofocus` is a ref callback factory. It uses the native `autofocus` attribute to determine whether to focus the element. + +```tsx +import { autofocus } from "@solid-primitives/focus"; + +; +``` + +To conditionally enable autofocus, control the `autofocus` attribute directly — the `autofocus()` ref only focuses when the attribute is present, so removing it is sufficient to opt out: + +```tsx +// Conditionally autofocus by toggling the attribute +; +``` + +> **Note:** The `enabled` parameter was removed because it was redundant — the same effect is achieved by omitting the `autofocus` attribute. Previously, Solid directives always received an accessor argument whether you used it or not, which gave the impression an explicit toggle was necessary. + +## `createAutofocus` + +`createAutofocus` reactively autofocuses an element passed in as a signal. + +```tsx +import { createAutofocus } from "@solid-primitives/focus"; + +// Using ref +let ref!: HTMLButtonElement; +createAutofocus(() => ref); + +; + +// Using ref signal +const [ref, setRef] = createSignal(); +createAutofocus(ref); + +; +``` + +## `createFocusTrap` + +`createFocusTrap` traps keyboard focus inside a given DOM element, cycling through focusable children on Tab / Shift+Tab. It uses a `MutationObserver` to stay up to date with DOM changes and restores focus to the previously focused element when deactivated. + +> Ported from [solid-focus-trap](https://github.com/corvudev/corvu/tree/main/packages/solid-focus-trap) by [Jasmin Noetzli (GiyoMoon)](https://github.com/GiyoMoon), adapted for Solid.js 2.0. + +### How to use it + +```tsx +import { createFocusTrap } from "@solid-primitives/focus"; + +const DialogContent: Component<{ open: boolean }> = props => { + const [contentRef, setContentRef] = createSignal(null); + + createFocusTrap({ + element: contentRef, + enabled: () => props.open, + }); + + return ( + +
+ + +
+
+ ); +}; +``` + +### Props + +| Prop | Type | Default | Description | +| -------------------- | --------------------------------- | -------------------------------- | --------------------------------------------------------------------------------- | +| `element` | `MaybeAccessor` | — | Element to trap focus within. | +| `enabled` | `MaybeAccessor` | `true` | Whether the trap is active. | +| `observeChanges` | `MaybeAccessor` | `true` | Watch for DOM mutations inside the container and refresh focusable elements. | +| `initialFocusElement`| `MaybeAccessor` | First focusable element | Element to focus when the trap activates. | +| `restoreFocus` | `MaybeAccessor` | `true` | Restore focus to the previously focused element when the trap deactivates. | +| `finalFocusElement` | `MaybeAccessor` | Previously focused element | Element to focus when the trap deactivates. | +| `onInitialFocus` | `(event: Event) => void` | — | Callback when focus moves into the trap. Call `event.preventDefault()` to cancel.| +| `onFinalFocus` | `(event: Event) => void` | — | Callback when focus restores. Call `event.preventDefault()` to cancel. | + +### Custom initial focus + +```tsx +const [contentRef, setContentRef] = createSignal(null); +const [inputRef, setInputRef] = createSignal(null); + +createFocusTrap({ + element: contentRef, + enabled: () => props.open, + initialFocusElement: inputRef, +}); + +return ( + +
+ + +
+
+); +``` + +### Preventing focus moves + +```tsx +createFocusTrap({ + element: contentRef, + onInitialFocus: event => { + event.preventDefault(); // focus won't move on activation + }, + onFinalFocus: event => { + event.preventDefault(); // focus won't restore on deactivation + }, +}); +``` + +## Credits + +`createFocusTrap` is ported from [solid-focus-trap](https://github.com/corvudev/corvu/tree/main/packages/solid-focus-trap), part of the [corvu](https://corvu.dev) UI toolkit by [Jasmin Noetzli (GiyoMoon)](https://github.com/GiyoMoon). Licensed under the MIT License. + +## Changelog + +See [CHANGELOG.md](./CHANGELOG.md) diff --git a/packages/autofocus/package.json b/packages/focus/package.json similarity index 69% rename from packages/autofocus/package.json rename to packages/focus/package.json index 7e6dfeb1c..47001fa63 100644 --- a/packages/autofocus/package.json +++ b/packages/focus/package.json @@ -1,11 +1,20 @@ { - "name": "@solid-primitives/autofocus", + "name": "@solid-primitives/focus", "version": "0.2.0", - "description": "Primitives for autofocusing HTML elements", + "description": "Primitives for autofocusing HTML elements and trapping focus within a container", "author": "jer3m01 ", - "contributors": [], + "contributors": [ + { + "name": "Jasmin Noetzli", + "url": "https://github.com/GiyoMoon" + }, + { + "name": "David Di Biase", + "url": "https://github.com/davedbase" + } + ], "license": "MIT", - "homepage": "https://primitives.solidjs.community/package/autofocus", + "homepage": "https://primitives.solidjs.community/package/focus", "repository": { "type": "git", "url": "git+https://github.com/solidjs-community/solid-primitives.git" @@ -14,11 +23,14 @@ "url": "https://github.com/solidjs-community/solid-primitives/issues" }, "primitive": { - "name": "autofocus", + "name": "focus", "stage": 1, "list": [ "autofocus", - "createAutofocus" + "createAutofocus", + "createFocusTrap", + "makeFocusListener", + "createFocusSignal" ], "category": "Inputs", "gzip": 191 @@ -27,7 +39,11 @@ "solid", "primitives", "focus", - "autofocus" + "autofocus", + "focus-trap", + "trap", + "accessibility", + "a11y" ], "private": false, "sideEffects": false, @@ -57,6 +73,7 @@ "solid-js": "^2.0.0-beta.14" }, "dependencies": { + "@solid-primitives/event-listener": "workspace:^", "@solid-primitives/utils": "workspace:^" }, "typesVersions": {}, diff --git a/packages/autofocus/src/index.ts b/packages/focus/src/autofocus.ts similarity index 100% rename from packages/autofocus/src/index.ts rename to packages/focus/src/autofocus.ts diff --git a/packages/focus/src/focusSignal.ts b/packages/focus/src/focusSignal.ts new file mode 100644 index 000000000..c24e09e6c --- /dev/null +++ b/packages/focus/src/focusSignal.ts @@ -0,0 +1,52 @@ +import { type Accessor } from "solid-js"; +import { isServer } from "@solidjs/web"; +import { type MaybeAccessor, createHydratableSignal } from "@solid-primitives/utils"; +import { makeEventListener, createEventListener } from "@solid-primitives/event-listener"; + +/** + * Attaches "blur" and "focus" event listeners to the element. + * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/focus#makeFocusListener + * @param target element + * @param callback handle focus change + * @param useCapture activates capturing, which allows to listen on events at the root that don't support bubbling. + * @returns function for clearing event listeners + * @example + * const [isFocused, setIsFocused] = createSignal(false) + * const clear = makeFocusListener(el, focused => setIsFocused(focused)); + * // remove listeners (happens also on cleanup) + * clear(); + */ +export function makeFocusListener( + target: Element, + callback: (isActive: boolean) => void, + useCapture = true, +): VoidFunction { + if (isServer) { + return () => {}; + } + const clear1 = makeEventListener(target, "blur", callback.bind(undefined, false), useCapture); + const clear2 = makeEventListener(target, "focus", callback.bind(undefined, true), useCapture); + return () => (clear1(), clear2()); +} + +/** + * Provides a signal representing element's focus state. + * @param target element or a reactive function returning one + * @returns boolean signal representing element's focus state + * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/focus#createFocusSignal + * @example + * const isFocused = createFocusSignal(() => el) + * isFocused() // T: boolean + */ +export function createFocusSignal(target: MaybeAccessor): Accessor { + if (isServer) { + return () => false; + } + const [isActive, setIsActive] = createHydratableSignal( + false, + () => document.activeElement === target, + ); + createEventListener(target, "blur", () => setIsActive(false), true); + createEventListener(target, "focus", () => setIsActive(true), true); + return isActive; +} diff --git a/packages/focus/src/focusTrap.ts b/packages/focus/src/focusTrap.ts new file mode 100644 index 000000000..06391279e --- /dev/null +++ b/packages/focus/src/focusTrap.ts @@ -0,0 +1,214 @@ +/* + * Ported from solid-focus-trap by Jasmin Noetzli (GiyoMoon) + * MIT License — https://github.com/corvudev/corvu/tree/main/packages/solid-focus-trap + * Adapted for Solid.js 2.0 and @solid-primitives/focus by the Solid Primitives Working Group. + */ + +import { access, afterPaint, INTERNAL_OPTIONS, type MaybeAccessor } from "@solid-primitives/utils"; +import { createEffect, createMemo, createSignal } from "solid-js"; + +const FOCUSABLE_SELECTOR = + 'a[href]:not([tabindex="-1"]), button:not([tabindex="-1"]), input:not([tabindex="-1"]), textarea:not([tabindex="-1"]), select:not([tabindex="-1"]), details:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"])'; + +const EVENT_INITIAL_FOCUS = "focusTrap.initialFocus"; +const EVENT_FINAL_FOCUS = "focusTrap.finalFocus"; +const EVENT_OPTIONS = { bubbles: false, cancelable: true } as const; + +export type CreateFocusTrapProps = { + /** Element to trap focus within. */ + element: MaybeAccessor; + /** Whether the focus trap is active. Default: `true` */ + enabled?: MaybeAccessor; + /** + * Watch for DOM mutations inside the container and reload the list of + * focusable elements accordingly. Default: `true` + */ + observeChanges?: MaybeAccessor; + /** + * Element to focus when the trap activates. + * Default: the first focusable element inside `element`. + */ + initialFocusElement?: MaybeAccessor; + /** + * Restore focus to the element that was focused before the trap activated + * when the trap is deactivated. Default: `true` + */ + restoreFocus?: MaybeAccessor; + /** + * Element to focus when the trap deactivates. + * Default: the element that was focused before the trap activated. + */ + finalFocusElement?: MaybeAccessor; + /** + * Callback fired when focus moves into the trap. + * Call `event.preventDefault()` to suppress the focus move. + */ + onInitialFocus?: (event: Event) => void; + /** + * Callback fired when focus is restored after deactivation. + * Call `event.preventDefault()` to suppress the focus move. + */ + onFinalFocus?: (event: Event) => void; +}; + +/** + * Traps focus inside the given element. Aware of DOM changes inside the trap + * via a MutationObserver. Properly restores focus when deactivated. + * + * Ported from [solid-focus-trap](https://github.com/corvudev/corvu/tree/main/packages/solid-focus-trap) + * by Jasmin Noetzli (GiyoMoon), adapted for Solid.js 2.0. + * + * @example + * ```tsx + * const [ref, setRef] = createSignal(null); + * createFocusTrap({ element: ref, enabled: () => isOpen() }); + *
...
+ * ``` + */ +export const createFocusTrap = (props: CreateFocusTrapProps): void => { + const [focusableElements, setFocusableElements] = createSignal( + undefined, + INTERNAL_OPTIONS, + ); + + const firstFocusElement = createMemo(() => { + const els = focusableElements(); + return els ? (els[0] ?? null) : null; + }); + + const lastFocusElement = createMemo(() => { + const els = focusableElements(); + return els ? (els[els.length - 1] ?? null) : null; + }); + + let originalFocusedElement: HTMLElement | null = null; + + const loadFocusableElements = (container: HTMLElement) => { + const sorted = Array.from(container.querySelectorAll(FOCUSABLE_SELECTOR)) + .map((element, domIndex) => ({ element, domIndex, tabIndex: element.tabIndex })) + .sort((a, b) => + a.tabIndex === b.tabIndex ? a.domIndex - b.domIndex : a.tabIndex - b.tabIndex, + ); + setFocusableElements(sorted.map(({ element }) => element)); + }; + + const triggerInitialFocus = (container: HTMLElement) => { + afterPaint(() => { + const target = access(props.initialFocusElement ?? null) ?? firstFocusElement() ?? container; + const { onInitialFocus } = props; + if (onInitialFocus) { + const event = new CustomEvent(EVENT_INITIAL_FOCUS, EVENT_OPTIONS); + container.addEventListener(EVENT_INITIAL_FOCUS, onInitialFocus); + container.dispatchEvent(event); + container.removeEventListener(EVENT_INITIAL_FOCUS, onInitialFocus); + if (event.defaultPrevented) return; + } + target.focus(); + }); + }; + + const triggerRestoreFocus = (container: HTMLElement) => { + afterPaint(() => { + if (!access(props.restoreFocus ?? true)) return; + const target = access(props.finalFocusElement ?? null) ?? originalFocusedElement; + if (!target) return; + const { onFinalFocus } = props; + if (onFinalFocus) { + const event = new CustomEvent(EVENT_FINAL_FOCUS, EVENT_OPTIONS); + container.addEventListener(EVENT_FINAL_FOCUS, onFinalFocus); + container.dispatchEvent(event); + container.removeEventListener(EVENT_FINAL_FOCUS, onFinalFocus); + if (event.defaultPrevented) return; + } + target.focus(); + }); + }; + + const onFirstElementKeyDown = (event: KeyboardEvent) => { + if (event.key === "Tab" && event.shiftKey) { + event.preventDefault(); + lastFocusElement()!.focus(); + } + }; + + const onLastElementKeyDown = (event: KeyboardEvent) => { + if (event.key === "Tab" && !event.shiftKey) { + event.preventDefault(); + firstFocusElement()!.focus(); + } + }; + + const preventTab = (event: KeyboardEvent) => { + if (event.key === "Tab") event.preventDefault(); + }; + + // Activate / deactivate the trap when element or enabled changes. + createEffect( + () => ({ + container: access(props.element), + enabled: access(props.enabled ?? true), + observeChanges: access(props.observeChanges ?? true), + }), + ({ container, enabled, observeChanges }) => { + if (!container || !enabled) return; + + originalFocusedElement = document.activeElement as HTMLElement | null; + loadFocusableElements(container); + triggerInitialFocus(container); + + const observer = new MutationObserver(() => { + afterPaint(() => { + loadFocusableElements(container); + if (!document.activeElement || document.activeElement === document.body) { + triggerInitialFocus(container); + } + }); + }); + + if (observeChanges) { + observer.observe(container, { + subtree: true, + childList: true, + attributes: true, + attributeFilter: ["tabindex"], + }); + } + + return () => { + if (observeChanges) observer.disconnect(); + setFocusableElements(undefined); + triggerRestoreFocus(container); + }; + }, + ); + + // When there are no focusable elements, block all Tab key presses. + createEffect( + () => focusableElements(), + elements => { + if (!elements || elements.length !== 0) return; + document.addEventListener("keydown", preventTab); + return () => document.removeEventListener("keydown", preventTab); + }, + ); + + // Shift+Tab on the first element → wrap to last. + createEffect( + () => firstFocusElement(), + el => { + if (!el) return; + el.addEventListener("keydown", onFirstElementKeyDown); + return () => el.removeEventListener("keydown", onFirstElementKeyDown); + }, + ); + + // Tab on the last element → wrap to first. + createEffect( + () => lastFocusElement(), + el => { + if (!el) return; + el.addEventListener("keydown", onLastElementKeyDown); + return () => el.removeEventListener("keydown", onLastElementKeyDown); + }, + ); +}; diff --git a/packages/focus/src/index.ts b/packages/focus/src/index.ts new file mode 100644 index 000000000..678243b0b --- /dev/null +++ b/packages/focus/src/index.ts @@ -0,0 +1,5 @@ +export { autofocus, createAutofocus } from "./autofocus.js"; +export type { E } from "./autofocus.js"; +export { createFocusTrap } from "./focusTrap.js"; +export type { CreateFocusTrapProps } from "./focusTrap.js"; +export { makeFocusListener, createFocusSignal } from "./focusSignal.js"; diff --git a/packages/focus/stories/focus.stories.tsx b/packages/focus/stories/focus.stories.tsx new file mode 100644 index 000000000..7c63a8b9b --- /dev/null +++ b/packages/focus/stories/focus.stories.tsx @@ -0,0 +1,319 @@ +import { createSignal, onSettled, Show } from "solid-js"; +import preview from "../../../.storybook/preview.js"; +import { + autofocus, + createAutofocus, + createFocusSignal, + makeFocusListener, + createFocusTrap, +} from "@solid-primitives/focus"; +import readme from "../README.md?raw"; +import { + Badge, + BoolRow, + Button, + ButtonRow, + Card, + colors, + Container, + EventLog, + font, + inputStyle, + Kbd, + radii, +} from "../../../.storybook/ui/index.js"; + +const meta = preview.meta({ + title: "Inputs/Focus", + tags: ["autodocs"], + parameters: { + layout: "centered", + docs: { + description: { + component: readme, + }, + }, + }, +}); + +export default meta; + +export const FocusOnRender = meta.story({ + name: "Focus on render", + parameters: { + docs: { + description: { + story: + "`autofocus()` is a ref callback factory that re-applies focus on every mount — the native `autofocus` attribute alone only fires on page load. Attach it via `ref={autofocus()}` alongside the `autofocus` HTML attribute. To opt out, remove the attribute — the primitive checks for it before focusing.", + }, + }, + }, + render: () => { + const [mounted, setMounted] = createSignal(true); + + return ( + + + + + +

+ Unmount and remount to see autofocus() fire again — the browser won't do + this on its own. +

+
+ ); + }, +}); + +export const SignalDrivenFocus = meta.story({ + name: "Signal-driven focus", + parameters: { + docs: { + description: { + story: + "`createAutofocus(ref)` accepts a signal accessor — pass `ref={setRef}` on the element and hold the reference reactively. Focus re-fires whenever the accessor changes to a new element, making it easy to shift focus as the DOM updates.", + }, + }, + }, + render: () => { + const [mounted, setMounted] = createSignal(true); + + const FocusedField = () => { + const [ref, setRef] = createSignal(); + createAutofocus(ref); + return ( + + ); + }; + + return ( + + + + + +

+ The signal ref pattern is useful when the element reference needs to be passed up or + shared — focus fires each time the signal resolves to a new element. +

+
+ ); + }, +}); + +export const LiveFocusState = meta.story({ + name: "Live focus state", + parameters: { + docs: { + description: { + story: + "`createFocusSignal(target)` returns a boolean signal that updates whenever the target element gains or loses focus. Accepts either a direct element reference or a reactive accessor.", + }, + }, + }, + render: () => { + const FocusTracker = () => { + let inputRef!: HTMLInputElement; + const isFocused = createFocusSignal(() => inputRef); + + return ( + +
+ Focus state + + {isFocused() ? "focused" : "blurred"} + +
+ + +
+ ); + }; + + return ; + }, +}); + +export const FocusEventLog = meta.story({ + name: "Imperative focus events", + parameters: { + docs: { + description: { + story: + "`makeFocusListener(target, callback, useCapture?)` imperatively attaches `focus` and `blur` listeners to an element and returns a cleanup function. Useful in scenarios where you need to set up listeners outside a reactive scope or alongside other non-reactive setup.", + }, + }, + }, + render: () => { + const [log, setLog] = createSignal<{ label: string; time: string }[]>([]); + const addLog = (msg: string) => + setLog(prev => + [{ label: msg, time: new Date().toLocaleTimeString() }, ...prev].slice(0, 5), + ); + + let el1!: HTMLInputElement; + let el2!: HTMLInputElement; + + onSettled(() => { + const c1 = makeFocusListener(el1, focused => + addLog(`Input A — ${focused ? "focused" : "blurred"}`), + ); + const c2 = makeFocusListener(el2, focused => + addLog(`Input B — ${focused ? "focused" : "blurred"}`), + ); + return () => { + c1(); + c2(); + }; + }); + + return ( + + + + + + ); + }, +}); + +export const TabWrapsInDialog = meta.story({ + name: "Tab wraps in dialog", + parameters: { + docs: { + description: { + story: + "`createFocusTrap({ element, enabled })` traps keyboard focus inside a container. Tab cycles forward through focusable children; Shift+Tab cycles backward. When the trap deactivates, focus is restored to the element that was focused before the trap activated.", + }, + }, + }, + render: () => { + const [open, setOpen] = createSignal(false); + const [trapRef, setTrapRef] = createSignal(); + + createFocusTrap({ element: trapRef, enabled: open }); + + return ( + + + +
+

+ Dialog +

+ + + + + + +
+
+

+ Press Tab / Shift+Tab — focus wraps inside the dialog. Closing + restores focus to the trigger button. +

+
+ ); + }, +}); + +export const CustomInitialFocus = meta.story({ + name: "Custom initial focus", + parameters: { + docs: { + description: { + story: + "Use `initialFocusElement` to override which element receives focus when the trap activates. Here the Cancel button receives initial focus instead of the first focusable element (the Name input). Also demonstrates `onInitialFocus` / `onFinalFocus` callbacks for observing focus moves.", + }, + }, + }, + render: () => { + const [open, setOpen] = createSignal(false); + const [trapRef, setTrapRef] = createSignal(); + const [cancelRef, setCancelRef] = createSignal(); + const [log, setLog] = createSignal<{ label: string; time: string }[]>([]); + + const addLog = (msg: string) => + setLog(prev => + [{ label: msg, time: new Date().toLocaleTimeString() }, ...prev].slice(0, 4), + ); + + createFocusTrap({ + element: trapRef, + enabled: open, + initialFocusElement: cancelRef, + onInitialFocus: () => addLog("onInitialFocus"), + onFinalFocus: () => addLog("onFinalFocus"), + }); + + return ( + + + +
+

+ Dialog — Cancel focused first +

+ + + + + + +
+
+ +
+ ); + }, +}); diff --git a/packages/focus/test/index.test.tsx b/packages/focus/test/index.test.tsx new file mode 100644 index 000000000..d1c8aa578 --- /dev/null +++ b/packages/focus/test/index.test.tsx @@ -0,0 +1,438 @@ +import { describe, test, expect, vi, beforeEach, afterAll, beforeAll } from "vitest"; +import { createRoot, createSignal, flush } from "solid-js"; +import { autofocus, createAutofocus, createFocusTrap } from "../src/index.js"; + +// ─── Shared focus tracking ──────────────────────────────────────────────────── + +let focused: HTMLElement | null = null; + +const original_focus = HTMLElement.prototype.focus; +HTMLElement.prototype.focus = function (this: HTMLElement) { + focused = this; +}; + +// ─── Fake timers + rAF stub ─────────────────────────────────────────────────── + +beforeAll(() => { + vi.useFakeTimers(); + // afterPaint uses double rAF; stub it as setTimeout so vi.runAllTimers() drives it. + vi.stubGlobal("requestAnimationFrame", (fn: FrameRequestCallback) => + setTimeout(() => fn(performance.now()), 0), + ); + vi.stubGlobal("cancelAnimationFrame", (id: number) => clearTimeout(id)); +}); + +beforeEach(() => { + vi.clearAllTimers(); + focused = null; +}); + +afterAll(() => { + vi.useRealTimers(); + vi.unstubAllGlobals(); + HTMLElement.prototype.focus = original_focus; +}); + +// ─── Helper ─────────────────────────────────────────────────────────────────── + +/** Run all pending effects then drain all timers (including nested rAFs). */ +const settle = () => { + flush(); + vi.runAllTimers(); +}; + +// ─── autofocus ──────────────────────────────────────────────────────────────── + +describe("autofocus", () => { + test("focuses the element with autofocus attribute", () => { + const el = document.createElement("button"); + el.setAttribute("autofocus", ""); + + const dispose = createRoot(dispose => { + const ref = autofocus(); + ref(el); + return dispose; + }); + + settle(); + expect(focused).toBe(el); + dispose(); + }); + + test("doesn't focus when autofocus attribute is absent", () => { + const el = document.createElement("button"); + + const dispose = createRoot(dispose => { + const ref = autofocus(); + ref(el); + return dispose; + }); + + settle(); + expect(focused).toBe(null); + dispose(); + }); +}); + +// ─── createAutofocus ────────────────────────────────────────────────────────── + +describe("createAutofocus", () => { + const el = document.createElement("button"), + el2 = document.createElement("button"); + + test("focuses the element", () => { + const dispose = createRoot(dispose => { + createAutofocus(() => el); + return dispose; + }); + + settle(); + expect(focused).toBe(el); + dispose(); + }); + + test("works with signal — focuses when signal is set", () => { + const [ref, setRef] = createSignal(); + + const dispose = createRoot(dispose => { + createAutofocus(ref); + return dispose; + }); + + settle(); + expect(focused).toBe(null); + + setRef(el); + settle(); + expect(focused).toBe(el); + + setRef(el2); + settle(); + expect(focused).toBe(el2); + + dispose(); + + setRef(el); + vi.runAllTimers(); + expect(focused).toBe(el2); // no focus after dispose + }); +}); + +// ─── createFocusTrap ────────────────────────────────────────────────────────── + +/** Build a container with `n` focusable buttons and return them. */ +function makeContainer(n: number): { container: HTMLElement; buttons: HTMLButtonElement[] } { + const container = document.createElement("div"); + const buttons: HTMLButtonElement[] = []; + for (let i = 0; i < n; i++) { + const btn = document.createElement("button"); + btn.textContent = `btn${i}`; + container.appendChild(btn); + buttons.push(btn); + } + return { container, buttons }; +} + +function tabKey(shiftKey = false) { + return new KeyboardEvent("keydown", { key: "Tab", shiftKey, bubbles: true, cancelable: true }); +} + +describe("createFocusTrap", () => { + test("focuses the first focusable element on activation", () => { + const { container, buttons } = makeContainer(3); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container }); + return dispose; + }); + + settle(); + expect(focused).toBe(buttons[0]); + dispose(); + }); + + test("Tab on last element wraps to first", () => { + const { container, buttons } = makeContainer(3); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container }); + return dispose; + }); + + settle(); + buttons[2]!.dispatchEvent(tabKey(false)); + expect(focused).toBe(buttons[0]); + dispose(); + }); + + test("Shift+Tab on first element wraps to last", () => { + const { container, buttons } = makeContainer(3); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container }); + return dispose; + }); + + settle(); + buttons[0]!.dispatchEvent(tabKey(true)); + expect(focused).toBe(buttons[2]); + dispose(); + }); + + test("blocks Tab when there are no focusable elements", () => { + const container = document.createElement("div"); // no children + + let tabPrevented = false; + const dispose = createRoot(dispose => { + createFocusTrap({ element: container }); + return dispose; + }); + + flush(); // run effects so preventTab listener is added + + const event = tabKey(); + Object.defineProperty(event, "defaultPrevented", { get: () => tabPrevented }); + const originalPreventDefault = event.preventDefault.bind(event); + event.preventDefault = () => { + tabPrevented = true; + originalPreventDefault(); + }; + + document.dispatchEvent(event); + expect(tabPrevented).toBe(true); + dispose(); + }); + + test("does not activate when enabled is false", () => { + const { container } = makeContainer(2); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled: false }); + return dispose; + }); + + settle(); + expect(focused).toBe(null); + dispose(); + }); + + test("activates and deactivates reactively via enabled signal", () => { + const { container, buttons } = makeContainer(2); + const [enabled, setEnabled] = createSignal(false); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled }); + return dispose; + }); + + settle(); + expect(focused).toBe(null); // not yet enabled + + setEnabled(true); + settle(); + expect(focused).toBe(buttons[0]); // initial focus + + dispose(); + }); + + test("restores focus to the previously focused element on deactivation", () => { + const { container, buttons } = makeContainer(2); + const trigger = document.createElement("button"); + const [enabled, setEnabled] = createSignal(true); + + // Pretend `trigger` is the element that was focused before the trap. + const origActiveElement = Object.getOwnPropertyDescriptor(Document.prototype, "activeElement")!; + Object.defineProperty(document, "activeElement", { + get: () => trigger, + configurable: true, + }); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled }); + return dispose; + }); + + settle(); + expect(focused).toBe(buttons[0]); // initial focus inside trap + + // Restore the real activeElement descriptor before deactivating + Object.defineProperty(document, "activeElement", origActiveElement); + + setEnabled(false); + settle(); + expect(focused).toBe(trigger); // focus restored + dispose(); + }); + + test("uses initialFocusElement when provided", () => { + const { container, buttons } = makeContainer(3); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, initialFocusElement: buttons[2] }); + return dispose; + }); + + settle(); + expect(focused).toBe(buttons[2]); + dispose(); + }); + + test("uses finalFocusElement when provided on deactivation", () => { + const { container } = makeContainer(2); + const customFinal = document.createElement("button"); + const [enabled, setEnabled] = createSignal(true); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled, finalFocusElement: customFinal }); + return dispose; + }); + + settle(); + + setEnabled(false); + settle(); + expect(focused).toBe(customFinal); + dispose(); + }); + + test("onInitialFocus callback is called when trap activates", () => { + const { container } = makeContainer(1); + const onInitialFocus = vi.fn(); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, onInitialFocus }); + return dispose; + }); + + settle(); + expect(onInitialFocus).toHaveBeenCalledOnce(); + dispose(); + }); + + test("onInitialFocus preventDefault suppresses initial focus", () => { + const { container } = makeContainer(1); + + const dispose = createRoot(dispose => { + createFocusTrap({ + element: container, + onInitialFocus: e => e.preventDefault(), + }); + return dispose; + }); + + settle(); + expect(focused).toBe(null); + dispose(); + }); + + test("onFinalFocus callback is called on deactivation", () => { + const { container } = makeContainer(1); + const [enabled, setEnabled] = createSignal(true); + const onFinalFocus = vi.fn(); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled, onFinalFocus }); + return dispose; + }); + + settle(); + setEnabled(false); + settle(); + expect(onFinalFocus).toHaveBeenCalledOnce(); + dispose(); + }); + + test("onFinalFocus preventDefault suppresses focus restore", () => { + const { container } = makeContainer(1); + const trigger = document.createElement("button"); + const [enabled, setEnabled] = createSignal(true); + + const origActiveElement = Object.getOwnPropertyDescriptor(Document.prototype, "activeElement")!; + Object.defineProperty(document, "activeElement", { + get: () => trigger, + configurable: true, + }); + + const dispose = createRoot(dispose => { + createFocusTrap({ + element: container, + enabled, + onFinalFocus: e => e.preventDefault(), + }); + return dispose; + }); + + settle(); + Object.defineProperty(document, "activeElement", origActiveElement); + + focused = null; + setEnabled(false); + settle(); + expect(focused).toBe(null); // prevented + dispose(); + }); + + test("does not restore focus when restoreFocus is false", () => { + const { container } = makeContainer(1); + const [enabled, setEnabled] = createSignal(true); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container, enabled, restoreFocus: false }); + return dispose; + }); + + settle(); + focused = null; + setEnabled(false); + settle(); + expect(focused).toBe(null); + dispose(); + }); + + test("respects tabIndex ordering for focusable elements", () => { + const container = document.createElement("div"); + const a = document.createElement("button"); // tabIndex 0 + const b = document.createElement("button"); + b.tabIndex = 2; + const c = document.createElement("button"); + c.tabIndex = 1; + // DOM order: a(0), b(2), c(1) → sorted: a(0), c(1), b(2) + container.append(a, b, c); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: container }); + return dispose; + }); + + settle(); + expect(focused).toBe(a); // first by tabIndex order + + // Tab on last (b, tabIndex=2) wraps to first (a, tabIndex=0) + b.dispatchEvent(tabKey(false)); + expect(focused).toBe(a); + + // Shift+Tab on first (a) wraps to last (b) + a.dispatchEvent(tabKey(true)); + expect(focused).toBe(b); + + dispose(); + }); + + test("element as reactive signal — activates when signal becomes non-null", () => { + const { container, buttons } = makeContainer(2); + const [el, setEl] = createSignal(null); + + const dispose = createRoot(dispose => { + createFocusTrap({ element: el }); + return dispose; + }); + + settle(); + expect(focused).toBe(null); + + setEl(container); + settle(); + expect(focused).toBe(buttons[0]); + dispose(); + }); +}); diff --git a/packages/autofocus/test/server.test.ts b/packages/focus/test/server.test.ts similarity index 55% rename from packages/autofocus/test/server.test.ts rename to packages/focus/test/server.test.ts index d8c2b5f8b..9b4ae4800 100644 --- a/packages/autofocus/test/server.test.ts +++ b/packages/focus/test/server.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { createRoot } from "solid-js"; -import { createAutofocus } from "../src/index.js"; +import { createAutofocus, createFocusTrap } from "../src/index.js"; describe("API doesn't break in SSR", () => { it("createAutofocus() - SSR", () => { @@ -9,4 +9,11 @@ describe("API doesn't break in SSR", () => { dispose(); }); }); + + it("createFocusTrap() - SSR", () => { + createRoot(dispose => { + expect(() => createFocusTrap({ element: null })).not.toThrow(); + dispose(); + }); + }); }); diff --git a/packages/autofocus/tsconfig.json b/packages/focus/tsconfig.json similarity index 82% rename from packages/autofocus/tsconfig.json rename to packages/focus/tsconfig.json index dc1970e16..b9b2b6782 100644 --- a/packages/autofocus/tsconfig.json +++ b/packages/focus/tsconfig.json @@ -6,6 +6,9 @@ "rootDir": "src" }, "references": [ + { + "path": "../event-listener" + }, { "path": "../utils" } diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index c13ddf0ca..3d00f01d9 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -321,6 +321,16 @@ export function handleDiffArray( } } +/** + * Schedules `fn` to run after the browser has painted by nesting two + * requestAnimationFrame calls. No-op in non-browser environments. + */ +export const afterPaint = (fn: () => void): void => { + if (typeof requestAnimationFrame === "function") { + requestAnimationFrame(() => requestAnimationFrame(fn)); + } +}; + // ─── String transforms ──────────────────────────────────────────────────────── /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6f2ca57c..a2bd1d11a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.27.0 - version: 7.27.4 + version: 7.29.0 '@changesets/cli': specifier: ^2.29.4 version: 2.29.4 @@ -25,7 +25,7 @@ importers: version: 2.0.0-beta.14(solid-js@2.0.0-beta.14) '@storybook/addon-docs': specifier: ^10.4.1 - version: 10.4.1(@types/react@19.2.15)(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + version: 10.4.2(@types/react@19.2.16)(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -43,7 +43,7 @@ importers: version: 8.34.0(eslint@9.28.0(jiti@1.21.7))(typescript@5.8.3) babel-preset-solid: specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14(@babel/core@7.27.4)(solid-js@2.0.0-beta.14) + version: 2.0.0-beta.14(@babel/core@7.29.0)(solid-js@2.0.0-beta.14) esbuild: specifier: ^0.25.5 version: 0.25.5 @@ -61,7 +61,7 @@ importers: version: 3.3.0 geist: specifier: ^1.7.1 - version: 1.7.1(next@16.2.6(@babel/core@7.27.4)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.8)) + version: 1.7.2(next@16.2.7(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.8)) jsdom: specifier: ^25.0.1 version: 25.0.1 @@ -91,19 +91,19 @@ importers: version: 2.0.0-beta.14 storybook: specifier: ^10.4.1 - version: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) storybook-solidjs-vite: specifier: ^10.1.0 - version: 10.1.1(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(esbuild@0.25.5)(rollup@4.43.0)(solid-js@2.0.0-beta.14)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + version: 10.1.1(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(esbuild@0.25.5)(rollup@4.43.0)(solid-js@2.0.0-beta.14)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) typescript: specifier: ^5.8.3 version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + version: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) vite-plugin-solid: specifier: 3.0.0-next.5 - version: 3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + version: 3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) vitest: specifier: ^2.1.9 version: 2.1.9(@types/node@22.15.31)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.77.8) @@ -117,9 +117,12 @@ importers: specifier: workspace:^ version: link:../utils devDependencies: + '@solidjs/web': + specifier: 2.0.0-beta.14 + version: 2.0.0-beta.14(solid-js@2.0.0-beta.14) solid-js: - specifier: ^1.9.7 - version: 1.9.7 + specifier: 2.0.0-beta.14 + version: 2.0.0-beta.14 packages/analytics: devDependencies: @@ -143,19 +146,6 @@ importers: specifier: 2.0.0-beta.14 version: 2.0.0-beta.14 - packages/autofocus: - dependencies: - '@solid-primitives/utils': - specifier: workspace:^ - version: link:../utils - devDependencies: - '@solidjs/web': - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14(solid-js@2.0.0-beta.14) - solid-js: - specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14 - packages/bounds: dependencies: '@solid-primitives/event-listener': @@ -397,6 +387,22 @@ importers: specifier: 2.0.0-beta.14 version: 2.0.0-beta.14 + packages/focus: + dependencies: + '@solid-primitives/event-listener': + specifier: workspace:^ + version: link:../event-listener + '@solid-primitives/utils': + specifier: workspace:^ + version: link:../utils + devDependencies: + '@solidjs/web': + specifier: 2.0.0-beta.14 + version: 2.0.0-beta.14(solid-js@2.0.0-beta.14) + solid-js: + specifier: 2.0.0-beta.14 + version: 2.0.0-beta.14 + packages/fullscreen: dependencies: '@solid-primitives/event-listener': @@ -515,7 +521,7 @@ importers: devDependencies: '@reduxjs/toolkit': specifier: ^1.9.7 - version: 1.9.7(react@19.2.6) + version: 1.9.7(react@19.2.7) redux: specifier: ^4.2.1 version: 4.2.1 @@ -811,22 +817,6 @@ importers: specifier: 2.0.0-beta.13 version: 2.0.0-beta.13 - packages/page-visibility: - dependencies: - '@solid-primitives/event-listener': - specifier: workspace:^ - version: link:../event-listener - '@solid-primitives/rootless': - specifier: workspace:^ - version: link:../rootless - '@solid-primitives/utils': - specifier: workspace:^ - version: link:../utils - devDependencies: - solid-js: - specifier: ^1.9.7 - version: 1.9.7 - packages/pagination: dependencies: '@solid-primitives/utils': @@ -1295,13 +1285,13 @@ importers: devDependencies: '@babel/core': specifier: ^7.27.0 - version: 7.27.4 + version: 7.29.0 '@solidjs/web': specifier: 2.0.0-beta.14 version: 2.0.0-beta.14(solid-js@2.0.0-beta.14) babel-preset-solid: specifier: 2.0.0-beta.14 - version: 2.0.0-beta.14(@babel/core@7.27.4)(solid-js@2.0.0-beta.14) + version: 2.0.0-beta.14(@babel/core@7.29.0)(solid-js@2.0.0-beta.14) solid-js: specifier: 2.0.0-beta.14 version: 2.0.0-beta.14 @@ -1379,7 +1369,7 @@ importers: version: 2.0.0-beta.17(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14) '@tanstack/solid-start': specifier: ^2.0.0-beta.17 - version: 2.0.0-beta.18(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + version: 2.0.0-beta.18(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) clsx: specifier: ^2.0.0 version: 2.1.1 @@ -1428,7 +1418,7 @@ importers: version: 8.5.5 react: specifier: ^19.2.6 - version: 19.2.6 + version: 19.2.7 tailwindcss: specifier: 3.3.3 version: 3.3.3 @@ -1437,10 +1427,10 @@ importers: version: 4.0.0 vite: specifier: ^8.0.8 - version: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + version: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) vite-plugin-solid: specifier: 3.0.0-next.5 - version: 3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + version: 3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) packages: @@ -1451,10 +1441,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@ardatan/relay-compiler@12.0.0': resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true @@ -1476,18 +1462,10 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.5': - resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.29.3': resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.4': - resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} - engines: {node: '>=6.9.0'} - '@babel/core@7.29.0': resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} @@ -1504,10 +1482,6 @@ packages: resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -1530,20 +1504,10 @@ packages: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.28.6': resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} @@ -1558,10 +1522,6 @@ packages: resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.27.1': resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} engines: {node: '>=6.9.0'} @@ -1588,10 +1548,6 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.2': resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} @@ -1643,12 +1599,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -1804,10 +1754,6 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': - resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.0': resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} @@ -1930,6 +1876,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} @@ -1942,6 +1894,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -1954,6 +1912,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} @@ -1966,6 +1930,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} @@ -1978,6 +1948,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} @@ -1990,6 +1966,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} @@ -2002,6 +1984,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} @@ -2014,6 +2002,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} @@ -2026,6 +2020,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} @@ -2038,6 +2038,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} @@ -2050,6 +2056,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -2062,6 +2074,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} @@ -2074,6 +2092,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} @@ -2086,6 +2110,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} @@ -2098,6 +2128,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} @@ -2110,6 +2146,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} @@ -2122,12 +2164,24 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -2140,12 +2194,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} @@ -2158,6 +2224,18 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} @@ -2170,6 +2248,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} @@ -2182,6 +2266,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} @@ -2194,6 +2284,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -2206,6 +2302,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2681,6 +2783,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -2708,57 +2813,57 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@16.2.6': - resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==} + '@next/env@16.2.7': + resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==} - '@next/swc-darwin-arm64@16.2.6': - resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==} + '@next/swc-darwin-arm64@16.2.7': + resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.6': - resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==} + '@next/swc-darwin-x64@16.2.7': + resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.6': - resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==} + '@next/swc-linux-arm64-gnu@16.2.7': + resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.6': - resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} + '@next/swc-linux-arm64-musl@16.2.7': + resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@next/swc-linux-x64-gnu@16.2.6': - resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} + '@next/swc-linux-x64-gnu@16.2.7': + resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@next/swc-linux-x64-musl@16.2.6': - resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} + '@next/swc-linux-x64-musl@16.2.7': + resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.6': - resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} + '@next/swc-win32-arm64-msvc@16.2.7': + resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.6': - resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==} + '@next/swc-win32-x64-msvc@16.2.7': + resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2928,114 +3033,106 @@ packages: '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - '@oxc-project/types@0.130.0': - resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} - - '@oxc-resolver/binding-android-arm-eabi@11.19.1': - resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} + '@oxc-resolver/binding-android-arm-eabi@11.20.0': + resolution: {integrity: sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.19.1': - resolution: {integrity: sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA==} + '@oxc-resolver/binding-android-arm64@11.20.0': + resolution: {integrity: sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.19.1': - resolution: {integrity: sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ==} + '@oxc-resolver/binding-darwin-arm64@11.20.0': + resolution: {integrity: sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.19.1': - resolution: {integrity: sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ==} + '@oxc-resolver/binding-darwin-x64@11.20.0': + resolution: {integrity: sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.19.1': - resolution: {integrity: sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw==} + '@oxc-resolver/binding-freebsd-x64@11.20.0': + resolution: {integrity: sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': - resolution: {integrity: sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': + resolution: {integrity: sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': - resolution: {integrity: sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': + resolution: {integrity: sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': - resolution: {integrity: sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig==} + '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': + resolution: {integrity: sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.19.1': - resolution: {integrity: sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew==} + '@oxc-resolver/binding-linux-arm64-musl@11.20.0': + resolution: {integrity: sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': - resolution: {integrity: sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': + resolution: {integrity: sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': - resolution: {integrity: sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': + resolution: {integrity: sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': - resolution: {integrity: sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw==} + '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': + resolution: {integrity: sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': - resolution: {integrity: sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA==} + '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': + resolution: {integrity: sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.19.1': - resolution: {integrity: sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ==} + '@oxc-resolver/binding-linux-x64-gnu@11.20.0': + resolution: {integrity: sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.19.1': - resolution: {integrity: sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw==} + '@oxc-resolver/binding-linux-x64-musl@11.20.0': + resolution: {integrity: sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.19.1': - resolution: {integrity: sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA==} + '@oxc-resolver/binding-openharmony-arm64@11.20.0': + resolution: {integrity: sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.19.1': - resolution: {integrity: sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg==} + '@oxc-resolver/binding-wasm32-wasi@11.20.0': + resolution: {integrity: sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': - resolution: {integrity: sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ==} + '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': + resolution: {integrity: sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': - resolution: {integrity: sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA==} - cpu: [ia32] - os: [win32] - - '@oxc-resolver/binding-win32-x64-msvc@11.19.1': - resolution: {integrity: sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw==} + '@oxc-resolver/binding-win32-x64-msvc@11.20.0': + resolution: {integrity: sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==} cpu: [x64] os: [win32] @@ -3068,97 +3165,97 @@ packages: '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rolldown/binding-android-arm64@1.0.1': - resolution: {integrity: sha512-fJI3I0r3C3Oj/zdBCpaCmBRZYf07xpaq4yCfDDoSFm+beWNzbIl26puW8RraUdugoJw/95zerNOn6jasAhzSmg==} + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.1': - resolution: {integrity: sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.1': - resolution: {integrity: sha512-YKrVwQjIRBPo+5G/u03wGjbdy4q7pyzCe93DK9VJ7zkVmeg8LJ7GbgsiHWdR4xSoe4CAXRD7Bcjgbtr64bkXNg==} + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.1': - resolution: {integrity: sha512-z/oBsREo46SsFqBwYtFe0kpJeBijAT48O/WXLI4suiCLBkr03RTtTJMCzSdDd2znlh8VJizL09XVkQgk8IZonw==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': - resolution: {integrity: sha512-ik8q7GM11zxvYxFc2PeDcT6TBvhCQMaUxfph/M5l9sKuTs/Sjg3L+Byw0F7w0ZVLBZmx30P+gG0ECzzN+MFcmQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.1': - resolution: {integrity: sha512-QoSx2EkyrrdZ6kcyE8stqZ62t0Yra8Fs5ia9lOxJrh6TMQJK7gQKmscdTHf7pOXKREKrVwOtJcQG3qVSfc866A==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.1': - resolution: {integrity: sha512-uwNwFpwKeNiZawfAWBgg0VIztPTV3ihhh1vV334h9ivnNLorxnQMU6Fz8wG1Zb4Qh9LC1/MkcyT3YlDXG3Rsgg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.1': - resolution: {integrity: sha512-zY1bul7OWr7DFBiJ++wofXvnr8B45ce3QsQUhKrIhXsygAh7bTkwyeM1bi1a2g5C/yC/N8TZyGDEoMfm/l9mpg==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.1': - resolution: {integrity: sha512-0frlsT/f4Ft6I7SMESTKnF3cZsdicQn1dCMkF/jT9wDLE+gGoiQfv1nmT9e+s7s/fekvvy6tZM2jHvI2tkbJDQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.1': - resolution: {integrity: sha512-XABVmGp9Tg0WspTVvwduTc4fpqy6JnAUrSQe6OuyqD/03nI7r0O9OWUkMIwFrjKAIqolvqoA4ZrJppgwE0Gxmw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.1': - resolution: {integrity: sha512-bV4fzswuzVcKD90o/VM6QqKxnxlDq0g2BISDLNVmxrnhpv1DDbyPhCIjYfvzYLV+MvkKKnQt2Q6AO86SEBULUQ==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.1': - resolution: {integrity: sha512-/Mh0Zhq3OP7fVs0kcQHZP6lZEthMGTaSf8UBQYSFEZDWGXXlEC+nJ6EqenaK2t4LBXMe3A+K/G2BVXXdtOr4PQ==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.1': - resolution: {integrity: sha512-+1xc9X45l8ufsBAm6Gjvx2qDRIY9lTVt0cgWNcJ+1gdhXvkbxePA60yRTwSTuXL09CMhyJmjpV7E3NoyxbqFQQ==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.1': - resolution: {integrity: sha512-1D+UqZdfnuR+Jy1GgMJwi85bD40H21uNmOPRWQhw4oRSuolZ/B5rixZ45DK2KXOTCvmVCecauWgEhbw8bI7tOw==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.1': - resolution: {integrity: sha512-INAycaWuhlOK3wk4mRHGsdgwYWmd9cChdPdE9bwWmy6rn9VqVNYNFGhOdXrofXUxwHIncSiPNb8tNm8knDVIeQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3166,8 +3263,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} '@rollup/rollup-android-arm-eabi@4.43.0': resolution: {integrity: sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==} @@ -3392,27 +3489,27 @@ packages: peerDependencies: solid-js: ^2.0.0-beta.14 - '@storybook/addon-docs@10.4.1': - resolution: {integrity: sha512-IYqUdjoZe4VO2LFZlKL/gwy7DsQSWCq6hX+zc1MBmZo04yycDASk1tte57n9pdlW3ajw9yYMF/+lVBi+xQjyvw==} + '@storybook/addon-docs@10.4.2': + resolution: {integrity: sha512-CtW1O4xSKZPNtpWgpfp4yB/x4pj/of+3MvlEDfErSlr3Hp3QmEa2pCLaecR08H5LJqJFlt1PtG0UrIynTvgW9w==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.1 + storybook: ^10.4.2 peerDependenciesMeta: '@types/react': optional: true - '@storybook/builder-vite@10.4.1': - resolution: {integrity: sha512-/oyQrXoNOqN8SW5hNnYP+I1uvgFxKxWXj/EP6NXYzc5SQwImofgru+D2+6gDhL0+Q//+Hx05DJoQO2omvUJ8bQ==} + '@storybook/builder-vite@10.4.2': + resolution: {integrity: sha512-d3+i9vbbUfV6hvT90qabmy1WmC4bEJ7iAYDm0217doeA+S6awF25GF0qOy9gN9waU4NMntHoVpdB1YQO2wUj/w==} peerDependencies: - storybook: ^10.4.1 + storybook: ^10.4.2 vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@storybook/csf-plugin@10.4.1': - resolution: {integrity: sha512-WdPepGBxDGOUDjYd8KxMtcf+us/2PAcnBczl77XtrnxxHNs0jWesxKkiJ9yiuGrge4BPhDeAj6rxjbBoaHxLBA==} + '@storybook/csf-plugin@10.4.2': + resolution: {integrity: sha512-GqX/2DeF3/jKs5D7gpDiuT9gd0c/f2TKcnQ5av4/s3YqeN+0nhm7btkCrDfgF16uzE1Zj3OrkxvB3AOkfxWgDg==} peerDependencies: esbuild: '*' rollup: '*' - storybook: ^10.4.1 + storybook: ^10.4.2 vite: '*' webpack: '*' peerDependenciesMeta: @@ -3434,14 +3531,14 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@storybook/react-dom-shim@10.4.1': - resolution: {integrity: sha512-6QFqfDNH4DMrt7yHKRfpqRopsVUc/Az+sXIdJ39IetYnHUxL3nW4NVaPc6uy/8Qi8urzUyEXL/nn7cpSIP2aPQ==} + '@storybook/react-dom-shim@10.4.2': + resolution: {integrity: sha512-Eng3Yt2NCjPX94QcfyLeUFhrMj0hec2yU9J/qafBVbfj9XrFI8o+0ZwYJ7uXb9ECbvPN4y06dgt/2W/LiR417w==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 '@types/react-dom': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^10.4.1 + storybook: ^10.4.2 peerDependenciesMeta: '@types/react': optional: true @@ -3606,8 +3703,8 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -3681,8 +3778,8 @@ packages: '@types/phoenix@1.6.6': resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} - '@types/react@19.2.15': - resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} + '@types/react@19.2.16': + resolution: {integrity: sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==} '@types/sizzle@2.3.8': resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} @@ -3958,8 +4055,8 @@ packages: babel-dead-code-elimination@1.0.12: resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} - babel-plugin-jsx-dom-expressions@0.40.7: - resolution: {integrity: sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==} + babel-plugin-jsx-dom-expressions@0.39.8: + resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} peerDependencies: '@babel/core': ^7.20.12 @@ -3981,14 +4078,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-solid@1.9.12: - resolution: {integrity: sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==} + babel-preset-solid@1.9.6: + resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} peerDependencies: '@babel/core': ^7.0.0 - solid-js: ^1.9.12 - peerDependenciesMeta: - solid-js: - optional: true babel-preset-solid@2.0.0-beta.13: resolution: {integrity: sha512-VX5fa4b6Sn92v+vFw3ITEvDv0f5vZZZhGgGcqYaAzjP7RF45+VZcZBoG0pHwCGA7UfXdYLUQuqXb4tG1uV3cQA==} @@ -4021,8 +4114,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.32: - resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + baseline-browser-mapping@2.10.34: + resolution: {integrity: sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==} engines: {node: '>=6.0.0'} hasBin: true @@ -4518,6 +4611,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4735,8 +4833,8 @@ packages: resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} engines: {node: '>=10'} - geist@1.7.1: - resolution: {integrity: sha512-XF8DM30ODhDu0Ng5S2kOS8j4ZkG/6z2fKWAiFJA7wG0Hc92ZXgjYLrwbD9bVU4nGVzwboPtG+QtaPGsfgnXLaA==} + geist@1.7.2: + resolution: {integrity: sha512-Gu5lDFa3pLRyoBlBPf0QIFHVdWAnpco7fS1bJm41jyLPFoguBgiubseUN2oLXMgqZ7uxAxDoXcHMhCY/fOTTgg==} peerDependencies: next: '>=13.2.0' @@ -4756,9 +4854,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -5071,8 +5166,8 @@ packages: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} - isbot@5.1.40: - resolution: {integrity: sha512-yNeeynhhtIVRBk12tBV4eHNxwB42HzR4Q3Ea7vCOiJhImGaAIdIMrbJtacQlBizGLjUPw+akkFI5Dn9T70XoVQ==} + isbot@5.1.39: + resolution: {integrity: sha512-obH0yYahGXdzNxo+djmHhBYThUKDkz565cxkIlt2L9hXfv1NlaLKoDBHo6KxXsYrIXx2RK3x5vY36CfZcobxEw==} engines: {node: '>=18'} isexe@2.0.0: @@ -5312,8 +5407,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.5.0: - resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -5541,8 +5636,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@16.2.6: - resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==} + next@16.2.7: + resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -5665,8 +5760,8 @@ packages: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.19.1: - resolution: {integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==} + oxc-resolver@11.20.0: + resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} @@ -5880,8 +5975,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.13: + resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} engines: {node: ^10 || ^12 || >=14} postcss@8.5.5: @@ -6000,16 +6095,20 @@ packages: peerDependencies: typescript: '>= 4.3.x' - react-dom@19.2.6: - resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.6 + react: ^19.2.7 react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react@19.2.6: - resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -6107,9 +6206,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -6126,8 +6222,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rolldown@1.0.1: - resolution: {integrity: sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -6194,6 +6290,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.2: + resolution: {integrity: sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==} + engines: {node: '>=10'} + hasBin: true + sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -6203,8 +6304,8 @@ packages: peerDependencies: seroval: ^1.0 - seroval-plugins@1.5.4: - resolution: {integrity: sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==} + seroval-plugins@1.5.2: + resolution: {integrity: sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 @@ -6213,8 +6314,8 @@ packages: resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} engines: {node: '>=10'} - seroval@1.5.4: - resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} + seroval@1.5.2: + resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==} engines: {node: '>=10'} set-blocking@2.0.0: @@ -6346,8 +6447,8 @@ packages: typescript: optional: true - storybook@10.4.1: - resolution: {integrity: sha512-V1Zd2e+gBFufqAQVZ1JR8KLqALsEZ3JYSBnWwQbKa6zCfWWanR6AFMyuOkLt2gZOgGp3h2Riuz88pGNVTQSG0A==} + storybook@10.4.2: + resolution: {integrity: sha512-5Ax5vbHxFgMBGGhQDm75Rrumm/HZC4ICFhMcJaM0UlqnC/4FKj/IaZtImZFupknyiiyUEcWHPQFA2kX3/VSv1A==} hasBin: true peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -6563,8 +6664,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.2: - resolution: {integrity: sha512-He0ZWr41gLa4vD30Au3yuwpe0HXaCZbclvl8RBieUiJ9aFnPMWUPIyvw3RU8+1Crjfcrauvitae2a4tUzRAGsw==} + tsx@4.22.3: + resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} engines: {node: '>=18.0.0'} hasBin: true @@ -6668,8 +6769,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - validate-html-nesting@1.2.4: - resolution: {integrity: sha512-doQi7e8EJ2OWneSG1aZpJluS6A49aZM0+EICXWKm1i6WvqTLmq0tpUcImc4KTWG50mORO0C4YDBtOCSYvElftw==} + validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} value-or-promise@1.0.12: resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} @@ -6768,13 +6869,13 @@ packages: yaml: optional: true - vite@8.0.13: - resolution: {integrity: sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==} + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.18 + '@vitejs/devtools': ^0.1.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -6997,11 +7098,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - '@ardatan/relay-compiler@12.0.0(graphql@16.9.0)': dependencies: '@babel/core': 7.29.0 @@ -7052,30 +7148,8 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.5': {} - '@babel/compat-data@7.29.3': {} - '@babel/core@7.27.4': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) - '@babel/helpers': 7.27.6 - '@babel/parser': 7.27.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 - convert-source-map: 2.0.0 - debug: 4.4.1 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -7116,14 +7190,6 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.27.5 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.0 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.3 @@ -7132,19 +7198,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -7171,13 +7224,6 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.0 @@ -7185,24 +7231,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.27.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -7218,17 +7246,6 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -7253,11 +7270,6 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.27.6 - '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 @@ -7265,7 +7277,7 @@ snapshots: '@babel/parser@7.27.5': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.29.0 '@babel/parser@7.29.3': dependencies: @@ -7275,7 +7287,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -7284,48 +7296,33 @@ snapshots: '@babel/compat-data': 7.29.3 '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.29.0) '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.0)': @@ -7336,24 +7333,24 @@ snapshots: '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-classes@7.25.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) '@babel/traverse': 7.29.0 globals: 11.12.0 @@ -7363,24 +7360,24 @@ snapshots: '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.28.6 '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.29.0) '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color @@ -7389,7 +7386,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -7397,25 +7394,17 @@ snapshots: '@babel/plugin-transform-literals@7.25.2(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.29.0) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -7423,7 +7412,7 @@ snapshots: '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -7431,25 +7420,25 @@ snapshots: '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -7457,12 +7446,12 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-spread@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color @@ -7470,27 +7459,27 @@ snapshots: '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)': + '@babel/preset-typescript@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -7508,18 +7497,6 @@ snapshots: '@babel/parser': 7.29.3 '@babel/types': 7.29.0 - '@babel/traverse@7.27.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 - '@babel/template': 7.27.2 - '@babel/types': 7.27.6 - debug: 4.4.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -7737,144 +7714,222 @@ snapshots: '@esbuild/aix-ppc64@0.25.5': optional: true + '@esbuild/aix-ppc64@0.28.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true '@esbuild/android-arm64@0.25.5': optional: true + '@esbuild/android-arm64@0.28.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true '@esbuild/android-arm@0.25.5': optional: true + '@esbuild/android-arm@0.28.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true '@esbuild/android-x64@0.25.5': optional: true + '@esbuild/android-x64@0.28.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true '@esbuild/darwin-arm64@0.25.5': optional: true + '@esbuild/darwin-arm64@0.28.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true '@esbuild/darwin-x64@0.25.5': optional: true + '@esbuild/darwin-x64@0.28.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true '@esbuild/freebsd-arm64@0.25.5': optional: true + '@esbuild/freebsd-arm64@0.28.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true '@esbuild/freebsd-x64@0.25.5': optional: true + '@esbuild/freebsd-x64@0.28.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true '@esbuild/linux-arm64@0.25.5': optional: true + '@esbuild/linux-arm64@0.28.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true '@esbuild/linux-arm@0.25.5': optional: true + '@esbuild/linux-arm@0.28.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true '@esbuild/linux-ia32@0.25.5': optional: true + '@esbuild/linux-ia32@0.28.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true '@esbuild/linux-loong64@0.25.5': optional: true + '@esbuild/linux-loong64@0.28.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true '@esbuild/linux-mips64el@0.25.5': optional: true + '@esbuild/linux-mips64el@0.28.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true '@esbuild/linux-ppc64@0.25.5': optional: true + '@esbuild/linux-ppc64@0.28.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true '@esbuild/linux-riscv64@0.25.5': optional: true + '@esbuild/linux-riscv64@0.28.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true '@esbuild/linux-s390x@0.25.5': optional: true + '@esbuild/linux-s390x@0.28.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true '@esbuild/linux-x64@0.25.5': optional: true + '@esbuild/linux-x64@0.28.0': + optional: true + '@esbuild/netbsd-arm64@0.25.5': optional: true + '@esbuild/netbsd-arm64@0.28.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true '@esbuild/netbsd-x64@0.25.5': optional: true + '@esbuild/netbsd-x64@0.28.0': + optional: true + '@esbuild/openbsd-arm64@0.25.5': optional: true + '@esbuild/openbsd-arm64@0.28.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true '@esbuild/openbsd-x64@0.25.5': optional: true + '@esbuild/openbsd-x64@0.28.0': + optional: true + + '@esbuild/openharmony-arm64@0.28.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true '@esbuild/sunos-x64@0.25.5': optional: true + '@esbuild/sunos-x64@0.28.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true '@esbuild/win32-arm64@0.25.5': optional: true + '@esbuild/win32-arm64@0.28.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true '@esbuild/win32-ia32@0.25.5': optional: true + '@esbuild/win32-ia32@0.28.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true '@esbuild/win32-x64@0.25.5': optional: true + '@esbuild/win32-x64@0.28.0': + optional: true + '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@1.21.7))': dependencies: eslint: 9.28.0(jiti@1.21.7) @@ -8487,17 +8542,17 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.7.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: glob: 13.0.6 react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) optionalDependencies: typescript: 5.8.3 '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/gen-mapping@0.3.8': @@ -8517,6 +8572,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -8525,7 +8582,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@kamilkisiela/fast-url-parser@1.1.4': {} @@ -8545,50 +8602,50 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/react@3.1.1(@types/react@19.2.15)(react@19.2.6)': + '@mdx-js/react@3.1.1(@types/react@19.2.16)(react@19.2.5)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.15 - react: 19.2.6 + '@types/react': 19.2.16 + react: 19.2.5 '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: '@emnapi/core': 1.9.2 '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@16.2.6': {} + '@next/env@16.2.7': {} - '@next/swc-darwin-arm64@16.2.6': + '@next/swc-darwin-arm64@16.2.7': optional: true - '@next/swc-darwin-x64@16.2.6': + '@next/swc-darwin-x64@16.2.7': optional: true - '@next/swc-linux-arm64-gnu@16.2.6': + '@next/swc-linux-arm64-gnu@16.2.7': optional: true - '@next/swc-linux-arm64-musl@16.2.6': + '@next/swc-linux-arm64-musl@16.2.7': optional: true - '@next/swc-linux-x64-gnu@16.2.6': + '@next/swc-linux-x64-gnu@16.2.7': optional: true - '@next/swc-linux-x64-musl@16.2.6': + '@next/swc-linux-x64-musl@16.2.7': optional: true - '@next/swc-win32-arm64-msvc@16.2.6': + '@next/swc-win32-arm64-msvc@16.2.7': optional: true - '@next/swc-win32-x64-msvc@16.2.6': + '@next/swc-win32-x64-msvc@16.2.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -8690,71 +8747,65 @@ snapshots: '@oxc-project/types@0.127.0': {} - '@oxc-project/types@0.130.0': {} - - '@oxc-resolver/binding-android-arm-eabi@11.19.1': + '@oxc-resolver/binding-android-arm-eabi@11.20.0': optional: true - '@oxc-resolver/binding-android-arm64@11.19.1': + '@oxc-resolver/binding-android-arm64@11.20.0': optional: true - '@oxc-resolver/binding-darwin-arm64@11.19.1': + '@oxc-resolver/binding-darwin-arm64@11.20.0': optional: true - '@oxc-resolver/binding-darwin-x64@11.19.1': + '@oxc-resolver/binding-darwin-x64@11.20.0': optional: true - '@oxc-resolver/binding-freebsd-x64@11.19.1': + '@oxc-resolver/binding-freebsd-x64@11.20.0': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.19.1': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.19.1': + '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.19.1': + '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.19.1': + '@oxc-resolver/binding-linux-arm64-musl@11.20.0': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.19.1': + '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.19.1': + '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.19.1': + '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.19.1': + '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.19.1': + '@oxc-resolver/binding-linux-x64-gnu@11.20.0': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.19.1': + '@oxc-resolver/binding-linux-x64-musl@11.20.0': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.19.1': + '@oxc-resolver/binding-openharmony-arm64@11.20.0': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@oxc-resolver/binding-wasm32-wasi@11.20.0': dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.19.1': + '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': optional: true - '@oxc-resolver/binding-win32-ia32-msvc@11.19.1': - optional: true - - '@oxc-resolver/binding-win32-x64-msvc@11.19.1': + '@oxc-resolver/binding-win32-x64-msvc@11.20.0': optional: true '@peculiar/asn1-schema@2.3.13': @@ -8778,69 +8829,69 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@reduxjs/toolkit@1.9.7(react@19.2.6)': + '@reduxjs/toolkit@1.9.7(react@19.2.7)': dependencies: immer: 9.0.21 redux: 4.2.1 redux-thunk: 2.4.2(redux@4.2.1) reselect: 4.1.8 optionalDependencies: - react: 19.2.6 + react: 19.2.7 '@repeaterjs/repeater@3.0.6': {} - '@rolldown/binding-android-arm64@1.0.1': + '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-arm64@1.0.1': + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-x64@1.0.1': + '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-freebsd-x64@1.0.1': + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.1': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.1': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.1': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.1': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.1': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.1': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-musl@1.0.1': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-openharmony-arm64@1.0.1': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-wasm32-wasi@1.0.1': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.1': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.1': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true '@rolldown/pluginutils@1.0.0-beta.40': {} - '@rolldown/pluginutils@1.0.1': {} + '@rolldown/pluginutils@1.0.0-rc.17': {} '@rollup/rollup-android-arm-eabi@4.43.0': optional: true @@ -9037,40 +9088,40 @@ snapshots: '@solidjs/web@2.0.0-beta.10(solid-js@2.0.0-beta.10)': dependencies: - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js: 2.0.0-beta.10 '@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.13)': dependencies: - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js: 2.0.0-beta.13 '@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14)': dependencies: - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js: 2.0.0-beta.14 '@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14)': dependencies: - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js: 2.0.0-beta.14 - '@storybook/addon-docs@10.4.1(@types/react@19.2.15)(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@storybook/addon-docs@10.4.2(@types/react@19.2.16)(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: - '@mdx-js/react': 3.1.1(@types/react@19.2.15)(react@19.2.6) - '@storybook/csf-plugin': 10.4.1(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) - '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@storybook/react-dom-shim': 10.4.1(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)) - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - storybook: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@mdx-js/react': 3.1.1(@types/react@19.2.16)(react@19.2.5) + '@storybook/csf-plugin': 10.4.2(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.5) + '@storybook/react-dom-shim': 10.4.2(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.5)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) + react: 19.2.5 + react-dom: 19.2.7(react@19.2.5) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) ts-dedent: 2.2.0 optionalDependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.16 transitivePeerDependencies: - '@types/react-dom' - esbuild @@ -9078,40 +9129,45 @@ snapshots: - vite - webpack - '@storybook/builder-vite@10.4.1(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@storybook/builder-vite@10.4.2(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: - '@storybook/csf-plugin': 10.4.1(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) - storybook: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@storybook/csf-plugin': 10.4.2(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) ts-dedent: 2.2.0 - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) transitivePeerDependencies: - esbuild - rollup - webpack - '@storybook/csf-plugin@10.4.1(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@storybook/csf-plugin@10.4.2(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: - storybook: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) unplugin: 2.3.5 optionalDependencies: esbuild: 0.25.5 rollup: 4.43.0 - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) '@storybook/global@5.0.0': {} - '@storybook/icons@2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@storybook/icons@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.5)': + dependencies: + react: 19.2.5 + react-dom: 19.2.7(react@19.2.7) + + '@storybook/icons@2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - '@storybook/react-dom-shim@10.4.1(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))': + '@storybook/react-dom-shim@10.4.2(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.5)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))': dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - storybook: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.7(react@19.2.7) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) optionalDependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.16 '@supabase/auth-js@2.67.3': dependencies: @@ -9177,8 +9233,8 @@ snapshots: dependencies: '@tanstack/history': 1.161.6 cookie-es: 2.0.0 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) '@tanstack/router-generator@1.166.24': dependencies: @@ -9188,15 +9244,15 @@ snapshots: prettier: 3.5.3 recast: 0.23.11 source-map: 0.7.6 - tsx: 4.20.2 + tsx: 4.22.3 zod: 3.25.63 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.167.12(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@tanstack/router-plugin@1.167.12(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: '@babel/core': 7.29.0 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.0) '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 @@ -9209,8 +9265,8 @@ snapshots: unplugin: 2.3.5 zod: 3.25.63 optionalDependencies: - vite: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) - vite-plugin-solid: 3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + vite: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) + vite-plugin-solid: 3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) transitivePeerDependencies: - supports-color @@ -9235,7 +9291,7 @@ snapshots: '@solidjs/web': 2.0.0-beta.13(solid-js@2.0.0-beta.14) '@tanstack/history': 1.161.6 '@tanstack/router-core': 1.168.9 - isbot: 5.1.40 + isbot: 5.1.39 solid-js: 2.0.0-beta.14 '@tanstack/solid-start-client@2.0.0-beta.17(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14)': @@ -9259,18 +9315,18 @@ snapshots: transitivePeerDependencies: - crossws - '@tanstack/solid-start@2.0.0-beta.18(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@tanstack/solid-start@2.0.0-beta.18(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: '@solidjs/web': 2.0.0-beta.13(solid-js@2.0.0-beta.14) '@tanstack/solid-router': 2.0.0-beta.17(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14) '@tanstack/solid-start-client': 2.0.0-beta.17(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14) '@tanstack/solid-start-server': 2.0.0-beta.17(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(solid-js@2.0.0-beta.14) '@tanstack/start-client-core': 1.167.9 - '@tanstack/start-plugin-core': 1.167.17(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + '@tanstack/start-plugin-core': 1.167.17(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) '@tanstack/start-server-core': 1.167.9 pathe: 2.0.3 solid-js: 2.0.0-beta.14 - vite: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -9284,11 +9340,11 @@ snapshots: '@tanstack/router-core': 1.168.9 '@tanstack/start-fn-stubs': 1.161.6 '@tanstack/start-storage-context': 1.166.23 - seroval: 1.5.4 + seroval: 1.5.2 '@tanstack/start-fn-stubs@1.161.6': {} - '@tanstack/start-plugin-core@1.167.17(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0))': + '@tanstack/start-plugin-core@1.167.17(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.29.0 @@ -9296,7 +9352,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.40 '@tanstack/router-core': 1.168.9 '@tanstack/router-generator': 1.166.24 - '@tanstack/router-plugin': 1.167.12(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + '@tanstack/router-plugin': 1.167.12(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) '@tanstack/router-utils': 1.161.6 '@tanstack/start-client-core': 1.167.9 '@tanstack/start-server-core': 1.167.9 @@ -9308,8 +9364,8 @@ snapshots: srvx: 0.11.15 tinyglobby: 0.2.16 ufo: 1.6.1 - vite: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) - vitefu: 1.1.3(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + vite: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) + vitefu: 1.1.3(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) xmlbuilder2: 4.0.3 zod: 3.25.63 transitivePeerDependencies: @@ -9327,7 +9383,7 @@ snapshots: '@tanstack/start-client-core': 1.167.9 '@tanstack/start-storage-context': 1.166.23 h3-v2: h3@2.0.1-rc.16 - seroval: 1.5.4 + seroval: 1.5.2 transitivePeerDependencies: - crossws @@ -9369,7 +9425,7 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@tybys/wasm-util@0.10.2': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -9456,7 +9512,7 @@ snapshots: '@types/phoenix@1.6.6': {} - '@types/react@19.2.15': + '@types/react@19.2.16': dependencies: csstype: 3.2.3 @@ -9786,44 +9842,35 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-jsx-dom-expressions@0.40.7(@babel/core@7.27.4): + babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.4) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.3.0 + validate-html-nesting: 1.2.2 babel-plugin-jsx-dom-expressions@0.50.0-next.11(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.3.0 - validate-html-nesting: 1.2.4 - - babel-plugin-jsx-dom-expressions@0.50.0-next.13(@babel/core@7.27.4): - dependencies: - '@babel/core': 7.27.4 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.27.4) - '@babel/types': 7.29.0 - html-entities: 2.3.3 - parse5: 7.3.0 - validate-html-nesting: 1.2.4 + validate-html-nesting: 1.2.2 babel-plugin-jsx-dom-expressions@0.50.0-next.13(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.3.0 - validate-html-nesting: 1.2.4 + validate-html-nesting: 1.2.2 babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} @@ -9834,7 +9881,7 @@ snapshots: '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.29.0) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.29.0) - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.0) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.29.0) '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.29.0) @@ -9860,12 +9907,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-solid@1.9.12(@babel/core@7.27.4)(solid-js@2.0.0-beta.14): + babel-preset-solid@1.9.6(@babel/core@7.29.0): dependencies: - '@babel/core': 7.27.4 - babel-plugin-jsx-dom-expressions: 0.40.7(@babel/core@7.27.4) - optionalDependencies: - solid-js: 2.0.0-beta.14 + '@babel/core': 7.29.0 + babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.29.0) babel-preset-solid@2.0.0-beta.13(@babel/core@7.29.0)(solid-js@2.0.0-beta.14): dependencies: @@ -9874,13 +9919,6 @@ snapshots: optionalDependencies: solid-js: 2.0.0-beta.14 - babel-preset-solid@2.0.0-beta.14(@babel/core@7.27.4)(solid-js@2.0.0-beta.14): - dependencies: - '@babel/core': 7.27.4 - babel-plugin-jsx-dom-expressions: 0.50.0-next.13(@babel/core@7.27.4) - optionalDependencies: - solid-js: 2.0.0-beta.14 - babel-preset-solid@2.0.0-beta.14(@babel/core@7.29.0)(solid-js@2.0.0-beta.14): dependencies: '@babel/core': 7.29.0 @@ -9896,7 +9934,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.32: {} + baseline-browser-mapping@2.10.34: {} better-path-resolve@1.0.0: dependencies: @@ -10377,9 +10415,9 @@ snapshots: esbuild-plugin-solid@0.6.0(esbuild@0.25.5)(solid-js@2.0.0-beta.14): dependencies: - '@babel/core': 7.27.4 - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) - babel-preset-solid: 1.9.12(@babel/core@7.27.4)(solid-js@2.0.0-beta.14) + '@babel/core': 7.29.0 + '@babel/preset-typescript': 7.27.1(@babel/core@7.29.0) + babel-preset-solid: 1.9.6(@babel/core@7.29.0) esbuild: 0.25.5 solid-js: 2.0.0-beta.14 transitivePeerDependencies: @@ -10439,6 +10477,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.5 '@esbuild/win32-x64': 0.25.5 + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -10674,9 +10741,9 @@ snapshots: fuse.js@7.0.0: {} - geist@1.7.1(next@16.2.6(@babel/core@7.27.4)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.8)): + geist@1.7.2(next@16.2.7(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.8)): dependencies: - next: 16.2.6(@babel/core@7.27.4)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.8) + next: 16.2.7(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.8) gensync@1.0.0-beta.2: {} @@ -10700,10 +10767,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-tsconfig@4.10.1: - dependencies: - resolve-pkg-maps: 1.0.0 - github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -11028,7 +11091,7 @@ snapshots: dependencies: is-inside-container: 1.0.0 - isbot@5.1.40: {} + isbot@5.1.39: {} isexe@2.0.0: {} @@ -11251,7 +11314,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.5.0: {} + lru-cache@11.5.1: {} lru-cache@5.1.1: dependencies: @@ -11637,25 +11700,25 @@ snapshots: natural-compare@1.4.0: {} - next@16.2.6(@babel/core@7.27.4)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.8): + next@16.2.7(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.8): dependencies: - '@next/env': 16.2.6 + '@next/env': 16.2.7 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.32 + baseline-browser-mapping: 2.10.34 caniuse-lite: 1.0.30001722 postcss: 8.4.31 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - styled-jsx: 5.1.6(@babel/core@7.27.4)(react@19.2.6) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.7) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.6 - '@next/swc-darwin-x64': 16.2.6 - '@next/swc-linux-arm64-gnu': 16.2.6 - '@next/swc-linux-arm64-musl': 16.2.6 - '@next/swc-linux-x64-gnu': 16.2.6 - '@next/swc-linux-x64-musl': 16.2.6 - '@next/swc-win32-arm64-msvc': 16.2.6 - '@next/swc-win32-x64-msvc': 16.2.6 + '@next/swc-darwin-arm64': 16.2.7 + '@next/swc-darwin-x64': 16.2.7 + '@next/swc-linux-arm64-gnu': 16.2.7 + '@next/swc-linux-arm64-musl': 16.2.7 + '@next/swc-linux-x64-gnu': 16.2.7 + '@next/swc-linux-x64-musl': 16.2.7 + '@next/swc-win32-arm64-msvc': 16.2.7 + '@next/swc-win32-x64-msvc': 16.2.7 sass: 1.77.8 sharp: 0.34.5 transitivePeerDependencies: @@ -11785,31 +11848,27 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 '@oxc-parser/binding-win32-x64-msvc': 0.127.0 - oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + oxc-resolver@11.20.0: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.19.1 - '@oxc-resolver/binding-android-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-arm64': 11.19.1 - '@oxc-resolver/binding-darwin-x64': 11.19.1 - '@oxc-resolver/binding-freebsd-x64': 11.19.1 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.19.1 - '@oxc-resolver/binding-linux-arm64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-arm64-musl': 11.19.1 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-riscv64-musl': 11.19.1 - '@oxc-resolver/binding-linux-s390x-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 - '@oxc-resolver/binding-linux-x64-musl': 11.19.1 - '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 - '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 - '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@oxc-resolver/binding-android-arm-eabi': 11.20.0 + '@oxc-resolver/binding-android-arm64': 11.20.0 + '@oxc-resolver/binding-darwin-arm64': 11.20.0 + '@oxc-resolver/binding-darwin-x64': 11.20.0 + '@oxc-resolver/binding-freebsd-x64': 11.20.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.20.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.20.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.20.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.20.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.20.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.20.0 + '@oxc-resolver/binding-linux-x64-musl': 11.20.0 + '@oxc-resolver/binding-openharmony-arm64': 11.20.0 + '@oxc-resolver/binding-wasm32-wasi': 11.20.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 p-filter@2.1.0: dependencies: @@ -11911,7 +11970,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.5.0 + lru-cache: 11.5.1 minipass: 7.1.2 path-type@4.0.0: {} @@ -12016,7 +12075,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.14: + postcss@8.5.13: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -12077,14 +12136,21 @@ snapshots: dependencies: typescript: 5.8.3 - react-dom@19.2.6(react@19.2.6): + react-dom@19.2.7(react@19.2.5): dependencies: - react: 19.2.6 + react: 19.2.5 + scheduler: 0.27.0 + + react-dom@19.2.7(react@19.2.7): + dependencies: + react: 19.2.7 scheduler: 0.27.0 react-is@17.0.2: {} - react@19.2.6: {} + react@19.2.5: {} + + react@19.2.7: {} read-cache@1.0.0: dependencies: @@ -12235,8 +12301,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -12252,26 +12316,26 @@ snapshots: rfdc@1.4.1: {} - rolldown@1.0.1: + rolldown@1.0.0-rc.17: dependencies: - '@oxc-project/types': 0.130.0 - '@rolldown/pluginutils': 1.0.1 + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.1 - '@rolldown/binding-darwin-arm64': 1.0.1 - '@rolldown/binding-darwin-x64': 1.0.1 - '@rolldown/binding-freebsd-x64': 1.0.1 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.1 - '@rolldown/binding-linux-arm64-gnu': 1.0.1 - '@rolldown/binding-linux-arm64-musl': 1.0.1 - '@rolldown/binding-linux-ppc64-gnu': 1.0.1 - '@rolldown/binding-linux-s390x-gnu': 1.0.1 - '@rolldown/binding-linux-x64-gnu': 1.0.1 - '@rolldown/binding-linux-x64-musl': 1.0.1 - '@rolldown/binding-openharmony-arm64': 1.0.1 - '@rolldown/binding-wasm32-wasi': 1.0.1 - '@rolldown/binding-win32-arm64-msvc': 1.0.1 - '@rolldown/binding-win32-x64-msvc': 1.0.1 + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 rollup@4.43.0: dependencies: @@ -12341,6 +12405,8 @@ snapshots: semver@7.8.1: {} + semver@7.8.2: {} + sentence-case@3.0.4: dependencies: no-case: 3.0.4 @@ -12351,13 +12417,13 @@ snapshots: dependencies: seroval: 1.3.2 - seroval-plugins@1.5.4(seroval@1.5.4): + seroval-plugins@1.5.2(seroval@1.5.2): dependencies: - seroval: 1.5.4 + seroval: 1.5.2 seroval@1.3.2: {} - seroval@1.5.4: {} + seroval@1.5.2: {} set-blocking@2.0.0: {} @@ -12367,7 +12433,7 @@ snapshots: dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.8.1 + semver: 7.8.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -12448,22 +12514,22 @@ snapshots: dependencies: '@solidjs/signals': 2.0.0-beta.14 csstype: 3.1.3 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js@2.0.0-beta.13: dependencies: '@solidjs/signals': 2.0.0-beta.14 csstype: 3.1.3 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-js@2.0.0-beta.14: dependencies: '@solidjs/signals': 2.0.0-beta.14 - csstype: 3.1.3 - seroval: 1.5.4 - seroval-plugins: 1.5.4(seroval@1.5.4) + csstype: 3.2.3 + seroval: 1.5.2 + seroval-plugins: 1.5.2(seroval@1.5.2) solid-refresh@0.8.0-next.7(solid-js@2.0.0-beta.14): dependencies: @@ -12508,16 +12574,16 @@ snapshots: std-env@3.9.0: {} - storybook-solidjs-vite@10.1.1(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(esbuild@0.25.5)(rollup@4.43.0)(solid-js@2.0.0-beta.14)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)): + storybook-solidjs-vite@10.1.1(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(esbuild@0.25.5)(rollup@4.43.0)(solid-js@2.0.0-beta.14)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@5.8.3)(vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)): dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) - '@storybook/builder-vite': 10.4.1(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.7.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) + '@storybook/builder-vite': 10.4.2(esbuild@0.25.5)(rollup@4.43.0)(storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) '@storybook/global': 5.0.0 semver: 7.8.1 solid-js: 2.0.0-beta.14 - storybook: 10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) - vite-plugin-solid: 3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + storybook: 10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) + vite-plugin-solid: 3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) optionalDependencies: '@solidjs/web': 2.0.0-beta.14(solid-js@2.0.0-beta.14) typescript: 5.8.3 @@ -12526,10 +12592,10 @@ snapshots: - rollup - webpack - storybook@10.4.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@testing-library/dom@10.4.1)(@types/react@19.2.15)(prettier@3.5.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + storybook@10.4.2(@testing-library/dom@10.4.1)(@types/react@19.2.16)(prettier@3.5.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@storybook/icons': 2.0.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@testing-library/jest-dom': 6.9.1 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 @@ -12538,17 +12604,15 @@ snapshots: esbuild: 0.25.5 open: 10.2.0 oxc-parser: 0.127.0 - oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-resolver: 11.20.0 recast: 0.23.11 - semver: 7.8.1 - use-sync-external-store: 1.6.0(react@19.2.6) + semver: 7.8.2 + use-sync-external-store: 1.6.0(react@19.2.7) ws: 8.18.2 optionalDependencies: - '@types/react': 19.2.15 + '@types/react': 19.2.16 prettier: 3.5.3 transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - '@testing-library/dom' - bufferutil - react @@ -12596,12 +12660,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.27.4)(react@19.2.6): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.7): dependencies: client-only: 0.0.1 - react: 19.2.6 + react: 19.2.7 optionalDependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.29.0 sucrase@3.35.0: dependencies: @@ -12773,10 +12837,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.20.2: + tsx@4.22.3: dependencies: - esbuild: 0.25.5 - get-tsconfig: 4.10.1 + esbuild: 0.28.0 optionalDependencies: fsevents: 2.3.3 @@ -12876,13 +12939,13 @@ snapshots: urlpattern-polyfill@8.0.2: {} - use-sync-external-store@1.6.0(react@19.2.6): + use-sync-external-store@1.6.0(react@19.2.7): dependencies: - react: 19.2.6 + react: 19.2.7 util-deprecate@1.0.2: {} - validate-html-nesting@1.2.4: {} + validate-html-nesting@1.2.2: {} value-or-promise@1.0.12: {} @@ -12914,7 +12977,7 @@ snapshots: - supports-color - terser - vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)): + vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.13(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)): dependencies: '@babel/core': 7.29.0 '@solidjs/web': 2.0.0-beta.13(solid-js@2.0.0-beta.14) @@ -12923,14 +12986,14 @@ snapshots: merge-anything: 5.1.7 solid-js: 2.0.0-beta.14 solid-refresh: 0.8.0-next.7(solid-js@2.0.0-beta.14) - vite: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) - vitefu: 1.1.3(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + vite: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) + vitefu: 1.1.3(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: - supports-color - vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)): + vite-plugin-solid@3.0.0-next.5(@solidjs/web@2.0.0-beta.14(solid-js@2.0.0-beta.14))(@testing-library/jest-dom@6.9.1)(solid-js@2.0.0-beta.14)(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)): dependencies: '@babel/core': 7.29.0 '@solidjs/web': 2.0.0-beta.14(solid-js@2.0.0-beta.14) @@ -12939,8 +13002,8 @@ snapshots: merge-anything: 5.1.7 solid-js: 2.0.0-beta.14 solid-refresh: 0.8.0-next.7(solid-js@2.0.0-beta.14) - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) - vitefu: 1.1.3(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) + vitefu: 1.1.3(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)) optionalDependencies: '@testing-library/jest-dom': 6.9.1 transitivePeerDependencies: @@ -12957,7 +13020,7 @@ snapshots: lightningcss: 1.32.0 sass: 1.77.8 - vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0): + vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -12971,32 +13034,32 @@ snapshots: jiti: 1.21.7 lightningcss: 1.32.0 sass: 1.77.8 - tsx: 4.20.2 + tsx: 4.22.3 yaml: 2.5.0 - vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0): + vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.14 - rolldown: 1.0.1 + postcss: 8.5.13 + rolldown: 1.0.0-rc.17 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 22.15.31 - esbuild: 0.25.5 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 1.21.7 sass: 1.77.8 - tsx: 4.20.2 + tsx: 4.22.3 yaml: 2.5.0 - vitefu@1.1.3(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)): + vitefu@1.1.3(vite@6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)): optionalDependencies: - vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 6.3.5(@types/node@22.15.31)(jiti@1.21.7)(lightningcss@1.32.0)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) - vitefu@1.1.3(vite@8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0)): + vitefu@1.1.3(vite@8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0)): optionalDependencies: - vite: 8.0.13(@types/node@22.15.31)(esbuild@0.25.5)(jiti@1.21.7)(sass@1.77.8)(tsx@4.20.2)(yaml@2.5.0) + vite: 8.0.10(@types/node@22.15.31)(esbuild@0.28.0)(jiti@1.21.7)(sass@1.77.8)(tsx@4.22.3)(yaml@2.5.0) vitest@2.1.9(@types/node@22.15.31)(jsdom@25.0.1)(lightningcss@1.32.0)(sass@1.77.8): dependencies: