Skip to content

Releases: chakra-ui/ark

@ark-ui/vue@5.37.0

27 May 16:35
bf5b105

Choose a tag to compare

@ark-ui/vue

[5.37.0] - 2026-05-26

Added

  • Added

    • Floating Components: Add data-side to 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 hideTimeZone prop. When the value is a ZonedDateTime, the timeZoneName segment now renders
      automatically — set hideTimeZone to 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) for defaultSize, minSize, and maxSize in addition to
        percentages.
        <Splitter.Root
          panels={[
            { id: 'nav', minSize: '240px', maxSize: '480px' },
            { id: 'main', minSize: 30 },
          ]}
          defaultSize={['240px', '60vw']}
        />
      • Add resizeBehavior per 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.

    Fixed

    • Accordion: Remove redundant aria-disabled from item triggers.
    • Color Picker: Fire onValueChangeEnd when you pick a color with the EyeDropper API — matches the behavior when
      ending a drag on the area or channel sliders.
    • Combobox: Stop Enter from submitting the form when an item is highlighted, or when the typed value will be
      rejected by allowCustomValue: false.
    • Date Input
      • Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so 06/15/1999 with min
        2000-01-01 becomes 06/15/2000 instead of snapping to 01/01/2000.
      • Fix range mode keyboard navigation so ArrowRight moves from the last segment of the start date to the first
        segment of the end date.
      • Fix time-only formatters (no year segment) never firing onValueChange.
      • Fix setSegmentValue reading stale display values.
      • Fix dayPeriod (AM/PM) arrow up/down not updating the visible segment when hourCycle changes at runtime.
      • Fix typing "A" / "P" on the dayPeriod segment not updating the visible AM/PM.
    • Date Picker
      • Fix clearing the value not resetting activeIndex and hoveredValue in 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.
    • Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via ids.trigger) being
      ignored when shared across components — e.g. wrapping a Popover.Trigger in a Tooltip with the same id no longer
      breaks positioning. Also fix trigger lookups in shadow root.
    • Dialog, Drawer, Popover: Fix dismissable layers losing their pointer-events in Svelte and Vue, where a spread
      update could rewrite the whole style attribute 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-progress jumping straight to 1 at the start of a dismiss swipe — it now moves smoothly from
        0 (at rest) to 1 (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 min is greater than 0.
    • 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-focus being applied on hover — it now only sets when the trigger is actually focused.
    • Tabs: Observe the tab list with ResizeObserver so the indicator updates when the list resizes without
      individual tab triggers changing size (e.g. responsive grid reflow).

Fixed

  • Floating Panel: Re-export additional types (ResizeTriggerAxis, Stage, ElementIds, IntlTranslations,
    AnchorPositionDetails, Point, Size) and the resizeTriggerAxes constant from @zag-js/floating-panel.

  • Fix useDialog to correctly unwrap MaybeRef props before cleanProps so computed/ref props like id are
    preserved.

[5.36.2] - 2026-04-22

Fixed

  • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
    the Field.Item namespace.

  • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component 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 finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
    finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
    Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
    inconsistent value objects in onValueChange callbacks.

  • 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 onValueChange not firing when only time segments change in CalendarDateTime or
    ZonedDateTime values.

  • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Date Input: Fix crash where event.nativeEvent.isComposing is undefined. 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-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. 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...

Read more

@ark-ui/svelte@5.22.0

27 May 16:35
bf5b105

Choose a tag to compare

@ark-ui/svelte

[5.22.0] - 2026-05-26

Added

  • Added

    • Floating Components: Add data-side to 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 hideTimeZone prop. When the value is a ZonedDateTime, the timeZoneName segment now renders
      automatically — set hideTimeZone to 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) for defaultSize, minSize, and maxSize in addition to
        percentages.
        <Splitter.Root
          panels={[
            { id: 'nav', minSize: '240px', maxSize: '480px' },
            { id: 'main', minSize: 30 },
          ]}
          defaultSize={['240px', '60vw']}
        />
      • Add resizeBehavior per 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.

    Fixed

    • Accordion: Remove redundant aria-disabled from item triggers.
    • Color Picker: Fire onValueChangeEnd when you pick a color with the EyeDropper API — matches the behavior when
      ending a drag on the area or channel sliders.
    • Combobox: Stop Enter from submitting the form when an item is highlighted, or when the typed value will be
      rejected by allowCustomValue: false.
    • Date Input
      • Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so 06/15/1999 with min
        2000-01-01 becomes 06/15/2000 instead of snapping to 01/01/2000.
      • Fix range mode keyboard navigation so ArrowRight moves from the last segment of the start date to the first
        segment of the end date.
      • Fix time-only formatters (no year segment) never firing onValueChange.
      • Fix setSegmentValue reading stale display values.
      • Fix dayPeriod (AM/PM) arrow up/down not updating the visible segment when hourCycle changes at runtime.
      • Fix typing "A" / "P" on the dayPeriod segment not updating the visible AM/PM.
    • Date Picker
      • Fix clearing the value not resetting activeIndex and hoveredValue in 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.
    • Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via ids.trigger) being
      ignored when shared across components — e.g. wrapping a Popover.Trigger in a Tooltip with the same id no longer
      breaks positioning. Also fix trigger lookups in shadow root.
    • Dialog, Drawer, Popover: Fix dismissable layers losing their pointer-events in Svelte and Vue, where a spread
      update could rewrite the whole style attribute 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-progress jumping straight to 1 at the start of a dismiss swipe — it now moves smoothly from
        0 (at rest) to 1 (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 min is greater than 0.
    • 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-focus being applied on hover — it now only sets when the trigger is actually focused.
    • Tabs: Observe the tab list with ResizeObserver so the indicator updates when the list resizes without
      individual tab triggers changing size (e.g. responsive grid reflow).

Fixed

  • Floating Panel: Re-export additional types (ResizeTriggerAxis, Stage, ElementIds, IntlTranslations,
    AnchorPositionDetails, Point, Size) and the resizeTriggerAxes constant from @zag-js/floating-panel.

[5.21.2] - 2026-04-22

Fixed

  • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
    the Field.Item namespace.

  • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component 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 finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
    finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
    Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
    inconsistent value objects in onValueChange callbacks.

  • 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 onValueChange not firing when only time segments change in CalendarDateTime or
    ZonedDateTime values.

  • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.21.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix lazyMount and unmountOnExit not working for backdrop.

  • NumberInput, Progress: Fix locale from LocaleProvider not 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.isComposing is undefined. The composing check now uses a
    framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to `"d...

Read more

@ark-ui/solid@5.37.0

27 May 16:35
bf5b105

Choose a tag to compare

@ark-ui/solid

[5.37.0] - 2026-05-26

Added

  • Added

    • Floating Components: Add data-side to 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 hideTimeZone prop. When the value is a ZonedDateTime, the timeZoneName segment now renders
      automatically — set hideTimeZone to 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) for defaultSize, minSize, and maxSize in addition to
        percentages.
        <Splitter.Root
          panels={[
            { id: 'nav', minSize: '240px', maxSize: '480px' },
            { id: 'main', minSize: 30 },
          ]}
          defaultSize={['240px', '60vw']}
        />
      • Add resizeBehavior per 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.

    Fixed

    • Accordion: Remove redundant aria-disabled from item triggers.
    • Color Picker: Fire onValueChangeEnd when you pick a color with the EyeDropper API — matches the behavior when
      ending a drag on the area or channel sliders.
    • Combobox: Stop Enter from submitting the form when an item is highlighted, or when the typed value will be
      rejected by allowCustomValue: false.
    • Date Input
      • Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so 06/15/1999 with min
        2000-01-01 becomes 06/15/2000 instead of snapping to 01/01/2000.
      • Fix range mode keyboard navigation so ArrowRight moves from the last segment of the start date to the first
        segment of the end date.
      • Fix time-only formatters (no year segment) never firing onValueChange.
      • Fix setSegmentValue reading stale display values.
      • Fix dayPeriod (AM/PM) arrow up/down not updating the visible segment when hourCycle changes at runtime.
      • Fix typing "A" / "P" on the dayPeriod segment not updating the visible AM/PM.
    • Date Picker
      • Fix clearing the value not resetting activeIndex and hoveredValue in 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.
    • Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via ids.trigger) being
      ignored when shared across components — e.g. wrapping a Popover.Trigger in a Tooltip with the same id no longer
      breaks positioning. Also fix trigger lookups in shadow root.
    • Dialog, Drawer, Popover: Fix dismissable layers losing their pointer-events in Svelte and Vue, where a spread
      update could rewrite the whole style attribute 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-progress jumping straight to 1 at the start of a dismiss swipe — it now moves smoothly from
        0 (at rest) to 1 (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 min is greater than 0.
    • 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-focus being applied on hover — it now only sets when the trigger is actually focused.
    • Tabs: Observe the tab list with ResizeObserver so the indicator updates when the list resizes without
      individual tab triggers changing size (e.g. responsive grid reflow).

Fixed

  • Date Input: Fix DateInput.Segment to stay in sync with the latest segment state while typing.

  • Floating Panel: Re-export additional types (ResizeTriggerAxis, Stage, ElementIds, IntlTranslations,
    AnchorPositionDetails, Point, Size) and the resizeTriggerAxes constant from @zag-js/floating-panel.

[5.36.2] - 2026-04-22

Fixed

  • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
    the Field.Item namespace.

  • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component 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 finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
    finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
    Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
    inconsistent value objects in onValueChange callbacks.

  • 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 onValueChange not firing when only time segments change in CalendarDateTime or
    ZonedDateTime values.

  • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Date Input: Fix crash where event.nativeEvent.isComposing is undefined. The composing check now uses a
    framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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...

Read more

@ark-ui/react@5.37.0

27 May 16:35
bf5b105

Choose a tag to compare

@ark-ui/react

[5.37.0] - 2026-05-26

Added

  • Added

    • Floating Components: Add data-side to 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 hideTimeZone prop. When the value is a ZonedDateTime, the timeZoneName segment now renders
      automatically — set hideTimeZone to 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) for defaultSize, minSize, and maxSize in addition to
        percentages.
        <Splitter.Root
          panels={[
            { id: 'nav', minSize: '240px', maxSize: '480px' },
            { id: 'main', minSize: 30 },
          ]}
          defaultSize={['240px', '60vw']}
        />
      • Add resizeBehavior per 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.

    Fixed

    • Accordion: Remove redundant aria-disabled from item triggers.
    • Color Picker: Fire onValueChangeEnd when you pick a color with the EyeDropper API — matches the behavior when
      ending a drag on the area or channel sliders.
    • Combobox: Stop Enter from submitting the form when an item is highlighted, or when the typed value will be
      rejected by allowCustomValue: false.
    • Date Input
      • Preserve entered segments when applying min/max. Values clamp segment-by-segment on blur, so 06/15/1999 with min
        2000-01-01 becomes 06/15/2000 instead of snapping to 01/01/2000.
      • Fix range mode keyboard navigation so ArrowRight moves from the last segment of the start date to the first
        segment of the end date.
      • Fix time-only formatters (no year segment) never firing onValueChange.
      • Fix setSegmentValue reading stale display values.
      • Fix dayPeriod (AM/PM) arrow up/down not updating the visible segment when hourCycle changes at runtime.
      • Fix typing "A" / "P" on the dayPeriod segment not updating the visible AM/PM.
    • Date Picker
      • Fix clearing the value not resetting activeIndex and hoveredValue in 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.
    • Dialog, Drawer, Hover Card, Menu, Popover, Tooltip: Fix custom trigger elements (via ids.trigger) being
      ignored when shared across components — e.g. wrapping a Popover.Trigger in a Tooltip with the same id no longer
      breaks positioning. Also fix trigger lookups in shadow root.
    • Dialog, Drawer, Popover: Fix dismissable layers losing their pointer-events in Svelte and Vue, where a spread
      update could rewrite the whole style attribute 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-progress jumping straight to 1 at the start of a dismiss swipe — it now moves smoothly from
        0 (at rest) to 1 (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 min is greater than 0.
    • 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-focus being applied on hover — it now only sets when the trigger is actually focused.
    • Tabs: Observe the tab list with ResizeObserver so the indicator updates when the list resizes without
      individual tab triggers changing size (e.g. responsive grid reflow).

Fixed

  • Floating Panel: Re-export additional types (ResizeTriggerAxis, Stage, ElementIds, IntlTranslations,
    AnchorPositionDetails, Point, Size) and the resizeTriggerAxes constant from @zag-js/floating-panel.

[5.36.2] - 2026-04-22

Fixed

  • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
    the Field.Item namespace.

  • Fix React Server Components build failure caused by a stray "use client" directive on the shared
    _virtual/_rolldown/runtime.js helper emitted by vite 8's rolldown backend.

  • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component 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 finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
    finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
    Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
    inconsistent value objects in onValueChange callbacks.

  • 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 onValueChange not firing when only time segments change in CalendarDateTime or
    ZonedDateTime values.

  • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props 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.isComposing is
    undefined. The composing check now uses a framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "done" on the input element so mobile virtual keyboards show a "Done" button
    that triggers tag addition.

  • **Toa...

Read more

@ark-ui/vue@5.36.2

22 Apr 15:37
45b5b22

Choose a tag to compare

@ark-ui/vue

[5.36.2] - 2026-04-22

Fixed

    • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
      the Field.Item namespace.
    • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component now
      simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.

[5.36.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Date Input: Fix crash where event.nativeEvent.isComposing is undefined. 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-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. 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 onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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: none on positioner in non-modal mode so the page stays interactive.
    • Added initial focus man...
Read more

@ark-ui/svelte@5.21.2

22 Apr 15:37
45b5b22

Choose a tag to compare

@ark-ui/svelte

[5.21.2] - 2026-04-22

Fixed

    • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
      the Field.Item namespace.
    • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component now
      simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.

[5.21.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.21.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix lazyMount and unmountOnExit not working for backdrop.

  • NumberInput, Progress: Fix locale from LocaleProvider not 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.isComposing is undefined. The composing check now uses a
    framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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 ...

Read more

@ark-ui/solid@5.36.2

22 Apr 15:37
45b5b22

Choose a tag to compare

@ark-ui/solid

[5.36.2] - 2026-04-22

Fixed

    • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
      the Field.Item namespace.
    • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component now
      simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.

[5.36.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Date Input: Fix crash where event.nativeEvent.isComposing is undefined. The composing check now uses a
    framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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: none on positioner in non-modal mode so the page stays interactive.
    • Added initial focus management for non-modal mode (mirrors popover behavior).
    • Fixed aria-modal to reflect actual modal prop value instead of hardcoded true.
  • Floating Panel: Fixed open taking precedence ...

Read more

@ark-ui/react@5.36.2

22 Apr 15:37
45b5b22

Choose a tag to compare

@ark-ui/react

[5.36.2] - 2026-04-22

Fixed

    • Field: Export FieldItem component from the top-level package. The component was previously only accessible via
      the Field.Item namespace.
  • Fix React Server Components build failure caused by a stray "use client" directive on the shared
    _virtual/_rolldown/runtime.js helper emitted by vite 8's rolldown backend.

    • DownloadTrigger: Extract the download logic into a useDownload hook. The DownloadTrigger component now
      simply consumes this hook, making the browser-download behavior reusable outside of the trigger component.

[5.36.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props 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.isComposing is
    undefined. The composing check now uses a framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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: none on positioner in non-modal mode so the page stays interactive.
      -...
Read more

@ark-ui/vue@5.36.1

16 Apr 13:25
d4fb8c7

Choose a tag to compare

@ark-ui/vue

[5.36.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.36.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Date Input: Fix crash where event.nativeEvent.isComposing is undefined. 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-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. 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 onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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: none on positioner in non-modal mode so the page stays interactive.
    • Added initial focus management for non-modal mode (mirrors popover behavior).
    • Fixed aria-modal to reflect actual modal prop value instead of hardcoded true.
  • Floating Panel: Fixed open taking precedence over defaultOpen during initialization. Fixed setPosition and
    setSize to work independently of drag/resize state. Fixed maximize/minimize restore reverting to (0, 0) in
    controlled mode. Fixed `Maximum update depth ...

Read more

@ark-ui/svelte@5.21.1

16 Apr 13:25
d4fb8c7

Choose a tag to compare

@ark-ui/svelte

[5.21.1] - 2026-04-14

Fixed

  • Added

    • Popover: Add finalFocusEl and restoreFocus props to control focus behavior when the popover closes.
      finalFocusEl lets you specify an element to receive focus instead of the trigger, and restoreFocus (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 format when setting values via props or setValue.
      Previously, the internal color object could retain a mismatched format (e.g., RGB when format is hsla), causing
      inconsistent value objects in onValueChange callbacks.
    • 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 onValueChange not firing when only time segments change in CalendarDateTime or
      ZonedDateTime values.
    • Navigation Menu: Remove aggressive and redundant default aria-label.

[5.21.0] - 2026-04-10

Added

  • Add new DateInput component 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 a value, 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. Use createRegistry() 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 sanitizeValue prop 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, and restoreFocus props to control which element gets focus
    when the panel opens or closes.

Fixed

  • Dialog, Drawer, NavigationMenu, Tabs, Tour: Fix lazyMount and unmountOnExit not working for backdrop.

  • NumberInput, Progress: Fix locale from LocaleProvider not 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.isComposing is undefined. The composing check now uses a
    framework-agnostic utility that works across all adapters.

  • Dialog / Drawer: Avoid setting inline pointer-events when modal, letting the dismissable layer manage it
    instead.

  • File Upload: Automatically reject duplicate files with FILE_EXISTS error. Previously, uploading the same file
    twice was silently accepted and deleting one duplicate removed all of them.

  • Splitter: Fix onResizeStart and onResizeEnd callbacks to fire for programmatic resizes.

  • Tags Input: Set enterKeyHint to "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 axe aria-prohibited-attr violation since aria-label is not permitted on a div
    without a valid role.

  • Tour: Fix step navigation events (next, prev, setStep) firing when the tour is inactive, bypassing the
    start flow. Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog step.

  • Tree View: Add data-checked and data-indeterminate attributes to item and branch control elements for styling
    based on checked state.

  • Accordion: Fix missing data-focus attribute on getItemTriggerProps.

  • Combobox: Fix VoiceOver not announcing combobox options when navigating with arrow keys. Safari/VoiceOver ignores
    aria-activedescendant changes 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.
    • TableCellState now includes firstInRange, lastInRange, inHoveredRange, firstInHoveredRange,
      lastInHoveredRange, and outsideRange.
    • Range boundary dates now announce "Starting range from {date}" and "Range ending at {date}" for better screen reader
      context.
    • Fixed inverted year cell selectable state that caused years outside the visible decade or min/max range to appear
      selectable.
    • Breaking: DayTableCellState.formattedDate removed — use valueText instead (inherited from TableCellState).
  • Drawer: Added new anatomy parts and improved swipe gestures.

    • Added description anatomy part with aria-describedby support on the content element.
    • Added SwipeArea part 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: none on positioner in non-modal mode so the page stays interactive.
    • Fixed swipe-to-dismiss in controlled mode (open: true without onOpenChange now blocks dismiss).
  • Field: Added Field.Item component and target prop on Field.Root for multi-control fields (e.g., currency
    select + amount input). Use Field.Item with a value to scope controls, and target to specify which item the
    label should focus when clicked.

  • Interaction: Added useInteractionModality and useFocusVisible hooks for tracking user input method (keyboard,
    pointer, virtual) and conditionally showing focus rings.

  • Listbox: Added keyboardPriority to input props to control whether key handling prioritizes text editing or list
    navigation for Home/End and horizontal arrows in grid collections. Added highlightFirst, highlightLast,
    highlightNext, and highlightPrevious to 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 enterKeyHint showing "next" on intermediate slots and "done" on the last.
    • Added autoSubmit prop to automatically submit the owning form when all inputs are filled.
    • Added sanitizeValue prop to sanitize pasted values before validation (e.g. strip dashes from "1-2-3").
  • Tags Input: Added allowDuplicates prop to allow duplicate tags.

  • Clipboard, Navigation Menu, Popover, Select, Timer, Tree View: Added translations prop 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: none on positioner in non-modal mode so the page stays interactive.
    • Added initial focus management for non-modal mode (mirrors popover behavior).
    • Fixed aria-modal to reflect actual modal prop value instead of hardcoded true.
  • Floating Panel: Fixed open taking precedence over defaultOpen during initialization. Fixed setPosition and
    setSize to wor...

Read more