From 9dad95c3cc35d1d163490a641a59c0ca452febc0 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:00:39 -0400 Subject: [PATCH 01/14] Improve instructions & specificity for agents - Remove overly specific px measurement. These details can drift --- packages/demo/src/content/docs/components/nav.mdx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 0df32914..c0bacba4 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -8,9 +8,11 @@ import { NavListDemo } from "@demo/components/demo/nav-list"; ## Overview -Nav builds an app's sidebar. `NavRail` is the column of icon links on the left, and `NavPanel` is the panel beside it, with a header and a scrolling body. `NavSwitcher` sits in the panel's header to switch between items such as projects; with one option and no action it is a plain heading. +Nav builds an app's sidebar. `NavRail` composes the largest sections of an application as icons with tooltips, and `NavPanel` sits beside it containing each page within the section, a header, and a scrolling body. `NavSwitcher` sits in the panel's header to allow users to quickly switch between the parent item of a section such as projects in Guardian. -Inside the panel, `NavList` holds the links, one per row, in groups. A row can open a deeper level, which slides in with a ‹ to go back. A nav list also works on its own, such as in a popover, a sheet or a settings list. For actions in a pop-up, use a [Dropdown Menu](/components/dropdown-menu): menus are for actions, nav lists are for going places. +Our Nav component progressively displays a tree of navigation options. In addition to navigating between pages, `NavListItem` can also open a deeper level. Users can navigate back within the nav tree hierarchy using. + +Nav should not be used for actions, for these use a [Dropdown Menu](/components/dropdown-menu) instead. Always Put `NavList` inside an element with a background colour, such as a popover, sheet or panel: the sliding levels inherit the background colour to cover each other. ## Usage @@ -31,7 +33,7 @@ import { } from "@eqtylab/equality"; ``` -Group the rows, each group with an optional label, and put a separator between groups. Rows are 36px, and grow to 44px on touch screens: +Group the rows, each group with an optional label, and add a separator between groups. @@ -94,7 +96,7 @@ Put a group inside another group to nest it one level, under a tree line. Nested ## Drill-in -A row with `drill="eu-ai-act"` opens the level whose `value` is `"eu-ai-act"`. A level with a `parent` gets a ‹ row at the top, named by its `label`, that returns to the parent. Levels must be direct children of `NavDrill`. Put `NavList` inside an element with a background colour, such as a popover, sheet or panel: the sliding levels borrow it to cover each other. +A `NavListItem` with `drill="eu-ai-act"` opens a level whose `value` is `"eu-ai-act"`. A `NavDrillLevel` with a `parent` attribute gets a ‹ row at the top, named by its `label`, that returns the user to the parent level of the tree. Levels must be direct children of `NavDrill`. After a drill row, focus moves to the new level's ‹; after ‹, back to the row you came from. Any other change of level leaves focus alone, and levels swap without sliding under reduced motion. From 49316004dc323be78ec3d59ddb68048fbd2a9217 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:19:29 -0400 Subject: [PATCH 02/14] Further specify app switcher usage contextt --- packages/demo/src/content/docs/components/nav.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index c0bacba4..3483ae91 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -161,7 +161,7 @@ function openLevel(level) { ### App Sidebar -A rail of sections beside a panel, with a switcher in the panel's header and a nav list that drills into a policy. +A rail of top-level app sections in `NavRail` beside a `NavPanel`, with a switcher in the panel's header to quick switch between objects, and a nav list that drills into a policy. From 8e1164a4dcfb2065001a54d08c83ff0be8a5f3bd Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:21:19 -0400 Subject: [PATCH 03/14] Remove navigation gap from SKILL.md we have this now!! --- packages/skills/equality-design-system/SKILL.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/skills/equality-design-system/SKILL.md b/packages/skills/equality-design-system/SKILL.md index 7fb59d03..66d235f3 100644 --- a/packages/skills/equality-design-system/SKILL.md +++ b/packages/skills/equality-design-system/SKILL.md @@ -91,7 +91,6 @@ Verified absent — do not go hunting: - Standalone Calendar or single date picker (only `DateRangePicker`) - Free-text or async autocomplete (`Select` with `SelectSearch` only filters fixed options) - Carousel -- Sidebar/Navigation/Menubar primitives - Rating - Timeline - Resizable panels From df5d7c956ecc7ed8e3363816041ee94d51bb5af4 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:26:00 -0400 Subject: [PATCH 04/14] remove over-specified default un-changable behaviour --- packages/demo/src/content/docs/components/nav.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 3483ae91..2c73bdb0 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -204,8 +204,6 @@ A rail of top-level app sections in `NavRail` beside a `NavPanel`, with a switch ``` -A `NavDrill` inside a `NavPanel` scrolls the panel back to the top on every change of level. - The switcher's trigger stops a typed letter from picking an item while its list is closed: a switch navigates, and focus lands on the trigger afterwards. To do the same on your own `Select`, see [A select that navigates](/components/select#a-select-that-navigates). ### Navigation in a Sheet From f93507aa4de263e2522300bb5da1b6d2e11ee81c Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:41:38 -0400 Subject: [PATCH 05/14] Remove onHighlightEnd Over-specced. We have no plans to use this prop. --- .../demo/src/content/docs/components/nav.mdx | 23 +++++++++---------- .../ui/src/components/nav/nav-switcher.tsx | 9 +------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 2c73bdb0..415cbe75 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -272,18 +272,17 @@ On a phone, the sidebar comes in from the left in a [Sheet](/components/sheet). ### NavSwitcher -| Name | Description | Type | Default | Required | -| ---------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------- | -------- | -| `label` | The current item's name, shown as the panel's heading | `string` | | ✅ | -| `noun` | Singular, for the trigger's name: `{label}, switch {noun}` | `string` | | ✅ | -| `collection` | Plural, for the search and empty copy | `string` | | ✅ | -| `options` | The items to switch between | `{ value, label, keywords? }[]` | | ✅ | -| `value` | The current item's value | `string` | | ✅ | -| `onValueChange` | Called with the picked item's value | `(value: string) => void` | | ✅ | -| `onHighlight` | Hover or focus on an option, to warm its destination | `(value: string) => void` | | ❌ | -| `onHighlightEnd` | Hover or focus leaves an option | `() => void` | | ❌ | -| `action` | A command at the bottom of the list, kept while searching, such as "Create Project"; `onSelect` runs after the list closes | `{ label: string; onSelect: () => void }` | | ❌ | -| `loading` | Holds the switcher's height while the current item loads | `boolean` | `false` | ❌ | +| Name | Description | Type | Default | Required | +| --------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------- | -------- | +| `label` | The current item's name, shown as the panel's heading | `string` | | ✅ | +| `noun` | Singular, for the trigger's name: `{label}, switch {noun}` | `string` | | ✅ | +| `collection` | Plural, for the search and empty copy | `string` | | ✅ | +| `options` | The items to switch between | `{ value, label, keywords? }[]` | | ✅ | +| `value` | The current item's value | `string` | | ✅ | +| `onValueChange` | Called with the picked item's value | `(value: string) => void` | | ✅ | +| `onHighlight` | Hover or focus on an option, to warm its destination | `(value: string) => void` | | ❌ | +| `action` | A command at the bottom of the list, kept while searching, such as "Create Project"; `onSelect` runs after the list closes | `{ label: string; onSelect: () => void }` | | ❌ | +| `loading` | Holds the switcher's height while the current item loads | `boolean` | `false` | ❌ | With `loading`, the switcher takes no other props. diff --git a/packages/ui/src/components/nav/nav-switcher.tsx b/packages/ui/src/components/nav/nav-switcher.tsx index e1739aad..a3f9d4c2 100644 --- a/packages/ui/src/components/nav/nav-switcher.tsx +++ b/packages/ui/src/components/nav/nav-switcher.tsx @@ -49,8 +49,6 @@ interface NavSwitcherLoadedProps { onValueChange: (value: string) => void; /** Hover or focus on an option, for a caller that warms its destination */ onHighlight?: (value: string) => void; - /** Hover or focus leaves an option */ - onHighlightEnd?: () => void; /** A command at the bottom of the list, kept while searching, such as "Create Project" */ action?: NavSwitcherAction; } @@ -64,10 +62,7 @@ type NavSwitcherProps = NavSwitcherLoadedProps | NavSwitcherLoadingProps; // The heading is named by the label alone; the trigger's name starts with it and says what the // control does (WCAG 2.5.3) const NavSwitcherSelect = React.forwardRef( - ( - { label, noun, collection, options, value, onValueChange, onHighlight, onHighlightEnd, action }, - ref - ) => { + ({ label, noun, collection, options, value, onValueChange, onHighlight, action }, ref) => { const labelId = React.useId(); const actionValue = React.useId(); const actionPending = React.useRef(false); @@ -132,9 +127,7 @@ const NavSwitcherSelect = React.forwardRef onHighlight?.(option.value)} - onPointerLeave={onHighlightEnd} onFocus={() => onHighlight?.(option.value)} - onBlur={onHighlightEnd} > {option.label} From 2b8e53b240783a03cff00797df030d3490de9ec7 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:50:34 -0400 Subject: [PATCH 06/14] =?UTF-8?q?warm=20=E2=86=92=20preload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/demo/src/content/docs/components/nav.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 415cbe75..d78099c5 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -280,7 +280,7 @@ On a phone, the sidebar comes in from the left in a [Sheet](/components/sheet). | `options` | The items to switch between | `{ value, label, keywords? }[]` | | ✅ | | `value` | The current item's value | `string` | | ✅ | | `onValueChange` | Called with the picked item's value | `(value: string) => void` | | ✅ | -| `onHighlight` | Hover or focus on an option, to warm its destination | `(value: string) => void` | | ❌ | +| `onHighlight` | Hover or focus on an option, to preload its destination | `(value: string) => void` | | ❌ | | `action` | A command at the bottom of the list, kept while searching, such as "Create Project"; `onSelect` runs after the list closes | `{ label: string; onSelect: () => void }` | | ❌ | | `loading` | Holds the switcher's height while the current item loads | `boolean` | `false` | ❌ | From e18c1a787714af0c51163299ad2df24ef8aee69a Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:50:45 -0400 Subject: [PATCH 07/14] Bump package to major version --- packages/ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/package.json b/packages/ui/package.json index 610ed1e7..cf454213 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -7,7 +7,7 @@ "url": "git+https://github.com/eqtylab/equality.git", "directory": "packages/ui" }, - "version": "4.15.0", + "version": "5.0.0", "license": "Apache-2.0", "keywords": [ "component library", From 0cb96c009b6e9fa772fd5ebfd7a93657b2ca8765 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 14:56:43 -0400 Subject: [PATCH 08/14] Remove deprecated components `ScrollArea` & `ScrollBar`, `ListOrGridViewToggle`, `Drawer` (never used, doesn't have a docs page even) --- .../demo/list-or-grid-view-toggle.tsx | 24 - .../components/list-or-grid-view-toggle.mdx | 66 -- .../content/docs/components/scroll-area.mdx | 83 -- .../docs/getting-started/elevation.mdx | 1 - .../content/docs/getting-started/usage.mdx | 2 +- .../references/setup.md | 2 +- packages/ui/CHANGELOG.md | 16 + packages/ui/package.json | 4 +- .../src/components/drawer/drawer.module.css | 46 - packages/ui/src/components/drawer/drawer.tsx | 117 --- packages/ui/src/components/index.ts | 3 - .../list-or-grid-view-toggle.module.css | 30 - .../list-or-grid-view-toggle.tsx | 66 -- .../src/components/pagination/pagination.tsx | 5 - .../scroll-area/scroll-area.module.css | 30 - .../components/scroll-area/scroll-area.tsx | 48 - .../src/theme/portal-container-provider.tsx | 2 +- packages/ui/src/theme/portal-container.ts | 2 +- pnpm-lock.yaml | 916 ++++++++---------- 19 files changed, 410 insertions(+), 1053 deletions(-) delete mode 100644 packages/demo/src/components/demo/list-or-grid-view-toggle.tsx delete mode 100644 packages/demo/src/content/docs/components/list-or-grid-view-toggle.mdx delete mode 100644 packages/demo/src/content/docs/components/scroll-area.mdx delete mode 100644 packages/ui/src/components/drawer/drawer.module.css delete mode 100644 packages/ui/src/components/drawer/drawer.tsx delete mode 100644 packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.module.css delete mode 100644 packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.tsx delete mode 100644 packages/ui/src/components/scroll-area/scroll-area.module.css delete mode 100644 packages/ui/src/components/scroll-area/scroll-area.tsx diff --git a/packages/demo/src/components/demo/list-or-grid-view-toggle.tsx b/packages/demo/src/components/demo/list-or-grid-view-toggle.tsx deleted file mode 100644 index 402a9176..00000000 --- a/packages/demo/src/components/demo/list-or-grid-view-toggle.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { - ListOrGridViewToggle, - type ViewMode, - type ViewOrder, -} from "@eqtylab/equality"; -import { useState } from "react"; - -export const ListOrGridViewToggleDemo = ({ - viewMode: initialViewMode, - order, -}: { - viewMode: ViewMode; - order: ViewOrder; -}) => { - const [viewMode, setViewMode] = useState<"grid" | "list">(initialViewMode); - - return ( - - ); -}; diff --git a/packages/demo/src/content/docs/components/list-or-grid-view-toggle.mdx b/packages/demo/src/content/docs/components/list-or-grid-view-toggle.mdx deleted file mode 100644 index 95df3ebf..00000000 --- a/packages/demo/src/content/docs/components/list-or-grid-view-toggle.mdx +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "List or Grid View Toggle" -description: "Deprecated List or Grid View Toggle with sizes and variants" -deprecated: - message: 'Deprecated in favour of Segmented Controls.' ---- - -import { ListOrGridViewToggle } from "@eqtylab/equality"; -import { ListOrGridViewToggleDemo } from "@demo/components/demo/list-or-grid-view-toggle"; - -## Overview - -The List or Grid View Toggle component is used to switch between list and grid view. - -Please adjust the order using the `order` parameter so that the default `viewMode` is always on the left side. - -## Usage - -Import the component: - -```tsx -import { ListOrGridViewToggle } from "@eqtylab/equality"; -``` - -`viewMode` and `onViewModeChange` are required props and should be controlled by the parent component. - -```tsx -const [viewMode, setViewMode] = useState("grid"); - -; -``` - -## Examples - -### Default - - - -### Reordered - - - -## Reordering - -Reorder the order of the buttons using the `order` prop. The default `viewMode` should always be placed on the left side. - -```tsx - -``` - -## Props - -| Prop | Type | Default | Description | -| ------------------ | ---------------------------------------- | ------------------ | ----------------------------------------------- | -| `viewMode` | `"grid"` \| `"list"` | Required | Sets the active state. | -| `onViewModeChange` | `(mode: "grid" \| "list") => void` | Required | Function to call when the active state changes. | -| `order` | `["grid", "list"]` \| `["list", "grid"]` | `["grid", "list"]` | Controls the order of the buttons. | -| `className` | `string` | - | Additional CSS classes to apply to the toggle. | diff --git a/packages/demo/src/content/docs/components/scroll-area.mdx b/packages/demo/src/content/docs/components/scroll-area.mdx deleted file mode 100644 index d78a79b8..00000000 --- a/packages/demo/src/content/docs/components/scroll-area.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: "Scroll Area" -description: "Deprecated scrollable container with custom scrollbars" -deprecated: - message: "Deprecated in favour of browser-native scroll areas. Set an overflow and a height on your own element instead." ---- - -import { ScrollArea } from "@eqtylab/equality"; - -## Overview - -Scroll Area wrapped content in [Radix UI Scroll Area](https://www.radix-ui.com/primitives/docs/components/scroll-area) so that overflowing content got a styled, cross-browser scrollbar instead of the native one. - -This component is deprecated. Browsers now render restrained, theme-aware scrollbars of their own. New code should use a native scrollable element. Existing usage will be removed in a future release. - -## Migrating - -Replace the component with an element that scrolls natively. Give it a height and an overflow, and leave the scrollbar alone — the browser draws one that already matches the user's platform and colour scheme: - -```tsx -// Before - -
{/* long content */}
-
- -// After -
-
{/* long content */}
-
-``` - -Use `overflow-x-auto` for horizontal scrolling, in place of ``. - -Do not restyle the scrollbar. The `styled-vertical-scrollbar` and `styled-horizontal-scrollbar` utilities have been removed, and `::-webkit-scrollbar` rules of your own are a WebKit-only fork of a control the browser already themes. Dialog and Sheet now scroll this way too. - -## Usage - -Import the component: - -```tsx -import { ScrollArea } from "@eqtylab/equality"; -``` - -Set a height on the Scroll Area and place your content inside: - -```tsx - -
{/* long content */}
-
-``` - -## Example - - -
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - - Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. - - Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur. - - Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur. At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident. - - Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. - -
-
- -## Slots - -| Name | Description | -| ------------ | ------------------------------------------------------------------------------------- | -| `ScrollArea` | The scrollable container. Wraps your content and renders a styled vertical scrollbar. | -| `ScrollBar` | The scrollbar element, exported for advanced composition (e.g. a horizontal bar). | - -## Props - -Scroll Area forwards the underlying [Radix Scroll Area Root](https://www.radix-ui.com/primitives/docs/components/scroll-area#root) props (such as `type` and `scrollHideDelay`) in addition to the props below. - -| Name | Description | Type | Default | Required | -| ----------- | ----------------------------------------------------- | ----------- | ------- | -------- | -| `children` | The content to render inside the scrollable viewport. | `ReactNode` | — | ✅ | -| `className` | Additional CSS classes applied to the container. | `string` | — | ❌ | diff --git a/packages/demo/src/content/docs/getting-started/elevation.mdx b/packages/demo/src/content/docs/getting-started/elevation.mdx index fd5f2a74..40d5303a 100644 --- a/packages/demo/src/content/docs/getting-started/elevation.mdx +++ b/packages/demo/src/content/docs/getting-started/elevation.mdx @@ -97,7 +97,6 @@ The following components have an `elevation` prop: | ------------- | --------- | | Alert Dialog | Overlay | | Dialog | Overlay | -| Drawer | Overlay | | Dropdown Menu | Overlay | | Popover | Overlay | | Sheet | Overlay | diff --git a/packages/demo/src/content/docs/getting-started/usage.mdx b/packages/demo/src/content/docs/getting-started/usage.mdx index 701a2366..9650806f 100644 --- a/packages/demo/src/content/docs/getting-started/usage.mdx +++ b/packages/demo/src/content/docs/getting-started/usage.mdx @@ -81,7 +81,7 @@ import { ThemeProvider } from "@eqtylab/equality"; ### Portalled surfaces -Tooltips, popovers, selects, dialogs, sheets, drawers, and dropdown menus render into a portal that `` supplies automatically, so they stay inside the themed subtree. Two cases need you to provide that container yourself, via the `portalContainer` prop: +Tooltips, popovers, selects, dialogs, sheets, and dropdown menus render into a portal that `` supplies automatically, so they stay inside the themed subtree. Two cases need you to provide that container yourself, via the `portalContainer` prop: - **Shadow DOM** — the default document lookup can't see into a shadow root, so portalled surfaces escape the boundary and render unstyled. - **More than one theme root on a page** — otherwise the second root's portals can land inside the first one's container. diff --git a/packages/skills/equality-design-system/references/setup.md b/packages/skills/equality-design-system/references/setup.md index 35d8d691..2dbeeb49 100644 --- a/packages/skills/equality-design-system/references/setup.md +++ b/packages/skills/equality-design-system/references/setup.md @@ -53,7 +53,7 @@ Components each ship their own scoped CSS Module, so there is no global componen ## Portalled surfaces -Tooltips, popovers, selects, dialogs, sheets, drawers, and dropdown menus render into a portal. `ThemeProvider` creates and supplies that container, which keeps those surfaces inside the themed subtree. +Tooltips, popovers, selects, dialogs, sheets, and dropdown menus render into a portal. `ThemeProvider` creates and supplies that container, which keeps those surfaces inside the themed subtree. **If a dropdown or dialog renders unstyled, you almost certainly have no `ThemeProvider`.** That is the single most common setup failure. diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index d198e9aa..339ad644 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -2,6 +2,22 @@ Notable changes to Equality are recorded here, following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## 5.0.0 - 2026-10-27 + +Removes components that were deprecated or never used. Code that imports any of them needs a +change before upgrading. + +### Removed + +- `ScrollArea` and `ScrollBar`. Set an overflow and a height on your own element instead; browsers + draw theme-aware scrollbars of their own. +- `ListOrGridViewToggle`. Use `SegmentedControls` instead. +- `Drawer` and its parts. Use `Sheet` instead. +- `NavSwitcher`'s `onHighlightEnd` prop. +- `Pagination` no longer scrolls a `ScrollArea` viewport to the top when the page changes. Pass + `scrollTargetRef` to choose what scrolls into view. +- The `vaul` and `@radix-ui/react-scroll-area` dependencies. + ## 4.15.0 - 2026-10-27 Sidebar navigation comes to Equality as two sets of parts: `NavList` rows for going somewhere, diff --git a/packages/ui/package.json b/packages/ui/package.json index cf454213..d430f703 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -61,7 +61,6 @@ "@radix-ui/react-popover": "^1.1.3", "@radix-ui/react-progress": "^1.1.1", "@radix-ui/react-radio-group": "^1.3.8", - "@radix-ui/react-scroll-area": "^1.2.1", "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.1", @@ -78,8 +77,7 @@ "react-hook-form": "^7.63.0", "react-truncate-inside": "^1.0.3", "tailwind-merge": "^2.5.4", - "tw-animate-css": "^1.4.0", - "vaul": "^1.1.2" + "tw-animate-css": "^1.4.0" }, "peerDependencies": { "react": "^18.2.0 || ^19.0.0", diff --git a/packages/ui/src/components/drawer/drawer.module.css b/packages/ui/src/components/drawer/drawer.module.css deleted file mode 100644 index d590b2a5..00000000 --- a/packages/ui/src/components/drawer/drawer.module.css +++ /dev/null @@ -1,46 +0,0 @@ -@reference '../../theme/theme.module.css'; - -.drawer-overlay { - @apply overlay-content; - @apply overlay-background; -} - -.drawer-content { - @apply bg-background-overlay border-border-overlay shadow-shadow-overlay border shadow-lg; - @apply mt-24 rounded-t-[10px]; - @apply z-modal fixed inset-x-0 bottom-0 h-auto; - @apply flex flex-col; -} - -.drawer-content-divider { - @apply bg-border; - @apply h-2 w-[100px] rounded-full; - @apply mx-auto mt-4; -} - -.drawer-header { - @apply grid grid-cols-[1fr_auto] gap-1.5 [&>*]:col-start-1; - @apply p-4; - @apply text-center sm:text-left; -} - -.drawer-header-actions { - @apply row-span-(--row-span) col-start-2 row-start-1; -} - -.drawer-footer { - @apply mt-auto p-4; - @apply flex flex-col gap-2; -} - -.drawer-title { - @apply text-lg font-semibold leading-none tracking-tight; -} - -.drawer-description { - @apply text-text-secondary text-sm; -} - -.drawer-inner-content { - @apply px-4; -} diff --git a/packages/ui/src/components/drawer/drawer.tsx b/packages/ui/src/components/drawer/drawer.tsx deleted file mode 100644 index 3f0fd040..00000000 --- a/packages/ui/src/components/drawer/drawer.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import * as React from 'react'; -import { Drawer as DrawerPrimitive } from 'vaul'; - -import styles from '@/components/drawer/drawer.module.css'; -import { cn } from '@/lib/utils'; -import { usePortalContainer } from '@/theme/portal-container'; - -const Drawer = ({ - shouldScaleBackground = true, - ...props -}: React.ComponentProps) => ( - -); -Drawer.displayName = 'Drawer'; - -const DrawerTrigger = DrawerPrimitive.Trigger; - -const DrawerPortal = ({ children }: { children: React.ReactNode }) => ( - {children} -); - -const DrawerClose = DrawerPrimitive.Close; - -const DrawerOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName; - -const DrawerContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - -
- {children} - - -)); -DrawerContent.displayName = 'DrawerContent'; - -const DrawerHeader = ({ className, ...props }: React.HTMLAttributes) => ( -
-); -DrawerHeader.displayName = 'DrawerHeader'; - -const DrawerHeaderActions = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes & { rowSpan: number } ->(({ className, rowSpan, style, ...props }, ref) => { - return ( -
- ); -}); -DrawerHeaderActions.displayName = 'DrawerHeaderActions'; - -const DrawerFooter = ({ className, ...props }: React.HTMLAttributes) => ( -
-); -DrawerFooter.displayName = 'DrawerFooter'; - -const DrawerTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -DrawerTitle.displayName = DrawerPrimitive.Title.displayName; - -const DrawerDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)); -DrawerDescription.displayName = DrawerPrimitive.Description.displayName; - -const DrawerInnerContent = ({ className, ...props }: React.HTMLAttributes) => ( -
-); -DrawerInnerContent.displayName = 'DrawerInnerContent'; - -export { - Drawer, - DrawerClose, - DrawerContent, - DrawerDescription, - DrawerFooter, - DrawerHeader, - DrawerHeaderActions, - DrawerInnerContent, - DrawerOverlay, - DrawerPortal, - DrawerTitle, - DrawerTrigger, -}; diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 1fedde04..5111cacc 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -15,7 +15,6 @@ export * from './copy-button/copy-button'; export * from './date-range-picker/date-range-picker'; export * from './dialog/dialog'; export * from './display-field/display-field'; -export * from './drawer/drawer'; export * from './dropdown-menu/dropdown-menu'; export * from './empty-table-state/empty-table-state'; export * from './filter-dropdown/filter-dropdown'; @@ -27,7 +26,6 @@ export * from './icon/icon'; export * from './info-card/info-card'; export * from './input/input'; export * from './label/label'; -export * from './list-or-grid-view-toggle/list-or-grid-view-toggle'; export * from './loading-overlay/loading-overlay'; export * from './metric-card/metric-card'; export * from './motion-collapsible/motion-collapsible'; @@ -46,7 +44,6 @@ export * from './radial-graph/radial-graph'; export * from './radio-dropdown/radio-dropdown'; export * from './radio-group/radio-group'; export * from './resource-badge/resource-badge'; -export * from './scroll-area/scroll-area'; export * from './search-bar/search-bar'; export * from './section-heading/section-heading'; export * from './segmented-controls/segmented-controls'; diff --git a/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.module.css b/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.module.css deleted file mode 100644 index b413ddf2..00000000 --- a/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.module.css +++ /dev/null @@ -1,30 +0,0 @@ -@reference '../../theme/theme.module.css'; - -.list-or-grid-view-toggle { - @apply border-button-tertiary-border border; - @apply flex rounded-md; - @apply w-max overflow-hidden; - @apply bg-button-tertiary-fill; - @apply relative; -} - -.icon-button { - @apply rounded-none! border-0; - @apply z-above relative; - @apply flex-center size-8; - @apply cursor-pointer bg-transparent; -} - -.icon-button--active { - @apply text-button-primary-text; -} - -.icon-button--inactive { - @apply text-text-secondary hover:text-text-primary; -} - -.active-button-indicator { - @apply absolute bottom-0 left-0 top-0; - @apply bg-button-primary-fill; - @apply transition-transform; -} diff --git a/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.tsx b/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.tsx deleted file mode 100644 index dd9f9113..00000000 --- a/packages/ui/src/components/list-or-grid-view-toggle/list-or-grid-view-toggle.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Grid3X3, List } from 'lucide-react'; - -import styles from '@/components/list-or-grid-view-toggle/list-or-grid-view-toggle.module.css'; -import { cn } from '@/lib/utils'; - -export type ViewMode = 'grid' | 'list'; -export type ViewOrder = ['grid', 'list'] | ['list', 'grid']; - -interface ListOrGridViewToggleProps { - viewMode: ViewMode; - onViewModeChange: (mode: ViewMode) => void; - order?: ViewOrder; - className?: string; -} - -/** - * @deprecated Use `SegmentedControls` instead. - */ -const ListOrGridViewToggle = ({ - viewMode, - onViewModeChange, - order = ['grid', 'list'], - className, -}: ListOrGridViewToggleProps) => { - const currentActiveIndex = order.indexOf(viewMode); - - const handleGridClick = () => { - onViewModeChange('grid'); - }; - - const handleListClick = () => { - onViewModeChange('list'); - }; - - return ( -
- {order.map((mode) => { - const currentlyActive = mode === viewMode; - const Icon = mode === 'grid' ? Grid3X3 : List; - return ( - - ); - })} -
-
- ); -}; - -export { ListOrGridViewToggle }; diff --git a/packages/ui/src/components/pagination/pagination.tsx b/packages/ui/src/components/pagination/pagination.tsx index 2144ee4b..55ad6cf8 100644 --- a/packages/ui/src/components/pagination/pagination.tsx +++ b/packages/ui/src/components/pagination/pagination.tsx @@ -78,11 +78,6 @@ const Pagination = ({ scrollTargetRef.current.scrollIntoView({ behavior: 'smooth' }); } } - - const viewport = document.querySelector('[data-radix-scroll-area-viewport]'); - if (viewport) { - viewport.scrollTop = 0; - } } }; diff --git a/packages/ui/src/components/scroll-area/scroll-area.module.css b/packages/ui/src/components/scroll-area/scroll-area.module.css deleted file mode 100644 index e810517e..00000000 --- a/packages/ui/src/components/scroll-area/scroll-area.module.css +++ /dev/null @@ -1,30 +0,0 @@ -@reference '../../theme/theme.module.css'; - -.scroll-area { - @apply relative overflow-hidden; -} - -.scroll-area-viewport { - @apply h-full w-full rounded-[inherit]; -} - -.scroll-bar { - @apply flex transition-colors; - @apply touch-none select-none; -} - -.scroll-bar--vertical { - @apply border-l border-l-transparent; - @apply h-full w-2.5 p-px; -} - -.scroll-bar--horizontal { - @apply border-t border-t-transparent; - @apply flex-col; - @apply h-2.5 p-px; -} - -.scroll-area-thumb { - @apply bg-border rounded-full; - @apply relative flex-1; -} diff --git a/packages/ui/src/components/scroll-area/scroll-area.tsx b/packages/ui/src/components/scroll-area/scroll-area.tsx deleted file mode 100644 index 5888f79e..00000000 --- a/packages/ui/src/components/scroll-area/scroll-area.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'; - -import styles from '@/components/scroll-area/scroll-area.module.css'; -import { cn } from '@/lib/utils'; - -/** - * @deprecated Use a native scrollable element instead — set an overflow and a height on your own - * container and leave the browser's scrollbar unstyled. - */ -const ScrollArea = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - {children} - - - - -)); -ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; - -/** - * @deprecated Part of the deprecated `ScrollArea`. Use a native scrollable element instead. - */ -const ScrollBar = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, orientation = 'vertical', ...props }, ref) => ( - - - -)); -ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName; - -export { ScrollArea, ScrollBar }; diff --git a/packages/ui/src/theme/portal-container-provider.tsx b/packages/ui/src/theme/portal-container-provider.tsx index 39b94324..630003a3 100644 --- a/packages/ui/src/theme/portal-container-provider.tsx +++ b/packages/ui/src/theme/portal-container-provider.tsx @@ -10,7 +10,7 @@ interface PortalContainerProviderProps { /** * Supplies the container for portalled surfaces — tooltips, popovers, selects, dialogs, - * sheets, drawers, dropdown menus. + * sheets, dropdown menus. * * `ThemeProvider` renders one of these automatically, so most consumers never need it * directly. Reach for it when the container has to be an element you own: diff --git a/packages/ui/src/theme/portal-container.ts b/packages/ui/src/theme/portal-container.ts index 1e30203f..89c75153 100644 --- a/packages/ui/src/theme/portal-container.ts +++ b/packages/ui/src/theme/portal-container.ts @@ -12,7 +12,7 @@ export const PortalContainerContext = React.createContext=5.4.x' version: 5.9.3 vite: specifier: ^8.3.1 - version: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + version: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) packages/ui: dependencies: @@ -221,9 +217,6 @@ importers: '@radix-ui/react-radio-group': specifier: ^1.3.8 version: 1.3.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-scroll-area': - specifier: ^1.2.1 - version: 1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@radix-ui/react-select': specifier: ^2.1.2 version: 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -275,9 +268,6 @@ importers: tw-animate-css: specifier: ^1.4.0 version: 1.4.0 - vaul: - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@tailwindcss/postcss': specifier: ^4.1.14 @@ -299,7 +289,7 @@ importers: version: 19.2.2(@types/react@19.2.2) autoprefixer: specifier: ^10.4.0 - version: 10.4.21(postcss@8.5.6) + version: 10.4.21(postcss@8.5.29) chokidar-cli: specifier: ^3.0.0 version: 3.0.0 @@ -308,10 +298,10 @@ importers: version: 30.1.1 postcss: specifier: ^8.4.47 - version: 8.5.6 + version: 8.5.29 postcss-cli: specifier: ^11.0.0 - version: 11.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6) + version: 11.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6) react: specifier: ^19.0.0 version: 19.2.0 @@ -323,16 +313,16 @@ importers: version: 5.1.1 tailwindcss: specifier: ^4.1.14 - version: 4.1.14 + version: 4.1.16 tsup: specifier: ^8.0.1 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.9.1) + version: 8.5.0(jiti@2.6.1)(postcss@8.5.29)(supports-color@7.2.0)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.9.1) typescript: specifier: '>=5.4.x' version: 5.9.3 vitest: specifier: ^5.0.1 - version: 5.0.1(@types/node@24.9.2)(jsdom@30.1.1)(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)) + version: 5.0.1(@types/node@24.9.2)(jsdom@30.1.1)(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)) packages: @@ -380,24 +370,28 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@astrojs/compiler-binding-linux-arm64-musl@0.5.1': resolution: {integrity: sha512-mL7tQEuDk3rGfaKmrO63nw6WBy1TPVioQGmVyjcAr+C+a/k3SVMYBytNSMqH9mZPT/Swj30JaZ2N842Z1NnOEQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@astrojs/compiler-binding-linux-x64-gnu@0.5.1': resolution: {integrity: sha512-uLGc9jtxwiDe4cQyhNPQim4ECiB/YzbWlXssfLAv8r374kArfTwBHjwR2+j+XVyF71yCx5mF9YNRclRqdNBgeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@astrojs/compiler-binding-linux-x64-musl@0.5.1': resolution: {integrity: sha512-G0cywinaQUc8v1MrytvYKUX7svTDMmYtOCZfxjwKPbJi59zIqM+Ll0rWgO0GQWLZH3XoPYo19ZwlP3Xt9ep9YA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@astrojs/compiler-binding-wasm32-wasi@0.5.1': resolution: {integrity: sha512-yMhLL8asmLydoAdnEZxAw6eLfNDs3YJl6jqn0pjPt6zrb2U5qIDLnii4/twThpIFODKkQ6YDpBRTOz/vSfZCxw==} @@ -470,8 +464,8 @@ packages: resolution: {integrity: sha512-ggKxfvq5KHDveZd/3TGbxvdA4O0ClwMG0eiSJh92dpHJxqfGjRudOqKW2SLFTmKfZAJD+hV+soPgT9WJArO0dQ==} engines: {node: '>=22.12.0'} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 + '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 oxc-transform-react: ^0.145.0 react: ^17.0.2 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 @@ -609,21 +603,25 @@ packages: resolution: {integrity: sha512-glkYXZCJywjP13v67eAyAMSJdF+ncvEbYvgi/wOtffL9tQ27lr/zsyzUfgs+ovjJ9d8JNQKiXeiArJcX8PJL9w==} cpu: [arm64] os: [linux] + libc: [glibc] '@bruits/satteri-linux-arm64-musl@0.10.5': resolution: {integrity: sha512-yWdgG1g17Nh2QyGVlFUxGRa3FEFwiMcpZEyMNWkbM3deC94cmVc+/i9OuyFpdKuWo3GkgoCtYVOoxk1uCnCZIA==} cpu: [arm64] os: [linux] + libc: [musl] '@bruits/satteri-linux-x64-gnu@0.10.5': resolution: {integrity: sha512-FVaLoPT1fBgGl0J+AYebyyXJYBachGl8Oyyrf1lye4RTqCB4S0Gwkj1uM9RJyThUOvx5VUmAT1CnNh1SFHA+kw==} cpu: [x64] os: [linux] + libc: [glibc] '@bruits/satteri-linux-x64-musl@0.10.5': resolution: {integrity: sha512-EHpVAx2bqW3GINHTKkljtxVfQmVDGWIuwOYOP5YghTj+0PkBa2o8oKPRtQ9Kbsr1Fye8jtUcDjhwj2jMNugZKg==} cpu: [x64] os: [linux] + libc: [musl] '@bruits/satteri-wasm32-wasi@0.10.5': resolution: {integrity: sha512-ypz8c/Zmipxp4IoeDa228Gstv6TLzVmNs3yC6wKCoNSOjx1iwpgzu87Y3hTkXFdwChVGU85qeUDuOIarGUZQLw==} @@ -1353,89 +1351,105 @@ packages: resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.3.4': resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.3.4': resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.3.4': resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.3.4': resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.3.4': resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.3.4': resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.3.4': resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.35.5': resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.35.5': resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.35.5': resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.35.5': resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.35.5': resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.35.5': resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.35.5': resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.35.5': resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.35.5': resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} @@ -1591,8 +1605,8 @@ packages: '@radix-ui/react-accordion@1.2.12': resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1604,8 +1618,8 @@ packages: '@radix-ui/react-alert-dialog@1.1.15': resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1617,8 +1631,8 @@ packages: '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1630,8 +1644,8 @@ packages: '@radix-ui/react-avatar@1.1.10': resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1643,8 +1657,8 @@ packages: '@radix-ui/react-checkbox@1.3.3': resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1656,8 +1670,8 @@ packages: '@radix-ui/react-collapsible@1.1.12': resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1669,8 +1683,8 @@ packages: '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1682,7 +1696,7 @@ packages: '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1691,7 +1705,7 @@ packages: '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1700,8 +1714,8 @@ packages: '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1713,7 +1727,7 @@ packages: '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1722,8 +1736,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1735,8 +1749,8 @@ packages: '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1748,7 +1762,7 @@ packages: '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1757,8 +1771,8 @@ packages: '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1770,7 +1784,7 @@ packages: '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1779,8 +1793,8 @@ packages: '@radix-ui/react-label@2.1.7': resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1792,8 +1806,8 @@ packages: '@radix-ui/react-menu@2.1.16': resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1805,8 +1819,8 @@ packages: '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1818,8 +1832,8 @@ packages: '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1831,8 +1845,8 @@ packages: '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1844,8 +1858,8 @@ packages: '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1857,8 +1871,8 @@ packages: '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1870,8 +1884,8 @@ packages: '@radix-ui/react-progress@1.1.7': resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1883,8 +1897,8 @@ packages: '@radix-ui/react-radio-group@1.3.8': resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1896,21 +1910,8 @@ packages: '@radix-ui/react-roving-focus@1.1.11': resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-scroll-area@1.2.10': - resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} - peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1922,8 +1923,8 @@ packages: '@radix-ui/react-select@2.2.6': resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1935,8 +1936,8 @@ packages: '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1948,7 +1949,7 @@ packages: '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1957,8 +1958,8 @@ packages: '@radix-ui/react-switch@1.2.6': resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1970,8 +1971,8 @@ packages: '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1983,8 +1984,8 @@ packages: '@radix-ui/react-toast@1.2.15': resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1996,8 +1997,8 @@ packages: '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2009,7 +2010,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2018,7 +2019,7 @@ packages: '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2027,7 +2028,7 @@ packages: '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2036,7 +2037,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2045,7 +2046,7 @@ packages: '@radix-ui/react-use-is-hydrated@0.1.0': resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2054,7 +2055,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2063,7 +2064,7 @@ packages: '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2072,7 +2073,7 @@ packages: '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2081,7 +2082,7 @@ packages: '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2090,8 +2091,8 @@ packages: '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2144,36 +2145,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.2.13': resolution: {integrity: sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.2.13': resolution: {integrity: sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.2.13': resolution: {integrity: sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.2.13': resolution: {integrity: sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.2.13': resolution: {integrity: sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.2.13': resolution: {integrity: sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==} @@ -2230,56 +2237,67 @@ packages: resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.4': resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.4': resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.4': resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.4': resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.4': resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.4': resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.4': resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.4': resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.4': resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.4': resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.4': resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} @@ -2408,48 +2426,56 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-gnu@4.1.16': resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.14': resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-arm64-musl@4.1.16': resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.14': resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-gnu@4.1.16': resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.14': resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-musl@4.1.16': resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.14': resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==} @@ -2524,8 +2550,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': ^19.2.2 - '@types/react-dom': ^19.2.2 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -2588,7 +2614,7 @@ packages: '@types/react-dom@19.2.2': resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': ^19.2.0 '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} @@ -2702,15 +2728,30 @@ packages: '@volar/language-server@2.4.28': resolution: {integrity: sha512-NqcLnE5gERKuS4PUFwlhMxf6vqYo7hXtbMFbViXcbVkbZ905AIVWhnSo0ZNBC2V127H1/2zP7RvVOVnyITFfBw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@volar/language-service@2.4.28': resolution: {integrity: sha512-Rh/wYCZJrI5vCwMk9xyw/Z+MsWxlJY1rmMZPsxUoJKfzIRjS/NF1NmnuEcrMbEVGja00aVpCsInJfixQTMdvLw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@volar/source-map@2.4.28': resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} '@volar/typescript@2.4.28': resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@vscode/emmet-helper@2.11.0': resolution: {integrity: sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==} @@ -3904,72 +3945,84 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-gnu@1.30.2: resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-gnu@1.33.0: resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.1: resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-arm64-musl@1.33.0: resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.1: resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-gnu@1.33.0: resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.1: resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-linux-x64-musl@1.33.0: resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.1: resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} @@ -4316,11 +4369,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.20: resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4579,10 +4627,6 @@ packages: resolution: {integrity: sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4652,11 +4696,6 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - prettier@3.7.4: resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} @@ -4717,7 +4756,7 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': @@ -4727,7 +4766,7 @@ packages: resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4737,7 +4776,7 @@ packages: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -5377,7 +5416,7 @@ packages: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -5387,7 +5426,7 @@ packages: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': ^19.2.2 + '@types/react': '*' react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -5404,12 +5443,6 @@ packages: util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - vaul@1.1.2: - resolution: {integrity: sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==} - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - verkit@0.5.0: resolution: {integrity: sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==} engines: {node: '>=18.12.0'} @@ -5554,17 +5587,23 @@ packages: resolution: {integrity: sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ==} peerDependencies: '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: '@volar/language-service': optional: true + typescript: + optional: true volar-service-typescript@0.0.70: resolution: {integrity: sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==} peerDependencies: '@volar/language-service': ~2.4.0 + typescript: '*' peerDependenciesMeta: '@volar/language-service': optional: true + typescript: + optional: true volar-service-yaml@0.0.70: resolution: {integrity: sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ==} @@ -5777,9 +5816,9 @@ snapshots: is-potential-custom-element-name: 1.0.1 lru-cache: 11.5.3 - '@astrojs/check@0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)': + '@astrojs/check@0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.7.4)(typescript@5.9.3)': dependencies: - '@astrojs/language-server': 2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) + '@astrojs/language-server': 2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.7.4)(typescript@5.9.3) chokidar: 4.0.3 kleur: 4.1.5 typescript: 5.9.3 @@ -5854,37 +5893,37 @@ snapshots: unified: 11.0.5 yaml: 2.9.1 - '@astrojs/language-server@2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)': + '@astrojs/language-server@2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.7.4)(typescript@5.9.3)': dependencies: '@astrojs/compiler': 2.13.1 '@astrojs/yaml2ts': 0.2.3 '@jridgewell/sourcemap-codec': 1.5.5 '@volar/kit': 2.4.28(typescript@5.9.3) '@volar/language-core': 2.4.28 - '@volar/language-server': 2.4.28 - '@volar/language-service': 2.4.28 + '@volar/language-server': 2.4.28(typescript@5.9.3) + '@volar/language-service': 2.4.28(typescript@5.9.3) muggle-string: 0.4.1 tinyglobby: 0.2.17 - volar-service-css: 0.0.70(@volar/language-service@2.4.28) - volar-service-emmet: 0.0.70(@volar/language-service@2.4.28) - volar-service-html: 0.0.70(@volar/language-service@2.4.28) - volar-service-prettier: 0.0.70(@volar/language-service@2.4.28)(prettier@3.6.2) - volar-service-typescript: 0.0.70(@volar/language-service@2.4.28) - volar-service-typescript-twoslash-queries: 0.0.70(@volar/language-service@2.4.28) - volar-service-yaml: 0.0.70(@volar/language-service@2.4.28) + volar-service-css: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)) + volar-service-emmet: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)) + volar-service-html: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)) + volar-service-prettier: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(prettier@3.7.4) + volar-service-typescript: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(typescript@5.9.3) + volar-service-typescript-twoslash-queries: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(typescript@5.9.3) + volar-service-yaml: 0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)) vscode-html-languageservice: 5.6.2 vscode-uri: 3.1.0 optionalDependencies: - prettier: 3.6.2 + prettier: 3.7.4 prettier-plugin-astro: 0.14.1 transitivePeerDependencies: - typescript - '@astrojs/markdown-remark@7.3.2': + '@astrojs/markdown-remark@7.3.2(supports-color@7.2.0)': dependencies: '@astrojs/internal-helpers': 0.12.0 '@astrojs/prism': 4.0.2 - '@mdx-js/mdx': 3.1.1 + '@mdx-js/mdx': 3.1.1(supports-color@7.2.0) acorn: 8.16.0 estree-util-visit: 2.0.0 github-slugger: 2.0.0 @@ -5894,8 +5933,8 @@ snapshots: mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 + remark-gfm: 4.0.1(supports-color@7.2.0) + remark-parse: 11.0.0(supports-color@7.2.0) remark-rehype: 11.1.2 remark-smartypants: 3.0.3 source-map: 0.7.6 @@ -5914,39 +5953,30 @@ snapshots: github-slugger: 2.0.0 satteri: 0.10.5 - '@astrojs/mdx@8.0.3(@astrojs/markdown-remark@7.3.2)(@astrojs/markdown-satteri@0.4.3)(astro@7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': - dependencies: - '@astrojs/internal-helpers': 0.12.0 - '@astrojs/markdown-satteri': 0.4.3 - astro: 7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) - es-module-lexer: 3.0.3 - optionalDependencies: - '@astrojs/markdown-remark': 7.3.2 - - '@astrojs/mdx@8.0.3(@astrojs/markdown-remark@7.3.2)(@astrojs/markdown-satteri@0.4.3)(astro@7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': + '@astrojs/mdx@8.0.3(@astrojs/markdown-remark@7.3.2(supports-color@7.2.0))(@astrojs/markdown-satteri@0.4.3)(astro@7.3.6(@astrojs/markdown-remark@7.3.2(supports-color@7.2.0))(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': dependencies: '@astrojs/internal-helpers': 0.12.0 '@astrojs/markdown-satteri': 0.4.3 - astro: 7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) + astro: 7.3.6(@astrojs/markdown-remark@7.3.2(supports-color@7.2.0))(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) es-module-lexer: 3.0.3 optionalDependencies: - '@astrojs/markdown-remark': 7.3.2 + '@astrojs/markdown-remark': 7.3.2(supports-color@7.2.0) '@astrojs/prism@4.0.2': dependencies: prismjs: 1.30.0 - '@astrojs/react@7.0.1(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.28.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tsx@4.20.6)(yaml@2.8.2)': + '@astrojs/react@7.0.1(@types/node@24.9.2)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(esbuild@0.25.10)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tsx@4.20.6)(yaml@2.9.1)': dependencies: '@astrojs/internal-helpers': 0.12.0 '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@vitejs/plugin-react': 6.1.2(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) + '@vitejs/plugin-react': 6.1.2(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)) devalue: 5.9.4 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) ultrahtml: 1.7.0 - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) transitivePeerDependencies: - '@rolldown/plugin-babel' - '@types/node' @@ -6009,20 +6039,20 @@ snapshots: '@babel/compat-data@7.28.6': {} - '@babel/core@7.28.6': + '@babel/core@7.28.6(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.28.6 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6(supports-color@7.2.0))(supports-color@7.2.0) '@babel/helpers': 7.28.6 '@babel/parser': 7.28.6 '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.6(supports-color@7.2.0) '@babel/types': 7.28.6 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -6055,19 +6085,19 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.28.6(supports-color@7.2.0)': dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.0(supports-color@7.2.0) '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6(supports-color@7.2.0))(supports-color@7.2.0)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 + '@babel/core': 7.28.6(supports-color@7.2.0) + '@babel/helper-module-imports': 7.28.6(supports-color@7.2.0) '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.6(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -6106,7 +6136,7 @@ snapshots: '@babel/parser': 7.28.6 '@babel/types': 7.28.6 - '@babel/traverse@7.28.6': + '@babel/traverse@7.28.6(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.28.6 @@ -6114,11 +6144,11 @@ snapshots: '@babel/parser': 7.28.6 '@babel/template': 7.28.6 '@babel/types': 7.28.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.0': + '@babel/traverse@7.29.0(supports-color@7.2.0)': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 @@ -6126,7 +6156,7 @@ snapshots: '@babel/parser': 7.29.0 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -6533,17 +6563,17 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.21.1(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6556,10 +6586,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.3(supports-color@7.2.0)': dependencies: ajv: 6.12.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -6613,11 +6643,11 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.4)': + '@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.4)(supports-color@7.2.0)': dependencies: '@babel/generator': 7.28.6 '@babel/parser': 7.28.6 - '@babel/traverse': 7.28.6 + '@babel/traverse': 7.28.6(supports-color@7.2.0) '@babel/types': 7.28.6 prettier: 3.7.4 semver: 7.7.3 @@ -6817,7 +6847,7 @@ snapshots: '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) tslib: 2.8.1 - '@mdx-js/mdx@3.1.1': + '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 @@ -6829,14 +6859,14 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.1 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@7.2.0) markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 recma-jsx: 1.0.1(acorn@8.16.0) recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 + rehype-recma: 1.0.0(supports-color@7.2.0) + remark-mdx: 3.1.1(supports-color@7.2.0) + remark-parse: 11.0.0(supports-color@7.2.0) remark-rehype: 11.1.2 source-map: 0.7.6 unified: 11.0.5 @@ -7232,23 +7262,6 @@ snapshots: '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@radix-ui/number': 1.1.1 @@ -7720,15 +7733,15 @@ snapshots: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.1.14 '@tailwindcss/oxide': 4.1.14 - postcss: 8.5.6 + postcss: 8.5.29 tailwindcss: 4.1.14 - '@tailwindcss/vite@4.1.16(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.16(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.1.16 '@tailwindcss/oxide': 4.1.16 tailwindcss: 4.1.16 - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) '@testing-library/dom@10.4.2': dependencies: @@ -7817,15 +7830,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.53.0 - '@typescript-eslint/type-utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.53.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -7833,23 +7846,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.53.0 '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.53.0(supports-color@7.2.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.53.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.53.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.53.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) '@typescript-eslint/types': 8.53.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7863,13 +7876,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/typescript-estree': 8.53.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + debug: 4.4.3(supports-color@7.2.0) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -7877,13 +7890,13 @@ snapshots: '@typescript-eslint/types@8.53.0': {} - '@typescript-eslint/typescript-estree@8.53.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.53.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.53.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.53.0(supports-color@7.2.0)(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) '@typescript-eslint/types': 8.53.0 '@typescript-eslint/visitor-keys': 8.53.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 @@ -7892,13 +7905,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0)) '@typescript-eslint/scope-manager': 8.53.0 '@typescript-eslint/types': 8.53.0 - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/typescript-estree': 8.53.0(supports-color@7.2.0)(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7910,31 +7923,31 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@6.1.2(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2))': + '@vitejs/plugin-react@6.1.2(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) '@vitejs/plugin-react@6.1.2(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) - '@vitest/mocker@5.0.1(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': + '@vitest/mocker@5.0.1(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.1 estree-walker: 3.0.3 magic-string: 1.4.2 optionalDependencies: - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) '@vitest/spy@5.0.1': {} '@volar/kit@2.4.28(typescript@5.9.3)': dependencies: - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) + '@volar/typescript': 2.4.28(typescript@5.9.3) typesafe-path: 0.2.2 typescript: 5.9.3 vscode-languageserver-textdocument: 1.0.12 @@ -7944,32 +7957,38 @@ snapshots: dependencies: '@volar/source-map': 2.4.28 - '@volar/language-server@2.4.28': + '@volar/language-server@2.4.28(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.28 - '@volar/language-service': 2.4.28 - '@volar/typescript': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) + '@volar/typescript': 2.4.28(typescript@5.9.3) path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + optionalDependencies: + typescript: 5.9.3 - '@volar/language-service@2.4.28': + '@volar/language-service@2.4.28(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.28 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 + optionalDependencies: + typescript: 5.9.3 '@volar/source-map@2.4.28': {} - '@volar/typescript@2.4.28': + '@volar/typescript@2.4.28(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.28 path-browserify: 1.0.1 vscode-uri: 3.1.0 + optionalDependencies: + typescript: 5.9.3 '@vscode/emmet-helper@2.11.0': dependencies: @@ -8062,97 +8081,7 @@ snapshots: astring@1.9.0: {} - astro@7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2): - dependencies: - '@astrojs/compiler-rs': 0.5.1 - '@astrojs/internal-helpers': 0.12.0 - '@astrojs/markdown-satteri': 0.4.3 - '@astrojs/telemetry': 3.3.3 - '@capsizecss/unpack': 4.0.1 - '@clack/prompts': 1.8.1 - '@oslojs/encoding': 1.1.0 - am-i-vibing: 0.5.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - ci-info: 4.4.0 - clsx: 2.1.1 - common-ancestor-path: 2.0.0 - cookie: 2.0.1 - devalue: 5.9.4 - diff: 9.0.0 - dset: 3.1.4 - es-module-lexer: 3.0.3 - esbuild: 0.28.2 - find-proc: 0.2.0 - flattie: 1.1.1 - fontace: 0.4.1 - get-tsconfig: 5.0.0-beta.6 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.2.0 - jsonc-parser: 3.3.1 - magic-string: 1.4.2 - magicast: 0.5.5 - mrmime: 2.0.1 - neotraverse: 1.0.1 - obug: 3.0.0 - p-limit: 7.3.3 - p-queue: 9.3.3 - package-manager-detector: 1.9.0 - piccolore: 0.1.3 - picomatch: 4.0.7 - rolldown: 1.2.13 - shiki: 4.5.0 - smol-toml: 1.9.0 - svgo: 4.1.0 - tinyclip: 1.0.3 - tinyexec: 1.3.1 - tinyglobby: 0.2.17 - ultrahtml: 1.7.0 - unifont: 0.7.5 - unstorage: 1.17.5 - verkit: 0.5.0 - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) - vitefu: 1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)) - xxhash-wasm: 1.1.0 - yargs-parser: 22.0.0 - zod: 4.6.5 - optionalDependencies: - '@astrojs/markdown-remark': 7.3.2 - sharp: 0.35.5(@types/node@24.9.2) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - '@vitejs/devtools' - - aws4fetch - - db0 - - idb-keyval - - ioredis - - jiti - - less - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - uploadthing - - yaml - - astro@7.3.6(@astrojs/markdown-remark@7.3.2)(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1): + astro@7.3.6(@astrojs/markdown-remark@7.3.2(supports-color@7.2.0))(@types/node@24.9.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1): dependencies: '@astrojs/compiler-rs': 0.5.1 '@astrojs/internal-helpers': 0.12.0 @@ -8208,7 +8137,7 @@ snapshots: yargs-parser: 22.0.0 zod: 4.6.5 optionalDependencies: - '@astrojs/markdown-remark': 7.3.2 + '@astrojs/markdown-remark': 7.3.2(supports-color@7.2.0) sharp: 0.35.5(@types/node@24.9.2) transitivePeerDependencies: - '@azure/app-configuration' @@ -8242,14 +8171,14 @@ snapshots: - uploadthing - yaml - autoprefixer@10.4.21(postcss@8.5.6): + autoprefixer@10.4.21(postcss@8.5.29): dependencies: browserslist: 4.26.3 caniuse-lite: 1.0.30001750 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.29 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -8511,9 +8440,11 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 decamelize@1.2.0: {} @@ -8735,20 +8666,20 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - '@babel/core': 7.28.6 + '@babel/core': 7.28.6(supports-color@7.2.0) '@babel/parser': 7.28.6 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) eslint-scope@8.4.0: dependencies: @@ -8759,14 +8690,14 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.2(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 + '@eslint/config-array': 0.21.1(supports-color@7.2.0) '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 + '@eslint/eslintrc': 3.3.3(supports-color@7.2.0) '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 @@ -8776,7 +8707,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -9105,7 +9036,7 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 - hast-util-to-estree@3.1.3: + hast-util-to-estree@3.1.3(supports-color@7.2.0): dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 @@ -9115,9 +9046,9 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) property-information: 7.1.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -9140,7 +9071,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@7.2.0): dependencies: '@types/estree': 1.0.8 '@types/hast': 3.0.5 @@ -9149,9 +9080,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) property-information: 7.1.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -9593,14 +9524,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.2(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.2.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@7.2.0) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -9618,67 +9549,67 @@ snapshots: mdast-util-find-and-replace: 3.0.3 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.1.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.1: + mdast-util-gfm-strikethrough@2.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0: + mdast-util-gfm-table@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0: + mdast-util-gfm-task-list-item@2.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.1.0(supports-color@7.2.0): dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.1 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@7.2.0) + mdast-util-gfm-strikethrough: 2.0.1(supports-color@7.2.0) + mdast-util-gfm-table: 2.0.0(supports-color@7.2.0) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -9686,7 +9617,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -9695,23 +9626,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + mdast-util-mdx@3.0.0(supports-color@7.2.0): dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) + mdast-util-mdx-expression: 2.0.1(supports-color@7.2.0) + mdast-util-mdx-jsx: 3.2.0(supports-color@7.2.0) + mdast-util-mdxjs-esm: 2.0.1(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@7.2.0): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -10006,10 +9937,10 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@7.2.0): dependencies: '@types/debug': 4.1.12 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -10079,8 +10010,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: {} - nanoid@3.3.20: {} natural-compare@1.4.0: {} @@ -10279,15 +10208,15 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-cli@11.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6): + postcss-cli@11.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6): dependencies: chokidar: 3.6.0 dependency-graph: 1.0.0 fs-extra: 11.3.2 picocolors: 1.1.1 - postcss: 8.5.6 - postcss-load-config: 5.1.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6) - postcss-reporter: 7.1.0(postcss@8.5.6) + postcss: 8.5.29 + postcss-load-config: 5.1.0(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6) + postcss-reporter: 7.1.0(postcss@8.5.29) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 @@ -10297,37 +10226,28 @@ snapshots: - jiti - tsx - postcss-load-config@5.1.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6): + postcss-load-config@5.1.0(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 - optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.6 - tsx: 4.20.6 - - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6)(yaml@2.8.2): - dependencies: - lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.29 tsx: 4.20.6 - yaml: 2.8.2 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.9.1): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6)(yaml@2.9.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 - postcss: 8.5.6 + postcss: 8.5.29 tsx: 4.20.6 yaml: 2.9.1 - postcss-reporter@7.1.0(postcss@8.5.6): + postcss-reporter@7.1.0(postcss@8.5.29): dependencies: picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.29 thenby: 1.3.4 postcss-value-parser@4.2.0: {} @@ -10338,12 +10258,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.2 - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - prelude-ls@1.2.1: {} prettier-plugin-astro@0.14.1: @@ -10352,15 +10266,13 @@ snapshots: prettier: 3.7.4 sass-formatter: 0.7.9 - prettier-plugin-tailwindcss@0.6.14(@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.4))(prettier-plugin-astro@0.14.1)(prettier@3.7.4): + prettier-plugin-tailwindcss@0.6.14(@ianvs/prettier-plugin-sort-imports@4.7.0(prettier@3.7.4)(supports-color@7.2.0))(prettier-plugin-astro@0.14.1)(prettier@3.7.4): dependencies: prettier: 3.7.4 optionalDependencies: - '@ianvs/prettier-plugin-sort-imports': 4.7.0(prettier@3.7.4) + '@ianvs/prettier-plugin-sort-imports': 4.7.0(prettier@3.7.4)(supports-color@7.2.0) prettier-plugin-astro: 0.14.1 - prettier@3.6.2: {} - prettier@3.7.4: {} pretty-format@27.5.1: @@ -10490,11 +10402,11 @@ snapshots: hast-util-raw: 9.1.0 vfile: 6.0.3 - rehype-recma@1.0.0: + rehype-recma@1.0.0(supports-color@7.2.0): dependencies: '@types/estree': 1.0.8 '@types/hast': 3.0.5 - hast-util-to-estree: 3.1.3 + hast-util-to-estree: 3.1.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -10504,28 +10416,28 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 - remark-gfm@4.0.1: + remark-gfm@4.0.1(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@7.2.0) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@7.2.0) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.1.1: + remark-mdx@3.1.1(supports-color@7.2.0): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@7.2.0) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@7.2.0): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.2(supports-color@7.2.0) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -10996,24 +10908,24 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.2): + tsup@8.5.0(jiti@2.6.1)(postcss@8.5.29)(supports-color@7.2.0)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.9.1): dependencies: bundle-require: 5.1.0(esbuild@0.25.10) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) esbuild: 0.25.10 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.29)(tsx@4.20.6)(yaml@2.9.1) resolve-from: 5.0.0 rollup: 4.52.4 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.29 @@ -11024,34 +10936,6 @@ snapshots: - tsx - yaml - tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.9.1): - dependencies: - bundle-require: 5.1.0(esbuild@0.25.10) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.25.10 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.9.1) - resolve-from: 5.0.0 - rollup: 4.52.4 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.6 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - tsx@4.20.6: dependencies: esbuild: 0.25.12 @@ -11072,13 +10956,13 @@ snapshots: dependencies: semver: 7.7.4 - typescript-eslint@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.53.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1)(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11224,15 +11108,6 @@ snapshots: is-typed-array: 1.1.15 which-typed-array: 1.1.19 - vaul@1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - verkit@0.5.0: {} vfile-location@5.0.3: @@ -11265,21 +11140,6 @@ snapshots: tsx: 4.20.6 yaml: 2.9.1 - vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2): - dependencies: - lightningcss: 1.33.0 - picomatch: 4.0.7 - postcss: 8.5.29 - rolldown: 1.2.13 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 24.9.2 - esbuild: 0.28.2 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.20.6 - yaml: 2.8.2 - vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 @@ -11295,18 +11155,18 @@ snapshots: tsx: 4.20.6 yaml: 2.9.1 - vitefu@1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2)): + vitefu@1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): optionalDependencies: - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.8.2) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) vitefu@1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): optionalDependencies: vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) - vitest@5.0.1(@types/node@24.9.2)(jsdom@30.1.1)(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): + vitest@5.0.1(@types/node@24.9.2)(jsdom@30.1.1)(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.1(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)) + '@vitest/mocker': 5.0.1(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -11317,7 +11177,7 @@ snapshots: tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) + vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.9.2 @@ -11325,45 +11185,46 @@ snapshots: transitivePeerDependencies: - msw - volar-service-css@0.0.70(@volar/language-service@2.4.28): + volar-service-css@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)): dependencies: vscode-css-languageservice: 6.3.10 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) - volar-service-emmet@0.0.70(@volar/language-service@2.4.28): + volar-service-emmet@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)): dependencies: '@emmetio/css-parser': 0.4.1 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.11.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) - volar-service-html@0.0.70(@volar/language-service@2.4.28): + volar-service-html@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)): dependencies: vscode-html-languageservice: 5.6.2 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) - volar-service-prettier@0.0.70(@volar/language-service@2.4.28)(prettier@3.6.2): + volar-service-prettier@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(prettier@3.7.4): dependencies: vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 - prettier: 3.6.2 + '@volar/language-service': 2.4.28(typescript@5.9.3) + prettier: 3.7.4 - volar-service-typescript-twoslash-queries@0.0.70(@volar/language-service@2.4.28): + volar-service-typescript-twoslash-queries@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(typescript@5.9.3): dependencies: vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) + typescript: 5.9.3 - volar-service-typescript@0.0.70(@volar/language-service@2.4.28): + volar-service-typescript@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3))(typescript@5.9.3): dependencies: path-browserify: 1.0.1 semver: 7.7.4 @@ -11372,14 +11233,15 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.1.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) + typescript: 5.9.3 - volar-service-yaml@0.0.70(@volar/language-service@2.4.28): + volar-service-yaml@0.0.70(@volar/language-service@2.4.28(typescript@5.9.3)): dependencies: vscode-uri: 3.1.0 yaml-language-server: 1.20.0 optionalDependencies: - '@volar/language-service': 2.4.28 + '@volar/language-service': 2.4.28(typescript@5.9.3) vscode-css-languageservice@6.3.10: dependencies: From 0a4405b3eaed85891af2232f00c64508d09cc7e4 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 15:33:14 -0400 Subject: [PATCH 09/14] Revert "Remove onHighlightEnd" This reverts commit f93507aa4de263e2522300bb5da1b6d2e11ee81c. --- .../demo/src/content/docs/components/nav.mdx | 23 ++++++++++--------- packages/ui/CHANGELOG.md | 1 - .../ui/src/components/nav/nav-switcher.tsx | 11 +++++++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index d78099c5..930f4920 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -272,17 +272,18 @@ On a phone, the sidebar comes in from the left in a [Sheet](/components/sheet). ### NavSwitcher -| Name | Description | Type | Default | Required | -| --------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------- | -------- | -| `label` | The current item's name, shown as the panel's heading | `string` | | ✅ | -| `noun` | Singular, for the trigger's name: `{label}, switch {noun}` | `string` | | ✅ | -| `collection` | Plural, for the search and empty copy | `string` | | ✅ | -| `options` | The items to switch between | `{ value, label, keywords? }[]` | | ✅ | -| `value` | The current item's value | `string` | | ✅ | -| `onValueChange` | Called with the picked item's value | `(value: string) => void` | | ✅ | -| `onHighlight` | Hover or focus on an option, to preload its destination | `(value: string) => void` | | ❌ | -| `action` | A command at the bottom of the list, kept while searching, such as "Create Project"; `onSelect` runs after the list closes | `{ label: string; onSelect: () => void }` | | ❌ | -| `loading` | Holds the switcher's height while the current item loads | `boolean` | `false` | ❌ | +| Name | Description | Type | Default | Required | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------- | -------- | +| `label` | The current item's name, shown as the panel's heading | `string` | | ✅ | +| `noun` | Singular, for the trigger's name: `{label}, switch {noun}` | `string` | | ✅ | +| `collection` | Plural, for the search and empty copy | `string` | | ✅ | +| `options` | The items to switch between | `{ value, label, keywords? }[]` | | ✅ | +| `value` | The current item's value | `string` | | ✅ | +| `onValueChange` | Called with the picked item's value | `(value: string) => void` | | ✅ | +| `onHighlight` | Hover or focus on an option, to preload its destination | `(value: string) => void` | | ❌ | +| `onHighlightEnd` | Hover or focus leaves an option, to cancel its preload | `() => void` | | ❌ | +| `action` | A command at the bottom of the list, kept while searching, such as "Create Project"; `onSelect` runs after the list closes | `{ label: string; onSelect: () => void }` | | ❌ | +| `loading` | Holds the switcher's height while the current item loads | `boolean` | `false` | ❌ | With `loading`, the switcher takes no other props. diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 339ad644..57af2969 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -13,7 +13,6 @@ change before upgrading. draw theme-aware scrollbars of their own. - `ListOrGridViewToggle`. Use `SegmentedControls` instead. - `Drawer` and its parts. Use `Sheet` instead. -- `NavSwitcher`'s `onHighlightEnd` prop. - `Pagination` no longer scrolls a `ScrollArea` viewport to the top when the page changes. Pass `scrollTargetRef` to choose what scrolls into view. - The `vaul` and `@radix-ui/react-scroll-area` dependencies. diff --git a/packages/ui/src/components/nav/nav-switcher.tsx b/packages/ui/src/components/nav/nav-switcher.tsx index a3f9d4c2..77f554b6 100644 --- a/packages/ui/src/components/nav/nav-switcher.tsx +++ b/packages/ui/src/components/nav/nav-switcher.tsx @@ -47,8 +47,10 @@ interface NavSwitcherLoadedProps { value: string; /** Called with the picked item's value */ onValueChange: (value: string) => void; - /** Hover or focus on an option, for a caller that warms its destination */ + /** Hover or focus on an option, for a caller that preloads its destination */ onHighlight?: (value: string) => void; + /** Hover or focus leaves an option, for a caller that cancels its preload */ + onHighlightEnd?: () => void; /** A command at the bottom of the list, kept while searching, such as "Create Project" */ action?: NavSwitcherAction; } @@ -62,7 +64,10 @@ type NavSwitcherProps = NavSwitcherLoadedProps | NavSwitcherLoadingProps; // The heading is named by the label alone; the trigger's name starts with it and says what the // control does (WCAG 2.5.3) const NavSwitcherSelect = React.forwardRef( - ({ label, noun, collection, options, value, onValueChange, onHighlight, action }, ref) => { + ( + { label, noun, collection, options, value, onValueChange, onHighlight, onHighlightEnd, action }, + ref + ) => { const labelId = React.useId(); const actionValue = React.useId(); const actionPending = React.useRef(false); @@ -127,7 +132,9 @@ const NavSwitcherSelect = React.forwardRef onHighlight?.(option.value)} + onPointerLeave={onHighlightEnd} onFocus={() => onHighlight?.(option.value)} + onBlur={onHighlightEnd} > {option.label} From 16e726f15180f1f205807f4a5e78211ba420291f Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 15:36:08 -0400 Subject: [PATCH 10/14] Update packages/demo/src/content/docs/components/nav.mdx Co-authored-by: matthewmr-eqty --- packages/demo/src/content/docs/components/nav.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 930f4920..57d9bbcf 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -10,7 +10,7 @@ import { NavListDemo } from "@demo/components/demo/nav-list"; Nav builds an app's sidebar. `NavRail` composes the largest sections of an application as icons with tooltips, and `NavPanel` sits beside it containing each page within the section, a header, and a scrolling body. `NavSwitcher` sits in the panel's header to allow users to quickly switch between the parent item of a section such as projects in Guardian. -Our Nav component progressively displays a tree of navigation options. In addition to navigating between pages, `NavListItem` can also open a deeper level. Users can navigate back within the nav tree hierarchy using. +Our Nav component progressively displays a tree of navigation options. In addition to navigating between pages, `NavListItem` can also open a deeper level. Users go back up a level with the ‹ row at the top. Nav should not be used for actions, for these use a [Dropdown Menu](/components/dropdown-menu) instead. Always Put `NavList` inside an element with a background colour, such as a popover, sheet or panel: the sliding levels inherit the background colour to cover each other. From bfa2ed273947388b2a67292e3fd6a017107f366d Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 15:36:52 -0400 Subject: [PATCH 11/14] Apply batched suggestions from code review Co-authored-by: Henry Wilkinson Co-authored-by: matthewmr-eqty --- packages/demo/src/content/docs/components/nav.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/demo/src/content/docs/components/nav.mdx b/packages/demo/src/content/docs/components/nav.mdx index 57d9bbcf..d81ab6ee 100644 --- a/packages/demo/src/content/docs/components/nav.mdx +++ b/packages/demo/src/content/docs/components/nav.mdx @@ -12,7 +12,7 @@ Nav builds an app's sidebar. `NavRail` composes the largest sections of an appli Our Nav component progressively displays a tree of navigation options. In addition to navigating between pages, `NavListItem` can also open a deeper level. Users go back up a level with the ‹ row at the top. -Nav should not be used for actions, for these use a [Dropdown Menu](/components/dropdown-menu) instead. Always Put `NavList` inside an element with a background colour, such as a popover, sheet or panel: the sliding levels inherit the background colour to cover each other. +Nav should not be used for actions, for these use a [Dropdown Menu](/components/dropdown-menu) instead. Always put `NavList` inside an element with a background colour, such as a popover, sheet or panel: the sliding levels inherit the background colour to cover each other. ## Usage @@ -161,7 +161,7 @@ function openLevel(level) { ### App Sidebar -A rail of top-level app sections in `NavRail` beside a `NavPanel`, with a switcher in the panel's header to quick switch between objects, and a nav list that drills into a policy. +A rail of top-level app sections in `NavRail` beside a `NavPanel`, with a switcher in the panel's header to quick switch between objects, and a nav list that drills into a policy. Not all applications or navigation implementations require this level of organisation. Use NavRail when an application is sufficiently complex, and only for app-level navigation. From 0bb95482100f33b5f2447aea33034927347a60e8 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 16:00:57 -0400 Subject: [PATCH 12/14] Upgrade to pnpm 12 --- .npmrc | 2 - README.md | 2 +- package.json | 8 +-- pnpm-lock.yaml | 166 +++++++++++++++++++++++--------------------- pnpm-workspace.yaml | 6 ++ 5 files changed, 93 insertions(+), 91 deletions(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 58b508e1..00000000 --- a/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -public-hoist-pattern[]=@types/react -public-hoist-pattern[]=@types/react-dom \ No newline at end of file diff --git a/README.md b/README.md index e46fdecc..7db77e89 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The library is published to npm as [`@eqtylab/equality`](https://www.npmjs.com/p ## Prerequisites - Node 22.12+ (Astro 6 requires Node ≥ 22.12.0) -- pnpm 9.x (workspace uses `packageManager: pnpm@9.12.3`) +- pnpm 12.x (workspace uses `packageManager: pnpm@12.5.1`) Verify versions: diff --git a/package.json b/package.json index da12cd0b..960e6765 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "equality", "private": true, - "packageManager": "pnpm@9.12.3", + "packageManager": "pnpm@12.15.0", "scripts": { "build": "pnpm -r run build", "dev": "pnpm --filter @eqtylab/docs run build:dev && pnpm -r --parallel run dev", @@ -25,11 +25,5 @@ "prettier-plugin-astro": "0.14.1", "prettier-plugin-tailwindcss": "^0.6.14", "typescript-eslint": "^8.53.0" - }, - "pnpm": { - "overrides": { - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2" - } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef2c2afe..ebd60b80 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,10 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 + importers: .: @@ -464,8 +468,8 @@ packages: resolution: {integrity: sha512-ggKxfvq5KHDveZd/3TGbxvdA4O0ClwMG0eiSJh92dpHJxqfGjRudOqKW2SLFTmKfZAJD+hV+soPgT9WJArO0dQ==} engines: {node: '>=22.12.0'} peerDependencies: - '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 - '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 oxc-transform-react: ^0.145.0 react: ^17.0.2 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 @@ -1605,8 +1609,8 @@ packages: '@radix-ui/react-accordion@1.2.12': resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1618,8 +1622,8 @@ packages: '@radix-ui/react-alert-dialog@1.1.15': resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1631,8 +1635,8 @@ packages: '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1644,8 +1648,8 @@ packages: '@radix-ui/react-avatar@1.1.10': resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1657,8 +1661,8 @@ packages: '@radix-ui/react-checkbox@1.3.3': resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1670,8 +1674,8 @@ packages: '@radix-ui/react-collapsible@1.1.12': resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1683,8 +1687,8 @@ packages: '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1696,7 +1700,7 @@ packages: '@radix-ui/react-compose-refs@1.1.2': resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1705,7 +1709,7 @@ packages: '@radix-ui/react-context@1.1.2': resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1714,8 +1718,8 @@ packages: '@radix-ui/react-dialog@1.1.15': resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1727,7 +1731,7 @@ packages: '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1736,8 +1740,8 @@ packages: '@radix-ui/react-dismissable-layer@1.1.11': resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1749,8 +1753,8 @@ packages: '@radix-ui/react-dropdown-menu@2.1.16': resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1762,7 +1766,7 @@ packages: '@radix-ui/react-focus-guards@1.1.3': resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1771,8 +1775,8 @@ packages: '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1784,7 +1788,7 @@ packages: '@radix-ui/react-id@1.1.1': resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1793,8 +1797,8 @@ packages: '@radix-ui/react-label@2.1.7': resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1806,8 +1810,8 @@ packages: '@radix-ui/react-menu@2.1.16': resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1819,8 +1823,8 @@ packages: '@radix-ui/react-popover@1.1.15': resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1832,8 +1836,8 @@ packages: '@radix-ui/react-popper@1.2.8': resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1845,8 +1849,8 @@ packages: '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1858,8 +1862,8 @@ packages: '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1871,8 +1875,8 @@ packages: '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1884,8 +1888,8 @@ packages: '@radix-ui/react-progress@1.1.7': resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1897,8 +1901,8 @@ packages: '@radix-ui/react-radio-group@1.3.8': resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1910,8 +1914,8 @@ packages: '@radix-ui/react-roving-focus@1.1.11': resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1923,8 +1927,8 @@ packages: '@radix-ui/react-select@2.2.6': resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1936,8 +1940,8 @@ packages: '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1949,7 +1953,7 @@ packages: '@radix-ui/react-slot@1.2.3': resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -1958,8 +1962,8 @@ packages: '@radix-ui/react-switch@1.2.6': resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1971,8 +1975,8 @@ packages: '@radix-ui/react-tabs@1.1.13': resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1984,8 +1988,8 @@ packages: '@radix-ui/react-toast@1.2.15': resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -1997,8 +2001,8 @@ packages: '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2010,7 +2014,7 @@ packages: '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2019,7 +2023,7 @@ packages: '@radix-ui/react-use-controllable-state@1.2.2': resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2028,7 +2032,7 @@ packages: '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2037,7 +2041,7 @@ packages: '@radix-ui/react-use-escape-keydown@1.1.1': resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2046,7 +2050,7 @@ packages: '@radix-ui/react-use-is-hydrated@0.1.0': resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2055,7 +2059,7 @@ packages: '@radix-ui/react-use-layout-effect@1.1.1': resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2064,7 +2068,7 @@ packages: '@radix-ui/react-use-previous@1.1.1': resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2073,7 +2077,7 @@ packages: '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2082,7 +2086,7 @@ packages: '@radix-ui/react-use-size@1.1.1': resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -2091,8 +2095,8 @@ packages: '@radix-ui/react-visually-hidden@1.2.3': resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: @@ -2550,8 +2554,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': ^18.0.0 || ^19.0.0 - '@types/react-dom': ^18.0.0 || ^19.0.0 + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -2614,7 +2618,7 @@ packages: '@types/react-dom@19.2.2': resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} peerDependencies: - '@types/react': ^19.2.0 + '@types/react': ^19.2.2 '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} @@ -4756,7 +4760,7 @@ packages: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': @@ -4766,7 +4770,7 @@ packages: resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -4776,7 +4780,7 @@ packages: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -5416,7 +5420,7 @@ packages: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -5426,7 +5430,7 @@ packages: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} peerDependencies: - '@types/react': '*' + '@types/react': ^19.2.2 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 697424bb..a4e864e2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,3 +4,9 @@ allowBuilds: '@tailwindcss/oxide': true esbuild: true sharp: true +overrides: + '@types/react': ^19.2.2 + '@types/react-dom': ^19.2.2 +publicHoistPattern: + - '@types/react' + - '@types/react-dom' From a0bd1f6b8ca2dff76c7f68ddbf6431001e949675 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 23:01:59 -0400 Subject: [PATCH 13/14] Update pnpm-lock.yaml --- pnpm-lock.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebd60b80..0d677a75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11159,10 +11159,6 @@ snapshots: tsx: 4.20.6 yaml: 2.9.1 - vitefu@1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): - optionalDependencies: - vite: 8.3.3(@types/node@24.9.2)(esbuild@0.25.10)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) - vitefu@1.1.3(vite@8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1)): optionalDependencies: vite: 8.3.3(@types/node@24.9.2)(esbuild@0.28.2)(jiti@2.6.1)(tsx@4.20.6)(yaml@2.9.1) From ddbdf4d03ae50af3850be3d6d0967a51fd257b03 Mon Sep 17 00:00:00 2001 From: Henry Wilkinson Date: Tue, 27 Oct 2026 23:11:52 -0400 Subject: [PATCH 14/14] Update pnpm-lock.yaml --- pnpm-lock.yaml | 158 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d677a75..645351f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,161 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.15.0 + version: 12.15.0 + +packages: + + '@pnpm/exe.android-arm64@12.15.0': + resolution: {integrity: sha512-eVCqmscY70LGvgRzu3mi8IBWBFGix+a6mNZoWmXxESsBdeiKEF9xQSuaeel10yn+zI7TXy2jlI63vFLzETk+aQ==} + cpu: [arm64] + os: [android] + + '@pnpm/exe.android-x64@12.15.0': + resolution: {integrity: sha512-Gx/WbkFcdUFUg8g8AShezcS9EiQxfYvdAm2hfKLO8sfJmJvKOCt5fzlgHWDzmGhoclibgW+tUGZ/KF4F4wOTCA==} + cpu: [x64] + os: [android] + + '@pnpm/exe.darwin-arm64@12.15.0': + resolution: {integrity: sha512-N0ZykiDWCvqSBJvt71j7cSoBR993FqvYZFtmpCtqvW3pguiI+NAgraLPA5OTwu5mV+/d8hYpVcPktJA3xFDLtA==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.15.0': + resolution: {integrity: sha512-7Ntr2HlBUxzwWOg7NwDxCbRW/3vXuqKO+hcXm+w3SBi9rrHY53li1wLqWVT7Gjxd+lVEHM1QJZo6WJEGFU8C6A==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.freebsd-x64@12.15.0': + resolution: {integrity: sha512-btOiyL7fL7W4uQGH0aqFai2TNC3IoKcZ7gNHBVbEFZt2dWrnrD0SufL3iGs3fLlmb4OtuU35uf4Zpr9V9Jh9mA==} + cpu: [x64] + os: [freebsd] + + '@pnpm/exe.linux-arm64-musl@12.15.0': + resolution: {integrity: sha512-pNC38k+O+90FOjbPNSnw0E7apq1PKTmz3fFe1amn+lys/U5kL++uzir8bRiho8ONcyA3d9EU7wdqcY0DKkj+JA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.15.0': + resolution: {integrity: sha512-qML/8aCXslh8td/w4U+HJNqUcZ2+m6EfTbWScIzZRmyPsRFN+xB4LP1U/hymxc1iSJiKtG56HJx2fvUErWFIGw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-ppc64@12.15.0': + resolution: {integrity: sha512-tjRDUUl7RCJ6T/6eoNPxOqkwU4Mzi5RtTXmSAxujyz37OTwwsMU7Ps087Zk4gHcUvRSeyF40ZFsew3vtE+nmUA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-riscv64@12.15.0': + resolution: {integrity: sha512-bF1uBWEfbwaeryz6lIiaJ8AWD082otZfvzGX5l+6LZRpRwUEpJHUsJrORaYP5/cNMv5ZR2p6TvvcJcQzwtDzmw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-s390x@12.15.0': + resolution: {integrity: sha512-zKMhIzsexYMToeLmqV5jPsvV/f9vwsJb2kUH2NFYzalbxImeBrlA4kL7GwF8gD4pagV6jYYcJb8RjbZIdjHptg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.15.0': + resolution: {integrity: sha512-A9J0Jg0Rdx+qQU4qXtwyST5tto9IOu1zi4fDk35nbc6DWahggbcKtFvZPKFwL2qgUXGXOX//hXv6z/sp6emO8A==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.15.0': + resolution: {integrity: sha512-yc+QlZR+9+nr29J4fRzhMoapgxTBDndq/+peyoq1XUufnQFnfbXUMFudDIKzHi545linGqmOmXfn0NoufNgcOg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.15.0': + resolution: {integrity: sha512-fPXZxuY1VclkOga9bc53qNCXcegfeoBR8+Ue+AospDwKzuGGSHll0oDxkLfkmpjyRqpe7bH5DyQPYp/xSMaIVA==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.15.0': + resolution: {integrity: sha512-nrd+Tp1We1DGj4DGG5Bea9lZNh9y1PjlLBdEwdInS4D0h0UIDtM7JaGGGDJhNzIwcHASyihWI7HLV+dtG+fhYg==} + cpu: [x64] + os: [win32] + + pnpm@12.15.0: + resolution: {integrity: sha512-s5UdbW/0qfE9x89WzSjSuOs328ycaOUuHhGRhz6p+CoBcoerULqtxczElPA2xnwOR+sTYIwvo29HcRth6hKOYQ==} + engines: {node: '>=18'} + hasBin: true + +snapshots: + + '@pnpm/exe.android-arm64@12.15.0': + optional: true + + '@pnpm/exe.android-x64@12.15.0': + optional: true + + '@pnpm/exe.darwin-arm64@12.15.0': + optional: true + + '@pnpm/exe.darwin-x64@12.15.0': + optional: true + + '@pnpm/exe.freebsd-x64@12.15.0': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.15.0': + optional: true + + '@pnpm/exe.linux-arm64@12.15.0': + optional: true + + '@pnpm/exe.linux-ppc64@12.15.0': + optional: true + + '@pnpm/exe.linux-riscv64@12.15.0': + optional: true + + '@pnpm/exe.linux-s390x@12.15.0': + optional: true + + '@pnpm/exe.linux-x64-musl@12.15.0': + optional: true + + '@pnpm/exe.linux-x64@12.15.0': + optional: true + + '@pnpm/exe.win32-arm64@12.15.0': + optional: true + + '@pnpm/exe.win32-x64@12.15.0': + optional: true + + pnpm@12.15.0: + optionalDependencies: + '@pnpm/exe.android-arm64': 12.15.0 + '@pnpm/exe.android-x64': 12.15.0 + '@pnpm/exe.darwin-arm64': 12.15.0 + '@pnpm/exe.darwin-x64': 12.15.0 + '@pnpm/exe.freebsd-x64': 12.15.0 + '@pnpm/exe.linux-arm64': 12.15.0 + '@pnpm/exe.linux-arm64-musl': 12.15.0 + '@pnpm/exe.linux-ppc64': 12.15.0 + '@pnpm/exe.linux-riscv64': 12.15.0 + '@pnpm/exe.linux-s390x': 12.15.0 + '@pnpm/exe.linux-x64': 12.15.0 + '@pnpm/exe.linux-x64-musl': 12.15.0 + '@pnpm/exe.win32-arm64': 12.15.0 + '@pnpm/exe.win32-x64': 12.15.0 + +--- lockfileVersion: '9.0' settings: