Releases: chakra-ui/ark
@ark-ui/vue@5.37.0
@ark-ui/vue
[5.37.0] - 2026-05-26
Added
-
Added
- Floating Components: Add
data-sideto placement-aware parts so you can style them based on the current
placement (top,bottom,left,right).Affects Color Picker, Combobox, Date Picker, Hover Card, Menu, Popover, Select, Tooltip, and Tour.
- Date Input: Add
hideTimeZoneprop. When the value is aZonedDateTime, thetimeZoneNamesegment now renders
automatically — sethideTimeZoneto hide it. Arrow navigation and auto-advance after typing now reach read-only
focusable segments too. - Splitter
- Accept CSS units (
px,em,rem,vh,vw) fordefaultSize,minSize, andmaxSizein addition to
percentages.<Splitter.Root panels={[ { id: 'nav', minSize: '240px', maxSize: '480px' }, { id: 'main', minSize: 30 }, ]} defaultSize={['240px', '60vw']} />
- Add
resizeBehaviorper panel. Set to"preserve-pixel-size"to keep a panel's pixel size constant when the
parent splitter group resizes. - Allow non-panel children (toolbars, rails, status bars) inside the splitter root. Use partial trigger ids
("left:",":right") to bind handles around the fixed element.
- Accept CSS units (
Fixed
- Accordion: Remove redundant
aria-disabledfrom item triggers. - Color Picker: Fire
onValueChangeEndwhen you pick a color with the EyeDropper API — matches the behavior when
ending a drag on the area or channel sliders. - Combobox: Stop
Enterfrom submitting the form when an item is highlighted, or when the typed value will be
rejected byallowCustomValue: false. - Date Input
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
06/15/1999with min
2000-01-01becomes06/15/2000instead of snapping to01/01/2000. - Fix range mode keyboard navigation so
ArrowRightmoves from the last segment of the start date to the first
segment of the end date. - Fix time-only formatters (no
yearsegment) never firingonValueChange. - Fix
setSegmentValuereading stale display values. - Fix
dayPeriod(AM/PM) arrow up/down not updating the visible segment whenhourCyclechanges at runtime. - Fix typing "A" / "P" on the
dayPeriodsegment not updating the visible AM/PM.
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
- Date Picker
- Fix clearing the value not resetting
activeIndexandhoveredValuein range mode when input parts are not
rendered. - Fix date input not being writable in locales with multi-character separators (e.g.
cs-CZ,sk-SK,hu-HU,
ko-KR). - Fix Firefox issue where the native month/year
<select>was not interactive when the picker is inside a modal
dialog. - Fix range selection with
outsideDaySelectable: hovering outside-month days no longer changes the visible month;
hover preview for the end date still updates.
- Fix clearing the value not resetting
- Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via
ids.trigger) being
ignored when shared across components — e.g. wrapping aPopover.Triggerin aTooltipwith the same id no longer
breaks positioning. Also fix trigger lookups in shadow root. - Dialog, Drawer, Popover: Fix dismissable layers losing their
pointer-eventsin Svelte and Vue, where a spread
update could rewrite the wholestyleattribute and wipe the value. - Drawer
- Fix controlled drawers snapping back open before the close animation when dismissed by swipe.
- Fix the indent and indent background snapping into place after the close animation instead of transitioning in
sync. - Fix
--drawer-swipe-progressjumping straight to1at the start of a dismiss swipe — it now moves smoothly from
0(at rest) to1(fully dismissed). - Fix the drawer freezing mid-drag on release when its content mounts lazily, which left snap points unmeasured.
- React 19 Strict Mode: Fix dialog, drawer, and popover leaving
<body>uninteractive (data-scroll-lock,
data-inert,overflow: hidden,pointer-events: none) after closing. - Number Input: Fix inconsistent blur behavior when the input is cleared and
minis greater than0. - Splitter
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
it was tab-focused (notably on Safari). - Fix
data-focusbeing applied on hover — it now only sets when the trigger is actually focused.
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
- Tabs: Observe the tab list with
ResizeObserverso the indicator updates when the list resizes without
individual tab triggers changing size (e.g. responsive grid reflow).
- Floating Components: Add
Fixed
-
Floating Panel: Re-export additional types (
ResizeTriggerAxis,Stage,ElementIds,IntlTranslations,
AnchorPositionDetails,Point,Size) and theresizeTriggerAxesconstant from@zag-js/floating-panel. -
Fix
useDialogto correctly unwrapMaybeRefprops beforecleanPropsso computed/ref props likeidare
preserved.
[5.36.2] - 2026-04-22
Fixed
-
Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace. -
DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now simply
consumes this hook, making the browser-download behavior reusable outside of the trigger component.
[5.36.1] - 2026-04-14
Fixed
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.
<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}>
...
</Popover.Root>-
Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. -
Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. -
Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. -
Navigation Menu: Remove aggressive and redundant default
aria-label.
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
DatePicker: Fix keyboard navigation not working in month and year views.
-
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Menu: Fix keyboard navigation for nested menus. ArrowRight now correctly opens submenus when using nested
component patterns. Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight
across sibling items you skim past. -
**Spl...
@ark-ui/svelte@5.22.0
@ark-ui/svelte
[5.22.0] - 2026-05-26
Added
-
Added
- Floating Components: Add
data-sideto placement-aware parts so you can style them based on the current
placement (top,bottom,left,right).Affects Color Picker, Combobox, Date Picker, Hover Card, Menu, Popover, Select, Tooltip, and Tour.
- Date Input: Add
hideTimeZoneprop. When the value is aZonedDateTime, thetimeZoneNamesegment now renders
automatically — sethideTimeZoneto hide it. Arrow navigation and auto-advance after typing now reach read-only
focusable segments too. - Splitter
- Accept CSS units (
px,em,rem,vh,vw) fordefaultSize,minSize, andmaxSizein addition to
percentages.<Splitter.Root panels={[ { id: 'nav', minSize: '240px', maxSize: '480px' }, { id: 'main', minSize: 30 }, ]} defaultSize={['240px', '60vw']} />
- Add
resizeBehaviorper panel. Set to"preserve-pixel-size"to keep a panel's pixel size constant when the
parent splitter group resizes. - Allow non-panel children (toolbars, rails, status bars) inside the splitter root. Use partial trigger ids
("left:",":right") to bind handles around the fixed element.
- Accept CSS units (
Fixed
- Accordion: Remove redundant
aria-disabledfrom item triggers. - Color Picker: Fire
onValueChangeEndwhen you pick a color with the EyeDropper API — matches the behavior when
ending a drag on the area or channel sliders. - Combobox: Stop
Enterfrom submitting the form when an item is highlighted, or when the typed value will be
rejected byallowCustomValue: false. - Date Input
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
06/15/1999with min
2000-01-01becomes06/15/2000instead of snapping to01/01/2000. - Fix range mode keyboard navigation so
ArrowRightmoves from the last segment of the start date to the first
segment of the end date. - Fix time-only formatters (no
yearsegment) never firingonValueChange. - Fix
setSegmentValuereading stale display values. - Fix
dayPeriod(AM/PM) arrow up/down not updating the visible segment whenhourCyclechanges at runtime. - Fix typing "A" / "P" on the
dayPeriodsegment not updating the visible AM/PM.
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
- Date Picker
- Fix clearing the value not resetting
activeIndexandhoveredValuein range mode when input parts are not
rendered. - Fix date input not being writable in locales with multi-character separators (e.g.
cs-CZ,sk-SK,hu-HU,
ko-KR). - Fix Firefox issue where the native month/year
<select>was not interactive when the picker is inside a modal
dialog. - Fix range selection with
outsideDaySelectable: hovering outside-month days no longer changes the visible month;
hover preview for the end date still updates.
- Fix clearing the value not resetting
- Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via
ids.trigger) being
ignored when shared across components — e.g. wrapping aPopover.Triggerin aTooltipwith the same id no longer
breaks positioning. Also fix trigger lookups in shadow root. - Dialog, Drawer, Popover: Fix dismissable layers losing their
pointer-eventsin Svelte and Vue, where a spread
update could rewrite the wholestyleattribute and wipe the value. - Drawer
- Fix controlled drawers snapping back open before the close animation when dismissed by swipe.
- Fix the indent and indent background snapping into place after the close animation instead of transitioning in
sync. - Fix
--drawer-swipe-progressjumping straight to1at the start of a dismiss swipe — it now moves smoothly from
0(at rest) to1(fully dismissed). - Fix the drawer freezing mid-drag on release when its content mounts lazily, which left snap points unmeasured.
- React 19 Strict Mode: Fix dialog, drawer, and popover leaving
<body>uninteractive (data-scroll-lock,
data-inert,overflow: hidden,pointer-events: none) after closing. - Number Input: Fix inconsistent blur behavior when the input is cleared and
minis greater than0. - Splitter
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
it was tab-focused (notably on Safari). - Fix
data-focusbeing applied on hover — it now only sets when the trigger is actually focused.
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
- Tabs: Observe the tab list with
ResizeObserverso the indicator updates when the list resizes without
individual tab triggers changing size (e.g. responsive grid reflow).
- Floating Components: Add
Fixed
- Floating Panel: Re-export additional types (
ResizeTriggerAxis,Stage,ElementIds,IntlTranslations,
AnchorPositionDetails,Point,Size) and theresizeTriggerAxesconstant from@zag-js/floating-panel.
[5.21.2] - 2026-04-22
Fixed
-
Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace. -
DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now simply
consumes this hook, making the browser-download behavior reusable outside of the trigger component.
[5.21.1] - 2026-04-14
Fixed
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.
<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}>
...
</Popover.Root>-
Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. -
Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. -
Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. -
Navigation Menu: Remove aggressive and redundant default
aria-label.
[5.21.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix
lazyMountandunmountOnExitnot working for backdrop. -
NumberInput, Progress: Fix
localefromLocaleProvidernot being passed to the underlying machine. -
Select, TagsInput, RadioGroup, RatingGroup, Pagination: Fix unwanted props being forwarded to the DOM elements.
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto `"d...
@ark-ui/solid@5.37.0
@ark-ui/solid
[5.37.0] - 2026-05-26
Added
-
Added
- Floating Components: Add
data-sideto placement-aware parts so you can style them based on the current
placement (top,bottom,left,right).Affects Color Picker, Combobox, Date Picker, Hover Card, Menu, Popover, Select, Tooltip, and Tour.
- Date Input: Add
hideTimeZoneprop. When the value is aZonedDateTime, thetimeZoneNamesegment now renders
automatically — sethideTimeZoneto hide it. Arrow navigation and auto-advance after typing now reach read-only
focusable segments too. - Splitter
- Accept CSS units (
px,em,rem,vh,vw) fordefaultSize,minSize, andmaxSizein addition to
percentages.<Splitter.Root panels={[ { id: 'nav', minSize: '240px', maxSize: '480px' }, { id: 'main', minSize: 30 }, ]} defaultSize={['240px', '60vw']} />
- Add
resizeBehaviorper panel. Set to"preserve-pixel-size"to keep a panel's pixel size constant when the
parent splitter group resizes. - Allow non-panel children (toolbars, rails, status bars) inside the splitter root. Use partial trigger ids
("left:",":right") to bind handles around the fixed element.
- Accept CSS units (
Fixed
- Accordion: Remove redundant
aria-disabledfrom item triggers. - Color Picker: Fire
onValueChangeEndwhen you pick a color with the EyeDropper API — matches the behavior when
ending a drag on the area or channel sliders. - Combobox: Stop
Enterfrom submitting the form when an item is highlighted, or when the typed value will be
rejected byallowCustomValue: false. - Date Input
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
06/15/1999with min
2000-01-01becomes06/15/2000instead of snapping to01/01/2000. - Fix range mode keyboard navigation so
ArrowRightmoves from the last segment of the start date to the first
segment of the end date. - Fix time-only formatters (no
yearsegment) never firingonValueChange. - Fix
setSegmentValuereading stale display values. - Fix
dayPeriod(AM/PM) arrow up/down not updating the visible segment whenhourCyclechanges at runtime. - Fix typing "A" / "P" on the
dayPeriodsegment not updating the visible AM/PM.
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
- Date Picker
- Fix clearing the value not resetting
activeIndexandhoveredValuein range mode when input parts are not
rendered. - Fix date input not being writable in locales with multi-character separators (e.g.
cs-CZ,sk-SK,hu-HU,
ko-KR). - Fix Firefox issue where the native month/year
<select>was not interactive when the picker is inside a modal
dialog. - Fix range selection with
outsideDaySelectable: hovering outside-month days no longer changes the visible month;
hover preview for the end date still updates.
- Fix clearing the value not resetting
- Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via
ids.trigger) being
ignored when shared across components — e.g. wrapping aPopover.Triggerin aTooltipwith the same id no longer
breaks positioning. Also fix trigger lookups in shadow root. - Dialog, Drawer, Popover: Fix dismissable layers losing their
pointer-eventsin Svelte and Vue, where a spread
update could rewrite the wholestyleattribute and wipe the value. - Drawer
- Fix controlled drawers snapping back open before the close animation when dismissed by swipe.
- Fix the indent and indent background snapping into place after the close animation instead of transitioning in
sync. - Fix
--drawer-swipe-progressjumping straight to1at the start of a dismiss swipe — it now moves smoothly from
0(at rest) to1(fully dismissed). - Fix the drawer freezing mid-drag on release when its content mounts lazily, which left snap points unmeasured.
- React 19 Strict Mode: Fix dialog, drawer, and popover leaving
<body>uninteractive (data-scroll-lock,
data-inert,overflow: hidden,pointer-events: none) after closing. - Number Input: Fix inconsistent blur behavior when the input is cleared and
minis greater than0. - Splitter
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
it was tab-focused (notably on Safari). - Fix
data-focusbeing applied on hover — it now only sets when the trigger is actually focused.
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
- Tabs: Observe the tab list with
ResizeObserverso the indicator updates when the list resizes without
individual tab triggers changing size (e.g. responsive grid reflow).
- Floating Components: Add
Fixed
-
Date Input: Fix
DateInput.Segmentto stay in sync with the latest segment state while typing. -
Floating Panel: Re-export additional types (
ResizeTriggerAxis,Stage,ElementIds,IntlTranslations,
AnchorPositionDetails,Point,Size) and theresizeTriggerAxesconstant from@zag-js/floating-panel.
[5.36.2] - 2026-04-22
Fixed
-
Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace. -
DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now simply
consumes this hook, making the browser-download behavior reusable outside of the trigger component.
[5.36.1] - 2026-04-14
Fixed
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.
<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}>
...
</Popover.Root>-
Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. -
Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. -
Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. -
Navigation Menu: Remove aggressive and redundant default
aria-label.
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmar...
@ark-ui/react@5.37.0
@ark-ui/react
[5.37.0] - 2026-05-26
Added
-
Added
- Floating Components: Add
data-sideto placement-aware parts so you can style them based on the current
placement (top,bottom,left,right).Affects Color Picker, Combobox, Date Picker, Hover Card, Menu, Popover, Select, Tooltip, and Tour.
- Date Input: Add
hideTimeZoneprop. When the value is aZonedDateTime, thetimeZoneNamesegment now renders
automatically — sethideTimeZoneto hide it. Arrow navigation and auto-advance after typing now reach read-only
focusable segments too. - Splitter
- Accept CSS units (
px,em,rem,vh,vw) fordefaultSize,minSize, andmaxSizein addition to
percentages.<Splitter.Root panels={[ { id: 'nav', minSize: '240px', maxSize: '480px' }, { id: 'main', minSize: 30 }, ]} defaultSize={['240px', '60vw']} />
- Add
resizeBehaviorper panel. Set to"preserve-pixel-size"to keep a panel's pixel size constant when the
parent splitter group resizes. - Allow non-panel children (toolbars, rails, status bars) inside the splitter root. Use partial trigger ids
("left:",":right") to bind handles around the fixed element.
- Accept CSS units (
Fixed
- Accordion: Remove redundant
aria-disabledfrom item triggers. - Color Picker: Fire
onValueChangeEndwhen you pick a color with the EyeDropper API — matches the behavior when
ending a drag on the area or channel sliders. - Combobox: Stop
Enterfrom submitting the form when an item is highlighted, or when the typed value will be
rejected byallowCustomValue: false. - Date Input
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
06/15/1999with min
2000-01-01becomes06/15/2000instead of snapping to01/01/2000. - Fix range mode keyboard navigation so
ArrowRightmoves from the last segment of the start date to the first
segment of the end date. - Fix time-only formatters (no
yearsegment) never firingonValueChange. - Fix
setSegmentValuereading stale display values. - Fix
dayPeriod(AM/PM) arrow up/down not updating the visible segment whenhourCyclechanges at runtime. - Fix typing "A" / "P" on the
dayPeriodsegment not updating the visible AM/PM.
- Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so
- Date Picker
- Fix clearing the value not resetting
activeIndexandhoveredValuein range mode when input parts are not
rendered. - Fix date input not being writable in locales with multi-character separators (e.g.
cs-CZ,sk-SK,hu-HU,
ko-KR). - Fix Firefox issue where the native month/year
<select>was not interactive when the picker is inside a modal
dialog. - Fix range selection with
outsideDaySelectable: hovering outside-month days no longer changes the visible month;
hover preview for the end date still updates.
- Fix clearing the value not resetting
- Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via
ids.trigger) being
ignored when shared across components — e.g. wrapping aPopover.Triggerin aTooltipwith the same id no longer
breaks positioning. Also fix trigger lookups in shadow root. - Dialog, Drawer, Popover: Fix dismissable layers losing their
pointer-eventsin Svelte and Vue, where a spread
update could rewrite the wholestyleattribute and wipe the value. - Drawer
- Fix controlled drawers snapping back open before the close animation when dismissed by swipe.
- Fix the indent and indent background snapping into place after the close animation instead of transitioning in
sync. - Fix
--drawer-swipe-progressjumping straight to1at the start of a dismiss swipe — it now moves smoothly from
0(at rest) to1(fully dismissed). - Fix the drawer freezing mid-drag on release when its content mounts lazily, which left snap points unmeasured.
- React 19 Strict Mode: Fix dialog, drawer, and popover leaving
<body>uninteractive (data-scroll-lock,
data-inert,overflow: hidden,pointer-events: none) after closing. - Number Input: Fix inconsistent blur behavior when the input is cleared and
minis greater than0. - Splitter
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
it was tab-focused (notably on Safari). - Fix
data-focusbeing applied on hover — it now only sets when the trigger is actually focused.
- Fix clicking a resize trigger not moving focus to it, which prevented arrow keys from resizing the splitter until
- Tabs: Observe the tab list with
ResizeObserverso the indicator updates when the list resizes without
individual tab triggers changing size (e.g. responsive grid reflow).
- Floating Components: Add
Fixed
- Floating Panel: Re-export additional types (
ResizeTriggerAxis,Stage,ElementIds,IntlTranslations,
AnchorPositionDetails,Point,Size) and theresizeTriggerAxesconstant from@zag-js/floating-panel.
[5.36.2] - 2026-04-22
Fixed
-
Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace. -
Fix React Server Components build failure caused by a stray
"use client"directive on the shared
_virtual/_rolldown/runtime.jshelper emitted by vite 8's rolldown backend. -
DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now simply
consumes this hook, making the browser-download behavior reusable outside of the trigger component.
[5.36.1] - 2026-04-14
Fixed
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.
<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}>
...
</Popover.Root>-
Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. -
Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. -
Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. -
Navigation Menu: Remove aggressive and redundant default
aria-label.
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash in non-React frameworks (Vue, Solid, Svelte) where
event.nativeEvent.isComposingis
undefined. The composing check now uses a framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
**Toa...
@ark-ui/vue@5.36.2
@ark-ui/vue
[5.36.2] - 2026-04-22
Fixed
-
- Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace.
- Field: Export
-
- DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now
simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.
- DownloadTrigger: Extract the download logic into a
[5.36.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
DatePicker: Fix keyboard navigation not working in month and year views.
-
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Menu: Fix keyboard navigation for nested menus. ArrowRight now correctly opens submenus when using nested
component patterns. Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight
across sibling items you skim past. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices.
[5.35.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal mode behavior.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Added initial focus man...
- Set
@ark-ui/svelte@5.21.2
@ark-ui/svelte
[5.21.2] - 2026-04-22
Fixed
-
- Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace.
- Field: Export
-
- DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now
simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.
- DownloadTrigger: Extract the download logic into a
[5.21.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.21.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix
lazyMountandunmountOnExitnot working for backdrop. -
NumberInput, Progress: Fix
localefromLocaleProvidernot being passed to the underlying machine. -
Select, TagsInput, RadioGroup, RatingGroup, Pagination: Fix unwanted props being forwarded to the DOM elements.
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices. -
Menu: Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight across
sibling items you skim past.
[5.20.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal ...
@ark-ui/solid@5.36.2
@ark-ui/solid
[5.36.2] - 2026-04-22
Fixed
-
- Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace.
- Field: Export
-
- DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now
simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.
- DownloadTrigger: Extract the download logic into a
[5.36.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices. -
Menu: Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight across
sibling items you skim past.
[5.35.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal mode behavior.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Added initial focus management for non-modal mode (mirrors popover behavior).
- Fixed
aria-modalto reflect actualmodalprop value instead of hardcodedtrue.
- Set
-
Floating Panel: Fixed
opentaking precedence ...
@ark-ui/react@5.36.2
@ark-ui/react
[5.36.2] - 2026-04-22
Fixed
-
- Field: Export
FieldItemcomponent from the top-level package. The component was previously only accessible via
theField.Itemnamespace.
- Field: Export
-
Fix React Server Components build failure caused by a stray
"use client"directive on the shared
_virtual/_rolldown/runtime.jshelper emitted by vite 8's rolldown backend. -
- DownloadTrigger: Extract the download logic into a
useDownloadhook. TheDownloadTriggercomponent now
simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.
- DownloadTrigger: Extract the download logic into a
[5.36.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash in non-React frameworks (Vue, Solid, Svelte) where
event.nativeEvent.isComposingis
undefined. The composing check now uses a framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices. -
Menu: Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight across
sibling items you skim past.
[5.35.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal mode behavior.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive.
-...
- Set
@ark-ui/vue@5.36.1
@ark-ui/vue
[5.36.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.36.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
DatePicker: Fix keyboard navigation not working in month and year views.
-
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Menu: Fix keyboard navigation for nested menus. ArrowRight now correctly opens submenus when using nested
component patterns. Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight
across sibling items you skim past. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices.
[5.35.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal mode behavior.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Added initial focus management for non-modal mode (mirrors popover behavior).
- Fixed
aria-modalto reflect actualmodalprop value instead of hardcodedtrue.
- Set
-
Floating Panel: Fixed
opentaking precedence overdefaultOpenduring initialization. FixedsetPositionand
setSizeto work independently of drag/resize state. Fixed maximize/minimize restore reverting to(0, 0)in
controlled mode. Fixed `Maximum update depth ...
@ark-ui/svelte@5.21.1
@ark-ui/svelte
[5.21.1] - 2026-04-14
Fixed
-
Added
- Popover: Add
finalFocusElandrestoreFocusprops to control focus behavior when the popover closes.
finalFocusEllets you specify an element to receive focus instead of the trigger, andrestoreFocus(default
true) controls whether focus returns to the trigger at all.<Popover.Root finalFocusEl={() => myInputRef} restoreFocus={false}> ... </Popover.Root>
Fixed
- Color Picker: Fix color value to respect the specified
formatwhen setting values via props orsetValue.
Previously, the internal color object could retain a mismatched format (e.g., RGB whenformatishsla), causing
inconsistentvalueobjects inonValueChangecallbacks. - Date Input: Fix min/max constraints resetting other segments mid-keystroke. Validation now defers until the
segment is fully typed or on blur. - Date Picker: Fix
onValueChangenot firing when only time segments change inCalendarDateTimeor
ZonedDateTimevalues. - Navigation Menu: Remove aggressive and redundant default
aria-label.
- Popover: Add
[5.21.0] - 2026-04-10
Added
- Add new
DateInputcomponent for typing dates with keyboard input.
<DateInput.Root>
<DateInput.Label />
<DateInput.Control>
<DateInput.SegmentGroup>
<DateInput.Segment />
</DateInput.SegmentGroup>
</DateInput.Control>
<DateInput.HiddenInput />
</DateInput.Root>-
Multiple Trigger Support: No more duplicating a Dialog for every button in a list — render one instance and share
it across as many triggers as you need. Each trigger gets avalue, and the component repositions automatically when
switching between them.<Dialog.Root> <Dialog.Trigger value="user-1">Edit Alice</Dialog.Trigger> <Dialog.Trigger value="user-2">Edit Bob</Dialog.Trigger> {/* one dialog, reused for both */} </Dialog.Root>
Supported in Dialog, Drawer, Hover Card, Menu, Popover, and Tooltip.
-
Splitter: Nest splitters to build grid-like layouts. When a horizontal and vertical splitter meet at an
intersection, you can drag both directions at once. UsecreateRegistry()to connect the splitter instances.const registry = Splitter.createRegistry() <Splitter.Root orientation="horizontal" registry={registry}> <Splitter.Panel> <Splitter.Root orientation="vertical" registry={registry}> ... </Splitter.Root> </Splitter.Panel> </Splitter.Root>
-
Tags Input: Add
sanitizeValueprop to clean up tag values before they're added — trim whitespace, lowercase,
strip special characters, whatever you need. Defaults to(v) => v.trim().<TagsInput.Root sanitizeValue={(v) => v.trim().toLowerCase()} />
-
Toast: Add priority-based queuing. When you've hit the max visible toasts, incoming ones are queued and sorted so
the most important ones show first. -
Floating Panel: Add
initialFocusEl,finalFocusEl, andrestoreFocusprops to control which element gets focus
when the panel opens or closes.
Fixed
-
Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix
lazyMountandunmountOnExitnot working for backdrop. -
NumberInput, Progress: Fix
localefromLocaleProvidernot being passed to the underlying machine. -
Select, TagsInput, RadioGroup, RatingGroup, Pagination: Fix unwanted props being forwarded to the DOM elements.
-
Date Input: Fix crash where
event.nativeEvent.isComposingisundefined. The composing check now uses a
framework-agnostic utility that works across all adapters. -
Dialog / Drawer: Avoid setting inline
pointer-eventswhen modal, letting the dismissable layer manage it
instead. -
File Upload: Automatically reject duplicate files with
FILE_EXISTSerror. Previously, uploading the same file
twice was silently accepted and deleting one duplicate removed all of them. -
Splitter: Fix
onResizeStartandonResizeEndcallbacks to fire for programmatic resizes. -
Tags Input: Set
enterKeyHintto"done"on the input element so mobile virtual keyboards show a "Done" button
that triggers tag addition. -
Toast: Restore
role="region"on the toast group element. The role was previously removed to reduce screen reader
landmark noise, but this caused an axearia-prohibited-attrviolation sincearia-labelis not permitted on adiv
without a valid role. -
Tour: Fix step navigation events (
next,prev,setStep) firing when the tour is inactive, bypassing the
startflow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step. -
Tree View: Add
data-checkedanddata-indeterminateattributes to item and branch control elements for styling
based on checked state. -
Accordion: Fix missing
data-focusattribute ongetItemTriggerProps. -
Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
aria-activedescendantchanges on combobox inputs, so a live region is now used to announce the highlighted item on
Apple devices. -
Menu: Fix issue where quick diagonal pointer movement toward an open submenu could flash the highlight across
sibling items you skim past.
[5.20.0] - 2026-03-26
Added
-
Date Picker: Improved range picker mode with new data attributes and state properties.
- Added missing range data attributes (
data-range-start,data-range-end,data-in-hover-range,
data-hover-range-start,data-hover-range-end) to month and year cell triggers. TableCellStatenow includesfirstInRange,lastInRange,inHoveredRange,firstInHoveredRange,
lastInHoveredRange, andoutsideRange.- Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
context. - Fixed inverted year cell
selectablestate that caused years outside the visible decade or min/max range to appear
selectable. - Breaking:
DayTableCellState.formattedDateremoved — usevalueTextinstead (inherited fromTableCellState).
- Added missing range data attributes (
-
Drawer: Added new anatomy parts and improved swipe gestures.
- Added
descriptionanatomy part witharia-describedbysupport on the content element. - Added
SwipeAreapart for swipe-to-open gestures from screen edges. - Require intentional swipe movement before showing the drawer (no flash on pointer down).
- Smooth settle animation from release point to fully open position.
- Added cross-axis scroll preservation to prevent drawer drag when scrolling horizontally.
- Added initial focus management for non-modal mode.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Fixed swipe-to-dismiss in controlled mode (
open: truewithoutonOpenChangenow blocks dismiss).
- Added
-
Field: Added
Field.Itemcomponent andtargetprop onField.Rootfor multi-control fields (e.g., currency
select + amount input). UseField.Itemwith avalueto scope controls, andtargetto specify which item the
label should focus when clicked. -
Interaction: Added
useInteractionModalityanduseFocusVisiblehooks for tracking user input method (keyboard,
pointer, virtual) and conditionally showing focus rings. -
Listbox: Added
keyboardPriorityto input props to control whether key handling prioritizes text editing or list
navigation forHome/Endand horizontal arrows in grid collections. AddedhighlightFirst,highlightLast,
highlightNext, andhighlightPreviousto the API for programmatic highlight navigation. -
Pin Input: Overhauled deletion, focus management, and added new props.
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
[1, 2, 3]yields
[1, 3, ""]— not[1, "", 3]. - Smarter focus management: Backspace always moves back, click and ArrowRight are clamped to the insertion point,
same-key skip advances focus, and roving tabIndex treats the entire pin input as a single tab stop. - Added Home/End to jump to first slot or last filled slot.
- Added
enterKeyHintshowing "next" on intermediate slots and "done" on the last. - Added
autoSubmitprop to automatically submit the owning form when all inputs are filled. - Added
sanitizeValueprop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
- Delete and Backspace now splice values left instead of leaving empty gaps. Deleting "2" from
-
Tags Input: Added
allowDuplicatesprop to allow duplicate tags. -
Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added
translationsprop for localizing hardcoded
accessibility labels.
Fixed
-
Carousel: Fixed controlled carousel inside dialog jumping or skipping pages. Fixed navigation inside
CSS-transformed containers (e.g., dialogs with open/close animations). Fixed scroll position drifting when container
layout shifts (e.g., scrollbar removal). -
Color Picker: Fixed vertical slider orientation not preserved on pointer updates.
-
Date Input: Improved focus management.
-
Dialog: Improved non-modal mode behavior.
- Set
pointer-events: noneon positioner in non-modal mode so the page stays interactive. - Added initial focus management for non-modal mode (mirrors popover behavior).
- Fixed
aria-modalto reflect actualmodalprop value instead of hardcodedtrue.
- Set
-
Floating Panel: Fixed
opentaking precedence overdefaultOpenduring initialization. FixedsetPositionand
setSizeto wor...