@proyecto-viviana/solidaria 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/README.md +31 -236
  2. package/dist/actiongroup/createActionGroup.d.ts +5 -5
  3. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  4. package/dist/actiongroup/index.d.ts +1 -1
  5. package/dist/autocomplete/createAutocomplete.d.ts +10 -10
  6. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  7. package/dist/autocomplete/index.d.ts +1 -1
  8. package/dist/autocomplete/index.d.ts.map +1 -1
  9. package/dist/breadcrumbs/createBreadcrumbs.d.ts +9 -7
  10. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  11. package/dist/breadcrumbs/index.d.ts +1 -1
  12. package/dist/button/createButton.d.ts +1 -1
  13. package/dist/button/createButton.d.ts.map +1 -1
  14. package/dist/button/createToggleButton.d.ts +3 -3
  15. package/dist/button/createToggleButtonGroup.d.ts +7 -7
  16. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  17. package/dist/button/index.d.ts +6 -6
  18. package/dist/button/index.d.ts.map +1 -1
  19. package/dist/button/types.d.ts +18 -12
  20. package/dist/button/types.d.ts.map +1 -1
  21. package/dist/calendar/createCalendar.d.ts +15 -5
  22. package/dist/calendar/createCalendar.d.ts.map +1 -1
  23. package/dist/calendar/createCalendarCell.d.ts +6 -2
  24. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  26. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  27. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  28. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendarCell.d.ts +4 -2
  30. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  31. package/dist/calendar/index.d.ts +5 -5
  32. package/dist/calendar/index.d.ts.map +1 -1
  33. package/dist/calendar/intl/index.d.ts +12 -0
  34. package/dist/calendar/intl/index.d.ts.map +1 -0
  35. package/dist/calendar/utils.d.ts +12 -0
  36. package/dist/calendar/utils.d.ts.map +1 -0
  37. package/dist/checkbox/createCheckbox.d.ts +6 -6
  38. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  39. package/dist/checkbox/createCheckboxGroup.d.ts +7 -7
  40. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  42. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  44. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  45. package/dist/checkbox/index.d.ts +8 -8
  46. package/dist/checkbox/index.d.ts.map +1 -1
  47. package/dist/collections/index.d.ts +3 -3
  48. package/dist/collections/index.d.ts.map +1 -1
  49. package/dist/color/createColorArea.d.ts +3 -3
  50. package/dist/color/createColorArea.d.ts.map +1 -1
  51. package/dist/color/createColorField.d.ts +4 -4
  52. package/dist/color/createColorField.d.ts.map +1 -1
  53. package/dist/color/createColorSlider.d.ts +4 -4
  54. package/dist/color/createColorSlider.d.ts.map +1 -1
  55. package/dist/color/createColorSwatch.d.ts +2 -2
  56. package/dist/color/createColorSwatch.d.ts.map +1 -1
  57. package/dist/color/createColorWheel.d.ts +3 -3
  58. package/dist/color/createColorWheel.d.ts.map +1 -1
  59. package/dist/color/index.d.ts +6 -6
  60. package/dist/color/types.d.ts +98 -16
  61. package/dist/color/types.d.ts.map +1 -1
  62. package/dist/combobox/createComboBox.d.ts +10 -7
  63. package/dist/combobox/createComboBox.d.ts.map +1 -1
  64. package/dist/combobox/index.d.ts +1 -1
  65. package/dist/combobox/intl/index.d.ts +1 -1
  66. package/dist/datepicker/createDateField.d.ts +18 -6
  67. package/dist/datepicker/createDateField.d.ts.map +1 -1
  68. package/dist/datepicker/createDatePicker.d.ts +51 -5
  69. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  71. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  72. package/dist/datepicker/createDateRangePicker.d.ts +8 -6
  73. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  74. package/dist/datepicker/createDateSegment.d.ts +10 -2
  75. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  76. package/dist/datepicker/createTimeField.d.ts +11 -5
  77. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeSegment.d.ts +2 -2
  79. package/dist/datepicker/createTimeSegment.d.ts.map +1 -1
  80. package/dist/datepicker/index.d.ts +7 -6
  81. package/dist/datepicker/index.d.ts.map +1 -1
  82. package/dist/dialog/createDialog.d.ts +5 -5
  83. package/dist/dialog/createDialog.d.ts.map +1 -1
  84. package/dist/dialog/index.d.ts +2 -2
  85. package/dist/dialog/index.d.ts.map +1 -1
  86. package/dist/dialog/types.d.ts +4 -4
  87. package/dist/disclosure/createDisclosure.d.ts +5 -2
  88. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  89. package/dist/disclosure/createDisclosureGroup.d.ts +4 -4
  90. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  91. package/dist/disclosure/index.d.ts +2 -2
  92. package/dist/dnd/createDrag.d.ts +2 -2
  93. package/dist/dnd/createDrag.d.ts.map +1 -1
  94. package/dist/dnd/createDraggableCollection.d.ts +2 -2
  95. package/dist/dnd/createDraggableItem.d.ts +3 -3
  96. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  97. package/dist/dnd/createDrop.d.ts +2 -2
  98. package/dist/dnd/createDrop.d.ts.map +1 -1
  99. package/dist/dnd/createDroppableCollection.d.ts +26 -6
  100. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  101. package/dist/dnd/createDroppableItem.d.ts +3 -3
  102. package/dist/dnd/index.d.ts +12 -12
  103. package/dist/dnd/index.d.ts.map +1 -1
  104. package/dist/dnd/types.d.ts +2 -2
  105. package/dist/dnd/types.d.ts.map +1 -1
  106. package/dist/dnd/utils.d.ts +1 -1
  107. package/dist/dnd/utils.d.ts.map +1 -1
  108. package/dist/focus/FocusScope.d.ts +1 -1
  109. package/dist/focus/FocusScope.d.ts.map +1 -1
  110. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  111. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  112. package/dist/focus/createVirtualFocus.d.ts +4 -4
  113. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  114. package/dist/focus/index.d.ts +4 -4
  115. package/dist/focus/index.d.ts.map +1 -1
  116. package/dist/form/createFormReset.d.ts +1 -1
  117. package/dist/form/createFormValidation.d.ts +3 -3
  118. package/dist/form/createFormValidation.d.ts.map +1 -1
  119. package/dist/form/index.d.ts +2 -2
  120. package/dist/form/index.d.ts.map +1 -1
  121. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  122. package/dist/grid/createGrid.d.ts +3 -3
  123. package/dist/grid/createGridCell.d.ts +3 -3
  124. package/dist/grid/createGridRow.d.ts +3 -3
  125. package/dist/grid/index.d.ts +5 -5
  126. package/dist/grid/types.d.ts +8 -8
  127. package/dist/gridlist/createGridList.d.ts +6 -4
  128. package/dist/gridlist/createGridList.d.ts.map +1 -1
  129. package/dist/gridlist/createGridListItem.d.ts +4 -4
  130. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  131. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  132. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  133. package/dist/gridlist/index.d.ts +4 -4
  134. package/dist/gridlist/types.d.ts +11 -7
  135. package/dist/gridlist/types.d.ts.map +1 -1
  136. package/dist/i18n/createCollator.d.ts.map +1 -1
  137. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  138. package/dist/i18n/createFilter.d.ts.map +1 -1
  139. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  140. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  141. package/dist/i18n/createStringFormatter.d.ts +2 -2
  142. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  143. package/dist/i18n/index.d.ts +8 -8
  144. package/dist/i18n/index.d.ts.map +1 -1
  145. package/dist/i18n/locale.d.ts +2 -2
  146. package/dist/i18n/locale.d.ts.map +1 -1
  147. package/dist/i18n/utils.d.ts.map +1 -1
  148. package/dist/index.d.ts +52 -51
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +18012 -16820
  151. package/dist/index.js.map +1 -1
  152. package/dist/index.jsx +18242 -0
  153. package/dist/index.jsx.map +1 -0
  154. package/dist/interactions/FocusableProvider.d.ts +2 -2
  155. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  156. package/dist/interactions/PressEvent.d.ts +2 -2
  157. package/dist/interactions/createFocus.d.ts +1 -1
  158. package/dist/interactions/createFocus.d.ts.map +1 -1
  159. package/dist/interactions/createFocusRing.d.ts +1 -1
  160. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  161. package/dist/interactions/createFocusWithin.d.ts +1 -1
  162. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  163. package/dist/interactions/createFocusable.d.ts +3 -3
  164. package/dist/interactions/createFocusable.d.ts.map +1 -1
  165. package/dist/interactions/createHover.d.ts +5 -5
  166. package/dist/interactions/createHover.d.ts.map +1 -1
  167. package/dist/interactions/createInteractionModality.d.ts +3 -3
  168. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  169. package/dist/interactions/createKeyboard.d.ts +1 -1
  170. package/dist/interactions/createLongPress.d.ts +5 -5
  171. package/dist/interactions/createMove.d.ts +5 -5
  172. package/dist/interactions/createMove.d.ts.map +1 -1
  173. package/dist/interactions/createPress.d.ts +4 -4
  174. package/dist/interactions/createPress.d.ts.map +1 -1
  175. package/dist/interactions/index.d.ts +12 -12
  176. package/dist/interactions/index.d.ts.map +1 -1
  177. package/dist/label/createField.d.ts +4 -4
  178. package/dist/label/createField.d.ts.map +1 -1
  179. package/dist/label/createLabel.d.ts +7 -7
  180. package/dist/label/createLabel.d.ts.map +1 -1
  181. package/dist/label/createLabels.d.ts +1 -1
  182. package/dist/label/createLabels.d.ts.map +1 -1
  183. package/dist/label/index.d.ts +5 -5
  184. package/dist/landmark/createLandmark.d.ts +5 -5
  185. package/dist/landmark/createLandmark.d.ts.map +1 -1
  186. package/dist/landmark/index.d.ts +1 -1
  187. package/dist/link/createLink.d.ts +14 -8
  188. package/dist/link/createLink.d.ts.map +1 -1
  189. package/dist/link/index.d.ts +1 -1
  190. package/dist/listbox/createListBox.d.ts +11 -6
  191. package/dist/listbox/createListBox.d.ts.map +1 -1
  192. package/dist/listbox/createOption.d.ts +21 -4
  193. package/dist/listbox/createOption.d.ts.map +1 -1
  194. package/dist/listbox/index.d.ts +2 -2
  195. package/dist/listbox/index.d.ts.map +1 -1
  196. package/dist/live-announcer/announce.d.ts +2 -2
  197. package/dist/live-announcer/announce.d.ts.map +1 -1
  198. package/dist/live-announcer/index.d.ts +1 -1
  199. package/dist/menu/createMenu.d.ts +7 -7
  200. package/dist/menu/createMenu.d.ts.map +1 -1
  201. package/dist/menu/createMenuItem.d.ts +16 -4
  202. package/dist/menu/createMenuItem.d.ts.map +1 -1
  203. package/dist/menu/createMenuTrigger.d.ts +4 -4
  204. package/dist/menu/index.d.ts +3 -3
  205. package/dist/menu/index.d.ts.map +1 -1
  206. package/dist/meter/createMeter.d.ts +6 -6
  207. package/dist/meter/createMeter.d.ts.map +1 -1
  208. package/dist/meter/index.d.ts +1 -1
  209. package/dist/numberfield/createNumberField.d.ts +9 -8
  210. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  211. package/dist/numberfield/index.d.ts +1 -1
  212. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  213. package/dist/overlays/createModal.d.ts +3 -3
  214. package/dist/overlays/createModal.d.ts.map +1 -1
  215. package/dist/overlays/createOverlay.d.ts +1 -1
  216. package/dist/overlays/createOverlay.d.ts.map +1 -1
  217. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  218. package/dist/overlays/index.d.ts +6 -6
  219. package/dist/overlays/index.d.ts.map +1 -1
  220. package/dist/popover/calculatePosition.d.ts +4 -4
  221. package/dist/popover/calculatePosition.d.ts.map +1 -1
  222. package/dist/popover/createOverlayPosition.d.ts +3 -3
  223. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  224. package/dist/popover/createPopover.d.ts +4 -4
  225. package/dist/popover/createPopover.d.ts.map +1 -1
  226. package/dist/popover/index.d.ts +3 -3
  227. package/dist/progress/createProgressBar.d.ts +7 -5
  228. package/dist/progress/createProgressBar.d.ts.map +1 -1
  229. package/dist/progress/index.d.ts +1 -1
  230. package/dist/radio/createRadio.d.ts +7 -7
  231. package/dist/radio/createRadio.d.ts.map +1 -1
  232. package/dist/radio/createRadioGroup.d.ts +10 -10
  233. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  234. package/dist/radio/createRadioGroupState.d.ts +3 -3
  235. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  236. package/dist/radio/index.d.ts +3 -3
  237. package/dist/radio/index.d.ts.map +1 -1
  238. package/dist/searchfield/createSearchField.d.ts +7 -7
  239. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  240. package/dist/searchfield/index.d.ts +2 -2
  241. package/dist/select/createHiddenSelect.d.ts +4 -4
  242. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  243. package/dist/select/createSelect.d.ts +14 -6
  244. package/dist/select/createSelect.d.ts.map +1 -1
  245. package/dist/select/index.d.ts +2 -2
  246. package/dist/select/index.d.ts.map +1 -1
  247. package/dist/selection/createTypeSelect.d.ts +2 -2
  248. package/dist/selection/index.d.ts +1 -1
  249. package/dist/separator/createSeparator.d.ts +9 -5
  250. package/dist/separator/createSeparator.d.ts.map +1 -1
  251. package/dist/separator/index.d.ts +1 -1
  252. package/dist/slider/createSlider.d.ts +11 -7
  253. package/dist/slider/createSlider.d.ts.map +1 -1
  254. package/dist/slider/index.d.ts +2 -2
  255. package/dist/ssr/index.d.ts +1 -1
  256. package/dist/ssr/index.d.ts.map +1 -1
  257. package/dist/steplist/createStepList.d.ts +36 -0
  258. package/dist/steplist/createStepList.d.ts.map +1 -0
  259. package/dist/steplist/index.d.ts +2 -0
  260. package/dist/steplist/index.d.ts.map +1 -0
  261. package/dist/switch/createSwitch.d.ts +6 -4
  262. package/dist/switch/createSwitch.d.ts.map +1 -1
  263. package/dist/switch/index.d.ts +1 -1
  264. package/dist/table/createTable.d.ts +3 -3
  265. package/dist/table/createTable.d.ts.map +1 -1
  266. package/dist/table/createTableCell.d.ts +3 -3
  267. package/dist/table/createTableCell.d.ts.map +1 -1
  268. package/dist/table/createTableColumnHeader.d.ts +3 -3
  269. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  270. package/dist/table/createTableColumnResize.d.ts +41 -0
  271. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  272. package/dist/table/createTableHeaderRow.d.ts +3 -3
  273. package/dist/table/createTableRow.d.ts +3 -3
  274. package/dist/table/createTableRow.d.ts.map +1 -1
  275. package/dist/table/createTableRowGroup.d.ts +2 -2
  276. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  277. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  278. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  279. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  280. package/dist/table/index.d.ts +11 -9
  281. package/dist/table/index.d.ts.map +1 -1
  282. package/dist/table/types.d.ts +15 -7
  283. package/dist/table/types.d.ts.map +1 -1
  284. package/dist/tabs/createTabs.d.ts +28 -25
  285. package/dist/tabs/createTabs.d.ts.map +1 -1
  286. package/dist/tabs/index.d.ts +1 -1
  287. package/dist/tag/createTag.d.ts +2 -2
  288. package/dist/tag/createTag.d.ts.map +1 -1
  289. package/dist/tag/createTagGroup.d.ts +5 -5
  290. package/dist/tag/createTagGroup.d.ts.map +1 -1
  291. package/dist/tag/index.d.ts +2 -2
  292. package/dist/tag/index.d.ts.map +1 -1
  293. package/dist/textfield/createTextField.d.ts +17 -11
  294. package/dist/textfield/createTextField.d.ts.map +1 -1
  295. package/dist/textfield/index.d.ts +1 -1
  296. package/dist/textfield/index.d.ts.map +1 -1
  297. package/dist/toast/createToast.d.ts +2 -2
  298. package/dist/toast/createToast.d.ts.map +1 -1
  299. package/dist/toast/createToastRegion.d.ts +5 -3
  300. package/dist/toast/createToastRegion.d.ts.map +1 -1
  301. package/dist/toast/index.d.ts +2 -2
  302. package/dist/toast/index.d.ts.map +1 -1
  303. package/dist/toggle/createToggle.d.ts +9 -9
  304. package/dist/toggle/createToggle.d.ts.map +1 -1
  305. package/dist/toggle/createToggleState.d.ts +2 -2
  306. package/dist/toggle/createToggleState.d.ts.map +1 -1
  307. package/dist/toggle/index.d.ts +4 -4
  308. package/dist/toggle/index.d.ts.map +1 -1
  309. package/dist/toolbar/createToolbar.d.ts +9 -9
  310. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  311. package/dist/toolbar/index.d.ts +1 -1
  312. package/dist/toolbar/index.d.ts.map +1 -1
  313. package/dist/tooltip/createTooltip.d.ts +5 -5
  314. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  315. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  316. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  317. package/dist/tooltip/index.d.ts +2 -2
  318. package/dist/tree/createTree.d.ts +3 -3
  319. package/dist/tree/createTree.d.ts.map +1 -1
  320. package/dist/tree/createTreeItem.d.ts +4 -4
  321. package/dist/tree/createTreeItem.d.ts.map +1 -1
  322. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  323. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  324. package/dist/tree/index.d.ts +4 -4
  325. package/dist/tree/types.d.ts +10 -6
  326. package/dist/tree/types.d.ts.map +1 -1
  327. package/dist/utils/createDescription.d.ts +2 -2
  328. package/dist/utils/createDescription.d.ts.map +1 -1
  329. package/dist/utils/dom.d.ts.map +1 -1
  330. package/dist/utils/env.d.ts.map +1 -1
  331. package/dist/utils/focus.d.ts +1 -1
  332. package/dist/utils/focus.d.ts.map +1 -1
  333. package/dist/utils/geometry.d.ts.map +1 -1
  334. package/dist/utils/index.d.ts +12 -12
  335. package/dist/utils/index.d.ts.map +1 -1
  336. package/dist/utils/mergeProps.d.ts.map +1 -1
  337. package/dist/utils/reactivity.d.ts +1 -1
  338. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  339. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  340. package/dist/visually-hidden/index.d.ts +1 -1
  341. package/package.json +32 -32
  342. package/src/actiongroup/createActionGroup.ts +101 -91
  343. package/src/actiongroup/index.ts +1 -1
  344. package/src/autocomplete/createAutocomplete.ts +117 -134
  345. package/src/autocomplete/index.ts +1 -1
  346. package/src/breadcrumbs/createBreadcrumbs.ts +33 -42
  347. package/src/breadcrumbs/index.ts +1 -1
  348. package/src/button/createButton.ts +102 -73
  349. package/src/button/createToggleButton.ts +10 -10
  350. package/src/button/createToggleButtonGroup.ts +25 -32
  351. package/src/button/index.ts +6 -9
  352. package/src/button/types.ts +18 -12
  353. package/src/calendar/createCalendar.ts +62 -29
  354. package/src/calendar/createCalendarCell.ts +98 -46
  355. package/src/calendar/createCalendarGrid.ts +57 -35
  356. package/src/calendar/createRangeCalendar.ts +66 -31
  357. package/src/calendar/createRangeCalendarCell.ts +92 -31
  358. package/src/calendar/index.ts +5 -9
  359. package/src/calendar/intl/index.ts +210 -0
  360. package/src/calendar/utils.ts +227 -0
  361. package/src/checkbox/createCheckbox.ts +13 -21
  362. package/src/checkbox/createCheckboxGroup.ts +68 -44
  363. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  364. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  365. package/src/checkbox/index.ts +8 -10
  366. package/src/collections/index.ts +33 -29
  367. package/src/color/createColorArea.ts +232 -154
  368. package/src/color/createColorField.ts +107 -58
  369. package/src/color/createColorSlider.ts +231 -73
  370. package/src/color/createColorSwatch.ts +38 -13
  371. package/src/color/createColorWheel.ts +208 -83
  372. package/src/color/index.ts +6 -6
  373. package/src/color/types.ts +98 -16
  374. package/src/combobox/createComboBox.ts +157 -100
  375. package/src/combobox/index.ts +1 -1
  376. package/src/combobox/intl/index.ts +5 -5
  377. package/src/datepicker/createDateField.ts +192 -39
  378. package/src/datepicker/createDatePicker.ts +260 -67
  379. package/src/datepicker/createDatePickerGroup.ts +149 -0
  380. package/src/datepicker/createDateRangePicker.ts +105 -57
  381. package/src/datepicker/createDateSegment.ts +183 -96
  382. package/src/datepicker/createTimeField.ts +38 -34
  383. package/src/datepicker/createTimeSegment.ts +67 -85
  384. package/src/datepicker/index.ts +13 -14
  385. package/src/dialog/createDialog.ts +45 -38
  386. package/src/dialog/index.ts +2 -2
  387. package/src/dialog/types.ts +4 -4
  388. package/src/disclosure/createDisclosure.ts +138 -33
  389. package/src/disclosure/createDisclosureGroup.ts +8 -21
  390. package/src/disclosure/index.ts +2 -2
  391. package/src/dnd/createDrag.ts +19 -25
  392. package/src/dnd/createDraggableCollection.ts +4 -4
  393. package/src/dnd/createDraggableItem.ts +20 -19
  394. package/src/dnd/createDrop.ts +42 -51
  395. package/src/dnd/createDroppableCollection.ts +290 -173
  396. package/src/dnd/createDroppableItem.ts +34 -34
  397. package/src/dnd/index.ts +23 -12
  398. package/src/dnd/types.ts +4 -7
  399. package/src/dnd/utils.ts +36 -49
  400. package/src/focus/FocusScope.tsx +155 -164
  401. package/src/focus/createAutoFocus.ts +4 -20
  402. package/src/focus/createFocusRestore.ts +15 -28
  403. package/src/focus/createVirtualFocus.ts +20 -36
  404. package/src/focus/index.ts +4 -8
  405. package/src/form/createFormReset.ts +4 -4
  406. package/src/form/createFormValidation.ts +20 -43
  407. package/src/form/index.ts +2 -5
  408. package/src/grid/GridKeyboardDelegate.ts +30 -30
  409. package/src/grid/createGrid.ts +36 -36
  410. package/src/grid/createGridCell.ts +18 -18
  411. package/src/grid/createGridRow.ts +14 -14
  412. package/src/grid/index.ts +5 -5
  413. package/src/grid/types.ts +8 -8
  414. package/src/gridlist/createGridList.ts +34 -29
  415. package/src/gridlist/createGridListItem.ts +68 -23
  416. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  417. package/src/gridlist/index.ts +4 -4
  418. package/src/gridlist/types.ts +11 -7
  419. package/src/i18n/createCollator.ts +5 -18
  420. package/src/i18n/createDateFormatter.ts +5 -13
  421. package/src/i18n/createFilter.ts +11 -24
  422. package/src/i18n/createNumberFormatter.ts +4 -6
  423. package/src/i18n/createStringFormatter.ts +19 -15
  424. package/src/i18n/index.ts +8 -11
  425. package/src/i18n/locale.tsx +15 -40
  426. package/src/i18n/utils.ts +35 -39
  427. package/src/index.ts +68 -169
  428. package/src/interactions/FocusableProvider.tsx +3 -7
  429. package/src/interactions/PressEvent.ts +4 -4
  430. package/src/interactions/createFocus.ts +12 -8
  431. package/src/interactions/createFocusRing.ts +21 -19
  432. package/src/interactions/createFocusWithin.ts +20 -13
  433. package/src/interactions/createFocusable.ts +15 -16
  434. package/src/interactions/createHover.ts +70 -55
  435. package/src/interactions/createInteractionModality.ts +75 -82
  436. package/src/interactions/createKeyboard.ts +2 -2
  437. package/src/interactions/createLongPress.ts +23 -23
  438. package/src/interactions/createMove.ts +72 -62
  439. package/src/interactions/createPress.ts +164 -87
  440. package/src/interactions/index.ts +24 -16
  441. package/src/label/createField.ts +18 -19
  442. package/src/label/createLabel.ts +18 -30
  443. package/src/label/createLabels.ts +8 -12
  444. package/src/label/index.ts +5 -5
  445. package/src/landmark/createLandmark.ts +30 -51
  446. package/src/landmark/index.ts +1 -1
  447. package/src/link/createLink.ts +83 -56
  448. package/src/link/index.ts +1 -1
  449. package/src/listbox/createListBox.ts +69 -58
  450. package/src/listbox/createOption.ts +83 -37
  451. package/src/listbox/index.ts +2 -6
  452. package/src/live-announcer/announce.ts +44 -71
  453. package/src/live-announcer/index.ts +1 -1
  454. package/src/menu/createMenu.ts +79 -50
  455. package/src/menu/createMenuItem.ts +79 -27
  456. package/src/menu/createMenuTrigger.ts +15 -15
  457. package/src/menu/index.ts +3 -12
  458. package/src/meter/createMeter.ts +7 -15
  459. package/src/meter/index.ts +1 -1
  460. package/src/numberfield/createNumberField.ts +138 -81
  461. package/src/numberfield/index.ts +1 -1
  462. package/src/overlays/ariaHideOutside.ts +14 -10
  463. package/src/overlays/createInteractOutside.ts +21 -18
  464. package/src/overlays/createModal.tsx +17 -17
  465. package/src/overlays/createOverlay.ts +38 -8
  466. package/src/overlays/createOverlayTrigger.ts +16 -16
  467. package/src/overlays/createPreventScroll.ts +46 -24
  468. package/src/overlays/index.ts +6 -17
  469. package/src/popover/calculatePosition.ts +115 -117
  470. package/src/popover/createOverlayPosition.ts +46 -40
  471. package/src/popover/createPopover.ts +42 -17
  472. package/src/popover/index.ts +3 -3
  473. package/src/progress/createProgressBar.ts +31 -32
  474. package/src/progress/index.ts +1 -1
  475. package/src/radio/createRadio.ts +95 -73
  476. package/src/radio/createRadioGroup.ts +83 -77
  477. package/src/radio/createRadioGroupState.ts +7 -31
  478. package/src/radio/index.ts +3 -8
  479. package/src/searchfield/createSearchField.ts +57 -29
  480. package/src/searchfield/index.ts +2 -2
  481. package/src/select/createHiddenSelect.tsx +57 -44
  482. package/src/select/createSelect.ts +128 -71
  483. package/src/select/index.ts +2 -7
  484. package/src/selection/createTypeSelect.ts +11 -11
  485. package/src/selection/index.ts +1 -1
  486. package/src/separator/createSeparator.ts +20 -25
  487. package/src/separator/index.ts +1 -1
  488. package/src/slider/createSlider.ts +93 -124
  489. package/src/slider/index.ts +2 -2
  490. package/src/ssr/index.tsx +8 -47
  491. package/src/steplist/createStepList.ts +106 -0
  492. package/src/steplist/index.ts +8 -0
  493. package/src/switch/createSwitch.ts +9 -14
  494. package/src/switch/index.ts +1 -1
  495. package/src/table/createTable.ts +152 -85
  496. package/src/table/createTableCell.ts +17 -16
  497. package/src/table/createTableColumnHeader.ts +67 -20
  498. package/src/table/createTableColumnResize.ts +256 -0
  499. package/src/table/createTableHeaderRow.ts +7 -7
  500. package/src/table/createTableRow.ts +149 -29
  501. package/src/table/createTableRowGroup.ts +5 -7
  502. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  503. package/src/table/createTableSelectionCheckbox.ts +8 -8
  504. package/src/table/index.ts +14 -9
  505. package/src/table/types.ts +15 -7
  506. package/src/tabs/createTabs.ts +74 -92
  507. package/src/tabs/index.ts +1 -1
  508. package/src/tag/createTag.ts +52 -50
  509. package/src/tag/createTagGroup.ts +47 -41
  510. package/src/tag/index.ts +2 -6
  511. package/src/textfield/createTextField.ts +67 -35
  512. package/src/textfield/index.ts +1 -5
  513. package/src/toast/createToast.ts +28 -26
  514. package/src/toast/createToastRegion.ts +169 -26
  515. package/src/toast/index.ts +2 -6
  516. package/src/toggle/createToggle.ts +95 -53
  517. package/src/toggle/createToggleState.ts +2 -10
  518. package/src/toggle/index.ts +4 -5
  519. package/src/toolbar/createToolbar.ts +193 -210
  520. package/src/toolbar/index.ts +1 -1
  521. package/src/tooltip/createTooltip.ts +11 -24
  522. package/src/tooltip/createTooltipTrigger.ts +61 -49
  523. package/src/tooltip/index.ts +2 -2
  524. package/src/tree/createTree.ts +35 -37
  525. package/src/tree/createTreeItem.ts +29 -29
  526. package/src/tree/createTreeSelectionCheckbox.ts +11 -8
  527. package/src/tree/index.ts +4 -4
  528. package/src/tree/types.ts +10 -6
  529. package/src/utils/createDescription.ts +6 -23
  530. package/src/utils/dom.ts +61 -54
  531. package/src/utils/env.ts +9 -11
  532. package/src/utils/events.ts +7 -7
  533. package/src/utils/filterDOMProps.ts +49 -49
  534. package/src/utils/focus.ts +60 -68
  535. package/src/utils/geometry.ts +1 -4
  536. package/src/utils/globalListeners.ts +9 -9
  537. package/src/utils/index.ts +12 -22
  538. package/src/utils/mergeProps.ts +42 -15
  539. package/src/utils/platform.ts +2 -2
  540. package/src/utils/reactivity.ts +3 -3
  541. package/src/utils/textSelection.ts +16 -16
  542. package/src/visually-hidden/createVisuallyHidden.ts +16 -28
  543. package/src/visually-hidden/index.ts +1 -1
  544. package/dist/i18n/NumberFormatter.d.ts +0 -43
  545. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  546. package/dist/index.ssr.js +0 -17082
  547. package/dist/index.ssr.js.map +0 -1
  548. package/src/i18n/NumberFormatter.ts +0 -266
@@ -5,17 +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 { useLocale } from '../i18n';
14
- import type { DateFieldState, CalendarState } from '@proyecto-viviana/solid-stately';
15
-
16
- // ============================================
17
- // TYPES
18
- // ============================================
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";
19
17
 
20
18
  export interface AriaDatePickerProps {
21
19
  /** An ID for the date picker. */
@@ -23,11 +21,11 @@ export interface AriaDatePickerProps {
23
21
  /** A visible label for the date picker. */
24
22
  label?: string;
25
23
  /** An accessible label for the date picker. */
26
- 'aria-label'?: string;
24
+ "aria-label"?: string;
27
25
  /** The ID of an element that labels the date picker. */
28
- 'aria-labelledby'?: string;
26
+ "aria-labelledby"?: string;
29
27
  /** The ID of an element that describes the date picker. */
30
- 'aria-describedby'?: string;
28
+ "aria-describedby"?: string;
31
29
  /** Whether the date picker is disabled. */
32
30
  isDisabled?: boolean;
33
31
  /** Whether the date picker is read-only. */
@@ -46,6 +44,38 @@ export interface AriaDatePickerProps {
46
44
  dialogAriaLabel?: string;
47
45
  /** Accessible label for the calendar grid region. */
48
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";
49
79
  }
50
80
 
51
81
  export interface DatePickerState {
@@ -76,12 +106,22 @@ export interface DatePickerAria {
76
106
  descriptionProps: Record<string, unknown>;
77
107
  /** Props for the error message element. */
78
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
+ };
79
123
  }
80
124
 
81
- // ============================================
82
- // IMPLEMENTATION
83
- // ============================================
84
-
85
125
  /**
86
126
  * Provides the behavior and accessibility implementation for a date picker component.
87
127
  */
@@ -89,7 +129,7 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
89
129
  props: MaybeAccessor<AriaDatePickerProps>,
90
130
  state: T,
91
131
  overlayState: DatePickerState,
92
- _calendarState?: C
132
+ _calendarState?: C,
93
133
  ): DatePickerAria {
94
134
  const locale = useLocale();
95
135
  const getProps = () => access(props);
@@ -97,108 +137,243 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
97
137
  const descriptionId = createId();
98
138
  const errorMessageId = createId();
99
139
  const dialogId = createId();
140
+ const buttonId = createId();
141
+ const fieldId = createId();
100
142
 
101
143
  // Create label handling
102
144
  const { labelProps, fieldProps: labelFieldProps } = createLabel({
103
- get label() { return getProps().label; },
104
- get 'aria-label'() { return getProps()['aria-label']; },
105
- get 'aria-labelledby'() { return getProps()['aria-labelledby']; },
106
- 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",
107
155
  });
108
156
 
109
157
  // Build aria-describedby
110
158
  const getAriaDescribedBy = () => {
111
159
  const p = getProps();
112
160
  const ids: string[] = [];
113
- if (p['aria-describedby']) {
114
- ids.push(p['aria-describedby']);
161
+ if (p["aria-describedby"]) {
162
+ ids.push(p["aria-describedby"]);
163
+ }
164
+ if (valueDescription()) {
165
+ ids.push(valueDescriptionId);
115
166
  }
116
167
  if (p.description) {
117
168
  ids.push(descriptionId);
118
169
  }
119
- if (p.isInvalid && p.errorMessage) {
170
+ if ((p.isInvalid || state.isInvalid()) && p.errorMessage) {
120
171
  ids.push(errorMessageId);
121
172
  }
122
- return ids.length > 0 ? ids.join(' ') : undefined;
173
+ return ids.length > 0 ? ids.join(" ") : undefined;
123
174
  };
124
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
+
125
189
  // Group props
126
190
  const groupProps = createMemo(() => {
127
191
  const p = getProps();
128
192
  const isInvalid = p.isInvalid || state.isInvalid();
193
+ const describedBy = getAriaDescribedBy();
194
+ const labelField = labelFieldProps as Record<string, unknown>;
129
195
 
130
- return mergeProps(labelFieldProps as Record<string, unknown>, {
196
+ return {
131
197
  id,
132
- role: 'group',
133
- 'aria-disabled': p.isDisabled || state.isDisabled() || undefined,
134
- 'aria-readonly': p.isReadOnly || state.isReadOnly() || undefined,
135
- 'aria-required': p.isRequired || state.isRequired() || undefined,
136
- 'aria-invalid': isInvalid || undefined,
137
- 'aria-describedby': getAriaDescribedBy(),
138
- });
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
+ };
207
+ });
208
+
209
+ // Field props - applied to DateInput container
210
+ const fieldProps = createMemo(() => {
211
+ const p = getProps();
212
+ const describedBy = getAriaDescribedBy();
213
+
214
+ return {
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);
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,
233
+ };
139
234
  });
140
235
 
141
- // Field props are applied to DateInput (a non-popup container), so avoid
142
- // popup trigger attributes like aria-expanded/aria-haspopup here.
143
- const fieldProps = createMemo(() => ({}));
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
+ });
144
246
 
145
- // Button props
146
247
  const buttonProps = createMemo(() => {
147
248
  const p = getProps();
148
249
  const isDisabled = p.isDisabled || state.isDisabled();
149
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();
150
254
 
151
- return {
152
- 'aria-label': p.buttonAriaLabel ?? defaults.button,
153
- 'aria-haspopup': 'dialog' as const,
154
- 'aria-expanded': overlayState.isOpen,
155
- 'aria-controls': overlayState.isOpen ? dialogId : undefined,
156
- disabled: isDisabled,
157
- tabIndex: -1,
158
- onClick: () => {
159
- if (!isDisabled) {
160
- overlayState.toggle();
161
- }
162
- },
163
- };
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
+ });
164
267
  });
165
268
 
166
269
  // Dialog props
167
270
  const dialogProps = createMemo(() => {
271
+ const p = getProps();
168
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
+
169
276
  return {
170
277
  id: dialogId,
171
- role: 'dialog',
172
- 'aria-modal': true,
173
- 'aria-label': getProps().dialogAriaLabel ?? defaults.dialog,
278
+ role: "dialog",
279
+ "aria-modal": true,
280
+ "aria-labelledby": labelledBy,
281
+ "aria-label": p.dialogAriaLabel ?? defaults.dialog,
174
282
  };
175
283
  });
176
284
 
177
285
  // Calendar props
178
286
  const calendarProps = createMemo(() => {
287
+ const p = getProps();
179
288
  const defaults = getDatePickerLabelDefaults(locale().locale);
289
+ const currentValue = state.value?.();
290
+
180
291
  return {
181
- 'aria-label': getProps().calendarAriaLabel ?? getProps().dialogAriaLabel ?? defaults.calendar,
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,
182
315
  };
183
316
  });
184
317
 
185
- // Description props
318
+ // Description props for the description element
186
319
  const descriptionProps = createMemo(() => ({
187
320
  id: descriptionId,
188
321
  }));
189
322
 
323
+ // Value description element props
324
+ const valueDescriptionProps = createMemo(() => ({
325
+ id: valueDescriptionId,
326
+ "aria-hidden": true,
327
+ }));
328
+
190
329
  // Error message props
191
330
  const errorMessageProps = createMemo(() => ({
192
331
  id: errorMessageId,
193
- role: 'alert',
332
+ role: "alert",
194
333
  }));
195
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
+
196
371
  return {
197
372
  get groupProps() {
198
373
  return groupProps();
199
374
  },
200
375
  get labelProps() {
201
- return labelProps as Record<string, unknown>;
376
+ return enhancedLabelProps() as Record<string, unknown>;
202
377
  },
203
378
  get fieldProps() {
204
379
  return fieldProps();
@@ -218,6 +393,24 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
218
393
  get errorMessageProps() {
219
394
  return errorMessageProps();
220
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
+ },
221
414
  };
222
415
  }
223
416
 
@@ -226,19 +419,19 @@ function getDatePickerLabelDefaults(locale: string): {
226
419
  dialog: string;
227
420
  calendar: string;
228
421
  } {
229
- const language = locale.toLowerCase().split('-')[0] ?? 'en';
422
+ const language = locale.toLowerCase().split("-")[0] ?? "en";
230
423
 
231
- if (language === 'es') {
424
+ if (language === "es") {
232
425
  return {
233
- button: 'Abrir calendario',
234
- dialog: 'Calendario',
235
- calendar: 'Calendario',
426
+ button: "Abrir calendario",
427
+ dialog: "Calendario",
428
+ calendar: "Calendario",
236
429
  };
237
430
  }
238
431
 
239
432
  return {
240
- button: 'Open calendar',
241
- dialog: 'Calendar',
242
- calendar: 'Calendar',
433
+ button: "Open calendar",
434
+ dialog: "Calendar",
435
+ calendar: "Calendar",
243
436
  };
244
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
+ }