Releases
Every published version of @human-kit/ui, newest first — generated from the
changelog.
1.0.0-beta.0
Promote the library to its first public beta, exiting the alpha prerelease line.
1.0.0-alpha.22
- #55
Add the new
Toggleprimitive with a singleRootpart.- support controlled and uncontrolled selected state with
selected,defaultSelected, andonChange - expose native button semantics with
aria-pressed, disabled behavior, and keyboard activation - add styling hooks for selected, unselected, pressed, hover, focus, and focus-visible states
- expose the
./togglepackage entry and add docs/demo coverage
- support controlled and uncontrolled selected state with
- #55
Add a
filterprop toComboBox.Rootso consumers can customize local option filtering or passnullto disable it for externally filtered lists. - #55
Add the new
Tabsprimitive withRoot,List,Tab,Indicator, andPanelparts.- support controlled and uncontrolled selection, including
nullvalues - add automatic and manual keyboard activation with horizontal and vertical roving focus
- include accessible tab and tabpanel wiring, SSR-ready default selection, disabled tabs, and indicator positioning hooks
- expose the
./tabspackage entry and add docs/demo coverage
- support controlled and uncontrolled selection, including
- #55
Add an
autofocusprop toInputthat reliably focuses the element on mount.Native
autofocusonly focuses the first autofocus element inserted per document, so it silently fails for inputs that mount inside an already-open popover/dialog or that remount as a view swaps. The prop focuses the underlying input on mount instead, so it works every time the input appears. - #55
Add
Menu, an accessible dropdown / action menu following the WAI-ARIA menu button pattern.- Compose
Menu.Root,Menu.Trigger, andMenu.Content(portal + floating +role="menu"panel), built on the same positioning/presence primitives asPopover. Menu.ItemwithonSelect,disabled,closeOnSelect, andtextValue; arrow-key navigation, typeahead, Home/End, and hover highlighting via roving focus.Menu.Separator, plusMenu.Group+Menu.GroupLabelwitharia-labelledbywiring.Menu.SubmenuRoot+Menu.SubmenuTriggerfor nested submenus, with a layer stack so only the topmost menu handles Escape / outside-press,ArrowRight/ArrowLeftopen/close, and sibling submenus collapse on hover.Menu.Rootexposesopen/defaultOpen/onOpenChange(with cancelabledetails),loop,typeahead, andcloseOnSelect. Escape and selection return focus to the trigger; Tab and outside interaction close the whole chain.
- Compose
- #55
Add the ToggleGroup primitive with single and multiple selection, roving focus, disabled reconciliation, SSR-safe default selection, documentation, and demo coverage.
- #55
Add short helper types to the public
tablemodule for column-driven wrappers and consumer-defined table abstractions.- export
RowData,Row,ColumnDef,CellContext,CellProps, andCellRenderer - keep these helpers generic so consumers can build any wrapper shape on top of the existing table primitives
- export
- #55
Add a new headless
Treecomponent with hierarchical keyboard navigation, controlled and uncontrolled expansion state, configurable selection propagation, section headers, and docs/demo coverage.
- #55
Bias
Table.Bodyvirtualization overscan toward the current scroll direction when no explicitoverscandistribution is provided, reducing the chance of visible blanking ahead of the viewport during fast scrolling. - #55
Summary
Add the composable
NumberFieldcomponent with locale-aware formatting, spinbutton semantics, steppers, wheel scrubbing, and pointer scrubbing. - #55
Fix nested popovers dismissing together: add a popover layer stack so only the topmost open popover handles Escape, outside-press, outside-scroll, and focus-out. Closing a nested popover (e.g. a date picker calendar inside a filter popover) no longer closes its ancestors.
- #53
Table Body typing and overscan
Improve
Table.Bodyitem-driven typings and virtualization defaults.- Infer the
children(item)snippet parameter from theitemselement type in item-driven mode. - Make body virtualization derive
overscanautomatically from the current viewport row count when it is not provided.
- Infer the
- #55
Summary
Add the headless
TextAreaprimitive with native textarea semantics, shared focus state attributes, RAC-style state props, and opt-in auto-resize.
1.0.0-alpha.21
- #53
Table Body typing and overscan
Improve
Table.Bodyitem-driven typings and virtualization defaults.- Infer the
children(item)snippet parameter from theitemselement type in item-driven mode. - Increase the default body virtualization
overscanfrom6to18rows when it is not provided.
- Infer the
1.0.0-alpha.20
- #51
Replace implicit table header sorting with an explicit
Table.SortTriggerpart.Table.Columnno longer acceptsallowsSorting; columns become sortable by composingTable.SortTriggerinsideTable.ColumnHeaderCell.This change prevents nested header actions like filter popovers from triggering sort through click bubbling and lets sortable headers take DOM focus directly through the trigger while keeping the table grid navigation contract.
1.0.0-alpha.19
- #49
Fix
Tableminimum width calculations so relative and resizable columns preserve measured minimum widths more reliably during layout and resize updates.
1.0.0-alpha.18
- #46
Fix
Tablecolumn sizing and ordering edge cases by keeping trailing flexible columns in sync during resize recovery, recomputing relative widths after viewport or container size changes, avoiding one-pixel width loss from relative-column rounding, and updating body cell column indices correctly when keyed columns reorder.
1.0.0-alpha.17
- #43
RAC-style Table Widths
Add
%andfrsupport to table width state, and preserve a flexible trailing column during resize so RAC-style resizable tables can keep filling the available width. - #43
Width Contract
Treat
Table.Column.widthas a fixed width that disables user resizing, while keepingdefaultWidthas the uncontrolled resizable initial width.
1.0.0-alpha.16
- #41
Fix table accessibility helper nodes so the sort live region and selection-unavailable description stay visually hidden without contributing to page overflow.
1.0.0-alpha.15
- #39
Summary
Clean up the Table contract by removing the legacy
Table.Column.allowsResizingprop, exporting explicit public prop types forTable.Root,Table.Column,Table.ColumnHeaderCell, andTable.ColumnResizer, and documenting the intended composition model separately from internal normalized column metadata.
1.0.0-alpha.14
- #37
Add table row actions and selection-only disabled behavior.
- add
onRowActiontoTable.Rootwith RAC-style interaction rules acrossselectionModeandselectionBehavior - add
disabledBehavior="selection" | "all"to split selection disabling from fully disabled rows - expose actionable and selection-disabled row/cell state through data attributes for styling
- document and demo manual testing flows for toggle-mode actions, replace-mode double click actions, and disabled row behavior
- add
1.0.0-alpha.13
- #35
Fix ComboBox and ListBox interaction regressions around input behavior, focus handling, and virtual focus scrolling.
This disables native browser autocomplete on ComboBox inputs, prevents the reused ListBox root from stealing DOM focus, avoids filtering flashes during popover close animations, and keeps hover-driven virtual focus from auto-scrolling overflowed option lists.
1.0.0-alpha.12
- #33
Fix ListBox and ComboBox interaction state issues so keyboard focus, hover, and virtual focus stay in sync.
This includes clearing item
data-focus-visibleon pointer hover, tightening ListBox focus ownership, skipping disabled ComboBox options during keyboard navigation, and continuing keyboard navigation from the clicked option in multiselect flows.
1.0.0-alpha.11
- #31
Add follow-up ComboBox and Popover improvements after the previous prerelease changeset was already consumed.
- Forward
Popover.Contentconfiguration props throughComboBox.Popover, including positioning options likeoffset,placement,shouldFlip,shouldCloseOnEscape, andshouldCloseOnBlur. - Ensure
ComboBoxvirtual focus marks the activeListBox.Itemwithdata-focus-visibleduring keyboard navigation. - Keep the interactive ComboBox docs aligned with the shared popover positioning behavior.
- Forward
1.0.0-alpha.10
- #28
Add new ComboBox trigger and clear parts, plus pending and scroll improvements.
- Add
ComboBox.Triggeras the primary trigger part while keepingComboBox.Buttonas a compatibility alias. - Add
ComboBox.Clearto reset the input and clear the current selection without stealing focus. - Reflect
isPendingon trigger and clear affordances while keeping the root as the main async state source. - Clear the selected value when a single-select combobox input is fully emptied.
- Allow wheel events to stay inside the combobox when a descendant scroll container can continue scrolling.
- Prevent page scroll when neither the popover nor a descendant scroll container can scroll further.
- Add docs coverage for pending state and the pattern where overflow is applied to
ComboBox.Listinstead ofComboBox.Popover.
- Add
1.0.0-alpha.9
- #25
Summary
Make
ComboBox.Inputrender through the sharedInputprimitive while preserving existing combobox behavior and accessibility semantics.
1.0.0-alpha.8
- #22
Summary
Upgrade
Inputto a focus-aware native input primitive with RAC-style disabled, read-only, invalid, and required state props.
1.0.0-alpha.7
- #20
Summary
Add a new headless
Buttoncomponent with modality-aware focus state, pressed and hovered data attributes, and RAC-style pending semantics.
1.0.0-alpha.6
- #18
Fix published package entrypoints so generated ESM files no longer import sibling TypeScript source paths.
1.0.0-alpha.5
- #16
Add
Table.CheckboxandTable.CheckboxIndicatorfor explicit row selection controls in body cells and select-all behavior in header cells, including keyboard navigation integration with the table grid.Add
hiddenColumns(bindable) anddefaultHiddenColumnsprops toTable.Rootfor controlled and uncontrolled column visibility. Hidden columns are excluded from grid navigation, visible column counts (aria-colcount), and resize interactions while preserving their registered widths.Add
aria-colindexto header and body cells for accurate screen reader column position announcements. - #16
Table Column Resizing
Add column resizing support to
Table.- add
Table.ColumnResizeras a public part - add column width and resize APIs to
Table.RootandTable.Column - render managed column widths through
colgroup - document and demo resizable table columns
- add
- #16
Add a new
Tablecomponent with composable parts, grid-style keyboard navigation, row selection, sorting support, docs, and tests. - #16
Add a new headless Checkbox component with Root and Indicator parts.
- Add tri-state checkbox behavior with checked and indeterminate bindings.
- Sync a hidden native input for form submission and label targeting.
- Export Checkbox from the root library entrypoint and package subpath exports.
- Add baseline docs and browser tests for checkbox interaction.
- #16
Update
Table.ColumnResizerkeyboard interaction to use an explicit Enter-to-resize mode.- Focused resize handles now enter keyboard resize mode with
Enterand exit withEnter. Escapecancels keyboard resizing, restores the starting width, and returns focus to the header cell.- Update table docs, demo styling, and tests to reflect the new focus and resize flow.
- Focused resize handles now enter keyboard resize mode with
- #16
Fix table column resizing so keyboard interactions use the same resize lifecycle as pointer input, add Pointer Events support for touch and pen resizing, announce committed width changes to screen readers, respect RTL keyboard controls, support cancelling pointer drags with Escape, and reduce resize overhead with cached column lookups plus animation-frame batched drag updates. Also make table cell and header column indices react correctly when keyed column order changes and replace module-level table instance counters with per-root token generation to avoid shared SSR and test state.
1.0.0-alpha.4
- #13
Refactor TimePicker panel to Apple-like wheel architecture.
- Replace
TimePicker.Column/TimePicker.ColumnCellwithTimePicker.WheelColumn/TimePicker.WheelItem. - Migrate panel semantics from
listbox/optiontospinbuttonper wheel column. - Remove
shouldCloseOnSelectandcloseOnSelectfromTimePicker.Root; wheel selection now commits on snap without auto-close. - Replace root context column APIs with wheel APIs:
getWheelOptions,getSelectedWheelValue,selectWheelValue. - Update docs and tests for wheel interaction and focus behavior.
- Replace
1.0.0-alpha.3
- #11
Standardize focus-visible modality behavior across overlay flows.
- Remove DatePicker local interaction modality state and rely on shared input-modality primitive.
- Restore DatePicker trigger focus via
focusWithModalityfor consistent pointer/keyboard semantics. - Unify close-modality resolution between Popover and Dialog through shared primitive helper.
- Align DatePicker input modality handling with shared focus-visible contract.
- Expand input-modality tests and document primitive usage in the focus-state contract.
1.0.0-alpha.2
- #6
Add the new Calendar component as a public feature release.
- introduce single and range selection modes
- add keyboard navigation and accessibility improvements
- include docs/demo integration and supporting tests
1.0.0-alpha.1
- #1
Initial release of @human-kit/ui
- ComboBox (single & multi-select with tags, virtual focus, filtering)
- Dialog (modal with portal, overlay, nested dialogs, focus trap)
- ListBox (keyboard navigation, single selection)
- Popover (floating UI positioning, click outside, trigger)
- Input, Label, Portal primitives
- Utility primitives (aria-hide-outside, scroll-lock, focus-trap, keyboard-navigation)