@proyecto-viviana/solidaria 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -236
  3. package/dist/actiongroup/createActionGroup.d.ts +29 -0
  4. package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
  5. package/dist/actiongroup/index.d.ts +2 -0
  6. package/dist/actiongroup/index.d.ts.map +1 -0
  7. package/dist/autocomplete/createAutocomplete.d.ts +16 -12
  8. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  9. package/dist/autocomplete/index.d.ts +1 -1
  10. package/dist/autocomplete/index.d.ts.map +1 -1
  11. package/dist/breadcrumbs/createBreadcrumbs.d.ts +11 -7
  12. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  13. package/dist/breadcrumbs/index.d.ts +1 -1
  14. package/dist/button/createButton.d.ts +1 -1
  15. package/dist/button/createButton.d.ts.map +1 -1
  16. package/dist/button/createToggleButton.d.ts +3 -3
  17. package/dist/button/createToggleButtonGroup.d.ts +32 -0
  18. package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
  19. package/dist/button/index.d.ts +6 -4
  20. package/dist/button/index.d.ts.map +1 -1
  21. package/dist/button/types.d.ts +18 -12
  22. package/dist/button/types.d.ts.map +1 -1
  23. package/dist/calendar/createCalendar.d.ts +15 -5
  24. package/dist/calendar/createCalendar.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarCell.d.ts +8 -2
  26. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  27. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  28. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  30. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  31. package/dist/calendar/createRangeCalendarCell.d.ts +7 -3
  32. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  33. package/dist/calendar/index.d.ts +5 -5
  34. package/dist/calendar/index.d.ts.map +1 -1
  35. package/dist/calendar/intl/index.d.ts +12 -0
  36. package/dist/calendar/intl/index.d.ts.map +1 -0
  37. package/dist/calendar/utils.d.ts +12 -0
  38. package/dist/calendar/utils.d.ts.map +1 -0
  39. package/dist/checkbox/createCheckbox.d.ts +6 -6
  40. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroup.d.ts +11 -7
  42. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  44. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  45. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  46. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  47. package/dist/checkbox/index.d.ts +8 -8
  48. package/dist/checkbox/index.d.ts.map +1 -1
  49. package/dist/collections/index.d.ts +56 -0
  50. package/dist/collections/index.d.ts.map +1 -0
  51. package/dist/color/createColorArea.d.ts +3 -3
  52. package/dist/color/createColorArea.d.ts.map +1 -1
  53. package/dist/color/createColorField.d.ts +4 -4
  54. package/dist/color/createColorField.d.ts.map +1 -1
  55. package/dist/color/createColorSlider.d.ts +4 -4
  56. package/dist/color/createColorSlider.d.ts.map +1 -1
  57. package/dist/color/createColorSwatch.d.ts +2 -2
  58. package/dist/color/createColorSwatch.d.ts.map +1 -1
  59. package/dist/color/createColorWheel.d.ts +3 -3
  60. package/dist/color/createColorWheel.d.ts.map +1 -1
  61. package/dist/color/index.d.ts +6 -6
  62. package/dist/color/types.d.ts +98 -16
  63. package/dist/color/types.d.ts.map +1 -1
  64. package/dist/combobox/createComboBox.d.ts +16 -7
  65. package/dist/combobox/createComboBox.d.ts.map +1 -1
  66. package/dist/combobox/index.d.ts +1 -1
  67. package/dist/combobox/intl/index.d.ts +1 -1
  68. package/dist/datepicker/createDateField.d.ts +18 -6
  69. package/dist/datepicker/createDateField.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePicker.d.ts +57 -5
  71. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  72. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  73. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  74. package/dist/datepicker/createDateRangePicker.d.ts +42 -0
  75. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
  76. package/dist/datepicker/createDateSegment.d.ts +11 -3
  77. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeField.d.ts +11 -5
  79. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  80. package/dist/datepicker/createTimeSegment.d.ts +29 -0
  81. package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
  82. package/dist/datepicker/index.d.ts +7 -4
  83. package/dist/datepicker/index.d.ts.map +1 -1
  84. package/dist/dialog/createDialog.d.ts +5 -5
  85. package/dist/dialog/createDialog.d.ts.map +1 -1
  86. package/dist/dialog/index.d.ts +2 -2
  87. package/dist/dialog/index.d.ts.map +1 -1
  88. package/dist/dialog/types.d.ts +4 -4
  89. package/dist/disclosure/createDisclosure.d.ts +5 -2
  90. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  91. package/dist/disclosure/createDisclosureGroup.d.ts +4 -3
  92. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  93. package/dist/disclosure/index.d.ts +2 -2
  94. package/dist/dnd/createDrag.d.ts +2 -2
  95. package/dist/dnd/createDrag.d.ts.map +1 -1
  96. package/dist/dnd/createDraggableCollection.d.ts +6 -2
  97. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  98. package/dist/dnd/createDraggableItem.d.ts +3 -3
  99. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  100. package/dist/dnd/createDrop.d.ts +2 -2
  101. package/dist/dnd/createDrop.d.ts.map +1 -1
  102. package/dist/dnd/createDroppableCollection.d.ts +55 -4
  103. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  104. package/dist/dnd/createDroppableItem.d.ts +3 -3
  105. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  106. package/dist/dnd/index.d.ts +12 -12
  107. package/dist/dnd/index.d.ts.map +1 -1
  108. package/dist/dnd/types.d.ts +2 -2
  109. package/dist/dnd/types.d.ts.map +1 -1
  110. package/dist/dnd/utils.d.ts +1 -1
  111. package/dist/dnd/utils.d.ts.map +1 -1
  112. package/dist/focus/FocusScope.d.ts +1 -1
  113. package/dist/focus/FocusScope.d.ts.map +1 -1
  114. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  115. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  116. package/dist/focus/createVirtualFocus.d.ts +4 -4
  117. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  118. package/dist/focus/index.d.ts +4 -4
  119. package/dist/focus/index.d.ts.map +1 -1
  120. package/dist/form/createFormReset.d.ts +1 -1
  121. package/dist/form/createFormValidation.d.ts +3 -3
  122. package/dist/form/createFormValidation.d.ts.map +1 -1
  123. package/dist/form/index.d.ts +2 -2
  124. package/dist/form/index.d.ts.map +1 -1
  125. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  126. package/dist/grid/createGrid.d.ts +3 -3
  127. package/dist/grid/createGrid.d.ts.map +1 -1
  128. package/dist/grid/createGridCell.d.ts +3 -3
  129. package/dist/grid/createGridRow.d.ts +3 -3
  130. package/dist/grid/index.d.ts +5 -5
  131. package/dist/grid/types.d.ts +8 -8
  132. package/dist/gridlist/createGridList.d.ts +6 -4
  133. package/dist/gridlist/createGridList.d.ts.map +1 -1
  134. package/dist/gridlist/createGridListItem.d.ts +4 -4
  135. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  136. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  137. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  138. package/dist/gridlist/index.d.ts +4 -4
  139. package/dist/gridlist/types.d.ts +11 -7
  140. package/dist/gridlist/types.d.ts.map +1 -1
  141. package/dist/i18n/createCollator.d.ts.map +1 -1
  142. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  143. package/dist/i18n/createFilter.d.ts.map +1 -1
  144. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  145. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  146. package/dist/i18n/createStringFormatter.d.ts +2 -2
  147. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  148. package/dist/i18n/index.d.ts +8 -8
  149. package/dist/i18n/index.d.ts.map +1 -1
  150. package/dist/i18n/locale.d.ts +2 -2
  151. package/dist/i18n/locale.d.ts.map +1 -1
  152. package/dist/i18n/utils.d.ts.map +1 -1
  153. package/dist/index.d.ts +52 -49
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +18089 -15690
  156. package/dist/index.js.map +1 -7
  157. package/dist/index.jsx +18242 -0
  158. package/dist/index.jsx.map +1 -0
  159. package/dist/interactions/FocusableProvider.d.ts +2 -2
  160. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  161. package/dist/interactions/PressEvent.d.ts +2 -2
  162. package/dist/interactions/createFocus.d.ts +1 -1
  163. package/dist/interactions/createFocus.d.ts.map +1 -1
  164. package/dist/interactions/createFocusRing.d.ts +1 -1
  165. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  166. package/dist/interactions/createFocusWithin.d.ts +1 -1
  167. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  168. package/dist/interactions/createFocusable.d.ts +3 -3
  169. package/dist/interactions/createFocusable.d.ts.map +1 -1
  170. package/dist/interactions/createHover.d.ts +5 -5
  171. package/dist/interactions/createHover.d.ts.map +1 -1
  172. package/dist/interactions/createInteractionModality.d.ts +3 -3
  173. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  174. package/dist/interactions/createKeyboard.d.ts +1 -1
  175. package/dist/interactions/createLongPress.d.ts +5 -5
  176. package/dist/interactions/createMove.d.ts +5 -5
  177. package/dist/interactions/createMove.d.ts.map +1 -1
  178. package/dist/interactions/createPress.d.ts +4 -4
  179. package/dist/interactions/createPress.d.ts.map +1 -1
  180. package/dist/interactions/index.d.ts +12 -12
  181. package/dist/interactions/index.d.ts.map +1 -1
  182. package/dist/label/createField.d.ts +4 -4
  183. package/dist/label/createField.d.ts.map +1 -1
  184. package/dist/label/createLabel.d.ts +7 -7
  185. package/dist/label/createLabel.d.ts.map +1 -1
  186. package/dist/label/createLabels.d.ts +1 -1
  187. package/dist/label/createLabels.d.ts.map +1 -1
  188. package/dist/label/index.d.ts +5 -5
  189. package/dist/landmark/createLandmark.d.ts +5 -5
  190. package/dist/landmark/createLandmark.d.ts.map +1 -1
  191. package/dist/landmark/index.d.ts +1 -1
  192. package/dist/link/createLink.d.ts +23 -7
  193. package/dist/link/createLink.d.ts.map +1 -1
  194. package/dist/link/index.d.ts +1 -1
  195. package/dist/listbox/createListBox.d.ts +12 -6
  196. package/dist/listbox/createListBox.d.ts.map +1 -1
  197. package/dist/listbox/createOption.d.ts +21 -4
  198. package/dist/listbox/createOption.d.ts.map +1 -1
  199. package/dist/listbox/index.d.ts +2 -2
  200. package/dist/listbox/index.d.ts.map +1 -1
  201. package/dist/live-announcer/announce.d.ts +2 -2
  202. package/dist/live-announcer/announce.d.ts.map +1 -1
  203. package/dist/live-announcer/index.d.ts +1 -1
  204. package/dist/menu/createMenu.d.ts +8 -7
  205. package/dist/menu/createMenu.d.ts.map +1 -1
  206. package/dist/menu/createMenuItem.d.ts +16 -4
  207. package/dist/menu/createMenuItem.d.ts.map +1 -1
  208. package/dist/menu/createMenuTrigger.d.ts +4 -4
  209. package/dist/menu/index.d.ts +3 -3
  210. package/dist/menu/index.d.ts.map +1 -1
  211. package/dist/meter/createMeter.d.ts +6 -6
  212. package/dist/meter/createMeter.d.ts.map +1 -1
  213. package/dist/meter/index.d.ts +1 -1
  214. package/dist/numberfield/createNumberField.d.ts +27 -8
  215. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  216. package/dist/numberfield/index.d.ts +1 -1
  217. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  218. package/dist/overlays/createModal.d.ts +19 -3
  219. package/dist/overlays/createModal.d.ts.map +1 -1
  220. package/dist/overlays/createOverlay.d.ts +1 -1
  221. package/dist/overlays/createOverlay.d.ts.map +1 -1
  222. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  223. package/dist/overlays/index.d.ts +6 -6
  224. package/dist/overlays/index.d.ts.map +1 -1
  225. package/dist/popover/calculatePosition.d.ts +4 -4
  226. package/dist/popover/calculatePosition.d.ts.map +1 -1
  227. package/dist/popover/createOverlayPosition.d.ts +3 -3
  228. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  229. package/dist/popover/createPopover.d.ts +4 -4
  230. package/dist/popover/createPopover.d.ts.map +1 -1
  231. package/dist/popover/index.d.ts +3 -3
  232. package/dist/progress/createProgressBar.d.ts +7 -5
  233. package/dist/progress/createProgressBar.d.ts.map +1 -1
  234. package/dist/progress/index.d.ts +1 -1
  235. package/dist/radio/createRadio.d.ts +7 -7
  236. package/dist/radio/createRadio.d.ts.map +1 -1
  237. package/dist/radio/createRadioGroup.d.ts +11 -11
  238. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  239. package/dist/radio/createRadioGroupState.d.ts +3 -3
  240. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  241. package/dist/radio/index.d.ts +3 -3
  242. package/dist/radio/index.d.ts.map +1 -1
  243. package/dist/searchfield/createSearchField.d.ts +7 -7
  244. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  245. package/dist/searchfield/index.d.ts +2 -2
  246. package/dist/select/createHiddenSelect.d.ts +4 -4
  247. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  248. package/dist/select/createSelect.d.ts +14 -6
  249. package/dist/select/createSelect.d.ts.map +1 -1
  250. package/dist/select/index.d.ts +2 -2
  251. package/dist/select/index.d.ts.map +1 -1
  252. package/dist/selection/createTypeSelect.d.ts +2 -2
  253. package/dist/selection/index.d.ts +1 -1
  254. package/dist/separator/createSeparator.d.ts +9 -5
  255. package/dist/separator/createSeparator.d.ts.map +1 -1
  256. package/dist/separator/index.d.ts +1 -1
  257. package/dist/slider/createSlider.d.ts +11 -7
  258. package/dist/slider/createSlider.d.ts.map +1 -1
  259. package/dist/slider/index.d.ts +2 -2
  260. package/dist/ssr/index.d.ts +1 -1
  261. package/dist/ssr/index.d.ts.map +1 -1
  262. package/dist/steplist/createStepList.d.ts +36 -0
  263. package/dist/steplist/createStepList.d.ts.map +1 -0
  264. package/dist/steplist/index.d.ts +2 -0
  265. package/dist/steplist/index.d.ts.map +1 -0
  266. package/dist/switch/createSwitch.d.ts +6 -4
  267. package/dist/switch/createSwitch.d.ts.map +1 -1
  268. package/dist/switch/index.d.ts +1 -1
  269. package/dist/table/createTable.d.ts +3 -3
  270. package/dist/table/createTable.d.ts.map +1 -1
  271. package/dist/table/createTableCell.d.ts +3 -3
  272. package/dist/table/createTableCell.d.ts.map +1 -1
  273. package/dist/table/createTableColumnHeader.d.ts +3 -3
  274. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  275. package/dist/table/createTableColumnResize.d.ts +41 -0
  276. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  277. package/dist/table/createTableHeaderRow.d.ts +3 -3
  278. package/dist/table/createTableRow.d.ts +3 -3
  279. package/dist/table/createTableRow.d.ts.map +1 -1
  280. package/dist/table/createTableRowGroup.d.ts +2 -2
  281. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  282. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  283. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  284. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  285. package/dist/table/index.d.ts +11 -9
  286. package/dist/table/index.d.ts.map +1 -1
  287. package/dist/table/types.d.ts +15 -7
  288. package/dist/table/types.d.ts.map +1 -1
  289. package/dist/tabs/createTabs.d.ts +28 -25
  290. package/dist/tabs/createTabs.d.ts.map +1 -1
  291. package/dist/tabs/index.d.ts +1 -1
  292. package/dist/tag/createTag.d.ts +2 -2
  293. package/dist/tag/createTag.d.ts.map +1 -1
  294. package/dist/tag/createTagGroup.d.ts +5 -5
  295. package/dist/tag/createTagGroup.d.ts.map +1 -1
  296. package/dist/tag/index.d.ts +2 -2
  297. package/dist/tag/index.d.ts.map +1 -1
  298. package/dist/textfield/createTextField.d.ts +17 -11
  299. package/dist/textfield/createTextField.d.ts.map +1 -1
  300. package/dist/textfield/index.d.ts +1 -1
  301. package/dist/textfield/index.d.ts.map +1 -1
  302. package/dist/toast/createToast.d.ts +6 -2
  303. package/dist/toast/createToast.d.ts.map +1 -1
  304. package/dist/toast/createToastRegion.d.ts +5 -3
  305. package/dist/toast/createToastRegion.d.ts.map +1 -1
  306. package/dist/toast/index.d.ts +2 -2
  307. package/dist/toast/index.d.ts.map +1 -1
  308. package/dist/toggle/createToggle.d.ts +9 -9
  309. package/dist/toggle/createToggle.d.ts.map +1 -1
  310. package/dist/toggle/createToggleState.d.ts +2 -2
  311. package/dist/toggle/createToggleState.d.ts.map +1 -1
  312. package/dist/toggle/index.d.ts +4 -4
  313. package/dist/toggle/index.d.ts.map +1 -1
  314. package/dist/toolbar/createToolbar.d.ts +9 -9
  315. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  316. package/dist/toolbar/index.d.ts +1 -1
  317. package/dist/toolbar/index.d.ts.map +1 -1
  318. package/dist/tooltip/createTooltip.d.ts +5 -5
  319. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  320. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  321. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  322. package/dist/tooltip/index.d.ts +2 -2
  323. package/dist/tree/createTree.d.ts +3 -3
  324. package/dist/tree/createTree.d.ts.map +1 -1
  325. package/dist/tree/createTreeItem.d.ts +4 -4
  326. package/dist/tree/createTreeItem.d.ts.map +1 -1
  327. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  328. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  329. package/dist/tree/index.d.ts +4 -4
  330. package/dist/tree/types.d.ts +13 -5
  331. package/dist/tree/types.d.ts.map +1 -1
  332. package/dist/utils/createDescription.d.ts +2 -2
  333. package/dist/utils/createDescription.d.ts.map +1 -1
  334. package/dist/utils/dom.d.ts.map +1 -1
  335. package/dist/utils/env.d.ts +1 -1
  336. package/dist/utils/env.d.ts.map +1 -1
  337. package/dist/utils/focus.d.ts +1 -1
  338. package/dist/utils/focus.d.ts.map +1 -1
  339. package/dist/utils/geometry.d.ts.map +1 -1
  340. package/dist/utils/index.d.ts +12 -12
  341. package/dist/utils/index.d.ts.map +1 -1
  342. package/dist/utils/mergeProps.d.ts.map +1 -1
  343. package/dist/utils/platform.d.ts.map +1 -1
  344. package/dist/utils/reactivity.d.ts +1 -1
  345. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  346. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  347. package/dist/visually-hidden/index.d.ts +1 -1
  348. package/package.json +34 -32
  349. package/src/actiongroup/createActionGroup.ts +334 -0
  350. package/src/actiongroup/index.ts +8 -0
  351. package/src/autocomplete/createAutocomplete.ts +137 -131
  352. package/src/autocomplete/index.ts +1 -1
  353. package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
  354. package/src/breadcrumbs/index.ts +1 -1
  355. package/src/button/createButton.ts +102 -73
  356. package/src/button/createToggleButton.ts +10 -10
  357. package/src/button/createToggleButtonGroup.ts +121 -0
  358. package/src/button/index.ts +10 -4
  359. package/src/button/types.ts +18 -12
  360. package/src/calendar/createCalendar.ts +62 -29
  361. package/src/calendar/createCalendarCell.ts +102 -48
  362. package/src/calendar/createCalendarGrid.ts +78 -47
  363. package/src/calendar/createRangeCalendar.ts +66 -31
  364. package/src/calendar/createRangeCalendarCell.ts +115 -37
  365. package/src/calendar/index.ts +5 -9
  366. package/src/calendar/intl/index.ts +210 -0
  367. package/src/calendar/utils.ts +227 -0
  368. package/src/checkbox/createCheckbox.ts +13 -21
  369. package/src/checkbox/createCheckboxGroup.ts +86 -45
  370. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  371. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  372. package/src/checkbox/index.ts +8 -10
  373. package/src/collections/index.ts +246 -0
  374. package/src/color/createColorArea.ts +458 -314
  375. package/src/color/createColorField.ts +186 -137
  376. package/src/color/createColorSlider.ts +444 -197
  377. package/src/color/createColorSwatch.ts +65 -40
  378. package/src/color/createColorWheel.ts +343 -208
  379. package/src/color/index.ts +24 -24
  380. package/src/color/types.ts +198 -116
  381. package/src/combobox/createComboBox.ts +727 -647
  382. package/src/combobox/index.ts +6 -6
  383. package/src/combobox/intl/index.ts +5 -5
  384. package/src/datepicker/createDateField.ts +192 -39
  385. package/src/datepicker/createDatePicker.ts +294 -63
  386. package/src/datepicker/createDatePickerGroup.ts +149 -0
  387. package/src/datepicker/createDateRangePicker.ts +294 -0
  388. package/src/datepicker/createDateSegment.ts +316 -75
  389. package/src/datepicker/createTimeField.ts +38 -34
  390. package/src/datepicker/createTimeSegment.ts +352 -0
  391. package/src/datepicker/index.ts +24 -11
  392. package/src/dialog/createDialog.ts +127 -120
  393. package/src/dialog/index.ts +2 -2
  394. package/src/dialog/types.ts +19 -19
  395. package/src/disclosure/createDisclosure.ts +138 -33
  396. package/src/disclosure/createDisclosureGroup.ts +8 -18
  397. package/src/disclosure/index.ts +2 -2
  398. package/src/dnd/createDrag.ts +218 -209
  399. package/src/dnd/createDraggableCollection.ts +96 -63
  400. package/src/dnd/createDraggableItem.ts +260 -243
  401. package/src/dnd/createDrop.ts +313 -321
  402. package/src/dnd/createDroppableCollection.ts +799 -293
  403. package/src/dnd/createDroppableItem.ts +215 -213
  404. package/src/dnd/index.ts +66 -47
  405. package/src/dnd/types.ts +86 -89
  406. package/src/dnd/utils.ts +281 -294
  407. package/src/focus/FocusScope.tsx +155 -164
  408. package/src/focus/createAutoFocus.ts +305 -321
  409. package/src/focus/createFocusRestore.ts +300 -313
  410. package/src/focus/createVirtualFocus.ts +380 -396
  411. package/src/focus/index.ts +4 -8
  412. package/src/form/createFormReset.ts +4 -4
  413. package/src/form/createFormValidation.ts +201 -224
  414. package/src/form/index.ts +8 -11
  415. package/src/grid/GridKeyboardDelegate.ts +30 -30
  416. package/src/grid/createGrid.ts +38 -36
  417. package/src/grid/createGridCell.ts +18 -18
  418. package/src/grid/createGridRow.ts +14 -14
  419. package/src/grid/index.ts +5 -5
  420. package/src/grid/types.ts +8 -8
  421. package/src/gridlist/createGridList.ts +45 -24
  422. package/src/gridlist/createGridListItem.ts +68 -23
  423. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  424. package/src/gridlist/index.ts +4 -4
  425. package/src/gridlist/types.ts +11 -7
  426. package/src/i18n/createCollator.ts +66 -79
  427. package/src/i18n/createDateFormatter.ts +75 -83
  428. package/src/i18n/createFilter.ts +118 -131
  429. package/src/i18n/createNumberFormatter.ts +50 -52
  430. package/src/i18n/createStringFormatter.ts +19 -15
  431. package/src/i18n/index.ts +37 -40
  432. package/src/i18n/locale.tsx +163 -188
  433. package/src/i18n/utils.ts +95 -99
  434. package/src/index.ts +114 -164
  435. package/src/interactions/FocusableProvider.tsx +3 -7
  436. package/src/interactions/PressEvent.ts +4 -4
  437. package/src/interactions/createFocus.ts +16 -11
  438. package/src/interactions/createFocusRing.ts +21 -19
  439. package/src/interactions/createFocusWithin.ts +24 -16
  440. package/src/interactions/createFocusable.ts +15 -16
  441. package/src/interactions/createHover.ts +70 -55
  442. package/src/interactions/createInteractionModality.ts +75 -82
  443. package/src/interactions/createKeyboard.ts +2 -2
  444. package/src/interactions/createLongPress.ts +174 -174
  445. package/src/interactions/createMove.ts +299 -289
  446. package/src/interactions/createPress.ts +168 -91
  447. package/src/interactions/index.ts +24 -16
  448. package/src/label/createField.ts +18 -19
  449. package/src/label/createLabel.ts +18 -30
  450. package/src/label/createLabels.ts +8 -12
  451. package/src/label/index.ts +5 -5
  452. package/src/landmark/createLandmark.ts +356 -377
  453. package/src/landmark/index.ts +8 -8
  454. package/src/link/createLink.ts +96 -54
  455. package/src/link/index.ts +1 -1
  456. package/src/listbox/createListBox.ts +319 -269
  457. package/src/listbox/createOption.ts +208 -151
  458. package/src/listbox/index.ts +8 -12
  459. package/src/live-announcer/announce.ts +295 -322
  460. package/src/live-announcer/index.ts +9 -9
  461. package/src/menu/createMenu.ts +434 -396
  462. package/src/menu/createMenuItem.ts +201 -149
  463. package/src/menu/createMenuTrigger.ts +88 -88
  464. package/src/menu/index.ts +9 -18
  465. package/src/meter/createMeter.ts +7 -20
  466. package/src/meter/index.ts +1 -1
  467. package/src/numberfield/createNumberField.ts +368 -268
  468. package/src/numberfield/index.ts +5 -5
  469. package/src/overlays/ariaHideOutside.ts +223 -219
  470. package/src/overlays/createInteractOutside.ts +152 -149
  471. package/src/overlays/createModal.tsx +238 -202
  472. package/src/overlays/createOverlay.ts +195 -155
  473. package/src/overlays/createOverlayTrigger.ts +85 -85
  474. package/src/overlays/createPreventScroll.ts +288 -266
  475. package/src/overlays/index.ts +37 -44
  476. package/src/popover/calculatePosition.ts +117 -119
  477. package/src/popover/createOverlayPosition.ts +52 -43
  478. package/src/popover/createPopover.ts +63 -24
  479. package/src/popover/index.ts +3 -3
  480. package/src/progress/createProgressBar.ts +36 -32
  481. package/src/progress/index.ts +1 -1
  482. package/src/radio/createRadio.ts +95 -73
  483. package/src/radio/createRadioGroup.ts +142 -62
  484. package/src/radio/createRadioGroupState.ts +7 -31
  485. package/src/radio/index.ts +3 -8
  486. package/src/searchfield/createSearchField.ts +269 -186
  487. package/src/searchfield/index.ts +2 -2
  488. package/src/select/createHiddenSelect.tsx +276 -236
  489. package/src/select/createSelect.ts +430 -395
  490. package/src/select/index.ts +9 -14
  491. package/src/selection/createTypeSelect.ts +11 -11
  492. package/src/selection/index.ts +1 -1
  493. package/src/separator/createSeparator.ts +20 -25
  494. package/src/separator/index.ts +1 -1
  495. package/src/slider/createSlider.ts +333 -349
  496. package/src/slider/index.ts +2 -2
  497. package/src/ssr/index.tsx +331 -370
  498. package/src/steplist/createStepList.ts +106 -0
  499. package/src/steplist/index.ts +8 -0
  500. package/src/switch/createSwitch.ts +9 -14
  501. package/src/switch/index.ts +1 -1
  502. package/src/table/createTable.ts +155 -86
  503. package/src/table/createTableCell.ts +17 -16
  504. package/src/table/createTableColumnHeader.ts +67 -20
  505. package/src/table/createTableColumnResize.ts +256 -0
  506. package/src/table/createTableHeaderRow.ts +7 -7
  507. package/src/table/createTableRow.ts +149 -29
  508. package/src/table/createTableRowGroup.ts +5 -7
  509. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  510. package/src/table/createTableSelectionCheckbox.ts +8 -8
  511. package/src/table/index.ts +14 -9
  512. package/src/table/types.ts +15 -7
  513. package/src/tabs/createTabs.ts +138 -127
  514. package/src/tabs/index.ts +1 -1
  515. package/src/tag/createTag.ts +171 -40
  516. package/src/tag/createTagGroup.ts +50 -39
  517. package/src/tag/index.ts +2 -6
  518. package/src/textfield/createTextField.ts +67 -35
  519. package/src/textfield/index.ts +1 -5
  520. package/src/toast/createToast.ts +34 -26
  521. package/src/toast/createToastRegion.ts +169 -27
  522. package/src/toast/index.ts +2 -6
  523. package/src/toggle/createToggle.ts +95 -53
  524. package/src/toggle/createToggleState.ts +2 -10
  525. package/src/toggle/index.ts +4 -5
  526. package/src/toolbar/createToolbar.ts +226 -169
  527. package/src/toolbar/index.ts +1 -1
  528. package/src/tooltip/createTooltip.ts +66 -79
  529. package/src/tooltip/createTooltipTrigger.ts +238 -222
  530. package/src/tooltip/index.ts +6 -6
  531. package/src/tree/createTree.ts +259 -246
  532. package/src/tree/createTreeItem.ts +282 -233
  533. package/src/tree/createTreeSelectionCheckbox.ts +71 -68
  534. package/src/tree/index.ts +16 -16
  535. package/src/tree/types.ts +95 -87
  536. package/src/utils/createDescription.ts +6 -23
  537. package/src/utils/dom.ts +61 -54
  538. package/src/utils/env.ts +53 -54
  539. package/src/utils/events.ts +7 -7
  540. package/src/utils/filterDOMProps.ts +49 -49
  541. package/src/utils/focus.ts +60 -68
  542. package/src/utils/geometry.ts +1 -4
  543. package/src/utils/globalListeners.ts +9 -9
  544. package/src/utils/index.ts +12 -22
  545. package/src/utils/mergeProps.ts +42 -15
  546. package/src/utils/platform.ts +16 -6
  547. package/src/utils/reactivity.ts +3 -3
  548. package/src/utils/textSelection.ts +16 -16
  549. package/src/visually-hidden/createVisuallyHidden.ts +127 -124
  550. package/src/visually-hidden/index.ts +6 -6
  551. package/dist/i18n/NumberFormatter.d.ts +0 -43
  552. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  553. package/dist/index.ssr.js +0 -15875
  554. package/dist/index.ssr.js.map +0 -7
  555. package/src/i18n/NumberFormatter.ts +0 -266
@@ -5,17 +5,18 @@
5
5
  * Based on @react-aria/datepicker useDateSegment
6
6
  */
7
7
 
8
- import { createSignal, createMemo } from 'solid-js';
9
- import { access, type MaybeAccessor } from '../utils/reactivity';
10
- import type { DateFieldState, DateSegment, DateSegmentType } from '@proyecto-viviana/solid-stately';
11
-
12
- // ============================================
13
- // TYPES
14
- // ============================================
8
+ import { createSignal, createMemo, onCleanup } from "solid-js";
9
+ import { access, type MaybeAccessor } from "../utils/reactivity";
10
+ import type { DateFieldState, DateSegment, DateSegmentType } from "@proyecto-viviana/solid-stately";
11
+ import { useLocale } from "../i18n";
15
12
 
16
13
  export interface AriaDateSegmentProps {
17
14
  /** The segment data. */
18
15
  segment: DateSegment;
16
+ /** The ID of the calendar dialog controlled by this segment (when inside a datepicker). */
17
+ "aria-controls"?: string;
18
+ /** The ID of an element that describes the segment. */
19
+ "aria-describedby"?: string;
19
20
  }
20
21
 
21
22
  export interface DateSegmentAria {
@@ -29,23 +30,27 @@ export interface DateSegmentAria {
29
30
  isPlaceholder: boolean;
30
31
  /** The text to display. */
31
32
  text: string;
33
+ /** Whether the segment is hovered. */
34
+ isHovered: boolean;
35
+ /** Whether the segment has keyboard focus visible. */
36
+ isFocusVisible: boolean;
32
37
  }
33
38
 
34
- // ============================================
35
- // IMPLEMENTATION
36
- // ============================================
37
-
38
39
  /**
39
40
  * Provides the behavior and accessibility implementation for a date segment.
40
41
  */
41
42
  export function createDateSegment<T extends DateFieldState>(
42
43
  props: MaybeAccessor<AriaDateSegmentProps>,
43
44
  state: T,
44
- _ref?: () => HTMLElement | null
45
+ ref?: () => HTMLElement | null,
45
46
  ): DateSegmentAria {
46
47
  const getProps = () => access(props);
47
48
  const [isFocused, setIsFocused] = createSignal(false);
48
- const [enteredKeys, setEnteredKeys] = createSignal('');
49
+ const [isFocusVisible, setIsFocusVisible] = createSignal(false);
50
+ const [isHovered, setIsHovered] = createSignal(false);
51
+ const [enteredKeys, setEnteredKeys] = createSignal("");
52
+ const [isComposing, setIsComposing] = createSignal(false);
53
+ const locale = useLocale();
49
54
 
50
55
  // Get the segment from props
51
56
  const segment = createMemo(() => getProps().segment);
@@ -56,60 +61,160 @@ export function createDateSegment<T extends DateFieldState>(
56
61
  return seg.isEditable && !state.isDisabled() && !state.isReadOnly();
57
62
  });
58
63
 
64
+ // Long press state for ArrowUp / ArrowDown
65
+ let longPressTimeout: ReturnType<typeof setTimeout> | null = null;
66
+ let longPressInterval: ReturnType<typeof setInterval> | null = null;
67
+ let hadPointerDown = false;
68
+
69
+ const clearLongPress = () => {
70
+ if (longPressTimeout) {
71
+ clearTimeout(longPressTimeout);
72
+ longPressTimeout = null;
73
+ }
74
+ if (longPressInterval) {
75
+ clearInterval(longPressInterval);
76
+ longPressInterval = null;
77
+ }
78
+ };
79
+
80
+ const startLongPress = (action: () => void) => {
81
+ clearLongPress();
82
+ longPressTimeout = setTimeout(() => {
83
+ action();
84
+ longPressInterval = setInterval(() => {
85
+ action();
86
+ }, 100);
87
+ }, 300);
88
+ };
89
+
90
+ onCleanup(() => {
91
+ clearLongPress();
92
+ });
93
+
94
+ const focusSegment = (target: "first" | "last" | "prev" | "next") => {
95
+ const el = ref?.();
96
+ if (!el) return;
97
+
98
+ const container = el.parentElement;
99
+ if (!container) return;
100
+
101
+ const segments = Array.from(container.querySelectorAll<HTMLElement>('[role="spinbutton"]'));
102
+
103
+ if (segments.length === 0) return;
104
+
105
+ if (target === "first") {
106
+ segments[0]?.focus();
107
+ return;
108
+ }
109
+
110
+ if (target === "last") {
111
+ segments[segments.length - 1]?.focus();
112
+ return;
113
+ }
114
+
115
+ const currentIndex = segments.indexOf(el);
116
+ if (currentIndex < 0) return;
117
+
118
+ const nextIndex = target === "next" ? currentIndex + 1 : currentIndex - 1;
119
+ if (nextIndex >= 0 && nextIndex < segments.length) {
120
+ segments[nextIndex]?.focus();
121
+ }
122
+ };
123
+
124
+ const clearCurrentSegment = (type: DateSegmentType) => {
125
+ state.clearSegment(type);
126
+ setEnteredKeys("");
127
+ };
128
+
59
129
  // Handle keyboard input
60
130
  const handleKeyDown = (e: KeyboardEvent) => {
61
131
  if (!isEditable()) return;
132
+ if (isComposing()) return;
62
133
 
63
134
  const seg = segment();
64
135
  const type = seg.type;
65
136
 
66
- if (type === 'literal') return;
137
+ if (type === "literal") return;
138
+
139
+ // Keyboard interaction means focus is visible
140
+ setIsFocusVisible(true);
67
141
 
68
142
  switch (e.key) {
69
- case 'ArrowUp':
143
+ case "ArrowRight":
144
+ e.preventDefault();
145
+ focusSegment(locale().direction === "rtl" ? "prev" : "next");
146
+ break;
147
+ case "ArrowLeft":
148
+ e.preventDefault();
149
+ focusSegment(locale().direction === "rtl" ? "next" : "prev");
150
+ break;
151
+ case "ArrowUp":
70
152
  e.preventDefault();
71
153
  state.incrementSegment(type);
154
+ if (!e.repeat) {
155
+ startLongPress(() => state.incrementSegment(type));
156
+ }
72
157
  break;
73
- case 'ArrowDown':
158
+ case "ArrowDown":
74
159
  e.preventDefault();
75
160
  state.decrementSegment(type);
161
+ if (!e.repeat) {
162
+ startLongPress(() => state.decrementSegment(type));
163
+ }
164
+ break;
165
+ case "Home":
166
+ e.preventDefault();
167
+ focusSegment("first");
168
+ break;
169
+ case "End":
170
+ e.preventDefault();
171
+ focusSegment("last");
172
+ break;
173
+ case "Backspace":
174
+ e.preventDefault();
175
+ // Match common date-field UX: backspace on an empty placeholder moves to previous segment.
176
+ if (seg.isPlaceholder) {
177
+ focusSegment("prev");
178
+ } else {
179
+ clearCurrentSegment(type);
180
+ }
76
181
  break;
77
- case 'Backspace':
78
- case 'Delete':
182
+ case "Delete":
79
183
  e.preventDefault();
80
- state.clearSegment(type);
81
- setEnteredKeys('');
184
+ clearCurrentSegment(type);
82
185
  break;
83
186
  default:
84
187
  // Handle numeric input
85
- if (/^\d$/.test(e.key)) {
188
+ const normalizedDigit = normalizeDigit(e.key);
189
+ if (normalizedDigit) {
86
190
  e.preventDefault();
87
- handleNumericInput(e.key, type, seg);
191
+ handleNumericInput(normalizedDigit, type, seg);
88
192
  }
89
193
  break;
90
194
  }
91
195
  };
92
196
 
197
+ const handleKeyUp = () => {
198
+ clearLongPress();
199
+ };
200
+
93
201
  // Handle numeric input
94
- const handleNumericInput = (
95
- key: string,
96
- type: DateSegmentType,
97
- seg: DateSegment
98
- ) => {
202
+ const handleNumericInput = (key: string, type: DateSegmentType, seg: DateSegment) => {
99
203
  const newKeys = enteredKeys() + key;
100
204
  const numValue = parseInt(newKeys, 10);
101
205
  const maxValue = seg.maxValue ?? 99;
102
206
  const minValue = seg.minValue ?? 0;
207
+ const maxDigits = String(maxValue).length;
103
208
 
104
209
  // Check if we should accept more digits
105
210
  if (numValue <= maxValue) {
106
211
  state.setSegment(type, numValue);
107
212
 
108
213
  // If entering more digits wouldn't make sense, clear entered keys
109
- const potentialNextValue = parseInt(newKeys + '0', 10);
110
- if (potentialNextValue > maxValue || newKeys.length >= String(maxValue).length) {
111
- setEnteredKeys('');
112
- // Move to next segment (would need focus management)
214
+ const potentialNextValue = parseInt(newKeys + "0", 10);
215
+ if (potentialNextValue > maxValue || newKeys.length >= maxDigits) {
216
+ setEnteredKeys("");
217
+ focusSegment("next");
113
218
  } else {
114
219
  setEnteredKeys(newKeys);
115
220
  }
@@ -118,58 +223,157 @@ export function createDateSegment<T extends DateFieldState>(
118
223
  const singleValue = parseInt(key, 10);
119
224
  if (singleValue >= minValue && singleValue <= maxValue) {
120
225
  state.setSegment(type, singleValue);
226
+ const potentialNextValue = parseInt(key + "0", 10);
227
+ if (potentialNextValue > maxValue || key.length >= maxDigits) {
228
+ setEnteredKeys("");
229
+ focusSegment("next");
230
+ } else {
231
+ setEnteredKeys(key);
232
+ }
233
+ } else {
234
+ setEnteredKeys("");
121
235
  }
122
- setEnteredKeys(key);
236
+ }
237
+ };
238
+
239
+ const handleBeforeInput = (e: InputEvent) => {
240
+ if (!isEditable()) return;
241
+ if (isComposing()) return;
242
+
243
+ const seg = segment();
244
+ if (seg.type === "literal") return;
245
+
246
+ if (e.inputType === "deleteContentBackward" || e.inputType === "deleteContentForward") {
247
+ e.preventDefault();
248
+ clearCurrentSegment(seg.type);
249
+ return;
250
+ }
251
+
252
+ if (e.inputType === "insertText" && e.data) {
253
+ const normalizedDigit = normalizeDigit(e.data);
254
+ if (!normalizedDigit) return;
255
+ e.preventDefault();
256
+ handleNumericInput(normalizedDigit, seg.type, seg);
257
+ }
258
+ };
259
+
260
+ const handleCompositionStart = () => {
261
+ if (!isEditable()) return;
262
+ setIsComposing(true);
263
+ setEnteredKeys("");
264
+ };
265
+
266
+ const handleCompositionEnd = (e: CompositionEvent) => {
267
+ if (!isEditable()) return;
268
+ setIsComposing(false);
269
+
270
+ const seg = segment();
271
+ if (seg.type === "literal") return;
272
+
273
+ const digits = extractNormalizedDigits(e.data ?? "");
274
+ if (digits.length === 0) return;
275
+
276
+ for (const digit of digits) {
277
+ handleNumericInput(digit, seg.type, seg);
123
278
  }
124
279
  };
125
280
 
126
281
  // Handle focus
127
282
  const handleFocus = () => {
128
283
  setIsFocused(true);
129
- setEnteredKeys('');
284
+ setEnteredKeys("");
285
+
286
+ if (!hadPointerDown) {
287
+ setIsFocusVisible(true);
288
+ }
289
+ hadPointerDown = false;
290
+
291
+ // Select all text in the segment
292
+ const el = ref?.();
293
+ if (el && typeof window !== "undefined") {
294
+ const selection = window.getSelection();
295
+ if (selection) {
296
+ const range = new Range();
297
+ range.selectNodeContents(el);
298
+ selection.removeAllRanges();
299
+ selection.addRange(range);
300
+ }
301
+ }
130
302
  };
131
303
 
132
304
  const handleBlur = () => {
133
305
  setIsFocused(false);
134
- setEnteredKeys('');
306
+ setIsFocusVisible(false);
307
+ setEnteredKeys("");
308
+ clearLongPress();
135
309
  state.confirmPlaceholder();
136
310
  };
137
311
 
312
+ const handleMouseEnter = () => {
313
+ setIsHovered(true);
314
+ };
315
+
316
+ const handleMouseLeave = () => {
317
+ setIsHovered(false);
318
+ };
319
+
138
320
  // Segment props
139
321
  const segmentProps = createMemo(() => {
140
322
  const seg = segment();
141
323
  const type = seg.type;
324
+ const p = getProps();
142
325
 
143
326
  // Literal segments don't need interaction props
144
- if (type === 'literal') {
327
+ if (type === "literal") {
145
328
  return {
146
- 'aria-hidden': true,
329
+ "aria-hidden": true,
147
330
  };
148
331
  }
149
332
 
150
333
  return {
151
- role: 'spinbutton',
334
+ role: "spinbutton",
152
335
  tabIndex: isEditable() ? 0 : -1,
153
- 'aria-label': getSegmentLabel(type),
154
- 'aria-valuenow': seg.value,
155
- 'aria-valuemin': seg.minValue,
156
- 'aria-valuemax': seg.maxValue,
157
- 'aria-valuetext': seg.isPlaceholder ? seg.placeholder : seg.text,
158
- 'aria-readonly': state.isReadOnly() || undefined,
159
- 'aria-disabled': state.isDisabled() || undefined,
160
- 'aria-invalid': state.isInvalid() || undefined,
336
+ "aria-label": getSegmentLabel(type, locale().locale),
337
+ "aria-valuenow": seg.value,
338
+ "aria-valuemin": seg.minValue,
339
+ "aria-valuemax": seg.maxValue,
340
+ "aria-valuetext": seg.isPlaceholder ? "" : seg.text,
341
+ "aria-readonly": state.isReadOnly() || undefined,
342
+ "aria-disabled": state.isDisabled() || undefined,
343
+ "aria-invalid": state.isInvalid() || undefined,
344
+ "aria-controls": p["aria-controls"] || undefined,
345
+ "aria-describedby": p["aria-describedby"] || undefined,
161
346
  contentEditable: isEditable(),
162
347
  suppressContentEditableWarning: true,
163
- inputMode: 'numeric' as const,
164
- autoCorrect: 'off',
165
- enterKeyHint: 'next' as const,
348
+ inputMode: "numeric" as const,
349
+ autoCorrect: "off",
350
+ enterKeyHint: "next" as const,
166
351
  spellCheck: false,
352
+ "data-placeholder": seg.isPlaceholder ? "true" : undefined,
353
+ "data-readonly": state.isReadOnly() || undefined,
354
+ "data-disabled": state.isDisabled() || undefined,
355
+ "data-invalid": state.isInvalid() || undefined,
356
+ "data-type": seg.type,
357
+ "data-hovered": isHovered() || undefined,
358
+ "data-focused": isFocused() || undefined,
359
+ "data-focus-visible": isFocusVisible() || undefined,
167
360
  onKeyDown: handleKeyDown,
361
+ onKeyUp: handleKeyUp,
168
362
  onFocus: handleFocus,
169
363
  onBlur: handleBlur,
170
- onMouseDown: (e: MouseEvent) => {
364
+ onBeforeInput: handleBeforeInput,
365
+ onCompositionStart: handleCompositionStart,
366
+ onCompositionEnd: handleCompositionEnd,
367
+ onMouseEnter: handleMouseEnter,
368
+ onMouseLeave: handleMouseLeave,
369
+ onPointerDown: (e: PointerEvent) => {
171
370
  // Prevent cursor positioning in the middle of the segment
172
371
  e.preventDefault();
372
+ hadPointerDown = true;
373
+ setIsFocusVisible(false);
374
+ },
375
+ onPointerUp: () => {
376
+ clearLongPress();
173
377
  },
174
378
  };
175
379
  });
@@ -196,34 +400,71 @@ export function createDateSegment<T extends DateFieldState>(
196
400
  get text() {
197
401
  return text();
198
402
  },
403
+ get isHovered() {
404
+ return isHovered();
405
+ },
406
+ get isFocusVisible() {
407
+ return isFocusVisible();
408
+ },
199
409
  };
200
410
  }
201
411
 
202
- // ============================================
203
- // HELPER FUNCTIONS
204
- // ============================================
205
-
206
- function getSegmentLabel(type: DateSegmentType): string {
207
- switch (type) {
208
- case 'year':
209
- return 'Year';
210
- case 'month':
211
- return 'Month';
212
- case 'day':
213
- return 'Day';
214
- case 'hour':
215
- return 'Hour';
216
- case 'minute':
217
- return 'Minute';
218
- case 'second':
219
- return 'Second';
220
- case 'dayPeriod':
221
- return 'AM/PM';
222
- case 'era':
223
- return 'Era';
224
- case 'timeZoneName':
225
- return 'Time zone';
226
- default:
227
- return '';
412
+ const SEGMENT_LABELS: Record<string, Record<Exclude<DateSegmentType, "literal">, string>> = {
413
+ en: {
414
+ year: "Year",
415
+ month: "Month",
416
+ day: "Day",
417
+ hour: "Hour",
418
+ minute: "Minute",
419
+ second: "Second",
420
+ dayPeriod: "AM/PM",
421
+ era: "Era",
422
+ timeZoneName: "Time zone",
423
+ },
424
+ es: {
425
+ year: "Año",
426
+ month: "Mes",
427
+ day: "Día",
428
+ hour: "Hora",
429
+ minute: "Minuto",
430
+ second: "Segundo",
431
+ dayPeriod: "AM/PM",
432
+ era: "Era",
433
+ timeZoneName: "Zona horaria",
434
+ },
435
+ };
436
+
437
+ function getSegmentLabel(type: DateSegmentType, locale: string): string {
438
+ if (type === "literal") return "";
439
+
440
+ const language = locale.toLowerCase().split("-")[0] ?? "en";
441
+ const labels = SEGMENT_LABELS[language] ?? SEGMENT_LABELS.en;
442
+ return labels[type];
443
+ }
444
+
445
+ function normalizeDigit(input: string): string | null {
446
+ if (/^[0-9]$/.test(input)) {
447
+ return input;
448
+ }
449
+
450
+ const codePoint = input.codePointAt(0);
451
+ if (codePoint == null) return null;
452
+
453
+ // Full-width digits 0-9
454
+ if (codePoint >= 0xff10 && codePoint <= 0xff19) {
455
+ return String(codePoint - 0xff10);
456
+ }
457
+
458
+ return null;
459
+ }
460
+
461
+ function extractNormalizedDigits(value: string): string[] {
462
+ const digits: string[] = [];
463
+ for (const char of value) {
464
+ const normalized = normalizeDigit(char);
465
+ if (normalized) {
466
+ digits.push(normalized);
467
+ }
228
468
  }
469
+ return digits;
229
470
  }
@@ -5,16 +5,12 @@
5
5
  * Based on @react-aria/datepicker useTimeField
6
6
  */
7
7
 
8
- import { createMemo } from 'solid-js';
9
- import { createId } from '../ssr';
10
- import { createLabel } from '../label/createLabel';
11
- import { access, type MaybeAccessor } from '../utils/reactivity';
12
- import { mergeProps } from '../utils/mergeProps';
13
- import type { TimeFieldState, TimeSegment, TimeValue } from '@proyecto-viviana/solid-stately';
14
-
15
- // ============================================
16
- // TYPES
17
- // ============================================
8
+ import { createMemo } from "solid-js";
9
+ import { createId } from "../ssr";
10
+ import { createLabel } from "../label/createLabel";
11
+ import { access, type MaybeAccessor } from "../utils/reactivity";
12
+ import { mergeProps } from "../utils/mergeProps";
13
+ import type { TimeFieldState, TimeSegment, TimeValue } from "@proyecto-viviana/solid-stately";
18
14
 
19
15
  export interface AriaTimeFieldProps {
20
16
  /** An ID for the time field. */
@@ -22,11 +18,11 @@ export interface AriaTimeFieldProps {
22
18
  /** A visible label for the time field. */
23
19
  label?: string;
24
20
  /** An accessible label for the time field. */
25
- 'aria-label'?: string;
21
+ "aria-label"?: string;
26
22
  /** The ID of an element that labels the time field. */
27
- 'aria-labelledby'?: string;
23
+ "aria-labelledby"?: string;
28
24
  /** The ID of an element that describes the time field. */
29
- 'aria-describedby'?: string;
25
+ "aria-describedby"?: string;
30
26
  /** Whether the time field is disabled. */
31
27
  isDisabled?: boolean;
32
28
  /** Whether the time field is read-only. */
@@ -39,6 +35,12 @@ export interface AriaTimeFieldProps {
39
35
  description?: string;
40
36
  /** Error message. */
41
37
  errorMessage?: string;
38
+ /** The name of the input element, used when submitting an HTML form. */
39
+ name?: string;
40
+ /** The id of the form the hidden input belongs to. */
41
+ form?: string;
42
+ /** Describes the autocomplete behavior for the hidden input. */
43
+ autoComplete?: string;
42
44
  }
43
45
 
44
46
  export interface TimeFieldAria {
@@ -56,17 +58,13 @@ export interface TimeFieldAria {
56
58
  segments: TimeSegment[];
57
59
  }
58
60
 
59
- // ============================================
60
- // IMPLEMENTATION
61
- // ============================================
62
-
63
61
  /**
64
62
  * Provides the behavior and accessibility implementation for a time field component.
65
63
  */
66
64
  export function createTimeField<T extends TimeFieldState<TimeValue>>(
67
65
  props: MaybeAccessor<AriaTimeFieldProps>,
68
66
  state: T,
69
- _ref?: () => HTMLElement | null
67
+ _ref?: () => HTMLElement | null,
70
68
  ): TimeFieldAria {
71
69
  const getProps = () => access(props);
72
70
  const id = createId(getProps().id);
@@ -75,26 +73,32 @@ export function createTimeField<T extends TimeFieldState<TimeValue>>(
75
73
 
76
74
  // Create label handling
77
75
  const { labelProps, fieldProps: labelFieldProps } = createLabel({
78
- get label() { return getProps().label; },
79
- get 'aria-label'() { return getProps()['aria-label']; },
80
- get 'aria-labelledby'() { return getProps()['aria-labelledby']; },
81
- labelElementType: 'span',
76
+ get label() {
77
+ return getProps().label;
78
+ },
79
+ get "aria-label"() {
80
+ return getProps()["aria-label"];
81
+ },
82
+ get "aria-labelledby"() {
83
+ return getProps()["aria-labelledby"];
84
+ },
85
+ labelElementType: "span",
82
86
  });
83
87
 
84
88
  // Build aria-describedby
85
89
  const getAriaDescribedBy = () => {
86
90
  const p = getProps();
87
91
  const ids: string[] = [];
88
- if (p['aria-describedby']) {
89
- ids.push(p['aria-describedby']);
92
+ if (p["aria-describedby"]) {
93
+ ids.push(p["aria-describedby"]);
90
94
  }
91
95
  if (p.description) {
92
96
  ids.push(descriptionId);
93
97
  }
94
- if (p.isInvalid && p.errorMessage) {
98
+ if ((p.isInvalid || state.isInvalid()) && p.errorMessage) {
95
99
  ids.push(errorMessageId);
96
100
  }
97
- return ids.length > 0 ? ids.join(' ') : undefined;
101
+ return ids.length > 0 ? ids.join(" ") : undefined;
98
102
  };
99
103
 
100
104
  // Segments from state
@@ -106,18 +110,18 @@ export function createTimeField<T extends TimeFieldState<TimeValue>>(
106
110
 
107
111
  return mergeProps(labelFieldProps as Record<string, unknown>, {
108
112
  id,
109
- role: 'group',
110
- 'aria-disabled': p.isDisabled || state.isDisabled() || undefined,
111
- 'aria-readonly': p.isReadOnly || state.isReadOnly() || undefined,
112
- 'aria-required': p.isRequired || state.isRequired() || undefined,
113
- 'aria-invalid': p.isInvalid || state.isInvalid() || undefined,
114
- 'aria-describedby': getAriaDescribedBy(),
113
+ role: "group",
114
+ "aria-disabled": p.isDisabled || state.isDisabled() || undefined,
115
+ "aria-readonly": p.isReadOnly || state.isReadOnly() || undefined,
116
+ "aria-required": p.isRequired || state.isRequired() || undefined,
117
+ "aria-invalid": p.isInvalid || state.isInvalid() || undefined,
118
+ "aria-describedby": getAriaDescribedBy(),
115
119
  });
116
120
  });
117
121
 
118
122
  // Input container props
119
123
  const inputProps = createMemo(() => ({
120
- role: 'presentation',
124
+ role: "presentation",
121
125
  }));
122
126
 
123
127
  // Description props
@@ -128,7 +132,7 @@ export function createTimeField<T extends TimeFieldState<TimeValue>>(
128
132
  // Error message props
129
133
  const errorMessageProps = createMemo(() => ({
130
134
  id: errorMessageId,
131
- role: 'alert',
135
+ role: "alert",
132
136
  }));
133
137
 
134
138
  return {