@proyecto-viviana/solidaria 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -236
  3. package/dist/actiongroup/createActionGroup.d.ts +29 -0
  4. package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
  5. package/dist/actiongroup/index.d.ts +2 -0
  6. package/dist/actiongroup/index.d.ts.map +1 -0
  7. package/dist/autocomplete/createAutocomplete.d.ts +16 -12
  8. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  9. package/dist/autocomplete/index.d.ts +1 -1
  10. package/dist/autocomplete/index.d.ts.map +1 -1
  11. package/dist/breadcrumbs/createBreadcrumbs.d.ts +11 -7
  12. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  13. package/dist/breadcrumbs/index.d.ts +1 -1
  14. package/dist/button/createButton.d.ts +1 -1
  15. package/dist/button/createButton.d.ts.map +1 -1
  16. package/dist/button/createToggleButton.d.ts +3 -3
  17. package/dist/button/createToggleButtonGroup.d.ts +32 -0
  18. package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
  19. package/dist/button/index.d.ts +6 -4
  20. package/dist/button/index.d.ts.map +1 -1
  21. package/dist/button/types.d.ts +18 -12
  22. package/dist/button/types.d.ts.map +1 -1
  23. package/dist/calendar/createCalendar.d.ts +15 -5
  24. package/dist/calendar/createCalendar.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarCell.d.ts +8 -2
  26. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  27. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  28. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  30. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  31. package/dist/calendar/createRangeCalendarCell.d.ts +7 -3
  32. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  33. package/dist/calendar/index.d.ts +5 -5
  34. package/dist/calendar/index.d.ts.map +1 -1
  35. package/dist/calendar/intl/index.d.ts +12 -0
  36. package/dist/calendar/intl/index.d.ts.map +1 -0
  37. package/dist/calendar/utils.d.ts +12 -0
  38. package/dist/calendar/utils.d.ts.map +1 -0
  39. package/dist/checkbox/createCheckbox.d.ts +6 -6
  40. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroup.d.ts +11 -7
  42. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  44. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  45. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  46. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  47. package/dist/checkbox/index.d.ts +8 -8
  48. package/dist/checkbox/index.d.ts.map +1 -1
  49. package/dist/collections/index.d.ts +56 -0
  50. package/dist/collections/index.d.ts.map +1 -0
  51. package/dist/color/createColorArea.d.ts +3 -3
  52. package/dist/color/createColorArea.d.ts.map +1 -1
  53. package/dist/color/createColorField.d.ts +4 -4
  54. package/dist/color/createColorField.d.ts.map +1 -1
  55. package/dist/color/createColorSlider.d.ts +4 -4
  56. package/dist/color/createColorSlider.d.ts.map +1 -1
  57. package/dist/color/createColorSwatch.d.ts +2 -2
  58. package/dist/color/createColorSwatch.d.ts.map +1 -1
  59. package/dist/color/createColorWheel.d.ts +3 -3
  60. package/dist/color/createColorWheel.d.ts.map +1 -1
  61. package/dist/color/index.d.ts +6 -6
  62. package/dist/color/types.d.ts +98 -16
  63. package/dist/color/types.d.ts.map +1 -1
  64. package/dist/combobox/createComboBox.d.ts +16 -7
  65. package/dist/combobox/createComboBox.d.ts.map +1 -1
  66. package/dist/combobox/index.d.ts +1 -1
  67. package/dist/combobox/intl/index.d.ts +1 -1
  68. package/dist/datepicker/createDateField.d.ts +18 -6
  69. package/dist/datepicker/createDateField.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePicker.d.ts +57 -5
  71. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  72. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  73. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  74. package/dist/datepicker/createDateRangePicker.d.ts +42 -0
  75. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
  76. package/dist/datepicker/createDateSegment.d.ts +11 -3
  77. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeField.d.ts +11 -5
  79. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  80. package/dist/datepicker/createTimeSegment.d.ts +29 -0
  81. package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
  82. package/dist/datepicker/index.d.ts +7 -4
  83. package/dist/datepicker/index.d.ts.map +1 -1
  84. package/dist/dialog/createDialog.d.ts +5 -5
  85. package/dist/dialog/createDialog.d.ts.map +1 -1
  86. package/dist/dialog/index.d.ts +2 -2
  87. package/dist/dialog/index.d.ts.map +1 -1
  88. package/dist/dialog/types.d.ts +4 -4
  89. package/dist/disclosure/createDisclosure.d.ts +5 -2
  90. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  91. package/dist/disclosure/createDisclosureGroup.d.ts +4 -3
  92. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  93. package/dist/disclosure/index.d.ts +2 -2
  94. package/dist/dnd/createDrag.d.ts +2 -2
  95. package/dist/dnd/createDrag.d.ts.map +1 -1
  96. package/dist/dnd/createDraggableCollection.d.ts +6 -2
  97. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  98. package/dist/dnd/createDraggableItem.d.ts +3 -3
  99. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  100. package/dist/dnd/createDrop.d.ts +2 -2
  101. package/dist/dnd/createDrop.d.ts.map +1 -1
  102. package/dist/dnd/createDroppableCollection.d.ts +55 -4
  103. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  104. package/dist/dnd/createDroppableItem.d.ts +3 -3
  105. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  106. package/dist/dnd/index.d.ts +12 -12
  107. package/dist/dnd/index.d.ts.map +1 -1
  108. package/dist/dnd/types.d.ts +2 -2
  109. package/dist/dnd/types.d.ts.map +1 -1
  110. package/dist/dnd/utils.d.ts +1 -1
  111. package/dist/dnd/utils.d.ts.map +1 -1
  112. package/dist/focus/FocusScope.d.ts +1 -1
  113. package/dist/focus/FocusScope.d.ts.map +1 -1
  114. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  115. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  116. package/dist/focus/createVirtualFocus.d.ts +4 -4
  117. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  118. package/dist/focus/index.d.ts +4 -4
  119. package/dist/focus/index.d.ts.map +1 -1
  120. package/dist/form/createFormReset.d.ts +1 -1
  121. package/dist/form/createFormValidation.d.ts +3 -3
  122. package/dist/form/createFormValidation.d.ts.map +1 -1
  123. package/dist/form/index.d.ts +2 -2
  124. package/dist/form/index.d.ts.map +1 -1
  125. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  126. package/dist/grid/createGrid.d.ts +3 -3
  127. package/dist/grid/createGrid.d.ts.map +1 -1
  128. package/dist/grid/createGridCell.d.ts +3 -3
  129. package/dist/grid/createGridRow.d.ts +3 -3
  130. package/dist/grid/index.d.ts +5 -5
  131. package/dist/grid/types.d.ts +8 -8
  132. package/dist/gridlist/createGridList.d.ts +6 -4
  133. package/dist/gridlist/createGridList.d.ts.map +1 -1
  134. package/dist/gridlist/createGridListItem.d.ts +4 -4
  135. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  136. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  137. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  138. package/dist/gridlist/index.d.ts +4 -4
  139. package/dist/gridlist/types.d.ts +11 -7
  140. package/dist/gridlist/types.d.ts.map +1 -1
  141. package/dist/i18n/createCollator.d.ts.map +1 -1
  142. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  143. package/dist/i18n/createFilter.d.ts.map +1 -1
  144. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  145. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  146. package/dist/i18n/createStringFormatter.d.ts +2 -2
  147. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  148. package/dist/i18n/index.d.ts +8 -8
  149. package/dist/i18n/index.d.ts.map +1 -1
  150. package/dist/i18n/locale.d.ts +2 -2
  151. package/dist/i18n/locale.d.ts.map +1 -1
  152. package/dist/i18n/utils.d.ts.map +1 -1
  153. package/dist/index.d.ts +52 -49
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +18089 -15690
  156. package/dist/index.js.map +1 -7
  157. package/dist/index.jsx +18242 -0
  158. package/dist/index.jsx.map +1 -0
  159. package/dist/interactions/FocusableProvider.d.ts +2 -2
  160. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  161. package/dist/interactions/PressEvent.d.ts +2 -2
  162. package/dist/interactions/createFocus.d.ts +1 -1
  163. package/dist/interactions/createFocus.d.ts.map +1 -1
  164. package/dist/interactions/createFocusRing.d.ts +1 -1
  165. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  166. package/dist/interactions/createFocusWithin.d.ts +1 -1
  167. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  168. package/dist/interactions/createFocusable.d.ts +3 -3
  169. package/dist/interactions/createFocusable.d.ts.map +1 -1
  170. package/dist/interactions/createHover.d.ts +5 -5
  171. package/dist/interactions/createHover.d.ts.map +1 -1
  172. package/dist/interactions/createInteractionModality.d.ts +3 -3
  173. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  174. package/dist/interactions/createKeyboard.d.ts +1 -1
  175. package/dist/interactions/createLongPress.d.ts +5 -5
  176. package/dist/interactions/createMove.d.ts +5 -5
  177. package/dist/interactions/createMove.d.ts.map +1 -1
  178. package/dist/interactions/createPress.d.ts +4 -4
  179. package/dist/interactions/createPress.d.ts.map +1 -1
  180. package/dist/interactions/index.d.ts +12 -12
  181. package/dist/interactions/index.d.ts.map +1 -1
  182. package/dist/label/createField.d.ts +4 -4
  183. package/dist/label/createField.d.ts.map +1 -1
  184. package/dist/label/createLabel.d.ts +7 -7
  185. package/dist/label/createLabel.d.ts.map +1 -1
  186. package/dist/label/createLabels.d.ts +1 -1
  187. package/dist/label/createLabels.d.ts.map +1 -1
  188. package/dist/label/index.d.ts +5 -5
  189. package/dist/landmark/createLandmark.d.ts +5 -5
  190. package/dist/landmark/createLandmark.d.ts.map +1 -1
  191. package/dist/landmark/index.d.ts +1 -1
  192. package/dist/link/createLink.d.ts +23 -7
  193. package/dist/link/createLink.d.ts.map +1 -1
  194. package/dist/link/index.d.ts +1 -1
  195. package/dist/listbox/createListBox.d.ts +12 -6
  196. package/dist/listbox/createListBox.d.ts.map +1 -1
  197. package/dist/listbox/createOption.d.ts +21 -4
  198. package/dist/listbox/createOption.d.ts.map +1 -1
  199. package/dist/listbox/index.d.ts +2 -2
  200. package/dist/listbox/index.d.ts.map +1 -1
  201. package/dist/live-announcer/announce.d.ts +2 -2
  202. package/dist/live-announcer/announce.d.ts.map +1 -1
  203. package/dist/live-announcer/index.d.ts +1 -1
  204. package/dist/menu/createMenu.d.ts +8 -7
  205. package/dist/menu/createMenu.d.ts.map +1 -1
  206. package/dist/menu/createMenuItem.d.ts +16 -4
  207. package/dist/menu/createMenuItem.d.ts.map +1 -1
  208. package/dist/menu/createMenuTrigger.d.ts +4 -4
  209. package/dist/menu/index.d.ts +3 -3
  210. package/dist/menu/index.d.ts.map +1 -1
  211. package/dist/meter/createMeter.d.ts +6 -6
  212. package/dist/meter/createMeter.d.ts.map +1 -1
  213. package/dist/meter/index.d.ts +1 -1
  214. package/dist/numberfield/createNumberField.d.ts +27 -8
  215. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  216. package/dist/numberfield/index.d.ts +1 -1
  217. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  218. package/dist/overlays/createModal.d.ts +19 -3
  219. package/dist/overlays/createModal.d.ts.map +1 -1
  220. package/dist/overlays/createOverlay.d.ts +1 -1
  221. package/dist/overlays/createOverlay.d.ts.map +1 -1
  222. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  223. package/dist/overlays/index.d.ts +6 -6
  224. package/dist/overlays/index.d.ts.map +1 -1
  225. package/dist/popover/calculatePosition.d.ts +4 -4
  226. package/dist/popover/calculatePosition.d.ts.map +1 -1
  227. package/dist/popover/createOverlayPosition.d.ts +3 -3
  228. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  229. package/dist/popover/createPopover.d.ts +4 -4
  230. package/dist/popover/createPopover.d.ts.map +1 -1
  231. package/dist/popover/index.d.ts +3 -3
  232. package/dist/progress/createProgressBar.d.ts +7 -5
  233. package/dist/progress/createProgressBar.d.ts.map +1 -1
  234. package/dist/progress/index.d.ts +1 -1
  235. package/dist/radio/createRadio.d.ts +7 -7
  236. package/dist/radio/createRadio.d.ts.map +1 -1
  237. package/dist/radio/createRadioGroup.d.ts +11 -11
  238. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  239. package/dist/radio/createRadioGroupState.d.ts +3 -3
  240. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  241. package/dist/radio/index.d.ts +3 -3
  242. package/dist/radio/index.d.ts.map +1 -1
  243. package/dist/searchfield/createSearchField.d.ts +7 -7
  244. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  245. package/dist/searchfield/index.d.ts +2 -2
  246. package/dist/select/createHiddenSelect.d.ts +4 -4
  247. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  248. package/dist/select/createSelect.d.ts +14 -6
  249. package/dist/select/createSelect.d.ts.map +1 -1
  250. package/dist/select/index.d.ts +2 -2
  251. package/dist/select/index.d.ts.map +1 -1
  252. package/dist/selection/createTypeSelect.d.ts +2 -2
  253. package/dist/selection/index.d.ts +1 -1
  254. package/dist/separator/createSeparator.d.ts +9 -5
  255. package/dist/separator/createSeparator.d.ts.map +1 -1
  256. package/dist/separator/index.d.ts +1 -1
  257. package/dist/slider/createSlider.d.ts +11 -7
  258. package/dist/slider/createSlider.d.ts.map +1 -1
  259. package/dist/slider/index.d.ts +2 -2
  260. package/dist/ssr/index.d.ts +1 -1
  261. package/dist/ssr/index.d.ts.map +1 -1
  262. package/dist/steplist/createStepList.d.ts +36 -0
  263. package/dist/steplist/createStepList.d.ts.map +1 -0
  264. package/dist/steplist/index.d.ts +2 -0
  265. package/dist/steplist/index.d.ts.map +1 -0
  266. package/dist/switch/createSwitch.d.ts +6 -4
  267. package/dist/switch/createSwitch.d.ts.map +1 -1
  268. package/dist/switch/index.d.ts +1 -1
  269. package/dist/table/createTable.d.ts +3 -3
  270. package/dist/table/createTable.d.ts.map +1 -1
  271. package/dist/table/createTableCell.d.ts +3 -3
  272. package/dist/table/createTableCell.d.ts.map +1 -1
  273. package/dist/table/createTableColumnHeader.d.ts +3 -3
  274. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  275. package/dist/table/createTableColumnResize.d.ts +41 -0
  276. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  277. package/dist/table/createTableHeaderRow.d.ts +3 -3
  278. package/dist/table/createTableRow.d.ts +3 -3
  279. package/dist/table/createTableRow.d.ts.map +1 -1
  280. package/dist/table/createTableRowGroup.d.ts +2 -2
  281. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  282. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  283. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  284. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  285. package/dist/table/index.d.ts +11 -9
  286. package/dist/table/index.d.ts.map +1 -1
  287. package/dist/table/types.d.ts +15 -7
  288. package/dist/table/types.d.ts.map +1 -1
  289. package/dist/tabs/createTabs.d.ts +28 -25
  290. package/dist/tabs/createTabs.d.ts.map +1 -1
  291. package/dist/tabs/index.d.ts +1 -1
  292. package/dist/tag/createTag.d.ts +2 -2
  293. package/dist/tag/createTag.d.ts.map +1 -1
  294. package/dist/tag/createTagGroup.d.ts +5 -5
  295. package/dist/tag/createTagGroup.d.ts.map +1 -1
  296. package/dist/tag/index.d.ts +2 -2
  297. package/dist/tag/index.d.ts.map +1 -1
  298. package/dist/textfield/createTextField.d.ts +17 -11
  299. package/dist/textfield/createTextField.d.ts.map +1 -1
  300. package/dist/textfield/index.d.ts +1 -1
  301. package/dist/textfield/index.d.ts.map +1 -1
  302. package/dist/toast/createToast.d.ts +6 -2
  303. package/dist/toast/createToast.d.ts.map +1 -1
  304. package/dist/toast/createToastRegion.d.ts +5 -3
  305. package/dist/toast/createToastRegion.d.ts.map +1 -1
  306. package/dist/toast/index.d.ts +2 -2
  307. package/dist/toast/index.d.ts.map +1 -1
  308. package/dist/toggle/createToggle.d.ts +9 -9
  309. package/dist/toggle/createToggle.d.ts.map +1 -1
  310. package/dist/toggle/createToggleState.d.ts +2 -2
  311. package/dist/toggle/createToggleState.d.ts.map +1 -1
  312. package/dist/toggle/index.d.ts +4 -4
  313. package/dist/toggle/index.d.ts.map +1 -1
  314. package/dist/toolbar/createToolbar.d.ts +9 -9
  315. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  316. package/dist/toolbar/index.d.ts +1 -1
  317. package/dist/toolbar/index.d.ts.map +1 -1
  318. package/dist/tooltip/createTooltip.d.ts +5 -5
  319. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  320. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  321. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  322. package/dist/tooltip/index.d.ts +2 -2
  323. package/dist/tree/createTree.d.ts +3 -3
  324. package/dist/tree/createTree.d.ts.map +1 -1
  325. package/dist/tree/createTreeItem.d.ts +4 -4
  326. package/dist/tree/createTreeItem.d.ts.map +1 -1
  327. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  328. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  329. package/dist/tree/index.d.ts +4 -4
  330. package/dist/tree/types.d.ts +13 -5
  331. package/dist/tree/types.d.ts.map +1 -1
  332. package/dist/utils/createDescription.d.ts +2 -2
  333. package/dist/utils/createDescription.d.ts.map +1 -1
  334. package/dist/utils/dom.d.ts.map +1 -1
  335. package/dist/utils/env.d.ts +1 -1
  336. package/dist/utils/env.d.ts.map +1 -1
  337. package/dist/utils/focus.d.ts +1 -1
  338. package/dist/utils/focus.d.ts.map +1 -1
  339. package/dist/utils/geometry.d.ts.map +1 -1
  340. package/dist/utils/index.d.ts +12 -12
  341. package/dist/utils/index.d.ts.map +1 -1
  342. package/dist/utils/mergeProps.d.ts.map +1 -1
  343. package/dist/utils/platform.d.ts.map +1 -1
  344. package/dist/utils/reactivity.d.ts +1 -1
  345. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  346. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  347. package/dist/visually-hidden/index.d.ts +1 -1
  348. package/package.json +34 -32
  349. package/src/actiongroup/createActionGroup.ts +334 -0
  350. package/src/actiongroup/index.ts +8 -0
  351. package/src/autocomplete/createAutocomplete.ts +137 -131
  352. package/src/autocomplete/index.ts +1 -1
  353. package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
  354. package/src/breadcrumbs/index.ts +1 -1
  355. package/src/button/createButton.ts +102 -73
  356. package/src/button/createToggleButton.ts +10 -10
  357. package/src/button/createToggleButtonGroup.ts +121 -0
  358. package/src/button/index.ts +10 -4
  359. package/src/button/types.ts +18 -12
  360. package/src/calendar/createCalendar.ts +62 -29
  361. package/src/calendar/createCalendarCell.ts +102 -48
  362. package/src/calendar/createCalendarGrid.ts +78 -47
  363. package/src/calendar/createRangeCalendar.ts +66 -31
  364. package/src/calendar/createRangeCalendarCell.ts +115 -37
  365. package/src/calendar/index.ts +5 -9
  366. package/src/calendar/intl/index.ts +210 -0
  367. package/src/calendar/utils.ts +227 -0
  368. package/src/checkbox/createCheckbox.ts +13 -21
  369. package/src/checkbox/createCheckboxGroup.ts +86 -45
  370. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  371. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  372. package/src/checkbox/index.ts +8 -10
  373. package/src/collections/index.ts +246 -0
  374. package/src/color/createColorArea.ts +458 -314
  375. package/src/color/createColorField.ts +186 -137
  376. package/src/color/createColorSlider.ts +444 -197
  377. package/src/color/createColorSwatch.ts +65 -40
  378. package/src/color/createColorWheel.ts +343 -208
  379. package/src/color/index.ts +24 -24
  380. package/src/color/types.ts +198 -116
  381. package/src/combobox/createComboBox.ts +727 -647
  382. package/src/combobox/index.ts +6 -6
  383. package/src/combobox/intl/index.ts +5 -5
  384. package/src/datepicker/createDateField.ts +192 -39
  385. package/src/datepicker/createDatePicker.ts +294 -63
  386. package/src/datepicker/createDatePickerGroup.ts +149 -0
  387. package/src/datepicker/createDateRangePicker.ts +294 -0
  388. package/src/datepicker/createDateSegment.ts +316 -75
  389. package/src/datepicker/createTimeField.ts +38 -34
  390. package/src/datepicker/createTimeSegment.ts +352 -0
  391. package/src/datepicker/index.ts +24 -11
  392. package/src/dialog/createDialog.ts +127 -120
  393. package/src/dialog/index.ts +2 -2
  394. package/src/dialog/types.ts +19 -19
  395. package/src/disclosure/createDisclosure.ts +138 -33
  396. package/src/disclosure/createDisclosureGroup.ts +8 -18
  397. package/src/disclosure/index.ts +2 -2
  398. package/src/dnd/createDrag.ts +218 -209
  399. package/src/dnd/createDraggableCollection.ts +96 -63
  400. package/src/dnd/createDraggableItem.ts +260 -243
  401. package/src/dnd/createDrop.ts +313 -321
  402. package/src/dnd/createDroppableCollection.ts +799 -293
  403. package/src/dnd/createDroppableItem.ts +215 -213
  404. package/src/dnd/index.ts +66 -47
  405. package/src/dnd/types.ts +86 -89
  406. package/src/dnd/utils.ts +281 -294
  407. package/src/focus/FocusScope.tsx +155 -164
  408. package/src/focus/createAutoFocus.ts +305 -321
  409. package/src/focus/createFocusRestore.ts +300 -313
  410. package/src/focus/createVirtualFocus.ts +380 -396
  411. package/src/focus/index.ts +4 -8
  412. package/src/form/createFormReset.ts +4 -4
  413. package/src/form/createFormValidation.ts +201 -224
  414. package/src/form/index.ts +8 -11
  415. package/src/grid/GridKeyboardDelegate.ts +30 -30
  416. package/src/grid/createGrid.ts +38 -36
  417. package/src/grid/createGridCell.ts +18 -18
  418. package/src/grid/createGridRow.ts +14 -14
  419. package/src/grid/index.ts +5 -5
  420. package/src/grid/types.ts +8 -8
  421. package/src/gridlist/createGridList.ts +45 -24
  422. package/src/gridlist/createGridListItem.ts +68 -23
  423. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  424. package/src/gridlist/index.ts +4 -4
  425. package/src/gridlist/types.ts +11 -7
  426. package/src/i18n/createCollator.ts +66 -79
  427. package/src/i18n/createDateFormatter.ts +75 -83
  428. package/src/i18n/createFilter.ts +118 -131
  429. package/src/i18n/createNumberFormatter.ts +50 -52
  430. package/src/i18n/createStringFormatter.ts +19 -15
  431. package/src/i18n/index.ts +37 -40
  432. package/src/i18n/locale.tsx +163 -188
  433. package/src/i18n/utils.ts +95 -99
  434. package/src/index.ts +114 -164
  435. package/src/interactions/FocusableProvider.tsx +3 -7
  436. package/src/interactions/PressEvent.ts +4 -4
  437. package/src/interactions/createFocus.ts +16 -11
  438. package/src/interactions/createFocusRing.ts +21 -19
  439. package/src/interactions/createFocusWithin.ts +24 -16
  440. package/src/interactions/createFocusable.ts +15 -16
  441. package/src/interactions/createHover.ts +70 -55
  442. package/src/interactions/createInteractionModality.ts +75 -82
  443. package/src/interactions/createKeyboard.ts +2 -2
  444. package/src/interactions/createLongPress.ts +174 -174
  445. package/src/interactions/createMove.ts +299 -289
  446. package/src/interactions/createPress.ts +168 -91
  447. package/src/interactions/index.ts +24 -16
  448. package/src/label/createField.ts +18 -19
  449. package/src/label/createLabel.ts +18 -30
  450. package/src/label/createLabels.ts +8 -12
  451. package/src/label/index.ts +5 -5
  452. package/src/landmark/createLandmark.ts +356 -377
  453. package/src/landmark/index.ts +8 -8
  454. package/src/link/createLink.ts +96 -54
  455. package/src/link/index.ts +1 -1
  456. package/src/listbox/createListBox.ts +319 -269
  457. package/src/listbox/createOption.ts +208 -151
  458. package/src/listbox/index.ts +8 -12
  459. package/src/live-announcer/announce.ts +295 -322
  460. package/src/live-announcer/index.ts +9 -9
  461. package/src/menu/createMenu.ts +434 -396
  462. package/src/menu/createMenuItem.ts +201 -149
  463. package/src/menu/createMenuTrigger.ts +88 -88
  464. package/src/menu/index.ts +9 -18
  465. package/src/meter/createMeter.ts +7 -20
  466. package/src/meter/index.ts +1 -1
  467. package/src/numberfield/createNumberField.ts +368 -268
  468. package/src/numberfield/index.ts +5 -5
  469. package/src/overlays/ariaHideOutside.ts +223 -219
  470. package/src/overlays/createInteractOutside.ts +152 -149
  471. package/src/overlays/createModal.tsx +238 -202
  472. package/src/overlays/createOverlay.ts +195 -155
  473. package/src/overlays/createOverlayTrigger.ts +85 -85
  474. package/src/overlays/createPreventScroll.ts +288 -266
  475. package/src/overlays/index.ts +37 -44
  476. package/src/popover/calculatePosition.ts +117 -119
  477. package/src/popover/createOverlayPosition.ts +52 -43
  478. package/src/popover/createPopover.ts +63 -24
  479. package/src/popover/index.ts +3 -3
  480. package/src/progress/createProgressBar.ts +36 -32
  481. package/src/progress/index.ts +1 -1
  482. package/src/radio/createRadio.ts +95 -73
  483. package/src/radio/createRadioGroup.ts +142 -62
  484. package/src/radio/createRadioGroupState.ts +7 -31
  485. package/src/radio/index.ts +3 -8
  486. package/src/searchfield/createSearchField.ts +269 -186
  487. package/src/searchfield/index.ts +2 -2
  488. package/src/select/createHiddenSelect.tsx +276 -236
  489. package/src/select/createSelect.ts +430 -395
  490. package/src/select/index.ts +9 -14
  491. package/src/selection/createTypeSelect.ts +11 -11
  492. package/src/selection/index.ts +1 -1
  493. package/src/separator/createSeparator.ts +20 -25
  494. package/src/separator/index.ts +1 -1
  495. package/src/slider/createSlider.ts +333 -349
  496. package/src/slider/index.ts +2 -2
  497. package/src/ssr/index.tsx +331 -370
  498. package/src/steplist/createStepList.ts +106 -0
  499. package/src/steplist/index.ts +8 -0
  500. package/src/switch/createSwitch.ts +9 -14
  501. package/src/switch/index.ts +1 -1
  502. package/src/table/createTable.ts +155 -86
  503. package/src/table/createTableCell.ts +17 -16
  504. package/src/table/createTableColumnHeader.ts +67 -20
  505. package/src/table/createTableColumnResize.ts +256 -0
  506. package/src/table/createTableHeaderRow.ts +7 -7
  507. package/src/table/createTableRow.ts +149 -29
  508. package/src/table/createTableRowGroup.ts +5 -7
  509. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  510. package/src/table/createTableSelectionCheckbox.ts +8 -8
  511. package/src/table/index.ts +14 -9
  512. package/src/table/types.ts +15 -7
  513. package/src/tabs/createTabs.ts +138 -127
  514. package/src/tabs/index.ts +1 -1
  515. package/src/tag/createTag.ts +171 -40
  516. package/src/tag/createTagGroup.ts +50 -39
  517. package/src/tag/index.ts +2 -6
  518. package/src/textfield/createTextField.ts +67 -35
  519. package/src/textfield/index.ts +1 -5
  520. package/src/toast/createToast.ts +34 -26
  521. package/src/toast/createToastRegion.ts +169 -27
  522. package/src/toast/index.ts +2 -6
  523. package/src/toggle/createToggle.ts +95 -53
  524. package/src/toggle/createToggleState.ts +2 -10
  525. package/src/toggle/index.ts +4 -5
  526. package/src/toolbar/createToolbar.ts +226 -169
  527. package/src/toolbar/index.ts +1 -1
  528. package/src/tooltip/createTooltip.ts +66 -79
  529. package/src/tooltip/createTooltipTrigger.ts +238 -222
  530. package/src/tooltip/index.ts +6 -6
  531. package/src/tree/createTree.ts +259 -246
  532. package/src/tree/createTreeItem.ts +282 -233
  533. package/src/tree/createTreeSelectionCheckbox.ts +71 -68
  534. package/src/tree/index.ts +16 -16
  535. package/src/tree/types.ts +95 -87
  536. package/src/utils/createDescription.ts +6 -23
  537. package/src/utils/dom.ts +61 -54
  538. package/src/utils/env.ts +53 -54
  539. package/src/utils/events.ts +7 -7
  540. package/src/utils/filterDOMProps.ts +49 -49
  541. package/src/utils/focus.ts +60 -68
  542. package/src/utils/geometry.ts +1 -4
  543. package/src/utils/globalListeners.ts +9 -9
  544. package/src/utils/index.ts +12 -22
  545. package/src/utils/mergeProps.ts +42 -15
  546. package/src/utils/platform.ts +16 -6
  547. package/src/utils/reactivity.ts +3 -3
  548. package/src/utils/textSelection.ts +16 -16
  549. package/src/visually-hidden/createVisuallyHidden.ts +127 -124
  550. package/src/visually-hidden/index.ts +6 -6
  551. package/dist/i18n/NumberFormatter.d.ts +0 -43
  552. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  553. package/dist/index.ssr.js +0 -15875
  554. package/dist/index.ssr.js.map +0 -7
  555. package/src/i18n/NumberFormatter.ts +0 -266
@@ -0,0 +1,106 @@
1
+ /**
2
+ * ARIA hooks for StepList components.
3
+ * Provides accessible step list and step item props.
4
+ */
5
+
6
+ import type { JSX } from "solid-js";
7
+ import type { StepListState } from "@proyecto-viviana/solid-stately";
8
+ import type { Key } from "@proyecto-viviana/solid-stately";
9
+
10
+ export interface AriaStepListProps {
11
+ /** Accessible label for the step list. */
12
+ "aria-label"?: string;
13
+ /** ID of element that labels the step list. */
14
+ "aria-labelledby"?: string;
15
+ }
16
+
17
+ export interface StepListAria {
18
+ /** Props for the step list container element. */
19
+ stepListProps: JSX.HTMLAttributes<HTMLOListElement>;
20
+ }
21
+
22
+ /**
23
+ * Creates ARIA props for a step list container.
24
+ */
25
+ export function createStepList(props: AriaStepListProps, _state: StepListState): StepListAria {
26
+ return {
27
+ stepListProps: {
28
+ get "aria-label"() {
29
+ return props["aria-label"] ?? "Step List";
30
+ },
31
+ get "aria-labelledby"() {
32
+ return props["aria-labelledby"];
33
+ },
34
+ },
35
+ };
36
+ }
37
+
38
+ export interface AriaStepProps {
39
+ /** The key of this step. */
40
+ key: Key;
41
+ }
42
+
43
+ export interface StepAria {
44
+ /** Props for the step element (anchor/link). */
45
+ stepProps: JSX.HTMLAttributes<HTMLAnchorElement>;
46
+ /** Accessible text describing the step state. */
47
+ stepStateText: string;
48
+ }
49
+
50
+ /**
51
+ * Creates ARIA props for an individual step within a step list.
52
+ */
53
+ export function createStep(props: AriaStepProps, state: StepListState): StepAria {
54
+ const isSelected = () => state.selectedKey() === props.key;
55
+ const isCompleted = () => state.isCompleted(props.key);
56
+ const selectable = () => state.isSelectable(props.key);
57
+
58
+ const getStepStateText = (): string => {
59
+ if (isSelected()) return "Current";
60
+ if (isCompleted()) return "Completed";
61
+ return "Not completed";
62
+ };
63
+
64
+ const handleClick: JSX.EventHandler<HTMLAnchorElement, MouseEvent> = (e) => {
65
+ e.preventDefault();
66
+ if (selectable()) {
67
+ state.setSelectedKey(props.key);
68
+ }
69
+ };
70
+
71
+ const handleKeyDown: JSX.EventHandler<HTMLAnchorElement, KeyboardEvent> = (e) => {
72
+ // Prevent arrow key scrolling — tab order handles navigation
73
+ if (e.key === "ArrowUp" || e.key === "ArrowDown") {
74
+ e.preventDefault();
75
+ return;
76
+ }
77
+ if (e.key === "Enter" || e.key === " ") {
78
+ e.preventDefault();
79
+ if (selectable()) {
80
+ state.setSelectedKey(props.key);
81
+ }
82
+ }
83
+ };
84
+
85
+ return {
86
+ get stepProps() {
87
+ return {
88
+ role: "link" as const,
89
+ get "aria-current"() {
90
+ return isSelected() ? ("step" as const) : undefined;
91
+ },
92
+ get "aria-disabled"() {
93
+ return !selectable() ? true : undefined;
94
+ },
95
+ get tabIndex() {
96
+ return selectable() ? 0 : undefined;
97
+ },
98
+ onClick: handleClick,
99
+ onKeyDown: handleKeyDown,
100
+ };
101
+ },
102
+ get stepStateText() {
103
+ return getStepStateText();
104
+ },
105
+ };
106
+ }
@@ -0,0 +1,8 @@
1
+ export {
2
+ createStepList,
3
+ createStep,
4
+ type AriaStepListProps,
5
+ type StepListAria,
6
+ type AriaStepProps,
7
+ type StepAria,
8
+ } from "./createStepList";
@@ -7,14 +7,10 @@
7
7
  * This is a 1:1 port of @react-aria/switch's useSwitch hook.
8
8
  */
9
9
 
10
- import { JSX, Accessor } from 'solid-js';
11
- import { createToggle, type AriaToggleProps } from '../toggle/createToggle';
12
- import { type ToggleState } from '@proyecto-viviana/solid-stately';
13
- import { type MaybeAccessor } from '../utils/reactivity';
14
-
15
- // ============================================
16
- // TYPES
17
- // ============================================
10
+ import { JSX, Accessor } from "solid-js";
11
+ import { createToggle, type AriaToggleProps } from "../toggle/createToggle";
12
+ import { type ToggleState } from "@proyecto-viviana/solid-stately";
13
+ import { type MaybeAccessor } from "../utils/reactivity";
18
14
 
19
15
  export interface AriaSwitchProps extends AriaToggleProps {
20
16
  // Switch uses the same props as toggle
@@ -33,12 +29,10 @@ export interface SwitchAria {
33
29
  isDisabled: boolean;
34
30
  /** Whether the switch is read only. */
35
31
  isReadOnly: boolean;
32
+ /** Whether the switch is invalid. */
33
+ isInvalid: boolean;
36
34
  }
37
35
 
38
- // ============================================
39
- // IMPLEMENTATION
40
- // ============================================
41
-
42
36
  /**
43
37
  * Provides the behavior and accessibility implementation for a switch component.
44
38
  * A switch is similar to a checkbox, but represents on/off values as opposed to selection.
@@ -46,7 +40,7 @@ export interface SwitchAria {
46
40
  export function createSwitch(
47
41
  props: MaybeAccessor<AriaSwitchProps>,
48
42
  state: ToggleState,
49
- ref: () => HTMLInputElement | null
43
+ ref: () => HTMLInputElement | null,
50
44
  ): SwitchAria {
51
45
  // Don't destructure inputProps - it's a getter that needs to be evaluated each time
52
46
  const toggle = createToggle(props, state, ref);
@@ -58,7 +52,7 @@ export function createSwitch(
58
52
  const baseProps = toggle.inputProps;
59
53
  return {
60
54
  ...baseProps,
61
- role: 'switch' as const,
55
+ role: "switch" as const,
62
56
  checked: toggle.isSelected(),
63
57
  };
64
58
  },
@@ -66,5 +60,6 @@ export function createSwitch(
66
60
  isPressed: toggle.isPressed,
67
61
  isDisabled: toggle.isDisabled,
68
62
  isReadOnly: toggle.isReadOnly,
63
+ isInvalid: toggle.isInvalid,
69
64
  };
70
65
  }
@@ -1 +1 @@
1
- export { createSwitch, type AriaSwitchProps, type SwitchAria } from './createSwitch';
1
+ export { createSwitch, type AriaSwitchProps, type SwitchAria } from "./createSwitch";
@@ -3,13 +3,13 @@
3
3
  * Based on @react-aria/table/useTable.
4
4
  */
5
5
 
6
- import { createMemo, createEffect, on, type Accessor } from 'solid-js';
7
- import type { JSX } from 'solid-js';
8
- import { createId } from '@proyecto-viviana/solid-stately';
9
- import type { TableState, TableCollection, Key, GridNode } from '@proyecto-viviana/solid-stately';
10
- import type { AriaTableProps, TableAria } from './types';
11
- import { useLocale } from '../i18n';
12
- import { announce } from '../live-announcer';
6
+ import { createMemo, createEffect, on, type Accessor } from "solid-js";
7
+ import type { JSX } from "solid-js";
8
+ import { createId } from "@proyecto-viviana/solid-stately";
9
+ import type { TableState, TableCollection, Key, GridNode } from "@proyecto-viviana/solid-stately";
10
+ import type { AriaTableProps, TableAria } from "./types";
11
+ import { useLocale } from "../i18n";
12
+ import { announce } from "../live-announcer";
13
13
 
14
14
  // Global map to store table metadata for child components
15
15
  const tableMap = new WeakMap<
@@ -18,7 +18,7 @@ const tableMap = new WeakMap<
18
18
  tableId: string;
19
19
  actions: { onRowAction?: (key: Key) => void; onCellAction?: (key: Key) => void };
20
20
  shouldSelectOnPressUp?: boolean;
21
- focusMode?: 'row' | 'cell';
21
+ focusMode?: "row" | "cell";
22
22
  }
23
23
  >();
24
24
 
@@ -34,13 +34,17 @@ export function getTableData<T>(state: TableState<T, TableCollection<T>>) {
34
34
  */
35
35
  function getChildCells<T>(collection: TableCollection<T>, rowKey: Key): GridNode<T>[] {
36
36
  const children = collection.getChildren(rowKey);
37
- return [...children].filter(node => node.type === 'cell' || node.type === 'rowheader');
37
+ return [...children].filter((node) => node.type === "cell" || node.type === "rowheader");
38
38
  }
39
39
 
40
40
  /**
41
41
  * Helper to get cell at specific index in a row
42
42
  */
43
- function getCellAtIndex<T>(collection: TableCollection<T>, rowKey: Key, index: number): GridNode<T> | null {
43
+ function getCellAtIndex<T>(
44
+ collection: TableCollection<T>,
45
+ rowKey: Key,
46
+ index: number,
47
+ ): GridNode<T> | null {
44
48
  const cells = getChildCells(collection, rowKey);
45
49
  return cells[index] ?? null;
46
50
  }
@@ -49,14 +53,21 @@ function getCellAtIndex<T>(collection: TableCollection<T>, rowKey: Key, index: n
49
53
  * Helper to check if a node is a cell
50
54
  */
51
55
  function isCell<T>(node: GridNode<T> | null): boolean {
52
- return node?.type === 'cell' || node?.type === 'rowheader';
56
+ return node?.type === "cell" || node?.type === "rowheader";
53
57
  }
54
58
 
55
59
  /**
56
60
  * Helper to check if a node is a row
57
61
  */
58
62
  function isRow<T>(node: GridNode<T> | null): boolean {
59
- return node?.type === 'item';
63
+ return node?.type === "item";
64
+ }
65
+
66
+ function focusCurrentElement(el: HTMLElement | null | undefined) {
67
+ const target = el?.querySelector<HTMLElement>(
68
+ '[role="row"][tabindex="0"], [role="rowheader"][tabindex="0"], [role="gridcell"][tabindex="0"], [role="columnheader"][tabindex="0"]',
69
+ );
70
+ target?.focus();
60
71
  }
61
72
 
62
73
  /**
@@ -65,14 +76,16 @@ function isRow<T>(node: GridNode<T> | null): boolean {
65
76
  export function createTable<T extends object>(
66
77
  props: Accessor<AriaTableProps>,
67
78
  state: Accessor<TableState<T, TableCollection<T>>>,
68
- ref: Accessor<HTMLTableElement | null>
79
+ ref: Accessor<HTMLTableElement | null>,
69
80
  ): TableAria {
70
81
  const id = createId(props().id);
71
82
  const locale = useLocale();
72
83
 
73
84
  // Track previous sort descriptor for announcements
74
- let prevSortDescriptor: { column: Key; direction: 'ascending' | 'descending' } | null = null;
85
+ let prevSortDescriptor: { column: Key; direction: "ascending" | "descending" } | null = null;
75
86
  let isFirstRender = true;
87
+ let typeaheadBuffer = "";
88
+ let typeaheadTimeout: ReturnType<typeof setTimeout> | undefined;
76
89
 
77
90
  // Store metadata for child components
78
91
  const storeTableData = () => {
@@ -95,38 +108,83 @@ export function createTable<T extends object>(
95
108
  });
96
109
 
97
110
  // Announce sort changes (only after initial render)
98
- createEffect(on(
99
- () => state().sortDescriptor,
100
- (sortDescriptor) => {
101
- if (isFirstRender) {
102
- isFirstRender = false;
103
- prevSortDescriptor = sortDescriptor;
104
- return;
105
- }
106
-
107
- if (sortDescriptor && (
108
- sortDescriptor.column !== prevSortDescriptor?.column ||
109
- sortDescriptor.direction !== prevSortDescriptor?.direction
110
- )) {
111
- const collection = state().collection;
112
- const column = collection.columns.find(c => c.key === sortDescriptor.column);
113
- const columnName = column?.textValue ?? String(sortDescriptor.column);
114
- const directionText = sortDescriptor.direction === 'ascending' ? 'ascending' : 'descending';
111
+ createEffect(
112
+ on(
113
+ () => state().sortDescriptor,
114
+ (sortDescriptor) => {
115
+ if (isFirstRender) {
116
+ isFirstRender = false;
117
+ prevSortDescriptor = sortDescriptor;
118
+ return;
119
+ }
115
120
 
116
- announce(`Sorted by ${columnName}, ${directionText}`, 'assertive', 500);
117
- }
121
+ if (
122
+ sortDescriptor &&
123
+ (sortDescriptor.column !== prevSortDescriptor?.column ||
124
+ sortDescriptor.direction !== prevSortDescriptor?.direction)
125
+ ) {
126
+ const collection = state().collection;
127
+ const column = collection.columns.find((c) => c.key === sortDescriptor.column);
128
+ const columnName = column?.textValue ?? String(sortDescriptor.column);
129
+ const directionText =
130
+ sortDescriptor.direction === "ascending" ? "ascending" : "descending";
131
+
132
+ announce(`Sorted by ${columnName}, ${directionText}`, "assertive", 500);
133
+ }
118
134
 
119
- prevSortDescriptor = sortDescriptor;
120
- }
121
- ));
135
+ prevSortDescriptor = sortDescriptor;
136
+ },
137
+ ),
138
+ );
122
139
 
123
140
  // Keyboard navigation handler with full 2D navigation
124
141
  const onKeyDown = (e: KeyboardEvent) => {
125
142
  const s = state();
126
143
  const collection = s.collection;
127
144
  const p = props();
128
- const focusMode = p.focusMode ?? 'row';
129
- const isRTL = locale().direction === 'rtl';
145
+ const focusMode = p.focusMode ?? "row";
146
+ const isRTL = locale().direction === "rtl";
147
+ const setFocusedKey = (key: Key) => {
148
+ s.setFocusedKey(key);
149
+ queueMicrotask(() => focusCurrentElement(ref()));
150
+ };
151
+ const runTypeahead = (focusedKey: Key, focusedItem: GridNode<T>) => {
152
+ if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey) {
153
+ return false;
154
+ }
155
+
156
+ typeaheadBuffer += e.key.toLocaleLowerCase();
157
+ if (typeaheadTimeout) {
158
+ clearTimeout(typeaheadTimeout);
159
+ }
160
+ typeaheadTimeout = setTimeout(() => {
161
+ typeaheadBuffer = "";
162
+ typeaheadTimeout = undefined;
163
+ }, 500);
164
+
165
+ const rows = Array.from(collection).filter((node) => !s.isDisabled(node.key));
166
+ if (rows.length === 0) {
167
+ return true;
168
+ }
169
+
170
+ const currentRowKey =
171
+ isCell(focusedItem) && focusedItem.parentKey != null ? focusedItem.parentKey : focusedKey;
172
+ const currentIndex = rows.findIndex((node) => node.key === currentRowKey);
173
+ const orderedRows =
174
+ currentIndex >= 0
175
+ ? [...rows.slice(currentIndex + 1), ...rows.slice(0, currentIndex + 1)]
176
+ : rows;
177
+ const match = orderedRows.find((node) =>
178
+ collection.getTextValue(node.key).toLocaleLowerCase().startsWith(typeaheadBuffer),
179
+ );
180
+
181
+ if (match) {
182
+ e.preventDefault();
183
+ setFocusedKey(match.key);
184
+ }
185
+
186
+ return true;
187
+ };
130
188
 
131
189
  if (s.isKeyboardNavigationDisabled) {
132
190
  return;
@@ -135,11 +193,11 @@ export function createTable<T extends object>(
135
193
  const focusedKey = s.focusedKey;
136
194
  if (focusedKey == null) {
137
195
  // If nothing is focused, focus the first item
138
- if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {
196
+ if (e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Home" || e.key === "End") {
139
197
  const firstKey = collection.getFirstKey();
140
198
  if (firstKey != null) {
141
199
  e.preventDefault();
142
- s.setFocusedKey(firstKey);
200
+ setFocusedKey(firstKey);
143
201
  }
144
202
  }
145
203
  return;
@@ -151,7 +209,7 @@ export function createTable<T extends object>(
151
209
  let nextKey: Key | null = null;
152
210
 
153
211
  switch (e.key) {
154
- case 'ArrowDown': {
212
+ case "ArrowDown": {
155
213
  e.preventDefault();
156
214
  // If focused on a cell, move to the same column in the next row
157
215
  if (isCell(focusedItem) && focusedItem.parentKey != null) {
@@ -168,7 +226,7 @@ export function createTable<T extends object>(
168
226
  break;
169
227
  }
170
228
 
171
- case 'ArrowUp': {
229
+ case "ArrowUp": {
172
230
  e.preventDefault();
173
231
  // If focused on a cell, move to the same column in the previous row
174
232
  if (isCell(focusedItem) && focusedItem.parentKey != null) {
@@ -185,7 +243,7 @@ export function createTable<T extends object>(
185
243
  break;
186
244
  }
187
245
 
188
- case 'ArrowRight': {
246
+ case "ArrowRight": {
189
247
  e.preventDefault();
190
248
  const goNext = !isRTL;
191
249
 
@@ -203,7 +261,7 @@ export function createTable<T extends object>(
203
261
 
204
262
  if (targetIndex >= 0 && targetIndex < cells.length) {
205
263
  nextKey = cells[targetIndex].key;
206
- } else if (focusMode === 'row') {
264
+ } else if (focusMode === "row") {
207
265
  // Wrap to row
208
266
  nextKey = focusedItem.parentKey;
209
267
  } else {
@@ -214,7 +272,7 @@ export function createTable<T extends object>(
214
272
  break;
215
273
  }
216
274
 
217
- case 'ArrowLeft': {
275
+ case "ArrowLeft": {
218
276
  e.preventDefault();
219
277
  const goNext = isRTL;
220
278
 
@@ -232,7 +290,7 @@ export function createTable<T extends object>(
232
290
 
233
291
  if (targetIndex >= 0 && targetIndex < cells.length) {
234
292
  nextKey = cells[targetIndex].key;
235
- } else if (focusMode === 'row') {
293
+ } else if (focusMode === "row") {
236
294
  // Wrap to row
237
295
  nextKey = focusedItem.parentKey;
238
296
  } else {
@@ -243,13 +301,13 @@ export function createTable<T extends object>(
243
301
  break;
244
302
  }
245
303
 
246
- case 'Home': {
304
+ case "Home": {
247
305
  e.preventDefault();
248
306
  if (e.ctrlKey) {
249
307
  // Ctrl+Home: Go to first row/cell
250
308
  const firstRowKey = collection.getFirstKey();
251
309
  if (firstRowKey != null) {
252
- if (isCell(focusedItem) || focusMode === 'cell') {
310
+ if (isCell(focusedItem) || focusMode === "cell") {
253
311
  const cells = getChildCells(collection, firstRowKey);
254
312
  nextKey = cells[0]?.key ?? firstRowKey;
255
313
  } else {
@@ -267,13 +325,13 @@ export function createTable<T extends object>(
267
325
  break;
268
326
  }
269
327
 
270
- case 'End': {
328
+ case "End": {
271
329
  e.preventDefault();
272
330
  if (e.ctrlKey) {
273
331
  // Ctrl+End: Go to last row/cell
274
332
  const lastRowKey = collection.getLastKey();
275
333
  if (lastRowKey != null) {
276
- if (isCell(focusedItem) || focusMode === 'cell') {
334
+ if (isCell(focusedItem) || focusMode === "cell") {
277
335
  const cells = getChildCells(collection, lastRowKey);
278
336
  nextKey = cells[cells.length - 1]?.key ?? lastRowKey;
279
337
  } else {
@@ -291,11 +349,11 @@ export function createTable<T extends object>(
291
349
  break;
292
350
  }
293
351
 
294
- case 'PageDown': {
352
+ case "PageDown": {
295
353
  e.preventDefault();
296
354
  // Move down by roughly a page (using DOM measurements if available)
297
355
  const el = ref();
298
- if (el) {
356
+ if (el && el.clientHeight > 0) {
299
357
  const visibleHeight = el.clientHeight;
300
358
  let currentKey: Key | null = focusedKey;
301
359
  let traveled = 0;
@@ -329,9 +387,10 @@ export function createTable<T extends object>(
329
387
  } else {
330
388
  // Fallback: move 10 rows
331
389
  let count = 10;
332
- let current: Key | null = isCell(focusedItem) && focusedItem.parentKey != null
333
- ? focusedItem.parentKey
334
- : focusedKey;
390
+ let current: Key | null =
391
+ isCell(focusedItem) && focusedItem.parentKey != null
392
+ ? focusedItem.parentKey
393
+ : focusedKey;
335
394
  while (count > 0 && current != null) {
336
395
  const next = collection.getKeyAfter(current);
337
396
  if (next == null) break;
@@ -348,11 +407,11 @@ export function createTable<T extends object>(
348
407
  break;
349
408
  }
350
409
 
351
- case 'PageUp': {
410
+ case "PageUp": {
352
411
  e.preventDefault();
353
412
  // Move up by roughly a page
354
413
  const el = ref();
355
- if (el) {
414
+ if (el && el.clientHeight > 0) {
356
415
  const visibleHeight = el.clientHeight;
357
416
  let currentKey: Key | null = focusedKey;
358
417
  let traveled = 0;
@@ -384,9 +443,10 @@ export function createTable<T extends object>(
384
443
  } else {
385
444
  // Fallback: move 10 rows
386
445
  let count = 10;
387
- let current: Key | null = isCell(focusedItem) && focusedItem.parentKey != null
388
- ? focusedItem.parentKey
389
- : focusedKey;
446
+ let current: Key | null =
447
+ isCell(focusedItem) && focusedItem.parentKey != null
448
+ ? focusedItem.parentKey
449
+ : focusedKey;
390
450
  while (count > 0 && current != null) {
391
451
  const prev = collection.getKeyBefore(current);
392
452
  if (prev == null) break;
@@ -403,30 +463,33 @@ export function createTable<T extends object>(
403
463
  break;
404
464
  }
405
465
 
406
- case 'Escape':
407
- s.clearSelection();
466
+ case "Escape":
467
+ if (p.escapeKeyBehavior !== "none") {
468
+ s.clearSelection();
469
+ }
408
470
  return;
409
471
 
410
- case 'a':
472
+ case "a":
411
473
  if (e.ctrlKey || e.metaKey) {
412
474
  e.preventDefault();
413
- if (s.selectionMode === 'multiple') {
475
+ if (s.selectionMode === "multiple") {
414
476
  s.selectAll();
415
477
  }
416
478
  }
417
479
  return;
418
480
 
419
- case ' ':
420
- case 'Enter':
481
+ case " ":
482
+ case "Enter":
421
483
  e.preventDefault();
422
484
  // Toggle selection or trigger action
423
- if (s.selectionMode !== 'none') {
485
+ if (s.selectionMode !== "none") {
424
486
  // For cells, select the parent row
425
- const keyToSelect = isCell(focusedItem) && focusedItem.parentKey != null
426
- ? focusedItem.parentKey
427
- : focusedKey;
487
+ const keyToSelect =
488
+ isCell(focusedItem) && focusedItem.parentKey != null
489
+ ? focusedItem.parentKey
490
+ : focusedKey;
428
491
 
429
- if (e.shiftKey && s.selectionMode === 'multiple') {
492
+ if (e.shiftKey && s.selectionMode === "multiple") {
430
493
  s.extendSelection(keyToSelect);
431
494
  } else {
432
495
  s.toggleSelection(keyToSelect);
@@ -435,19 +498,23 @@ export function createTable<T extends object>(
435
498
  return;
436
499
 
437
500
  default:
501
+ if (runTypeahead(focusedKey, focusedItem)) {
502
+ return;
503
+ }
438
504
  return;
439
505
  }
440
506
 
441
507
  if (nextKey != null) {
442
- s.setFocusedKey(nextKey);
508
+ setFocusedKey(nextKey);
443
509
 
444
510
  // Handle shift+arrow for range selection
445
- if (e.shiftKey && s.selectionMode === 'multiple') {
511
+ if (e.shiftKey && s.selectionMode === "multiple") {
446
512
  // For cells, select the parent row
447
513
  const focusedNode = collection.getItem(nextKey);
448
- const keyToSelect = focusedNode && isCell(focusedNode) && focusedNode.parentKey != null
449
- ? focusedNode.parentKey
450
- : nextKey;
514
+ const keyToSelect =
515
+ focusedNode && isCell(focusedNode) && focusedNode.parentKey != null
516
+ ? focusedNode.parentKey
517
+ : nextKey;
451
518
  s.extendSelection(keyToSelect);
452
519
  }
453
520
  }
@@ -488,8 +555,8 @@ export function createTable<T extends object>(
488
555
  // Warn if no label is provided
489
556
  createMemo(() => {
490
557
  const p = props();
491
- if (!p['aria-label'] && !p['aria-labelledby']) {
492
- console.warn('Table: An aria-label or aria-labelledby prop is required for accessibility.');
558
+ if (!p["aria-label"] && !p["aria-labelledby"]) {
559
+ console.warn("Table: An aria-label or aria-labelledby prop is required for accessibility.");
493
560
  }
494
561
  });
495
562
 
@@ -498,21 +565,23 @@ export function createTable<T extends object>(
498
565
  const s = state();
499
566
 
500
567
  const baseProps: Record<string, unknown> = {
501
- role: 'grid',
568
+ role: "grid",
502
569
  id,
503
- 'aria-label': p['aria-label'],
504
- 'aria-labelledby': p['aria-labelledby'],
505
- 'aria-describedby': p['aria-describedby'],
506
- 'aria-multiselectable': s.selectionMode === 'multiple' ? 'true' : undefined,
507
- tabIndex: s.collection.size === 0 ? 0 : -1,
570
+ "aria-label": p["aria-label"],
571
+ "aria-labelledby": p["aria-labelledby"],
572
+ "aria-describedby": p["aria-describedby"],
573
+ "aria-multiselectable": s.selectionMode === "multiple" ? "true" : undefined,
574
+ // Keep the grid itself tabbable so keyboard users can enter
575
+ // row/cell navigation without requiring a prior pointer interaction.
576
+ tabIndex: 0,
508
577
  onKeyDown,
509
578
  onFocus,
510
579
  onBlur,
511
580
  };
512
581
 
513
582
  if (p.isVirtualized) {
514
- baseProps['aria-rowcount'] = s.collection.rowCount;
515
- baseProps['aria-colcount'] = s.collection.columnCount;
583
+ baseProps["aria-rowcount"] = s.collection.rowCount;
584
+ baseProps["aria-colcount"] = s.collection.columnCount;
516
585
  }
517
586
 
518
587
  return baseProps as JSX.HTMLAttributes<HTMLTableElement>;