github huntabyte/bits-ui bits-ui@2.20.0

3 hours ago

Minor Changes

  • feat(RadioGroup): set autocomplete="off" on the hidden input by default to discourage browser autofill, and add an autocomplete prop to RadioGroup.Root to override it (#2198)

Patch Changes

  • fix(Calendar): fall back to the default placeholder when spread props are reassigned and placeholder is not bound, preventing Cannot read properties of undefined (reading 'set'). Also applies to RangeCalendar, DatePicker, DateRangePicker, DateRangeField, TimeField, and TimeRangeField. (#2226)

  • fix(Select): open the trigger on a click that no pointer press precedes (detail: 0), such as element.click() or a VoiceOver activation in Safari (#2227)

  • fix(Calendar/RangeCalendar): prevent weekday headers, heading, and cell labels from shifting by a day when using a ZonedDateTime in a time zone ahead of the local one (#2215)

  • fix(Collapsible/Accordion): prevent content mounted open from playing its open animation (#2209)

  • fix(Command): skip deferred root work after Command.Root is destroyed (#2210)

  • fix(Command): scroll the first item into view when items aren't grouped (#2003)

  • fix(DatePicker): respect preventDefault() in Content's onOpenAutoFocus so the calendar day is not auto-focused (also applies to DateRangePicker) (#2219)

  • fix: prevent content from flashing visible for a frame after its exit animation when Svelte async mode is enabled (#2193)

  • fix(Select/Combobox/DropdownMenu): don't open the trigger when it's disabled by an ancestor <fieldset disabled> (#2214)

  • fix(body-scroll-lock): restore body pointer-events as soon as the last lock is released so clicks right after a layer closes aren't lost (#2221)

  • fix(FocusScope): keep focus on elements inside an open shadow root nested in the scope (e.g. a web component's <input>) instead of treating it as escaping the trap (#2223)

  • fix(FocusScope): prevent page scroll when auto-focusing on open, trapping focus, and restoring focus on close (#2217)

  • fix(LinkPreview): always remove the document pointerup listener registered while open. When the content node wasn't attached yet, the open watcher returned early before its cleanup, so the listener was never unsubscribed and kept firing after the preview closed or unmounted. (#2194)

  • fix(NavigationMenu): only register a NavigationMenu.Content's dismiss/escape layers while it is open so closed forceMount content no longer closes the open item on inside clicks or steals escape focus (#2218)

  • fix(Command): item selection logic (#2074)

  • fix: call onOpenChangeComplete with true after content opens and its animations finish, not only on close (#2199)

  • fix(HiddenInput): keep hidden form inputs in sync with component state after a form reset. A native form reset now restores the current value instead of clearing the input, so setting a value right after form.reset() (e.g. SvelteKit use:enhance's update()) is no longer lost. Applies to RadioGroup, Select, Combobox, Checkbox, Switch, RatingGroup, and the date/time fields (#1942) (#2212)

  • fix(DateField): reset the segments when value is cleared externally after a date was typed in (#2196)

  • fix(Select/Combobox): highlight the selected item on open when its value is an empty string, and allow selecting it with Enter in Combobox (#2213)

  • fix(Tabs, Accordion, ToggleGroup, RadioGroup, Toolbar, Menubar): ignore the items and triggers of a nested root of the same kind during keyboard navigation, so arrow keys, Home, End and wrapping stay within the outer group (#2190)

  • Resume a paused focus scope when it registers again, so a menu whose trigger sits in a tooltip moves focus into its content when opened. (#2201)

  • fix(DismissibleLayer): close an open layer when a second outside pointerdown lands within its 10ms dismissal debounce. The second event replaced the pending one and was judged against the newly opened layer, so rapidly right clicking across ContextMenu triggers left earlier menus open. (#2229)

  • Set aria-selected="false" on unselected Select.Item and Combobox.Item options so every option exposes its selection state per the APG listbox pattern. (#2188)

  • fix(Select): give Select.Trigger the combobox role and point aria-controls at the mounted listbox (#2216)

  • fix(Select, Combobox): keep aligning the highlighted item while the content settles after positioning. Chrome that mounts once the content is placed (scroll buttons in the flex flow, a header, a footer) shrinks the viewport under the open-time alignment and left a far-down selection below the fold; the content now realigns on every viewport resize until the user scrolls, which also retires the scroll down button's own mount-time realign. (#2157)

  • fix(Checkbox): pass the form prop to the button again and submit the linked form when Enter is pressed with type="submit" (#2204)

  • fix(Slider): throw a descriptive error for non-finite min/max/step (or a step of 0) instead of hanging the browser (#2211)

  • fix: skip deferred animation-complete callbacks when the owning component is destroyed before they run (#2210)

  • fix(Select, Combobox): stop the scroll button auto scroll when the content closes while the button is hovered (#2197)

  • fix(AlertDialog): prevent delayed open autofocus from focusing replaced content (#2220)

  • fix(DateField): keep the day period when typing or deleting the hour in 12-hour mode (#2228)

  • fix(Tooltip): close when any scrolling ancestor of the trigger scrolls (#2206)

Don't miss a new bits-ui release

NewReleases is sending notifications on new releases.