Compare commits

...
13 Commits
Author SHA1 Message Date
Halvor Haugan 2b714ee0af docs(core): update hideLabel prop description for consistency across components 2026-10-20 11:23:31 +02:00
dependabot[bot] a2d0ffda0a ⬆️ Bump figlet from 1.11.3 to 1.12.0 (#5404)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-19 10:40:46 +02:00
dependabot[bot] 45aa8baf10 ⬆️ Bump tsc-alias from 1.9.1 to 1.9.7 (#5407)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-19 10:38:19 +02:00
dependabot[bot] 3f7b72369e ⬆️ Bump react-hook-form from 7.89.0 to 7.90.0 (#5409)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-19 10:30:25 +02:00
Halvor Haugan 8009289ca4 feat(website): add desc on ToggleGroup icon example 2026-10-16 10:34:43 +02:00
Ken ee50050d27 feat: Added custom link for navno tema header 2026-10-15 15:20:15 +02:00
Halvor Haugan 4e1cfddd84 feat(Combobox2): open on arrow up/down on trigger 2026-10-15 13:17:36 +02:00
Halvor Haugan 643ab79c8d chore(AI): update copilot-instructions.md and code-review skill (regarding tests) 2026-10-15 13:08:15 +02:00
Halvor Haugan d134397fd0 feat(core): mark Badge and Lookup from /PREVIEW as deprecated (#5401) 2026-10-15 11:44:32 +02:00
Halvor Haugan d8e62db7f1 fix(Listbox): fix issue where options were not announced by VO in Safari (#5399) 2026-10-14 15:34:57 +02:00
dependabot[bot] 0cf700322c ⬆️ Bump react-hook-form from 7.86.0 to 7.89.0 (#5395)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-14 13:21:32 +02:00
dependabot[bot] 2c468cc8c7 ⬆️ Bump the storybook group with 8 updates (#5393)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-14 13:21:12 +02:00
Halvor Haugan d722f23a5e fix(Combobox2): fix issue with VO+Safari when selecting option 2026-10-14 13:15:45 +02:00
35 changed files with 233 additions and 159 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
---
"@navikt/ds-react": patch
---
Lookup, Badge: Mark as deprecated when imported from @navikt/ds-react/PREVIEW
+3 -2
View File
@@ -10,8 +10,8 @@
## Behavior
- Only respond in same language as the input. Prefer english always.
- Use caveman-skill unless asked not to
- Only respond in same language as the input. Prefer English always.
- Use caveman-skill unless asked not to.
- No apologies, no "I think", no change summaries.
- Answer-first. 0-2 sentences max.
- No thinking aloud; do next edit. Explain only when asked or non-obvious.
@@ -88,3 +88,4 @@ Path-specific rules load automatically from `.github/instructions/` (see each `a
- `node:` imports for Node builtins. Never import from `esm/`/`cjs/` output.
- Preserve JSDoc on public props/components when changing public APIs.
- Reuse helpers: `cl`, `composeEventHandlers`, `useId`, `omit`, `useClientLayoutEffect`, `useEventListener`.
- No tests for trivial logic. Only tests for complex logic that has a higher risk of breaking.
+1 -1
View File
@@ -69,7 +69,7 @@ Skip anything ESLint, Stylelint, Biome, Prettier or TypeScript already catches.
### Tests and docs (🟡)
- A behavior change has a story `play` test or Vitest test proving the user-facing contract. Queries use role and accessible name.
- Complex logic with a higher risk of breaking has a story `play` test or Vitest test proving the user-facing contract. Queries use role and accessible name.
- Tests are deterministic: no dependence on timezone, current time or randomness.
- Edge cases that are easy to miss: controlled vs. uncontrolled, `ref`/`className`/`...rest` forwarding, `as` prop, empty and very long content.
- Website examples (`aksel.nav.no/website/pages/eksempler/`) are updated when usage changes.
+1 -1
View File
@@ -87,7 +87,7 @@
"prettier": "3.9.6",
"react": "19.3.0",
"rehype-parse": "9.0.1",
"tsc-alias": "1.9.1",
"tsc-alias": "1.9.7",
"tsx": "^4.23.15",
"typescript": "6.0.3",
"unified": "11.0.5",
+1 -1
View File
@@ -46,7 +46,7 @@
"commander": "15.0.0",
"enquirer": "2.4.1",
"fast-glob": "3.3.3",
"figlet": "1.11.3",
"figlet": "1.12.0",
"is-git-clean": "1.1.0",
"jscodeshift": "17.4.0",
"lodash": "4.18.1"
+9 -9
View File
@@ -68,22 +68,22 @@
},
"./PREVIEW/Lookup": {
"import": {
"types": "./esm/lookup/index.d.ts",
"default": "./esm/lookup/index.js"
"types": "./esm/lookup/index-deprecated.d.ts",
"default": "./esm/lookup/index-deprecated.js"
},
"require": {
"types": "./cjs/lookup/index.d.ts",
"default": "./cjs/lookup/index.js"
"types": "./cjs/lookup/index-deprecated.d.ts",
"default": "./cjs/lookup/index-deprecated.js"
}
},
"./PREVIEW/Badge": {
"import": {
"types": "./esm/badge/index.d.ts",
"default": "./esm/badge/index.js"
"types": "./esm/badge/index-deprecated.d.ts",
"default": "./esm/badge/index-deprecated.js"
},
"require": {
"types": "./cjs/badge/index.d.ts",
"default": "./cjs/badge/index.js"
"types": "./cjs/badge/index-deprecated.d.ts",
"default": "./cjs/badge/index-deprecated.js"
}
},
"./PREVIEW/RadioCard": {
@@ -801,7 +801,7 @@
"react-dom": "19.3.0",
"rimraf": "6.1.3",
"swr": "^2.4.2",
"tsc-alias": "1.9.1",
"tsc-alias": "1.9.7",
"tsx": "^4.23.15",
"typescript": "6.0.3",
"vitest": "4.1.11"
+8 -1
View File
@@ -112,4 +112,11 @@ export namespace Badge {
export type Props = BadgeProps;
}
export { Badge };
/** @deprecated Badge is no longer in preview. Import it from `@navikt/ds-react` instead. */
const BadgeDeprecated = Badge;
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace BadgeDeprecated {
export type Props = BadgeProps;
}
export { Badge, BadgeDeprecated };
@@ -0,0 +1,2 @@
"use client";
export { BadgeDeprecated as Badge } from "./Badge";
@@ -86,7 +86,9 @@ const AutoSuggest = forwardRef<HTMLInputElement, AutoSuggestProps>(
<Floating>
<Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
<Floating.Anchor>
<Listbox.InputSlot>
<Listbox.InputSlot
virtuallyFocusedOptionId={virtuallyFocusedOptionId}
>
<Search
label="Tabellsøk"
variant="simple"
@@ -19,7 +19,7 @@ export interface CheckboxProps
*/
children: React.ReactNode;
/**
* Visually hides label and description, and makes it viewable for screen-readers only.
* Hides the label and description visually while keeping them available to screen readers.
*/
hideLabel?: boolean;
/**
@@ -60,8 +60,7 @@ export interface ComboboxProps
*/
filteredOptions?: string[] | ComboboxOption[];
/**
* Optionally hide the label visually.
* Not recommended, but can be considered for e.g. search fields in the top menu.
* Hides the label and description visually while keeping them available to screen readers.
*/
hideLabel?: boolean;
/**
@@ -7,7 +7,7 @@ import {
} from "../root/ComboboxRoot";
interface ComboboxFieldProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
children?: React.ReactNode;
children?: string;
hasError?: boolean;
}
@@ -16,6 +16,8 @@ const ComboboxField = forwardRef<HTMLButtonElement, ComboboxFieldProps>(
const { options, selectedOptions, size } = useComboboxRootContext();
const labels = getLabels(selectedOptions, options);
const label =
children ?? (labels.length > 1 ? `${labels.length} valgt` : labels[0]);
return (
<div className="aksel-combobox2__field-container">
@@ -28,10 +30,10 @@ const ComboboxField = forwardRef<HTMLButtonElement, ComboboxFieldProps>(
"aksel-body-short",
`aksel-body-short--${size ?? "medium"}`,
)}
aria-label={label} // Without this, VO on Safari will announce the old label when focusing this button right after selecting a new option
{...rest}
>
{children ||
(labels.length > 1 ? `${labels.length} valgt` : labels[0])}
{label}
</button>
<ChevronDownIcon
className="aksel-combobox2__field-chevron"
@@ -11,11 +11,12 @@ type ComboboxFilterProps = Pick<
export const ComboboxFilter = (props: ComboboxFilterProps) => {
const { size } = useComboboxRootContext();
const { filterString, setFilterString } = useComboboxPopupContext();
const { filterString, setFilterString, virtuallyFocusedOptionValue } =
useComboboxPopupContext();
return (
<div className="aksel-combobox2__filter">
<Listbox.InputSlot>
<Listbox.InputSlot virtuallyFocusedOptionId={virtuallyFocusedOptionValue}>
<Search
value={filterString}
onChange={setFilterString}
@@ -28,13 +28,13 @@ const ComboboxTrigger = ({
// Prevents "flash of focus" on trigger before focus is moved to input
if (!readOnly && !rootContext.open) event.preventDefault();
}}
/*onKeyDown={composeEventHandlers(onKeyDown, (event) => {
if (event.key === "ArrowDown") {
context.onOpenChange(true);
onKeyDown={(event) => {
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
rootContext.setOpen(true);
// Stop keydown from scrolling window
event.preventDefault();
}
})}*/
}}
data-readonly={readOnly}
aria-readonly={readOnly} // TODO: Vurder
disabled={rootContext.disabled}
@@ -39,7 +39,7 @@ export interface SearchProps
*/
label: React.ReactNode;
/**
* Shows label and description for screenreaders only.
* Hides the label and description visually while keeping them available to screen readers.
* @default true
*/
hideLabel?: boolean;
@@ -23,7 +23,7 @@ export interface SelectProps
*/
label: React.ReactNode;
/**
* Shows label and description for screenreaders only.
* Hides the label and description visually while keeping them available to screen readers.
*/
hideLabel?: boolean;
}
@@ -15,7 +15,7 @@ export interface SwitchProps
*/
children: React.ReactNode;
/**
* If enabled shows the label and description for screenreaders only.
* Hides the label and description visually while keeping them available to screen readers.
*/
hideLabel?: boolean;
/**
@@ -36,7 +36,7 @@ export interface TextareaProps
*/
label: React.ReactNode;
/**
* If enabled shows the label and description for screenreaders only.
* Hides the label and description visually while keeping them available to screen readers.
*/
hideLabel?: boolean;
/**
@@ -20,7 +20,7 @@ export interface TextFieldProps
*/
htmlSize?: number;
/**
* If enabled shows the label and description for screenreaders only
* Hides the label and description visually while keeping them available to screen readers
*/
hideLabel?: boolean;
/**
+4 -1
View File
@@ -53,7 +53,6 @@ export interface LookupProps
* </Lookup>
* ```
*/
export const Lookup = forwardRef<HTMLSpanElement, LookupProps>(
(
{
@@ -174,3 +173,7 @@ export const Lookup = forwardRef<HTMLSpanElement, LookupProps>(
);
export default Lookup;
/** @deprecated Lookup is no longer in preview. Import it from `@navikt/ds-react` instead. */
const LookupDeprecated = Lookup;
export { LookupDeprecated };
@@ -0,0 +1,2 @@
"use client";
export { LookupDeprecated as Lookup, type LookupProps } from "./Lookup";
+2 -2
View File
@@ -1,5 +1,5 @@
"use client";
export { DataGrid } from "./data-grid";
export { Lookup } from "./lookup";
export { Badge } from "./badge";
export { LookupDeprecated as Lookup } from "./lookup/Lookup";
export { BadgeDeprecated as Badge } from "./badge/Badge";
export { RadioCard, RadioCardGroup } from "./form/radio-card";
@@ -121,7 +121,7 @@ export const Default = () => {
<div>Selected: {selectedItem}</div>
<Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
<Listbox.InputSlot>
<Listbox.InputSlot virtuallyFocusedOptionId={virtuallyFocusedOptionId}>
<Search
label="Velg noe"
hideLabel={false}
@@ -177,7 +177,7 @@ export const Optimized: StoryFn<OptimizedProps> = ({ count, highlight }) => {
<div>Selected: {selectedItem}</div>
<Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
<Listbox.InputSlot>
<Listbox.InputSlot virtuallyFocusedOptionId={virtuallyFocusedOptionId}>
<Search
label="Velg noe"
hideLabel={false}
@@ -269,7 +269,9 @@ export const WithFloating = () => {
<Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
<Floating.Anchor>
<Listbox.InputSlot>
<Listbox.InputSlot
virtuallyFocusedOptionId={virtuallyFocusedOptionId}
>
<Search
label="Velg noe"
hideLabel={false}
@@ -0,0 +1,4 @@
const getOptionId = (prefix: string, id: string) =>
`${prefix}-${encodeURIComponent(id)}`;
export { getOptionId };
@@ -1,16 +1,26 @@
import React from "react";
import { Slot } from "../../slot/Slot";
import { getOptionId } from "../helpers/getOptionId";
import { useListboxContext } from "../root/Listbox.context";
interface ListboxInputSlotProps {
children: React.ReactElement;
virtuallyFocusedOptionId: string;
}
const ListboxInputSlot = ({ children }: ListboxInputSlotProps) => {
const { activeId } = useListboxContext();
const ListboxInputSlot = ({
children,
virtuallyFocusedOptionId,
}: ListboxInputSlotProps) => {
const { optionIdPrefix } = useListboxContext();
return (
<Slot
aria-activedescendant={activeId} // TODO: Check if it's a problem that this is set even when no option has virtual focus
// NB: Using a static ID and just change which option has the ID does not work in Safari with VoiceOver.
aria-activedescendant={
virtuallyFocusedOptionId
? getOptionId(optionIdPrefix, virtuallyFocusedOptionId)
: undefined
}
// @ts-expect-error - You are meant to use an <input>, but Slot doesn't know that.
autoComplete="off"
role="combobox"
@@ -1,6 +1,7 @@
import React from "react";
import { BodyShort } from "../../../../typography";
import { cl } from "../../../helpers";
import { getOptionId } from "../helpers/getOptionId";
import { useListboxContext } from "../root/Listbox.context";
export interface ListboxOptionProps extends Omit<
@@ -36,7 +37,7 @@ function ListboxOption({
className,
...rest
}: ListboxOptionProps) {
const { activeId, size } = useListboxContext();
const { optionIdPrefix, size } = useListboxContext();
return (
<BodyShort
as="div"
@@ -48,7 +49,7 @@ function ListboxOption({
tabIndex={-1}
data-virtual-focus={hasVirtualFocus}
data-id={id}
id={hasVirtualFocus ? activeId : undefined}
id={getOptionId(optionIdPrefix, id)}
>
<div className="aksel-listbox__option-inner">{children}</div>
</BodyShort>
@@ -3,10 +3,10 @@ import { createStrictContext } from "../../../helpers";
export const { Provider: ListboxProvider, useContext: useListboxContext } =
createStrictContext<{
/**
* ID for the option that currently has virtual focus.
* Set on the active option and referenced by the combobox's `aria-activedescendant`.
* Unique ID for the Listbox instance. Used as prefix for the IDs of the options,
* which in turn are referenced in `aria-activedescendant` in InputSlot.
*/
activeId: string;
optionIdPrefix: string;
/**
* Updates which option currently has virtual focus.
*/
@@ -34,8 +34,7 @@ const ListboxComponent = forwardRef<HTMLDivElement, ListboxProps>(
}: ListboxProps,
ref,
) => {
const id = useId();
const activeId = `aksel-listbox-${id}-active`;
const optionIdPrefix = useId();
const virtuallyFocusOption = (element: HTMLElement | null) => {
setVirtuallyFocusedOptionId(element?.dataset.id || "");
@@ -128,7 +127,7 @@ const ListboxComponent = forwardRef<HTMLDivElement, ListboxProps>(
{...rest}
>
<ListboxProvider
activeId={activeId}
optionIdPrefix={optionIdPrefix}
setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}
size={size}
>
@@ -49,7 +49,7 @@ export interface DateInputProps
*/
label: React.ReactNode;
/**
* Shows label and description for screen readers only
* Hides the label and description visually while keeping them available to screen readers
* @default false
*/
hideLabel?: boolean;
@@ -21,6 +21,7 @@ import type {
} from "@/app/_sanity/query-types";
import { urlForImage } from "@/app/_sanity/utils";
import { NextLink } from "@/app/_ui/next-link/NextLink";
import { UmamiLink } from "@/app/_ui/umami/UmamiLink";
import styles from "./Hero.module.css";
type GpIntroHeroProps = {
@@ -28,6 +29,9 @@ type GpIntroHeroProps = {
description?: string;
image?: NonNullable<GOD_PRAKSIS_TEMA_BY_SLUG_QUERY_RESULT>["pictogram"];
isCollapsible?: boolean;
overrides?: {
isNavnoTema?: boolean;
};
} & DynamicFetchOptions;
async function GodPraksisIntroHero({
@@ -37,6 +41,7 @@ async function GodPraksisIntroHero({
isCollapsible = false,
perspective,
stega,
overrides,
}: GpIntroHeroProps) {
const imageUrl = urlForImage(image)?.url();
@@ -74,6 +79,19 @@ async function GodPraksisIntroHero({
className={styles.godPraksisHeroDescription}
>
{description}
{overrides?.isNavnoTema && (
<>
{" "}
<UmamiLink
inlineText
href="https://aksel.nav.no/komponenter/dekoratoren/dekoratoren"
data-color="neutral"
lenkegruppe="tema-hero-custom"
>
Informasjon om dekoratøren finner du i designsystemet.
</UmamiLink>
</>
)}
</BodyLong>
)}
{isCollapsible ? (
@@ -272,6 +272,14 @@ async function DynamicTemaPage(props: Props) {
}
}
/**
* Context:
* nav.no wanted to link to new dekoratoren article in /komponenter from their god-praksis page
*/
const isNavnoTema = temaPage._id.includes(
"0ca17e98-86a9-4e9e-abc1-af53043a21c3",
);
return (
<div>
<GodPraksisIntroHero
@@ -281,6 +289,9 @@ async function DynamicTemaPage(props: Props) {
isCollapsible
perspective={perspective}
stega={stega}
overrides={{
isNavnoTema,
}}
/>
<VStack
gap="space-48"
+1 -1
View File
@@ -52,7 +52,7 @@
"prism-react-renderer": "^2.0.0",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-hook-form": "^7.53.0",
"react-hook-form": "^7.90.0",
"react-markdown": "^9.0.1",
"react-responsive-masonry": "2.7.2",
"react-snowfall": "^2.4.0",
@@ -38,4 +38,5 @@ export const Demo = {
export const args: ExampleArgsT = {
index: 6,
desc: "Bruk Tooltip på knapper som kun inneholder ikon.",
};
+8 -8
View File
@@ -80,12 +80,12 @@
"@changesets/cli": "2.31.1",
"@eslint/js": "^10.0.1",
"@github-ui/storybook-addon-performance-panel": "^1.3.0",
"@storybook/addon-a11y": "^10.6.0",
"@storybook/addon-docs": "^10.6.0",
"@storybook/addon-themes": "^10.6.0",
"@storybook/addon-vitest": "^10.6.0",
"@storybook/nextjs-vite": "^10.6.0",
"@storybook/react-vite": "^10.6.0",
"@storybook/addon-a11y": "^10.6.1",
"@storybook/addon-docs": "^10.6.1",
"@storybook/addon-themes": "^10.6.1",
"@storybook/addon-vitest": "^10.6.1",
"@storybook/nextjs-vite": "^10.6.1",
"@storybook/react-vite": "^10.6.1",
"@svitejs/changesets-changelog-github-compact": "^1.1.0",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@types/node": "^24.10.9",
@@ -102,7 +102,7 @@
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-storybook": "^10.6.0",
"eslint-plugin-storybook": "^10.6.1",
"eslint-plugin-testing-library": "^7.16.0",
"fast-glob": "3.3.3",
"globals": "^17.7.0",
@@ -113,7 +113,7 @@
"react": "19.3.0",
"react-docgen-typescript": "2.4.0",
"react-dom": "19.3.0",
"storybook": "^10.6.0",
"storybook": "^10.6.1",
"stylelint": "^17.15.0",
"stylelint-config-standard": "^40.0.0",
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
+103 -99
View File
@@ -5241,7 +5241,7 @@ __metadata:
prettier: "npm:3.9.6"
react: "npm:19.3.0"
rehype-parse: "npm:9.0.1"
tsc-alias: "npm:1.9.1"
tsc-alias: "npm:1.9.7"
tsx: "npm:^4.23.15"
typescript: "npm:6.0.3"
unified: "npm:11.0.5"
@@ -5279,7 +5279,7 @@ __metadata:
commander: "npm:15.0.0"
enquirer: "npm:2.4.1"
fast-glob: "npm:3.3.3"
figlet: "npm:1.11.3"
figlet: "npm:1.12.0"
is-git-clean: "npm:1.1.0"
jscodeshift: "npm:17.4.0"
lodash: "npm:4.18.1"
@@ -5338,7 +5338,7 @@ __metadata:
react-dom: "npm:19.3.0"
rimraf: "npm:6.1.3"
swr: "npm:^2.4.2"
tsc-alias: "npm:1.9.1"
tsc-alias: "npm:1.9.7"
tsx: "npm:^4.23.15"
typescript: "npm:6.0.3"
vitest: "npm:4.1.11"
@@ -8642,62 +8642,62 @@ __metadata:
languageName: node
linkType: hard
"@storybook/addon-a11y@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/addon-a11y@npm:10.6.0"
"@storybook/addon-a11y@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/addon-a11y@npm:10.6.1"
dependencies:
"@storybook/global": "npm:^5.0.0"
axe-core: "npm:^4.2.0"
peerDependencies:
storybook: ^10.6.0
checksum: 10/09b76f3bd2f6316cc684032ea8b9350a2b7d03bffbc287827637e2489d801805584525f80aa5c4dc378c06a424b487e3f71c3bfea1f1a39084cea7a59fbacab5
storybook: ^10.6.1
checksum: 10/906663f4885fa6976fcf54328a4cf0685503cf04a7acf1fb5dd02a3074f734ec1dbf613b00ea451d0d9ab0e58c80844af711565368ad75b75adce800cbc4f705
languageName: node
linkType: hard
"@storybook/addon-docs@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/addon-docs@npm:10.6.0"
"@storybook/addon-docs@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/addon-docs@npm:10.6.1"
dependencies:
"@mdx-js/react": "npm:^3.0.0"
"@storybook/icons": "npm:^2.0.2"
"@storybook/react-dom-shim": "npm:10.6.0"
"@storybook/react-dom-shim": "npm:10.6.1"
react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
ts-dedent: "npm:^2.0.0"
unplugin: "npm:^2.3.5"
peerDependencies:
"@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
storybook: ^10.6.0
storybook: ^10.6.1
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10/ca7e6032d91acbb898c1fc74db2ab21e1f19e6d7f649375d81f00d61101b2d8670524dbef138bcad4565e0f4c0023ece99b0f473512dc686a3daa233bc9c8474
checksum: 10/8017a6d95dcc01491b6005c3213112032f72ecd75e8ea998dfe661e724326cc97a2fe3d79733604fe79890bbb1dc929c98cbdb9b2b55d098cd287149d19431a1
languageName: node
linkType: hard
"@storybook/addon-themes@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/addon-themes@npm:10.6.0"
"@storybook/addon-themes@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/addon-themes@npm:10.6.1"
dependencies:
ts-dedent: "npm:^2.0.0"
peerDependencies:
storybook: ^10.6.0
checksum: 10/22843de98943ac27b0cd71b46f48c751de9acc759821a76ffc78ab2c13bb680f3231f9413b319de736f5440df704b8c9c0a03bc8d1544c7f63e8a2bede9be7d9
storybook: ^10.6.1
checksum: 10/4386857dc80d31c8b0d1e2c314619420ec44915236272df5cba358622e57b8e93393252a09b712e561d00d2d22afe34e3f629a2625d67ccb3b84c3a4a68816f7
languageName: node
linkType: hard
"@storybook/addon-vitest@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/addon-vitest@npm:10.6.0"
"@storybook/addon-vitest@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/addon-vitest@npm:10.6.1"
dependencies:
"@storybook/global": "npm:^5.0.0"
"@storybook/icons": "npm:^2.0.2"
peerDependencies:
"@vitest/browser": ^3.0.0 || ^4.0.0
"@vitest/browser-playwright": ^4.0.0
"@vitest/runner": ^3.0.0 || ^4.0.0
storybook: ^10.6.0
vitest: ^3.0.0 || ^4.0.0
"@vitest/browser": ^3.0.0 || ^4.0.0 || ^5.0.0
"@vitest/browser-playwright": ^4.0.0 || ^5.0.0
"@vitest/runner": ^3.0.0 || ^4.0.0 || ^5.0.0
storybook: ^10.6.1
vitest: ^3.0.0 || ^4.0.0 || ^5.0.0
peerDependenciesMeta:
"@vitest/browser":
optional: true
@@ -8707,19 +8707,19 @@ __metadata:
optional: true
vitest:
optional: true
checksum: 10/3ea078e2d8541168da8f1fe59196fb8ebfda00913b5dcd3ab3fb10c2bbc5250bb80deac77d659d17f5021e8ebfdcf2ba387ba89d6de4cd03ce3b484617e0b79b
checksum: 10/72f1f04147f42c913de8d279d7f5bd7ec6a6da00561d87ef4e692ad0b9fdee714bfa24319c26f46dd9a557ce303ee3d54b6b044375a620311d8fa3ef5d5df92c
languageName: node
linkType: hard
"@storybook/builder-vite@npm:10.6.0":
version: 10.6.0
resolution: "@storybook/builder-vite@npm:10.6.0"
"@storybook/builder-vite@npm:10.6.1":
version: 10.6.1
resolution: "@storybook/builder-vite@npm:10.6.1"
dependencies:
ts-dedent: "npm:^2.0.0"
peerDependencies:
storybook: ^10.6.0
storybook: ^10.6.1
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
checksum: 10/c08c1ae2b177ee5749b80afc8b9b7735662696daa56c1c189d4eb2aea74389942730504f50651f5937d587620cb321b25bb90024a99e18548d9ac81543e24ac9
checksum: 10/ac77471110fdaae829c7a5d5615e8dbbb09a2a7c964a813f3376df018a012c68dd19ef22d55af38e1678fed8a496c68166f9f7a315ebac753b841758a75d4483
languageName: node
linkType: hard
@@ -8739,22 +8739,22 @@ __metadata:
languageName: node
linkType: hard
"@storybook/nextjs-vite@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/nextjs-vite@npm:10.6.0"
"@storybook/nextjs-vite@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/nextjs-vite@npm:10.6.1"
dependencies:
"@storybook/builder-vite": "npm:10.6.0"
"@storybook/react": "npm:10.6.0"
"@storybook/react-vite": "npm:10.6.0"
"@storybook/builder-vite": "npm:10.6.1"
"@storybook/react": "npm:10.6.1"
"@storybook/react-vite": "npm:10.6.1"
styled-jsx: "npm:5.1.6"
vite-plugin-storybook-nextjs: "npm:10.6.0"
vite-plugin-storybook-nextjs: "npm:10.6.1"
peerDependencies:
"@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
"@types/react-dom": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
next: ^14.1.0 || ^15.0.0 || ^16.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
storybook: ^10.6.0
storybook: ^10.6.1
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
"@types/react":
@@ -8763,36 +8763,36 @@ __metadata:
optional: true
typescript:
optional: true
checksum: 10/449c5b8bb97191edbec41e630fcdecee27c3d33f445836ca6e8454e7f26cc39142d891cd5e3aee97570af95bde7ef08ade8b9ce0a0dc26476e23cf8054662aac
checksum: 10/4b2ee64b5e0cfe2e73b162c1c34f03fb69fe9f2739807d2f9d145a51e582e9e70f28020913872bb3d2d7b85af552182d2bbe4949b63c1af65d6e6ab3d15d72cb
languageName: node
linkType: hard
"@storybook/react-dom-shim@npm:10.6.0":
version: 10.6.0
resolution: "@storybook/react-dom-shim@npm:10.6.0"
"@storybook/react-dom-shim@npm:10.6.1":
version: 10.6.1
resolution: "@storybook/react-dom-shim@npm:10.6.1"
peerDependencies:
"@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
"@types/react-dom": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
storybook: ^10.6.0
storybook: ^10.6.1
peerDependenciesMeta:
"@types/react":
optional: true
"@types/react-dom":
optional: true
checksum: 10/c96539875512bbb914014b04b1bc65f7b523c06358f0170f8b9b6854355a90873ab281f70a7730c9089f55e99d291792cee7d1bbaa43b94ee2df8565c56f0586
checksum: 10/e8cea7f0c2c9c0320a7123997248496532e998bf62453c8fd532d5138e17a83cb1782bbf3808213c42a23218568ead3cae2fa662c9d44709db9f04f2046a1d6b
languageName: node
linkType: hard
"@storybook/react-vite@npm:10.6.0, @storybook/react-vite@npm:^10.6.0":
version: 10.6.0
resolution: "@storybook/react-vite@npm:10.6.0"
"@storybook/react-vite@npm:10.6.1, @storybook/react-vite@npm:^10.6.1":
version: 10.6.1
resolution: "@storybook/react-vite@npm:10.6.1"
dependencies:
"@joshwooding/vite-plugin-react-docgen-typescript": "npm:^0.7.0"
"@rollup/pluginutils": "npm:^5.0.2"
"@storybook/builder-vite": "npm:10.6.0"
"@storybook/react": "npm:10.6.0"
"@storybook/builder-vite": "npm:10.6.1"
"@storybook/react": "npm:10.6.1"
empathic: "npm:^2.0.0"
magic-string: "npm:^1.1.0"
react-docgen: "npm:^8.0.2"
@@ -8801,22 +8801,22 @@ __metadata:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
storybook: ^10.6.0
storybook: ^10.6.1
typescript: ">= 4.9.x"
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10/ed339aff604c07f2b25fe2dc8f9c97ae1acbe3048ec82c1d2263a5b6d5bc06461c7f2290bd8fd68a61c91f3b35a6a6a3d41bb2b6eab22f3f677898c8cf51e2cf
checksum: 10/46cf18d0b7d4ce8a532437cb014723606cc43190e63464739354fe6cad050a5e62d3a34b381a6e33b72397fd7cc00ca8d5c1208af124dd49cb06a4acfa0e04ab
languageName: node
linkType: hard
"@storybook/react@npm:10.6.0":
version: 10.6.0
resolution: "@storybook/react@npm:10.6.0"
"@storybook/react@npm:10.6.1":
version: 10.6.1
resolution: "@storybook/react@npm:10.6.1"
dependencies:
"@storybook/global": "npm:^5.0.0"
"@storybook/react-dom-shim": "npm:10.6.0"
"@storybook/react-dom-shim": "npm:10.6.1"
react-docgen: "npm:^8.0.2"
react-docgen-typescript: "npm:^2.2.2"
peerDependencies:
@@ -8824,7 +8824,7 @@ __metadata:
"@types/react-dom": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
storybook: ^10.6.0
storybook: ^10.6.1
typescript: ">= 4.9.x"
peerDependenciesMeta:
"@types/react":
@@ -8833,7 +8833,7 @@ __metadata:
optional: true
typescript:
optional: true
checksum: 10/4f39982eb3f79f95c944d075ff96f15f9664efcfd4742fb8a7ef6d867aa982a47068741bd2c5b5385c8d9f9b0e8cab90559b4acf24f8586a4513f1bb998e4c5a
checksum: 10/ffaf8822587ed8540dafaab226f09718e4d8db85c9173575852d446cd3463fc6ac98db1a5c53d605568d7d7ee0d19f0b87a3e42419eab3c42ba894a2360dfa01
languageName: node
linkType: hard
@@ -11103,12 +11103,12 @@ __metadata:
"@changesets/cli": "npm:2.31.1"
"@eslint/js": "npm:^10.0.1"
"@github-ui/storybook-addon-performance-panel": "npm:^1.3.0"
"@storybook/addon-a11y": "npm:^10.6.0"
"@storybook/addon-docs": "npm:^10.6.0"
"@storybook/addon-themes": "npm:^10.6.0"
"@storybook/addon-vitest": "npm:^10.6.0"
"@storybook/nextjs-vite": "npm:^10.6.0"
"@storybook/react-vite": "npm:^10.6.0"
"@storybook/addon-a11y": "npm:^10.6.1"
"@storybook/addon-docs": "npm:^10.6.1"
"@storybook/addon-themes": "npm:^10.6.1"
"@storybook/addon-vitest": "npm:^10.6.1"
"@storybook/nextjs-vite": "npm:^10.6.1"
"@storybook/react-vite": "npm:^10.6.1"
"@svitejs/changesets-changelog-github-compact": "npm:^1.1.0"
"@trivago/prettier-plugin-sort-imports": "npm:^6.0.2"
"@types/node": "npm:^24.10.9"
@@ -11125,7 +11125,7 @@ __metadata:
eslint-plugin-import: "npm:^2.32.0"
eslint-plugin-react: "npm:^7.37.5"
eslint-plugin-react-hooks: "npm:^7.0.1"
eslint-plugin-storybook: "npm:^10.6.0"
eslint-plugin-storybook: "npm:^10.6.1"
eslint-plugin-testing-library: "npm:^7.16.0"
fast-glob: "npm:3.3.3"
globals: "npm:^17.7.0"
@@ -11136,7 +11136,7 @@ __metadata:
react: "npm:19.3.0"
react-docgen-typescript: "npm:2.4.0"
react-dom: "npm:19.3.0"
storybook: "npm:^10.6.0"
storybook: "npm:^10.6.1"
stylelint: "npm:^17.15.0"
stylelint-config-standard: "npm:^40.0.0"
stylelint-declaration-block-no-ignored-properties: "npm:^3.0.0"
@@ -14504,15 +14504,15 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-storybook@npm:^10.6.0":
version: 10.6.0
resolution: "eslint-plugin-storybook@npm:10.6.0"
"eslint-plugin-storybook@npm:^10.6.1":
version: 10.6.1
resolution: "eslint-plugin-storybook@npm:10.6.1"
dependencies:
"@typescript-eslint/types": "npm:^8.60.0"
"@typescript-eslint/utils": "npm:^8.60.0"
peerDependencies:
eslint: ">=8"
checksum: 10/1a77daa2bbf7dbe02b5fc9cbdf681ddcb3db36fc72de487180a7ff6cb9b4bcb05fd5ddbe40b8120eb492c443e1af48c166f9463928c8452b5b517307a11f2bd5
checksum: 10/1b3d062f0224ceeee89259cf3cd9cb8a2e208cd6e6f24a1582234f0a5d2497505c9365e807d1b6820fae31394900bb263a67d2fd12d1680467eaa969b00c1581
languageName: node
linkType: hard
@@ -15184,14 +15184,14 @@ __metadata:
languageName: node
linkType: hard
"figlet@npm:1.11.3":
version: 1.11.3
resolution: "figlet@npm:1.11.3"
"figlet@npm:1.12.0":
version: 1.12.0
resolution: "figlet@npm:1.12.0"
dependencies:
commander: "npm:^14.0.0"
bin:
figlet: bin/index.js
checksum: 10/8bf77e217513b8df2d2a2d2b991486dfcec8208bf2d87bdb4b8afe7e18db1630e4ba82389294ef8e9fd03b5734f8c126811763f8fedf481d86cbfbfaab9439e2
checksum: 10/1f2805189f243d5e04ea42132c37e6ac41f7b2cf5f9970fae0950041f7cd91e5948c0b7e87e9c908b274b5c0df1b6e12fd6f1e6b7609db7a6ee390f8b88ec3dd
languageName: node
linkType: hard
@@ -22137,15 +22137,6 @@ __metadata:
languageName: node
linkType: hard
"react-hook-form@npm:^7.53.0":
version: 7.86.0
resolution: "react-hook-form@npm:7.86.0"
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
checksum: 10/b0ad65eb833c7df99dacc380b1fec31c67d9d05666c2b4e6d90dd923970140bb0602ebfcaa06a76c1f4686f3f47fa216b1e0d4a3415520b2d09932e262f4f4b3
languageName: node
linkType: hard
"react-hook-form@npm:^7.85.0":
version: 7.87.0
resolution: "react-hook-form@npm:7.87.0"
@@ -22155,6 +22146,19 @@ __metadata:
languageName: node
linkType: hard
"react-hook-form@npm:^7.90.0":
version: 7.90.0
resolution: "react-hook-form@npm:7.90.0"
peerDependencies:
"@types/react": "*"
react: ^16.8.0 || ^17 || ^18 || ^19
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10/407576c6ffac5cbbe3c15b6a6e1274e2417e85a175b5de55f80c526367cd924f22c0c0f5d164f1e403420ac7b7c81f418322f9c1d3e6f02dc6eb7319a148a756
languageName: node
linkType: hard
"react-i18next@npm:^17.0.15":
version: 17.0.15
resolution: "react-i18next@npm:17.0.15"
@@ -24279,9 +24283,9 @@ __metadata:
languageName: node
linkType: hard
"storybook@npm:^10.6.0":
version: 10.6.0
resolution: "storybook@npm:10.6.0"
"storybook@npm:^10.6.1":
version: 10.6.1
resolution: "storybook@npm:10.6.1"
dependencies:
"@storybook/global": "npm:^5.0.0"
"@storybook/icons": "npm:^2.0.2"
@@ -24313,7 +24317,7 @@ __metadata:
optional: true
bin:
storybook: ./dist/bin/dispatcher.js
checksum: 10/749aa2b471d19ae288b8103638ebf342a23cbf636b3e47a793a8cd855d2712a0b9eea8058002e6e2d58a238f99552be6bf0d7bbc36b57b0d77015e65627322c1
checksum: 10/166d5da2e8004bdde166bc49d3572f6a8e1495eb86b628ffc078049f5494f9b6a9d45fef93500758e8102c132add81ab1875f7afc608491b037734394e219f29
languageName: node
linkType: hard
@@ -25477,9 +25481,9 @@ __metadata:
languageName: node
linkType: hard
"tsc-alias@npm:1.9.1":
version: 1.9.1
resolution: "tsc-alias@npm:1.9.1"
"tsc-alias@npm:1.9.7":
version: 1.9.7
resolution: "tsc-alias@npm:1.9.7"
dependencies:
chokidar: "npm:^3.5.3"
commander: "npm:^9.0.0"
@@ -25490,7 +25494,7 @@ __metadata:
plimit-lit: "npm:^1.2.6"
bin:
tsc-alias: dist/bin/index.js
checksum: 10/92016e074dd40bba8de3838a1f4c9685f902e8cc7b9f0c25194714dfe02c5c553c7c9e33ca08b8dee2432ad7ca4efcf69cf092cbc6132baddd985c311b59ce29
checksum: 10/9d4d37609c4aee4e31ae996283a2b78770d3bd7ba15341a7ae6c44b3036457c65591e0e761063bdcc3e943f13b2db7c705327332fbc2c4489594e9c1181321fa
languageName: node
linkType: hard
@@ -26417,9 +26421,9 @@ __metadata:
languageName: node
linkType: hard
"vite-plugin-storybook-nextjs@npm:10.6.0":
version: 10.6.0
resolution: "vite-plugin-storybook-nextjs@npm:10.6.0"
"vite-plugin-storybook-nextjs@npm:10.6.1":
version: 10.6.1
resolution: "vite-plugin-storybook-nextjs@npm:10.6.1"
dependencies:
"@next/env": "npm:^15.0.0 || ^16.0.0"
"@rollup/pluginutils": "npm:^5.0.2"
@@ -26432,9 +26436,9 @@ __metadata:
vite-tsconfig-paths: "npm:^5.1.4"
peerDependencies:
next: ^14.1.0 || ^15.0.0 || ^16.0.0
storybook: ^10.6.0
storybook: ^10.6.1
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
checksum: 10/07bc0c93a27896d1dbe6333f8d7d8f17d14dd67bdd34f27aa150a98a934398b9116298098a6c47b761fc2461644588e49d4920195777817d923d8effe5f0fb2a
checksum: 10/78577b73af19d92c5d8ef52bab7dc8ca342ad36e4189ccfb2c8deb42199b8b1947922b38403da4c9067b814919eb74ee1bf7f7666d45ea14d3639ed3d01d6d4c
languageName: node
linkType: hard
@@ -27005,7 +27009,7 @@ __metadata:
prism-react-renderer: "npm:^2.0.0"
react: "npm:19.3.0"
react-dom: "npm:19.3.0"
react-hook-form: "npm:^7.53.0"
react-hook-form: "npm:^7.90.0"
react-markdown: "npm:^9.0.1"
react-responsive-masonry: "npm:2.7.2"
react-snowfall: "npm:^2.4.0"