@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,14 +5,16 @@
5
5
  * Based on @react-aria/calendar useCalendarCell
6
6
  */
7
7
 
8
- import { createSignal, createMemo, createEffect } from 'solid-js';
9
- import { access, type MaybeAccessor } from '../utils/reactivity';
10
- import type { CalendarState, CalendarDate, DateValue } from '@proyecto-viviana/solid-stately';
11
- import { isToday as isTodayUtil, DateFormatter, getLocalTimeZone } from '@internationalized/date';
12
-
13
- // ============================================
14
- // TYPES
15
- // ============================================
8
+ import { createSignal, createMemo, createEffect, type Accessor } from "solid-js";
9
+ import { access, type MaybeAccessor } from "../utils/reactivity";
10
+ import { focusSafely } from "../utils/focus";
11
+ import { createFocusRing } from "../interactions/createFocusRing";
12
+ import { getInteractionModality } from "../interactions/createInteractionModality";
13
+ import { useLocale } from "../i18n";
14
+ import { mergeProps } from "../utils/mergeProps";
15
+ import type { CalendarState, CalendarDate, DateValue } from "@proyecto-viviana/solid-stately";
16
+ import { isToday as isTodayUtil, DateFormatter, getLocalTimeZone } from "@internationalized/date";
17
+ import { getCalendarHookData } from "./utils";
16
18
 
17
19
  export interface AriaCalendarCellProps {
18
20
  /** The date represented by the cell. */
@@ -32,10 +34,14 @@ export interface CalendarCellAria {
32
34
  isSelected: boolean;
33
35
  /** Whether the cell is focused. */
34
36
  isFocused: boolean;
37
+ /** Whether the cell should display a keyboard focus ring. */
38
+ isFocusVisible: boolean;
35
39
  /** Whether the cell is disabled. */
36
40
  isDisabled: boolean;
37
41
  /** Whether the cell is unavailable (e.g., booked date). */
38
42
  isUnavailable: boolean;
43
+ /** Whether the cell is part of an invalid selection. */
44
+ isInvalid: boolean;
39
45
  /** Whether the cell is outside the visible month. */
40
46
  isOutsideMonth: boolean;
41
47
  /** Whether the cell represents today. */
@@ -46,21 +52,22 @@ export interface CalendarCellAria {
46
52
  formattedDate: string;
47
53
  }
48
54
 
49
- // ============================================
50
- // IMPLEMENTATION
51
- // ============================================
52
-
53
55
  /**
54
56
  * Provides the behavior and accessibility implementation for a calendar cell.
55
57
  */
56
58
  export function createCalendarCell<T extends CalendarState>(
57
59
  props: MaybeAccessor<AriaCalendarCellProps>,
58
60
  state: T,
59
- ref?: () => HTMLElement | null
61
+ ref?: () => HTMLElement | null,
60
62
  ): CalendarCellAria {
61
63
  const getProps = () => access(props);
62
64
  const [isPressed, setIsPressed] = createSignal(false);
65
+ const { focusProps, isFocusVisible: isRingFocusVisible } = createFocusRing();
63
66
  const timeZone = getLocalTimeZone();
67
+ const inheritedLocale = useLocale();
68
+ const stateWithLocale = state as T & { locale?: Accessor<string> };
69
+ const locale = () => stateWithLocale.locale?.() ?? inheritedLocale().locale;
70
+ let ignoreNextClick = false;
64
71
 
65
72
  // Get the date from props
66
73
  const date = createMemo(() => getProps().date as CalendarDate);
@@ -68,16 +75,32 @@ export function createCalendarCell<T extends CalendarState>(
68
75
  // Check states
69
76
  const isSelected = createMemo(() => state.isSelected(date()));
70
77
  const isFocused = createMemo(() => state.isCellFocused(date()));
78
+ const isInvalid = createMemo(() => state.isValueInvalid() && isSelected());
71
79
  const isDisabled = createMemo(() => {
72
80
  return getProps().isDisabled || state.isCellDisabled(date());
73
81
  });
74
82
  const isUnavailable = createMemo(() => state.isCellUnavailable(date()));
75
- const isOutsideMonth = createMemo(() => getProps().isOutsideMonth ?? state.isOutsideVisibleRange(date()));
83
+ const isOutsideMonth = createMemo(
84
+ () => getProps().isOutsideMonth ?? state.isOutsideVisibleRange(date()),
85
+ );
76
86
  const isToday = createMemo(() => isTodayUtil(date(), timeZone));
87
+ const isCellFocusVisible = createMemo(
88
+ () => isFocused() && isRingFocusVisible() && getInteractionModality() !== null,
89
+ );
77
90
 
78
91
  // Format the date for display
79
92
  const formattedDate = createMemo(() => {
80
- return date().day.toString();
93
+ const d = date();
94
+ const formatter = new DateFormatter(locale(), {
95
+ day: "numeric",
96
+ timeZone,
97
+ calendar: d.calendar.identifier,
98
+ } as Intl.DateTimeFormatOptions);
99
+
100
+ return (
101
+ formatter.formatToParts(d.toDate(timeZone)).find((part) => part.type === "day")?.value ??
102
+ d.day.toString()
103
+ );
81
104
  });
82
105
 
83
106
  // Handle pointer down - this is where selection happens
@@ -89,6 +112,7 @@ export function createCalendarCell<T extends CalendarState>(
89
112
  // Select the date on pointer down for immediate response
90
113
  // This matches React Aria's behavior of using onPressStart
91
114
  state.selectDate(date());
115
+ ignoreNextClick = true;
92
116
  // Prevent default to avoid double-triggering with onClick
93
117
  e.preventDefault();
94
118
  }
@@ -96,6 +120,11 @@ export function createCalendarCell<T extends CalendarState>(
96
120
 
97
121
  // Handle click - kept for accessibility (keyboard Enter/Space)
98
122
  const handleClick = () => {
123
+ if (ignoreNextClick) {
124
+ ignoreNextClick = false;
125
+ return;
126
+ }
127
+
99
128
  // Only select on click if not already selected via pointerdown
100
129
  // This handles keyboard activation (Enter/Space)
101
130
  if (!isDisabled() && !isUnavailable()) {
@@ -108,50 +137,67 @@ export function createCalendarCell<T extends CalendarState>(
108
137
  };
109
138
 
110
139
  // Keep DOM focus synchronized with focused date updates.
140
+ // Use focusSafely (preventScroll) to match @react-aria/calendar — bare focus()
141
+ // causes the browser to auto-scroll the page when bringing the cell into view,
142
+ // which is wrong inside a popover. Scroll-into-view should be opt-in based on
143
+ // interaction modality (handled at a higher layer when needed).
111
144
  createEffect(() => {
112
145
  const element = ref?.();
113
146
  if (element && isFocused()) {
114
- element.focus();
147
+ focusSafely(element);
115
148
  }
116
149
  });
117
150
 
118
151
  // Cell props (for the td element)
119
152
  const cellProps = createMemo(() => ({
120
- role: 'gridcell',
121
- 'aria-disabled': isDisabled() || undefined,
122
- 'aria-selected': isSelected() || undefined,
153
+ role: "gridcell",
154
+ "aria-disabled": isDisabled() || isUnavailable() || undefined,
155
+ "aria-selected": isSelected() || undefined,
156
+ "aria-invalid": isInvalid() || undefined,
123
157
  }));
124
158
 
125
159
  // Button props (for the interactive element inside)
126
160
  const buttonProps = createMemo(() => {
127
161
  const d = date();
128
- const formatter = new DateFormatter('en-US', {
129
- weekday: 'long',
130
- year: 'numeric',
131
- month: 'long',
132
- day: 'numeric',
133
- });
134
-
135
- return {
136
- role: 'button',
137
- tabIndex: isFocused() ? 0 : -1,
138
- 'aria-label': formatter.format(d.toDate(timeZone)),
139
- 'aria-disabled': isDisabled() || undefined,
140
- 'aria-pressed': isPressed() || undefined,
141
- disabled: isDisabled(),
142
- onClick: handleClick,
143
- onPointerDown: handlePointerDown,
144
- onPointerUp: handlePointerUp,
145
- onPointerLeave: handlePointerUp,
146
- onFocus: () => {
147
- // Only update if this cell isn't already the focused date
148
- // This prevents infinite loops when focus is programmatically set
149
- if (!state.isCellFocused(d)) {
150
- state.setFocusedDate(d);
151
- }
152
- state.setFocused(true);
153
- },
154
- };
162
+ const formatter = new DateFormatter(locale(), {
163
+ weekday: "long",
164
+ year: "numeric",
165
+ month: "long",
166
+ day: "numeric",
167
+ calendar: d.calendar.identifier,
168
+ } as Intl.DateTimeFormatOptions);
169
+ let label = formatter.format(d.toDate(timeZone));
170
+ if (isSelected()) {
171
+ label += " selected";
172
+ }
173
+ const errorMessageId = getCalendarHookData(state)?.errorMessageId;
174
+
175
+ return mergeProps(
176
+ focusProps as Record<string, unknown>,
177
+ {
178
+ role: "button",
179
+ tabIndex: isFocused() ? 0 : -1,
180
+ "aria-label": label,
181
+ "aria-disabled": isDisabled() || isUnavailable() || undefined,
182
+ "aria-invalid": isInvalid() || undefined,
183
+ "aria-describedby": isInvalid() ? errorMessageId : undefined,
184
+ "aria-pressed": isPressed() || undefined,
185
+ "data-focus-visible": isCellFocusVisible() || undefined,
186
+ disabled: isDisabled() || isUnavailable(),
187
+ onClick: handleClick,
188
+ onPointerDown: handlePointerDown,
189
+ onPointerUp: handlePointerUp,
190
+ onPointerLeave: handlePointerUp,
191
+ onFocus: () => {
192
+ // Only update if this cell isn't already the focused date.
193
+ // This prevents infinite loops when focus is programmatically set.
194
+ if (!state.isCellFocused(d)) {
195
+ state.setFocusedDate(d);
196
+ }
197
+ state.setFocused(true);
198
+ },
199
+ } as Record<string, unknown>,
200
+ );
155
201
  });
156
202
 
157
203
  return {
@@ -167,12 +213,18 @@ export function createCalendarCell<T extends CalendarState>(
167
213
  get isFocused() {
168
214
  return isFocused();
169
215
  },
216
+ get isFocusVisible() {
217
+ return isCellFocusVisible();
218
+ },
170
219
  get isDisabled() {
171
220
  return isDisabled();
172
221
  },
173
222
  get isUnavailable() {
174
223
  return isUnavailable();
175
224
  },
225
+ get isInvalid() {
226
+ return isInvalid();
227
+ },
176
228
  get isOutsideMonth() {
177
229
  return isOutsideMonth();
178
230
  },
@@ -5,13 +5,10 @@
5
5
  * Based on @react-aria/calendar useCalendarGrid
6
6
  */
7
7
 
8
- import { createMemo } from 'solid-js';
9
- import { type MaybeAccessor } from '../utils/reactivity';
10
- import type { CalendarState, CalendarDate } from '@proyecto-viviana/solid-stately';
11
-
12
- // ============================================
13
- // TYPES
14
- // ============================================
8
+ import { createMemo } from "solid-js";
9
+ import { DateFormatter, startOfWeek, today } from "@internationalized/date";
10
+ import { access, type MaybeAccessor } from "../utils/reactivity";
11
+ import type { CalendarState, CalendarDate } from "@proyecto-viviana/solid-stately";
15
12
 
16
13
  export interface AriaCalendarGridProps {
17
14
  /** The start date of the grid (defaults to start of focused month). */
@@ -19,7 +16,7 @@ export interface AriaCalendarGridProps {
19
16
  /** The end date of the grid (defaults to end of focused month). */
20
17
  endDate?: CalendarDate;
21
18
  /** The number of weeks to display. */
22
- weekdayStyle?: 'narrow' | 'short' | 'long';
19
+ weekdayStyle?: "narrow" | "short" | "long";
23
20
  }
24
21
 
25
22
  export interface CalendarGridAria {
@@ -31,90 +28,115 @@ export interface CalendarGridAria {
31
28
  weekDays: string[];
32
29
  }
33
30
 
34
- // ============================================
35
- // IMPLEMENTATION
36
- // ============================================
37
-
38
31
  /**
39
32
  * Provides the behavior and accessibility implementation for a calendar grid.
40
33
  */
41
34
  export function createCalendarGrid<T extends CalendarState>(
42
- _props: MaybeAccessor<AriaCalendarGridProps>,
35
+ props: MaybeAccessor<AriaCalendarGridProps>,
43
36
  state: T,
44
- ref?: () => HTMLElement | null
37
+ ref?: () => HTMLElement | null,
45
38
  ): CalendarGridAria {
46
39
  // Week days for headers
47
- const weekDays = createMemo(() => state.weekDays());
40
+ const weekDays = createMemo(() => {
41
+ const gridProps = access(props);
42
+ const formatter = new DateFormatter(state.locale(), {
43
+ weekday: gridProps.weekdayStyle ?? "narrow",
44
+ timeZone: state.timeZone,
45
+ });
46
+ const weekStart = startOfWeek(today(state.timeZone), state.locale(), state.firstDayOfWeek());
47
+
48
+ return Array.from({ length: 7 }, (_, index) =>
49
+ formatter.format(weekStart.add({ days: index }).toDate(state.timeZone)),
50
+ );
51
+ });
48
52
 
49
53
  // Handle keyboard navigation
50
54
  const isRTL = (): boolean => {
51
55
  const element = ref?.();
52
- const scopedDirection = element?.closest('[dir]')?.getAttribute('dir');
53
- const documentDirection = typeof document !== 'undefined' ? document.dir : '';
54
- return (scopedDirection ?? documentDirection) === 'rtl';
56
+ const scopedDirection = element?.closest("[dir]")?.getAttribute("dir");
57
+ const documentDirection = typeof document !== "undefined" ? document.dir : "";
58
+ return (scopedDirection ?? documentDirection) === "rtl";
55
59
  };
56
60
 
57
61
  const handleKeyDown = (e: KeyboardEvent) => {
58
62
  if (state.isDisabled()) return;
59
63
 
60
64
  switch (e.key) {
61
- case 'ArrowLeft':
65
+ case "ArrowLeft":
62
66
  e.preventDefault();
67
+ e.stopPropagation();
63
68
  if (isRTL()) {
64
69
  state.focusNextDay();
65
70
  } else {
66
71
  state.focusPreviousDay();
67
72
  }
68
73
  break;
69
- case 'ArrowRight':
74
+ case "ArrowRight":
70
75
  e.preventDefault();
76
+ e.stopPropagation();
71
77
  if (isRTL()) {
72
78
  state.focusPreviousDay();
73
79
  } else {
74
80
  state.focusNextDay();
75
81
  }
76
82
  break;
77
- case 'ArrowUp':
83
+ case "ArrowUp":
78
84
  e.preventDefault();
85
+ e.stopPropagation();
79
86
  state.focusPreviousWeek();
80
87
  break;
81
- case 'ArrowDown':
88
+ case "ArrowDown":
82
89
  e.preventDefault();
90
+ e.stopPropagation();
83
91
  state.focusNextWeek();
84
92
  break;
85
- case 'PageUp':
93
+ case "PageUp":
86
94
  e.preventDefault();
95
+ e.stopPropagation();
87
96
  if (e.shiftKey) {
88
97
  state.focusPreviousSection(); // Previous year
89
98
  } else {
90
- state.focusPreviousPage(); // Previous month
99
+ state.setFocusedDate(state.focusedDate().subtract({ months: 1 }));
91
100
  }
92
101
  break;
93
- case 'PageDown':
102
+ case "PageDown":
94
103
  e.preventDefault();
104
+ e.stopPropagation();
95
105
  if (e.shiftKey) {
96
106
  state.focusNextSection(); // Next year
97
107
  } else {
98
- state.focusNextPage(); // Next month
108
+ state.setFocusedDate(state.focusedDate().add({ months: 1 }));
99
109
  }
100
110
  break;
101
- case 'Home':
111
+ case "Home":
102
112
  e.preventDefault();
113
+ e.stopPropagation();
103
114
  state.focusPageStart();
104
115
  break;
105
- case 'End':
116
+ case "End":
106
117
  e.preventDefault();
118
+ e.stopPropagation();
107
119
  state.focusPageEnd();
108
120
  break;
109
- case 'Enter':
110
- case ' ':
121
+ case "Enter":
122
+ case " ":
111
123
  e.preventDefault();
112
124
  state.selectFocusedDate();
113
125
  break;
114
- case 'Escape':
115
- if ('setAnchorDate' in state && typeof state.setAnchorDate === 'function') {
126
+ case "Escape":
127
+ if (
128
+ "anchorDate" in state &&
129
+ typeof state.anchorDate === "function" &&
130
+ state.anchorDate() &&
131
+ "setAnchorDate" in state &&
132
+ typeof state.setAnchorDate === "function"
133
+ ) {
116
134
  e.preventDefault();
135
+ e.stopPropagation();
117
136
  state.setAnchorDate(null);
137
+ if ("setDragging" in state && typeof state.setDragging === "function") {
138
+ state.setDragging(false);
139
+ }
118
140
  }
119
141
  break;
120
142
  }
@@ -122,9 +144,9 @@ export function createCalendarGrid<T extends CalendarState>(
122
144
 
123
145
  // Grid props
124
146
  const gridProps = createMemo(() => ({
125
- role: 'grid',
126
- 'aria-readonly': state.isReadOnly() || undefined,
127
- 'aria-disabled': state.isDisabled() || undefined,
147
+ role: "grid",
148
+ "aria-readonly": state.isReadOnly() || undefined,
149
+ "aria-disabled": state.isDisabled() || undefined,
128
150
  tabIndex: state.isFocused() ? 0 : -1,
129
151
  onFocus: () => state.setFocused(true),
130
152
  onBlur: () => state.setFocused(false),
@@ -5,15 +5,17 @@
5
5
  * Based on @react-aria/calendar useRangeCalendar
6
6
  */
7
7
 
8
- import { createMemo } from 'solid-js';
9
- import { createId } from '../ssr';
10
- import { access, type MaybeAccessor } from '../utils/reactivity';
11
- import { mergeProps } from '../utils/mergeProps';
12
- import type { RangeCalendarState } from '@proyecto-viviana/solid-stately';
13
-
14
- // ============================================
15
- // TYPES
16
- // ============================================
8
+ import { createMemo } from "solid-js";
9
+ import { createId } from "../ssr";
10
+ import { access, type MaybeAccessor } from "../utils/reactivity";
11
+ import { mergeProps } from "../utils/mergeProps";
12
+ import type { RangeCalendarState } from "@proyecto-viviana/solid-stately";
13
+ import {
14
+ formatSelectedDateDescription,
15
+ formatVisibleRangeDescription,
16
+ getCalendarHookData,
17
+ setCalendarHookData,
18
+ } from "./utils";
17
19
 
18
20
  export interface AriaRangeCalendarProps {
19
21
  /** An ID for the calendar. */
@@ -23,11 +25,19 @@ export interface AriaRangeCalendarProps {
23
25
  /** Whether the calendar is read-only. */
24
26
  isReadOnly?: boolean;
25
27
  /** An accessible label for the calendar. */
26
- 'aria-label'?: string;
28
+ "aria-label"?: string;
27
29
  /** The ID of an element that labels the calendar. */
28
- 'aria-labelledby'?: string;
30
+ "aria-labelledby"?: string;
29
31
  /** The ID of an element that describes the calendar. */
30
- 'aria-describedby'?: string;
32
+ "aria-describedby"?: string;
33
+ /** The ID of an element that provides additional details about the calendar. */
34
+ "aria-details"?: string;
35
+ /** Whether the current selection is invalid. */
36
+ isInvalid?: boolean;
37
+ /** Error message rendered for invalid selections. */
38
+ errorMessage?: string;
39
+ /** ID of the rendered error message element. */
40
+ errorMessageId?: string;
31
41
  }
32
42
 
33
43
  export interface RangeCalendarAria {
@@ -39,35 +49,55 @@ export interface RangeCalendarAria {
39
49
  nextButtonProps: Record<string, unknown>;
40
50
  /** Props for the title/heading element. */
41
51
  titleProps: Record<string, unknown>;
52
+ /** Props for the error message element, if any. */
53
+ errorMessageProps: Record<string, unknown>;
42
54
  /** An accessible label for the title. */
43
55
  title: string;
44
56
  }
45
57
 
46
- // ============================================
47
- // IMPLEMENTATION
48
- // ============================================
49
-
50
58
  /**
51
59
  * Provides the behavior and accessibility implementation for a range calendar component.
52
60
  */
53
61
  export function createRangeCalendar<T extends RangeCalendarState>(
54
62
  props: MaybeAccessor<AriaRangeCalendarProps>,
55
- state: T
63
+ state: T,
56
64
  ): RangeCalendarAria {
57
65
  const getProps = () => access(props);
58
66
  const id = createId(getProps().id);
59
67
  const titleId = createId();
68
+ const errorMessageId = createId(getProps().errorMessageId);
60
69
 
61
70
  // Title (e.g., "December 2024")
62
71
  const title = createMemo(() => state.title());
72
+ const visibleRangeDescription = createMemo(() => {
73
+ const range = state.visibleRange();
74
+ return formatVisibleRangeDescription(range.start, range.end, state.timeZone, state.locale());
75
+ });
76
+ const calendarLabel = createMemo(() => {
77
+ const p = getProps();
78
+ return [p["aria-label"], visibleRangeDescription()].filter(Boolean).join(", ");
79
+ });
80
+ const selectedDateDescription = createMemo(() => formatSelectedDateDescription(state));
81
+
82
+ const initialProps = getProps();
83
+ const existingHookData = getCalendarHookData(state);
84
+ setCalendarHookData(state, {
85
+ errorMessageId:
86
+ initialProps.errorMessage || initialProps.errorMessageId
87
+ ? errorMessageId
88
+ : existingHookData?.errorMessageId,
89
+ get selectedDateDescription() {
90
+ return selectedDateDescription();
91
+ },
92
+ });
63
93
 
64
94
  // Previous button props
65
95
  const prevButtonProps = createMemo(() => {
66
96
  const p = getProps();
67
- const isDisabled = p.isDisabled || state.isDisabled();
97
+ const isDisabled = p.isDisabled || state.isDisabled() || state.isPreviousVisibleRangeInvalid();
68
98
 
69
99
  return {
70
- 'aria-label': 'Previous month',
100
+ "aria-label": "Previous month",
71
101
  onClick: () => {
72
102
  if (!isDisabled) {
73
103
  state.focusPreviousPage();
@@ -81,10 +111,10 @@ export function createRangeCalendar<T extends RangeCalendarState>(
81
111
  // Next button props
82
112
  const nextButtonProps = createMemo(() => {
83
113
  const p = getProps();
84
- const isDisabled = p.isDisabled || state.isDisabled();
114
+ const isDisabled = p.isDisabled || state.isDisabled() || state.isNextVisibleRangeInvalid();
85
115
 
86
116
  return {
87
- 'aria-label': 'Next month',
117
+ "aria-label": "Next month",
88
118
  onClick: () => {
89
119
  if (!isDisabled) {
90
120
  state.focusNextPage();
@@ -98,22 +128,24 @@ export function createRangeCalendar<T extends RangeCalendarState>(
98
128
  // Title props
99
129
  const titleProps = createMemo(() => ({
100
130
  id: titleId,
101
- 'aria-live': 'polite' as const,
131
+ "aria-live": "polite" as const,
132
+ }));
133
+ const errorMessageProps = createMemo(() => ({
134
+ id: errorMessageId,
102
135
  }));
103
136
 
104
137
  // Calendar container props
105
138
  const calendarProps = createMemo(() => {
106
139
  const p = getProps();
107
140
 
108
- return mergeProps(
109
- {
110
- id,
111
- role: 'group',
112
- 'aria-labelledby': p['aria-labelledby'] ?? titleId,
113
- 'aria-label': p['aria-label'],
114
- 'aria-describedby': p['aria-describedby'],
115
- }
116
- );
141
+ return mergeProps({
142
+ id,
143
+ role: "application",
144
+ "aria-labelledby": p["aria-labelledby"],
145
+ "aria-label": calendarLabel(),
146
+ "aria-describedby": p["aria-describedby"],
147
+ "aria-details": p["aria-details"],
148
+ });
117
149
  });
118
150
 
119
151
  return {
@@ -129,6 +161,9 @@ export function createRangeCalendar<T extends RangeCalendarState>(
129
161
  get titleProps() {
130
162
  return titleProps();
131
163
  },
164
+ get errorMessageProps() {
165
+ return errorMessageProps();
166
+ },
132
167
  get title() {
133
168
  return title();
134
169
  },