@proyecto-viviana/solidaria 0.2.8 → 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 (548) hide show
  1. package/README.md +31 -236
  2. package/dist/actiongroup/createActionGroup.d.ts +5 -5
  3. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  4. package/dist/actiongroup/index.d.ts +1 -1
  5. package/dist/autocomplete/createAutocomplete.d.ts +10 -10
  6. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  7. package/dist/autocomplete/index.d.ts +1 -1
  8. package/dist/autocomplete/index.d.ts.map +1 -1
  9. package/dist/breadcrumbs/createBreadcrumbs.d.ts +9 -7
  10. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  11. package/dist/breadcrumbs/index.d.ts +1 -1
  12. package/dist/button/createButton.d.ts +1 -1
  13. package/dist/button/createButton.d.ts.map +1 -1
  14. package/dist/button/createToggleButton.d.ts +3 -3
  15. package/dist/button/createToggleButtonGroup.d.ts +7 -7
  16. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  17. package/dist/button/index.d.ts +6 -6
  18. package/dist/button/index.d.ts.map +1 -1
  19. package/dist/button/types.d.ts +18 -12
  20. package/dist/button/types.d.ts.map +1 -1
  21. package/dist/calendar/createCalendar.d.ts +15 -5
  22. package/dist/calendar/createCalendar.d.ts.map +1 -1
  23. package/dist/calendar/createCalendarCell.d.ts +6 -2
  24. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  26. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  27. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  28. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendarCell.d.ts +4 -2
  30. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  31. package/dist/calendar/index.d.ts +5 -5
  32. package/dist/calendar/index.d.ts.map +1 -1
  33. package/dist/calendar/intl/index.d.ts +12 -0
  34. package/dist/calendar/intl/index.d.ts.map +1 -0
  35. package/dist/calendar/utils.d.ts +12 -0
  36. package/dist/calendar/utils.d.ts.map +1 -0
  37. package/dist/checkbox/createCheckbox.d.ts +6 -6
  38. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  39. package/dist/checkbox/createCheckboxGroup.d.ts +7 -7
  40. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  42. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  44. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  45. package/dist/checkbox/index.d.ts +8 -8
  46. package/dist/checkbox/index.d.ts.map +1 -1
  47. package/dist/collections/index.d.ts +3 -3
  48. package/dist/collections/index.d.ts.map +1 -1
  49. package/dist/color/createColorArea.d.ts +3 -3
  50. package/dist/color/createColorArea.d.ts.map +1 -1
  51. package/dist/color/createColorField.d.ts +4 -4
  52. package/dist/color/createColorField.d.ts.map +1 -1
  53. package/dist/color/createColorSlider.d.ts +4 -4
  54. package/dist/color/createColorSlider.d.ts.map +1 -1
  55. package/dist/color/createColorSwatch.d.ts +2 -2
  56. package/dist/color/createColorSwatch.d.ts.map +1 -1
  57. package/dist/color/createColorWheel.d.ts +3 -3
  58. package/dist/color/createColorWheel.d.ts.map +1 -1
  59. package/dist/color/index.d.ts +6 -6
  60. package/dist/color/types.d.ts +98 -16
  61. package/dist/color/types.d.ts.map +1 -1
  62. package/dist/combobox/createComboBox.d.ts +10 -7
  63. package/dist/combobox/createComboBox.d.ts.map +1 -1
  64. package/dist/combobox/index.d.ts +1 -1
  65. package/dist/combobox/intl/index.d.ts +1 -1
  66. package/dist/datepicker/createDateField.d.ts +18 -6
  67. package/dist/datepicker/createDateField.d.ts.map +1 -1
  68. package/dist/datepicker/createDatePicker.d.ts +51 -5
  69. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  71. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  72. package/dist/datepicker/createDateRangePicker.d.ts +8 -6
  73. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  74. package/dist/datepicker/createDateSegment.d.ts +10 -2
  75. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  76. package/dist/datepicker/createTimeField.d.ts +11 -5
  77. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeSegment.d.ts +2 -2
  79. package/dist/datepicker/createTimeSegment.d.ts.map +1 -1
  80. package/dist/datepicker/index.d.ts +7 -6
  81. package/dist/datepicker/index.d.ts.map +1 -1
  82. package/dist/dialog/createDialog.d.ts +5 -5
  83. package/dist/dialog/createDialog.d.ts.map +1 -1
  84. package/dist/dialog/index.d.ts +2 -2
  85. package/dist/dialog/index.d.ts.map +1 -1
  86. package/dist/dialog/types.d.ts +4 -4
  87. package/dist/disclosure/createDisclosure.d.ts +5 -2
  88. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  89. package/dist/disclosure/createDisclosureGroup.d.ts +4 -4
  90. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  91. package/dist/disclosure/index.d.ts +2 -2
  92. package/dist/dnd/createDrag.d.ts +2 -2
  93. package/dist/dnd/createDrag.d.ts.map +1 -1
  94. package/dist/dnd/createDraggableCollection.d.ts +2 -2
  95. package/dist/dnd/createDraggableItem.d.ts +3 -3
  96. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  97. package/dist/dnd/createDrop.d.ts +2 -2
  98. package/dist/dnd/createDrop.d.ts.map +1 -1
  99. package/dist/dnd/createDroppableCollection.d.ts +26 -6
  100. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  101. package/dist/dnd/createDroppableItem.d.ts +3 -3
  102. package/dist/dnd/index.d.ts +12 -12
  103. package/dist/dnd/index.d.ts.map +1 -1
  104. package/dist/dnd/types.d.ts +2 -2
  105. package/dist/dnd/types.d.ts.map +1 -1
  106. package/dist/dnd/utils.d.ts +1 -1
  107. package/dist/dnd/utils.d.ts.map +1 -1
  108. package/dist/focus/FocusScope.d.ts +1 -1
  109. package/dist/focus/FocusScope.d.ts.map +1 -1
  110. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  111. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  112. package/dist/focus/createVirtualFocus.d.ts +4 -4
  113. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  114. package/dist/focus/index.d.ts +4 -4
  115. package/dist/focus/index.d.ts.map +1 -1
  116. package/dist/form/createFormReset.d.ts +1 -1
  117. package/dist/form/createFormValidation.d.ts +3 -3
  118. package/dist/form/createFormValidation.d.ts.map +1 -1
  119. package/dist/form/index.d.ts +2 -2
  120. package/dist/form/index.d.ts.map +1 -1
  121. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  122. package/dist/grid/createGrid.d.ts +3 -3
  123. package/dist/grid/createGridCell.d.ts +3 -3
  124. package/dist/grid/createGridRow.d.ts +3 -3
  125. package/dist/grid/index.d.ts +5 -5
  126. package/dist/grid/types.d.ts +8 -8
  127. package/dist/gridlist/createGridList.d.ts +6 -4
  128. package/dist/gridlist/createGridList.d.ts.map +1 -1
  129. package/dist/gridlist/createGridListItem.d.ts +4 -4
  130. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  131. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  132. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  133. package/dist/gridlist/index.d.ts +4 -4
  134. package/dist/gridlist/types.d.ts +11 -7
  135. package/dist/gridlist/types.d.ts.map +1 -1
  136. package/dist/i18n/createCollator.d.ts.map +1 -1
  137. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  138. package/dist/i18n/createFilter.d.ts.map +1 -1
  139. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  140. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  141. package/dist/i18n/createStringFormatter.d.ts +2 -2
  142. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  143. package/dist/i18n/index.d.ts +8 -8
  144. package/dist/i18n/index.d.ts.map +1 -1
  145. package/dist/i18n/locale.d.ts +2 -2
  146. package/dist/i18n/locale.d.ts.map +1 -1
  147. package/dist/i18n/utils.d.ts.map +1 -1
  148. package/dist/index.d.ts +52 -51
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +18012 -16820
  151. package/dist/index.js.map +1 -1
  152. package/dist/index.jsx +18242 -0
  153. package/dist/index.jsx.map +1 -0
  154. package/dist/interactions/FocusableProvider.d.ts +2 -2
  155. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  156. package/dist/interactions/PressEvent.d.ts +2 -2
  157. package/dist/interactions/createFocus.d.ts +1 -1
  158. package/dist/interactions/createFocus.d.ts.map +1 -1
  159. package/dist/interactions/createFocusRing.d.ts +1 -1
  160. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  161. package/dist/interactions/createFocusWithin.d.ts +1 -1
  162. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  163. package/dist/interactions/createFocusable.d.ts +3 -3
  164. package/dist/interactions/createFocusable.d.ts.map +1 -1
  165. package/dist/interactions/createHover.d.ts +5 -5
  166. package/dist/interactions/createHover.d.ts.map +1 -1
  167. package/dist/interactions/createInteractionModality.d.ts +3 -3
  168. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  169. package/dist/interactions/createKeyboard.d.ts +1 -1
  170. package/dist/interactions/createLongPress.d.ts +5 -5
  171. package/dist/interactions/createMove.d.ts +5 -5
  172. package/dist/interactions/createMove.d.ts.map +1 -1
  173. package/dist/interactions/createPress.d.ts +4 -4
  174. package/dist/interactions/createPress.d.ts.map +1 -1
  175. package/dist/interactions/index.d.ts +12 -12
  176. package/dist/interactions/index.d.ts.map +1 -1
  177. package/dist/label/createField.d.ts +4 -4
  178. package/dist/label/createField.d.ts.map +1 -1
  179. package/dist/label/createLabel.d.ts +7 -7
  180. package/dist/label/createLabel.d.ts.map +1 -1
  181. package/dist/label/createLabels.d.ts +1 -1
  182. package/dist/label/createLabels.d.ts.map +1 -1
  183. package/dist/label/index.d.ts +5 -5
  184. package/dist/landmark/createLandmark.d.ts +5 -5
  185. package/dist/landmark/createLandmark.d.ts.map +1 -1
  186. package/dist/landmark/index.d.ts +1 -1
  187. package/dist/link/createLink.d.ts +14 -8
  188. package/dist/link/createLink.d.ts.map +1 -1
  189. package/dist/link/index.d.ts +1 -1
  190. package/dist/listbox/createListBox.d.ts +11 -6
  191. package/dist/listbox/createListBox.d.ts.map +1 -1
  192. package/dist/listbox/createOption.d.ts +21 -4
  193. package/dist/listbox/createOption.d.ts.map +1 -1
  194. package/dist/listbox/index.d.ts +2 -2
  195. package/dist/listbox/index.d.ts.map +1 -1
  196. package/dist/live-announcer/announce.d.ts +2 -2
  197. package/dist/live-announcer/announce.d.ts.map +1 -1
  198. package/dist/live-announcer/index.d.ts +1 -1
  199. package/dist/menu/createMenu.d.ts +7 -7
  200. package/dist/menu/createMenu.d.ts.map +1 -1
  201. package/dist/menu/createMenuItem.d.ts +16 -4
  202. package/dist/menu/createMenuItem.d.ts.map +1 -1
  203. package/dist/menu/createMenuTrigger.d.ts +4 -4
  204. package/dist/menu/index.d.ts +3 -3
  205. package/dist/menu/index.d.ts.map +1 -1
  206. package/dist/meter/createMeter.d.ts +6 -6
  207. package/dist/meter/createMeter.d.ts.map +1 -1
  208. package/dist/meter/index.d.ts +1 -1
  209. package/dist/numberfield/createNumberField.d.ts +9 -8
  210. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  211. package/dist/numberfield/index.d.ts +1 -1
  212. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  213. package/dist/overlays/createModal.d.ts +3 -3
  214. package/dist/overlays/createModal.d.ts.map +1 -1
  215. package/dist/overlays/createOverlay.d.ts +1 -1
  216. package/dist/overlays/createOverlay.d.ts.map +1 -1
  217. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  218. package/dist/overlays/index.d.ts +6 -6
  219. package/dist/overlays/index.d.ts.map +1 -1
  220. package/dist/popover/calculatePosition.d.ts +4 -4
  221. package/dist/popover/calculatePosition.d.ts.map +1 -1
  222. package/dist/popover/createOverlayPosition.d.ts +3 -3
  223. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  224. package/dist/popover/createPopover.d.ts +4 -4
  225. package/dist/popover/createPopover.d.ts.map +1 -1
  226. package/dist/popover/index.d.ts +3 -3
  227. package/dist/progress/createProgressBar.d.ts +7 -5
  228. package/dist/progress/createProgressBar.d.ts.map +1 -1
  229. package/dist/progress/index.d.ts +1 -1
  230. package/dist/radio/createRadio.d.ts +7 -7
  231. package/dist/radio/createRadio.d.ts.map +1 -1
  232. package/dist/radio/createRadioGroup.d.ts +10 -10
  233. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  234. package/dist/radio/createRadioGroupState.d.ts +3 -3
  235. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  236. package/dist/radio/index.d.ts +3 -3
  237. package/dist/radio/index.d.ts.map +1 -1
  238. package/dist/searchfield/createSearchField.d.ts +7 -7
  239. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  240. package/dist/searchfield/index.d.ts +2 -2
  241. package/dist/select/createHiddenSelect.d.ts +4 -4
  242. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  243. package/dist/select/createSelect.d.ts +14 -6
  244. package/dist/select/createSelect.d.ts.map +1 -1
  245. package/dist/select/index.d.ts +2 -2
  246. package/dist/select/index.d.ts.map +1 -1
  247. package/dist/selection/createTypeSelect.d.ts +2 -2
  248. package/dist/selection/index.d.ts +1 -1
  249. package/dist/separator/createSeparator.d.ts +9 -5
  250. package/dist/separator/createSeparator.d.ts.map +1 -1
  251. package/dist/separator/index.d.ts +1 -1
  252. package/dist/slider/createSlider.d.ts +11 -7
  253. package/dist/slider/createSlider.d.ts.map +1 -1
  254. package/dist/slider/index.d.ts +2 -2
  255. package/dist/ssr/index.d.ts +1 -1
  256. package/dist/ssr/index.d.ts.map +1 -1
  257. package/dist/steplist/createStepList.d.ts +36 -0
  258. package/dist/steplist/createStepList.d.ts.map +1 -0
  259. package/dist/steplist/index.d.ts +2 -0
  260. package/dist/steplist/index.d.ts.map +1 -0
  261. package/dist/switch/createSwitch.d.ts +6 -4
  262. package/dist/switch/createSwitch.d.ts.map +1 -1
  263. package/dist/switch/index.d.ts +1 -1
  264. package/dist/table/createTable.d.ts +3 -3
  265. package/dist/table/createTable.d.ts.map +1 -1
  266. package/dist/table/createTableCell.d.ts +3 -3
  267. package/dist/table/createTableCell.d.ts.map +1 -1
  268. package/dist/table/createTableColumnHeader.d.ts +3 -3
  269. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  270. package/dist/table/createTableColumnResize.d.ts +41 -0
  271. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  272. package/dist/table/createTableHeaderRow.d.ts +3 -3
  273. package/dist/table/createTableRow.d.ts +3 -3
  274. package/dist/table/createTableRow.d.ts.map +1 -1
  275. package/dist/table/createTableRowGroup.d.ts +2 -2
  276. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  277. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  278. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  279. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  280. package/dist/table/index.d.ts +11 -9
  281. package/dist/table/index.d.ts.map +1 -1
  282. package/dist/table/types.d.ts +15 -7
  283. package/dist/table/types.d.ts.map +1 -1
  284. package/dist/tabs/createTabs.d.ts +28 -25
  285. package/dist/tabs/createTabs.d.ts.map +1 -1
  286. package/dist/tabs/index.d.ts +1 -1
  287. package/dist/tag/createTag.d.ts +2 -2
  288. package/dist/tag/createTag.d.ts.map +1 -1
  289. package/dist/tag/createTagGroup.d.ts +5 -5
  290. package/dist/tag/createTagGroup.d.ts.map +1 -1
  291. package/dist/tag/index.d.ts +2 -2
  292. package/dist/tag/index.d.ts.map +1 -1
  293. package/dist/textfield/createTextField.d.ts +17 -11
  294. package/dist/textfield/createTextField.d.ts.map +1 -1
  295. package/dist/textfield/index.d.ts +1 -1
  296. package/dist/textfield/index.d.ts.map +1 -1
  297. package/dist/toast/createToast.d.ts +2 -2
  298. package/dist/toast/createToast.d.ts.map +1 -1
  299. package/dist/toast/createToastRegion.d.ts +5 -3
  300. package/dist/toast/createToastRegion.d.ts.map +1 -1
  301. package/dist/toast/index.d.ts +2 -2
  302. package/dist/toast/index.d.ts.map +1 -1
  303. package/dist/toggle/createToggle.d.ts +9 -9
  304. package/dist/toggle/createToggle.d.ts.map +1 -1
  305. package/dist/toggle/createToggleState.d.ts +2 -2
  306. package/dist/toggle/createToggleState.d.ts.map +1 -1
  307. package/dist/toggle/index.d.ts +4 -4
  308. package/dist/toggle/index.d.ts.map +1 -1
  309. package/dist/toolbar/createToolbar.d.ts +9 -9
  310. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  311. package/dist/toolbar/index.d.ts +1 -1
  312. package/dist/toolbar/index.d.ts.map +1 -1
  313. package/dist/tooltip/createTooltip.d.ts +5 -5
  314. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  315. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  316. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  317. package/dist/tooltip/index.d.ts +2 -2
  318. package/dist/tree/createTree.d.ts +3 -3
  319. package/dist/tree/createTree.d.ts.map +1 -1
  320. package/dist/tree/createTreeItem.d.ts +4 -4
  321. package/dist/tree/createTreeItem.d.ts.map +1 -1
  322. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  323. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  324. package/dist/tree/index.d.ts +4 -4
  325. package/dist/tree/types.d.ts +10 -6
  326. package/dist/tree/types.d.ts.map +1 -1
  327. package/dist/utils/createDescription.d.ts +2 -2
  328. package/dist/utils/createDescription.d.ts.map +1 -1
  329. package/dist/utils/dom.d.ts.map +1 -1
  330. package/dist/utils/env.d.ts.map +1 -1
  331. package/dist/utils/focus.d.ts +1 -1
  332. package/dist/utils/focus.d.ts.map +1 -1
  333. package/dist/utils/geometry.d.ts.map +1 -1
  334. package/dist/utils/index.d.ts +12 -12
  335. package/dist/utils/index.d.ts.map +1 -1
  336. package/dist/utils/mergeProps.d.ts.map +1 -1
  337. package/dist/utils/reactivity.d.ts +1 -1
  338. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  339. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  340. package/dist/visually-hidden/index.d.ts +1 -1
  341. package/package.json +32 -32
  342. package/src/actiongroup/createActionGroup.ts +101 -91
  343. package/src/actiongroup/index.ts +1 -1
  344. package/src/autocomplete/createAutocomplete.ts +117 -134
  345. package/src/autocomplete/index.ts +1 -1
  346. package/src/breadcrumbs/createBreadcrumbs.ts +33 -42
  347. package/src/breadcrumbs/index.ts +1 -1
  348. package/src/button/createButton.ts +102 -73
  349. package/src/button/createToggleButton.ts +10 -10
  350. package/src/button/createToggleButtonGroup.ts +25 -32
  351. package/src/button/index.ts +6 -9
  352. package/src/button/types.ts +18 -12
  353. package/src/calendar/createCalendar.ts +62 -29
  354. package/src/calendar/createCalendarCell.ts +98 -46
  355. package/src/calendar/createCalendarGrid.ts +57 -35
  356. package/src/calendar/createRangeCalendar.ts +66 -31
  357. package/src/calendar/createRangeCalendarCell.ts +92 -31
  358. package/src/calendar/index.ts +5 -9
  359. package/src/calendar/intl/index.ts +210 -0
  360. package/src/calendar/utils.ts +227 -0
  361. package/src/checkbox/createCheckbox.ts +13 -21
  362. package/src/checkbox/createCheckboxGroup.ts +68 -44
  363. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  364. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  365. package/src/checkbox/index.ts +8 -10
  366. package/src/collections/index.ts +33 -29
  367. package/src/color/createColorArea.ts +232 -154
  368. package/src/color/createColorField.ts +107 -58
  369. package/src/color/createColorSlider.ts +231 -73
  370. package/src/color/createColorSwatch.ts +38 -13
  371. package/src/color/createColorWheel.ts +208 -83
  372. package/src/color/index.ts +6 -6
  373. package/src/color/types.ts +98 -16
  374. package/src/combobox/createComboBox.ts +157 -100
  375. package/src/combobox/index.ts +1 -1
  376. package/src/combobox/intl/index.ts +5 -5
  377. package/src/datepicker/createDateField.ts +192 -39
  378. package/src/datepicker/createDatePicker.ts +260 -67
  379. package/src/datepicker/createDatePickerGroup.ts +149 -0
  380. package/src/datepicker/createDateRangePicker.ts +105 -57
  381. package/src/datepicker/createDateSegment.ts +183 -96
  382. package/src/datepicker/createTimeField.ts +38 -34
  383. package/src/datepicker/createTimeSegment.ts +67 -85
  384. package/src/datepicker/index.ts +13 -14
  385. package/src/dialog/createDialog.ts +45 -38
  386. package/src/dialog/index.ts +2 -2
  387. package/src/dialog/types.ts +4 -4
  388. package/src/disclosure/createDisclosure.ts +138 -33
  389. package/src/disclosure/createDisclosureGroup.ts +8 -21
  390. package/src/disclosure/index.ts +2 -2
  391. package/src/dnd/createDrag.ts +19 -25
  392. package/src/dnd/createDraggableCollection.ts +4 -4
  393. package/src/dnd/createDraggableItem.ts +20 -19
  394. package/src/dnd/createDrop.ts +42 -51
  395. package/src/dnd/createDroppableCollection.ts +290 -173
  396. package/src/dnd/createDroppableItem.ts +34 -34
  397. package/src/dnd/index.ts +23 -12
  398. package/src/dnd/types.ts +4 -7
  399. package/src/dnd/utils.ts +36 -49
  400. package/src/focus/FocusScope.tsx +155 -164
  401. package/src/focus/createAutoFocus.ts +4 -20
  402. package/src/focus/createFocusRestore.ts +15 -28
  403. package/src/focus/createVirtualFocus.ts +20 -36
  404. package/src/focus/index.ts +4 -8
  405. package/src/form/createFormReset.ts +4 -4
  406. package/src/form/createFormValidation.ts +20 -43
  407. package/src/form/index.ts +2 -5
  408. package/src/grid/GridKeyboardDelegate.ts +30 -30
  409. package/src/grid/createGrid.ts +36 -36
  410. package/src/grid/createGridCell.ts +18 -18
  411. package/src/grid/createGridRow.ts +14 -14
  412. package/src/grid/index.ts +5 -5
  413. package/src/grid/types.ts +8 -8
  414. package/src/gridlist/createGridList.ts +34 -29
  415. package/src/gridlist/createGridListItem.ts +68 -23
  416. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  417. package/src/gridlist/index.ts +4 -4
  418. package/src/gridlist/types.ts +11 -7
  419. package/src/i18n/createCollator.ts +5 -18
  420. package/src/i18n/createDateFormatter.ts +5 -13
  421. package/src/i18n/createFilter.ts +11 -24
  422. package/src/i18n/createNumberFormatter.ts +4 -6
  423. package/src/i18n/createStringFormatter.ts +19 -15
  424. package/src/i18n/index.ts +8 -11
  425. package/src/i18n/locale.tsx +15 -40
  426. package/src/i18n/utils.ts +35 -39
  427. package/src/index.ts +68 -169
  428. package/src/interactions/FocusableProvider.tsx +3 -7
  429. package/src/interactions/PressEvent.ts +4 -4
  430. package/src/interactions/createFocus.ts +12 -8
  431. package/src/interactions/createFocusRing.ts +21 -19
  432. package/src/interactions/createFocusWithin.ts +20 -13
  433. package/src/interactions/createFocusable.ts +15 -16
  434. package/src/interactions/createHover.ts +70 -55
  435. package/src/interactions/createInteractionModality.ts +75 -82
  436. package/src/interactions/createKeyboard.ts +2 -2
  437. package/src/interactions/createLongPress.ts +23 -23
  438. package/src/interactions/createMove.ts +72 -62
  439. package/src/interactions/createPress.ts +164 -87
  440. package/src/interactions/index.ts +24 -16
  441. package/src/label/createField.ts +18 -19
  442. package/src/label/createLabel.ts +18 -30
  443. package/src/label/createLabels.ts +8 -12
  444. package/src/label/index.ts +5 -5
  445. package/src/landmark/createLandmark.ts +30 -51
  446. package/src/landmark/index.ts +1 -1
  447. package/src/link/createLink.ts +83 -56
  448. package/src/link/index.ts +1 -1
  449. package/src/listbox/createListBox.ts +69 -58
  450. package/src/listbox/createOption.ts +83 -37
  451. package/src/listbox/index.ts +2 -6
  452. package/src/live-announcer/announce.ts +44 -71
  453. package/src/live-announcer/index.ts +1 -1
  454. package/src/menu/createMenu.ts +79 -50
  455. package/src/menu/createMenuItem.ts +79 -27
  456. package/src/menu/createMenuTrigger.ts +15 -15
  457. package/src/menu/index.ts +3 -12
  458. package/src/meter/createMeter.ts +7 -15
  459. package/src/meter/index.ts +1 -1
  460. package/src/numberfield/createNumberField.ts +138 -81
  461. package/src/numberfield/index.ts +1 -1
  462. package/src/overlays/ariaHideOutside.ts +14 -10
  463. package/src/overlays/createInteractOutside.ts +21 -18
  464. package/src/overlays/createModal.tsx +17 -17
  465. package/src/overlays/createOverlay.ts +38 -8
  466. package/src/overlays/createOverlayTrigger.ts +16 -16
  467. package/src/overlays/createPreventScroll.ts +46 -24
  468. package/src/overlays/index.ts +6 -17
  469. package/src/popover/calculatePosition.ts +115 -117
  470. package/src/popover/createOverlayPosition.ts +46 -40
  471. package/src/popover/createPopover.ts +42 -17
  472. package/src/popover/index.ts +3 -3
  473. package/src/progress/createProgressBar.ts +31 -32
  474. package/src/progress/index.ts +1 -1
  475. package/src/radio/createRadio.ts +95 -73
  476. package/src/radio/createRadioGroup.ts +83 -77
  477. package/src/radio/createRadioGroupState.ts +7 -31
  478. package/src/radio/index.ts +3 -8
  479. package/src/searchfield/createSearchField.ts +57 -29
  480. package/src/searchfield/index.ts +2 -2
  481. package/src/select/createHiddenSelect.tsx +57 -44
  482. package/src/select/createSelect.ts +128 -71
  483. package/src/select/index.ts +2 -7
  484. package/src/selection/createTypeSelect.ts +11 -11
  485. package/src/selection/index.ts +1 -1
  486. package/src/separator/createSeparator.ts +20 -25
  487. package/src/separator/index.ts +1 -1
  488. package/src/slider/createSlider.ts +93 -124
  489. package/src/slider/index.ts +2 -2
  490. package/src/ssr/index.tsx +8 -47
  491. package/src/steplist/createStepList.ts +106 -0
  492. package/src/steplist/index.ts +8 -0
  493. package/src/switch/createSwitch.ts +9 -14
  494. package/src/switch/index.ts +1 -1
  495. package/src/table/createTable.ts +152 -85
  496. package/src/table/createTableCell.ts +17 -16
  497. package/src/table/createTableColumnHeader.ts +67 -20
  498. package/src/table/createTableColumnResize.ts +256 -0
  499. package/src/table/createTableHeaderRow.ts +7 -7
  500. package/src/table/createTableRow.ts +149 -29
  501. package/src/table/createTableRowGroup.ts +5 -7
  502. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  503. package/src/table/createTableSelectionCheckbox.ts +8 -8
  504. package/src/table/index.ts +14 -9
  505. package/src/table/types.ts +15 -7
  506. package/src/tabs/createTabs.ts +74 -92
  507. package/src/tabs/index.ts +1 -1
  508. package/src/tag/createTag.ts +52 -50
  509. package/src/tag/createTagGroup.ts +47 -41
  510. package/src/tag/index.ts +2 -6
  511. package/src/textfield/createTextField.ts +67 -35
  512. package/src/textfield/index.ts +1 -5
  513. package/src/toast/createToast.ts +28 -26
  514. package/src/toast/createToastRegion.ts +169 -26
  515. package/src/toast/index.ts +2 -6
  516. package/src/toggle/createToggle.ts +95 -53
  517. package/src/toggle/createToggleState.ts +2 -10
  518. package/src/toggle/index.ts +4 -5
  519. package/src/toolbar/createToolbar.ts +193 -210
  520. package/src/toolbar/index.ts +1 -1
  521. package/src/tooltip/createTooltip.ts +11 -24
  522. package/src/tooltip/createTooltipTrigger.ts +61 -49
  523. package/src/tooltip/index.ts +2 -2
  524. package/src/tree/createTree.ts +35 -37
  525. package/src/tree/createTreeItem.ts +29 -29
  526. package/src/tree/createTreeSelectionCheckbox.ts +11 -8
  527. package/src/tree/index.ts +4 -4
  528. package/src/tree/types.ts +10 -6
  529. package/src/utils/createDescription.ts +6 -23
  530. package/src/utils/dom.ts +61 -54
  531. package/src/utils/env.ts +9 -11
  532. package/src/utils/events.ts +7 -7
  533. package/src/utils/filterDOMProps.ts +49 -49
  534. package/src/utils/focus.ts +60 -68
  535. package/src/utils/geometry.ts +1 -4
  536. package/src/utils/globalListeners.ts +9 -9
  537. package/src/utils/index.ts +12 -22
  538. package/src/utils/mergeProps.ts +42 -15
  539. package/src/utils/platform.ts +2 -2
  540. package/src/utils/reactivity.ts +3 -3
  541. package/src/utils/textSelection.ts +16 -16
  542. package/src/visually-hidden/createVisuallyHidden.ts +16 -28
  543. package/src/visually-hidden/index.ts +1 -1
  544. package/dist/i18n/NumberFormatter.d.ts +0 -43
  545. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  546. package/dist/index.ssr.js +0 -17082
  547. package/dist/index.ssr.js.map +0 -1
  548. package/src/i18n/NumberFormatter.ts +0 -266
@@ -4,23 +4,23 @@
4
4
  * Based on @react-aria/combobox useComboBox.
5
5
  */
6
6
 
7
- import { type JSX, type Accessor, createEffect, onCleanup } from 'solid-js';
8
- import { isServer } from 'solid-js/web';
9
- import { createPress } from '../interactions/createPress';
10
- import { createFocusRing } from '../interactions/createFocusRing';
11
- import { createLabel } from '../label/createLabel';
12
- import { filterDOMProps } from '../utils/filterDOMProps';
13
- import { mergeProps } from '../utils/mergeProps';
14
- import { createId } from '../ssr';
15
- import { access, type MaybeAccessor } from '../utils/reactivity';
16
- import { isAppleDevice } from '../utils/platform';
17
- import { openLink } from '../utils/dom';
18
- import { ariaHideOutside } from '../overlays/ariaHideOutside';
19
- import { announce } from '../live-announcer';
20
- import { createStringFormatter } from '../i18n';
21
- import { comboBoxIntlStrings } from './intl';
22
- import { isDevEnv } from '../utils/env';
23
- import type { ComboBoxState, CollectionNode, Key } from '@proyecto-viviana/solid-stately';
7
+ import { type JSX, type Accessor, createEffect, onCleanup } from "solid-js";
8
+ import { isServer } from "solid-js/web";
9
+ import { createPress } from "../interactions/createPress";
10
+ import { createFocusRing } from "../interactions/createFocusRing";
11
+ import { createLabel } from "../label/createLabel";
12
+ import { filterDOMProps } from "../utils/filterDOMProps";
13
+ import { mergeProps } from "../utils/mergeProps";
14
+ import { createId } from "../ssr";
15
+ import { access, type MaybeAccessor } from "../utils/reactivity";
16
+ import { isAppleDevice } from "../utils/platform";
17
+ import { openLink } from "../utils/dom";
18
+ import { ariaHideOutside } from "../overlays/ariaHideOutside";
19
+ import { announce } from "../live-announcer";
20
+ import { createStringFormatter } from "../i18n";
21
+ import { comboBoxIntlStrings } from "./intl";
22
+ import { isDevEnv } from "../utils/env";
23
+ import type { ComboBoxState, CollectionNode, Key } from "@proyecto-viviana/solid-stately";
24
24
 
25
25
  /**
26
26
  * Helper to count items in a collection
@@ -45,11 +45,11 @@ export interface AriaComboBoxProps {
45
45
  /** The label for the combobox. */
46
46
  label?: JSX.Element;
47
47
  /** An accessible label for the combobox when no visible label is provided. */
48
- 'aria-label'?: string;
48
+ "aria-label"?: string;
49
49
  /** The ID of an element that labels the combobox. */
50
- 'aria-labelledby'?: string;
50
+ "aria-labelledby"?: string;
51
51
  /** The ID of an element that describes the combobox. */
52
- 'aria-describedby'?: string;
52
+ "aria-describedby"?: string;
53
53
  /** Description text for assistive technology and form help. */
54
54
  description?: string;
55
55
  /** Error message text for assistive technology and validation feedback. */
@@ -68,11 +68,13 @@ export interface AriaComboBoxProps {
68
68
  onFocusChange?: (isFocused: boolean) => void;
69
69
  /** The name of the combobox, used when submitting an HTML form. */
70
70
  name?: string;
71
+ /** The form owner for the combobox input. */
72
+ form?: string;
71
73
  /**
72
74
  * Describes the type of autocomplete functionality the input should provide.
73
75
  * @default 'list'
74
76
  */
75
- autoComplete?: 'list' | 'none' | 'inline' | 'both';
77
+ autoComplete?: "list" | "none" | "inline" | "both";
76
78
  /** Whether focus should wrap from the last item to the first. */
77
79
  shouldFocusWrap?: boolean;
78
80
  }
@@ -105,6 +107,7 @@ const comboBoxData = new WeakMap<object, ComboBoxData>();
105
107
 
106
108
  interface ComboBoxData {
107
109
  id: string;
110
+ listBoxId: string;
108
111
  }
109
112
 
110
113
  export function getComboBoxData(state: ComboBoxState<unknown>): ComboBoxData | undefined {
@@ -119,7 +122,7 @@ export function createComboBox<T>(
119
122
  state: ComboBoxState<T>,
120
123
  inputRef: () => HTMLInputElement | null,
121
124
  buttonRef?: () => HTMLElement | null,
122
- listBoxRef?: () => HTMLElement | null
125
+ listBoxRef?: () => HTMLElement | null,
123
126
  ): ComboBoxAria<T> {
124
127
  const getProps = () => access(props);
125
128
  const id = createId(getProps().id);
@@ -127,9 +130,9 @@ export function createComboBox<T>(
127
130
  // Development-time warning for missing accessibility labels
128
131
  if (isDevEnv()) {
129
132
  const p = getProps();
130
- if (!p.label && !p['aria-label'] && !p['aria-labelledby']) {
133
+ if (!p.label && !p["aria-label"] && !p["aria-labelledby"]) {
131
134
  console.warn(
132
- '[solidaria] A ComboBox requires a label, aria-label, or aria-labelledby attribute for accessibility.'
135
+ "[solidaria] A ComboBox requires a label, aria-label, or aria-labelledby attribute for accessibility.",
133
136
  );
134
137
  }
135
138
  }
@@ -147,8 +150,8 @@ export function createComboBox<T>(
147
150
  const getAriaDescribedBy = () => {
148
151
  const p = getProps();
149
152
  const ids: string[] = [];
150
- if (p['aria-describedby']) {
151
- ids.push(p['aria-describedby']);
153
+ if (p["aria-describedby"]) {
154
+ ids.push(p["aria-describedby"]);
152
155
  }
153
156
  if (p.description) {
154
157
  ids.push(descriptionId);
@@ -156,13 +159,13 @@ export function createComboBox<T>(
156
159
  if (p.isInvalid && p.errorMessage) {
157
160
  ids.push(errorMessageId);
158
161
  }
159
- return ids.length > 0 ? ids.join(' ') : undefined;
162
+ return ids.length > 0 ? ids.join(" ") : undefined;
160
163
  };
161
164
 
162
165
  // Set up global pointerdown listener to track clicks inside listbox
163
166
  // This is needed because the option's createPress stops propagation
164
167
  createEffect(() => {
165
- if (typeof document === 'undefined') return;
168
+ if (typeof document === "undefined") return;
166
169
 
167
170
  const handleGlobalPointerDown = (e: PointerEvent) => {
168
171
  const target = e.target as HTMLElement;
@@ -172,20 +175,23 @@ export function createComboBox<T>(
172
175
  }
173
176
  };
174
177
 
175
- document.addEventListener('pointerdown', handleGlobalPointerDown, true);
178
+ document.addEventListener("pointerdown", handleGlobalPointerDown, true);
176
179
 
177
180
  onCleanup(() => {
178
- document.removeEventListener('pointerdown', handleGlobalPointerDown, true);
181
+ document.removeEventListener("pointerdown", handleGlobalPointerDown, true);
179
182
  });
180
183
  });
181
184
 
182
185
  // Filter DOM props
183
186
  const domProps = () =>
184
- filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
187
+ filterDOMProps(getProps() as unknown as Record<string, unknown>, {
188
+ labelable: true,
189
+ propNames: new Set(["form"]),
190
+ });
185
191
 
186
192
  // Share data with child options
187
193
  createEffect(() => {
188
- comboBoxData.set(state, { id });
194
+ comboBoxData.set(state, { id, listBoxId });
189
195
 
190
196
  onCleanup(() => {
191
197
  comboBoxData.delete(state);
@@ -200,13 +206,13 @@ export function createComboBox<T>(
200
206
  get label() {
201
207
  return getProps().label;
202
208
  },
203
- get 'aria-label'() {
204
- return getProps()['aria-label'];
209
+ get "aria-label"() {
210
+ return getProps()["aria-label"];
205
211
  },
206
- get 'aria-labelledby'() {
207
- return getProps()['aria-labelledby'];
212
+ get "aria-labelledby"() {
213
+ return getProps()["aria-labelledby"];
208
214
  },
209
- labelElementType: 'label',
215
+ labelElementType: "label",
210
216
  });
211
217
 
212
218
  // Focus ring for keyboard focus styling
@@ -240,25 +246,23 @@ export function createComboBox<T>(
240
246
  const collection = state.collection();
241
247
 
242
248
  // Get the focused item
243
- const focusedItem = focusedKey != null && isOpen
244
- ? collection.getItem(focusedKey)
245
- : null;
249
+ const focusedItem = focusedKey != null && isOpen ? collection.getItem(focusedKey) : null;
246
250
 
247
251
  // Announce focus changes on Apple devices
248
252
  if (isAppleDevice() && focusedItem != null && focusedKey !== lastFocusedKey) {
249
253
  const isSelected = state.selectedKey() === focusedKey;
250
- const optionText = focusedItem.textValue || '';
254
+ const optionText = focusedItem.textValue || "";
251
255
 
252
256
  // For now, we don't support sections, so isGroupChange is always false
253
- const announcement = stringFormatter().format('focusAnnouncement', {
257
+ const announcement = stringFormatter().format("focusAnnouncement", {
254
258
  isGroupChange: false,
255
- groupTitle: '',
259
+ groupTitle: "",
256
260
  groupCount: 0,
257
261
  optionText,
258
262
  isSelected,
259
263
  });
260
264
 
261
- announce(announcement, 'polite');
265
+ announce(announcement, "polite");
262
266
  }
263
267
 
264
268
  lastFocusedKey = focusedKey;
@@ -277,12 +281,11 @@ export function createComboBox<T>(
277
281
  // focused item, otherwise screen readers will typically read e.g. "1 of 6".
278
282
  // The exception is VoiceOver since this isn't included in the message above.
279
283
  const didOpenWithoutFocusedItem =
280
- isOpen !== lastIsOpen &&
281
- (focusedKey == null || isAppleDevice());
284
+ isOpen !== lastIsOpen && (focusedKey == null || isAppleDevice());
282
285
 
283
286
  if (isOpen && (didOpenWithoutFocusedItem || optionCount !== lastOptionCount)) {
284
- const announcement = stringFormatter().format('countAnnouncement', { optionCount });
285
- announce(announcement, 'polite');
287
+ const announcement = stringFormatter().format("countAnnouncement", { optionCount });
288
+ announce(announcement, "polite");
286
289
  }
287
290
 
288
291
  lastOptionCount = optionCount;
@@ -297,9 +300,9 @@ export function createComboBox<T>(
297
300
  const selectedItem = state.selectedItem();
298
301
 
299
302
  if (isAppleDevice() && state.isFocused() && selectedItem && selectedKey !== lastSelectedKey) {
300
- const optionText = selectedItem.textValue || '';
301
- const announcement = stringFormatter().format('selectedAnnouncement', { optionText });
302
- announce(announcement, 'polite');
303
+ const optionText = selectedItem.textValue || "";
304
+ const announcement = stringFormatter().format("selectedAnnouncement", { optionText });
305
+ announce(announcement, "polite");
303
306
  }
304
307
 
305
308
  lastSelectedKey = selectedKey;
@@ -325,14 +328,52 @@ export function createComboBox<T>(
325
328
  });
326
329
 
327
330
  // Handle press on button trigger
331
+ let wasOpenOnButtonPressStart = false;
332
+ const scheduleButtonOpenFallback = (startedOpen: boolean) => {
333
+ if (startedOpen) {
334
+ return;
335
+ }
336
+
337
+ setTimeout(() => {
338
+ const p = getProps();
339
+ const isDisabled = p.isDisabled ?? state.isDisabled;
340
+ const isReadOnly = p.isReadOnly ?? state.isReadOnly;
341
+ if (!state.isOpen() && !isDisabled && !isReadOnly) {
342
+ inputRef()?.focus();
343
+ state.open(null, "manual");
344
+ }
345
+ }, 0);
346
+ };
347
+
328
348
  const { pressProps } = createPress({
329
349
  get isDisabled() {
330
- return getProps().isDisabled ?? state.isDisabled;
350
+ return (
351
+ (getProps().isDisabled ?? state.isDisabled) || (getProps().isReadOnly ?? state.isReadOnly)
352
+ );
331
353
  },
332
- onPress() {
333
- state.toggle(null, 'manual');
334
- // Focus input after toggling
354
+ preventFocusOnPress: true,
355
+ onPressStart(e) {
356
+ if (e.pointerType === "touch") {
357
+ return;
358
+ }
359
+
360
+ wasOpenOnButtonPressStart = state.isOpen();
361
+ inputRef()?.focus();
362
+ state.toggle(
363
+ e.pointerType === "keyboard" || e.pointerType === "virtual" ? "first" : null,
364
+ "manual",
365
+ );
366
+ scheduleButtonOpenFallback(wasOpenOnButtonPressStart);
367
+ },
368
+ onPress(e) {
369
+ if (e.pointerType !== "touch") {
370
+ return;
371
+ }
372
+
373
+ wasOpenOnButtonPressStart = state.isOpen();
335
374
  inputRef()?.focus();
375
+ state.toggle(null, "manual");
376
+ scheduleButtonOpenFallback(wasOpenOnButtonPressStart);
336
377
  },
337
378
  });
338
379
 
@@ -352,21 +393,21 @@ export function createComboBox<T>(
352
393
  const shouldWrap = p.shouldFocusWrap ?? false;
353
394
 
354
395
  switch (e.key) {
355
- case 'Enter':
396
+ case "Enter":
356
397
  if (state.isOpen() && focusedKey != null) {
357
398
  e.preventDefault();
358
399
 
359
400
  // Check if the focused item is a link
360
401
  // Link href can be in props (for components) or value (for dynamic items)
361
402
  const collectionItem = collection.getItem(focusedKey);
362
- const itemHref = collectionItem?.props?.href ?? (collectionItem?.value as Record<string, unknown> | null)?.href;
403
+ const itemHref =
404
+ collectionItem?.props?.href ??
405
+ (collectionItem?.value as Record<string, unknown> | null)?.href;
363
406
  if (itemHref) {
364
407
  // Find the actual anchor element in the DOM and trigger navigation
365
408
  const listBox = listBoxRef?.();
366
409
  if (listBox) {
367
- const item = listBox.querySelector(
368
- `[data-key="${CSS.escape(String(focusedKey))}"]`
369
- );
410
+ const item = listBox.querySelector(`[data-key="${CSS.escape(String(focusedKey))}"]`);
370
411
  if (item instanceof HTMLAnchorElement) {
371
412
  openLink(item, e);
372
413
  }
@@ -378,7 +419,7 @@ export function createComboBox<T>(
378
419
  }
379
420
  break;
380
421
 
381
- case 'Escape':
422
+ case "Escape":
382
423
  if (state.isOpen()) {
383
424
  e.preventDefault();
384
425
  e.stopPropagation();
@@ -386,10 +427,10 @@ export function createComboBox<T>(
386
427
  }
387
428
  break;
388
429
 
389
- case 'ArrowDown':
430
+ case "ArrowDown":
390
431
  e.preventDefault();
391
432
  if (!state.isOpen()) {
392
- state.open('first', 'manual');
433
+ state.open("first", "manual");
393
434
  } else {
394
435
  // Move to next item
395
436
  if (focusedKey == null) {
@@ -419,10 +460,10 @@ export function createComboBox<T>(
419
460
  }
420
461
  break;
421
462
 
422
- case 'ArrowUp':
463
+ case "ArrowUp":
423
464
  e.preventDefault();
424
465
  if (!state.isOpen()) {
425
- state.open('last', 'manual');
466
+ state.open("last", "manual");
426
467
  } else {
427
468
  // Move to previous item
428
469
  if (focusedKey == null) {
@@ -452,7 +493,7 @@ export function createComboBox<T>(
452
493
  }
453
494
  break;
454
495
 
455
- case 'Home':
496
+ case "Home":
456
497
  if (state.isOpen()) {
457
498
  e.preventDefault();
458
499
  let firstKey = collection.getFirstKey();
@@ -465,7 +506,7 @@ export function createComboBox<T>(
465
506
  }
466
507
  break;
467
508
 
468
- case 'End':
509
+ case "End":
469
510
  if (state.isOpen()) {
470
511
  e.preventDefault();
471
512
  let lastKey = collection.getLastKey();
@@ -478,7 +519,18 @@ export function createComboBox<T>(
478
519
  }
479
520
  break;
480
521
 
481
- case 'Tab':
522
+ case "Backspace":
523
+ // In multiple mode, remove last selected key when input is empty
524
+ if (state.selectionMode() === "multiple" && state.inputValue() === "") {
525
+ const keys = state.selectedKeys();
526
+ if (keys.size > 0) {
527
+ const lastKey = Array.from(keys).pop()!;
528
+ state.removeSelectedKey(lastKey);
529
+ }
530
+ }
531
+ break;
532
+
533
+ case "Tab":
482
534
  // Commit on Tab if menu is open
483
535
  if (state.isOpen() && focusedKey != null) {
484
536
  state.commit();
@@ -557,7 +609,7 @@ export function createComboBox<T>(
557
609
  if (touch.clientX === centerX && touch.clientY === centerY) {
558
610
  e.preventDefault();
559
611
  inputRef()?.focus();
560
- state.toggle(null, 'manual');
612
+ state.toggle(null, "manual");
561
613
  lastEventTime = e.timeStamp;
562
614
  }
563
615
  };
@@ -579,8 +631,8 @@ export function createComboBox<T>(
579
631
  fieldProps as Record<string, unknown>,
580
632
  {
581
633
  id: inputId,
582
- type: 'text',
583
- role: 'combobox',
634
+ type: "text",
635
+ role: "combobox",
584
636
  get value() {
585
637
  return state.inputValue();
586
638
  },
@@ -588,58 +640,63 @@ export function createComboBox<T>(
588
640
  disabled: isDisabled || undefined,
589
641
  readOnly: isReadOnly || undefined,
590
642
  placeholder: p.placeholder,
591
- autoComplete: 'off',
592
- 'aria-autocomplete': p.autoComplete ?? 'list',
593
- 'aria-haspopup': 'listbox',
594
- 'aria-expanded': isOpen,
595
- 'aria-controls': isOpen ? listBoxId : undefined,
596
- 'aria-activedescendant': isOpen && focusedKey != null
597
- ? `${listBoxId}-option-${focusedKey}`
598
- : undefined,
599
- 'aria-disabled': isDisabled || undefined,
600
- 'aria-required': p.isRequired || undefined,
601
- 'aria-invalid': p.isInvalid || undefined,
602
- 'aria-describedby': getAriaDescribedBy(),
643
+ autoComplete: "off",
644
+ "aria-autocomplete": p.autoComplete ?? "list",
645
+ "aria-haspopup": "listbox",
646
+ "aria-expanded": isOpen,
647
+ "aria-controls": isOpen ? listBoxId : undefined,
648
+ "aria-activedescendant":
649
+ isOpen && focusedKey != null ? `${listBoxId}-option-${focusedKey}` : undefined,
650
+ "aria-disabled": isDisabled || undefined,
651
+ "aria-required": p.isRequired || undefined,
652
+ "aria-invalid": p.isInvalid || undefined,
653
+ "aria-describedby": getAriaDescribedBy(),
603
654
  name: p.name,
604
655
  onInput: onInputChange,
605
656
  onKeyDown: onInputKeyDown,
606
657
  onFocus: handleFocus,
607
658
  onBlur: handleBlur,
608
659
  onTouchEnd: handleTouchEnd,
609
- 'data-open': isOpen || undefined,
610
- 'data-disabled': isDisabled || undefined,
611
- 'data-readonly': isReadOnly || undefined,
612
- 'data-focus-visible': isFocusVisible() || undefined,
613
- } as Record<string, unknown>
660
+ "data-open": isOpen || undefined,
661
+ "data-disabled": isDisabled || undefined,
662
+ "data-readonly": isReadOnly || undefined,
663
+ "data-focus-visible": isFocusVisible() || undefined,
664
+ } as Record<string, unknown>,
614
665
  ) as JSX.InputHTMLAttributes<HTMLInputElement>;
615
666
  },
616
667
  get buttonProps() {
617
668
  const p = getProps();
618
669
  const isOpen = state.isOpen();
619
670
  const isDisabled = p.isDisabled ?? state.isDisabled;
671
+ const isReadOnly = p.isReadOnly ?? state.isReadOnly;
620
672
 
621
673
  return mergeProps(
622
674
  pressProps as Record<string, unknown>,
623
675
  {
624
676
  id: buttonId,
625
- type: 'button',
677
+ type: "button",
626
678
  tabIndex: -1,
627
- 'aria-haspopup': 'listbox',
628
- 'aria-expanded': isOpen,
629
- 'aria-controls': isOpen ? listBoxId : undefined,
630
- 'aria-disabled': isDisabled || undefined,
631
- 'aria-label': stringFormatter?.().format('buttonLabel') ?? 'Show suggestions',
632
- 'data-open': isOpen || undefined,
633
- 'data-disabled': isDisabled || undefined,
634
- } as Record<string, unknown>
679
+ "aria-haspopup": "listbox",
680
+ "aria-expanded": isOpen,
681
+ "aria-controls": isOpen ? listBoxId : undefined,
682
+ "aria-disabled": isDisabled || isReadOnly || undefined,
683
+ disabled: isDisabled || isReadOnly || undefined,
684
+ "aria-label": stringFormatter?.().format("buttonLabel") ?? "Show suggestions",
685
+ "data-open": isOpen || undefined,
686
+ "data-disabled": isDisabled || isReadOnly || undefined,
687
+ } as Record<string, unknown>,
635
688
  ) as JSX.HTMLAttributes<HTMLElement>;
636
689
  },
637
690
  get listBoxProps() {
691
+ const isMulti = state.selectionMode() === "multiple";
638
692
  return {
639
693
  id: listBoxId,
640
- role: 'listbox',
641
- 'aria-labelledby': inputId,
694
+ role: "listbox",
695
+ "aria-labelledby": inputId,
696
+ "aria-multiselectable": isMulti || undefined,
642
697
  tabIndex: -1,
698
+ shouldSelectOnPressUp: true,
699
+ shouldFocusOnHover: true,
643
700
  // Track pointerdown inside listbox to prevent blur from closing
644
701
  // Use capture phase because createPress calls stopPropagation on pointerdown
645
702
  onPointerDownCapture: () => {
@@ -659,7 +716,7 @@ export function createComboBox<T>(
659
716
  get errorMessageProps() {
660
717
  return {
661
718
  id: errorMessageId,
662
- role: 'alert',
719
+ role: "alert",
663
720
  } as JSX.HTMLAttributes<HTMLElement>;
664
721
  },
665
722
  isFocused,
@@ -3,4 +3,4 @@ export {
3
3
  getComboBoxData,
4
4
  type AriaComboBoxProps,
5
5
  type ComboBoxAria,
6
- } from './createComboBox';
6
+ } from "./createComboBox";
@@ -3,11 +3,11 @@
3
3
  * Based on @react-aria/combobox/intl
4
4
  */
5
5
 
6
- import type { LocalizedStrings } from '@internationalized/string';
6
+ import type { LocalizedStrings } from "@internationalized/string";
7
7
 
8
8
  // Import locale files
9
- import enUS from './en-US.json' with { type: 'json' };
10
- import esES from './es-ES.json' with { type: 'json' };
9
+ import enUS from "./en-US.json" with { type: "json" };
10
+ import esES from "./es-ES.json" with { type: "json" };
11
11
 
12
12
  export type ComboBoxIntlStrings = {
13
13
  focusAnnouncement: string;
@@ -18,6 +18,6 @@ export type ComboBoxIntlStrings = {
18
18
  };
19
19
 
20
20
  export const comboBoxIntlStrings: LocalizedStrings<keyof ComboBoxIntlStrings, string> = {
21
- 'en-US': enUS,
22
- 'es-ES': esES,
21
+ "en-US": enUS,
22
+ "es-ES": esES,
23
23
  };