@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,18 +1,33 @@
1
1
  /**
2
2
  * createDatePicker hook for Solidaria
3
3
  *
4
- * Provides the behavior and accessibility implementation for a date picker component.
5
- * Based on @react-aria/datepicker useDatePicker
4
+ * Provides the behavior and accessibility implementation for a date picker
5
+ * component. Faithful port of @react-aria/datepicker `useDatePicker`.
6
+ *
7
+ * The composed picker does NOT re-implement the segmented field; it hands its
8
+ * `fieldProps` (stamped `[roleSymbol]="presentation"`) to `createDateField`,
9
+ * which is what actually names the segments and publishes the value description
10
+ * through the shared `hookData` WeakMap. Here we only provide:
11
+ * - `groupProps`: a ROLELESS wrapper carrying the outer arrow-navigation
12
+ * (`createDatePickerGroup` with arrow-nav ENABLED — the inner presentation
13
+ * field disables its own and lets the key event bubble up to this handler).
14
+ * - `fieldProps`: the presentation marker + labelledby/describedby + value model.
15
+ * - `buttonProps` / `dialogProps` / `calendarProps` for the trigger + popover.
6
16
  */
7
17
 
8
18
  import { createMemo } from "solid-js";
9
19
  import { createId } from "../ssr";
10
- import { createLabel } from "../label/createLabel";
20
+ import { createField } from "../label/createField";
21
+ import { createDescription } from "../utils/createDescription";
22
+ import { createFocusManager } from "../focus/FocusScope";
23
+ import { createStringFormatter } from "../i18n";
11
24
  import { access, type MaybeAccessor } from "../utils/reactivity";
12
25
  import { mergeProps } from "../utils/mergeProps";
13
26
  import { useLocale } from "../i18n";
14
27
  import { createPress } from "../interactions/createPress";
15
- import { DateFormatter, getLocalTimeZone } from "@internationalized/date";
28
+ import { datePickerStrings } from "./intl";
29
+ import { createDatePickerGroup } from "./createDatePickerGroup";
30
+ import { roleSymbol } from "./createDateField";
16
31
  import type { DateFieldState, CalendarState } from "@proyecto-viviana/solid-stately";
17
32
 
18
33
  export interface AriaDatePickerProps {
@@ -62,10 +77,16 @@ export interface AriaDatePickerProps {
62
77
  onFocus?: (e: FocusEvent) => void;
63
78
  /** Callback when blurred. */
64
79
  onBlur?: (e: FocusEvent) => void;
80
+ /** Callback for key down (forwarded to the field when the popover is closed). */
81
+ onKeyDown?: (e: KeyboardEvent) => void;
82
+ /** Callback for key up (forwarded to the field when the popover is closed). */
83
+ onKeyUp?: (e: KeyboardEvent) => void;
65
84
  /** The name attribute for form submission. */
66
85
  name?: string;
67
86
  /** The form attribute. */
68
87
  form?: string;
88
+ /** Whether HTML form validation is used. */
89
+ validationBehavior?: "aria" | "native";
69
90
  /** Auto focus the field. */
70
91
  autoFocus?: boolean;
71
92
  /** The placeholder value. */
@@ -98,6 +119,21 @@ export interface DatePickerAria {
98
119
  fieldProps: Record<string, unknown>;
99
120
  /** Props for the button that opens the calendar. */
100
121
  buttonProps: Record<string, unknown>;
122
+ /**
123
+ * Whether the trigger button is currently pressed. Upstream RAC renders the
124
+ * trigger as a `<Button>` whose own `usePress` drives its `data-pressed`
125
+ * paint state; the port owns the press here (see `buttonPress`), so it
126
+ * surfaces the same signal for the button element to emit `data-pressed`.
127
+ */
128
+ isButtonPressed: () => boolean;
129
+ /**
130
+ * Whether the trigger button is disabled. Upstream RAC's `buttonProps`
131
+ * carries `isDisabled: props.isDisabled || props.isReadOnly` (a read-only
132
+ * picker can't open its calendar), which drives the `<Button>`'s disabled
133
+ * paint. The port's `buttonProps` only reflects `aria-disabled`, so it
134
+ * surfaces the same signal here for the button's render `isDisabled`.
135
+ */
136
+ isButtonDisabled: () => boolean;
101
137
  /** Props for the calendar dialog. */
102
138
  dialogProps: Record<string, unknown>;
103
139
  /** Props for the calendar. */
@@ -116,9 +152,6 @@ export interface DatePickerAria {
116
152
  focusManager: {
117
153
  focusFirst: () => void;
118
154
  focusLast: () => void;
119
- } & {
120
- /** @internal Wires the actual focus implementations from the component layer */
121
- _register?: (first: () => void, last: () => void) => void;
122
155
  };
123
156
  }
124
157
 
@@ -130,90 +163,106 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
130
163
  state: T,
131
164
  overlayState: DatePickerState,
132
165
  _calendarState?: C,
166
+ ref: () => HTMLElement | null = () => null,
133
167
  ): DatePickerAria {
134
168
  const locale = useLocale();
135
169
  const getProps = () => access(props);
136
- const id = createId(getProps().id);
137
- const descriptionId = createId();
138
- const errorMessageId = createId();
139
170
  const dialogId = createId();
140
171
  const buttonId = createId();
141
172
  const fieldId = createId();
142
173
 
143
- // Create label handling
144
- const { labelProps, fieldProps: labelFieldProps } = createLabel({
145
- get label() {
146
- return getProps().label;
147
- },
148
- get "aria-label"() {
149
- return getProps()["aria-label"];
150
- },
151
- get "aria-labelledby"() {
152
- return getProps()["aria-labelledby"];
153
- },
154
- labelElementType: "span",
174
+ // Label + description/error-message ids, mirroring upstream `useField`.
175
+ const field = createField(() => {
176
+ const p = getProps();
177
+ const dv = state.displayValidation();
178
+ return {
179
+ id: p.id,
180
+ label: p.label,
181
+ "aria-label": p["aria-label"],
182
+ "aria-labelledby": p["aria-labelledby"],
183
+ "aria-describedby": p["aria-describedby"],
184
+ description: p.description,
185
+ labelElementType: "span",
186
+ isInvalid: p.isInvalid || dv.isInvalid,
187
+ errorMessage: p.errorMessage || dv.validationErrors,
188
+ };
155
189
  });
156
190
 
157
- // Build aria-describedby
158
- const getAriaDescribedBy = () => {
159
- const p = getProps();
160
- const ids: string[] = [];
161
- if (p["aria-describedby"]) {
162
- ids.push(p["aria-describedby"]);
163
- }
164
- if (valueDescription()) {
165
- ids.push(valueDescriptionId);
166
- }
167
- if (p.description) {
168
- ids.push(descriptionId);
169
- }
170
- if ((p.isInvalid || state.isInvalid()) && p.errorMessage) {
171
- ids.push(errorMessageId);
172
- }
173
- return ids.length > 0 ? ids.join(" ") : undefined;
191
+ // labelledBy = the field label id (or the field id when there is no label),
192
+ // reused by the button and dialog. Mirrors useDatePicker.
193
+ const labelledBy = (): string | undefined => {
194
+ const fp = field.fieldProps as Record<string, string | undefined>;
195
+ return fp["aria-labelledby"] || fp.id;
174
196
  };
175
197
 
176
- // Selected date description for screen readers
177
- const valueDescriptionId = createId();
198
+ // Selected-date description for screen readers: "Selected Date: February 14, 2025".
199
+ const stringFormatter = createStringFormatter(datePickerStrings, "@react-aria/datepicker");
178
200
  const valueDescription = createMemo(() => {
179
- const v = state.value?.();
180
- if (!v) return "";
181
- const formatter = new DateFormatter(locale().locale, {
182
- year: "numeric",
183
- month: "long",
184
- day: "numeric",
185
- });
186
- return formatter.format(v.toDate(getLocalTimeZone()));
201
+ if (!state.value?.()) {
202
+ return "";
203
+ }
204
+ const date = state.formatValue({ month: "long" });
205
+ return date ? stringFormatter().format("selectedDateDescription", { date }) : "";
187
206
  });
207
+ const descProps = createDescription(valueDescription);
188
208
 
189
- // Group props
190
- const groupProps = createMemo(() => {
191
- const p = getProps();
192
- const isInvalid = p.isInvalid || state.isInvalid();
193
- const describedBy = getAriaDescribedBy();
194
- const labelField = labelFieldProps as Record<string, unknown>;
209
+ // The picker's own describedby = value description + the field's describedby
210
+ // (which already folds in the visible description / error message ids).
211
+ const ariaDescribedBy = (): string | undefined => {
212
+ const fp = field.fieldProps as Record<string, string | undefined>;
213
+ return (
214
+ [descProps["aria-describedby"], fp["aria-describedby"]].filter(Boolean).join(" ") || undefined
215
+ );
216
+ };
195
217
 
196
- return {
197
- id,
198
- role: "group",
199
- "aria-label": labelField["aria-label"] || undefined,
200
- "aria-labelledby": labelField["aria-labelledby"] || undefined,
201
- "aria-disabled": p.isDisabled || state.isDisabled() || undefined,
202
- "aria-readonly": p.isReadOnly || state.isReadOnly() || undefined,
203
- "aria-required": p.isRequired || state.isRequired() || undefined,
204
- "aria-invalid": isInvalid || undefined,
205
- "aria-describedby": describedBy,
206
- };
207
- });
218
+ // FieldGroup props. Mirrors RAC `useDatePicker`, whose `groupProps.role` is
219
+ // 'group' (useDatePicker.mjs) — the field label (`aria-labelledby`), describedby
220
+ // (value description + help/error), `aria-disabled`, and the arrow-navigation /
221
+ // press layer all live on this shell. The styled S2 layer OVERRIDES this to
222
+ // role="presentation" at `DatePickerFieldGroup` (S2 seeds its FieldGroup's Group
223
+ // with role="presentation"); keeping the hook faithful to 'group' means a bare
224
+ // RAC-style consumer gets the correct group semantics. The OUTER root stays
225
+ // bare/roleless — putting the describedby on the roleless root would surface a
226
+ // spurious described node in the AX tree that the oracle (bare root) does not
227
+ // have, so it lands on this shell instead. The nested DateInput group is
228
+ // role="presentation" and carries NO aria (createDateField's presentation branch
229
+ // drops it) and lets ArrowLeft/Right bubble up here.
230
+ const outerGroup = createDatePickerGroup(
231
+ {
232
+ setOpen: (isOpen: boolean) => (isOpen ? overlayState.open() : overlayState.close()),
233
+ },
234
+ ref,
235
+ false,
236
+ );
237
+
238
+ const groupProps = createMemo(() =>
239
+ mergeProps(outerGroup(), {
240
+ role: "group" as const,
241
+ "aria-disabled": getProps().isDisabled || undefined,
242
+ "aria-labelledby": labelledBy(),
243
+ "aria-describedby": ariaDescribedBy(),
244
+ onKeyDown(e: KeyboardEvent) {
245
+ if (!overlayState.isOpen) {
246
+ getProps().onKeyDown?.(e);
247
+ }
248
+ },
249
+ onKeyUp(e: KeyboardEvent) {
250
+ if (!overlayState.isOpen) {
251
+ getProps().onKeyUp?.(e);
252
+ }
253
+ },
254
+ }),
255
+ );
208
256
 
209
- // Field props - applied to DateInput container
257
+ // Field props — handed to createDateField, which turns them into the segmented
258
+ // spinbutton group (role="presentation" here) and names the segments.
210
259
  const fieldProps = createMemo(() => {
211
260
  const p = getProps();
212
- const describedBy = getAriaDescribedBy();
213
-
214
- return {
261
+ return mergeProps(field.fieldProps as Record<string, unknown>, {
215
262
  id: fieldId,
216
- "aria-describedby": describedBy,
263
+ [roleSymbol]: "presentation",
264
+ "aria-labelledby": labelledBy(),
265
+ "aria-describedby": ariaDescribedBy(),
217
266
  value: state.value?.(),
218
267
  defaultValue: state.defaultValue,
219
268
  onChange: (value: unknown) => {
@@ -227,17 +276,23 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
227
276
  isDisabled: p.isDisabled || state.isDisabled(),
228
277
  isReadOnly: p.isReadOnly || state.isReadOnly(),
229
278
  isRequired: p.isRequired || state.isRequired(),
279
+ validationBehavior: p.validationBehavior,
230
280
  autoFocus: p.autoFocus,
231
281
  name: p.name,
232
282
  form: p.form,
233
- };
283
+ });
234
284
  });
235
285
 
236
- // Button props with createPress for keyboard/mouse/touch activation
286
+ // Trigger button. Disabled when the picker is disabled OR read-only (upstream:
287
+ // `isDisabled: props.isDisabled || props.isReadOnly`).
288
+ const isButtonDisabled = () => {
289
+ const p = getProps();
290
+ return p.isDisabled || state.isDisabled() || p.isReadOnly || state.isReadOnly();
291
+ };
292
+
237
293
  const buttonPress = createPress({
238
294
  get isDisabled() {
239
- const p = getProps();
240
- return p.isDisabled || state.isDisabled();
295
+ return isButtonDisabled();
241
296
  },
242
297
  onPress: () => {
243
298
  overlayState.open();
@@ -246,41 +301,27 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
246
301
 
247
302
  const buttonProps = createMemo(() => {
248
303
  const p = getProps();
249
- const isDisabled = p.isDisabled || state.isDisabled();
250
- const defaults = getDatePickerLabelDefaults(locale().locale);
251
- const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
252
- const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
253
- const describedBy = getAriaDescribedBy();
254
-
255
304
  return mergeProps(buttonPress.pressProps as Record<string, unknown>, {
256
305
  id: buttonId,
257
306
  type: "button" as const,
258
- "aria-label": p.buttonAriaLabel ?? defaults.button,
259
- "aria-labelledby": labelledBy,
260
307
  "aria-haspopup": "dialog" as const,
308
+ "aria-label": p.buttonAriaLabel ?? stringFormatter().format("calendar"),
309
+ "aria-labelledby": `${buttonId} ${labelledBy()}`,
310
+ "aria-describedby": ariaDescribedBy(),
261
311
  "aria-expanded": overlayState.isOpen,
262
- "aria-controls": overlayState.isOpen ? dialogId : undefined,
263
- "aria-describedby": describedBy,
264
- "aria-disabled": isDisabled || undefined,
312
+ "aria-disabled": isButtonDisabled() || undefined,
265
313
  tabIndex: 0,
266
314
  });
267
315
  });
268
316
 
269
- // Dialog props
270
- const dialogProps = createMemo(() => {
271
- const p = getProps();
272
- const defaults = getDatePickerLabelDefaults(locale().locale);
273
- const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
274
- const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
275
-
276
- return {
277
- id: dialogId,
278
- role: "dialog",
279
- "aria-modal": true,
280
- "aria-labelledby": labelledBy,
281
- "aria-label": p.dialogAriaLabel ?? defaults.dialog,
282
- };
283
- });
317
+ // Dialog props. Upstream is only `{id, 'aria-labelledby'}`; the port keeps
318
+ // `role="dialog"` because DatePickerContent spreads these props onto the popover
319
+ // container and this is the only role source there (RAC's Dialog would add it).
320
+ const dialogProps = createMemo(() => ({
321
+ id: dialogId,
322
+ role: "dialog" as const,
323
+ "aria-labelledby": `${buttonId} ${labelledBy()}`,
324
+ }));
284
325
 
285
326
  // Calendar props
286
327
  const calendarProps = createMemo(() => {
@@ -315,48 +356,21 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
315
356
  };
316
357
  });
317
358
 
318
- // Description props for the description element
319
- const descriptionProps = createMemo(() => ({
320
- id: descriptionId,
321
- }));
322
-
323
- // Value description element props
324
- const valueDescriptionProps = createMemo(() => ({
325
- id: valueDescriptionId,
326
- "aria-hidden": true,
327
- }));
328
-
329
- // Error message props
330
- const errorMessageProps = createMemo(() => ({
331
- id: errorMessageId,
332
- role: "alert",
359
+ // Label click focuses the first segment.
360
+ const labelFocusManager = createFocusManager(ref);
361
+ const enhancedLabelProps = createMemo(() => ({
362
+ ...(field.labelProps as Record<string, unknown>),
363
+ onClick: () => {
364
+ labelFocusManager.focusFirst();
365
+ },
333
366
  }));
334
367
 
335
- // Label click focuses first segment — component layer wires the actual ref
336
- let focusFirstSegment: (() => void) | undefined;
337
- let focusLastSegment: (() => void) | undefined;
338
-
339
- const enhancedLabelProps = createMemo(() => {
340
- return {
341
- ...labelProps,
342
- onClick: () => {
343
- focusFirstSegment?.();
344
- },
345
- };
346
- });
347
-
348
368
  const isInvalid = createMemo(() => {
349
369
  const p = getProps();
350
370
  return p.isInvalid || state.isInvalid();
351
371
  });
352
372
 
353
- const validationErrors = createMemo(() => {
354
- const p = getProps();
355
- if (p.isInvalid && typeof p.errorMessage === "string") {
356
- return [p.errorMessage];
357
- }
358
- return [];
359
- });
373
+ const validationErrors = createMemo(() => state.displayValidation().validationErrors);
360
374
 
361
375
  const validationDetails = createMemo(() => {
362
376
  const p = getProps();
@@ -381,6 +395,8 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
381
395
  get buttonProps() {
382
396
  return buttonProps();
383
397
  },
398
+ isButtonPressed: () => buttonPress.isPressed(),
399
+ isButtonDisabled: () => isButtonDisabled(),
384
400
  get dialogProps() {
385
401
  return dialogProps();
386
402
  },
@@ -388,10 +404,10 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
388
404
  return calendarProps();
389
405
  },
390
406
  get descriptionProps() {
391
- return descriptionProps();
407
+ return field.descriptionProps as Record<string, unknown>;
392
408
  },
393
409
  get errorMessageProps() {
394
- return errorMessageProps();
410
+ return field.errorMessageProps as Record<string, unknown>;
395
411
  },
396
412
  get isInvalid() {
397
413
  return isInvalid();
@@ -403,13 +419,8 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
403
419
  return validationDetails();
404
420
  },
405
421
  focusManager: {
406
- focusFirst: () => focusFirstSegment?.(),
407
- focusLast: () => focusLastSegment?.(),
408
- /** @internal Wires the actual focus implementations from the component layer */
409
- _register: (first: () => void, last: () => void) => {
410
- focusFirstSegment = first;
411
- focusLastSegment = last;
412
- },
422
+ focusFirst: () => labelFocusManager.focusFirst(),
423
+ focusLast: () => labelFocusManager.focusLast(),
413
424
  },
414
425
  };
415
426
  }
@@ -1,149 +1,155 @@
1
1
  /**
2
2
  * createDatePickerGroup hook for Solidaria
3
3
  *
4
- * Provides keyboard and pointer behavior for the date picker field group.
5
- * Based on @react-aria/datepicker useDatePickerGroup
4
+ * Provides keyboard (arrow navigation between segments) and pointer (focus the
5
+ * last non-placeholder segment on press) behavior for the date field group.
6
+ * Faithful port of @react-aria/datepicker `useDatePickerGroup`: LTR arrow
7
+ * navigation goes through the focus manager, RTL uses geometric segment lookup,
8
+ * and alt+ArrowDown/Up opens the popover only when the state exposes `setOpen`
9
+ * (i.e. a date picker, never a standalone field).
6
10
  */
7
11
 
8
- import { createMemo } from "solid-js";
9
- import { type MaybeAccessor, access } from "../utils/reactivity";
12
+ import { createMemo, type Accessor } from "solid-js";
10
13
  import { mergeProps } from "../utils/mergeProps";
11
14
  import { useLocale } from "../i18n";
12
15
  import { createPress } from "../interactions/createPress";
16
+ import { createFocusManager } from "../focus/FocusScope";
17
+ import { getFocusableTreeWalker } from "../utils/dom";
13
18
  import { nodeContains, getEventTarget } from "../utils";
14
- import { focusSafely } from "../utils/focus";
15
19
 
16
- export interface AriaDatePickerGroupProps {
17
- isDisabled?: boolean;
18
- }
19
-
20
- export interface DatePickerGroupAria {
21
- groupProps: Record<string, unknown>;
20
+ export interface DatePickerGroupState {
21
+ setOpen?: (isOpen: boolean) => void;
22
22
  }
23
23
 
24
+ /**
25
+ * Provides keyboard and pointer behavior for the date field/picker segment group.
26
+ */
24
27
  export function createDatePickerGroup(
25
- props: MaybeAccessor<AriaDatePickerGroupProps>,
26
- state: { setOpen: (isOpen: boolean) => void; isOpen: boolean; isDisabled: () => boolean },
28
+ state: DatePickerGroupState,
27
29
  ref: () => HTMLElement | null,
28
30
  disableArrowNavigation?: boolean,
29
- ): DatePickerGroupAria {
30
- const locale = useLocale();
31
- const resolvedProps = createMemo(() => access(props));
31
+ ): Accessor<Record<string, unknown>> {
32
+ const localeInfo = useLocale();
33
+ const focusManager = createFocusManager(ref);
34
+
35
+ // Geometric segment lookup for RTL, where DOM order does not match visual order.
36
+ const findNextSegment = (group: HTMLElement, fromX: number, direction: number): HTMLElement | null => {
37
+ const walker = getFocusableTreeWalker(group, { tabbable: true });
38
+ let node = walker.nextNode() as HTMLElement | null;
39
+ let closest: HTMLElement | null = null;
40
+ let closestDistance = Infinity;
41
+ while (node) {
42
+ const x = node.getBoundingClientRect().left;
43
+ const distance = x - fromX;
44
+ const absoluteDistance = Math.abs(distance);
45
+ if (Math.sign(distance) === direction && absoluteDistance < closestDistance) {
46
+ closest = node;
47
+ closestDistance = absoluteDistance;
48
+ }
49
+ node = walker.nextNode() as HTMLElement | null;
50
+ }
51
+ return closest;
52
+ };
32
53
 
33
54
  const onKeyDown = (e: KeyboardEvent) => {
34
55
  if (!nodeContains(e.currentTarget as Node | null, getEventTarget(e) as Node | null)) {
35
56
  return;
36
57
  }
37
-
38
- // Open the popover on alt + arrow down/up
39
- if (e.altKey && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
58
+ // Open the popover on alt + arrow down (date pickers only).
59
+ if (e.altKey && (e.key === "ArrowDown" || e.key === "ArrowUp") && "setOpen" in state) {
40
60
  e.preventDefault();
41
61
  e.stopPropagation();
42
- state.setOpen(true);
43
- return;
62
+ state.setOpen?.(true);
44
63
  }
45
-
46
- if (disableArrowNavigation) return;
47
-
48
- const root = ref();
49
- if (!root) return;
50
-
51
- const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
52
- if (segments.length === 0) return;
53
-
54
- const activeElement = root.ownerDocument.activeElement;
55
- let currentIndex = -1;
56
- if (activeElement) {
57
- currentIndex = segments.indexOf(activeElement as HTMLElement);
64
+ if (disableArrowNavigation) {
65
+ return;
58
66
  }
59
-
60
- const direction = locale().direction;
61
-
67
+ const direction = localeInfo().direction;
62
68
  switch (e.key) {
63
69
  case "ArrowLeft": {
64
70
  e.preventDefault();
65
71
  e.stopPropagation();
72
+ const root = ref();
66
73
  if (direction === "rtl") {
67
- // geometric fallback: in RTL, left arrow moves toward the end (next)
68
- const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
69
- if (nextIndex < segments.length) {
70
- focusSafely(segments[nextIndex]);
74
+ if (root) {
75
+ const target = getEventTarget(e) as HTMLElement;
76
+ const prev = findNextSegment(root, target.getBoundingClientRect().left, -1);
77
+ prev?.focus();
71
78
  }
72
79
  } else {
73
- const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
74
- if (prevIndex >= 0) {
75
- focusSafely(segments[prevIndex]);
76
- }
80
+ focusManager.focusPrevious();
77
81
  }
78
82
  break;
79
83
  }
80
84
  case "ArrowRight": {
81
85
  e.preventDefault();
82
86
  e.stopPropagation();
87
+ const root = ref();
83
88
  if (direction === "rtl") {
84
- // geometric fallback: in RTL, right arrow moves toward the start (previous)
85
- const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
86
- if (prevIndex >= 0) {
87
- focusSafely(segments[prevIndex]);
89
+ if (root) {
90
+ const target = getEventTarget(e) as HTMLElement;
91
+ const next = findNextSegment(root, target.getBoundingClientRect().left, 1);
92
+ next?.focus();
88
93
  }
89
94
  } else {
90
- const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
91
- if (nextIndex < segments.length) {
92
- focusSafely(segments[nextIndex]);
93
- }
95
+ focusManager.focusNext();
94
96
  }
95
97
  break;
96
98
  }
97
99
  }
98
100
  };
99
101
 
100
- const focusLast = (event?: Event) => {
102
+ // Focus the last non-placeholder segment on press within the field.
103
+ const focusLast = () => {
101
104
  const root = ref();
102
- if (!root) return;
103
-
104
- const target = event ? getEventTarget(event) : null;
105
-
106
- const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
107
- if (segments.length === 0) return;
108
-
109
- let startIndex = segments.length - 1;
105
+ if (!root) {
106
+ return;
107
+ }
108
+ // Try to find the segment prior to the element that was clicked on.
109
+ let target = (typeof window !== "undefined" ? (window.event as Event | undefined)?.target : null) as
110
+ | HTMLElement
111
+ | null;
112
+ const walker = getFocusableTreeWalker(root, { tabbable: true });
110
113
  if (target) {
111
- const targetIndex = segments.indexOf(target as HTMLElement);
112
- if (targetIndex >= 0) {
113
- startIndex = targetIndex;
114
- }
114
+ walker.currentNode = target;
115
+ target = walker.previousNode() as HTMLElement | null;
115
116
  }
116
-
117
- for (let i = startIndex; i >= 0; i--) {
118
- const segment = segments[i];
119
- if (segment.getAttribute("data-placeholder") !== "true") {
120
- focusSafely(segment);
121
- return;
117
+ // If no target found, find the last element from the end.
118
+ if (!target) {
119
+ let last: Node | null;
120
+ do {
121
+ last = walker.lastChild();
122
+ if (last) {
123
+ target = last as HTMLElement;
124
+ }
125
+ } while (last);
126
+ }
127
+ // Now go backwards until we find an element that is not a placeholder.
128
+ while (target?.hasAttribute("data-placeholder")) {
129
+ const prev = walker.previousNode() as HTMLElement | null;
130
+ if (prev && prev.hasAttribute("data-placeholder")) {
131
+ target = prev;
132
+ } else {
133
+ break;
122
134
  }
123
135
  }
136
+ target?.focus();
124
137
  };
125
138
 
126
139
  const { pressProps } = createPress({
127
- isDisabled: () => resolvedProps().isDisabled || state.isDisabled(),
128
140
  preventFocusOnPress: true,
129
141
  allowTextSelectionOnPress: true,
130
142
  onPressStart(e) {
131
143
  if (e.pointerType === "mouse") {
132
- focusLast(e as unknown as Event);
144
+ focusLast();
133
145
  }
134
146
  },
135
147
  onPress(e) {
136
148
  if (e.pointerType === "touch" || e.pointerType === "pen") {
137
- focusLast(e as unknown as Event);
149
+ focusLast();
138
150
  }
139
151
  },
140
152
  });
141
153
 
142
- return {
143
- get groupProps() {
144
- return mergeProps(pressProps, {
145
- onKeyDown,
146
- });
147
- },
148
- };
154
+ return createMemo(() => mergeProps(pressProps, { onKeyDown }));
149
155
  }