Changelog
All notable changes will be documented in this file.
[Unreleased]
Added
- Marquee [New]: Initial release of marquee component for continuously scrolling content
Fixed
- 
Angle Slider: Resolved an issue where dragging the thumb from non-center positions caused unexpected value jumps. The thumb now maintains consistent positioning relative to the initial click point. 
- 
Slider: Fixed a problem where the thumb offset shifted dynamically during dragging, resulting in value jumps. The offset now remains constant from the pointer throughout the drag operation. 
[5.26.2] - 2025-10-18
Fixed
- 
Angle Slider: Fix accessibility violation where the slider thumb element lacked an accessible name. The thumb now supports aria-labelandaria-labelledbyprops, and automatically falls back to the label element's ID for proper ARIA labeling.
- 
Select: Fix accessibility violation where the required state was not set correctly to on the trigger. 
- 
Tags Input: Fix issue where entering a custom tag with combobox integration required pressing Entertwice. The tags-input now correctly handles custom values when the combobox has no highlighted item (aria-activedescendantis empty), allowing the tag to be added on the firstEnterpress.
[5.26.1] - 2025-10-15
Fixed
- 
Checkbox - Fix issue where setting initial checked state to indeterminatedoesn't work
- Ensure api.checkedStatereturns the correct checked state (boolean | "indeterminate")
 
- Fix issue where setting initial checked state to 
- 
Collapsible: Fix issue where dirprop value was hardcoded toltrinstead of using the provided value
- 
Combobox: Fix issue where controlled single-select combobox does not propagate its initial value to inputValue
- 
Listbox: Fix issue where pressing Enter key when no highlighted item still calls event.preventDefault()
- 
Radio Group: Refactor to use getBoundingClientRect()for precise indicator positioning
- 
Slider - Fix issue where slider could stop abruptly when scrubbing thumb
- Fix issue where range slider thumbs become stuck when dragged to the same position without minStepsBetweenThumbs
 
- 
Tabs: Refactor to use getBoundingClientRect()for precise indicator positioning
- 
Tags Input: Fix issue where maxLengthdoesn't apply to the edit input as well
[5.26.0] - 2025-10-08
Added
- 
Collapsible: Add support for collapsedHeightandcollapsedWidthprops to control the dimensions of the collapsible content when in its collapsed state.
- 
Focus Trap: Allow elements referenced by aria-controlsto be included in the trap scope. This makes it possible for menus, popovers, etc. to be portalled and work correctly.
- 
Pagination: Add getPageUrlprop for generatinghrefattributes when using pagination as links.
const service = useMachine(pagination.machine, {
  type: 'link',
  getPageUrl: ({ page, pageSize }) => `/products?page=${page}&size=${pageSize}`,
})- 
Select: Add SelectRootComponentPropstype export for better component type composition.
- 
Listbox: Add ListboxRootComponentPropstype export for better component type composition.
- 
Combobox: Add ComboboxRootComponentPropstype export for better component type composition.
- 
TreeView: - Add TreeViewRootComponentPropstype export for better component type composition.
- (Experimental) Add support for node renaming functionality:
- Add TreeViewNodeRenameInputcomponent for inline node label editing
- Add canRenameprop to control which nodes can be renamed
- Add onRenameStart,onBeforeRename, andonRenameCompletecallbacks for rename lifecycle
- Add CheckedChangeDetails,LoadChildrenErrorDetails,RenameStartDetails, andRenameCompleteDetailstype exports
 
- Add 
 
- Add 
Fixed
- 
Scroll Area: Fix RTL horizontal scrollbar positioning on Safari 
- 
Slider: Fix issue where slider continues dragging when disabled during drag operation. 
- 
Switch: Fix issue where data-activeis inconsistently applied whendisabledstate changes at runtime
[5.25.1] - 2025-09-27
Fixed
- 
Date Picker - Fix issue where year range picker doesn't show the hovered range
- Fix issue where quarter presets returns incorrect date
 
- 
FormatByte: Add support for unitSystemproperty to allow changing between decimal (1000 bytes) and binary (1024 bytes) systems.
- 
Number Input: When formatOptionsis used (likestyle: "currency"), the cursor would jump to the end of the input when typing in the middle. The cursor now maintains its relative position during formatting changes.
- 
Pin Input: Fix issue where using the keyboard shortcuts Cmd+BackspaceandCmd+Deleteto delete text in pin inputs would insert "undefined" instead of clearing the field.
- 
Scroll Area: Fix issue where resize tracking was not observing the root element, which caused the scrollbar to not update when the root element's size changed. 
[5.25.0] - 2025-09-16
Added
- Added mergePropsutility for combining multiple props objects with proper event handler and className merging.
- Added createContextutility for creating typed React contexts with improved DX.
import { createContext } from '@ark-ui/react/utils'Fixed
- AngleSlider: Export angleSliderAnatomyfrom the anatomy exports
[5.24.1] - 2025-09-14
Fixed
- General: Fix issue where mergePropsthrows whenpropsisundefinedornull
[5.24.0] - 2025-09-14
Added
- 
Combobox: Add alwaysSubmitOnEnterprop to allow bypassing the default two-step behavior (Enter to close combobox, then Enter to submit form) and instead submit the form immediately on Enter press. This is useful for single-field autocomplete forms where Enter should submit the form directly.
- 
Dismissable: Add support for layer types in dismissable layer stack. Layers can now be categorized as dialog,popover,menu, orlistbox. This enables:- data-nestedattribute on nested layers of the same type
- data-has-nestedattribute on parent layers with nested children of the same type
- --nested-layer-countCSS variable indicating the number of nested layers of the same type
 
Changed
- 
Hover Card: Change default delay values for hover card to improve accessibility. - openDelay: from- 700msto- 600ms
 
- 
Tooltip: Change default delay values for tooltip to improve accessibility. Learn more - openDelay: from- 1000msto- 400ms
- closeDelay: from- 500msto- 150ms
 
Removed
- 
TimePicker: The TimePicker component has been removed from this release. This component was never part of the public API and was considered experimental. It had significant bugs and usability issues across all frameworks and locales, making it unsuitable for production use. Migration: We recommend building a custom time picker using the Select component for simple use cases, or implementing a time grid pattern for more complex scenarios. 
Fixed
- 
Editable: Allow text selection in editable preview when autoResizeis enabledPreviously, when autoResizewas set totrue, the preview element haduserSelect: "none"applied, preventing users from selecting text. This has been fixed by removing theuserSelectstyle property.
- 
File Upload: Fix regression where clicking the trigger doesn't open the file picker when used within the dropzone 
- 
Menu: - Fix issue where keyboard activation of menu items with target="_blank"would open two tabs
- Fix issue where hovering a partially visible item with pointer causes it to scroll into view
 
- Fix issue where keyboard activation of menu items with 
- 
Tabs: Fix issue where idsforitemandcontentcould not be customized
- 
Toast: Allow creating a toast store without any arguments 
[5.23.0] - 2025-09-08
Added
- Field: Add data-requiredattribute toField.Label
- Select, Combobox, Listbox, TreeView: Export RootComponentandRootProviderComponenttypes which are useful when building compositions that wrap theRootandRootProvidercomponents and you still want type-safety for the collection.
Fixed
- 
Menu: Fix Menu.ItemTextnot working insideMenu.TriggerItemimport { Select } from '@ark-ui/react/select' import { styled } from 'styling-lib' const Root = styled(Select.Root) as Select.RootComponent<{}>
[5.22.0] - 2025-08-28
Added
- 
Combobox: Add ComboboxEmptycomponent to display content when the combobox has no items
- 
Listbox: Add ListboxEmptycomponent to display content when the listbox has no items
- 
Hover Card: Add support for disabledprop
Fixed
- 
Collection: Fix issue where disabled items could be reached via typeahead 
- 
Color Picker: Fix issue where color picker was not working correctly in RTL mode 
- 
Date Picker: Fix issue where datepicker doesn't revert to a valid value when the input value exceeds the min/max and blurred 
- 
Dismissable: Expose onRequestDismisscustom event handler for event a parent layer requests the child layer to dismiss. If prevented viaevent.preventDefault(), the child layer will not dismiss when the parent layer is dismissed.
- 
Number Input - Omit the input patternwhenformatOptionsis provided. This prevents native pattern validation from conflicting with formatted values (e.g., currency or percent).
- Handle empty values consistently across all format options.
- Add data-scrubbingattribute to the number input parts.
 
- Omit the input 
- 
Tags Input: Fix issue where highlighted item doesn't clear when tabbing out of the input to an external button within the controlpart.
- 
Tooltip - Set closeOnPointerdowntofalsewhencloseOnClickis set tofalse
- Reduce bundle size by replacing @zag-js/storedependency with a lightweight store implementation.
 
- Set 
[5.21.0] - 2025-08-24
Added
- Hooks: Add useAsyncListanduseCollatorhooks for managing asynchronous list operations and locale-aware string comparison
- Toast: Export type definitions ToastActionOptions,ToastPlacement,ToastPromiseOptions,ToastStatus,ToastStatusChangeDetails, andToastType
Changed
- Fieldset
- Update Legend component to render as divinstead oflegendelement for improved styling flexibility
- Add aria-labelledbyattribute to fieldset root for better accessibility by linking to legend
 
- Update Legend component to render as 
Fixed
- 
Date Picker - Clear hovered range state after completing range selection instead of waiting for pointer to leave the calendar area.
- Fix issue where month and year select labels don't update correctly when using min/maxconstraints.
- Expose disabledonapi.getMonths()andapi.getYears()results to indicate options out of range for current constraints.
 
- 
Listbox - Fix issue where first enabled item should be highlighted by default when listbox receives focus and no item is currently highlighted.
- Add getElementtoscrollToIndexFndetails
- Track collection changes and clear highlightedValueif the item is no longer in the collection.
 
- 
Scroll Area - Avoid detecting hover state from portalled descendants.
- Add data-draggingattribute to scroll area parts.
 
- 
Select: Add getElementtoscrollToIndexFndetails
- 
Combobox: Add getElementtoscrollToIndexFndetails
- 
Tabs: Fix inconsistent keyboard navigation where TabPanel intermittently receives focus before focusable elements 
[5.20.0] - 2025-08-20
Added
- Highlight Word: Add exactMatchoption that enables whole-word matching using regex word boundaries.
Fixed
- 
Menu: Fix context menu repositioning logic 
- 
ScrollArea: Add data-hoverto scroll area
[5.19.0] - 2025-08-18
Added
- ScrollArea [NEW]: Add support for new scroll area component.
Fixed
- 
ListCollection - Avoid recomputing groups on every call to at()andindexOf()
- Fixed bug in find()method (was checking!= nullinstead of!== -1)
 
- Avoid recomputing groups on every call to 
- 
GridCollection: Avoid recomputing rows on every call to getRows()
- 
Menu - Add data-stateattribute for context menu trigger
- Fix context menu positioning bug where reopening at the same coordinates fails to reposition
 
- Add 
[5.18.4] - 2025-08-14
Fixed
- 
Listbox: Add support for navigating grid collections 
- 
Carousel: - Fix an issue where the carousel would not update when slideCountorautoplayprops change.
- Fix an issue where loop: falsewas ignored when using autoplay. Now, the carousel will stop when it gets to the last slide.
 
- Fix an issue where the carousel would not update when 
- 
Date Picker: Expose data-inlineattribute on Content part to enable distinct styling for inline date pickers versus popover date pickers.
- 
Menu: Fix issue where onCheckedChangecould be called twice on checkbox or radio item
- 
Radio Group: Fixed issue where arrow key navigation doesn't apply data-focus-visibleon the newly focused item.
- 
TagsInput: Export InputValueChangeDetailstype
Changed
- Async List: Improve type inference for descriptors
[5.18.3] - 2025-08-01
Fixed
- 
Factory: Check if childrenis a valid React element before callingChildren.only()
- 
Carousel: Fix issue where controlled carousel ignores last slide 
[5.18.2] - 2025-07-26
Fixed
- Dialog
- Sync content --layer-indexwith positioner and backdrop
- Decouple trapFocusfrommodalso it's possible to setmodal=falseandtrapFocus=true
 
- Sync content 
[5.18.1] - 2025-07-23
Fixed
- 
Date Picker: Fixed issue where hovered range was connect to selected values, when it shouldn't 
- 
Tree View: Fixed issue where tree view doesn't scroll into view when content overflows. 
[5.18.0] - 2025-07-22
Added
- 
Collection: Add useListSelectionhook for managing collection item selection with support for single/multiple selection modesconst collection = createListCollection({ items: ['React', 'Vue', 'Angular'] }) const selection = useListSelection({ collection }) // Check if item is selected const isSelected = selection.isSelected('React') // Select/deselect items selection.select('React') selection.toggle('Vue')
- 
File Upload: Add support for programmatically controlling the accepted files via acceptedFilesanddefaultAcceptedFiles
- 
Signature Pad: Add support for programmatically controlling the paths via pathsanddefaultPathsprops.
- 
Date Picker: Added hover range preview support for date picker range selection. Added inHoveredRange,firstInHoveredRange, andlastInHoveredRangeproperties toDayTableCellStatewith corresponding data attributesdata-in-hover-range,data-hover-range-start, anddata-hover-range-end.Hover range states are only active when not overlapping with actual selected range, enabling distinct styling for hover preview vs actual selection in range mode. 
Fixed
- Date Picker: Fix date comparison issues when time components are involved. This resolves critical issues with date
comparison operations when different date types (CalendarDate,CalendarDateTime,ZonedDateTime) are mixed, particularly in scenarios involving time components.
[5.17.0] - 2025-07-18
Added
- Checkbox: Add CheckboxGroupProvidercomponent for external checkbox group state management
Fixed
- 
Carousel: Fix issue where full page carousel could trap scrolling 
- 
ListCollection:Export UseListCollectionReturntype
- 
TreeCollection: Fix issue where the filtermethod completely deletes the children key from the node when there are no matching children
- 
Number Input: Fix issue where default pattern does not allow negative numbers with decimal point 
- 
File Upload - Export FileError,FileMimeType, andFileRejectiontypes
- Fix issue where calling api.setFilesinvokes validation with incorrectacceptedFiles
- Fix issue where the browser might not be able to infer the mime type of a file due to limitations, drag source or security restrictions. As a fallback in the file validation logic, we now infer the mime type from the file extension.
 
- Export 
[5.16.1] - 2025-07-05
Fixed
- 
Combobox - Expose reasontoonOpenChangeandonInputValueChangecallbacks
- Expose api.clearHighlightedValuefunction to clear highlighted value
 
- Expose 
- 
Date Picker - Fix issue where datepicker errors when setting selectionMode=rangeandminView=year
- Fix issue where focusedValuecould not be fully controlled
 
- Fix issue where datepicker errors when setting 
- 
Toast: Fix issue where toast titleordescriptioncould not accept React element
- 
Listbox: Select highlighted item only if it exists in the collection 
- 
Progress: Improve valueAsStringformatting
- 
Select - Select highlighted item only if it exists in the collection
- Expose api.clearHighlightedValuefunction to clear highlighted value
 
- 
Tour: Fix an issue where the gotofunction inStepActionMapdoesn't work when passing step IDs (string)
- 
Tree View: Expose idin the tree node state
- 
ClientOnly: Support childrenas a function
[5.16.0] - 2025-07-01
Added
- Color Picker: Add support for inlineprop to render color picker inline
- Date Picker: Add support for inlineprop to render the date calendar inline
Fixed
- Color Picker: Auto-prefix Hex values with #if missing when using thehexchannel input
- Menu: Fix interaction outside detection for focusable context trigger
- Tree View: Improve support for rendering tree items as links
[5.15.4] - 2025-06-27
Fixed
- Combobox, Select, Listbox: Fix issue where rehydrating defaultValueorvalueafter fetching items doesn't update thevalueAsString
[5.15.3] - 2025-06-27
Fixed
- Tree View: Fix tree traversal for querying last node
[5.15.2] - 2025-06-26
Fixed
- 
Date Picker: Fix issue with keyboard selection where setting unavailable date causes month view to behave differently from clicking with mouse 
- 
Toast: Fix issue where app crashes when toaster.promiseis called without loading option. Theloadingoption is now required. A warning will be logged if it is not provided
- 
Tree View - Fix issue where clicking a branch with indeterminate state doesn't check its child nodes
- Remove aria-busyattribute from branch trigger when not loading children
- Expose node details in onExpandChange,onSelectionChangeandonFocusChange
 
- 
Angle Slider: Fix issue where scrubbing doesn't feel smooth on touch devices 
- 
Timer: - Fix issue where timer could continue beyond targetMswhen window is not visible
- Add validation to ensure startMsandtargetMsare configured correctly
- Fix progressPercentcalculation for countdown timers
 
- Fix issue where timer could continue beyond 
[5.15.1] - 2025-06-23
Fixed
- Listbox: Fix issue where Listbox.ItemContextwas not exported
[5.15.0] - 2025-06-23
Added
- Tree View
- Add support for checkbox state for checkbox trees via defaultCheckedValue,checkedValue,onCheckedChangeprops
- Add callback for when loadChildrenfails viaonLoadChildrenErrorprop
 
- Add support for checkbox state for checkbox trees via 
Fixed
- Progress
- Fix issue where setting orientation to verticaldon't work
- Fix issue where setting defaultValuetonulldoesn't show indeterminate state
 
- Fix issue where setting orientation to 
[5.14.2] - 2025-06-19
Fixed
- General: Ensure pointerdown or click event handlers only execute when the main button is clicked
- Tree View: Exported TreeViewNodeStateandTreeViewNodePropstypes from@zag-js/tree-view
Changed
- 
Collection: Improve the APIs around tree.flatten(...)andflattenedToTreeto ensure the original node properties are preserved.Previously, tree.flatten()would return an array of objects withvalueandlabelstripping out the original node properties.const tree = new TreeCollection({ rootNode: { value: 'ROOT', children: [{ value: 'child1' }, { value: 'child2' }], }, }) const flattened = tree.flatten() const reconstructed = flattenedToTree(flattened) console.log(reconstructed.rootNode) // { // value: "ROOT", // children: [{ value: "child1" }, { value: "child2" }], // }
[5.14.1] - 2025-06-17
Fixed
- Popover: Fixed issue where onOpenChangecould be called twice when controlled
- File Utils: Improved downloadFilefunction to handle webview scenarios
- Combobox:
- Fixed issue where onInputValueChangecould be called twice when selecting an item
- Fixed issue where combobox with allowCustomValue: trueused within in a form requires two enter keypress to submit
 
- Fixed issue where 
[5.14.0] - 2025-06-10
Added
- Editable: Added support for activationMode=none
- Collection
- Exposed copymethod
- Added support for getParentNodesto accept a value or index path
 
- Exposed 
Fixed
- Collection: Fixed issue where entrypoint @ark-ui/react/collectionwas not working as expected
- Carousel: Fixed issue where carousel crashes when slidesPerPageis 0
- File Upload: Prevented undefinedinacceptedFileswhen no files accepted
- Select: Fixed issue where highlighted item could be cleared when navigating up/down the list with keyboard
- Tabs: Fixed issue where tabs with links should not trigger tab change upon cmd/middle click
- Menu: Fixed issue where Menu.ItemTextcould not be used withMenu.Item
[5.13.0] - 2025-06-07
Added
- Collection: Added new useListCollectionhook to create a dynamic list collection.
Fixed
- Progress: Exported ProgressValueChangeDetailsandProgressValueTranslationDetailstypes from@zag-js/progress
[5.12.0] - 2025-06-05
Added
- Tree View: Added support for lazy loading node children. To use this, you need to provide:
- loadChildrenis a function that is used to load the children of a node.
- onLoadChildrenCompleteis a callback that is called when the children of a node are loaded. Used to update the tree collection.
- Add childrenCountto the node object to indicate the number of children.
 
Fixed
- Slider
- Fixed issue where Shift+ArrowRightset value to0instead ofmaxwhen step is too large (e.g.20)
- Fixed issue where onValueChangeEnddoesn't return the latest value when dragging very fast
 
- Fixed issue where 
[5.11.0] - 2025-05-30
Added
- File Upload: Added support for transforming uploaded files via transformFilescontext property.
Fixed
- Slider: Fixed issue where minStepsBetweenThumbsisn't computed correctly when interacting with pointer or keyboard.
[5.10.0] - 2025-05-29
Added
- [NEW] Password Input: Added PasswordInputcomponent for creating password inputs
import { PasswordInput } from '@ark-ui/react/password-input'
import { EyeIcon, EyeOffIcon } from 'lucide-react'
export const Basic = () => (
  <PasswordInput.Root>
    <PasswordInput.Label>Password</PasswordInput.Label>
    <PasswordInput.Control>
      <PasswordInput.Input />
      <PasswordInput.VisibilityTrigger>
        <PasswordInput.Indicator fallback={<EyeOffIcon />}>
          <EyeIcon />
        </PasswordInput.Indicator>
      </PasswordInput.VisibilityTrigger>
    </PasswordInput.Control>
  </PasswordInput.Root>
)- Select: Added onSelectcallback that gets fired when an item is selected via keyboard/mouse.
Fixed
- 
Color Picker: Fixed issue where value change end event is invoked when committing via an input. 
- 
Toast: Fixed issue where calling toast.remove()without an id shows a TypeScript error.
- 
Field: Fixed issue where helper text and error text could not be detected in shadow DOM environments. 
[5.9.2] - 2025-05-24
Fixed
- 
Collection: Export CollectionOptions,TreeCollectionOptions,GridCollectionOptionstypes.
- 
Carousel - Fixed issue where focusing on carousel region and navigating with keyboard doesn't work as expected
- Fixed issue when allowMouseDragis set where carousel no longer snaps after mouse interaction
 
- 
Combobox: Fixed issue where onInputValueChangedoesn't get called whenautoFocusis set totrue
- 
Slider: Fixed issue where slider could throw a error when rendered in an popover or dialog 
- 
Tour: Fixed issue where calling api.start(<id>)with a step id doesn't work as expected
[5.9.1] - 2025-05-12
Fixed
- 
Combobox: Fixed issue where focusableprop was not being applied to the trigger element.
- 
Collection: Fixed issue where getNextValueandgetPreviousValuedoesn't work as expected whengroupByis used.
[5.9.0] - 2025-05-05
Added
- Locale: Added useFilterhook to filter data based on the current locale.
- Format: Added FormatRelativeTimecomponent for formatting relative time.
[5.8.0] - 2025-05-01
Added
- Date Picker: Added support for outsideDaySelectableprop to allow selecting days outside the current month (on the same visible date range)
Fixed
- Collapsible: Fixed issue in React.js <= v18.x where collapse animation might not work as expected
[5.7.0] - 2025-04-25
Added
- [NEW] Listbox: Introduced the Listboxcomponent for selecting a single or multiple items from a list. See the documentation for details.
- Improved support for grouping collection items. Check the Listbox,SelectorComboboxdocumentation for more details.
Changed
- Added package.jsontoexportsfor improved compatibility with tools like Vite.
[5.6.0] - 2025-04-15
Added
- [NEW] AngleSlider: Introduced the AngleSlidercomponent for selecting an angle. See the documentation for details.
- [NEW] FloatingPanel: Introduced the FloatingPanelcomponent for creating floating windows. See the documentation for details.
- Toast: Added toast queuing when the max limit is reached:
- New toasts were queued instead of dropped
- Queued toasts were shown when space became available
- Queue cleared when all toasts were removed
 
- Combobox:
- Fallbacked to the trigger element as the positioning anchor
- Added data-emptyattribute to indicate an empty listbox or content
 
[5.5.0] - 2025-04-05
Added
- Presence: Added support for skipping the initial animation when the component is mounted. This can be used in all
disclosure components (e.g., Dialog,DatePicker,Menuetc).
Fixed
- 
Tabs: Fixed issue where tabs indicator animation behaves inconsistently. 
- 
Date Picker - Fixed issue where datepicker throws error when navigating month view.
- Fixed issue where range selection doesn't reset correctly when clicking the same start date.
 
- 
Disclosure Components - Fixed issue where pointerdown outside doesn't work consistently on mobile devices.
- Improved pointerdown outside click detection in shadow DOM environments.
 
[5.4.0] - 2025-03-28
Added
- 
Slider - Add support for origin: endto align the thumb to the end of the track.
- Expose thumbSizeas CSS variables in the root element. Can be useful for styling the slider.
 
- Add support for 
- 
Menu - Added onSelectevent to theMenu.Itemcomponent.
 
- Added 
Fixed
- Ensured each component's state machine starts before processing events.
- HoverCard, ColorPicker: Added missing tabIndexfor better dialog support.
- Menu: Assigned unique IDs to menu items to improve accessibility and HTML validation.
[5.3.1] - 2025-03-24
Fixed
- Fixed an issue where a function was imported from a package that wasn't declared as a dependency.
[5.3.0] - 2025-03-24
Added
- Collapsible: Added an Indicatorpart to display whether the collapsible was open or closed.
- ColorPicker: Added support for formatting the ValueTextcomponent.
<ColorPicker.ValueText format="hex" /> // #ff0000Fixed
- Combobox: Fixed an issue where onOpenChangewas called with the sameopenvalue.
- DownloadTrigger: Added the missing use clientdirective.
- Splitter: Fixed an issue where onResizeStartandonResizeEndcallbacks weren't triggered during keyboard interactions.
[5.2.0] - 2025-03-22
Added
- [NEW] DownloadTrigger: Added Component for downloading a blob or file, whether retrieved synchronously or asynchronously.
import { DownloadTrigger } from '@ark-ui/react/download-trigger'
export const DownloadImage = () => {
  async function fetchImage() {
    const response = await fetch('https://picsum.photos/200/300')
    return response.blob()
  }
  return (
    <DownloadTrigger data={fetchImage} fileName="avatar.jpeg" mimeType="image/jpeg">
      Download Image
    </DownloadTrigger>
  )
}Changed
- NumberInput: Set the default step to 0.01whenformatOptions.stylewas set topercent.
- [Breaking] Splitter: Redesigned splitter machine to support more use cases and improve DX. Check out the Splitter documentation for more details.
Fixed
- Toast: Fixed issue where setting offsetstoundefinedcaused the machine to throw.
- Select: Fixed issue where select valueAsStringlost reactivity.
[5.1.0] - 2025-03-17
Added
- Added support for a cleanup function in ref.
Fixed
- Field: Exported the missing useFieldhook.
- NumberInput: onValueChangecorrectly receivedvalueAsNumber.
- Slider: Thumbs initialized correctly when minwas set to a non-zero value.
[5.0.1] - 2025-03-11
Fixed
- Effects now flush synchronously instead of using a microtask.
- Checkbox: data-invalidis no longer set wheninvalidisfalse.
- Combobox: Fixed unexpected cursor movement when editing input.
- PinInput: OTP SMS autofill now works as expected.
- RatingGroup: Fixed incorrect focus placement on the label.
- TagsInput: Improved caret detection to prevent unintended tag removal.
- Timer
- Fixed slowdown when switching tabs/windows.
- Changed default intervalfrom250to1000.
 
[5.0.0] - 2025-03-06
Ark UI just got a major performance boost! 🚀
What’s new in v5?
- Blazing-fast performance – Every component runs smoother and renders faster.
- Smaller bundle size – Leaner components and adapters for a more efficient build.
We made this happen by using React’s native reactive primitives instead of external stores.
In our stress tests with 10,000 components, Ark v5 delivered 1.5x–4x better performance across the board.
A quick note on tests
Most component updates are non-breaking, but due to this change, some tests may need adjustments. For example:
// Before
it('should open by default', () => {
  render(<ComponentUnderTest defaultOpen />)
  expect(screen.getByRole('dialog')).toBeInTheDocument()
})
// After
it('should open by default', async () => {
  render(<ComponentUnderTest defaultOpen />)
  expect(await screen.findByRole('dialog')).toBeInTheDocument()
})Added
- Carousel: ⚠️ Breaking change: Added required prop slideCounttoCarousel.Rootcomponent.
- Clipboard: Added onValueChangeanddefaultValueprops.
- ColorPicker: Added defaultFormatprop.
- Combobox: Added defaultHighlightedValueanddefaultInputValueprops.
- DatePicker: Added defaultFocusedValueprop,getViewProps, andvisibleRangeText.
- HoverCard: Expanded interaction handlers.
- Menu: Added defaultHighlightedValueprop.
- Pagination: Added defaultPageSizeprop.
- PinInput: Added countprop for better SSR aria-label.
- Progress: Added localeandformatOptionsprops.
- QrCode: Added pixelSizeprop.
- Select: Added defaultHighlightedValueprop.
- TagsInput: Added defaultInputValueprop.
- Toggle: Reintroduced toggle machine.
Fixed
- Accordion: Fixed issue in Safari where clicking triggers didn't show content.
- Avatar: Fixed api.setSrcnot working.
- Carousel: Fixed pagination sync and initial page issues.
- File Upload: Fixed drag-and-drop when directory: true.
- Menu: Fixed context menu positioning not updating on right-click.
- Number Input: Fixed valueprop not being consumed.
- Pin Input: Fixed focus warnings and editing issues.
- Progress: Allowed more precise (decimal) values.
- Radio Group, Switch: Improved focus behavior in Safari.
- Select: Fixed regression where multiple: truedidn't work.
- Steps: Ensured ARIA attributes use valid values and wrapped <li>elements correctly within<ul>or<ol>.
- Textarea: Fixed ResizeObserverwarning.
- Timer: Fixed stopping issue when switching tabs; resolved issue where actionprop was passed toActionTrigger.
- Toast: Fixed keyboard navigation skipping close button.
- Toggle Group: Fixed data-focusnot being removed on blur.