@proyecto-viviana/solidaria 0.3.0 → 0.4.1

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 (743) hide show
  1. package/dist/_chunk/DragManager.js +627 -0
  2. package/dist/_chunk/DragManager.js.map +1 -0
  3. package/dist/_chunk/DragManager.jsx +627 -0
  4. package/dist/_chunk/DragManager.jsx.map +1 -0
  5. package/dist/_chunk/FocusScope.js +400 -0
  6. package/dist/_chunk/FocusScope.js.map +1 -0
  7. package/dist/_chunk/FocusScope.jsx +375 -0
  8. package/dist/_chunk/FocusScope.jsx.map +1 -0
  9. package/dist/_chunk/actiongroup.js +141 -0
  10. package/dist/_chunk/actiongroup.js.map +1 -0
  11. package/dist/_chunk/actiongroup.jsx +141 -0
  12. package/dist/_chunk/actiongroup.jsx.map +1 -0
  13. package/dist/_chunk/announce.js +207 -0
  14. package/dist/_chunk/announce.js.map +1 -0
  15. package/dist/_chunk/announce.jsx +207 -0
  16. package/dist/_chunk/announce.jsx.map +1 -0
  17. package/dist/_chunk/ariaHideOutside.js +122 -0
  18. package/dist/_chunk/ariaHideOutside.js.map +1 -0
  19. package/dist/_chunk/ariaHideOutside.jsx +122 -0
  20. package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
  21. package/dist/_chunk/autocomplete.js +244 -0
  22. package/dist/_chunk/autocomplete.js.map +1 -0
  23. package/dist/_chunk/autocomplete.jsx +244 -0
  24. package/dist/_chunk/autocomplete.jsx.map +1 -0
  25. package/dist/_chunk/breadcrumbs.js +121 -0
  26. package/dist/_chunk/breadcrumbs.js.map +1 -0
  27. package/dist/_chunk/breadcrumbs.jsx +121 -0
  28. package/dist/_chunk/breadcrumbs.jsx.map +1 -0
  29. package/dist/_chunk/button.js +275 -0
  30. package/dist/_chunk/button.js.map +1 -0
  31. package/dist/_chunk/button.jsx +275 -0
  32. package/dist/_chunk/button.jsx.map +1 -0
  33. package/dist/_chunk/calendar.js +1037 -0
  34. package/dist/_chunk/calendar.js.map +1 -0
  35. package/dist/_chunk/calendar.jsx +1037 -0
  36. package/dist/_chunk/calendar.jsx.map +1 -0
  37. package/dist/_chunk/checkbox.js +235 -0
  38. package/dist/_chunk/checkbox.js.map +1 -0
  39. package/dist/_chunk/checkbox.jsx +235 -0
  40. package/dist/_chunk/checkbox.jsx.map +1 -0
  41. package/dist/_chunk/color.js +1458 -0
  42. package/dist/_chunk/color.js.map +1 -0
  43. package/dist/_chunk/color.jsx +1458 -0
  44. package/dist/_chunk/color.jsx.map +1 -0
  45. package/dist/_chunk/combobox.js +1062 -0
  46. package/dist/_chunk/combobox.js.map +1 -0
  47. package/dist/_chunk/combobox.jsx +1062 -0
  48. package/dist/_chunk/combobox.jsx.map +1 -0
  49. package/dist/_chunk/constants.js +19 -0
  50. package/dist/_chunk/constants.js.map +1 -0
  51. package/dist/_chunk/constants.jsx +19 -0
  52. package/dist/_chunk/constants.jsx.map +1 -0
  53. package/dist/_chunk/createCollator.js +61 -0
  54. package/dist/_chunk/createCollator.js.map +1 -0
  55. package/dist/_chunk/createCollator.jsx +61 -0
  56. package/dist/_chunk/createCollator.jsx.map +1 -0
  57. package/dist/_chunk/createCollectionRowInteraction.js +133 -0
  58. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
  59. package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
  60. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
  61. package/dist/_chunk/createField.js +55 -0
  62. package/dist/_chunk/createField.js.map +1 -0
  63. package/dist/_chunk/createField.jsx +55 -0
  64. package/dist/_chunk/createField.jsx.map +1 -0
  65. package/dist/_chunk/createFocus.js +105 -0
  66. package/dist/_chunk/createFocus.js.map +1 -0
  67. package/dist/_chunk/createFocus.jsx +105 -0
  68. package/dist/_chunk/createFocus.jsx.map +1 -0
  69. package/dist/_chunk/createFocusRing.js +54 -0
  70. package/dist/_chunk/createFocusRing.js.map +1 -0
  71. package/dist/_chunk/createFocusRing.jsx +54 -0
  72. package/dist/_chunk/createFocusRing.jsx.map +1 -0
  73. package/dist/_chunk/createFocusWithin.js +120 -0
  74. package/dist/_chunk/createFocusWithin.js.map +1 -0
  75. package/dist/_chunk/createFocusWithin.jsx +120 -0
  76. package/dist/_chunk/createFocusWithin.jsx.map +1 -0
  77. package/dist/_chunk/createFocusable.js +131 -0
  78. package/dist/_chunk/createFocusable.js.map +1 -0
  79. package/dist/_chunk/createFocusable.jsx +131 -0
  80. package/dist/_chunk/createFocusable.jsx.map +1 -0
  81. package/dist/_chunk/createFormReset.js +39 -0
  82. package/dist/_chunk/createFormReset.js.map +1 -0
  83. package/dist/_chunk/createFormReset.jsx +39 -0
  84. package/dist/_chunk/createFormReset.jsx.map +1 -0
  85. package/dist/_chunk/createFormValidation.js +135 -0
  86. package/dist/_chunk/createFormValidation.js.map +1 -0
  87. package/dist/_chunk/createFormValidation.jsx +135 -0
  88. package/dist/_chunk/createFormValidation.jsx.map +1 -0
  89. package/dist/_chunk/createHover.js +131 -0
  90. package/dist/_chunk/createHover.js.map +1 -0
  91. package/dist/_chunk/createHover.jsx +131 -0
  92. package/dist/_chunk/createHover.jsx.map +1 -0
  93. package/dist/_chunk/createInteractionModality.js +268 -0
  94. package/dist/_chunk/createInteractionModality.js.map +1 -0
  95. package/dist/_chunk/createInteractionModality.jsx +268 -0
  96. package/dist/_chunk/createInteractionModality.jsx.map +1 -0
  97. package/dist/_chunk/createLabel.js +47 -0
  98. package/dist/_chunk/createLabel.js.map +1 -0
  99. package/dist/_chunk/createLabel.jsx +47 -0
  100. package/dist/_chunk/createLabel.jsx.map +1 -0
  101. package/dist/_chunk/createLabels.js +32 -0
  102. package/dist/_chunk/createLabels.js.map +1 -0
  103. package/dist/_chunk/createLabels.jsx +32 -0
  104. package/dist/_chunk/createLabels.jsx.map +1 -0
  105. package/dist/_chunk/createLandmark.js +198 -0
  106. package/dist/_chunk/createLandmark.js.map +1 -0
  107. package/dist/_chunk/createLandmark.jsx +198 -0
  108. package/dist/_chunk/createLandmark.jsx.map +1 -0
  109. package/dist/_chunk/createOverlay.js +327 -0
  110. package/dist/_chunk/createOverlay.js.map +1 -0
  111. package/dist/_chunk/createOverlay.jsx +327 -0
  112. package/dist/_chunk/createOverlay.jsx.map +1 -0
  113. package/dist/_chunk/createPress.js +526 -0
  114. package/dist/_chunk/createPress.js.map +1 -0
  115. package/dist/_chunk/createPress.jsx +526 -0
  116. package/dist/_chunk/createPress.jsx.map +1 -0
  117. package/dist/_chunk/createProgressBar.js +82 -0
  118. package/dist/_chunk/createProgressBar.js.map +1 -0
  119. package/dist/_chunk/createProgressBar.jsx +82 -0
  120. package/dist/_chunk/createProgressBar.jsx.map +1 -0
  121. package/dist/_chunk/createSelectableItem.js +302 -0
  122. package/dist/_chunk/createSelectableItem.js.map +1 -0
  123. package/dist/_chunk/createSelectableItem.jsx +302 -0
  124. package/dist/_chunk/createSelectableItem.jsx.map +1 -0
  125. package/dist/_chunk/createStringFormatter.js +61 -0
  126. package/dist/_chunk/createStringFormatter.js.map +1 -0
  127. package/dist/_chunk/createStringFormatter.jsx +61 -0
  128. package/dist/_chunk/createStringFormatter.jsx.map +1 -0
  129. package/dist/_chunk/createToggle.js +159 -0
  130. package/dist/_chunk/createToggle.js.map +1 -0
  131. package/dist/_chunk/createToggle.jsx +159 -0
  132. package/dist/_chunk/createToggle.jsx.map +1 -0
  133. package/dist/_chunk/createTypeSelect.js +125 -0
  134. package/dist/_chunk/createTypeSelect.js.map +1 -0
  135. package/dist/_chunk/createTypeSelect.jsx +125 -0
  136. package/dist/_chunk/createTypeSelect.jsx.map +1 -0
  137. package/dist/_chunk/datepicker.js +1706 -0
  138. package/dist/_chunk/datepicker.js.map +1 -0
  139. package/dist/_chunk/datepicker.jsx +1706 -0
  140. package/dist/_chunk/datepicker.jsx.map +1 -0
  141. package/dist/_chunk/dialog.js +62 -0
  142. package/dist/_chunk/dialog.js.map +1 -0
  143. package/dist/_chunk/dialog.jsx +62 -0
  144. package/dist/_chunk/dialog.jsx.map +1 -0
  145. package/dist/_chunk/disclosure.js +185 -0
  146. package/dist/_chunk/disclosure.js.map +1 -0
  147. package/dist/_chunk/disclosure.jsx +185 -0
  148. package/dist/_chunk/disclosure.jsx.map +1 -0
  149. package/dist/_chunk/dnd.js +2395 -0
  150. package/dist/_chunk/dnd.js.map +1 -0
  151. package/dist/_chunk/dnd.jsx +2395 -0
  152. package/dist/_chunk/dnd.jsx.map +1 -0
  153. package/dist/_chunk/env.js +87 -0
  154. package/dist/_chunk/env.js.map +1 -0
  155. package/dist/_chunk/env.jsx +87 -0
  156. package/dist/_chunk/env.jsx.map +1 -0
  157. package/dist/_chunk/filterDOMProps.js +82 -0
  158. package/dist/_chunk/filterDOMProps.js.map +1 -0
  159. package/dist/_chunk/filterDOMProps.jsx +82 -0
  160. package/dist/_chunk/filterDOMProps.jsx.map +1 -0
  161. package/dist/_chunk/focus.js +399 -0
  162. package/dist/_chunk/focus.js.map +1 -0
  163. package/dist/_chunk/focus.jsx +399 -0
  164. package/dist/_chunk/focus.jsx.map +1 -0
  165. package/dist/_chunk/focus2.js +631 -0
  166. package/dist/_chunk/focus2.js.map +1 -0
  167. package/dist/_chunk/focus2.jsx +631 -0
  168. package/dist/_chunk/focus2.jsx.map +1 -0
  169. package/dist/_chunk/grid.js +623 -0
  170. package/dist/_chunk/grid.js.map +1 -0
  171. package/dist/_chunk/grid.jsx +623 -0
  172. package/dist/_chunk/grid.jsx.map +1 -0
  173. package/dist/_chunk/gridlist.js +369 -0
  174. package/dist/_chunk/gridlist.js.map +1 -0
  175. package/dist/_chunk/gridlist.jsx +369 -0
  176. package/dist/_chunk/gridlist.jsx.map +1 -0
  177. package/dist/_chunk/i18n.js +199 -0
  178. package/dist/_chunk/i18n.js.map +1 -0
  179. package/dist/_chunk/i18n.jsx +199 -0
  180. package/dist/_chunk/i18n.jsx.map +1 -0
  181. package/dist/_chunk/interactions.js +331 -0
  182. package/dist/_chunk/interactions.js.map +1 -0
  183. package/dist/_chunk/interactions.jsx +325 -0
  184. package/dist/_chunk/interactions.jsx.map +1 -0
  185. package/dist/_chunk/link.js +97 -0
  186. package/dist/_chunk/link.js.map +1 -0
  187. package/dist/_chunk/link.jsx +97 -0
  188. package/dist/_chunk/link.jsx.map +1 -0
  189. package/dist/_chunk/listbox.js +356 -0
  190. package/dist/_chunk/listbox.js.map +1 -0
  191. package/dist/_chunk/listbox.jsx +356 -0
  192. package/dist/_chunk/listbox.jsx.map +1 -0
  193. package/dist/_chunk/locale.js +173 -0
  194. package/dist/_chunk/locale.js.map +1 -0
  195. package/dist/_chunk/locale.jsx +167 -0
  196. package/dist/_chunk/locale.jsx.map +1 -0
  197. package/dist/_chunk/menu.js +519 -0
  198. package/dist/_chunk/menu.js.map +1 -0
  199. package/dist/_chunk/menu.jsx +519 -0
  200. package/dist/_chunk/menu.jsx.map +1 -0
  201. package/dist/_chunk/meter.js +33 -0
  202. package/dist/_chunk/meter.js.map +1 -0
  203. package/dist/_chunk/meter.jsx +33 -0
  204. package/dist/_chunk/meter.jsx.map +1 -0
  205. package/dist/_chunk/numberfield.js +259 -0
  206. package/dist/_chunk/numberfield.js.map +1 -0
  207. package/dist/_chunk/numberfield.jsx +259 -0
  208. package/dist/_chunk/numberfield.jsx.map +1 -0
  209. package/dist/_chunk/overlays.js +186 -0
  210. package/dist/_chunk/overlays.js.map +1 -0
  211. package/dist/_chunk/overlays.jsx +162 -0
  212. package/dist/_chunk/overlays.jsx.map +1 -0
  213. package/dist/_chunk/popover.js +574 -0
  214. package/dist/_chunk/popover.js.map +1 -0
  215. package/dist/_chunk/popover.jsx +574 -0
  216. package/dist/_chunk/popover.jsx.map +1 -0
  217. package/dist/_chunk/radio.js +320 -0
  218. package/dist/_chunk/radio.js.map +1 -0
  219. package/dist/_chunk/radio.jsx +320 -0
  220. package/dist/_chunk/radio.jsx.map +1 -0
  221. package/dist/_chunk/reactivity.js +21 -0
  222. package/dist/_chunk/reactivity.js.map +1 -0
  223. package/dist/_chunk/reactivity.jsx +21 -0
  224. package/dist/_chunk/reactivity.jsx.map +1 -0
  225. package/dist/_chunk/searchfield.js +210 -0
  226. package/dist/_chunk/searchfield.js.map +1 -0
  227. package/dist/_chunk/searchfield.jsx +210 -0
  228. package/dist/_chunk/searchfield.jsx.map +1 -0
  229. package/dist/_chunk/select.js +406 -0
  230. package/dist/_chunk/select.js.map +1 -0
  231. package/dist/_chunk/select.jsx +397 -0
  232. package/dist/_chunk/select.jsx.map +1 -0
  233. package/dist/_chunk/selection.js +666 -0
  234. package/dist/_chunk/selection.js.map +1 -0
  235. package/dist/_chunk/selection.jsx +666 -0
  236. package/dist/_chunk/selection.jsx.map +1 -0
  237. package/dist/_chunk/separator.js +29 -0
  238. package/dist/_chunk/separator.js.map +1 -0
  239. package/dist/_chunk/separator.jsx +29 -0
  240. package/dist/_chunk/separator.jsx.map +1 -0
  241. package/dist/_chunk/slider.js +256 -0
  242. package/dist/_chunk/slider.js.map +1 -0
  243. package/dist/_chunk/slider.jsx +256 -0
  244. package/dist/_chunk/slider.jsx.map +1 -0
  245. package/dist/_chunk/spinbutton.js +153 -0
  246. package/dist/_chunk/spinbutton.js.map +1 -0
  247. package/dist/_chunk/spinbutton.jsx +153 -0
  248. package/dist/_chunk/spinbutton.jsx.map +1 -0
  249. package/dist/_chunk/steplist.js +66 -0
  250. package/dist/_chunk/steplist.js.map +1 -0
  251. package/dist/_chunk/steplist.jsx +66 -0
  252. package/dist/_chunk/steplist.jsx.map +1 -0
  253. package/dist/_chunk/switch.js +34 -0
  254. package/dist/_chunk/switch.js.map +1 -0
  255. package/dist/_chunk/switch.jsx +34 -0
  256. package/dist/_chunk/switch.jsx.map +1 -0
  257. package/dist/_chunk/table.js +1088 -0
  258. package/dist/_chunk/table.js.map +1 -0
  259. package/dist/_chunk/table.jsx +1088 -0
  260. package/dist/_chunk/table.jsx.map +1 -0
  261. package/dist/_chunk/tabs.js +263 -0
  262. package/dist/_chunk/tabs.js.map +1 -0
  263. package/dist/_chunk/tabs.jsx +263 -0
  264. package/dist/_chunk/tabs.jsx.map +1 -0
  265. package/dist/_chunk/tag.js +322 -0
  266. package/dist/_chunk/tag.js.map +1 -0
  267. package/dist/_chunk/tag.jsx +322 -0
  268. package/dist/_chunk/tag.jsx.map +1 -0
  269. package/dist/_chunk/textfield.js +110 -0
  270. package/dist/_chunk/textfield.js.map +1 -0
  271. package/dist/_chunk/textfield.jsx +110 -0
  272. package/dist/_chunk/textfield.jsx.map +1 -0
  273. package/dist/_chunk/toast.js +250 -0
  274. package/dist/_chunk/toast.js.map +1 -0
  275. package/dist/_chunk/toast.jsx +250 -0
  276. package/dist/_chunk/toast.jsx.map +1 -0
  277. package/dist/_chunk/toolbar.js +226 -0
  278. package/dist/_chunk/toolbar.js.map +1 -0
  279. package/dist/_chunk/toolbar.jsx +226 -0
  280. package/dist/_chunk/toolbar.jsx.map +1 -0
  281. package/dist/_chunk/tooltip.js +185 -0
  282. package/dist/_chunk/tooltip.js.map +1 -0
  283. package/dist/_chunk/tooltip.jsx +185 -0
  284. package/dist/_chunk/tooltip.jsx.map +1 -0
  285. package/dist/_chunk/tree.js +452 -0
  286. package/dist/_chunk/tree.js.map +1 -0
  287. package/dist/_chunk/tree.jsx +452 -0
  288. package/dist/_chunk/tree.jsx.map +1 -0
  289. package/dist/_chunk/utils.js +705 -0
  290. package/dist/_chunk/utils.js.map +1 -0
  291. package/dist/_chunk/utils.jsx +705 -0
  292. package/dist/_chunk/utils.jsx.map +1 -0
  293. package/dist/_chunk/visually-hidden.js +93 -0
  294. package/dist/_chunk/visually-hidden.js.map +1 -0
  295. package/dist/_chunk/visually-hidden.jsx +93 -0
  296. package/dist/_chunk/visually-hidden.jsx.map +1 -0
  297. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  298. package/dist/actiongroup/index.js +2 -0
  299. package/dist/actiongroup/index.jsx +2 -0
  300. package/dist/autocomplete/createAutocomplete.d.ts +12 -7
  301. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  302. package/dist/autocomplete/index.js +2 -0
  303. package/dist/autocomplete/index.jsx +2 -0
  304. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  305. package/dist/breadcrumbs/index.js +2 -0
  306. package/dist/breadcrumbs/index.jsx +2 -0
  307. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  308. package/dist/button/index.js +2 -0
  309. package/dist/button/index.jsx +2 -0
  310. package/dist/calendar/createCalendar.d.ts.map +1 -1
  311. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  312. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  313. package/dist/calendar/createCalendarMonthPicker.d.ts +41 -0
  314. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
  315. package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
  316. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
  317. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  318. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  319. package/dist/calendar/index.d.ts +2 -0
  320. package/dist/calendar/index.d.ts.map +1 -1
  321. package/dist/calendar/index.js +2 -0
  322. package/dist/calendar/index.jsx +2 -0
  323. package/dist/calendar/intl/index.d.ts +1 -1
  324. package/dist/calendar/intl/index.d.ts.map +1 -1
  325. package/dist/calendar/utils.d.ts +4 -0
  326. package/dist/calendar/utils.d.ts.map +1 -1
  327. package/dist/checkbox/createCheckbox.d.ts +4 -0
  328. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  329. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  330. package/dist/checkbox/index.js +2 -0
  331. package/dist/checkbox/index.jsx +2 -0
  332. package/dist/collections/index.js +160 -0
  333. package/dist/collections/index.js.map +1 -0
  334. package/dist/collections/index.jsx +160 -0
  335. package/dist/collections/index.jsx.map +1 -0
  336. package/dist/color/createColorArea.d.ts.map +1 -1
  337. package/dist/color/createColorField.d.ts.map +1 -1
  338. package/dist/color/createColorSlider.d.ts.map +1 -1
  339. package/dist/color/createColorSwatch.d.ts.map +1 -1
  340. package/dist/color/createColorWheel.d.ts.map +1 -1
  341. package/dist/color/index.js +2 -0
  342. package/dist/color/index.jsx +2 -0
  343. package/dist/color/intl/index.d.ts +30 -0
  344. package/dist/color/intl/index.d.ts.map +1 -0
  345. package/dist/combobox/createComboBox.d.ts.map +1 -1
  346. package/dist/combobox/index.js +2 -0
  347. package/dist/combobox/index.jsx +2 -0
  348. package/dist/combobox/intl/generated-locales.d.ts +16 -0
  349. package/dist/combobox/intl/generated-locales.d.ts.map +1 -0
  350. package/dist/combobox/intl/index.d.ts +2 -2
  351. package/dist/combobox/intl/index.d.ts.map +1 -1
  352. package/dist/datepicker/createDateField.d.ts +45 -23
  353. package/dist/datepicker/createDateField.d.ts.map +1 -1
  354. package/dist/datepicker/createDatePicker.d.ts +34 -6
  355. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  356. package/dist/datepicker/createDatePickerGroup.d.ts +13 -13
  357. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
  358. package/dist/datepicker/createDateRangePicker.d.ts +55 -7
  359. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  360. package/dist/datepicker/createDateSegment.d.ts +6 -15
  361. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  362. package/dist/datepicker/createDisplayNames.d.ts +17 -0
  363. package/dist/datepicker/createDisplayNames.d.ts.map +1 -0
  364. package/dist/datepicker/createTimeField.d.ts +12 -49
  365. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  366. package/dist/datepicker/index.d.ts +3 -3
  367. package/dist/datepicker/index.d.ts.map +1 -1
  368. package/dist/datepicker/index.js +2 -0
  369. package/dist/datepicker/index.jsx +2 -0
  370. package/dist/datepicker/intl.d.ts +12 -0
  371. package/dist/datepicker/intl.d.ts.map +1 -0
  372. package/dist/dialog/index.js +2 -0
  373. package/dist/dialog/index.jsx +2 -0
  374. package/dist/disclosure/index.js +2 -0
  375. package/dist/disclosure/index.jsx +2 -0
  376. package/dist/dnd/DragManager.d.ts +86 -0
  377. package/dist/dnd/DragManager.d.ts.map +1 -0
  378. package/dist/dnd/DropTargetKeyboardNavigation.d.ts +42 -0
  379. package/dist/dnd/DropTargetKeyboardNavigation.d.ts.map +1 -0
  380. package/dist/dnd/createDrag.d.ts.map +1 -1
  381. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  382. package/dist/dnd/createDraggableItem.d.ts +12 -7
  383. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  384. package/dist/dnd/createDroppableCollection.d.ts +7 -15
  385. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  386. package/dist/dnd/index.d.ts +5 -1
  387. package/dist/dnd/index.d.ts.map +1 -1
  388. package/dist/dnd/index.js +3 -0
  389. package/dist/dnd/index.jsx +3 -0
  390. package/dist/dnd/intl/index.d.ts +39 -0
  391. package/dist/dnd/intl/index.d.ts.map +1 -0
  392. package/dist/dnd/utils.d.ts +7 -2
  393. package/dist/dnd/utils.d.ts.map +1 -1
  394. package/dist/focus/FocusScope.d.ts +7 -0
  395. package/dist/focus/FocusScope.d.ts.map +1 -1
  396. package/dist/focus/index.d.ts +2 -1
  397. package/dist/focus/index.d.ts.map +1 -1
  398. package/dist/focus/index.js +3 -0
  399. package/dist/focus/index.jsx +3 -0
  400. package/dist/focus/virtualFocus.d.ts +26 -0
  401. package/dist/focus/virtualFocus.d.ts.map +1 -0
  402. package/dist/form/createFormValidation.d.ts.map +1 -1
  403. package/dist/form/index.js +3 -0
  404. package/dist/form/index.jsx +3 -0
  405. package/dist/grid/index.js +2 -0
  406. package/dist/grid/index.jsx +2 -0
  407. package/dist/gridlist/createGridList.d.ts +7 -1
  408. package/dist/gridlist/createGridList.d.ts.map +1 -1
  409. package/dist/gridlist/createGridListItem.d.ts +1 -1
  410. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  411. package/dist/gridlist/createGridListSection.d.ts +15 -0
  412. package/dist/gridlist/createGridListSection.d.ts.map +1 -0
  413. package/dist/gridlist/index.d.ts +2 -1
  414. package/dist/gridlist/index.d.ts.map +1 -1
  415. package/dist/gridlist/index.js +2 -0
  416. package/dist/gridlist/index.jsx +2 -0
  417. package/dist/gridlist/types.d.ts +50 -0
  418. package/dist/gridlist/types.d.ts.map +1 -1
  419. package/dist/i18n/index.js +5 -0
  420. package/dist/i18n/index.jsx +5 -0
  421. package/dist/index.d.ts +10 -6
  422. package/dist/index.d.ts.map +1 -1
  423. package/dist/index.js +77 -18311
  424. package/dist/index.jsx +77 -18242
  425. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  426. package/dist/interactions/PressEvent.d.ts +11 -0
  427. package/dist/interactions/PressEvent.d.ts.map +1 -1
  428. package/dist/interactions/createFocus.d.ts.map +1 -1
  429. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  430. package/dist/interactions/createInteractionModality.d.ts +0 -1
  431. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  432. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  433. package/dist/interactions/createPress.d.ts.map +1 -1
  434. package/dist/interactions/index.js +9 -0
  435. package/dist/interactions/index.jsx +9 -0
  436. package/dist/label/createLabels.d.ts.map +1 -1
  437. package/dist/label/index.js +4 -0
  438. package/dist/label/index.jsx +4 -0
  439. package/dist/landmark/index.js +2 -0
  440. package/dist/landmark/index.jsx +2 -0
  441. package/dist/link/index.js +2 -0
  442. package/dist/link/index.jsx +2 -0
  443. package/dist/listbox/createListBox.d.ts +37 -0
  444. package/dist/listbox/createListBox.d.ts.map +1 -1
  445. package/dist/listbox/createOption.d.ts +7 -1
  446. package/dist/listbox/createOption.d.ts.map +1 -1
  447. package/dist/listbox/index.js +2 -0
  448. package/dist/listbox/index.jsx +2 -0
  449. package/dist/live-announcer/index.js +2 -0
  450. package/dist/live-announcer/index.jsx +2 -0
  451. package/dist/menu/createMenu.d.ts +7 -4
  452. package/dist/menu/createMenu.d.ts.map +1 -1
  453. package/dist/menu/createMenuItem.d.ts +9 -1
  454. package/dist/menu/createMenuItem.d.ts.map +1 -1
  455. package/dist/menu/index.js +2 -0
  456. package/dist/menu/index.jsx +2 -0
  457. package/dist/meter/index.js +2 -0
  458. package/dist/meter/index.jsx +2 -0
  459. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  460. package/dist/numberfield/index.js +2 -0
  461. package/dist/numberfield/index.jsx +2 -0
  462. package/dist/overlays/index.js +4 -0
  463. package/dist/overlays/index.jsx +4 -0
  464. package/dist/popover/calculatePosition.d.ts +2 -0
  465. package/dist/popover/calculatePosition.d.ts.map +1 -1
  466. package/dist/popover/createOverlayPosition.d.ts +8 -0
  467. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  468. package/dist/popover/index.js +2 -0
  469. package/dist/popover/index.jsx +2 -0
  470. package/dist/progress/index.js +2 -0
  471. package/dist/progress/index.jsx +2 -0
  472. package/dist/radio/createRadio.d.ts +2 -0
  473. package/dist/radio/createRadio.d.ts.map +1 -1
  474. package/dist/radio/index.js +2 -0
  475. package/dist/radio/index.jsx +2 -0
  476. package/dist/searchfield/index.js +2 -0
  477. package/dist/searchfield/index.jsx +2 -0
  478. package/dist/select/createSelect.d.ts +2 -0
  479. package/dist/select/createSelect.d.ts.map +1 -1
  480. package/dist/select/index.js +2 -0
  481. package/dist/select/index.jsx +2 -0
  482. package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
  483. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
  484. package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
  485. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
  486. package/dist/selection/constants.d.ts +15 -0
  487. package/dist/selection/constants.d.ts.map +1 -0
  488. package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
  489. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
  490. package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
  491. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
  492. package/dist/selection/createSelectableCollection.d.ts +69 -0
  493. package/dist/selection/createSelectableCollection.d.ts.map +1 -0
  494. package/dist/selection/createSelectableItem.d.ts +154 -0
  495. package/dist/selection/createSelectableItem.d.ts.map +1 -0
  496. package/dist/selection/createSelectableList.d.ts +43 -0
  497. package/dist/selection/createSelectableList.d.ts.map +1 -0
  498. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  499. package/dist/selection/index.d.ts +9 -0
  500. package/dist/selection/index.d.ts.map +1 -1
  501. package/dist/selection/index.js +5 -0
  502. package/dist/selection/index.jsx +5 -0
  503. package/dist/selection/selectItem.d.ts +29 -0
  504. package/dist/selection/selectItem.d.ts.map +1 -0
  505. package/dist/selection/utils.d.ts +40 -0
  506. package/dist/selection/utils.d.ts.map +1 -0
  507. package/dist/separator/index.js +2 -0
  508. package/dist/separator/index.jsx +2 -0
  509. package/dist/slider/createSlider.d.ts.map +1 -1
  510. package/dist/slider/index.js +2 -0
  511. package/dist/slider/index.jsx +2 -0
  512. package/dist/spinbutton/createSpinButton.d.ts +41 -0
  513. package/dist/spinbutton/createSpinButton.d.ts.map +1 -0
  514. package/dist/spinbutton/index.d.ts +3 -0
  515. package/dist/spinbutton/index.d.ts.map +1 -0
  516. package/dist/spinbutton/index.js +2 -0
  517. package/dist/spinbutton/index.jsx +2 -0
  518. package/dist/spinbutton/intl.d.ts +5 -0
  519. package/dist/spinbutton/intl.d.ts.map +1 -0
  520. package/dist/ssr/index.d.ts +17 -0
  521. package/dist/ssr/index.d.ts.map +1 -1
  522. package/dist/ssr/index.js +299 -0
  523. package/dist/ssr/index.js.map +1 -0
  524. package/dist/ssr/index.jsx +292 -0
  525. package/dist/ssr/index.jsx.map +1 -0
  526. package/dist/steplist/index.js +2 -0
  527. package/dist/steplist/index.jsx +2 -0
  528. package/dist/switch/createSwitch.d.ts +4 -0
  529. package/dist/switch/createSwitch.d.ts.map +1 -1
  530. package/dist/switch/index.js +2 -0
  531. package/dist/switch/index.jsx +2 -0
  532. package/dist/table/createTable.d.ts.map +1 -1
  533. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  534. package/dist/table/createTableRow.d.ts +1 -1
  535. package/dist/table/createTableRow.d.ts.map +1 -1
  536. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  537. package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
  538. package/dist/table/index.js +2 -0
  539. package/dist/table/index.jsx +2 -0
  540. package/dist/table/types.d.ts +35 -1
  541. package/dist/table/types.d.ts.map +1 -1
  542. package/dist/table/utils.d.ts +15 -0
  543. package/dist/table/utils.d.ts.map +1 -0
  544. package/dist/tabs/createTabs.d.ts +5 -3
  545. package/dist/tabs/createTabs.d.ts.map +1 -1
  546. package/dist/tabs/index.js +2 -0
  547. package/dist/tabs/index.jsx +2 -0
  548. package/dist/tag/createTag.d.ts +2 -0
  549. package/dist/tag/createTag.d.ts.map +1 -1
  550. package/dist/tag/createTagGroup.d.ts +7 -0
  551. package/dist/tag/createTagGroup.d.ts.map +1 -1
  552. package/dist/tag/index.js +2 -0
  553. package/dist/tag/index.jsx +2 -0
  554. package/dist/textfield/index.js +2 -0
  555. package/dist/textfield/index.jsx +2 -0
  556. package/dist/toast/createToast.d.ts.map +1 -1
  557. package/dist/toast/index.js +2 -0
  558. package/dist/toast/index.jsx +2 -0
  559. package/dist/toggle/createToggle.d.ts +4 -0
  560. package/dist/toggle/createToggle.d.ts.map +1 -1
  561. package/dist/toggle/index.js +3 -0
  562. package/dist/toggle/index.jsx +3 -0
  563. package/dist/toolbar/createToolbar.d.ts +1 -1
  564. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  565. package/dist/toolbar/index.js +2 -0
  566. package/dist/toolbar/index.jsx +2 -0
  567. package/dist/tooltip/index.js +2 -0
  568. package/dist/tooltip/index.jsx +2 -0
  569. package/dist/tree/createTree.d.ts +5 -1
  570. package/dist/tree/createTree.d.ts.map +1 -1
  571. package/dist/tree/createTreeItem.d.ts +1 -1
  572. package/dist/tree/createTreeItem.d.ts.map +1 -1
  573. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  574. package/dist/tree/index.js +2 -0
  575. package/dist/tree/index.jsx +2 -0
  576. package/dist/tree/types.d.ts +10 -0
  577. package/dist/tree/types.d.ts.map +1 -1
  578. package/dist/utils/animation.d.ts +60 -0
  579. package/dist/utils/animation.d.ts.map +1 -0
  580. package/dist/utils/dom.d.ts +49 -2
  581. package/dist/utils/dom.d.ts.map +1 -1
  582. package/dist/utils/index.d.ts +4 -1
  583. package/dist/utils/index.d.ts.map +1 -1
  584. package/dist/utils/index.js +6 -0
  585. package/dist/utils/index.jsx +6 -0
  586. package/dist/utils/keyboard.d.ts +17 -0
  587. package/dist/utils/keyboard.d.ts.map +1 -0
  588. package/dist/utils/mergeProps.d.ts.map +1 -1
  589. package/dist/utils/scrollIntoView.d.ts +30 -0
  590. package/dist/utils/scrollIntoView.d.ts.map +1 -0
  591. package/dist/visually-hidden/index.js +2 -0
  592. package/dist/visually-hidden/index.jsx +2 -0
  593. package/package.json +304 -3
  594. package/src/actiongroup/createActionGroup.ts +26 -109
  595. package/src/autocomplete/createAutocomplete.ts +202 -35
  596. package/src/breadcrumbs/createBreadcrumbs.ts +12 -4
  597. package/src/button/createToggleButtonGroup.ts +19 -14
  598. package/src/calendar/createCalendar.ts +5 -4
  599. package/src/calendar/createCalendarCell.ts +36 -5
  600. package/src/calendar/createCalendarGrid.ts +47 -12
  601. package/src/calendar/createCalendarMonthPicker.ts +105 -0
  602. package/src/calendar/createCalendarYearPicker.ts +144 -0
  603. package/src/calendar/createRangeCalendar.ts +27 -15
  604. package/src/calendar/createRangeCalendarCell.ts +17 -3
  605. package/src/calendar/index.ts +17 -0
  606. package/src/calendar/intl/index.ts +8 -0
  607. package/src/calendar/utils.ts +4 -0
  608. package/src/checkbox/createCheckbox.ts +10 -0
  609. package/src/checkbox/createCheckboxGroupItem.ts +12 -16
  610. package/src/color/createColorArea.ts +17 -10
  611. package/src/color/createColorField.ts +8 -1
  612. package/src/color/createColorSlider.ts +1 -2
  613. package/src/color/createColorSwatch.ts +4 -2
  614. package/src/color/createColorWheel.ts +0 -6
  615. package/src/color/intl/index.ts +316 -0
  616. package/src/combobox/createComboBox.ts +35 -4
  617. package/src/combobox/intl/generated-locales.ts +635 -0
  618. package/src/combobox/intl/index.ts +8 -2
  619. package/src/datepicker/createDateField.ts +228 -213
  620. package/src/datepicker/createDatePicker.ts +157 -146
  621. package/src/datepicker/createDatePickerGroup.ts +88 -82
  622. package/src/datepicker/createDateRangePicker.ts +230 -179
  623. package/src/datepicker/createDateSegment.ts +386 -384
  624. package/src/datepicker/createDisplayNames.ts +45 -0
  625. package/src/datepicker/createTimeField.ts +36 -129
  626. package/src/datepicker/index.ts +13 -14
  627. package/src/datepicker/intl.ts +633 -0
  628. package/src/dnd/DragManager.ts +693 -0
  629. package/src/dnd/DropTargetKeyboardNavigation.ts +337 -0
  630. package/src/dnd/createDrag.ts +31 -5
  631. package/src/dnd/createDraggableCollection.ts +33 -15
  632. package/src/dnd/createDraggableItem.ts +92 -5
  633. package/src/dnd/createDroppableCollection.ts +488 -371
  634. package/src/dnd/index.ts +11 -0
  635. package/src/dnd/intl/ar-AE.json +29 -0
  636. package/src/dnd/intl/bg-BG.json +29 -0
  637. package/src/dnd/intl/cs-CZ.json +29 -0
  638. package/src/dnd/intl/da-DK.json +29 -0
  639. package/src/dnd/intl/de-DE.json +29 -0
  640. package/src/dnd/intl/el-GR.json +29 -0
  641. package/src/dnd/intl/en-US.json +29 -0
  642. package/src/dnd/intl/es-ES.json +29 -0
  643. package/src/dnd/intl/et-EE.json +29 -0
  644. package/src/dnd/intl/fi-FI.json +29 -0
  645. package/src/dnd/intl/fr-FR.json +29 -0
  646. package/src/dnd/intl/he-IL.json +29 -0
  647. package/src/dnd/intl/hr-HR.json +29 -0
  648. package/src/dnd/intl/hu-HU.json +29 -0
  649. package/src/dnd/intl/index.ts +139 -0
  650. package/src/dnd/intl/it-IT.json +29 -0
  651. package/src/dnd/intl/ja-JP.json +29 -0
  652. package/src/dnd/intl/ko-KR.json +29 -0
  653. package/src/dnd/intl/lt-LT.json +29 -0
  654. package/src/dnd/intl/lv-LV.json +29 -0
  655. package/src/dnd/intl/nb-NO.json +29 -0
  656. package/src/dnd/intl/nl-NL.json +29 -0
  657. package/src/dnd/intl/pl-PL.json +29 -0
  658. package/src/dnd/intl/pt-BR.json +29 -0
  659. package/src/dnd/intl/pt-PT.json +29 -0
  660. package/src/dnd/intl/ro-RO.json +29 -0
  661. package/src/dnd/intl/ru-RU.json +29 -0
  662. package/src/dnd/intl/sk-SK.json +29 -0
  663. package/src/dnd/intl/sl-SI.json +29 -0
  664. package/src/dnd/intl/sr-SP.json +29 -0
  665. package/src/dnd/intl/sv-SE.json +29 -0
  666. package/src/dnd/intl/tr-TR.json +29 -0
  667. package/src/dnd/intl/uk-UA.json +29 -0
  668. package/src/dnd/intl/zh-CN.json +29 -0
  669. package/src/dnd/intl/zh-TW.json +29 -0
  670. package/src/dnd/utils.ts +63 -3
  671. package/src/focus/FocusScope.tsx +266 -24
  672. package/src/focus/index.ts +8 -0
  673. package/src/focus/virtualFocus.ts +55 -0
  674. package/src/form/createFormValidation.ts +8 -1
  675. package/src/gridlist/createGridList.ts +187 -48
  676. package/src/gridlist/createGridListItem.ts +87 -155
  677. package/src/gridlist/createGridListSection.ts +54 -0
  678. package/src/gridlist/index.ts +3 -0
  679. package/src/gridlist/types.ts +47 -0
  680. package/src/index.ts +51 -3
  681. package/src/interactions/FocusableProvider.tsx +11 -6
  682. package/src/interactions/PressEvent.ts +14 -0
  683. package/src/interactions/createFocus.ts +26 -21
  684. package/src/interactions/createFocusWithin.ts +23 -24
  685. package/src/interactions/createInteractionModality.ts +26 -15
  686. package/src/interactions/createKeyboard.ts +10 -0
  687. package/src/interactions/createPress.ts +29 -6
  688. package/src/label/createLabels.ts +7 -4
  689. package/src/listbox/createListBox.ts +203 -10
  690. package/src/listbox/createOption.ts +84 -74
  691. package/src/menu/createMenu.ts +93 -16
  692. package/src/menu/createMenuItem.ts +253 -41
  693. package/src/numberfield/createNumberField.ts +82 -14
  694. package/src/popover/calculatePosition.ts +19 -7
  695. package/src/popover/createOverlayPosition.ts +9 -0
  696. package/src/radio/createRadio.ts +19 -2
  697. package/src/select/createSelect.ts +41 -4
  698. package/src/selection/DOMLayoutDelegate.ts +102 -0
  699. package/src/selection/ListKeyboardDelegate.ts +398 -0
  700. package/src/selection/constants.ts +16 -0
  701. package/src/selection/createCollectionRowInteraction.ts +209 -0
  702. package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
  703. package/src/selection/createSelectableCollection.ts +645 -0
  704. package/src/selection/createSelectableItem.ts +512 -0
  705. package/src/selection/createSelectableList.ts +93 -0
  706. package/src/selection/createTypeSelect.ts +112 -51
  707. package/src/selection/index.ts +31 -0
  708. package/src/selection/selectItem.ts +80 -0
  709. package/src/selection/utils.ts +82 -0
  710. package/src/slider/createSlider.ts +48 -1
  711. package/src/spinbutton/createSpinButton.ts +163 -0
  712. package/src/spinbutton/index.ts +10 -0
  713. package/src/spinbutton/intl.ts +115 -0
  714. package/src/ssr/index.tsx +31 -0
  715. package/src/switch/createSwitch.ts +10 -0
  716. package/src/table/createTable.ts +82 -27
  717. package/src/table/createTableColumnHeader.ts +10 -0
  718. package/src/table/createTableRow.ts +208 -203
  719. package/src/table/createTableSelectAllCheckbox.ts +3 -4
  720. package/src/table/createTableSelectionCheckbox.ts +24 -1
  721. package/src/table/types.ts +37 -1
  722. package/src/table/utils.ts +41 -0
  723. package/src/tabs/createTabs.ts +95 -24
  724. package/src/tag/createTag.ts +30 -36
  725. package/src/tag/createTagGroup.ts +92 -0
  726. package/src/toast/createToast.ts +1 -0
  727. package/src/toggle/createToggle.ts +20 -0
  728. package/src/toolbar/createToolbar.ts +43 -94
  729. package/src/tree/createTree.ts +165 -52
  730. package/src/tree/createTreeItem.ts +105 -120
  731. package/src/tree/createTreeSelectionCheckbox.ts +14 -1
  732. package/src/tree/types.ts +10 -0
  733. package/src/utils/animation.ts +243 -0
  734. package/src/utils/dom.ts +216 -25
  735. package/src/utils/index.ts +10 -0
  736. package/src/utils/keyboard.ts +25 -0
  737. package/src/utils/mergeProps.ts +8 -1
  738. package/src/utils/scrollIntoView.ts +181 -0
  739. package/dist/datepicker/createTimeSegment.d.ts +0 -29
  740. package/dist/datepicker/createTimeSegment.d.ts.map +0 -1
  741. package/dist/index.js.map +0 -1
  742. package/dist/index.jsx.map +0 -1
  743. package/src/datepicker/createTimeSegment.ts +0 -352
@@ -1,14 +1,32 @@
1
1
  /**
2
2
  * createDateSegment hook for Solidaria
3
3
  *
4
- * Provides the behavior and accessibility implementation for a date segment.
5
- * Based on @react-aria/datepicker useDateSegment
4
+ * Provides the behavior and accessibility implementation for a single editable
5
+ * date segment. Faithful port of @react-aria/datepicker `useDateSegment` — the
6
+ * spinbutton wiring (value stepping + live announcements) is delegated to
7
+ * `createSpinButton`, numeric text entry flows through native `beforeinput`
8
+ * events, and segment focus recovery on unmount mirrors upstream's layout effect.
6
9
  */
7
10
 
8
- import { createSignal, createMemo, onCleanup } from "solid-js";
11
+ import { createMemo, createEffect, onCleanup } from "solid-js";
12
+ import { toCalendar, CalendarDate } from "@internationalized/date";
13
+ import { NumberParser } from "@internationalized/number";
9
14
  import { access, type MaybeAccessor } from "../utils/reactivity";
15
+ import { mergeProps } from "../utils/mergeProps";
16
+ import {
17
+ isMac,
18
+ isIOS,
19
+ scrollIntoViewport,
20
+ getScrollParent,
21
+ nodeContains,
22
+ } from "../utils";
23
+ import { createId } from "../ssr";
24
+ import { createLabels } from "../label/createLabels";
25
+ import { useLocale, createDateFormatter, createFilter } from "../i18n";
26
+ import { createSpinButton } from "../spinbutton";
27
+ import { createDisplayNames } from "./createDisplayNames";
28
+ import { hookData } from "./createDateField";
10
29
  import type { DateFieldState, DateSegment, DateSegmentType } from "@proyecto-viviana/solid-stately";
11
- import { useLocale } from "../i18n";
12
30
 
13
31
  export interface AriaDateSegmentProps {
14
32
  /** The segment data. */
@@ -22,18 +40,18 @@ export interface AriaDateSegmentProps {
22
40
  export interface DateSegmentAria {
23
41
  /** Props for the segment element. */
24
42
  segmentProps: Record<string, unknown>;
25
- /** Whether the segment is focused. */
26
- isFocused: boolean;
27
- /** Whether the segment is editable. */
28
- isEditable: boolean;
29
- /** Whether the segment is a placeholder. */
30
- isPlaceholder: boolean;
31
- /** The text to display. */
32
- text: string;
33
- /** Whether the segment is hovered. */
34
- isHovered: boolean;
35
- /** Whether the segment has keyboard focus visible. */
36
- isFocusVisible: boolean;
43
+ }
44
+
45
+ function commonPrefixLength(strings: string[]): number {
46
+ strings.sort();
47
+ const first = strings[0];
48
+ const last = strings[strings.length - 1];
49
+ for (let i = 0; i < first.length; i++) {
50
+ if (first[i] !== last[i]) {
51
+ return i;
52
+ }
53
+ }
54
+ return 0;
37
55
  }
38
56
 
39
57
  /**
@@ -42,429 +60,413 @@ export interface DateSegmentAria {
42
60
  export function createDateSegment<T extends DateFieldState>(
43
61
  props: MaybeAccessor<AriaDateSegmentProps>,
44
62
  state: T,
45
- ref?: () => HTMLElement | null,
63
+ ref: () => HTMLElement | null,
46
64
  ): DateSegmentAria {
47
65
  const getProps = () => access(props);
48
- const [isFocused, setIsFocused] = createSignal(false);
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();
66
+ const segment = () => getProps().segment;
67
+ let enteredKeys = "";
68
+ const localeInfo = useLocale();
69
+ const locale = () => localeInfo().locale;
70
+ const direction = () => localeInfo().direction;
71
+ const displayNames = createDisplayNames();
72
+ const hd = hookData.get(state as unknown as object) as
73
+ | {
74
+ ariaLabel?: string;
75
+ ariaLabelledBy?: string;
76
+ ariaDescribedBy?: () => string | undefined;
77
+ focusManager: {
78
+ focusNext: () => HTMLElement | null;
79
+ focusPrevious: () => HTMLElement | null;
80
+ };
81
+ }
82
+ | undefined;
83
+ const focusManager = hd?.focusManager;
84
+ const segmentId = createId();
85
+
86
+ const resolvedOptions = state.dateFormatter.resolvedOptions();
87
+ const monthDateFormatter = createDateFormatter({
88
+ month: "long",
89
+ timeZone: resolvedOptions.timeZone,
90
+ });
91
+ const hourDateFormatter = createDateFormatter({
92
+ hour: "numeric",
93
+ hour12: resolvedOptions.hour12,
94
+ timeZone: resolvedOptions.timeZone,
95
+ });
54
96
 
55
- // Get the segment from props
56
- const segment = createMemo(() => getProps().segment);
97
+ const textValue = createMemo(() => {
98
+ const seg = segment();
99
+ let value = seg.isPlaceholder ? "" : seg.text;
100
+ if (seg.type === "month" && !seg.isPlaceholder) {
101
+ const monthTextValue = monthDateFormatter().format(state.dateValue());
102
+ value = monthTextValue !== value ? `${value} \u{2013} ${monthTextValue}` : monthTextValue;
103
+ } else if (seg.type === "hour" && !seg.isPlaceholder) {
104
+ value = hourDateFormatter().format(state.dateValue());
105
+ }
106
+ return value;
107
+ });
57
108
 
58
- // Check if editable
59
- const isEditable = createMemo(() => {
109
+ const spinButton = createSpinButton(() => {
60
110
  const seg = segment();
61
- return seg.isEditable && !state.isDisabled() && !state.isReadOnly();
111
+ return {
112
+ // The ARIA spec says aria-valuenow is optional if there's no value, but aXe requires it.
113
+ value: seg.value ?? undefined,
114
+ textValue: textValue(),
115
+ minValue: seg.minValue,
116
+ maxValue: seg.maxValue,
117
+ isDisabled: state.isDisabled(),
118
+ isReadOnly: state.isReadOnly() || !seg.isEditable,
119
+ isRequired: state.isRequired(),
120
+ onIncrement: () => {
121
+ enteredKeys = "";
122
+ state.increment(seg.type);
123
+ },
124
+ onDecrement: () => {
125
+ enteredKeys = "";
126
+ state.decrement(seg.type);
127
+ },
128
+ onIncrementPage: () => {
129
+ enteredKeys = "";
130
+ state.incrementPage(seg.type);
131
+ },
132
+ onDecrementPage: () => {
133
+ enteredKeys = "";
134
+ state.decrementPage(seg.type);
135
+ },
136
+ onIncrementToMax: () => {
137
+ enteredKeys = "";
138
+ state.incrementToMax(seg.type);
139
+ },
140
+ onDecrementToMin: () => {
141
+ enteredKeys = "";
142
+ state.decrementToMin(seg.type);
143
+ },
144
+ };
62
145
  });
63
146
 
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;
147
+ const parser = createMemo(() => new NumberParser(locale(), { maximumFractionDigits: 0 }));
68
148
 
69
- const clearLongPress = () => {
70
- if (longPressTimeout) {
71
- clearTimeout(longPressTimeout);
72
- longPressTimeout = null;
149
+ const backspace = () => {
150
+ const seg = segment();
151
+ if (seg.text === seg.placeholder) {
152
+ focusManager?.focusPrevious();
73
153
  }
74
- if (longPressInterval) {
75
- clearInterval(longPressInterval);
76
- longPressInterval = null;
154
+ if (parser().isValidPartialNumber(seg.text) && !state.isReadOnly() && !seg.isPlaceholder) {
155
+ let newValue = seg.text.slice(0, -1);
156
+ const parsed = parser().parse(newValue);
157
+ newValue = parsed === 0 ? "" : newValue;
158
+ if (newValue.length === 0 || parsed === 0) {
159
+ state.clearSegment(seg.type);
160
+ } else {
161
+ state.setSegment(seg.type, parsed);
162
+ }
163
+ enteredKeys = newValue;
164
+ } else if (seg.type === "dayPeriod" || seg.type === "era") {
165
+ state.clearSegment(seg.type);
77
166
  }
78
167
  };
79
168
 
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;
169
+ const onKeyDown = (e: KeyboardEvent) => {
170
+ // Firefox does not fire selectstart for Ctrl/Cmd + A
171
+ if (e.key === "a" && (isMac() ? e.metaKey : e.ctrlKey)) {
172
+ e.preventDefault();
108
173
  }
109
-
110
- if (target === "last") {
111
- segments[segments.length - 1]?.focus();
174
+ if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {
112
175
  return;
113
176
  }
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();
177
+ switch (e.key) {
178
+ case "Backspace":
179
+ case "Delete":
180
+ // Safari on iOS does not fire beforeinput for the backspace key because the cursor is at the start.
181
+ e.preventDefault();
182
+ e.stopPropagation();
183
+ backspace();
184
+ break;
121
185
  }
122
186
  };
123
187
 
124
- const clearCurrentSegment = (type: DateSegmentType) => {
125
- state.clearSegment(type);
126
- setEnteredKeys("");
127
- };
188
+ const { startsWith } = createFilter({ sensitivity: "base" })();
189
+ const amPmFormatter = createDateFormatter({ hour: "numeric", hour12: true });
190
+ const am = createMemo(() => {
191
+ const date = new Date();
192
+ date.setHours(0);
193
+ return amPmFormatter().formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
194
+ });
195
+ const pm = createMemo(() => {
196
+ const date = new Date();
197
+ date.setHours(12);
198
+ return amPmFormatter().formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
199
+ });
128
200
 
129
- // Handle keyboard input
130
- const handleKeyDown = (e: KeyboardEvent) => {
131
- if (!isEditable()) return;
132
- if (isComposing()) return;
201
+ // Get a list of formatted era names so users can type the first character to choose one.
202
+ const eraFormatter = createDateFormatter({ year: "numeric", era: "narrow", timeZone: "UTC" });
203
+ const eras = createMemo(() => {
204
+ if (segment().type !== "era") {
205
+ return [] as Array<{ era: string; formatted: string }>;
206
+ }
207
+ const date = toCalendar(new CalendarDate(1, 1, 1), state.calendar);
208
+ const list = state.calendar.getEras().map((era) => {
209
+ const eraDate = date.set({ year: 1, month: 1, day: 1, era }).toDate("UTC");
210
+ const parts = eraFormatter().formatToParts(eraDate);
211
+ const formatted = parts.find((p) => p.type === "era")?.value ?? "";
212
+ return { era, formatted };
213
+ });
214
+ const prefixLength = commonPrefixLength(list.map((era) => era.formatted));
215
+ if (prefixLength) {
216
+ for (const era of list) {
217
+ era.formatted = era.formatted.slice(prefixLength);
218
+ }
219
+ }
220
+ return list;
221
+ });
133
222
 
223
+ const onInput = (key: string) => {
134
224
  const seg = segment();
135
- const type = seg.type;
136
-
137
- if (type === "literal") return;
138
-
139
- // Keyboard interaction means focus is visible
140
- setIsFocusVisible(true);
141
-
142
- switch (e.key) {
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":
152
- e.preventDefault();
153
- state.incrementSegment(type);
154
- if (!e.repeat) {
155
- startLongPress(() => state.incrementSegment(type));
156
- }
157
- break;
158
- case "ArrowDown":
159
- e.preventDefault();
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");
225
+ if (state.isDisabled() || state.isReadOnly()) {
226
+ return;
227
+ }
228
+ const newValue = enteredKeys + key;
229
+ switch (seg.type) {
230
+ case "dayPeriod":
231
+ if (startsWith(am(), key)) {
232
+ state.setSegment("dayPeriod", 0);
233
+ } else if (startsWith(pm(), key)) {
234
+ state.setSegment("dayPeriod", 1);
178
235
  } else {
179
- clearCurrentSegment(type);
236
+ break;
180
237
  }
238
+ focusManager?.focusNext();
181
239
  break;
182
- case "Delete":
183
- e.preventDefault();
184
- clearCurrentSegment(type);
185
- break;
186
- default:
187
- // Handle numeric input
188
- const normalizedDigit = normalizeDigit(e.key);
189
- if (normalizedDigit) {
190
- e.preventDefault();
191
- handleNumericInput(normalizedDigit, type, seg);
240
+ case "era": {
241
+ const matched = eras().find((e) => startsWith(e.formatted, key));
242
+ if (matched) {
243
+ state.setSegment("era", matched.era as unknown as number);
244
+ focusManager?.focusNext();
192
245
  }
193
246
  break;
194
- }
195
- };
196
-
197
- const handleKeyUp = () => {
198
- clearLongPress();
199
- };
200
-
201
- // Handle numeric input
202
- const handleNumericInput = (key: string, type: DateSegmentType, seg: DateSegment) => {
203
- const newKeys = enteredKeys() + key;
204
- const numValue = parseInt(newKeys, 10);
205
- const maxValue = seg.maxValue ?? 99;
206
- const minValue = seg.minValue ?? 0;
207
- const maxDigits = String(maxValue).length;
208
-
209
- // Check if we should accept more digits
210
- if (numValue <= maxValue) {
211
- state.setSegment(type, numValue);
212
-
213
- // If entering more digits wouldn't make sense, clear entered keys
214
- const potentialNextValue = parseInt(newKeys + "0", 10);
215
- if (potentialNextValue > maxValue || newKeys.length >= maxDigits) {
216
- setEnteredKeys("");
217
- focusSegment("next");
218
- } else {
219
- setEnteredKeys(newKeys);
220
247
  }
221
- } else {
222
- // Start fresh with just this key
223
- const singleValue = parseInt(key, 10);
224
- if (singleValue >= minValue && singleValue <= maxValue) {
225
- state.setSegment(type, singleValue);
226
- const potentialNextValue = parseInt(key + "0", 10);
227
- if (potentialNextValue > maxValue || key.length >= maxDigits) {
228
- setEnteredKeys("");
229
- focusSegment("next");
248
+ case "day":
249
+ case "hour":
250
+ case "minute":
251
+ case "second":
252
+ case "month":
253
+ case "year": {
254
+ if (!parser().isValidPartialNumber(newValue)) {
255
+ return;
256
+ }
257
+ const numberValue = parser().parse(newValue);
258
+ let segmentValue = numberValue;
259
+ if (seg.maxValue !== undefined && numberValue > seg.maxValue) {
260
+ segmentValue = parser().parse(key);
261
+ }
262
+ if (isNaN(numberValue)) {
263
+ return;
264
+ }
265
+ state.setSegment(seg.type, segmentValue);
266
+ if (
267
+ seg.maxValue !== undefined &&
268
+ (Number(numberValue + "0") > seg.maxValue || newValue.length >= String(seg.maxValue).length)
269
+ ) {
270
+ enteredKeys = "";
271
+ focusManager?.focusNext();
230
272
  } else {
231
- setEnteredKeys(key);
273
+ enteredKeys = newValue;
232
274
  }
233
- } else {
234
- setEnteredKeys("");
275
+ break;
235
276
  }
236
277
  }
237
278
  };
238
279
 
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);
280
+ const onFocus = () => {
281
+ enteredKeys = "";
282
+ const el = ref();
283
+ if (el) {
284
+ scrollIntoViewport(el, { containingElement: getScrollParent(el) });
285
+ // Collapse selection to start or Chrome won't fire input events.
286
+ const selection = window.getSelection();
287
+ selection?.collapse(el);
257
288
  }
258
289
  };
259
290
 
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);
291
+ // Enforce that the selection is collapsed when inside a date segment. Otherwise, when tapping on a
292
+ // segment in Android Chrome and then entering text, composition events break the DOM structure.
293
+ createEffect(() => {
294
+ if (typeof document === "undefined") {
295
+ return;
278
296
  }
279
- };
280
-
281
- // Handle focus
282
- const handleFocus = () => {
283
- setIsFocused(true);
284
- setEnteredKeys("");
297
+ const handler = () => {
298
+ const selection = window.getSelection();
299
+ if (selection?.anchorNode && nodeContains(ref(), selection.anchorNode)) {
300
+ selection.collapse(ref());
301
+ }
302
+ };
303
+ document.addEventListener("selectionchange", handler);
304
+ onCleanup(() => document.removeEventListener("selectionchange", handler));
305
+ });
285
306
 
286
- if (!hadPointerDown) {
287
- setIsFocusVisible(true);
307
+ let compositionValue = "";
308
+ createEffect(() => {
309
+ const el = ref();
310
+ if (!el) {
311
+ return;
288
312
  }
289
- hadPointerDown = false;
313
+ const onBeforeInput = (e: InputEvent) => {
314
+ if (!ref()) {
315
+ return;
316
+ }
317
+ e.preventDefault();
318
+ switch (e.inputType) {
319
+ case "deleteContentBackward":
320
+ case "deleteContentForward":
321
+ if (parser().isValidPartialNumber(segment().text) && !state.isReadOnly()) {
322
+ backspace();
323
+ }
324
+ break;
325
+ case "insertCompositionText":
326
+ // insertCompositionText cannot be canceled. Record current state to restore in `input`.
327
+ compositionValue = el.textContent ?? "";
328
+ // Safari gets stuck in a composition state unless we also assign to the value here.
329
+ // eslint-disable-next-line no-self-assign
330
+ el.textContent = el.textContent;
331
+ break;
332
+ default:
333
+ if (e.data != null) {
334
+ onInput(e.data);
335
+ }
336
+ break;
337
+ }
338
+ };
339
+ const onInputEvent = (e: InputEvent) => {
340
+ const { inputType, data } = e;
341
+ switch (inputType) {
342
+ case "insertCompositionText":
343
+ if (ref()) {
344
+ el.textContent = compositionValue;
345
+ }
346
+ if (data != null && (startsWith(am(), data) || startsWith(pm(), data))) {
347
+ onInput(data);
348
+ }
349
+ break;
350
+ }
351
+ };
352
+ el.addEventListener("beforeinput", onBeforeInput as EventListener);
353
+ el.addEventListener("input", onInputEvent as EventListener);
354
+ onCleanup(() => {
355
+ el.removeEventListener("beforeinput", onBeforeInput as EventListener);
356
+ el.removeEventListener("input", onInputEvent as EventListener);
357
+ });
358
+ });
290
359
 
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);
360
+ // If the focused segment is removed, focus the previous one, or the next one if there was no previous one.
361
+ let focusedElement: HTMLElement | null = null;
362
+ createEffect(() => {
363
+ focusedElement = ref();
364
+ });
365
+ onCleanup(() => {
366
+ if (typeof document !== "undefined" && document.activeElement === focusedElement) {
367
+ const prev = focusManager?.focusPrevious();
368
+ if (!prev) {
369
+ focusManager?.focusNext();
300
370
  }
301
371
  }
302
- };
303
-
304
- const handleBlur = () => {
305
- setIsFocused(false);
306
- setIsFocusVisible(false);
307
- setEnteredKeys("");
308
- clearLongPress();
309
- state.confirmPlaceholder();
310
- };
311
-
312
- const handleMouseEnter = () => {
313
- setIsHovered(true);
314
- };
315
-
316
- const handleMouseLeave = () => {
317
- setIsHovered(false);
318
- };
372
+ });
319
373
 
320
- // Segment props
321
- const segmentProps = createMemo(() => {
374
+ const segmentProps = createMemo<Record<string, unknown>>(() => {
322
375
  const seg = segment();
323
- const type = seg.type;
324
376
  const p = getProps();
325
377
 
326
- // Literal segments don't need interaction props
327
- if (type === "literal") {
328
- return {
329
- "aria-hidden": true,
330
- };
378
+ // spinbuttons cannot be focused with VoiceOver on iOS.
379
+ const touchPropOverrides =
380
+ isIOS() || seg.type === "timeZoneName"
381
+ ? {
382
+ role: "textbox",
383
+ "aria-valuemax": null,
384
+ "aria-valuemin": null,
385
+ "aria-valuetext": null,
386
+ "aria-valuenow": null,
387
+ }
388
+ : {};
389
+
390
+ // Only apply aria-describedby to the first segment, unless the field is invalid.
391
+ let ariaDescribedBy = hd?.ariaDescribedBy?.();
392
+ const firstEditable = state.segments().find((s) => s.isEditable);
393
+ if (firstEditable && firstEditable.type !== seg.type && !state.isInvalid()) {
394
+ ariaDescribedBy = undefined;
395
+ }
396
+ // Allow an explicitly passed describedby (e.g. from a datepicker) to compose.
397
+ ariaDescribedBy = [p["aria-describedby"], ariaDescribedBy].filter(Boolean).join(" ") || undefined;
398
+
399
+ const isEditable = !state.isDisabled() && !state.isReadOnly() && seg.isEditable;
400
+ // Prepend the label passed from the field to each segment name.
401
+ const name = seg.type === "literal" ? "" : displayNames().of(seg.type);
402
+ const ariaLabel = hd?.ariaLabel;
403
+ const ariaLabelledBy = hd?.ariaLabelledBy;
404
+ // Upstream generates a separate id inside useLabels and lets react-aria's
405
+ // mergeProps collapse it with the segment's own id via mergeIds' SSR ref
406
+ // registry. Solid has no such registry, so we thread the segment id straight
407
+ // into createLabels: the self-reference token then IS the element id, which
408
+ // is the exact observable result mergeIds produces ("month, <field label>").
409
+ const labelProps = createLabels({
410
+ id: segmentId,
411
+ "aria-label": `${name}${ariaLabel ? `, ${ariaLabel}` : ""}${ariaLabelledBy ? ", " : ""}`,
412
+ "aria-labelledby": ariaLabelledBy,
413
+ });
414
+
415
+ // Literal segments should not be visible to screen readers.
416
+ if (seg.type === "literal") {
417
+ return { "aria-hidden": true };
331
418
  }
332
419
 
333
- return {
334
- role: "spinbutton",
335
- tabIndex: isEditable() ? 0 : -1,
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,
346
- contentEditable: isEditable(),
347
- suppressContentEditableWarning: true,
348
- inputMode: "numeric" as const,
349
- autoCorrect: "off",
350
- enterKeyHint: "next" as const,
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,
360
- onKeyDown: handleKeyDown,
361
- onKeyUp: handleKeyUp,
362
- onFocus: handleFocus,
363
- onBlur: handleBlur,
364
- onBeforeInput: handleBeforeInput,
365
- onCompositionStart: handleCompositionStart,
366
- onCompositionEnd: handleCompositionEnd,
367
- onMouseEnter: handleMouseEnter,
368
- onMouseLeave: handleMouseLeave,
369
- onPointerDown: (e: PointerEvent) => {
370
- // Prevent cursor positioning in the middle of the segment
371
- e.preventDefault();
372
- hadPointerDown = true;
373
- setIsFocusVisible(false);
420
+ // Kebab-case CSS property names: this style object is merged via mergeProps
421
+ // and applied by Solid's runtime `style()` spread helper, which calls
422
+ // `el.style.setProperty(key, value)` with the raw key. setProperty ignores
423
+ // camelCase names (`unicodeBidi`, `caretColor`) but honors real CSS property
424
+ // names, so upstream's React CSSProperties must be written kebab here to
425
+ // actually take effect (React auto-kebabs camelCase; a Solid spread does
426
+ // not). `direction` matched already precisely because it is single-word.
427
+ const segmentStyle: Record<string, string> = { "caret-color": "transparent" };
428
+ if (direction() === "rtl") {
429
+ segmentStyle["unicode-bidi"] = "embed";
430
+ const format = (resolvedOptions as unknown as Record<string, unknown>)[seg.type];
431
+ if (format === "numeric" || format === "2-digit") {
432
+ segmentStyle.direction = "ltr";
433
+ }
434
+ }
435
+
436
+ return mergeProps(spinButton.spinButtonProps as Record<string, unknown>, labelProps as Record<string, unknown>, {
437
+ id: segmentId,
438
+ ...touchPropOverrides,
439
+ "aria-invalid": state.isInvalid() ? "true" : undefined,
440
+ "aria-describedby": ariaDescribedBy,
441
+ "aria-readonly": state.isReadOnly() || !seg.isEditable ? "true" : undefined,
442
+ "aria-controls": (p["aria-controls"] as string | undefined) || undefined,
443
+ "data-placeholder": seg.isPlaceholder || undefined,
444
+ contentEditable: isEditable,
445
+ suppressContentEditableWarning: isEditable,
446
+ spellCheck: isEditable ? "false" : undefined,
447
+ autoCorrect: isEditable ? "off" : undefined,
448
+ enterKeyHint: isEditable ? "next" : undefined,
449
+ inputMode:
450
+ state.isDisabled() || seg.type === "dayPeriod" || seg.type === "era" || !isEditable
451
+ ? undefined
452
+ : "numeric",
453
+ tabIndex: state.isDisabled() ? undefined : 0,
454
+ onKeyDown,
455
+ onFocus,
456
+ style: segmentStyle,
457
+ // Prevent pointer events from reaching the group's press handler, and allow native focus.
458
+ onPointerDown(e: PointerEvent) {
459
+ e.stopPropagation();
374
460
  },
375
- onPointerUp: () => {
376
- clearLongPress();
461
+ onMouseDown(e: MouseEvent) {
462
+ e.stopPropagation();
377
463
  },
378
- };
379
- });
380
-
381
- // Text to display
382
- const text = createMemo(() => {
383
- const seg = segment();
384
- return seg.isPlaceholder ? seg.placeholder : seg.text;
464
+ });
385
465
  });
386
466
 
387
467
  return {
388
468
  get segmentProps() {
389
469
  return segmentProps();
390
470
  },
391
- get isFocused() {
392
- return isFocused();
393
- },
394
- get isEditable() {
395
- return isEditable();
396
- },
397
- get isPlaceholder() {
398
- return segment().isPlaceholder;
399
- },
400
- get text() {
401
- return text();
402
- },
403
- get isHovered() {
404
- return isHovered();
405
- },
406
- get isFocusVisible() {
407
- return isFocusVisible();
408
- },
409
471
  };
410
472
  }
411
-
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
- }
468
- }
469
- return digits;
470
- }