@proyecto-viviana/solidaria 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -236
  3. package/dist/actiongroup/createActionGroup.d.ts +29 -0
  4. package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
  5. package/dist/actiongroup/index.d.ts +2 -0
  6. package/dist/actiongroup/index.d.ts.map +1 -0
  7. package/dist/autocomplete/createAutocomplete.d.ts +16 -12
  8. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  9. package/dist/autocomplete/index.d.ts +1 -1
  10. package/dist/autocomplete/index.d.ts.map +1 -1
  11. package/dist/breadcrumbs/createBreadcrumbs.d.ts +11 -7
  12. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  13. package/dist/breadcrumbs/index.d.ts +1 -1
  14. package/dist/button/createButton.d.ts +1 -1
  15. package/dist/button/createButton.d.ts.map +1 -1
  16. package/dist/button/createToggleButton.d.ts +3 -3
  17. package/dist/button/createToggleButtonGroup.d.ts +32 -0
  18. package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
  19. package/dist/button/index.d.ts +6 -4
  20. package/dist/button/index.d.ts.map +1 -1
  21. package/dist/button/types.d.ts +18 -12
  22. package/dist/button/types.d.ts.map +1 -1
  23. package/dist/calendar/createCalendar.d.ts +15 -5
  24. package/dist/calendar/createCalendar.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarCell.d.ts +8 -2
  26. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  27. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  28. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  30. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  31. package/dist/calendar/createRangeCalendarCell.d.ts +7 -3
  32. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  33. package/dist/calendar/index.d.ts +5 -5
  34. package/dist/calendar/index.d.ts.map +1 -1
  35. package/dist/calendar/intl/index.d.ts +12 -0
  36. package/dist/calendar/intl/index.d.ts.map +1 -0
  37. package/dist/calendar/utils.d.ts +12 -0
  38. package/dist/calendar/utils.d.ts.map +1 -0
  39. package/dist/checkbox/createCheckbox.d.ts +6 -6
  40. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroup.d.ts +11 -7
  42. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  44. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  45. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  46. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  47. package/dist/checkbox/index.d.ts +8 -8
  48. package/dist/checkbox/index.d.ts.map +1 -1
  49. package/dist/collections/index.d.ts +56 -0
  50. package/dist/collections/index.d.ts.map +1 -0
  51. package/dist/color/createColorArea.d.ts +3 -3
  52. package/dist/color/createColorArea.d.ts.map +1 -1
  53. package/dist/color/createColorField.d.ts +4 -4
  54. package/dist/color/createColorField.d.ts.map +1 -1
  55. package/dist/color/createColorSlider.d.ts +4 -4
  56. package/dist/color/createColorSlider.d.ts.map +1 -1
  57. package/dist/color/createColorSwatch.d.ts +2 -2
  58. package/dist/color/createColorSwatch.d.ts.map +1 -1
  59. package/dist/color/createColorWheel.d.ts +3 -3
  60. package/dist/color/createColorWheel.d.ts.map +1 -1
  61. package/dist/color/index.d.ts +6 -6
  62. package/dist/color/types.d.ts +98 -16
  63. package/dist/color/types.d.ts.map +1 -1
  64. package/dist/combobox/createComboBox.d.ts +16 -7
  65. package/dist/combobox/createComboBox.d.ts.map +1 -1
  66. package/dist/combobox/index.d.ts +1 -1
  67. package/dist/combobox/intl/index.d.ts +1 -1
  68. package/dist/datepicker/createDateField.d.ts +18 -6
  69. package/dist/datepicker/createDateField.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePicker.d.ts +57 -5
  71. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  72. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  73. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  74. package/dist/datepicker/createDateRangePicker.d.ts +42 -0
  75. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
  76. package/dist/datepicker/createDateSegment.d.ts +11 -3
  77. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeField.d.ts +11 -5
  79. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  80. package/dist/datepicker/createTimeSegment.d.ts +29 -0
  81. package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
  82. package/dist/datepicker/index.d.ts +7 -4
  83. package/dist/datepicker/index.d.ts.map +1 -1
  84. package/dist/dialog/createDialog.d.ts +5 -5
  85. package/dist/dialog/createDialog.d.ts.map +1 -1
  86. package/dist/dialog/index.d.ts +2 -2
  87. package/dist/dialog/index.d.ts.map +1 -1
  88. package/dist/dialog/types.d.ts +4 -4
  89. package/dist/disclosure/createDisclosure.d.ts +5 -2
  90. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  91. package/dist/disclosure/createDisclosureGroup.d.ts +4 -3
  92. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  93. package/dist/disclosure/index.d.ts +2 -2
  94. package/dist/dnd/createDrag.d.ts +2 -2
  95. package/dist/dnd/createDrag.d.ts.map +1 -1
  96. package/dist/dnd/createDraggableCollection.d.ts +6 -2
  97. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  98. package/dist/dnd/createDraggableItem.d.ts +3 -3
  99. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  100. package/dist/dnd/createDrop.d.ts +2 -2
  101. package/dist/dnd/createDrop.d.ts.map +1 -1
  102. package/dist/dnd/createDroppableCollection.d.ts +55 -4
  103. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  104. package/dist/dnd/createDroppableItem.d.ts +3 -3
  105. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  106. package/dist/dnd/index.d.ts +12 -12
  107. package/dist/dnd/index.d.ts.map +1 -1
  108. package/dist/dnd/types.d.ts +2 -2
  109. package/dist/dnd/types.d.ts.map +1 -1
  110. package/dist/dnd/utils.d.ts +1 -1
  111. package/dist/dnd/utils.d.ts.map +1 -1
  112. package/dist/focus/FocusScope.d.ts +1 -1
  113. package/dist/focus/FocusScope.d.ts.map +1 -1
  114. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  115. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  116. package/dist/focus/createVirtualFocus.d.ts +4 -4
  117. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  118. package/dist/focus/index.d.ts +4 -4
  119. package/dist/focus/index.d.ts.map +1 -1
  120. package/dist/form/createFormReset.d.ts +1 -1
  121. package/dist/form/createFormValidation.d.ts +3 -3
  122. package/dist/form/createFormValidation.d.ts.map +1 -1
  123. package/dist/form/index.d.ts +2 -2
  124. package/dist/form/index.d.ts.map +1 -1
  125. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  126. package/dist/grid/createGrid.d.ts +3 -3
  127. package/dist/grid/createGrid.d.ts.map +1 -1
  128. package/dist/grid/createGridCell.d.ts +3 -3
  129. package/dist/grid/createGridRow.d.ts +3 -3
  130. package/dist/grid/index.d.ts +5 -5
  131. package/dist/grid/types.d.ts +8 -8
  132. package/dist/gridlist/createGridList.d.ts +6 -4
  133. package/dist/gridlist/createGridList.d.ts.map +1 -1
  134. package/dist/gridlist/createGridListItem.d.ts +4 -4
  135. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  136. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  137. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  138. package/dist/gridlist/index.d.ts +4 -4
  139. package/dist/gridlist/types.d.ts +11 -7
  140. package/dist/gridlist/types.d.ts.map +1 -1
  141. package/dist/i18n/createCollator.d.ts.map +1 -1
  142. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  143. package/dist/i18n/createFilter.d.ts.map +1 -1
  144. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  145. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  146. package/dist/i18n/createStringFormatter.d.ts +2 -2
  147. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  148. package/dist/i18n/index.d.ts +8 -8
  149. package/dist/i18n/index.d.ts.map +1 -1
  150. package/dist/i18n/locale.d.ts +2 -2
  151. package/dist/i18n/locale.d.ts.map +1 -1
  152. package/dist/i18n/utils.d.ts.map +1 -1
  153. package/dist/index.d.ts +52 -49
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +18089 -15690
  156. package/dist/index.js.map +1 -7
  157. package/dist/index.jsx +18242 -0
  158. package/dist/index.jsx.map +1 -0
  159. package/dist/interactions/FocusableProvider.d.ts +2 -2
  160. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  161. package/dist/interactions/PressEvent.d.ts +2 -2
  162. package/dist/interactions/createFocus.d.ts +1 -1
  163. package/dist/interactions/createFocus.d.ts.map +1 -1
  164. package/dist/interactions/createFocusRing.d.ts +1 -1
  165. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  166. package/dist/interactions/createFocusWithin.d.ts +1 -1
  167. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  168. package/dist/interactions/createFocusable.d.ts +3 -3
  169. package/dist/interactions/createFocusable.d.ts.map +1 -1
  170. package/dist/interactions/createHover.d.ts +5 -5
  171. package/dist/interactions/createHover.d.ts.map +1 -1
  172. package/dist/interactions/createInteractionModality.d.ts +3 -3
  173. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  174. package/dist/interactions/createKeyboard.d.ts +1 -1
  175. package/dist/interactions/createLongPress.d.ts +5 -5
  176. package/dist/interactions/createMove.d.ts +5 -5
  177. package/dist/interactions/createMove.d.ts.map +1 -1
  178. package/dist/interactions/createPress.d.ts +4 -4
  179. package/dist/interactions/createPress.d.ts.map +1 -1
  180. package/dist/interactions/index.d.ts +12 -12
  181. package/dist/interactions/index.d.ts.map +1 -1
  182. package/dist/label/createField.d.ts +4 -4
  183. package/dist/label/createField.d.ts.map +1 -1
  184. package/dist/label/createLabel.d.ts +7 -7
  185. package/dist/label/createLabel.d.ts.map +1 -1
  186. package/dist/label/createLabels.d.ts +1 -1
  187. package/dist/label/createLabels.d.ts.map +1 -1
  188. package/dist/label/index.d.ts +5 -5
  189. package/dist/landmark/createLandmark.d.ts +5 -5
  190. package/dist/landmark/createLandmark.d.ts.map +1 -1
  191. package/dist/landmark/index.d.ts +1 -1
  192. package/dist/link/createLink.d.ts +23 -7
  193. package/dist/link/createLink.d.ts.map +1 -1
  194. package/dist/link/index.d.ts +1 -1
  195. package/dist/listbox/createListBox.d.ts +12 -6
  196. package/dist/listbox/createListBox.d.ts.map +1 -1
  197. package/dist/listbox/createOption.d.ts +21 -4
  198. package/dist/listbox/createOption.d.ts.map +1 -1
  199. package/dist/listbox/index.d.ts +2 -2
  200. package/dist/listbox/index.d.ts.map +1 -1
  201. package/dist/live-announcer/announce.d.ts +2 -2
  202. package/dist/live-announcer/announce.d.ts.map +1 -1
  203. package/dist/live-announcer/index.d.ts +1 -1
  204. package/dist/menu/createMenu.d.ts +8 -7
  205. package/dist/menu/createMenu.d.ts.map +1 -1
  206. package/dist/menu/createMenuItem.d.ts +16 -4
  207. package/dist/menu/createMenuItem.d.ts.map +1 -1
  208. package/dist/menu/createMenuTrigger.d.ts +4 -4
  209. package/dist/menu/index.d.ts +3 -3
  210. package/dist/menu/index.d.ts.map +1 -1
  211. package/dist/meter/createMeter.d.ts +6 -6
  212. package/dist/meter/createMeter.d.ts.map +1 -1
  213. package/dist/meter/index.d.ts +1 -1
  214. package/dist/numberfield/createNumberField.d.ts +27 -8
  215. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  216. package/dist/numberfield/index.d.ts +1 -1
  217. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  218. package/dist/overlays/createModal.d.ts +19 -3
  219. package/dist/overlays/createModal.d.ts.map +1 -1
  220. package/dist/overlays/createOverlay.d.ts +1 -1
  221. package/dist/overlays/createOverlay.d.ts.map +1 -1
  222. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  223. package/dist/overlays/index.d.ts +6 -6
  224. package/dist/overlays/index.d.ts.map +1 -1
  225. package/dist/popover/calculatePosition.d.ts +4 -4
  226. package/dist/popover/calculatePosition.d.ts.map +1 -1
  227. package/dist/popover/createOverlayPosition.d.ts +3 -3
  228. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  229. package/dist/popover/createPopover.d.ts +4 -4
  230. package/dist/popover/createPopover.d.ts.map +1 -1
  231. package/dist/popover/index.d.ts +3 -3
  232. package/dist/progress/createProgressBar.d.ts +7 -5
  233. package/dist/progress/createProgressBar.d.ts.map +1 -1
  234. package/dist/progress/index.d.ts +1 -1
  235. package/dist/radio/createRadio.d.ts +7 -7
  236. package/dist/radio/createRadio.d.ts.map +1 -1
  237. package/dist/radio/createRadioGroup.d.ts +11 -11
  238. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  239. package/dist/radio/createRadioGroupState.d.ts +3 -3
  240. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  241. package/dist/radio/index.d.ts +3 -3
  242. package/dist/radio/index.d.ts.map +1 -1
  243. package/dist/searchfield/createSearchField.d.ts +7 -7
  244. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  245. package/dist/searchfield/index.d.ts +2 -2
  246. package/dist/select/createHiddenSelect.d.ts +4 -4
  247. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  248. package/dist/select/createSelect.d.ts +14 -6
  249. package/dist/select/createSelect.d.ts.map +1 -1
  250. package/dist/select/index.d.ts +2 -2
  251. package/dist/select/index.d.ts.map +1 -1
  252. package/dist/selection/createTypeSelect.d.ts +2 -2
  253. package/dist/selection/index.d.ts +1 -1
  254. package/dist/separator/createSeparator.d.ts +9 -5
  255. package/dist/separator/createSeparator.d.ts.map +1 -1
  256. package/dist/separator/index.d.ts +1 -1
  257. package/dist/slider/createSlider.d.ts +11 -7
  258. package/dist/slider/createSlider.d.ts.map +1 -1
  259. package/dist/slider/index.d.ts +2 -2
  260. package/dist/ssr/index.d.ts +1 -1
  261. package/dist/ssr/index.d.ts.map +1 -1
  262. package/dist/steplist/createStepList.d.ts +36 -0
  263. package/dist/steplist/createStepList.d.ts.map +1 -0
  264. package/dist/steplist/index.d.ts +2 -0
  265. package/dist/steplist/index.d.ts.map +1 -0
  266. package/dist/switch/createSwitch.d.ts +6 -4
  267. package/dist/switch/createSwitch.d.ts.map +1 -1
  268. package/dist/switch/index.d.ts +1 -1
  269. package/dist/table/createTable.d.ts +3 -3
  270. package/dist/table/createTable.d.ts.map +1 -1
  271. package/dist/table/createTableCell.d.ts +3 -3
  272. package/dist/table/createTableCell.d.ts.map +1 -1
  273. package/dist/table/createTableColumnHeader.d.ts +3 -3
  274. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  275. package/dist/table/createTableColumnResize.d.ts +41 -0
  276. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  277. package/dist/table/createTableHeaderRow.d.ts +3 -3
  278. package/dist/table/createTableRow.d.ts +3 -3
  279. package/dist/table/createTableRow.d.ts.map +1 -1
  280. package/dist/table/createTableRowGroup.d.ts +2 -2
  281. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  282. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  283. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  284. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  285. package/dist/table/index.d.ts +11 -9
  286. package/dist/table/index.d.ts.map +1 -1
  287. package/dist/table/types.d.ts +15 -7
  288. package/dist/table/types.d.ts.map +1 -1
  289. package/dist/tabs/createTabs.d.ts +28 -25
  290. package/dist/tabs/createTabs.d.ts.map +1 -1
  291. package/dist/tabs/index.d.ts +1 -1
  292. package/dist/tag/createTag.d.ts +2 -2
  293. package/dist/tag/createTag.d.ts.map +1 -1
  294. package/dist/tag/createTagGroup.d.ts +5 -5
  295. package/dist/tag/createTagGroup.d.ts.map +1 -1
  296. package/dist/tag/index.d.ts +2 -2
  297. package/dist/tag/index.d.ts.map +1 -1
  298. package/dist/textfield/createTextField.d.ts +17 -11
  299. package/dist/textfield/createTextField.d.ts.map +1 -1
  300. package/dist/textfield/index.d.ts +1 -1
  301. package/dist/textfield/index.d.ts.map +1 -1
  302. package/dist/toast/createToast.d.ts +6 -2
  303. package/dist/toast/createToast.d.ts.map +1 -1
  304. package/dist/toast/createToastRegion.d.ts +5 -3
  305. package/dist/toast/createToastRegion.d.ts.map +1 -1
  306. package/dist/toast/index.d.ts +2 -2
  307. package/dist/toast/index.d.ts.map +1 -1
  308. package/dist/toggle/createToggle.d.ts +9 -9
  309. package/dist/toggle/createToggle.d.ts.map +1 -1
  310. package/dist/toggle/createToggleState.d.ts +2 -2
  311. package/dist/toggle/createToggleState.d.ts.map +1 -1
  312. package/dist/toggle/index.d.ts +4 -4
  313. package/dist/toggle/index.d.ts.map +1 -1
  314. package/dist/toolbar/createToolbar.d.ts +9 -9
  315. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  316. package/dist/toolbar/index.d.ts +1 -1
  317. package/dist/toolbar/index.d.ts.map +1 -1
  318. package/dist/tooltip/createTooltip.d.ts +5 -5
  319. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  320. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  321. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  322. package/dist/tooltip/index.d.ts +2 -2
  323. package/dist/tree/createTree.d.ts +3 -3
  324. package/dist/tree/createTree.d.ts.map +1 -1
  325. package/dist/tree/createTreeItem.d.ts +4 -4
  326. package/dist/tree/createTreeItem.d.ts.map +1 -1
  327. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  328. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  329. package/dist/tree/index.d.ts +4 -4
  330. package/dist/tree/types.d.ts +13 -5
  331. package/dist/tree/types.d.ts.map +1 -1
  332. package/dist/utils/createDescription.d.ts +2 -2
  333. package/dist/utils/createDescription.d.ts.map +1 -1
  334. package/dist/utils/dom.d.ts.map +1 -1
  335. package/dist/utils/env.d.ts +1 -1
  336. package/dist/utils/env.d.ts.map +1 -1
  337. package/dist/utils/focus.d.ts +1 -1
  338. package/dist/utils/focus.d.ts.map +1 -1
  339. package/dist/utils/geometry.d.ts.map +1 -1
  340. package/dist/utils/index.d.ts +12 -12
  341. package/dist/utils/index.d.ts.map +1 -1
  342. package/dist/utils/mergeProps.d.ts.map +1 -1
  343. package/dist/utils/platform.d.ts.map +1 -1
  344. package/dist/utils/reactivity.d.ts +1 -1
  345. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  346. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  347. package/dist/visually-hidden/index.d.ts +1 -1
  348. package/package.json +34 -32
  349. package/src/actiongroup/createActionGroup.ts +334 -0
  350. package/src/actiongroup/index.ts +8 -0
  351. package/src/autocomplete/createAutocomplete.ts +137 -131
  352. package/src/autocomplete/index.ts +1 -1
  353. package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
  354. package/src/breadcrumbs/index.ts +1 -1
  355. package/src/button/createButton.ts +102 -73
  356. package/src/button/createToggleButton.ts +10 -10
  357. package/src/button/createToggleButtonGroup.ts +121 -0
  358. package/src/button/index.ts +10 -4
  359. package/src/button/types.ts +18 -12
  360. package/src/calendar/createCalendar.ts +62 -29
  361. package/src/calendar/createCalendarCell.ts +102 -48
  362. package/src/calendar/createCalendarGrid.ts +78 -47
  363. package/src/calendar/createRangeCalendar.ts +66 -31
  364. package/src/calendar/createRangeCalendarCell.ts +115 -37
  365. package/src/calendar/index.ts +5 -9
  366. package/src/calendar/intl/index.ts +210 -0
  367. package/src/calendar/utils.ts +227 -0
  368. package/src/checkbox/createCheckbox.ts +13 -21
  369. package/src/checkbox/createCheckboxGroup.ts +86 -45
  370. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  371. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  372. package/src/checkbox/index.ts +8 -10
  373. package/src/collections/index.ts +246 -0
  374. package/src/color/createColorArea.ts +458 -314
  375. package/src/color/createColorField.ts +186 -137
  376. package/src/color/createColorSlider.ts +444 -197
  377. package/src/color/createColorSwatch.ts +65 -40
  378. package/src/color/createColorWheel.ts +343 -208
  379. package/src/color/index.ts +24 -24
  380. package/src/color/types.ts +198 -116
  381. package/src/combobox/createComboBox.ts +727 -647
  382. package/src/combobox/index.ts +6 -6
  383. package/src/combobox/intl/index.ts +5 -5
  384. package/src/datepicker/createDateField.ts +192 -39
  385. package/src/datepicker/createDatePicker.ts +294 -63
  386. package/src/datepicker/createDatePickerGroup.ts +149 -0
  387. package/src/datepicker/createDateRangePicker.ts +294 -0
  388. package/src/datepicker/createDateSegment.ts +316 -75
  389. package/src/datepicker/createTimeField.ts +38 -34
  390. package/src/datepicker/createTimeSegment.ts +352 -0
  391. package/src/datepicker/index.ts +24 -11
  392. package/src/dialog/createDialog.ts +127 -120
  393. package/src/dialog/index.ts +2 -2
  394. package/src/dialog/types.ts +19 -19
  395. package/src/disclosure/createDisclosure.ts +138 -33
  396. package/src/disclosure/createDisclosureGroup.ts +8 -18
  397. package/src/disclosure/index.ts +2 -2
  398. package/src/dnd/createDrag.ts +218 -209
  399. package/src/dnd/createDraggableCollection.ts +96 -63
  400. package/src/dnd/createDraggableItem.ts +260 -243
  401. package/src/dnd/createDrop.ts +313 -321
  402. package/src/dnd/createDroppableCollection.ts +799 -293
  403. package/src/dnd/createDroppableItem.ts +215 -213
  404. package/src/dnd/index.ts +66 -47
  405. package/src/dnd/types.ts +86 -89
  406. package/src/dnd/utils.ts +281 -294
  407. package/src/focus/FocusScope.tsx +155 -164
  408. package/src/focus/createAutoFocus.ts +305 -321
  409. package/src/focus/createFocusRestore.ts +300 -313
  410. package/src/focus/createVirtualFocus.ts +380 -396
  411. package/src/focus/index.ts +4 -8
  412. package/src/form/createFormReset.ts +4 -4
  413. package/src/form/createFormValidation.ts +201 -224
  414. package/src/form/index.ts +8 -11
  415. package/src/grid/GridKeyboardDelegate.ts +30 -30
  416. package/src/grid/createGrid.ts +38 -36
  417. package/src/grid/createGridCell.ts +18 -18
  418. package/src/grid/createGridRow.ts +14 -14
  419. package/src/grid/index.ts +5 -5
  420. package/src/grid/types.ts +8 -8
  421. package/src/gridlist/createGridList.ts +45 -24
  422. package/src/gridlist/createGridListItem.ts +68 -23
  423. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  424. package/src/gridlist/index.ts +4 -4
  425. package/src/gridlist/types.ts +11 -7
  426. package/src/i18n/createCollator.ts +66 -79
  427. package/src/i18n/createDateFormatter.ts +75 -83
  428. package/src/i18n/createFilter.ts +118 -131
  429. package/src/i18n/createNumberFormatter.ts +50 -52
  430. package/src/i18n/createStringFormatter.ts +19 -15
  431. package/src/i18n/index.ts +37 -40
  432. package/src/i18n/locale.tsx +163 -188
  433. package/src/i18n/utils.ts +95 -99
  434. package/src/index.ts +114 -164
  435. package/src/interactions/FocusableProvider.tsx +3 -7
  436. package/src/interactions/PressEvent.ts +4 -4
  437. package/src/interactions/createFocus.ts +16 -11
  438. package/src/interactions/createFocusRing.ts +21 -19
  439. package/src/interactions/createFocusWithin.ts +24 -16
  440. package/src/interactions/createFocusable.ts +15 -16
  441. package/src/interactions/createHover.ts +70 -55
  442. package/src/interactions/createInteractionModality.ts +75 -82
  443. package/src/interactions/createKeyboard.ts +2 -2
  444. package/src/interactions/createLongPress.ts +174 -174
  445. package/src/interactions/createMove.ts +299 -289
  446. package/src/interactions/createPress.ts +168 -91
  447. package/src/interactions/index.ts +24 -16
  448. package/src/label/createField.ts +18 -19
  449. package/src/label/createLabel.ts +18 -30
  450. package/src/label/createLabels.ts +8 -12
  451. package/src/label/index.ts +5 -5
  452. package/src/landmark/createLandmark.ts +356 -377
  453. package/src/landmark/index.ts +8 -8
  454. package/src/link/createLink.ts +96 -54
  455. package/src/link/index.ts +1 -1
  456. package/src/listbox/createListBox.ts +319 -269
  457. package/src/listbox/createOption.ts +208 -151
  458. package/src/listbox/index.ts +8 -12
  459. package/src/live-announcer/announce.ts +295 -322
  460. package/src/live-announcer/index.ts +9 -9
  461. package/src/menu/createMenu.ts +434 -396
  462. package/src/menu/createMenuItem.ts +201 -149
  463. package/src/menu/createMenuTrigger.ts +88 -88
  464. package/src/menu/index.ts +9 -18
  465. package/src/meter/createMeter.ts +7 -20
  466. package/src/meter/index.ts +1 -1
  467. package/src/numberfield/createNumberField.ts +368 -268
  468. package/src/numberfield/index.ts +5 -5
  469. package/src/overlays/ariaHideOutside.ts +223 -219
  470. package/src/overlays/createInteractOutside.ts +152 -149
  471. package/src/overlays/createModal.tsx +238 -202
  472. package/src/overlays/createOverlay.ts +195 -155
  473. package/src/overlays/createOverlayTrigger.ts +85 -85
  474. package/src/overlays/createPreventScroll.ts +288 -266
  475. package/src/overlays/index.ts +37 -44
  476. package/src/popover/calculatePosition.ts +117 -119
  477. package/src/popover/createOverlayPosition.ts +52 -43
  478. package/src/popover/createPopover.ts +63 -24
  479. package/src/popover/index.ts +3 -3
  480. package/src/progress/createProgressBar.ts +36 -32
  481. package/src/progress/index.ts +1 -1
  482. package/src/radio/createRadio.ts +95 -73
  483. package/src/radio/createRadioGroup.ts +142 -62
  484. package/src/radio/createRadioGroupState.ts +7 -31
  485. package/src/radio/index.ts +3 -8
  486. package/src/searchfield/createSearchField.ts +269 -186
  487. package/src/searchfield/index.ts +2 -2
  488. package/src/select/createHiddenSelect.tsx +276 -236
  489. package/src/select/createSelect.ts +430 -395
  490. package/src/select/index.ts +9 -14
  491. package/src/selection/createTypeSelect.ts +11 -11
  492. package/src/selection/index.ts +1 -1
  493. package/src/separator/createSeparator.ts +20 -25
  494. package/src/separator/index.ts +1 -1
  495. package/src/slider/createSlider.ts +333 -349
  496. package/src/slider/index.ts +2 -2
  497. package/src/ssr/index.tsx +331 -370
  498. package/src/steplist/createStepList.ts +106 -0
  499. package/src/steplist/index.ts +8 -0
  500. package/src/switch/createSwitch.ts +9 -14
  501. package/src/switch/index.ts +1 -1
  502. package/src/table/createTable.ts +155 -86
  503. package/src/table/createTableCell.ts +17 -16
  504. package/src/table/createTableColumnHeader.ts +67 -20
  505. package/src/table/createTableColumnResize.ts +256 -0
  506. package/src/table/createTableHeaderRow.ts +7 -7
  507. package/src/table/createTableRow.ts +149 -29
  508. package/src/table/createTableRowGroup.ts +5 -7
  509. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  510. package/src/table/createTableSelectionCheckbox.ts +8 -8
  511. package/src/table/index.ts +14 -9
  512. package/src/table/types.ts +15 -7
  513. package/src/tabs/createTabs.ts +138 -127
  514. package/src/tabs/index.ts +1 -1
  515. package/src/tag/createTag.ts +171 -40
  516. package/src/tag/createTagGroup.ts +50 -39
  517. package/src/tag/index.ts +2 -6
  518. package/src/textfield/createTextField.ts +67 -35
  519. package/src/textfield/index.ts +1 -5
  520. package/src/toast/createToast.ts +34 -26
  521. package/src/toast/createToastRegion.ts +169 -27
  522. package/src/toast/index.ts +2 -6
  523. package/src/toggle/createToggle.ts +95 -53
  524. package/src/toggle/createToggleState.ts +2 -10
  525. package/src/toggle/index.ts +4 -5
  526. package/src/toolbar/createToolbar.ts +226 -169
  527. package/src/toolbar/index.ts +1 -1
  528. package/src/tooltip/createTooltip.ts +66 -79
  529. package/src/tooltip/createTooltipTrigger.ts +238 -222
  530. package/src/tooltip/index.ts +6 -6
  531. package/src/tree/createTree.ts +259 -246
  532. package/src/tree/createTreeItem.ts +282 -233
  533. package/src/tree/createTreeSelectionCheckbox.ts +71 -68
  534. package/src/tree/index.ts +16 -16
  535. package/src/tree/types.ts +95 -87
  536. package/src/utils/createDescription.ts +6 -23
  537. package/src/utils/dom.ts +61 -54
  538. package/src/utils/env.ts +53 -54
  539. package/src/utils/events.ts +7 -7
  540. package/src/utils/filterDOMProps.ts +49 -49
  541. package/src/utils/focus.ts +60 -68
  542. package/src/utils/geometry.ts +1 -4
  543. package/src/utils/globalListeners.ts +9 -9
  544. package/src/utils/index.ts +12 -22
  545. package/src/utils/mergeProps.ts +42 -15
  546. package/src/utils/platform.ts +16 -6
  547. package/src/utils/reactivity.ts +3 -3
  548. package/src/utils/textSelection.ts +16 -16
  549. package/src/visually-hidden/createVisuallyHidden.ts +127 -124
  550. package/src/visually-hidden/index.ts +6 -6
  551. package/dist/i18n/NumberFormatter.d.ts +0 -43
  552. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  553. package/dist/index.ssr.js +0 -15875
  554. package/dist/index.ssr.js.map +0 -7
  555. package/src/i18n/NumberFormatter.ts +0 -266
@@ -0,0 +1,227 @@
1
+ import {
2
+ type CalendarDate,
3
+ DateFormatter,
4
+ endOfMonth,
5
+ isSameDay,
6
+ startOfMonth,
7
+ } from "@internationalized/date";
8
+ import type { CalendarState, RangeCalendarState } from "@proyecto-viviana/solid-stately";
9
+ import { formatCalendarLabel } from "./intl";
10
+
11
+ export interface CalendarHookData {
12
+ errorMessageId?: string;
13
+ selectedDateDescription?: string;
14
+ }
15
+
16
+ const hookData = new WeakMap<CalendarState | RangeCalendarState, CalendarHookData>();
17
+
18
+ export function setCalendarHookData(
19
+ state: CalendarState | RangeCalendarState,
20
+ data: CalendarHookData,
21
+ ): void {
22
+ hookData.set(state, data);
23
+ }
24
+
25
+ export function getCalendarHookData(
26
+ state: CalendarState | RangeCalendarState,
27
+ ): CalendarHookData | undefined {
28
+ return hookData.get(state);
29
+ }
30
+
31
+ export function getEraFormat(date: CalendarDate | undefined): "short" | undefined {
32
+ return date?.calendar.identifier === "gregory" && date.era === "BC" ? "short" : undefined;
33
+ }
34
+
35
+ export function formatVisibleRangeDescription(
36
+ startDate: CalendarDate,
37
+ endDate: CalendarDate,
38
+ timeZone: string,
39
+ locale: string,
40
+ ): string {
41
+ const era = getEraFormat(startDate) || getEraFormat(endDate);
42
+ const monthFormatter = new DateFormatter(locale, {
43
+ month: "long",
44
+ year: "numeric",
45
+ era,
46
+ calendar: startDate.calendar.identifier,
47
+ timeZone,
48
+ } as Intl.DateTimeFormatOptions);
49
+ const dateFormatter = new DateFormatter(locale, {
50
+ month: "long",
51
+ year: "numeric",
52
+ day: "numeric",
53
+ era,
54
+ calendar: startDate.calendar.identifier,
55
+ timeZone,
56
+ } as Intl.DateTimeFormatOptions);
57
+
58
+ if (isSameDay(startDate, startOfMonth(startDate))) {
59
+ const startMonth = startDate.calendar.getFormattableMonth?.(startDate) ?? startDate;
60
+ const endMonth = endDate.calendar.getFormattableMonth?.(endDate) ?? endDate;
61
+
62
+ if (isSameDay(endDate, endOfMonth(startDate))) {
63
+ return monthFormatter.format(startMonth.toDate(timeZone));
64
+ }
65
+
66
+ if (isSameDay(endDate, endOfMonth(endDate))) {
67
+ return formatRange(monthFormatter, startMonth, endMonth, timeZone);
68
+ }
69
+ }
70
+
71
+ return formatRange(dateFormatter, startDate, endDate, timeZone);
72
+ }
73
+
74
+ export function formatSelectedDateDescription(state: CalendarState | RangeCalendarState): string {
75
+ const locale = state.locale();
76
+ const timeZone = state.timeZone;
77
+ let start: CalendarDate | undefined;
78
+ let end: CalendarDate | undefined;
79
+
80
+ if ("highlightedRange" in state) {
81
+ const range = state.highlightedRange();
82
+ start = range?.start;
83
+ end = range?.end;
84
+ } else {
85
+ const value = state.value();
86
+ start = (value as CalendarDate | null) ?? undefined;
87
+ end = (value as CalendarDate | null) ?? undefined;
88
+ }
89
+
90
+ const anchorDate = "anchorDate" in state ? state.anchorDate() : null;
91
+ if (anchorDate || !start || !end) {
92
+ return "";
93
+ }
94
+
95
+ const dateFormatter = new DateFormatter(locale, {
96
+ weekday: "long",
97
+ month: "long",
98
+ year: "numeric",
99
+ day: "numeric",
100
+ era: getEraFormat(start) || getEraFormat(end),
101
+ timeZone,
102
+ } as Intl.DateTimeFormatOptions);
103
+
104
+ if (isSameDay(start, end)) {
105
+ return formatCalendarLabel(locale, "selectedDateDescription", {
106
+ date: dateFormatter.format(start.toDate(timeZone)),
107
+ });
108
+ }
109
+
110
+ return formatCalendarLabel(locale, "selectedRangeDescription", {
111
+ dateRange: formatLabelRange(dateFormatter, start, end, timeZone, locale),
112
+ });
113
+ }
114
+
115
+ function formatRange(
116
+ dateFormatter: DateFormatter,
117
+ startDate: CalendarDate,
118
+ endDate: CalendarDate,
119
+ timeZone: string,
120
+ ): string {
121
+ const formatter = dateFormatter as DateFormatter & {
122
+ formatRangeToParts?: (start: Date, end: Date) => Intl.DateTimeFormatPart[];
123
+ };
124
+ const start = startDate.toDate(timeZone);
125
+ const end = endDate.toDate(timeZone);
126
+
127
+ if (!formatter.formatRangeToParts) {
128
+ return `${dateFormatter.format(start)} to ${dateFormatter.format(end)}`;
129
+ }
130
+
131
+ const parts = formatter.formatRangeToParts(start, end) as Array<
132
+ Intl.DateTimeFormatPart & { source?: "startRange" | "shared" | "endRange" }
133
+ >;
134
+ let separatorIndex = -1;
135
+
136
+ for (let i = 0; i < parts.length; i++) {
137
+ const part = parts[i];
138
+ if (part?.source === "shared" && part.type === "literal") {
139
+ separatorIndex = i;
140
+ } else if (part?.source === "endRange") {
141
+ break;
142
+ }
143
+ }
144
+
145
+ if (separatorIndex < 0) {
146
+ return `${dateFormatter.format(start)} to ${dateFormatter.format(end)}`;
147
+ }
148
+
149
+ let startValue = "";
150
+ let endValue = "";
151
+ for (let i = 0; i < parts.length; i++) {
152
+ const part = parts[i];
153
+ if (!part) {
154
+ continue;
155
+ }
156
+
157
+ if (i < separatorIndex) {
158
+ startValue += part.value;
159
+ } else if (i > separatorIndex) {
160
+ endValue += part.value;
161
+ }
162
+ }
163
+
164
+ return `${startValue} to ${endValue}`;
165
+ }
166
+
167
+ function formatLabelRange(
168
+ dateFormatter: DateFormatter,
169
+ startDate: CalendarDate,
170
+ endDate: CalendarDate,
171
+ timeZone: string,
172
+ locale: string,
173
+ ): string {
174
+ const formatter = dateFormatter as DateFormatter & {
175
+ formatRangeToParts?: (start: Date, end: Date) => Intl.DateTimeFormatPart[];
176
+ };
177
+ const start = startDate.toDate(timeZone);
178
+ const end = endDate.toDate(timeZone);
179
+
180
+ if (!formatter.formatRangeToParts) {
181
+ return formatCalendarLabel(locale, "dateRange", {
182
+ startDate: dateFormatter.format(start),
183
+ endDate: dateFormatter.format(end),
184
+ });
185
+ }
186
+
187
+ const parts = formatter.formatRangeToParts(start, end) as Array<
188
+ Intl.DateTimeFormatPart & { source?: "startRange" | "shared" | "endRange" }
189
+ >;
190
+ let separatorIndex = -1;
191
+
192
+ for (let i = 0; i < parts.length; i++) {
193
+ const part = parts[i];
194
+ if (part?.source === "shared" && part.type === "literal") {
195
+ separatorIndex = i;
196
+ } else if (part?.source === "endRange") {
197
+ break;
198
+ }
199
+ }
200
+
201
+ if (separatorIndex < 0) {
202
+ return formatCalendarLabel(locale, "dateRange", {
203
+ startDate: dateFormatter.format(start),
204
+ endDate: dateFormatter.format(end),
205
+ });
206
+ }
207
+
208
+ let startValue = "";
209
+ let endValue = "";
210
+ for (let i = 0; i < parts.length; i++) {
211
+ const part = parts[i];
212
+ if (!part) {
213
+ continue;
214
+ }
215
+
216
+ if (i < separatorIndex) {
217
+ startValue += part.value;
218
+ } else if (i > separatorIndex) {
219
+ endValue += part.value;
220
+ }
221
+ }
222
+
223
+ return formatCalendarLabel(locale, "dateRange", {
224
+ startDate: startValue,
225
+ endDate: endValue,
226
+ });
227
+ }
@@ -8,16 +8,12 @@
8
8
  * This is a 1:1 port of @react-aria/checkbox's useCheckbox hook.
9
9
  */
10
10
 
11
- import { JSX, Accessor, createEffect } from 'solid-js';
12
- import { createToggle, type AriaToggleProps } from '../toggle';
13
- import { type ToggleState } from '@proyecto-viviana/solid-stately';
14
- import { createPress } from '../interactions/createPress';
15
- import { mergeProps } from '../utils/mergeProps';
16
- import { type MaybeAccessor, access } from '../utils/reactivity';
17
-
18
- // ============================================
19
- // TYPES
20
- // ============================================
11
+ import { JSX, Accessor, createEffect } from "solid-js";
12
+ import { createToggle, type AriaToggleProps } from "../toggle";
13
+ import { type ToggleState } from "@proyecto-viviana/solid-stately";
14
+ import { createPress } from "../interactions/createPress";
15
+ import { mergeProps } from "../utils/mergeProps";
16
+ import { type MaybeAccessor, access } from "../utils/reactivity";
21
17
 
22
18
  export interface AriaCheckboxProps extends AriaToggleProps {
23
19
  /**
@@ -31,9 +27,9 @@ export interface AriaCheckboxProps extends AriaToggleProps {
31
27
  isRequired?: boolean;
32
28
  /**
33
29
  * The validation behavior for the checkbox.
34
- * @default 'aria'
30
+ * @default 'native'
35
31
  */
36
- validationBehavior?: 'aria' | 'native';
32
+ validationBehavior?: "aria" | "native";
37
33
  }
38
34
 
39
35
  export interface CheckboxAria {
@@ -53,10 +49,6 @@ export interface CheckboxAria {
53
49
  isInvalid: boolean;
54
50
  }
55
51
 
56
- // ============================================
57
- // IMPLEMENTATION
58
- // ============================================
59
-
60
52
  /**
61
53
  * Provides the behavior and accessibility implementation for a checkbox component.
62
54
  * Checkboxes allow users to select multiple items from a list of individual items,
@@ -69,7 +61,7 @@ export interface CheckboxAria {
69
61
  export function createCheckbox(
70
62
  props: MaybeAccessor<AriaCheckboxProps>,
71
63
  state: ToggleState,
72
- inputRef: () => HTMLInputElement | null
64
+ inputRef: () => HTMLInputElement | null,
73
65
  ): CheckboxAria {
74
66
  const getProps = () => access(props);
75
67
 
@@ -114,16 +106,16 @@ export function createCheckbox(
114
106
  // Prevent label from being focused when mouse down on it.
115
107
  // Note, this does not prevent the input from being focused in the `click` event.
116
108
  onMouseDown: (e: MouseEvent) => e.preventDefault(),
117
- } as Record<string, unknown>
109
+ } as Record<string, unknown>,
118
110
  ) as JSX.LabelHTMLAttributes<HTMLLabelElement>,
119
111
  get inputProps() {
120
112
  const p = getProps();
121
- const { isRequired, validationBehavior = 'aria' } = p;
113
+ const { isRequired, validationBehavior = "native" } = p;
122
114
 
123
115
  return mergeProps(toggleResult.inputProps, {
124
116
  checked: isSelected(),
125
- 'aria-required': (isRequired && validationBehavior === 'aria') || undefined,
126
- required: isRequired && validationBehavior === 'native',
117
+ "aria-required": (isRequired && validationBehavior === "aria") || undefined,
118
+ required: isRequired && validationBehavior === "native",
127
119
  }) as JSX.InputHTMLAttributes<HTMLInputElement>;
128
120
  },
129
121
  isSelected,
@@ -7,27 +7,27 @@
7
7
  * This is a 1:1 port of @react-aria/checkbox's useCheckboxGroup hook.
8
8
  */
9
9
 
10
- import { JSX } from 'solid-js';
11
- import { createField } from '../label';
12
- import { createFocusWithin } from '../interactions/createFocusWithin';
13
- import { filterDOMProps } from '../utils/filterDOMProps';
14
- import { mergeProps } from '../utils/mergeProps';
15
- import { type MaybeAccessor, access } from '../utils/reactivity';
16
- import { type CheckboxGroupState, type CheckboxGroupProps } from '@proyecto-viviana/solid-stately';
17
-
18
- // ============================================
19
- // TYPES
20
- // ============================================
10
+ import { JSX, createEffect } from "solid-js";
11
+ import { createField } from "../label";
12
+ import { createFocusWithin } from "../interactions/createFocusWithin";
13
+ import { filterDOMProps } from "../utils/filterDOMProps";
14
+ import { mergeProps } from "../utils/mergeProps";
15
+ import { type MaybeAccessor, access } from "../utils/reactivity";
16
+ import {
17
+ type CheckboxGroupState,
18
+ type CheckboxGroupProps,
19
+ type ValidityState,
20
+ } from "@proyecto-viviana/solid-stately";
21
21
 
22
22
  export interface AriaCheckboxGroupProps extends CheckboxGroupProps {
23
23
  /** Defines a string value that labels the current element. */
24
- 'aria-label'?: string;
24
+ "aria-label"?: string;
25
25
  /** Identifies the element (or elements) that labels the current element. */
26
- 'aria-labelledby'?: string;
26
+ "aria-labelledby"?: string;
27
27
  /** Identifies the element (or elements) that describes the object. */
28
- 'aria-describedby'?: string;
28
+ "aria-describedby"?: string;
29
29
  /** Identifies the element (or elements) that provide a detailed, extended description for the object. */
30
- 'aria-details'?: string;
30
+ "aria-details"?: string;
31
31
  /** A description for the field. Provides a hint such as specific requirements for what to choose. */
32
32
  description?: JSX.Element;
33
33
  /** An error message for the field. */
@@ -45,6 +45,10 @@ export interface CheckboxGroupAria {
45
45
  errorMessageProps: JSX.HTMLAttributes<HTMLElement>;
46
46
  /** Whether the checkbox group is invalid. */
47
47
  isInvalid: boolean;
48
+ /** Validation errors, if any. */
49
+ validationErrors: string[];
50
+ /** Validation details, if any. */
51
+ validationDetails: ValidityState;
48
52
  }
49
53
 
50
54
  // WeakMap to share data between checkbox group and checkbox group items
@@ -55,14 +59,10 @@ export const checkboxGroupData = new WeakMap<
55
59
  form?: string;
56
60
  descriptionId?: string;
57
61
  errorMessageId?: string;
58
- validationBehavior: 'aria' | 'native';
62
+ validationBehavior: "aria" | "native";
59
63
  }
60
64
  >();
61
65
 
62
- // ============================================
63
- // IMPLEMENTATION
64
- // ============================================
65
-
66
66
  /**
67
67
  * Provides the behavior and accessibility implementation for a checkbox group component.
68
68
  * Checkbox groups allow users to select multiple items from a list of options.
@@ -72,51 +72,86 @@ export const checkboxGroupData = new WeakMap<
72
72
  */
73
73
  export function createCheckboxGroup(
74
74
  props: MaybeAccessor<AriaCheckboxGroupProps>,
75
- state: CheckboxGroupState
75
+ state: CheckboxGroupState,
76
76
  ): CheckboxGroupAria {
77
77
  const getProps = () => access(props);
78
+ const displayValidation = () => state.displayValidation();
79
+ const validationErrors = () => displayValidation().validationErrors;
80
+ const validationDetails = () => displayValidation().validationDetails;
78
81
 
79
- const isInvalid = () => state.isInvalid;
82
+ const isInvalid = () => displayValidation().isInvalid;
83
+ const fallbackErrorMessage = () => {
84
+ const errors = validationErrors();
85
+ return errors.length > 0 ? errors : undefined;
86
+ };
80
87
 
81
88
  // Use field for label association
82
89
  const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({
83
- get label() { return getProps().label; },
84
- get 'aria-label'() { return getProps()['aria-label']; },
85
- get 'aria-labelledby'() { return getProps()['aria-labelledby']; },
86
- get 'aria-describedby'() { return getProps()['aria-describedby']; },
87
- get 'aria-details'() { return getProps()['aria-details']; },
88
- get description() { return getProps().description; },
89
- get errorMessage() { return getProps().errorMessage ?? (isInvalid() ? 'Invalid selection' : undefined); },
90
- get isInvalid() { return isInvalid(); },
90
+ get label() {
91
+ return getProps().label;
92
+ },
93
+ get "aria-label"() {
94
+ return getProps()["aria-label"];
95
+ },
96
+ get "aria-labelledby"() {
97
+ return getProps()["aria-labelledby"];
98
+ },
99
+ get "aria-describedby"() {
100
+ return getProps()["aria-describedby"];
101
+ },
102
+ get "aria-details"() {
103
+ return getProps()["aria-details"];
104
+ },
105
+ get description() {
106
+ return getProps().description;
107
+ },
108
+ get errorMessage() {
109
+ return getProps().errorMessage ?? fallbackErrorMessage();
110
+ },
111
+ get isInvalid() {
112
+ return isInvalid();
113
+ },
91
114
  // Checkbox group is not an HTML input element so it
92
115
  // shouldn't be labeled by a <label> element.
93
- labelElementType: 'span',
116
+ labelElementType: "span",
94
117
  });
95
118
 
96
- // Store data for checkbox group items
97
- checkboxGroupData.set(state, {
98
- name: getProps().name,
99
- form: getProps().form,
100
- descriptionId: descriptionProps.id,
101
- errorMessageId: errorMessageProps.id,
102
- validationBehavior: 'aria',
103
- });
119
+ const updateCheckboxGroupData = () => {
120
+ checkboxGroupData.set(state, {
121
+ name: getProps().name,
122
+ form: getProps().form,
123
+ descriptionId: descriptionProps.id,
124
+ errorMessageId: errorMessageProps.id,
125
+ validationBehavior: getProps().validationBehavior ?? "native",
126
+ });
127
+ };
128
+
129
+ // Store group metadata synchronously for first-render children, then keep it reactive.
130
+ updateCheckboxGroupData();
131
+ createEffect(updateCheckboxGroupData);
104
132
 
105
133
  // Filter DOM props
106
- const domProps = () => filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
134
+ const domProps = () =>
135
+ filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
107
136
 
108
137
  // Handle focus within
109
138
  const { focusWithinProps } = createFocusWithin({
110
- get onBlurWithin() { return getProps().onBlur; },
111
- get onFocusWithin() { return getProps().onFocus; },
112
- get onFocusWithinChange() { return getProps().onFocusChange; },
139
+ get onBlurWithin() {
140
+ return getProps().onBlur;
141
+ },
142
+ get onFocusWithin() {
143
+ return getProps().onFocus;
144
+ },
145
+ get onFocusWithinChange() {
146
+ return getProps().onFocusChange;
147
+ },
113
148
  });
114
149
 
115
150
  return {
116
151
  get groupProps() {
117
152
  return mergeProps(domProps(), {
118
- role: 'group',
119
- 'aria-disabled': state.isDisabled || undefined,
153
+ role: "group",
154
+ "aria-disabled": state.isDisabled || undefined,
120
155
  ...fieldProps,
121
156
  ...focusWithinProps,
122
157
  }) as JSX.HTMLAttributes<HTMLElement>;
@@ -133,5 +168,11 @@ export function createCheckboxGroup(
133
168
  get isInvalid() {
134
169
  return isInvalid();
135
170
  },
171
+ get validationErrors() {
172
+ return validationErrors();
173
+ },
174
+ get validationDetails() {
175
+ return validationDetails();
176
+ },
136
177
  };
137
178
  }
@@ -7,25 +7,20 @@
7
7
  * This is a 1:1 port of @react-aria/checkbox's useCheckboxGroupItem hook.
8
8
  */
9
9
 
10
- import { JSX } from 'solid-js';
11
- import { createCheckbox, type AriaCheckboxProps, type CheckboxAria } from './createCheckbox';
12
- import { type ToggleState, type CheckboxGroupState } from '@proyecto-viviana/solid-stately';
13
- import { checkboxGroupData } from './createCheckboxGroup';
14
- import { type MaybeAccessor, access } from '../utils/reactivity';
15
-
16
- // ============================================
17
- // TYPES
18
- // ============================================
19
-
20
- export interface AriaCheckboxGroupItemProps extends Omit<AriaCheckboxProps, 'isSelected' | 'defaultSelected'> {
10
+ import { JSX } from "solid-js";
11
+ import { createCheckbox, type AriaCheckboxProps, type CheckboxAria } from "./createCheckbox";
12
+ import { type ToggleState, type CheckboxGroupState } from "@proyecto-viviana/solid-stately";
13
+ import { checkboxGroupData } from "./createCheckboxGroup";
14
+ import { type MaybeAccessor, access } from "../utils/reactivity";
15
+
16
+ export interface AriaCheckboxGroupItemProps extends Omit<
17
+ AriaCheckboxProps,
18
+ "isSelected" | "defaultSelected"
19
+ > {
21
20
  /** The value of the checkbox. */
22
21
  value: string;
23
22
  }
24
23
 
25
- // ============================================
26
- // IMPLEMENTATION
27
- // ============================================
28
-
29
24
  /**
30
25
  * Provides the behavior and accessibility implementation for a checkbox component
31
26
  * contained within a checkbox group.
@@ -37,7 +32,7 @@ export interface AriaCheckboxGroupItemProps extends Omit<AriaCheckboxProps, 'isS
37
32
  export function createCheckboxGroupItem(
38
33
  props: MaybeAccessor<AriaCheckboxGroupItemProps>,
39
34
  state: CheckboxGroupState,
40
- inputRef: () => HTMLInputElement | null
35
+ inputRef: () => HTMLInputElement | null,
41
36
  ): CheckboxAria {
42
37
  const getProps = () => access(props);
43
38
 
@@ -59,10 +54,8 @@ export function createCheckboxGroupItem(
59
54
  },
60
55
  };
61
56
 
62
- // Get group data
63
57
  const getGroupData = () => checkboxGroupData.get(state);
64
58
 
65
- // Build checkbox props
66
59
  const checkboxProps = (): AriaCheckboxProps => {
67
60
  const p = getProps();
68
61
  const groupData = getGroupData();
@@ -71,17 +64,16 @@ export function createCheckboxGroupItem(
71
64
  ...p,
72
65
  isReadOnly: p.isReadOnly ?? state.isReadOnly,
73
66
  isDisabled: p.isDisabled ?? state.isDisabled,
67
+ isInvalid: p.isInvalid ?? state.isInvalid,
74
68
  name: p.name ?? groupData?.name,
75
69
  form: p.form ?? groupData?.form,
76
70
  isRequired: p.isRequired ?? state.isRequired(),
77
- validationBehavior: p.validationBehavior ?? groupData?.validationBehavior ?? 'aria',
71
+ validationBehavior: p.validationBehavior ?? groupData?.validationBehavior ?? "native",
78
72
  };
79
73
  };
80
74
 
81
- // Use the checkbox hook
82
75
  const result = createCheckbox(checkboxProps, toggleState, inputRef);
83
76
 
84
- // Add group-level aria-describedby
85
77
  return {
86
78
  ...result,
87
79
  get inputProps() {
@@ -90,27 +82,24 @@ export function createCheckboxGroupItem(
90
82
 
91
83
  const describedByIds: string[] = [];
92
84
 
93
- // Add props aria-describedby
94
- const propsDescribedBy = getProps()['aria-describedby'];
85
+ const propsDescribedBy = getProps()["aria-describedby"];
95
86
  if (propsDescribedBy) {
96
87
  describedByIds.push(propsDescribedBy);
97
88
  }
98
89
 
99
- // Add error message ID if group is invalid
100
90
  if (state.isInvalid && groupData?.errorMessageId) {
101
91
  describedByIds.push(groupData.errorMessageId);
102
92
  }
103
93
 
104
- // Add description ID
105
94
  if (groupData?.descriptionId) {
106
95
  describedByIds.push(groupData.descriptionId);
107
96
  }
108
97
 
109
- const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(' ') : undefined;
98
+ const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(" ") : undefined;
110
99
 
111
100
  return {
112
101
  ...baseInputProps,
113
- 'aria-describedby': ariaDescribedBy,
102
+ "aria-describedby": ariaDescribedBy,
114
103
  } as JSX.InputHTMLAttributes<HTMLInputElement>;
115
104
  },
116
105
  };