@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
@@ -7,19 +7,15 @@
7
7
  * Based on @react-aria/tag useTag
8
8
  */
9
9
 
10
- import { createMemo } from 'solid-js';
11
- import { createFocusable } from '../interactions/createFocusable';
12
- import { createPress } from '../interactions/createPress';
13
- import { filterDOMProps } from '../utils/filterDOMProps';
14
- import { mergeProps } from '../utils/mergeProps';
15
- import { createId } from '../ssr';
16
- import { access, type MaybeAccessor } from '../utils/reactivity';
17
- import { getTagGroupData } from './createTagGroup';
18
- import type { ListState, Key } from '@proyecto-viviana/solid-stately';
19
-
20
- // ============================================
21
- // TYPES
22
- // ============================================
10
+ import { createMemo } from "solid-js";
11
+ import { createFocusable } from "../interactions/createFocusable";
12
+ import { createPress } from "../interactions/createPress";
13
+ import { filterDOMProps } from "../utils/filterDOMProps";
14
+ import { mergeProps } from "../utils/mergeProps";
15
+ import { createId } from "../ssr";
16
+ import { access, type MaybeAccessor } from "../utils/reactivity";
17
+ import { getTagGroupData } from "./createTagGroup";
18
+ import type { ListState, Key } from "@proyecto-viviana/solid-stately";
23
19
 
24
20
  export interface AriaTagProps {
25
21
  /** The unique key for this tag. */
@@ -49,10 +45,6 @@ export interface TagAria {
49
45
  isPressed: boolean;
50
46
  }
51
47
 
52
- // ============================================
53
- // IMPLEMENTATION
54
- // ============================================
55
-
56
48
  /**
57
49
  * Provides the behavior and accessibility implementation for a tag component.
58
50
  * Tags are individual items within a TagGroup.
@@ -60,7 +52,7 @@ export interface TagAria {
60
52
  export function createTag<T>(
61
53
  props: MaybeAccessor<AriaTagProps>,
62
54
  state: ListState<T>,
63
- ref: () => HTMLElement | null
55
+ ref: () => HTMLElement | null,
64
56
  ): TagAria {
65
57
  const getProps = () => access(props);
66
58
  const rowId = createId();
@@ -83,39 +75,147 @@ export function createTag<T>(
83
75
  return state.isSelected(key());
84
76
  });
85
77
 
78
+ const isSelectable = createMemo(() => state.selectionMode() !== "none");
79
+
86
80
  const isFocused = createMemo(() => {
87
81
  return state.focusedKey() === key();
88
82
  });
89
83
 
84
+ const getFirstFocusableKey = (): Key | null => {
85
+ const collection = state.collection();
86
+ let candidate = collection.getFirstKey();
87
+ while (candidate != null && state.isDisabled(candidate)) {
88
+ candidate = collection.getKeyAfter(candidate);
89
+ }
90
+ return candidate;
91
+ };
92
+
93
+ const getLastFocusableKey = (): Key | null => {
94
+ const collection = state.collection();
95
+ let candidate = collection.getLastKey();
96
+ while (candidate != null && state.isDisabled(candidate)) {
97
+ candidate = collection.getKeyBefore(candidate);
98
+ }
99
+ return candidate;
100
+ };
101
+
102
+ const getNextFocusableKey = (fromKey: Key): Key | null => {
103
+ const collection = state.collection();
104
+ let candidate = collection.getKeyAfter(fromKey);
105
+ while (candidate != null && state.isDisabled(candidate)) {
106
+ candidate = collection.getKeyAfter(candidate);
107
+ }
108
+
109
+ if (candidate != null) {
110
+ return candidate;
111
+ }
112
+
113
+ return getFirstFocusableKey();
114
+ };
115
+
116
+ const getPreviousFocusableKey = (fromKey: Key): Key | null => {
117
+ const collection = state.collection();
118
+ let candidate = collection.getKeyBefore(fromKey);
119
+ while (candidate != null && state.isDisabled(candidate)) {
120
+ candidate = collection.getKeyBefore(candidate);
121
+ }
122
+
123
+ if (candidate != null) {
124
+ return candidate;
125
+ }
126
+
127
+ return getLastFocusableKey();
128
+ };
129
+
130
+ const focusKey = (nextKey: Key | null) => {
131
+ if (nextKey == null) {
132
+ return;
133
+ }
134
+
135
+ state.setFocusedKey(nextKey);
136
+ const currentElement = ref();
137
+
138
+ if (!currentElement) {
139
+ return;
140
+ }
141
+
142
+ if (nextKey === key()) {
143
+ currentElement.focus();
144
+ return;
145
+ }
146
+
147
+ const tagList = currentElement.parentElement;
148
+ if (!tagList) {
149
+ return;
150
+ }
151
+
152
+ const nextTag = Array.from(tagList.querySelectorAll<HTMLElement>('[role="row"]')).find(
153
+ (el) => el.getAttribute("data-key") === String(nextKey),
154
+ );
155
+
156
+ nextTag?.focus();
157
+ };
158
+
90
159
  // Handle press for selection
91
160
  const { pressProps, isPressed } = createPress({
92
161
  isDisabled,
93
162
  onPress: () => {
94
163
  if (!isDisabled()) {
164
+ state.setFocusedKey(key());
95
165
  state.toggleSelection(key());
96
166
  }
97
167
  },
98
168
  });
99
169
 
100
170
  // Handle focusable
101
- const { focusableProps } = createFocusable({
102
- isDisabled,
103
- }, ref);
171
+ const { focusableProps } = createFocusable(
172
+ {
173
+ isDisabled,
174
+ onFocus: () => {
175
+ state.setFocusedKey(key());
176
+ },
177
+ },
178
+ ref,
179
+ );
104
180
 
105
- // Handle keyboard for removal
181
+ // Handle keyboard for navigation and removal
106
182
  const handleKeyDown = (e: KeyboardEvent) => {
107
183
  if (isDisabled()) return;
108
184
 
109
- if (e.key === 'Delete' || e.key === 'Backspace') {
185
+ switch (e.key) {
186
+ case "ArrowRight":
187
+ case "ArrowDown":
188
+ e.preventDefault();
189
+ focusKey(getNextFocusableKey(key()));
190
+ return;
191
+ case "ArrowLeft":
192
+ case "ArrowUp":
193
+ e.preventDefault();
194
+ focusKey(getPreviousFocusableKey(key()));
195
+ return;
196
+ case "Home":
197
+ e.preventDefault();
198
+ focusKey(getFirstFocusableKey());
199
+ return;
200
+ case "End":
201
+ e.preventDefault();
202
+ focusKey(getLastFocusableKey());
203
+ return;
204
+ default:
205
+ break;
206
+ }
207
+
208
+ if (e.key === "Delete" || e.key === "Backspace") {
110
209
  e.preventDefault();
111
210
  const data = getData();
112
211
  if (data?.onRemove) {
113
212
  // Remove selected keys if this tag is selected, otherwise just this tag
114
213
  if (isSelected()) {
115
214
  const selection = state.selectedKeys();
116
- const keysToRemove = selection === 'all'
117
- ? new Set(Array.from(state.collection()).map(item => (item as { key: Key }).key))
118
- : new Set(selection);
215
+ const keysToRemove =
216
+ selection === "all"
217
+ ? new Set(Array.from(state.collection()).map((item) => (item as { key: Key }).key))
218
+ : new Set(selection);
119
219
  data.onRemove(keysToRemove);
120
220
  } else {
121
221
  data.onRemove(new Set([key()]));
@@ -127,10 +227,35 @@ export function createTag<T>(
127
227
  // Compute tabIndex
128
228
  const tabIndex = createMemo(() => {
129
229
  if (isDisabled()) return -1;
130
- // If this is the focused item, or if nothing is focused yet
131
- if (isFocused() || state.focusedKey() === null) {
230
+
231
+ if (isFocused()) {
132
232
  return 0;
133
233
  }
234
+
235
+ if (state.focusedKey() !== null) {
236
+ return -1;
237
+ }
238
+
239
+ const collection = state.collection();
240
+ let defaultTabStop: Key | null = null;
241
+
242
+ if (state.selectionMode() !== "none") {
243
+ for (const item of collection) {
244
+ if (!state.isDisabled(item.key) && state.isSelected(item.key)) {
245
+ defaultTabStop = item.key;
246
+ break;
247
+ }
248
+ }
249
+ }
250
+
251
+ if (defaultTabStop == null) {
252
+ defaultTabStop = getFirstFocusableKey();
253
+ }
254
+
255
+ if (key() === defaultTabStop) {
256
+ return 0;
257
+ }
258
+
134
259
  return -1;
135
260
  });
136
261
 
@@ -145,28 +270,34 @@ export function createTag<T>(
145
270
 
146
271
  return {
147
272
  get rowProps() {
148
- return mergeProps(domProps(), focusableProps as Record<string, unknown>, pressProps as Record<string, unknown>, {
149
- id: rowId,
150
- role: 'row',
151
- tabIndex: tabIndex(),
152
- 'aria-selected': isSelected(),
153
- 'aria-disabled': isDisabled() || undefined,
154
- onKeyDown: handleKeyDown,
155
- });
273
+ return mergeProps(
274
+ domProps(),
275
+ focusableProps as Record<string, unknown>,
276
+ pressProps as Record<string, unknown>,
277
+ {
278
+ id: rowId,
279
+ role: "row",
280
+ tabIndex: tabIndex(),
281
+ "data-key": String(key()),
282
+ "aria-selected": isSelectable() ? isSelected() : undefined,
283
+ "aria-disabled": isDisabled() || undefined,
284
+ onKeyDown: handleKeyDown,
285
+ },
286
+ );
156
287
  },
157
288
  get gridCellProps() {
158
289
  return {
159
290
  id: cellId,
160
- role: 'gridcell',
161
- 'aria-describedby': allowsRemoving() ? removeButtonId : undefined,
291
+ role: "gridcell",
292
+ "aria-describedby": allowsRemoving() ? removeButtonId : undefined,
162
293
  };
163
294
  },
164
295
  get removeButtonProps() {
165
296
  const data = getData();
166
297
  return {
167
298
  id: removeButtonId,
168
- 'aria-label': 'Remove',
169
- 'aria-labelledby': `${removeButtonId} ${rowId}`,
299
+ "aria-label": "Remove",
300
+ "aria-labelledby": `${removeButtonId} ${rowId}`,
170
301
  isDisabled: isDisabled(),
171
302
  onPress: () => {
172
303
  if (data?.onRemove && !isDisabled()) {
@@ -8,17 +8,13 @@
8
8
  * Based on @react-aria/tag useTagGroup
9
9
  */
10
10
 
11
- import { createEffect, onCleanup } from 'solid-js';
12
- import { createLabel } from '../label/createLabel';
13
- import { filterDOMProps } from '../utils/filterDOMProps';
14
- import { mergeProps } from '../utils/mergeProps';
15
- import { createId } from '../ssr';
16
- import { access, type MaybeAccessor } from '../utils/reactivity';
17
- import type { ListState, Key } from '@proyecto-viviana/solid-stately';
18
-
19
- // ============================================
20
- // TYPES
21
- // ============================================
11
+ import { createEffect, onCleanup } from "solid-js";
12
+ import { createLabel } from "../label/createLabel";
13
+ import { filterDOMProps } from "../utils/filterDOMProps";
14
+ import { mergeProps } from "../utils/mergeProps";
15
+ import { createId } from "../ssr";
16
+ import { access, type MaybeAccessor } from "../utils/reactivity";
17
+ import type { ListState, Key } from "@proyecto-viviana/solid-stately";
22
18
 
23
19
  export interface AriaTagGroupProps {
24
20
  /** An ID for the tag group. */
@@ -28,11 +24,11 @@ export interface AriaTagGroupProps {
28
24
  /** The label for the tag group. */
29
25
  label?: string;
30
26
  /** An accessible label for the tag group when no visible label is provided. */
31
- 'aria-label'?: string;
27
+ "aria-label"?: string;
32
28
  /** The ID of an element that labels the tag group. */
33
- 'aria-labelledby'?: string;
29
+ "aria-labelledby"?: string;
34
30
  /** The ID of an element that describes the tag group. */
35
- 'aria-describedby'?: string;
31
+ "aria-describedby"?: string;
36
32
  /** A description of the tag group. */
37
33
  description?: string;
38
34
  /** An error message for the tag group. */
@@ -64,10 +60,6 @@ export function getTagGroupData(state: ListState): TagGroupData | undefined {
64
60
  return tagGroupData.get(state);
65
61
  }
66
62
 
67
- // ============================================
68
- // IMPLEMENTATION
69
- // ============================================
70
-
71
63
  /**
72
64
  * Provides the behavior and accessibility implementation for a tag group component.
73
65
  * A tag group is a focusable list of labels, categories, keywords, filters, or other items,
@@ -76,34 +68,52 @@ export function getTagGroupData(state: ListState): TagGroupData | undefined {
76
68
  export function createTagGroup<T>(
77
69
  props: MaybeAccessor<AriaTagGroupProps>,
78
70
  state: ListState<T>,
79
- _ref?: () => HTMLElement | null
71
+ _ref?: () => HTMLElement | null,
80
72
  ): TagGroupAria {
81
73
  const getProps = () => access(props);
82
74
  const id = createId(getProps().id);
83
75
  const descriptionId = createId();
84
76
  const errorMessageId = createId();
77
+ const getFallbackAriaLabel = () => {
78
+ const p = getProps();
79
+ return !p.label && !p["aria-label"] && !p["aria-labelledby"] ? "Tag list" : undefined;
80
+ };
81
+ const sharedData: TagGroupData = {
82
+ id,
83
+ get onRemove() {
84
+ return getProps().onRemove;
85
+ },
86
+ };
85
87
 
86
88
  // Filter DOM props
87
- const domProps = () => filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
89
+ const domProps = () =>
90
+ filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
88
91
 
89
92
  // Create label handling
90
93
  const { labelProps, fieldProps } = createLabel({
91
- get label() { return getProps().label; },
92
- get 'aria-label'() { return getProps()['aria-label']; },
93
- get 'aria-labelledby'() { return getProps()['aria-labelledby']; },
94
- labelElementType: 'span',
94
+ get label() {
95
+ return getProps().label;
96
+ },
97
+ get "aria-label"() {
98
+ return getProps()["aria-label"] ?? getFallbackAriaLabel();
99
+ },
100
+ get "aria-labelledby"() {
101
+ return getProps()["aria-labelledby"];
102
+ },
103
+ labelElementType: "span",
95
104
  });
96
105
 
97
- // Share data with child tags
106
+ // Share data with child tags before they create their aria state.
107
+ tagGroupData.set(state, sharedData);
108
+
109
+ // Clean up the shared state when the tag group owner is disposed.
98
110
  createEffect(() => {
99
- const p = getProps();
100
- tagGroupData.set(state, {
101
- id,
102
- onRemove: p.onRemove,
103
- });
111
+ tagGroupData.set(state, sharedData);
104
112
 
105
113
  onCleanup(() => {
106
- tagGroupData.delete(state);
114
+ if (tagGroupData.get(state) === sharedData) {
115
+ tagGroupData.delete(state);
116
+ }
107
117
  });
108
118
  });
109
119
 
@@ -111,8 +121,8 @@ export function createTagGroup<T>(
111
121
  const getAriaDescribedBy = () => {
112
122
  const p = getProps();
113
123
  const ids: string[] = [];
114
- if (p['aria-describedby']) {
115
- ids.push(p['aria-describedby']);
124
+ if (p["aria-describedby"]) {
125
+ ids.push(p["aria-describedby"]);
116
126
  }
117
127
  if (p.description) {
118
128
  ids.push(descriptionId);
@@ -120,7 +130,7 @@ export function createTagGroup<T>(
120
130
  if (p.errorMessage) {
121
131
  ids.push(errorMessageId);
122
132
  }
123
- return ids.length > 0 ? ids.join(' ') : undefined;
133
+ return ids.length > 0 ? ids.join(" ") : undefined;
124
134
  };
125
135
 
126
136
  return {
@@ -130,11 +140,12 @@ export function createTagGroup<T>(
130
140
 
131
141
  return mergeProps(domProps(), fieldProps as Record<string, unknown>, {
132
142
  id,
133
- role: hasItems ? 'grid' : 'group',
134
- 'aria-atomic': false,
135
- 'aria-relevant': 'additions',
136
- 'aria-describedby': getAriaDescribedBy(),
137
- 'aria-disabled': p.isDisabled || undefined,
143
+ role: hasItems ? "grid" : "group",
144
+ "aria-multiselectable": hasItems && state.selectionMode() === "multiple" ? true : undefined,
145
+ "aria-atomic": false,
146
+ "aria-relevant": "additions",
147
+ "aria-describedby": getAriaDescribedBy(),
148
+ "aria-disabled": p.isDisabled || undefined,
138
149
  });
139
150
  },
140
151
  get labelProps() {
package/src/tag/index.ts CHANGED
@@ -3,10 +3,6 @@ export {
3
3
  getTagGroupData,
4
4
  type AriaTagGroupProps,
5
5
  type TagGroupAria,
6
- } from './createTagGroup';
6
+ } from "./createTagGroup";
7
7
 
8
- export {
9
- createTag,
10
- type AriaTagProps,
11
- type TagAria,
12
- } from './createTag';
8
+ export { createTag, type AriaTagProps, type TagAria } from "./createTag";
@@ -6,17 +6,13 @@
6
6
  * This is a 1:1 port of @react-aria/textfield's useTextField hook.
7
7
  */
8
8
 
9
- import { JSX } from 'solid-js';
10
- import { createField, type AriaFieldProps, type FieldAria } from '../label';
11
- import { createFocusable, type FocusableProps } from '../interactions';
12
- import { mergeProps, filterDOMProps } from '../utils';
13
- import { type MaybeAccessor, access } from '../utils/reactivity';
9
+ import { JSX } from "solid-js";
10
+ import { createField, type AriaFieldProps, type FieldAria } from "../label";
11
+ import { createFocusable, type FocusableDOMProps, type FocusableProps } from "../interactions";
12
+ import { mergeProps, filterDOMProps } from "../utils";
13
+ import { type MaybeAccessor, access } from "../utils/reactivity";
14
14
 
15
- // ============================================
16
- // TYPES
17
- // ============================================
18
-
19
- export interface AriaTextFieldProps extends AriaFieldProps, FocusableProps {
15
+ export interface AriaTextFieldProps extends AriaFieldProps, FocusableProps, FocusableDOMProps {
20
16
  /** The current value (controlled). */
21
17
  value?: string;
22
18
  /** The default value (uncontrolled). */
@@ -29,12 +25,18 @@ export interface AriaTextFieldProps extends AriaFieldProps, FocusableProps {
29
25
  isReadOnly?: boolean;
30
26
  /** Whether the input is required. */
31
27
  isRequired?: boolean;
28
+ /** Whether to use native HTML form validation or ARIA validation semantics. */
29
+ validationBehavior?: "aria" | "native";
32
30
  /** The type of input to render. */
33
- type?: 'text' | 'search' | 'url' | 'tel' | 'email' | 'password' | string;
31
+ type?: "text" | "search" | "url" | "tel" | "email" | "password" | string;
34
32
  /** The input mode hint for virtual keyboards. */
35
- inputMode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';
33
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search";
34
+ /** Hint for the enter key action on virtual keyboards. */
35
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send";
36
36
  /** The name of the input element, used when submitting an HTML form. */
37
37
  name?: string;
38
+ /** Associates the input with a form element by id. */
39
+ form?: string;
38
40
  /** Regex pattern to validate the input value. */
39
41
  pattern?: string;
40
42
  /** The maximum number of characters supported by the input. */
@@ -48,11 +50,11 @@ export interface AriaTextFieldProps extends AriaFieldProps, FocusableProps {
48
50
  /** Whether to enable auto correct. */
49
51
  autoCorrect?: string;
50
52
  /** Whether to enable spell check. */
51
- spellCheck?: 'true' | 'false';
53
+ spellCheck?: "true" | "false";
52
54
  /** Controls whether and how text input is automatically capitalized. */
53
- autoCapitalize?: 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters';
55
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters";
54
56
  /** The element type to use for the input. Defaults to 'input'. */
55
- inputElementType?: 'input' | 'textarea';
57
+ inputElementType?: "input" | "textarea";
56
58
 
57
59
  // Clipboard events
58
60
  onCopy?: JSX.EventHandler<HTMLInputElement | HTMLTextAreaElement, ClipboardEvent>;
@@ -72,17 +74,15 @@ export interface AriaTextFieldProps extends AriaFieldProps, FocusableProps {
72
74
  onInput?: JSX.EventHandler<HTMLInputElement | HTMLTextAreaElement, InputEvent>;
73
75
  }
74
76
 
75
- export interface TextFieldAria<T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement> extends Omit<FieldAria, 'fieldProps'> {
77
+ export interface TextFieldAria<
78
+ T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement,
79
+ > extends Omit<FieldAria, "fieldProps"> {
76
80
  /** Props for the input element. */
77
81
  inputProps: JSX.InputHTMLAttributes<T>;
78
82
  /** Whether the text field is invalid. */
79
83
  isInvalid: boolean;
80
84
  }
81
85
 
82
- // ============================================
83
- // IMPLEMENTATION
84
- // ============================================
85
-
86
86
  /**
87
87
  * Provides the behavior and accessibility implementation for a text field.
88
88
  * Text fields allow users to input text with a keyboard.
@@ -90,11 +90,26 @@ export interface TextFieldAria<T extends HTMLInputElement | HTMLTextAreaElement
90
90
  * @param props - Props for the text field.
91
91
  * @param ref - Optional ref callback for the input element.
92
92
  */
93
- export function createTextField<T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement>(
94
- props: MaybeAccessor<AriaTextFieldProps>,
95
- ref?: (el: T) => void
96
- ): TextFieldAria<T> {
93
+ export function createTextField<
94
+ T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement,
95
+ >(props: MaybeAccessor<AriaTextFieldProps>, ref?: (el: T) => void): TextFieldAria<T> {
97
96
  const getProps = () => access(props);
97
+ let lastInputValue: string | undefined;
98
+
99
+ const eventWithCurrentTarget = (
100
+ event: InputEvent,
101
+ element: HTMLInputElement | HTMLTextAreaElement,
102
+ ) =>
103
+ new Proxy(event, {
104
+ get(target, property, receiver) {
105
+ if (property === "target" || property === "currentTarget") {
106
+ return element;
107
+ }
108
+
109
+ const value = Reflect.get(target, property, receiver);
110
+ return typeof value === "function" ? value.bind(target) : value;
111
+ },
112
+ });
98
113
 
99
114
  // Get field accessibility props (label, description, error message)
100
115
  const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField(props);
@@ -108,41 +123,50 @@ export function createTextField<T extends HTMLInputElement | HTMLTextAreaElement
108
123
  get autoFocus() {
109
124
  return getProps().autoFocus;
110
125
  },
126
+ get excludeFromTabOrder() {
127
+ return getProps().excludeFromTabOrder;
128
+ },
111
129
  onFocus: getProps().onFocus,
112
130
  onBlur: getProps().onBlur,
113
131
  onFocusChange: getProps().onFocusChange,
114
132
  onKeyDown: getProps().onKeyDown,
115
133
  onKeyUp: getProps().onKeyUp,
116
134
  },
117
- ref as ((el: HTMLElement) => void) | undefined
135
+ ref as ((el: HTMLElement) => void) | undefined,
118
136
  );
119
137
 
120
138
  // Filter DOM props
121
- const getDomProps = () => filterDOMProps(getProps() as Record<string, unknown>, { labelable: true });
139
+ const getDomProps = () =>
140
+ filterDOMProps(getProps() as Record<string, unknown>, { labelable: true });
122
141
 
123
142
  // Build input props
124
143
  const getInputProps = (): JSX.InputHTMLAttributes<T> => {
125
144
  const p = getProps();
126
145
  const isInvalid = p.isInvalid ?? false;
127
- const isTextarea = p.inputElementType === 'textarea';
146
+ const isTextarea = p.inputElementType === "textarea";
147
+ const validationBehavior = p.validationBehavior ?? "native";
128
148
 
129
149
  return mergeProps(
130
150
  getDomProps(),
131
151
  {
132
152
  disabled: p.isDisabled,
133
153
  readOnly: p.isReadOnly,
134
- required: p.isRequired,
135
- 'aria-required': p.isRequired || undefined,
136
- 'aria-invalid': isInvalid || undefined,
137
- value: p.value ?? p.defaultValue ?? '',
154
+ required: validationBehavior === "native" && p.isRequired,
155
+ "aria-required": (validationBehavior === "aria" && p.isRequired) || undefined,
156
+ "aria-invalid": isInvalid || undefined,
157
+ value: p.value ?? p.defaultValue ?? "",
138
158
  onChange: (e: Event) => {
139
159
  const target = e.target as HTMLInputElement | HTMLTextAreaElement;
140
- p.onChange?.(target.value);
160
+ if (target.value !== lastInputValue) {
161
+ p.onChange?.(target.value);
162
+ }
141
163
  },
142
164
  // Don't include type and pattern for textarea elements
143
- type: isTextarea ? undefined : (p.type ?? 'text'),
165
+ type: isTextarea ? undefined : (p.type ?? "text"),
144
166
  inputMode: p.inputMode,
167
+ enterKeyHint: p.enterKeyHint,
145
168
  name: p.name,
169
+ form: p.form,
146
170
  pattern: isTextarea ? undefined : p.pattern,
147
171
  maxLength: p.maxLength,
148
172
  minLength: p.minLength,
@@ -167,10 +191,18 @@ export function createTextField<T extends HTMLInputElement | HTMLTextAreaElement
167
191
 
168
192
  // Input events
169
193
  onBeforeInput: p.onBeforeInput,
170
- onInput: p.onInput,
194
+ onInput: (e: InputEvent) => {
195
+ const target = e.target as HTMLInputElement | HTMLTextAreaElement;
196
+ const nextValue = target.value;
197
+ p.onInput?.(
198
+ eventWithCurrentTarget(e, target) as Parameters<NonNullable<typeof p.onInput>>[0],
199
+ );
200
+ lastInputValue = nextValue;
201
+ p.onChange?.(nextValue);
202
+ },
171
203
  },
172
204
  focusableProps as Record<string, unknown>,
173
- fieldProps as Record<string, unknown>
205
+ fieldProps as Record<string, unknown>,
174
206
  ) as JSX.InputHTMLAttributes<T>;
175
207
  };
176
208
 
@@ -1,5 +1 @@
1
- export {
2
- createTextField,
3
- type AriaTextFieldProps,
4
- type TextFieldAria,
5
- } from './createTextField';
1
+ export { createTextField, type AriaTextFieldProps, type TextFieldAria } from "./createTextField";