@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
@@ -5,16 +5,15 @@
5
5
  * Based on @react-aria/datepicker useDatePicker
6
6
  */
7
7
 
8
- import { createMemo } from 'solid-js';
9
- import { createId } from '../ssr';
10
- import { createLabel } from '../label/createLabel';
11
- import { access, type MaybeAccessor } from '../utils/reactivity';
12
- import { mergeProps } from '../utils/mergeProps';
13
- import type { DateFieldState, CalendarState } from '@proyecto-viviana/solid-stately';
14
-
15
- // ============================================
16
- // TYPES
17
- // ============================================
8
+ import { createMemo } from "solid-js";
9
+ import { createId } from "../ssr";
10
+ import { createLabel } from "../label/createLabel";
11
+ import { access, type MaybeAccessor } from "../utils/reactivity";
12
+ import { mergeProps } from "../utils/mergeProps";
13
+ import { useLocale } from "../i18n";
14
+ import { createPress } from "../interactions/createPress";
15
+ import { DateFormatter, getLocalTimeZone } from "@internationalized/date";
16
+ import type { DateFieldState, CalendarState } from "@proyecto-viviana/solid-stately";
18
17
 
19
18
  export interface AriaDatePickerProps {
20
19
  /** An ID for the date picker. */
@@ -22,11 +21,11 @@ export interface AriaDatePickerProps {
22
21
  /** A visible label for the date picker. */
23
22
  label?: string;
24
23
  /** An accessible label for the date picker. */
25
- 'aria-label'?: string;
24
+ "aria-label"?: string;
26
25
  /** The ID of an element that labels the date picker. */
27
- 'aria-labelledby'?: string;
26
+ "aria-labelledby"?: string;
28
27
  /** The ID of an element that describes the date picker. */
29
- 'aria-describedby'?: string;
28
+ "aria-describedby"?: string;
30
29
  /** Whether the date picker is disabled. */
31
30
  isDisabled?: boolean;
32
31
  /** Whether the date picker is read-only. */
@@ -39,6 +38,44 @@ export interface AriaDatePickerProps {
39
38
  description?: string;
40
39
  /** Error message. */
41
40
  errorMessage?: string;
41
+ /** Accessible label for the calendar trigger button. */
42
+ buttonAriaLabel?: string;
43
+ /** Accessible label for the calendar dialog. */
44
+ dialogAriaLabel?: string;
45
+ /** Accessible label for the calendar grid region. */
46
+ calendarAriaLabel?: string;
47
+ /** The minimum allowed date. */
48
+ minValue?: Date;
49
+ /** The maximum allowed date. */
50
+ maxValue?: Date;
51
+ /** Whether a date is unavailable. */
52
+ isDateUnavailable?: (date: unknown) => boolean;
53
+ /** The first day of the week. */
54
+ firstDayOfWeek?: number;
55
+ /** Page behavior for calendar. */
56
+ pageBehavior?: "single" | "visible";
57
+ /** Whether to force leading zeros. */
58
+ shouldForceLeadingZeros?: boolean;
59
+ /** Callback when focus changes. */
60
+ onFocusChange?: (isFocused: boolean) => void;
61
+ /** Callback when focused. */
62
+ onFocus?: (e: FocusEvent) => void;
63
+ /** Callback when blurred. */
64
+ onBlur?: (e: FocusEvent) => void;
65
+ /** The name attribute for form submission. */
66
+ name?: string;
67
+ /** The form attribute. */
68
+ form?: string;
69
+ /** Auto focus the field. */
70
+ autoFocus?: boolean;
71
+ /** The placeholder value. */
72
+ placeholderValue?: unknown;
73
+ /** Whether to hide the time zone. */
74
+ hideTimeZone?: boolean;
75
+ /** The hour cycle. */
76
+ hourCycle?: 12 | 24;
77
+ /** The granularity. */
78
+ granularity?: "day" | "hour" | "minute" | "second";
42
79
  }
43
80
 
44
81
  export interface DatePickerState {
@@ -69,12 +106,22 @@ export interface DatePickerAria {
69
106
  descriptionProps: Record<string, unknown>;
70
107
  /** Props for the error message element. */
71
108
  errorMessageProps: Record<string, unknown>;
109
+ /** Whether the picker is invalid. */
110
+ isInvalid: boolean;
111
+ /** Validation errors. */
112
+ validationErrors: string[];
113
+ /** Validation details. */
114
+ validationDetails: Record<string, unknown>;
115
+ /** Focus manager for programmatic segment focus. */
116
+ focusManager: {
117
+ focusFirst: () => void;
118
+ focusLast: () => void;
119
+ } & {
120
+ /** @internal Wires the actual focus implementations from the component layer */
121
+ _register?: (first: () => void, last: () => void) => void;
122
+ };
72
123
  }
73
124
 
74
- // ============================================
75
- // IMPLEMENTATION
76
- // ============================================
77
-
78
125
  /**
79
126
  * Provides the behavior and accessibility implementation for a date picker component.
80
127
  */
@@ -82,107 +129,251 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
82
129
  props: MaybeAccessor<AriaDatePickerProps>,
83
130
  state: T,
84
131
  overlayState: DatePickerState,
85
- _calendarState?: C
132
+ _calendarState?: C,
86
133
  ): DatePickerAria {
134
+ const locale = useLocale();
87
135
  const getProps = () => access(props);
88
136
  const id = createId(getProps().id);
89
137
  const descriptionId = createId();
90
138
  const errorMessageId = createId();
91
139
  const dialogId = createId();
140
+ const buttonId = createId();
141
+ const fieldId = createId();
92
142
 
93
143
  // Create label handling
94
144
  const { labelProps, fieldProps: labelFieldProps } = createLabel({
95
- get label() { return getProps().label; },
96
- get 'aria-label'() { return getProps()['aria-label']; },
97
- get 'aria-labelledby'() { return getProps()['aria-labelledby']; },
98
- labelElementType: 'span',
145
+ get label() {
146
+ return getProps().label;
147
+ },
148
+ get "aria-label"() {
149
+ return getProps()["aria-label"];
150
+ },
151
+ get "aria-labelledby"() {
152
+ return getProps()["aria-labelledby"];
153
+ },
154
+ labelElementType: "span",
99
155
  });
100
156
 
101
157
  // Build aria-describedby
102
158
  const getAriaDescribedBy = () => {
103
159
  const p = getProps();
104
160
  const ids: string[] = [];
105
- if (p['aria-describedby']) {
106
- ids.push(p['aria-describedby']);
161
+ if (p["aria-describedby"]) {
162
+ ids.push(p["aria-describedby"]);
163
+ }
164
+ if (valueDescription()) {
165
+ ids.push(valueDescriptionId);
107
166
  }
108
167
  if (p.description) {
109
168
  ids.push(descriptionId);
110
169
  }
111
- if (p.isInvalid && p.errorMessage) {
170
+ if ((p.isInvalid || state.isInvalid()) && p.errorMessage) {
112
171
  ids.push(errorMessageId);
113
172
  }
114
- return ids.length > 0 ? ids.join(' ') : undefined;
173
+ return ids.length > 0 ? ids.join(" ") : undefined;
115
174
  };
116
175
 
176
+ // Selected date description for screen readers
177
+ const valueDescriptionId = createId();
178
+ const valueDescription = createMemo(() => {
179
+ const v = state.value?.();
180
+ if (!v) return "";
181
+ const formatter = new DateFormatter(locale().locale, {
182
+ year: "numeric",
183
+ month: "long",
184
+ day: "numeric",
185
+ });
186
+ return formatter.format(v.toDate(getLocalTimeZone()));
187
+ });
188
+
117
189
  // Group props
118
190
  const groupProps = createMemo(() => {
119
191
  const p = getProps();
192
+ const isInvalid = p.isInvalid || state.isInvalid();
193
+ const describedBy = getAriaDescribedBy();
194
+ const labelField = labelFieldProps as Record<string, unknown>;
120
195
 
121
- return mergeProps(labelFieldProps as Record<string, unknown>, {
196
+ return {
122
197
  id,
123
- role: 'group',
124
- 'aria-disabled': p.isDisabled || state.isDisabled() || undefined,
125
- 'aria-describedby': getAriaDescribedBy(),
126
- });
198
+ role: "group",
199
+ "aria-label": labelField["aria-label"] || undefined,
200
+ "aria-labelledby": labelField["aria-labelledby"] || undefined,
201
+ "aria-disabled": p.isDisabled || state.isDisabled() || undefined,
202
+ "aria-readonly": p.isReadOnly || state.isReadOnly() || undefined,
203
+ "aria-required": p.isRequired || state.isRequired() || undefined,
204
+ "aria-invalid": isInvalid || undefined,
205
+ "aria-describedby": describedBy,
206
+ };
127
207
  });
128
208
 
129
- // Field props
130
- const fieldProps = createMemo(() => ({
131
- 'aria-haspopup': 'dialog' as const,
132
- 'aria-expanded': overlayState.isOpen,
133
- 'aria-controls': overlayState.isOpen ? dialogId : undefined,
134
- }));
135
-
136
- // Button props
137
- const buttonProps = createMemo(() => {
209
+ // Field props - applied to DateInput container
210
+ const fieldProps = createMemo(() => {
138
211
  const p = getProps();
139
- const isDisabled = p.isDisabled || state.isDisabled();
212
+ const describedBy = getAriaDescribedBy();
140
213
 
141
214
  return {
142
- 'aria-label': 'Open calendar',
143
- 'aria-haspopup': 'dialog' as const,
144
- 'aria-expanded': overlayState.isOpen,
145
- 'aria-controls': overlayState.isOpen ? dialogId : undefined,
146
- disabled: isDisabled,
147
- tabIndex: -1,
148
- onClick: () => {
149
- if (!isDisabled) {
150
- overlayState.toggle();
151
- }
215
+ id: fieldId,
216
+ "aria-describedby": describedBy,
217
+ value: state.value?.(),
218
+ defaultValue: state.defaultValue,
219
+ onChange: (value: unknown) => {
220
+ state.setValue?.(value as T extends DateFieldState<infer V> ? V | null : null);
152
221
  },
222
+ placeholderValue: p.placeholderValue,
223
+ hideTimeZone: p.hideTimeZone,
224
+ hourCycle: p.hourCycle,
225
+ shouldForceLeadingZeros: p.shouldForceLeadingZeros,
226
+ granularity: p.granularity,
227
+ isDisabled: p.isDisabled || state.isDisabled(),
228
+ isReadOnly: p.isReadOnly || state.isReadOnly(),
229
+ isRequired: p.isRequired || state.isRequired(),
230
+ autoFocus: p.autoFocus,
231
+ name: p.name,
232
+ form: p.form,
153
233
  };
154
234
  });
155
235
 
236
+ // Button props with createPress for keyboard/mouse/touch activation
237
+ const buttonPress = createPress({
238
+ get isDisabled() {
239
+ const p = getProps();
240
+ return p.isDisabled || state.isDisabled();
241
+ },
242
+ onPress: () => {
243
+ overlayState.open();
244
+ },
245
+ });
246
+
247
+ const buttonProps = createMemo(() => {
248
+ const p = getProps();
249
+ const isDisabled = p.isDisabled || state.isDisabled();
250
+ const defaults = getDatePickerLabelDefaults(locale().locale);
251
+ const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
252
+ const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
253
+ const describedBy = getAriaDescribedBy();
254
+
255
+ return mergeProps(buttonPress.pressProps as Record<string, unknown>, {
256
+ id: buttonId,
257
+ type: "button" as const,
258
+ "aria-label": p.buttonAriaLabel ?? defaults.button,
259
+ "aria-labelledby": labelledBy,
260
+ "aria-haspopup": "dialog" as const,
261
+ "aria-expanded": overlayState.isOpen,
262
+ "aria-controls": overlayState.isOpen ? dialogId : undefined,
263
+ "aria-describedby": describedBy,
264
+ "aria-disabled": isDisabled || undefined,
265
+ tabIndex: 0,
266
+ });
267
+ });
268
+
156
269
  // Dialog props
157
- const dialogProps = createMemo(() => ({
158
- id: dialogId,
159
- role: 'dialog',
160
- 'aria-modal': true,
161
- 'aria-label': 'Calendar',
162
- }));
270
+ const dialogProps = createMemo(() => {
271
+ const p = getProps();
272
+ const defaults = getDatePickerLabelDefaults(locale().locale);
273
+ const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
274
+ const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
275
+
276
+ return {
277
+ id: dialogId,
278
+ role: "dialog",
279
+ "aria-modal": true,
280
+ "aria-labelledby": labelledBy,
281
+ "aria-label": p.dialogAriaLabel ?? defaults.dialog,
282
+ };
283
+ });
163
284
 
164
285
  // Calendar props
165
- const calendarProps = createMemo(() => ({
166
- 'aria-label': 'Calendar',
167
- }));
286
+ const calendarProps = createMemo(() => {
287
+ const p = getProps();
288
+ const defaults = getDatePickerLabelDefaults(locale().locale);
289
+ const currentValue = state.value?.();
290
+
291
+ return {
292
+ autoFocus: true,
293
+ value: currentValue,
294
+ onChange: (value: unknown) => {
295
+ if (state.setValue) {
296
+ state.setValue(value as Parameters<typeof state.setValue>[0]);
297
+ }
298
+ },
299
+ minValue: p.minValue,
300
+ maxValue: p.maxValue,
301
+ isDisabled: p.isDisabled || state.isDisabled(),
302
+ isReadOnly: p.isReadOnly || state.isReadOnly(),
303
+ isDateUnavailable: p.isDateUnavailable,
304
+ defaultFocusedValue: currentValue ? undefined : p.placeholderValue,
305
+ isInvalid: p.isInvalid || state.isInvalid(),
306
+ errorMessage:
307
+ typeof p.errorMessage === "string"
308
+ ? p.errorMessage
309
+ : state.isInvalid()
310
+ ? "Invalid date"
311
+ : undefined,
312
+ firstDayOfWeek: p.firstDayOfWeek,
313
+ pageBehavior: p.pageBehavior,
314
+ "aria-label": p.calendarAriaLabel ?? p.dialogAriaLabel ?? defaults.calendar,
315
+ };
316
+ });
168
317
 
169
- // Description props
318
+ // Description props for the description element
170
319
  const descriptionProps = createMemo(() => ({
171
320
  id: descriptionId,
172
321
  }));
173
322
 
323
+ // Value description element props
324
+ const valueDescriptionProps = createMemo(() => ({
325
+ id: valueDescriptionId,
326
+ "aria-hidden": true,
327
+ }));
328
+
174
329
  // Error message props
175
330
  const errorMessageProps = createMemo(() => ({
176
331
  id: errorMessageId,
177
- role: 'alert',
332
+ role: "alert",
178
333
  }));
179
334
 
335
+ // Label click focuses first segment — component layer wires the actual ref
336
+ let focusFirstSegment: (() => void) | undefined;
337
+ let focusLastSegment: (() => void) | undefined;
338
+
339
+ const enhancedLabelProps = createMemo(() => {
340
+ return {
341
+ ...labelProps,
342
+ onClick: () => {
343
+ focusFirstSegment?.();
344
+ },
345
+ };
346
+ });
347
+
348
+ const isInvalid = createMemo(() => {
349
+ const p = getProps();
350
+ return p.isInvalid || state.isInvalid();
351
+ });
352
+
353
+ const validationErrors = createMemo(() => {
354
+ const p = getProps();
355
+ if (p.isInvalid && typeof p.errorMessage === "string") {
356
+ return [p.errorMessage];
357
+ }
358
+ return [];
359
+ });
360
+
361
+ const validationDetails = createMemo(() => {
362
+ const p = getProps();
363
+ return {
364
+ minValue: p.minValue,
365
+ maxValue: p.maxValue,
366
+ isDateUnavailable: p.isDateUnavailable,
367
+ isInvalid: isInvalid(),
368
+ };
369
+ });
370
+
180
371
  return {
181
372
  get groupProps() {
182
373
  return groupProps();
183
374
  },
184
375
  get labelProps() {
185
- return labelProps as Record<string, unknown>;
376
+ return enhancedLabelProps() as Record<string, unknown>;
186
377
  },
187
378
  get fieldProps() {
188
379
  return fieldProps();
@@ -202,5 +393,45 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
202
393
  get errorMessageProps() {
203
394
  return errorMessageProps();
204
395
  },
396
+ get isInvalid() {
397
+ return isInvalid();
398
+ },
399
+ get validationErrors() {
400
+ return validationErrors();
401
+ },
402
+ get validationDetails() {
403
+ return validationDetails();
404
+ },
405
+ focusManager: {
406
+ focusFirst: () => focusFirstSegment?.(),
407
+ focusLast: () => focusLastSegment?.(),
408
+ /** @internal Wires the actual focus implementations from the component layer */
409
+ _register: (first: () => void, last: () => void) => {
410
+ focusFirstSegment = first;
411
+ focusLastSegment = last;
412
+ },
413
+ },
414
+ };
415
+ }
416
+
417
+ function getDatePickerLabelDefaults(locale: string): {
418
+ button: string;
419
+ dialog: string;
420
+ calendar: string;
421
+ } {
422
+ const language = locale.toLowerCase().split("-")[0] ?? "en";
423
+
424
+ if (language === "es") {
425
+ return {
426
+ button: "Abrir calendario",
427
+ dialog: "Calendario",
428
+ calendar: "Calendario",
429
+ };
430
+ }
431
+
432
+ return {
433
+ button: "Open calendar",
434
+ dialog: "Calendar",
435
+ calendar: "Calendar",
205
436
  };
206
437
  }
@@ -0,0 +1,149 @@
1
+ /**
2
+ * createDatePickerGroup hook for Solidaria
3
+ *
4
+ * Provides keyboard and pointer behavior for the date picker field group.
5
+ * Based on @react-aria/datepicker useDatePickerGroup
6
+ */
7
+
8
+ import { createMemo } from "solid-js";
9
+ import { type MaybeAccessor, access } from "../utils/reactivity";
10
+ import { mergeProps } from "../utils/mergeProps";
11
+ import { useLocale } from "../i18n";
12
+ import { createPress } from "../interactions/createPress";
13
+ import { nodeContains, getEventTarget } from "../utils";
14
+ import { focusSafely } from "../utils/focus";
15
+
16
+ export interface AriaDatePickerGroupProps {
17
+ isDisabled?: boolean;
18
+ }
19
+
20
+ export interface DatePickerGroupAria {
21
+ groupProps: Record<string, unknown>;
22
+ }
23
+
24
+ export function createDatePickerGroup(
25
+ props: MaybeAccessor<AriaDatePickerGroupProps>,
26
+ state: { setOpen: (isOpen: boolean) => void; isOpen: boolean; isDisabled: () => boolean },
27
+ ref: () => HTMLElement | null,
28
+ disableArrowNavigation?: boolean,
29
+ ): DatePickerGroupAria {
30
+ const locale = useLocale();
31
+ const resolvedProps = createMemo(() => access(props));
32
+
33
+ const onKeyDown = (e: KeyboardEvent) => {
34
+ if (!nodeContains(e.currentTarget as Node | null, getEventTarget(e) as Node | null)) {
35
+ return;
36
+ }
37
+
38
+ // Open the popover on alt + arrow down/up
39
+ if (e.altKey && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
40
+ e.preventDefault();
41
+ e.stopPropagation();
42
+ state.setOpen(true);
43
+ return;
44
+ }
45
+
46
+ if (disableArrowNavigation) return;
47
+
48
+ const root = ref();
49
+ if (!root) return;
50
+
51
+ const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
52
+ if (segments.length === 0) return;
53
+
54
+ const activeElement = root.ownerDocument.activeElement;
55
+ let currentIndex = -1;
56
+ if (activeElement) {
57
+ currentIndex = segments.indexOf(activeElement as HTMLElement);
58
+ }
59
+
60
+ const direction = locale().direction;
61
+
62
+ switch (e.key) {
63
+ case "ArrowLeft": {
64
+ e.preventDefault();
65
+ e.stopPropagation();
66
+ if (direction === "rtl") {
67
+ // geometric fallback: in RTL, left arrow moves toward the end (next)
68
+ const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
69
+ if (nextIndex < segments.length) {
70
+ focusSafely(segments[nextIndex]);
71
+ }
72
+ } else {
73
+ const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
74
+ if (prevIndex >= 0) {
75
+ focusSafely(segments[prevIndex]);
76
+ }
77
+ }
78
+ break;
79
+ }
80
+ case "ArrowRight": {
81
+ e.preventDefault();
82
+ e.stopPropagation();
83
+ if (direction === "rtl") {
84
+ // geometric fallback: in RTL, right arrow moves toward the start (previous)
85
+ const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
86
+ if (prevIndex >= 0) {
87
+ focusSafely(segments[prevIndex]);
88
+ }
89
+ } else {
90
+ const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
91
+ if (nextIndex < segments.length) {
92
+ focusSafely(segments[nextIndex]);
93
+ }
94
+ }
95
+ break;
96
+ }
97
+ }
98
+ };
99
+
100
+ const focusLast = (event?: Event) => {
101
+ const root = ref();
102
+ if (!root) return;
103
+
104
+ const target = event ? getEventTarget(event) : null;
105
+
106
+ const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
107
+ if (segments.length === 0) return;
108
+
109
+ let startIndex = segments.length - 1;
110
+ if (target) {
111
+ const targetIndex = segments.indexOf(target as HTMLElement);
112
+ if (targetIndex >= 0) {
113
+ startIndex = targetIndex;
114
+ }
115
+ }
116
+
117
+ for (let i = startIndex; i >= 0; i--) {
118
+ const segment = segments[i];
119
+ if (segment.getAttribute("data-placeholder") !== "true") {
120
+ focusSafely(segment);
121
+ return;
122
+ }
123
+ }
124
+ };
125
+
126
+ const { pressProps } = createPress({
127
+ isDisabled: () => resolvedProps().isDisabled || state.isDisabled(),
128
+ preventFocusOnPress: true,
129
+ allowTextSelectionOnPress: true,
130
+ onPressStart(e) {
131
+ if (e.pointerType === "mouse") {
132
+ focusLast(e as unknown as Event);
133
+ }
134
+ },
135
+ onPress(e) {
136
+ if (e.pointerType === "touch" || e.pointerType === "pen") {
137
+ focusLast(e as unknown as Event);
138
+ }
139
+ },
140
+ });
141
+
142
+ return {
143
+ get groupProps() {
144
+ return mergeProps(pressProps, {
145
+ onKeyDown,
146
+ });
147
+ },
148
+ };
149
+ }