@proyecto-viviana/solidaria 0.4.2 → 0.6.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1377) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/dist/_chunk/DragManager.js +71 -25
  4. package/dist/_chunk/DragManager.js.map +1 -1
  5. package/dist/_chunk/DragManager.jsx +71 -25
  6. package/dist/_chunk/DragManager.jsx.map +1 -1
  7. package/dist/_chunk/FocusScope.js +281 -66
  8. package/dist/_chunk/FocusScope.js.map +1 -1
  9. package/dist/_chunk/FocusScope.jsx +274 -55
  10. package/dist/_chunk/FocusScope.jsx.map +1 -1
  11. package/dist/_chunk/actiongroup.js +43 -19
  12. package/dist/_chunk/actiongroup.js.map +1 -1
  13. package/dist/_chunk/actiongroup.jsx +43 -19
  14. package/dist/_chunk/actiongroup.jsx.map +1 -1
  15. package/dist/_chunk/announce.js +19 -6
  16. package/dist/_chunk/announce.js.map +1 -1
  17. package/dist/_chunk/announce.jsx +19 -6
  18. package/dist/_chunk/announce.jsx.map +1 -1
  19. package/dist/_chunk/ariaHideOutside.js +212 -10
  20. package/dist/_chunk/ariaHideOutside.js.map +1 -1
  21. package/dist/_chunk/ariaHideOutside.jsx +212 -10
  22. package/dist/_chunk/ariaHideOutside.jsx.map +1 -1
  23. package/dist/_chunk/autocomplete.js +26 -7
  24. package/dist/_chunk/autocomplete.js.map +1 -1
  25. package/dist/_chunk/autocomplete.jsx +26 -7
  26. package/dist/_chunk/autocomplete.jsx.map +1 -1
  27. package/dist/_chunk/breadcrumbs.js +17 -2
  28. package/dist/_chunk/breadcrumbs.js.map +1 -1
  29. package/dist/_chunk/breadcrumbs.jsx +17 -2
  30. package/dist/_chunk/breadcrumbs.jsx.map +1 -1
  31. package/dist/_chunk/button.js +53 -20
  32. package/dist/_chunk/button.js.map +1 -1
  33. package/dist/_chunk/button.jsx +53 -20
  34. package/dist/_chunk/button.jsx.map +1 -1
  35. package/dist/_chunk/calendar.js +341 -56
  36. package/dist/_chunk/calendar.js.map +1 -1
  37. package/dist/_chunk/calendar.jsx +341 -56
  38. package/dist/_chunk/calendar.jsx.map +1 -1
  39. package/dist/_chunk/checkbox.js +69 -26
  40. package/dist/_chunk/checkbox.js.map +1 -1
  41. package/dist/_chunk/checkbox.jsx +69 -26
  42. package/dist/_chunk/checkbox.jsx.map +1 -1
  43. package/dist/_chunk/color.js +307 -48
  44. package/dist/_chunk/color.js.map +1 -1
  45. package/dist/_chunk/color.jsx +307 -48
  46. package/dist/_chunk/color.jsx.map +1 -1
  47. package/dist/_chunk/combobox.js +193 -103
  48. package/dist/_chunk/combobox.js.map +1 -1
  49. package/dist/_chunk/combobox.jsx +193 -103
  50. package/dist/_chunk/combobox.jsx.map +1 -1
  51. package/dist/_chunk/constants.js +12 -0
  52. package/dist/_chunk/constants.js.map +1 -1
  53. package/dist/_chunk/constants.jsx +12 -0
  54. package/dist/_chunk/constants.jsx.map +1 -1
  55. package/dist/_chunk/createCollator.js +12 -0
  56. package/dist/_chunk/createCollator.js.map +1 -1
  57. package/dist/_chunk/createCollator.jsx +12 -0
  58. package/dist/_chunk/createCollator.jsx.map +1 -1
  59. package/dist/_chunk/createCollectionRowInteraction.js +50 -13
  60. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -1
  61. package/dist/_chunk/createCollectionRowInteraction.jsx +50 -13
  62. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -1
  63. package/dist/_chunk/createField.js +35 -25
  64. package/dist/_chunk/createField.js.map +1 -1
  65. package/dist/_chunk/createField.jsx +35 -25
  66. package/dist/_chunk/createField.jsx.map +1 -1
  67. package/dist/_chunk/createFocus.js +18 -5
  68. package/dist/_chunk/createFocus.js.map +1 -1
  69. package/dist/_chunk/createFocus.jsx +18 -5
  70. package/dist/_chunk/createFocus.jsx.map +1 -1
  71. package/dist/_chunk/createFocusRing.js +16 -7
  72. package/dist/_chunk/createFocusRing.js.map +1 -1
  73. package/dist/_chunk/createFocusRing.jsx +16 -7
  74. package/dist/_chunk/createFocusRing.jsx.map +1 -1
  75. package/dist/_chunk/createFocusWithin.js +16 -4
  76. package/dist/_chunk/createFocusWithin.js.map +1 -1
  77. package/dist/_chunk/createFocusWithin.jsx +16 -4
  78. package/dist/_chunk/createFocusWithin.jsx.map +1 -1
  79. package/dist/_chunk/createFocusable.js +39 -53
  80. package/dist/_chunk/createFocusable.js.map +1 -1
  81. package/dist/_chunk/createFocusable.jsx +39 -53
  82. package/dist/_chunk/createFocusable.jsx.map +1 -1
  83. package/dist/_chunk/createFormReset.js +24 -12
  84. package/dist/_chunk/createFormReset.js.map +1 -1
  85. package/dist/_chunk/createFormReset.jsx +24 -12
  86. package/dist/_chunk/createFormReset.jsx.map +1 -1
  87. package/dist/_chunk/createFormValidation.js +41 -17
  88. package/dist/_chunk/createFormValidation.js.map +1 -1
  89. package/dist/_chunk/createFormValidation.jsx +41 -17
  90. package/dist/_chunk/createFormValidation.jsx.map +1 -1
  91. package/dist/_chunk/createHover.js +56 -42
  92. package/dist/_chunk/createHover.js.map +1 -1
  93. package/dist/_chunk/createHover.jsx +56 -42
  94. package/dist/_chunk/createHover.jsx.map +1 -1
  95. package/dist/_chunk/createKeyboard.js +205 -0
  96. package/dist/_chunk/createKeyboard.js.map +1 -0
  97. package/dist/_chunk/createKeyboard.jsx +205 -0
  98. package/dist/_chunk/createKeyboard.jsx.map +1 -0
  99. package/dist/_chunk/createLabel.js +17 -4
  100. package/dist/_chunk/createLabel.js.map +1 -1
  101. package/dist/_chunk/createLabel.jsx +17 -4
  102. package/dist/_chunk/createLabel.jsx.map +1 -1
  103. package/dist/_chunk/createLabels.js +14 -2
  104. package/dist/_chunk/createLabels.js.map +1 -1
  105. package/dist/_chunk/createLabels.jsx +14 -2
  106. package/dist/_chunk/createLabels.jsx.map +1 -1
  107. package/dist/_chunk/createLandmark.js +19 -3
  108. package/dist/_chunk/createLandmark.js.map +1 -1
  109. package/dist/_chunk/createLandmark.jsx +19 -3
  110. package/dist/_chunk/createLandmark.jsx.map +1 -1
  111. package/dist/_chunk/createLongPress.js +105 -0
  112. package/dist/_chunk/createLongPress.js.map +1 -0
  113. package/dist/_chunk/createLongPress.jsx +105 -0
  114. package/dist/_chunk/createLongPress.jsx.map +1 -0
  115. package/dist/_chunk/createOverlay.js +220 -111
  116. package/dist/_chunk/createOverlay.js.map +1 -1
  117. package/dist/_chunk/createOverlay.jsx +220 -111
  118. package/dist/_chunk/createOverlay.jsx.map +1 -1
  119. package/dist/_chunk/createOverlayTrigger.js +58 -0
  120. package/dist/_chunk/createOverlayTrigger.js.map +1 -0
  121. package/dist/_chunk/createOverlayTrigger.jsx +58 -0
  122. package/dist/_chunk/createOverlayTrigger.jsx.map +1 -0
  123. package/dist/_chunk/createPress.js +38 -28
  124. package/dist/_chunk/createPress.js.map +1 -1
  125. package/dist/_chunk/createPress.jsx +38 -28
  126. package/dist/_chunk/createPress.jsx.map +1 -1
  127. package/dist/_chunk/createProgressBar.js +17 -4
  128. package/dist/_chunk/createProgressBar.js.map +1 -1
  129. package/dist/_chunk/createProgressBar.jsx +17 -4
  130. package/dist/_chunk/createProgressBar.jsx.map +1 -1
  131. package/dist/_chunk/createSelectableItem.js +58 -20
  132. package/dist/_chunk/createSelectableItem.js.map +1 -1
  133. package/dist/_chunk/createSelectableItem.jsx +58 -20
  134. package/dist/_chunk/createSelectableItem.jsx.map +1 -1
  135. package/dist/_chunk/createSelectableList.js +776 -0
  136. package/dist/_chunk/createSelectableList.js.map +1 -0
  137. package/dist/_chunk/createSelectableList.jsx +776 -0
  138. package/dist/_chunk/createSelectableList.jsx.map +1 -0
  139. package/dist/_chunk/createStringFormatter.js +350 -5
  140. package/dist/_chunk/createStringFormatter.js.map +1 -1
  141. package/dist/_chunk/createStringFormatter.jsx +350 -5
  142. package/dist/_chunk/createStringFormatter.jsx.map +1 -1
  143. package/dist/_chunk/createToggle.js +68 -19
  144. package/dist/_chunk/createToggle.js.map +1 -1
  145. package/dist/_chunk/createToggle.jsx +68 -19
  146. package/dist/_chunk/createToggle.jsx.map +1 -1
  147. package/dist/_chunk/createTypeSelect.js +15 -3
  148. package/dist/_chunk/createTypeSelect.js.map +1 -1
  149. package/dist/_chunk/createTypeSelect.jsx +15 -3
  150. package/dist/_chunk/createTypeSelect.jsx.map +1 -1
  151. package/dist/_chunk/{visually-hidden.js → createVisuallyHidden.js} +16 -4
  152. package/dist/_chunk/createVisuallyHidden.js.map +1 -0
  153. package/dist/_chunk/{visually-hidden.jsx → createVisuallyHidden.jsx} +16 -4
  154. package/dist/_chunk/createVisuallyHidden.jsx.map +1 -0
  155. package/dist/_chunk/datepicker.js +687 -602
  156. package/dist/_chunk/datepicker.js.map +1 -1
  157. package/dist/_chunk/datepicker.jsx +687 -602
  158. package/dist/_chunk/datepicker.jsx.map +1 -1
  159. package/dist/_chunk/dialog.js +49 -19
  160. package/dist/_chunk/dialog.js.map +1 -1
  161. package/dist/_chunk/dialog.jsx +49 -19
  162. package/dist/_chunk/dialog.jsx.map +1 -1
  163. package/dist/_chunk/disclosure.js +48 -28
  164. package/dist/_chunk/disclosure.js.map +1 -1
  165. package/dist/_chunk/disclosure.jsx +48 -28
  166. package/dist/_chunk/disclosure.jsx.map +1 -1
  167. package/dist/_chunk/dnd.js +1340 -1172
  168. package/dist/_chunk/dnd.js.map +1 -1
  169. package/dist/_chunk/dnd.jsx +1340 -1172
  170. package/dist/_chunk/dnd.jsx.map +1 -1
  171. package/dist/_chunk/dom.js +1200 -0
  172. package/dist/_chunk/dom.js.map +1 -0
  173. package/dist/_chunk/dom.jsx +1200 -0
  174. package/dist/_chunk/dom.jsx.map +1 -0
  175. package/dist/_chunk/env.js +1 -57
  176. package/dist/_chunk/env.js.map +1 -1
  177. package/dist/_chunk/env.jsx +1 -57
  178. package/dist/_chunk/env.jsx.map +1 -1
  179. package/dist/_chunk/filterDOMProps.js +32 -7
  180. package/dist/_chunk/filterDOMProps.js.map +1 -1
  181. package/dist/_chunk/filterDOMProps.jsx +32 -7
  182. package/dist/_chunk/filterDOMProps.jsx.map +1 -1
  183. package/dist/_chunk/focus.js +570 -338
  184. package/dist/_chunk/focus.js.map +1 -1
  185. package/dist/_chunk/focus.jsx +570 -338
  186. package/dist/_chunk/focus.jsx.map +1 -1
  187. package/dist/_chunk/grid.js +62 -8
  188. package/dist/_chunk/grid.js.map +1 -1
  189. package/dist/_chunk/grid.jsx +62 -8
  190. package/dist/_chunk/grid.jsx.map +1 -1
  191. package/dist/_chunk/gridlist.js +192 -53
  192. package/dist/_chunk/gridlist.js.map +1 -1
  193. package/dist/_chunk/gridlist.jsx +192 -53
  194. package/dist/_chunk/gridlist.jsx.map +1 -1
  195. package/dist/_chunk/i18n.js +68 -1
  196. package/dist/_chunk/i18n.js.map +1 -1
  197. package/dist/_chunk/i18n.jsx +68 -1
  198. package/dist/_chunk/i18n.jsx.map +1 -1
  199. package/dist/_chunk/interactions.js +38 -102
  200. package/dist/_chunk/interactions.js.map +1 -1
  201. package/dist/_chunk/interactions.jsx +38 -100
  202. package/dist/_chunk/interactions.jsx.map +1 -1
  203. package/dist/_chunk/intl.js +280 -0
  204. package/dist/_chunk/intl.js.map +1 -0
  205. package/dist/_chunk/intl.jsx +280 -0
  206. package/dist/_chunk/intl.jsx.map +1 -0
  207. package/dist/_chunk/link.js +15 -4
  208. package/dist/_chunk/link.js.map +1 -1
  209. package/dist/_chunk/link.jsx +15 -4
  210. package/dist/_chunk/link.jsx.map +1 -1
  211. package/dist/_chunk/listbox.js +99 -175
  212. package/dist/_chunk/listbox.js.map +1 -1
  213. package/dist/_chunk/listbox.jsx +99 -175
  214. package/dist/_chunk/listbox.jsx.map +1 -1
  215. package/dist/_chunk/locale.js +58 -12
  216. package/dist/_chunk/locale.js.map +1 -1
  217. package/dist/_chunk/locale.jsx +57 -11
  218. package/dist/_chunk/locale.jsx.map +1 -1
  219. package/dist/_chunk/menu.js +298 -57
  220. package/dist/_chunk/menu.js.map +1 -1
  221. package/dist/_chunk/menu.jsx +298 -57
  222. package/dist/_chunk/menu.jsx.map +1 -1
  223. package/dist/_chunk/mergeProps.js +216 -0
  224. package/dist/_chunk/mergeProps.js.map +1 -0
  225. package/dist/_chunk/mergeProps.jsx +216 -0
  226. package/dist/_chunk/mergeProps.jsx.map +1 -0
  227. package/dist/_chunk/meter.js +16 -4
  228. package/dist/_chunk/meter.js.map +1 -1
  229. package/dist/_chunk/meter.jsx +16 -4
  230. package/dist/_chunk/meter.jsx.map +1 -1
  231. package/dist/_chunk/numberfield.js +167 -22
  232. package/dist/_chunk/numberfield.js.map +1 -1
  233. package/dist/_chunk/numberfield.jsx +167 -22
  234. package/dist/_chunk/numberfield.jsx.map +1 -1
  235. package/dist/_chunk/overlays.js +87 -74
  236. package/dist/_chunk/overlays.js.map +1 -1
  237. package/dist/_chunk/overlays.jsx +71 -57
  238. package/dist/_chunk/overlays.jsx.map +1 -1
  239. package/dist/_chunk/owner.js +23 -0
  240. package/dist/_chunk/owner.js.map +1 -0
  241. package/dist/_chunk/owner.jsx +23 -0
  242. package/dist/_chunk/owner.jsx.map +1 -0
  243. package/dist/_chunk/popover.js +180 -42
  244. package/dist/_chunk/popover.js.map +1 -1
  245. package/dist/_chunk/popover.jsx +180 -42
  246. package/dist/_chunk/popover.jsx.map +1 -1
  247. package/dist/_chunk/radio.js +92 -32
  248. package/dist/_chunk/radio.js.map +1 -1
  249. package/dist/_chunk/radio.jsx +92 -32
  250. package/dist/_chunk/radio.jsx.map +1 -1
  251. package/dist/_chunk/reactivity.js.map +1 -1
  252. package/dist/_chunk/reactivity.jsx.map +1 -1
  253. package/dist/_chunk/refs.js +41 -0
  254. package/dist/_chunk/refs.js.map +1 -0
  255. package/dist/_chunk/refs.jsx +41 -0
  256. package/dist/_chunk/refs.jsx.map +1 -0
  257. package/dist/_chunk/searchfield.js +69 -3
  258. package/dist/_chunk/searchfield.js.map +1 -1
  259. package/dist/_chunk/searchfield.jsx +69 -3
  260. package/dist/_chunk/searchfield.jsx.map +1 -1
  261. package/dist/_chunk/select.js +226 -80
  262. package/dist/_chunk/select.js.map +1 -1
  263. package/dist/_chunk/select.jsx +162 -70
  264. package/dist/_chunk/select.jsx.map +1 -1
  265. package/dist/_chunk/selection.js +20 -638
  266. package/dist/_chunk/selection.js.map +1 -1
  267. package/dist/_chunk/selection.jsx +20 -638
  268. package/dist/_chunk/selection.jsx.map +1 -1
  269. package/dist/_chunk/separator.js +12 -0
  270. package/dist/_chunk/separator.js.map +1 -1
  271. package/dist/_chunk/separator.jsx +12 -0
  272. package/dist/_chunk/separator.jsx.map +1 -1
  273. package/dist/_chunk/slider.js +25 -16
  274. package/dist/_chunk/slider.js.map +1 -1
  275. package/dist/_chunk/slider.jsx +25 -16
  276. package/dist/_chunk/slider.jsx.map +1 -1
  277. package/dist/_chunk/spinbutton.js +52 -42
  278. package/dist/_chunk/spinbutton.js.map +1 -1
  279. package/dist/_chunk/spinbutton.jsx +52 -42
  280. package/dist/_chunk/spinbutton.jsx.map +1 -1
  281. package/dist/_chunk/steplist.js +14 -1
  282. package/dist/_chunk/steplist.js.map +1 -1
  283. package/dist/_chunk/steplist.jsx +14 -1
  284. package/dist/_chunk/steplist.jsx.map +1 -1
  285. package/dist/_chunk/switch.js +21 -3
  286. package/dist/_chunk/switch.js.map +1 -1
  287. package/dist/_chunk/switch.jsx +21 -3
  288. package/dist/_chunk/switch.jsx.map +1 -1
  289. package/dist/_chunk/table.js +666 -88
  290. package/dist/_chunk/table.js.map +1 -1
  291. package/dist/_chunk/table.jsx +666 -88
  292. package/dist/_chunk/table.jsx.map +1 -1
  293. package/dist/_chunk/tabs.js +115 -17
  294. package/dist/_chunk/tabs.js.map +1 -1
  295. package/dist/_chunk/tabs.jsx +115 -17
  296. package/dist/_chunk/tabs.jsx.map +1 -1
  297. package/dist/_chunk/tag.js +240 -39
  298. package/dist/_chunk/tag.js.map +1 -1
  299. package/dist/_chunk/tag.jsx +240 -39
  300. package/dist/_chunk/tag.jsx.map +1 -1
  301. package/dist/_chunk/textfield.js +83 -12
  302. package/dist/_chunk/textfield.js.map +1 -1
  303. package/dist/_chunk/textfield.jsx +83 -12
  304. package/dist/_chunk/textfield.jsx.map +1 -1
  305. package/dist/_chunk/toast.js +61 -28
  306. package/dist/_chunk/toast.js.map +1 -1
  307. package/dist/_chunk/toast.jsx +61 -28
  308. package/dist/_chunk/toast.jsx.map +1 -1
  309. package/dist/_chunk/tokenfield.js +567 -0
  310. package/dist/_chunk/tokenfield.js.map +1 -0
  311. package/dist/_chunk/tokenfield.jsx +567 -0
  312. package/dist/_chunk/tokenfield.jsx.map +1 -0
  313. package/dist/_chunk/toolbar.js +25 -8
  314. package/dist/_chunk/toolbar.js.map +1 -1
  315. package/dist/_chunk/toolbar.jsx +25 -8
  316. package/dist/_chunk/toolbar.jsx.map +1 -1
  317. package/dist/_chunk/tooltip.js +379 -6
  318. package/dist/_chunk/tooltip.js.map +1 -1
  319. package/dist/_chunk/tooltip.jsx +379 -6
  320. package/dist/_chunk/tooltip.jsx.map +1 -1
  321. package/dist/_chunk/tree.js +280 -69
  322. package/dist/_chunk/tree.js.map +1 -1
  323. package/dist/_chunk/tree.jsx +280 -69
  324. package/dist/_chunk/tree.jsx.map +1 -1
  325. package/dist/_chunk/utils.js +192 -150
  326. package/dist/_chunk/utils.js.map +1 -1
  327. package/dist/_chunk/utils.jsx +192 -150
  328. package/dist/_chunk/utils.jsx.map +1 -1
  329. package/dist/_chunk/virtualFocus.js +54 -0
  330. package/dist/_chunk/virtualFocus.js.map +1 -0
  331. package/dist/_chunk/virtualFocus.jsx +54 -0
  332. package/dist/_chunk/virtualFocus.jsx.map +1 -0
  333. package/dist/_chunk/virtualizer.js +202 -0
  334. package/dist/_chunk/virtualizer.js.map +1 -0
  335. package/dist/_chunk/virtualizer.jsx +202 -0
  336. package/dist/_chunk/virtualizer.jsx.map +1 -0
  337. package/dist/actiongroup/createActionGroup.d.ts +2 -1
  338. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  339. package/dist/autocomplete/createAutocomplete.d.ts +1 -9
  340. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  341. package/dist/autocomplete/intl/index.d.ts +13 -0
  342. package/dist/autocomplete/intl/index.d.ts.map +1 -0
  343. package/dist/breadcrumbs/createBreadcrumbs.d.ts +3 -1
  344. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  345. package/dist/breadcrumbs/intl/index.d.ts +13 -0
  346. package/dist/breadcrumbs/intl/index.d.ts.map +1 -0
  347. package/dist/button/createButton.d.ts.map +1 -1
  348. package/dist/button/createToggleButton.d.ts.map +1 -1
  349. package/dist/button/createToggleButtonGroup.d.ts +1 -1
  350. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  351. package/dist/button/types.d.ts +14 -0
  352. package/dist/button/types.d.ts.map +1 -1
  353. package/dist/calendar/createCalendar.d.ts +1 -7
  354. package/dist/calendar/createCalendar.d.ts.map +1 -1
  355. package/dist/calendar/createCalendarCell.d.ts +0 -6
  356. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  357. package/dist/calendar/createCalendarGrid.d.ts +1 -7
  358. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  359. package/dist/calendar/createCalendarMonthPicker.d.ts +0 -8
  360. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -1
  361. package/dist/calendar/createCalendarYearPicker.d.ts +0 -8
  362. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -1
  363. package/dist/calendar/createRangeCalendar.d.ts +13 -7
  364. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  365. package/dist/calendar/createRangeCalendarCell.d.ts +2 -6
  366. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  367. package/dist/calendar/intl/index.d.ts.map +1 -1
  368. package/dist/calendar/utils.d.ts.map +1 -1
  369. package/dist/checkbox/createCheckbox.d.ts +2 -1
  370. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  371. package/dist/checkbox/createCheckboxGroup.d.ts +1 -9
  372. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  373. package/dist/checkbox/createCheckboxGroupItem.d.ts +0 -8
  374. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  375. package/dist/collections/index.d.ts +1 -1
  376. package/dist/collections/index.d.ts.map +1 -1
  377. package/dist/collections/index.js +18 -2
  378. package/dist/collections/index.js.map +1 -1
  379. package/dist/collections/index.jsx +18 -2
  380. package/dist/collections/index.jsx.map +1 -1
  381. package/dist/color/createColorArea.d.ts +2 -7
  382. package/dist/color/createColorArea.d.ts.map +1 -1
  383. package/dist/color/createColorField.d.ts +2 -7
  384. package/dist/color/createColorField.d.ts.map +1 -1
  385. package/dist/color/createColorSlider.d.ts +1 -6
  386. package/dist/color/createColorSlider.d.ts.map +1 -1
  387. package/dist/color/createColorSwatch.d.ts +1 -6
  388. package/dist/color/createColorSwatch.d.ts.map +1 -1
  389. package/dist/color/createColorWheel.d.ts +1 -6
  390. package/dist/color/createColorWheel.d.ts.map +1 -1
  391. package/dist/color/intl/index.d.ts.map +1 -1
  392. package/dist/color/types.d.ts +47 -1
  393. package/dist/color/types.d.ts.map +1 -1
  394. package/dist/combobox/createComboBox.d.ts +17 -8
  395. package/dist/combobox/createComboBox.d.ts.map +1 -1
  396. package/dist/combobox/intl/generated-locales.d.ts +3 -0
  397. package/dist/combobox/intl/generated-locales.d.ts.map +1 -1
  398. package/dist/combobox/intl/index.d.ts +3 -2
  399. package/dist/combobox/intl/index.d.ts.map +1 -1
  400. package/dist/datepicker/createDateField.d.ts +0 -10
  401. package/dist/datepicker/createDateField.d.ts.map +1 -1
  402. package/dist/datepicker/createDatePicker.d.ts +0 -16
  403. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  404. package/dist/datepicker/createDatePickerGroup.d.ts +1 -1
  405. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
  406. package/dist/datepicker/createDateRangePicker.d.ts +0 -21
  407. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  408. package/dist/datepicker/createDateSegment.d.ts +0 -9
  409. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  410. package/dist/datepicker/createDisplayNames.d.ts +1 -9
  411. package/dist/datepicker/createDisplayNames.d.ts.map +1 -1
  412. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  413. package/dist/datepicker/intl.d.ts.map +1 -1
  414. package/dist/dialog/createDialog.d.ts +2 -4
  415. package/dist/dialog/createDialog.d.ts.map +1 -1
  416. package/dist/dialog/types.d.ts +14 -0
  417. package/dist/dialog/types.d.ts.map +1 -1
  418. package/dist/disclosure/createDisclosure.d.ts +1 -8
  419. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  420. package/dist/disclosure/createDisclosureGroup.d.ts +3 -4
  421. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  422. package/dist/dnd/DragManager.d.ts +1 -16
  423. package/dist/dnd/DragManager.d.ts.map +1 -1
  424. package/dist/dnd/DropTargetKeyboardNavigation.d.ts +2 -2
  425. package/dist/dnd/createDrag.d.ts +1 -7
  426. package/dist/dnd/createDrag.d.ts.map +1 -1
  427. package/dist/dnd/createDraggableCollection.d.ts +1 -7
  428. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  429. package/dist/dnd/createDraggableItem.d.ts +2 -7
  430. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  431. package/dist/dnd/createDrop.d.ts +1 -7
  432. package/dist/dnd/createDrop.d.ts.map +1 -1
  433. package/dist/dnd/createDropIndicator.d.ts +27 -0
  434. package/dist/dnd/createDropIndicator.d.ts.map +1 -0
  435. package/dist/dnd/createDroppableCollection.d.ts +6 -8
  436. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  437. package/dist/dnd/createDroppableItem.d.ts +12 -10
  438. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  439. package/dist/dnd/index.d.ts +3 -1
  440. package/dist/dnd/index.d.ts.map +1 -1
  441. package/dist/dnd/index.js +2 -2
  442. package/dist/dnd/index.jsx +2 -2
  443. package/dist/dnd/intl/index.d.ts +6 -4
  444. package/dist/dnd/intl/index.d.ts.map +1 -1
  445. package/dist/dnd/types.d.ts +20 -1
  446. package/dist/dnd/types.d.ts.map +1 -1
  447. package/dist/dnd/utils.d.ts +4 -0
  448. package/dist/dnd/utils.d.ts.map +1 -1
  449. package/dist/focus/FocusScope.d.ts +9 -5
  450. package/dist/focus/FocusScope.d.ts.map +1 -1
  451. package/dist/focus/createAutoFocus.d.ts +3 -0
  452. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  453. package/dist/focus/createFocusRestore.d.ts +3 -0
  454. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  455. package/dist/focus/createHasTabbableChild.d.ts +13 -0
  456. package/dist/focus/createHasTabbableChild.d.ts.map +1 -0
  457. package/dist/focus/createVirtualFocus.d.ts +4 -1
  458. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  459. package/dist/focus/index.js +3 -2
  460. package/dist/focus/index.jsx +3 -2
  461. package/dist/focus/virtualFocus.d.ts +1 -1
  462. package/dist/form/createFormReset.d.ts +1 -7
  463. package/dist/form/createFormReset.d.ts.map +1 -1
  464. package/dist/form/createFormValidation.d.ts +1 -9
  465. package/dist/form/createFormValidation.d.ts.map +1 -1
  466. package/dist/grid/GridKeyboardDelegate.d.ts.map +1 -1
  467. package/dist/grid/createGrid.d.ts +1 -5
  468. package/dist/grid/createGrid.d.ts.map +1 -1
  469. package/dist/grid/createGridCell.d.ts +1 -5
  470. package/dist/grid/createGridCell.d.ts.map +1 -1
  471. package/dist/grid/createGridRow.d.ts +1 -5
  472. package/dist/grid/createGridRow.d.ts.map +1 -1
  473. package/dist/grid/index.d.ts +2 -2
  474. package/dist/grid/intl/index.d.ts +18 -0
  475. package/dist/grid/intl/index.d.ts.map +1 -0
  476. package/dist/grid/types.d.ts +25 -2
  477. package/dist/grid/types.d.ts.map +1 -1
  478. package/dist/gridlist/createGridList.d.ts +3 -5
  479. package/dist/gridlist/createGridList.d.ts.map +1 -1
  480. package/dist/gridlist/createGridListItem.d.ts +1 -5
  481. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  482. package/dist/gridlist/createGridListSection.d.ts +0 -4
  483. package/dist/gridlist/createGridListSection.d.ts.map +1 -1
  484. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +1 -5
  485. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  486. package/dist/gridlist/intl/index.d.ts +14 -0
  487. package/dist/gridlist/intl/index.d.ts.map +1 -0
  488. package/dist/gridlist/types.d.ts +56 -2
  489. package/dist/gridlist/types.d.ts.map +1 -1
  490. package/dist/i18n/compileIcu.d.ts +24 -0
  491. package/dist/i18n/compileIcu.d.ts.map +1 -0
  492. package/dist/i18n/createCollator.d.ts +0 -7
  493. package/dist/i18n/createCollator.d.ts.map +1 -1
  494. package/dist/i18n/createDateFormatter.d.ts +0 -7
  495. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  496. package/dist/i18n/createFilter.d.ts +0 -7
  497. package/dist/i18n/createFilter.d.ts.map +1 -1
  498. package/dist/i18n/createListFormatter.d.ts +9 -0
  499. package/dist/i18n/createListFormatter.d.ts.map +1 -0
  500. package/dist/i18n/createNumberFormatter.d.ts +0 -7
  501. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  502. package/dist/i18n/createStringFormatter.d.ts +14 -4
  503. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  504. package/dist/i18n/index.d.ts +1 -0
  505. package/dist/i18n/index.d.ts.map +1 -1
  506. package/dist/i18n/index.js +2 -2
  507. package/dist/i18n/index.jsx +2 -2
  508. package/dist/i18n/locale.d.ts +2 -8
  509. package/dist/i18n/locale.d.ts.map +1 -1
  510. package/dist/i18n/utils.d.ts +0 -7
  511. package/dist/i18n/utils.d.ts.map +1 -1
  512. package/dist/index.d.ts +10 -7
  513. package/dist/index.d.ts.map +1 -1
  514. package/dist/index.js +27 -21
  515. package/dist/index.jsx +27 -21
  516. package/dist/interactions/FocusableProvider.d.ts +3 -2
  517. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  518. package/dist/interactions/PressEvent.d.ts +2 -1
  519. package/dist/interactions/PressEvent.d.ts.map +1 -1
  520. package/dist/interactions/createContextMenu.d.ts +24 -0
  521. package/dist/interactions/createContextMenu.d.ts.map +1 -0
  522. package/dist/interactions/createFocus.d.ts +3 -2
  523. package/dist/interactions/createFocus.d.ts.map +1 -1
  524. package/dist/interactions/createFocusRing.d.ts +2 -1
  525. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  526. package/dist/interactions/createFocusWithin.d.ts +1 -6
  527. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  528. package/dist/interactions/createFocusable.d.ts +2 -6
  529. package/dist/interactions/createFocusable.d.ts.map +1 -1
  530. package/dist/interactions/createHover.d.ts +3 -10
  531. package/dist/interactions/createHover.d.ts.map +1 -1
  532. package/dist/interactions/createInteractionModality.d.ts +12 -10
  533. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  534. package/dist/interactions/createKeyboard.d.ts +12 -3
  535. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  536. package/dist/interactions/createKeyboardShortcutHandler.d.ts +24 -0
  537. package/dist/interactions/createKeyboardShortcutHandler.d.ts.map +1 -0
  538. package/dist/interactions/createLongPress.d.ts +4 -7
  539. package/dist/interactions/createLongPress.d.ts.map +1 -1
  540. package/dist/interactions/createMove.d.ts +1 -6
  541. package/dist/interactions/createMove.d.ts.map +1 -1
  542. package/dist/interactions/createPress.d.ts +2 -7
  543. package/dist/interactions/createPress.d.ts.map +1 -1
  544. package/dist/interactions/index.d.ts +1 -1
  545. package/dist/interactions/index.d.ts.map +1 -1
  546. package/dist/interactions/index.js +5 -3
  547. package/dist/interactions/index.jsx +5 -3
  548. package/dist/label/createField.d.ts +7 -1
  549. package/dist/label/createField.d.ts.map +1 -1
  550. package/dist/label/createLabel.d.ts +1 -1
  551. package/dist/label/createLabel.d.ts.map +1 -1
  552. package/dist/label/createLabels.d.ts +0 -7
  553. package/dist/label/createLabels.d.ts.map +1 -1
  554. package/dist/landmark/createLandmark.d.ts +4 -1
  555. package/dist/landmark/createLandmark.d.ts.map +1 -1
  556. package/dist/link/createLink.d.ts +1 -1
  557. package/dist/link/createLink.d.ts.map +1 -1
  558. package/dist/listbox/createListBox.d.ts +8 -7
  559. package/dist/listbox/createListBox.d.ts.map +1 -1
  560. package/dist/listbox/createOption.d.ts +7 -1
  561. package/dist/listbox/createOption.d.ts.map +1 -1
  562. package/dist/live-announcer/announce.d.ts +2 -13
  563. package/dist/live-announcer/announce.d.ts.map +1 -1
  564. package/dist/menu/createMenu.d.ts +3 -7
  565. package/dist/menu/createMenu.d.ts.map +1 -1
  566. package/dist/menu/createMenuItem.d.ts +2 -1
  567. package/dist/menu/createMenuItem.d.ts.map +1 -1
  568. package/dist/menu/createMenuTrigger.d.ts +24 -20
  569. package/dist/menu/createMenuTrigger.d.ts.map +1 -1
  570. package/dist/menu/index.d.ts +1 -1
  571. package/dist/menu/index.d.ts.map +1 -1
  572. package/dist/menu/intl/index.d.ts +4 -0
  573. package/dist/menu/intl/index.d.ts.map +1 -0
  574. package/dist/meter/createMeter.d.ts +2 -1
  575. package/dist/meter/createMeter.d.ts.map +1 -1
  576. package/dist/numberfield/createNumberField.d.ts +29 -6
  577. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  578. package/dist/overlays/ariaHideOutside.d.ts +0 -4
  579. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  580. package/dist/overlays/createInteractOutside.d.ts +2 -5
  581. package/dist/overlays/createInteractOutside.d.ts.map +1 -1
  582. package/dist/overlays/createModal.d.ts +3 -6
  583. package/dist/overlays/createModal.d.ts.map +1 -1
  584. package/dist/overlays/createOverlay.d.ts +1 -5
  585. package/dist/overlays/createOverlay.d.ts.map +1 -1
  586. package/dist/overlays/createOverlayTrigger.d.ts +2 -6
  587. package/dist/overlays/createOverlayTrigger.d.ts.map +1 -1
  588. package/dist/overlays/createPreventScroll.d.ts +0 -4
  589. package/dist/overlays/createPreventScroll.d.ts.map +1 -1
  590. package/dist/overlays/index.d.ts +1 -0
  591. package/dist/overlays/index.d.ts.map +1 -1
  592. package/dist/overlays/index.js +3 -2
  593. package/dist/overlays/index.jsx +3 -2
  594. package/dist/overlays/intl/index.d.ts +13 -0
  595. package/dist/overlays/intl/index.d.ts.map +1 -0
  596. package/dist/popover/calculatePosition.d.ts +1 -1
  597. package/dist/popover/calculatePosition.d.ts.map +1 -1
  598. package/dist/popover/createOverlayPosition.d.ts +1 -7
  599. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  600. package/dist/popover/createPopover.d.ts +6 -7
  601. package/dist/popover/createPopover.d.ts.map +1 -1
  602. package/dist/progress/createProgressBar.d.ts +2 -10
  603. package/dist/progress/createProgressBar.d.ts.map +1 -1
  604. package/dist/radio/createRadio.d.ts +8 -1
  605. package/dist/radio/createRadio.d.ts.map +1 -1
  606. package/dist/radio/createRadioGroup.d.ts +1 -9
  607. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  608. package/dist/searchfield/createSearchField.d.ts +1 -1
  609. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  610. package/dist/searchfield/intl/index.d.ts +13 -0
  611. package/dist/searchfield/intl/index.d.ts.map +1 -0
  612. package/dist/select/createHiddenSelect.d.ts +3 -10
  613. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  614. package/dist/select/createSelect.d.ts +10 -6
  615. package/dist/select/createSelect.d.ts.map +1 -1
  616. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -1
  617. package/dist/selection/ListKeyboardDelegate.d.ts +2 -1
  618. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -1
  619. package/dist/selection/constants.d.ts.map +1 -1
  620. package/dist/selection/createCollectionRowInteraction.d.ts +12 -1
  621. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -1
  622. package/dist/selection/createScrollIntoViewOnFocus.d.ts +0 -11
  623. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -1
  624. package/dist/selection/createSelectableCollection.d.ts +1 -23
  625. package/dist/selection/createSelectableCollection.d.ts.map +1 -1
  626. package/dist/selection/createSelectableItem.d.ts +2 -29
  627. package/dist/selection/createSelectableItem.d.ts.map +1 -1
  628. package/dist/selection/createSelectableList.d.ts +4 -17
  629. package/dist/selection/createSelectableList.d.ts.map +1 -1
  630. package/dist/selection/createTypeSelect.d.ts +2 -8
  631. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  632. package/dist/selection/index.js +3 -2
  633. package/dist/selection/index.jsx +3 -2
  634. package/dist/selection/selectItem.d.ts.map +1 -1
  635. package/dist/selection/utils.d.ts +1 -1
  636. package/dist/selection/utils.d.ts.map +1 -1
  637. package/dist/separator/createSeparator.d.ts +3 -1
  638. package/dist/separator/createSeparator.d.ts.map +1 -1
  639. package/dist/slider/createSlider.d.ts +1 -6
  640. package/dist/slider/createSlider.d.ts.map +1 -1
  641. package/dist/spinbutton/createSpinButton.d.ts +0 -9
  642. package/dist/spinbutton/createSpinButton.d.ts.map +1 -1
  643. package/dist/spinbutton/index.d.ts +2 -2
  644. package/dist/spinbutton/index.d.ts.map +1 -1
  645. package/dist/spinbutton/intl.d.ts.map +1 -1
  646. package/dist/ssr/index.d.ts +3 -9
  647. package/dist/ssr/index.d.ts.map +1 -1
  648. package/dist/ssr/index.js +47 -26
  649. package/dist/ssr/index.js.map +1 -1
  650. package/dist/ssr/index.jsx +47 -26
  651. package/dist/ssr/index.jsx.map +1 -1
  652. package/dist/steplist/createStepList.d.ts +1 -1
  653. package/dist/steplist/createStepList.d.ts.map +1 -1
  654. package/dist/switch/createSwitch.d.ts +2 -1
  655. package/dist/switch/createSwitch.d.ts.map +1 -1
  656. package/dist/table/createTable.d.ts +1 -5
  657. package/dist/table/createTable.d.ts.map +1 -1
  658. package/dist/table/createTableCell.d.ts +1 -5
  659. package/dist/table/createTableCell.d.ts.map +1 -1
  660. package/dist/table/createTableColumnHeader.d.ts +1 -5
  661. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  662. package/dist/table/createTableColumnResize.d.ts +2 -8
  663. package/dist/table/createTableColumnResize.d.ts.map +1 -1
  664. package/dist/table/createTableHeaderRow.d.ts +1 -5
  665. package/dist/table/createTableHeaderRow.d.ts.map +1 -1
  666. package/dist/table/createTableRow.d.ts +1 -5
  667. package/dist/table/createTableRow.d.ts.map +1 -1
  668. package/dist/table/createTableRowGroup.d.ts +1 -5
  669. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  670. package/dist/table/createTableSelectAllCheckbox.d.ts +1 -5
  671. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  672. package/dist/table/createTableSelectionCheckbox.d.ts +1 -5
  673. package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
  674. package/dist/table/index.d.ts +2 -2
  675. package/dist/table/intl/index.d.ts +23 -0
  676. package/dist/table/intl/index.d.ts.map +1 -0
  677. package/dist/table/types.d.ts +44 -2
  678. package/dist/table/types.d.ts.map +1 -1
  679. package/dist/table/utils.d.ts.map +1 -1
  680. package/dist/tabs/createTabs.d.ts +5 -9
  681. package/dist/tabs/createTabs.d.ts.map +1 -1
  682. package/dist/tag/createTag.d.ts +4 -8
  683. package/dist/tag/createTag.d.ts.map +1 -1
  684. package/dist/tag/createTagGroup.d.ts +0 -9
  685. package/dist/tag/createTagGroup.d.ts.map +1 -1
  686. package/dist/tag/intl/index.d.ts +14 -0
  687. package/dist/tag/intl/index.d.ts.map +1 -0
  688. package/dist/textfield/createTextField.d.ts +6 -8
  689. package/dist/textfield/createTextField.d.ts.map +1 -1
  690. package/dist/toast/createToast.d.ts +1 -8
  691. package/dist/toast/createToast.d.ts.map +1 -1
  692. package/dist/toast/createToastRegion.d.ts +7 -18
  693. package/dist/toast/createToastRegion.d.ts.map +1 -1
  694. package/dist/toast/intl/index.d.ts +14 -0
  695. package/dist/toast/intl/index.d.ts.map +1 -0
  696. package/dist/toggle/createToggle.d.ts +8 -1
  697. package/dist/toggle/createToggle.d.ts.map +1 -1
  698. package/dist/tokenfield/createToken.d.ts +15 -0
  699. package/dist/tokenfield/createToken.d.ts.map +1 -0
  700. package/dist/tokenfield/createTokenField.d.ts +52 -0
  701. package/dist/tokenfield/createTokenField.d.ts.map +1 -0
  702. package/dist/tokenfield/index.d.ts +3 -0
  703. package/dist/tokenfield/index.d.ts.map +1 -0
  704. package/dist/tokenfield/index.js +2 -0
  705. package/dist/tokenfield/index.jsx +2 -0
  706. package/dist/toolbar/createToolbar.d.ts +1 -1
  707. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  708. package/dist/tooltip/createPreviewTrigger.d.ts +23 -0
  709. package/dist/tooltip/createPreviewTrigger.d.ts.map +1 -0
  710. package/dist/tooltip/createSafeArea.d.ts +20 -0
  711. package/dist/tooltip/createSafeArea.d.ts.map +1 -0
  712. package/dist/tooltip/createTooltip.d.ts +1 -1
  713. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  714. package/dist/tooltip/createTooltipTrigger.d.ts +1 -9
  715. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  716. package/dist/tooltip/index.d.ts +2 -0
  717. package/dist/tooltip/index.d.ts.map +1 -1
  718. package/dist/tooltip/index.js +2 -2
  719. package/dist/tooltip/index.jsx +2 -2
  720. package/dist/tooltip/intl/index.d.ts +4 -0
  721. package/dist/tooltip/intl/index.d.ts.map +1 -0
  722. package/dist/tree/createTree.d.ts +1 -5
  723. package/dist/tree/createTree.d.ts.map +1 -1
  724. package/dist/tree/createTreeItem.d.ts +1 -5
  725. package/dist/tree/createTreeItem.d.ts.map +1 -1
  726. package/dist/tree/createTreeSelectionCheckbox.d.ts +1 -5
  727. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  728. package/dist/tree/intl/index.d.ts +14 -0
  729. package/dist/tree/intl/index.d.ts.map +1 -0
  730. package/dist/tree/types.d.ts +35 -2
  731. package/dist/tree/types.d.ts.map +1 -1
  732. package/dist/utils/ShadowTreeWalker.d.ts +30 -0
  733. package/dist/utils/ShadowTreeWalker.d.ts.map +1 -0
  734. package/dist/utils/animation.d.ts +1 -29
  735. package/dist/utils/animation.d.ts.map +1 -1
  736. package/dist/utils/capture.d.ts +14 -0
  737. package/dist/utils/capture.d.ts.map +1 -0
  738. package/dist/utils/createDescription.d.ts +1 -25
  739. package/dist/utils/createDescription.d.ts.map +1 -1
  740. package/dist/utils/dom.d.ts +45 -11
  741. package/dist/utils/dom.d.ts.map +1 -1
  742. package/dist/utils/domAttrs.d.ts +16 -0
  743. package/dist/utils/domAttrs.d.ts.map +1 -0
  744. package/dist/utils/env.d.ts +2 -0
  745. package/dist/utils/env.d.ts.map +1 -1
  746. package/dist/utils/events.d.ts +0 -4
  747. package/dist/utils/events.d.ts.map +1 -1
  748. package/dist/utils/filterDOMProps.d.ts +0 -6
  749. package/dist/utils/filterDOMProps.d.ts.map +1 -1
  750. package/dist/utils/focus.d.ts +19 -6
  751. package/dist/utils/focus.d.ts.map +1 -1
  752. package/dist/utils/geometry.d.ts +1 -1
  753. package/dist/utils/geometry.d.ts.map +1 -1
  754. package/dist/utils/getMetaValue.d.ts +13 -0
  755. package/dist/utils/getMetaValue.d.ts.map +1 -0
  756. package/dist/utils/getNonce.d.ts +9 -0
  757. package/dist/utils/getNonce.d.ts.map +1 -0
  758. package/dist/utils/globalListeners.d.ts +0 -6
  759. package/dist/utils/globalListeners.d.ts.map +1 -1
  760. package/dist/utils/index.d.ts +6 -1
  761. package/dist/utils/index.d.ts.map +1 -1
  762. package/dist/utils/index.js +7 -4
  763. package/dist/utils/index.jsx +7 -4
  764. package/dist/utils/keyboard.d.ts +0 -4
  765. package/dist/utils/keyboard.d.ts.map +1 -1
  766. package/dist/utils/mergeProps.d.ts +5 -2
  767. package/dist/utils/mergeProps.d.ts.map +1 -1
  768. package/dist/utils/owner.d.ts +14 -0
  769. package/dist/utils/owner.d.ts.map +1 -0
  770. package/dist/utils/platform.d.ts +0 -4
  771. package/dist/utils/platform.d.ts.map +1 -1
  772. package/dist/utils/reactivity.d.ts +2 -0
  773. package/dist/utils/reactivity.d.ts.map +1 -1
  774. package/dist/utils/refs.d.ts +20 -0
  775. package/dist/utils/refs.d.ts.map +1 -0
  776. package/dist/utils/runAfterTransition.d.ts +2 -0
  777. package/dist/utils/runAfterTransition.d.ts.map +1 -0
  778. package/dist/utils/scrollIntoView.d.ts +0 -4
  779. package/dist/utils/scrollIntoView.d.ts.map +1 -1
  780. package/dist/utils/splitProps.d.ts +17 -0
  781. package/dist/utils/splitProps.d.ts.map +1 -0
  782. package/dist/utils/textSelection.d.ts +0 -8
  783. package/dist/utils/textSelection.d.ts.map +1 -1
  784. package/dist/virtualizer/ScrollView.d.ts +38 -0
  785. package/dist/virtualizer/ScrollView.d.ts.map +1 -0
  786. package/dist/virtualizer/index.d.ts +3 -0
  787. package/dist/virtualizer/index.d.ts.map +1 -0
  788. package/dist/virtualizer/index.js +2 -0
  789. package/dist/virtualizer/index.jsx +2 -0
  790. package/dist/virtualizer/utils.d.ts +10 -0
  791. package/dist/virtualizer/utils.d.ts.map +1 -0
  792. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -9
  793. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  794. package/dist/visually-hidden/index.js +1 -1
  795. package/dist/visually-hidden/index.jsx +1 -1
  796. package/package.json +30 -11
  797. package/src/actiongroup/createActionGroup.ts +49 -27
  798. package/src/autocomplete/createAutocomplete.ts +32 -5
  799. package/src/autocomplete/intl/ar-AE.json +3 -0
  800. package/src/autocomplete/intl/bg-BG.json +3 -0
  801. package/src/autocomplete/intl/cs-CZ.json +3 -0
  802. package/src/autocomplete/intl/da-DK.json +3 -0
  803. package/src/autocomplete/intl/de-DE.json +3 -0
  804. package/src/autocomplete/intl/el-GR.json +3 -0
  805. package/src/autocomplete/intl/en-US.json +3 -0
  806. package/src/autocomplete/intl/es-ES.json +3 -0
  807. package/src/autocomplete/intl/et-EE.json +3 -0
  808. package/src/autocomplete/intl/fi-FI.json +3 -0
  809. package/src/autocomplete/intl/fr-FR.json +3 -0
  810. package/src/autocomplete/intl/he-IL.json +3 -0
  811. package/src/autocomplete/intl/hr-HR.json +3 -0
  812. package/src/autocomplete/intl/hu-HU.json +3 -0
  813. package/src/autocomplete/intl/index.ts +122 -0
  814. package/src/autocomplete/intl/it-IT.json +3 -0
  815. package/src/autocomplete/intl/ja-JP.json +3 -0
  816. package/src/autocomplete/intl/ko-KR.json +3 -0
  817. package/src/autocomplete/intl/lt-LT.json +3 -0
  818. package/src/autocomplete/intl/lv-LV.json +3 -0
  819. package/src/autocomplete/intl/nb-NO.json +3 -0
  820. package/src/autocomplete/intl/nl-NL.json +3 -0
  821. package/src/autocomplete/intl/pl-PL.json +3 -0
  822. package/src/autocomplete/intl/pt-BR.json +3 -0
  823. package/src/autocomplete/intl/pt-PT.json +3 -0
  824. package/src/autocomplete/intl/ro-RO.json +3 -0
  825. package/src/autocomplete/intl/ru-RU.json +3 -0
  826. package/src/autocomplete/intl/sk-SK.json +3 -0
  827. package/src/autocomplete/intl/sl-SI.json +3 -0
  828. package/src/autocomplete/intl/sr-SP.json +3 -0
  829. package/src/autocomplete/intl/sv-SE.json +3 -0
  830. package/src/autocomplete/intl/tr-TR.json +3 -0
  831. package/src/autocomplete/intl/uk-UA.json +3 -0
  832. package/src/autocomplete/intl/zh-CN.json +3 -0
  833. package/src/autocomplete/intl/zh-TW.json +3 -0
  834. package/src/breadcrumbs/createBreadcrumbs.ts +18 -1
  835. package/src/breadcrumbs/intl/ar-AE.json +3 -0
  836. package/src/breadcrumbs/intl/bg-BG.json +3 -0
  837. package/src/breadcrumbs/intl/cs-CZ.json +3 -0
  838. package/src/breadcrumbs/intl/da-DK.json +3 -0
  839. package/src/breadcrumbs/intl/de-DE.json +3 -0
  840. package/src/breadcrumbs/intl/el-GR.json +3 -0
  841. package/src/breadcrumbs/intl/en-US.json +3 -0
  842. package/src/breadcrumbs/intl/es-ES.json +3 -0
  843. package/src/breadcrumbs/intl/et-EE.json +3 -0
  844. package/src/breadcrumbs/intl/fi-FI.json +3 -0
  845. package/src/breadcrumbs/intl/fr-FR.json +3 -0
  846. package/src/breadcrumbs/intl/he-IL.json +3 -0
  847. package/src/breadcrumbs/intl/hr-HR.json +3 -0
  848. package/src/breadcrumbs/intl/hu-HU.json +3 -0
  849. package/src/breadcrumbs/intl/index.ts +122 -0
  850. package/src/breadcrumbs/intl/it-IT.json +3 -0
  851. package/src/breadcrumbs/intl/ja-JP.json +3 -0
  852. package/src/breadcrumbs/intl/ko-KR.json +3 -0
  853. package/src/breadcrumbs/intl/lt-LT.json +3 -0
  854. package/src/breadcrumbs/intl/lv-LV.json +3 -0
  855. package/src/breadcrumbs/intl/nb-NO.json +3 -0
  856. package/src/breadcrumbs/intl/nl-NL.json +3 -0
  857. package/src/breadcrumbs/intl/pl-PL.json +3 -0
  858. package/src/breadcrumbs/intl/pt-BR.json +3 -0
  859. package/src/breadcrumbs/intl/pt-PT.json +3 -0
  860. package/src/breadcrumbs/intl/ro-RO.json +3 -0
  861. package/src/breadcrumbs/intl/ru-RU.json +3 -0
  862. package/src/breadcrumbs/intl/sk-SK.json +3 -0
  863. package/src/breadcrumbs/intl/sl-SI.json +3 -0
  864. package/src/breadcrumbs/intl/sr-SP.json +3 -0
  865. package/src/breadcrumbs/intl/sv-SE.json +3 -0
  866. package/src/breadcrumbs/intl/tr-TR.json +3 -0
  867. package/src/breadcrumbs/intl/uk-UA.json +3 -0
  868. package/src/breadcrumbs/intl/zh-CN.json +3 -0
  869. package/src/breadcrumbs/intl/zh-TW.json +3 -0
  870. package/src/button/createButton.ts +15 -1
  871. package/src/button/createToggleButton.ts +18 -5
  872. package/src/button/createToggleButtonGroup.ts +23 -8
  873. package/src/button/types.ts +16 -0
  874. package/src/calendar/createCalendar.ts +22 -3
  875. package/src/calendar/createCalendarCell.ts +104 -15
  876. package/src/calendar/createCalendarGrid.ts +37 -13
  877. package/src/calendar/createCalendarMonthPicker.ts +14 -0
  878. package/src/calendar/createCalendarYearPicker.ts +14 -0
  879. package/src/calendar/createRangeCalendar.ts +124 -1
  880. package/src/calendar/createRangeCalendarCell.ts +179 -40
  881. package/src/calendar/intl/index.ts +37 -0
  882. package/src/calendar/utils.ts +14 -0
  883. package/src/checkbox/createCheckbox.ts +32 -17
  884. package/src/checkbox/createCheckboxGroup.ts +31 -13
  885. package/src/checkbox/createCheckboxGroupItem.ts +15 -1
  886. package/src/collections/index.ts +21 -3
  887. package/src/color/createColorArea.ts +226 -29
  888. package/src/color/createColorField.ts +98 -22
  889. package/src/color/createColorSlider.ts +24 -3
  890. package/src/color/createColorSwatch.ts +18 -1
  891. package/src/color/createColorWheel.ts +27 -5
  892. package/src/color/intl/index.ts +35 -0
  893. package/src/color/types.ts +47 -1
  894. package/src/combobox/createComboBox.ts +303 -152
  895. package/src/combobox/intl/generated-locales.ts +38 -1
  896. package/src/combobox/intl/index.ts +38 -2
  897. package/src/datepicker/createDateField.ts +38 -22
  898. package/src/datepicker/createDatePicker.ts +14 -0
  899. package/src/datepicker/createDatePickerGroup.ts +24 -12
  900. package/src/datepicker/createDateRangePicker.ts +14 -0
  901. package/src/datepicker/createDateSegment.ts +110 -46
  902. package/src/datepicker/createDisplayNames.ts +16 -1
  903. package/src/datepicker/createTimeField.ts +15 -5
  904. package/src/datepicker/intl.ts +623 -544
  905. package/src/dialog/createDialog.ts +57 -30
  906. package/src/dialog/types.ts +14 -0
  907. package/src/disclosure/createDisclosure.ts +28 -6
  908. package/src/disclosure/createDisclosureGroup.ts +3 -4
  909. package/src/dnd/DragManager.ts +60 -9
  910. package/src/dnd/DropTargetKeyboardNavigation.ts +8 -6
  911. package/src/dnd/createDrag.ts +18 -1
  912. package/src/dnd/createDraggableCollection.ts +96 -32
  913. package/src/dnd/createDraggableItem.ts +73 -31
  914. package/src/dnd/createDrop.ts +18 -1
  915. package/src/dnd/createDropIndicator.ts +92 -0
  916. package/src/dnd/createDroppableCollection.ts +113 -48
  917. package/src/dnd/createDroppableItem.ts +161 -13
  918. package/src/dnd/index.ts +3 -0
  919. package/src/dnd/intl/index.ts +77 -66
  920. package/src/dnd/types.ts +20 -1
  921. package/src/dnd/utils.ts +19 -0
  922. package/src/focus/FocusScope.tsx +542 -157
  923. package/src/focus/createAutoFocus.ts +94 -68
  924. package/src/focus/createFocusRestore.ts +16 -12
  925. package/src/focus/createHasTabbableChild.ts +78 -0
  926. package/src/focus/createVirtualFocus.ts +21 -5
  927. package/src/focus/virtualFocus.ts +1 -1
  928. package/src/form/createFormReset.ts +40 -17
  929. package/src/form/createFormValidation.ts +128 -86
  930. package/src/grid/GridKeyboardDelegate.ts +14 -0
  931. package/src/grid/createGrid.ts +17 -2
  932. package/src/grid/createGridCell.ts +17 -2
  933. package/src/grid/createGridRow.ts +17 -2
  934. package/src/grid/index.ts +2 -2
  935. package/src/grid/intl/ar-AE.json +8 -0
  936. package/src/grid/intl/bg-BG.json +8 -0
  937. package/src/grid/intl/cs-CZ.json +8 -0
  938. package/src/grid/intl/da-DK.json +8 -0
  939. package/src/grid/intl/de-DE.json +8 -0
  940. package/src/grid/intl/el-GR.json +8 -0
  941. package/src/grid/intl/en-US.json +8 -0
  942. package/src/grid/intl/es-ES.json +8 -0
  943. package/src/grid/intl/et-EE.json +8 -0
  944. package/src/grid/intl/fi-FI.json +8 -0
  945. package/src/grid/intl/fr-FR.json +8 -0
  946. package/src/grid/intl/he-IL.json +8 -0
  947. package/src/grid/intl/hr-HR.json +8 -0
  948. package/src/grid/intl/hu-HU.json +8 -0
  949. package/src/grid/intl/index.ts +127 -0
  950. package/src/grid/intl/it-IT.json +8 -0
  951. package/src/grid/intl/ja-JP.json +8 -0
  952. package/src/grid/intl/ko-KR.json +8 -0
  953. package/src/grid/intl/lt-LT.json +8 -0
  954. package/src/grid/intl/lv-LV.json +8 -0
  955. package/src/grid/intl/nb-NO.json +8 -0
  956. package/src/grid/intl/nl-NL.json +8 -0
  957. package/src/grid/intl/pl-PL.json +8 -0
  958. package/src/grid/intl/pt-BR.json +8 -0
  959. package/src/grid/intl/pt-PT.json +8 -0
  960. package/src/grid/intl/ro-RO.json +8 -0
  961. package/src/grid/intl/ru-RU.json +8 -0
  962. package/src/grid/intl/sk-SK.json +8 -0
  963. package/src/grid/intl/sl-SI.json +8 -0
  964. package/src/grid/intl/sr-SP.json +8 -0
  965. package/src/grid/intl/sv-SE.json +8 -0
  966. package/src/grid/intl/tr-TR.json +8 -0
  967. package/src/grid/intl/uk-UA.json +8 -0
  968. package/src/grid/intl/zh-CN.json +8 -0
  969. package/src/grid/intl/zh-TW.json +8 -0
  970. package/src/grid/types.ts +25 -2
  971. package/src/gridlist/createGridList.ts +172 -42
  972. package/src/gridlist/createGridListItem.ts +51 -13
  973. package/src/gridlist/createGridListSection.ts +14 -0
  974. package/src/gridlist/createGridListSelectionCheckbox.ts +31 -4
  975. package/src/gridlist/intl/ar-AE.json +4 -0
  976. package/src/gridlist/intl/bg-BG.json +4 -0
  977. package/src/gridlist/intl/cs-CZ.json +4 -0
  978. package/src/gridlist/intl/da-DK.json +4 -0
  979. package/src/gridlist/intl/de-DE.json +4 -0
  980. package/src/gridlist/intl/el-GR.json +4 -0
  981. package/src/gridlist/intl/en-US.json +4 -0
  982. package/src/gridlist/intl/es-ES.json +4 -0
  983. package/src/gridlist/intl/et-EE.json +4 -0
  984. package/src/gridlist/intl/fi-FI.json +4 -0
  985. package/src/gridlist/intl/fr-FR.json +4 -0
  986. package/src/gridlist/intl/he-IL.json +4 -0
  987. package/src/gridlist/intl/hr-HR.json +4 -0
  988. package/src/gridlist/intl/hu-HU.json +4 -0
  989. package/src/gridlist/intl/index.ts +123 -0
  990. package/src/gridlist/intl/it-IT.json +4 -0
  991. package/src/gridlist/intl/ja-JP.json +4 -0
  992. package/src/gridlist/intl/ko-KR.json +4 -0
  993. package/src/gridlist/intl/lt-LT.json +4 -0
  994. package/src/gridlist/intl/lv-LV.json +4 -0
  995. package/src/gridlist/intl/nb-NO.json +4 -0
  996. package/src/gridlist/intl/nl-NL.json +4 -0
  997. package/src/gridlist/intl/pl-PL.json +4 -0
  998. package/src/gridlist/intl/pt-BR.json +4 -0
  999. package/src/gridlist/intl/pt-PT.json +4 -0
  1000. package/src/gridlist/intl/ro-RO.json +4 -0
  1001. package/src/gridlist/intl/ru-RU.json +4 -0
  1002. package/src/gridlist/intl/sk-SK.json +4 -0
  1003. package/src/gridlist/intl/sl-SI.json +4 -0
  1004. package/src/gridlist/intl/sr-SP.json +4 -0
  1005. package/src/gridlist/intl/sv-SE.json +4 -0
  1006. package/src/gridlist/intl/tr-TR.json +4 -0
  1007. package/src/gridlist/intl/uk-UA.json +4 -0
  1008. package/src/gridlist/intl/zh-CN.json +4 -0
  1009. package/src/gridlist/intl/zh-TW.json +4 -0
  1010. package/src/gridlist/types.ts +54 -2
  1011. package/src/i18n/compileIcu.ts +440 -0
  1012. package/src/i18n/createCollator.ts +14 -0
  1013. package/src/i18n/createDateFormatter.ts +14 -0
  1014. package/src/i18n/createFilter.ts +14 -0
  1015. package/src/i18n/createListFormatter.ts +38 -0
  1016. package/src/i18n/createNumberFormatter.ts +14 -0
  1017. package/src/i18n/createStringFormatter.ts +64 -8
  1018. package/src/i18n/index.ts +3 -0
  1019. package/src/i18n/locale.tsx +60 -19
  1020. package/src/i18n/utils.ts +14 -0
  1021. package/src/index.ts +49 -1
  1022. package/src/interactions/FocusableProvider.tsx +28 -11
  1023. package/src/interactions/PressEvent.ts +16 -1
  1024. package/src/interactions/createContextMenu.ts +108 -0
  1025. package/src/interactions/createFocus.ts +26 -6
  1026. package/src/interactions/createFocusRing.ts +28 -13
  1027. package/src/interactions/createFocusWithin.ts +23 -3
  1028. package/src/interactions/createFocusable.ts +45 -28
  1029. package/src/interactions/createHover.ts +102 -81
  1030. package/src/interactions/createInteractionModality.ts +135 -45
  1031. package/src/interactions/createKeyboard.ts +85 -9
  1032. package/src/interactions/createKeyboardShortcutHandler.ts +157 -0
  1033. package/src/interactions/createLongPress.ts +31 -9
  1034. package/src/interactions/createMove.ts +24 -3
  1035. package/src/interactions/createPress.ts +85 -41
  1036. package/src/interactions/index.ts +1 -0
  1037. package/src/label/createField.ts +58 -63
  1038. package/src/label/createLabel.ts +21 -4
  1039. package/src/label/createLabels.ts +25 -1
  1040. package/src/landmark/createLandmark.ts +27 -4
  1041. package/src/link/createLink.ts +20 -12
  1042. package/src/listbox/createListBox.ts +86 -310
  1043. package/src/listbox/createOption.ts +50 -14
  1044. package/src/live-announcer/announce.ts +21 -6
  1045. package/src/menu/createMenu.ts +92 -5
  1046. package/src/menu/createMenuItem.ts +40 -23
  1047. package/src/menu/createMenuTrigger.ts +179 -51
  1048. package/src/menu/index.ts +2 -0
  1049. package/src/menu/intl/index.ts +130 -0
  1050. package/src/meter/createMeter.ts +20 -5
  1051. package/src/numberfield/createNumberField.ts +254 -14
  1052. package/src/overlays/ariaHideOutside.ts +76 -11
  1053. package/src/overlays/createInteractOutside.ts +74 -47
  1054. package/src/overlays/createModal.tsx +42 -27
  1055. package/src/overlays/createOverlay.ts +107 -66
  1056. package/src/overlays/createOverlayTrigger.ts +21 -6
  1057. package/src/overlays/createPreventScroll.ts +92 -62
  1058. package/src/overlays/index.ts +2 -0
  1059. package/src/overlays/intl/ar-AE.json +3 -0
  1060. package/src/overlays/intl/bg-BG.json +3 -0
  1061. package/src/overlays/intl/cs-CZ.json +3 -0
  1062. package/src/overlays/intl/da-DK.json +3 -0
  1063. package/src/overlays/intl/de-DE.json +3 -0
  1064. package/src/overlays/intl/el-GR.json +3 -0
  1065. package/src/overlays/intl/en-US.json +3 -0
  1066. package/src/overlays/intl/es-ES.json +3 -0
  1067. package/src/overlays/intl/et-EE.json +3 -0
  1068. package/src/overlays/intl/fi-FI.json +3 -0
  1069. package/src/overlays/intl/fr-FR.json +3 -0
  1070. package/src/overlays/intl/he-IL.json +3 -0
  1071. package/src/overlays/intl/hr-HR.json +3 -0
  1072. package/src/overlays/intl/hu-HU.json +3 -0
  1073. package/src/overlays/intl/index.ts +122 -0
  1074. package/src/overlays/intl/it-IT.json +3 -0
  1075. package/src/overlays/intl/ja-JP.json +3 -0
  1076. package/src/overlays/intl/ko-KR.json +3 -0
  1077. package/src/overlays/intl/lt-LT.json +3 -0
  1078. package/src/overlays/intl/lv-LV.json +3 -0
  1079. package/src/overlays/intl/nb-NO.json +3 -0
  1080. package/src/overlays/intl/nl-NL.json +3 -0
  1081. package/src/overlays/intl/pl-PL.json +3 -0
  1082. package/src/overlays/intl/pt-BR.json +3 -0
  1083. package/src/overlays/intl/pt-PT.json +3 -0
  1084. package/src/overlays/intl/ro-RO.json +3 -0
  1085. package/src/overlays/intl/ru-RU.json +3 -0
  1086. package/src/overlays/intl/sk-SK.json +3 -0
  1087. package/src/overlays/intl/sl-SI.json +3 -0
  1088. package/src/overlays/intl/sr-SP.json +3 -0
  1089. package/src/overlays/intl/sv-SE.json +3 -0
  1090. package/src/overlays/intl/tr-TR.json +3 -0
  1091. package/src/overlays/intl/uk-UA.json +3 -0
  1092. package/src/overlays/intl/zh-CN.json +3 -0
  1093. package/src/overlays/intl/zh-TW.json +3 -0
  1094. package/src/popover/calculatePosition.ts +21 -3
  1095. package/src/popover/createOverlayPosition.ts +149 -41
  1096. package/src/popover/createPopover.ts +88 -23
  1097. package/src/progress/createProgressBar.ts +19 -4
  1098. package/src/radio/createRadio.ts +80 -25
  1099. package/src/radio/createRadioGroup.ts +47 -13
  1100. package/src/searchfield/createSearchField.ts +31 -2
  1101. package/src/searchfield/intl/ar-AE.json +3 -0
  1102. package/src/searchfield/intl/bg-BG.json +3 -0
  1103. package/src/searchfield/intl/cs-CZ.json +3 -0
  1104. package/src/searchfield/intl/da-DK.json +3 -0
  1105. package/src/searchfield/intl/de-DE.json +3 -0
  1106. package/src/searchfield/intl/el-GR.json +3 -0
  1107. package/src/searchfield/intl/en-US.json +3 -0
  1108. package/src/searchfield/intl/es-ES.json +3 -0
  1109. package/src/searchfield/intl/et-EE.json +3 -0
  1110. package/src/searchfield/intl/fi-FI.json +3 -0
  1111. package/src/searchfield/intl/fr-FR.json +3 -0
  1112. package/src/searchfield/intl/he-IL.json +3 -0
  1113. package/src/searchfield/intl/hr-HR.json +3 -0
  1114. package/src/searchfield/intl/hu-HU.json +3 -0
  1115. package/src/searchfield/intl/index.ts +122 -0
  1116. package/src/searchfield/intl/it-IT.json +3 -0
  1117. package/src/searchfield/intl/ja-JP.json +3 -0
  1118. package/src/searchfield/intl/ko-KR.json +3 -0
  1119. package/src/searchfield/intl/lt-LT.json +3 -0
  1120. package/src/searchfield/intl/lv-LV.json +3 -0
  1121. package/src/searchfield/intl/nb-NO.json +3 -0
  1122. package/src/searchfield/intl/nl-NL.json +3 -0
  1123. package/src/searchfield/intl/pl-PL.json +3 -0
  1124. package/src/searchfield/intl/pt-BR.json +3 -0
  1125. package/src/searchfield/intl/pt-PT.json +3 -0
  1126. package/src/searchfield/intl/ro-RO.json +3 -0
  1127. package/src/searchfield/intl/ru-RU.json +3 -0
  1128. package/src/searchfield/intl/sk-SK.json +3 -0
  1129. package/src/searchfield/intl/sl-SI.json +3 -0
  1130. package/src/searchfield/intl/sr-SP.json +3 -0
  1131. package/src/searchfield/intl/sv-SE.json +3 -0
  1132. package/src/searchfield/intl/tr-TR.json +3 -0
  1133. package/src/searchfield/intl/uk-UA.json +3 -0
  1134. package/src/searchfield/intl/zh-CN.json +3 -0
  1135. package/src/searchfield/intl/zh-TW.json +3 -0
  1136. package/src/select/createHiddenSelect.tsx +166 -69
  1137. package/src/select/createSelect.ts +80 -34
  1138. package/src/selection/DOMLayoutDelegate.ts +14 -0
  1139. package/src/selection/ListKeyboardDelegate.ts +16 -1
  1140. package/src/selection/constants.ts +14 -0
  1141. package/src/selection/createCollectionRowInteraction.ts +75 -6
  1142. package/src/selection/createScrollIntoViewOnFocus.ts +23 -8
  1143. package/src/selection/createSelectableCollection.ts +352 -226
  1144. package/src/selection/createSelectableItem.ts +51 -12
  1145. package/src/selection/createSelectableList.ts +21 -1
  1146. package/src/selection/createTypeSelect.ts +21 -5
  1147. package/src/selection/selectItem.ts +14 -0
  1148. package/src/selection/utils.ts +15 -1
  1149. package/src/separator/createSeparator.ts +17 -1
  1150. package/src/slider/createSlider.ts +24 -18
  1151. package/src/spinbutton/createSpinButton.ts +16 -2
  1152. package/src/spinbutton/index.ts +2 -10
  1153. package/src/spinbutton/intl.ts +70 -34
  1154. package/src/ssr/index.tsx +79 -48
  1155. package/src/steplist/createStepList.ts +17 -2
  1156. package/src/switch/createSwitch.ts +25 -4
  1157. package/src/table/createTable.ts +104 -52
  1158. package/src/table/createTableCell.ts +17 -2
  1159. package/src/table/createTableColumnHeader.ts +21 -3
  1160. package/src/table/createTableColumnResize.ts +19 -3
  1161. package/src/table/createTableHeaderRow.ts +17 -2
  1162. package/src/table/createTableRow.ts +29 -22
  1163. package/src/table/createTableRowGroup.ts +18 -3
  1164. package/src/table/createTableSelectAllCheckbox.ts +30 -14
  1165. package/src/table/createTableSelectionCheckbox.ts +21 -3
  1166. package/src/table/index.ts +2 -2
  1167. package/src/table/intl/ar-AE.json +13 -0
  1168. package/src/table/intl/bg-BG.json +13 -0
  1169. package/src/table/intl/cs-CZ.json +13 -0
  1170. package/src/table/intl/da-DK.json +13 -0
  1171. package/src/table/intl/de-DE.json +13 -0
  1172. package/src/table/intl/el-GR.json +13 -0
  1173. package/src/table/intl/en-US.json +13 -0
  1174. package/src/table/intl/es-ES.json +13 -0
  1175. package/src/table/intl/et-EE.json +13 -0
  1176. package/src/table/intl/fi-FI.json +13 -0
  1177. package/src/table/intl/fr-FR.json +13 -0
  1178. package/src/table/intl/he-IL.json +13 -0
  1179. package/src/table/intl/hr-HR.json +13 -0
  1180. package/src/table/intl/hu-HU.json +13 -0
  1181. package/src/table/intl/index.ts +132 -0
  1182. package/src/table/intl/it-IT.json +13 -0
  1183. package/src/table/intl/ja-JP.json +13 -0
  1184. package/src/table/intl/ko-KR.json +13 -0
  1185. package/src/table/intl/lt-LT.json +13 -0
  1186. package/src/table/intl/lv-LV.json +13 -0
  1187. package/src/table/intl/nb-NO.json +13 -0
  1188. package/src/table/intl/nl-NL.json +13 -0
  1189. package/src/table/intl/pl-PL.json +13 -0
  1190. package/src/table/intl/pt-BR.json +13 -0
  1191. package/src/table/intl/pt-PT.json +13 -0
  1192. package/src/table/intl/ro-RO.json +13 -0
  1193. package/src/table/intl/ru-RU.json +13 -0
  1194. package/src/table/intl/sk-SK.json +13 -0
  1195. package/src/table/intl/sl-SI.json +13 -0
  1196. package/src/table/intl/sr-SP.json +13 -0
  1197. package/src/table/intl/sv-SE.json +13 -0
  1198. package/src/table/intl/tr-TR.json +13 -0
  1199. package/src/table/intl/uk-UA.json +13 -0
  1200. package/src/table/intl/zh-CN.json +13 -0
  1201. package/src/table/intl/zh-TW.json +13 -0
  1202. package/src/table/types.ts +44 -2
  1203. package/src/table/utils.ts +15 -6
  1204. package/src/tabs/createTabs.ts +104 -37
  1205. package/src/tag/createTag.ts +118 -37
  1206. package/src/tag/createTagGroup.ts +20 -12
  1207. package/src/tag/intl/ar-AE.json +4 -0
  1208. package/src/tag/intl/bg-BG.json +4 -0
  1209. package/src/tag/intl/cs-CZ.json +4 -0
  1210. package/src/tag/intl/da-DK.json +4 -0
  1211. package/src/tag/intl/de-DE.json +4 -0
  1212. package/src/tag/intl/el-GR.json +4 -0
  1213. package/src/tag/intl/en-US.json +4 -0
  1214. package/src/tag/intl/es-ES.json +4 -0
  1215. package/src/tag/intl/et-EE.json +4 -0
  1216. package/src/tag/intl/fi-FI.json +4 -0
  1217. package/src/tag/intl/fr-FR.json +4 -0
  1218. package/src/tag/intl/he-IL.json +4 -0
  1219. package/src/tag/intl/hr-HR.json +4 -0
  1220. package/src/tag/intl/hu-HU.json +4 -0
  1221. package/src/tag/intl/index.ts +123 -0
  1222. package/src/tag/intl/it-IT.json +4 -0
  1223. package/src/tag/intl/ja-JP.json +4 -0
  1224. package/src/tag/intl/ko-KR.json +4 -0
  1225. package/src/tag/intl/lt-LT.json +4 -0
  1226. package/src/tag/intl/lv-LV.json +4 -0
  1227. package/src/tag/intl/nb-NO.json +4 -0
  1228. package/src/tag/intl/nl-NL.json +4 -0
  1229. package/src/tag/intl/pl-PL.json +4 -0
  1230. package/src/tag/intl/pt-BR.json +4 -0
  1231. package/src/tag/intl/pt-PT.json +4 -0
  1232. package/src/tag/intl/ro-RO.json +4 -0
  1233. package/src/tag/intl/ru-RU.json +4 -0
  1234. package/src/tag/intl/sk-SK.json +4 -0
  1235. package/src/tag/intl/sl-SI.json +4 -0
  1236. package/src/tag/intl/sr-SP.json +4 -0
  1237. package/src/tag/intl/sv-SE.json +4 -0
  1238. package/src/tag/intl/tr-TR.json +4 -0
  1239. package/src/tag/intl/uk-UA.json +4 -0
  1240. package/src/tag/intl/zh-CN.json +4 -0
  1241. package/src/tag/intl/zh-TW.json +4 -0
  1242. package/src/textfield/createTextField.ts +104 -14
  1243. package/src/toast/createToast.ts +39 -6
  1244. package/src/toast/createToastRegion.ts +28 -15
  1245. package/src/toast/intl/ar-AE.json +4 -0
  1246. package/src/toast/intl/bg-BG.json +4 -0
  1247. package/src/toast/intl/cs-CZ.json +4 -0
  1248. package/src/toast/intl/da-DK.json +4 -0
  1249. package/src/toast/intl/de-DE.json +4 -0
  1250. package/src/toast/intl/el-GR.json +4 -0
  1251. package/src/toast/intl/en-US.json +4 -0
  1252. package/src/toast/intl/es-ES.json +4 -0
  1253. package/src/toast/intl/et-EE.json +4 -0
  1254. package/src/toast/intl/fi-FI.json +4 -0
  1255. package/src/toast/intl/fr-FR.json +4 -0
  1256. package/src/toast/intl/he-IL.json +4 -0
  1257. package/src/toast/intl/hr-HR.json +4 -0
  1258. package/src/toast/intl/hu-HU.json +4 -0
  1259. package/src/toast/intl/index.ts +123 -0
  1260. package/src/toast/intl/it-IT.json +4 -0
  1261. package/src/toast/intl/ja-JP.json +4 -0
  1262. package/src/toast/intl/ko-KR.json +4 -0
  1263. package/src/toast/intl/lt-LT.json +4 -0
  1264. package/src/toast/intl/lv-LV.json +4 -0
  1265. package/src/toast/intl/nb-NO.json +4 -0
  1266. package/src/toast/intl/nl-NL.json +4 -0
  1267. package/src/toast/intl/pl-PL.json +4 -0
  1268. package/src/toast/intl/pt-BR.json +4 -0
  1269. package/src/toast/intl/pt-PT.json +4 -0
  1270. package/src/toast/intl/ro-RO.json +4 -0
  1271. package/src/toast/intl/ru-RU.json +4 -0
  1272. package/src/toast/intl/sk-SK.json +4 -0
  1273. package/src/toast/intl/sl-SI.json +4 -0
  1274. package/src/toast/intl/sr-SP.json +4 -0
  1275. package/src/toast/intl/sv-SE.json +4 -0
  1276. package/src/toast/intl/tr-TR.json +4 -0
  1277. package/src/toast/intl/uk-UA.json +4 -0
  1278. package/src/toast/intl/zh-CN.json +4 -0
  1279. package/src/toast/intl/zh-TW.json +4 -0
  1280. package/src/toggle/createToggle.ts +96 -15
  1281. package/src/tokenfield/createToken.ts +82 -0
  1282. package/src/tokenfield/createTokenField.ts +859 -0
  1283. package/src/tokenfield/index.ts +10 -0
  1284. package/src/toolbar/createToolbar.ts +26 -5
  1285. package/src/tooltip/createPreviewTrigger.ts +301 -0
  1286. package/src/tooltip/createSafeArea.ts +165 -0
  1287. package/src/tooltip/createTooltip.ts +15 -1
  1288. package/src/tooltip/createTooltipTrigger.ts +24 -3
  1289. package/src/tooltip/index.ts +7 -0
  1290. package/src/tooltip/intl/index.ts +76 -0
  1291. package/src/tree/createTree.ts +66 -50
  1292. package/src/tree/createTreeItem.ts +85 -21
  1293. package/src/tree/createTreeSelectionCheckbox.ts +29 -28
  1294. package/src/tree/intl/ar-AE.json +4 -0
  1295. package/src/tree/intl/bg-BG.json +4 -0
  1296. package/src/tree/intl/cs-CZ.json +4 -0
  1297. package/src/tree/intl/da-DK.json +4 -0
  1298. package/src/tree/intl/de-DE.json +4 -0
  1299. package/src/tree/intl/el-GR.json +4 -0
  1300. package/src/tree/intl/en-US.json +4 -0
  1301. package/src/tree/intl/es-ES.json +4 -0
  1302. package/src/tree/intl/et-EE.json +4 -0
  1303. package/src/tree/intl/fi-FI.json +4 -0
  1304. package/src/tree/intl/fr-FR.json +4 -0
  1305. package/src/tree/intl/he-IL.json +4 -0
  1306. package/src/tree/intl/hr-HR.json +4 -0
  1307. package/src/tree/intl/hu-HU.json +4 -0
  1308. package/src/tree/intl/index.ts +123 -0
  1309. package/src/tree/intl/it-IT.json +4 -0
  1310. package/src/tree/intl/ja-JP.json +4 -0
  1311. package/src/tree/intl/ko-KR.json +4 -0
  1312. package/src/tree/intl/lt-LT.json +4 -0
  1313. package/src/tree/intl/lv-LV.json +4 -0
  1314. package/src/tree/intl/nb-NO.json +4 -0
  1315. package/src/tree/intl/nl-NL.json +4 -0
  1316. package/src/tree/intl/pl-PL.json +4 -0
  1317. package/src/tree/intl/pt-BR.json +4 -0
  1318. package/src/tree/intl/pt-PT.json +4 -0
  1319. package/src/tree/intl/ro-RO.json +4 -0
  1320. package/src/tree/intl/ru-RU.json +4 -0
  1321. package/src/tree/intl/sk-SK.json +4 -0
  1322. package/src/tree/intl/sl-SI.json +4 -0
  1323. package/src/tree/intl/sr-SP.json +4 -0
  1324. package/src/tree/intl/sv-SE.json +4 -0
  1325. package/src/tree/intl/tr-TR.json +4 -0
  1326. package/src/tree/intl/uk-UA.json +4 -0
  1327. package/src/tree/intl/zh-CN.json +4 -0
  1328. package/src/tree/intl/zh-TW.json +4 -0
  1329. package/src/tree/types.ts +35 -2
  1330. package/src/utils/ShadowTreeWalker.ts +249 -0
  1331. package/src/utils/animation.ts +106 -85
  1332. package/src/utils/capture.ts +51 -0
  1333. package/src/utils/createDescription.ts +31 -8
  1334. package/src/utils/dom.ts +314 -33
  1335. package/src/utils/domAttrs.ts +84 -0
  1336. package/src/utils/env.ts +2 -0
  1337. package/src/utils/events.ts +39 -3
  1338. package/src/utils/filterDOMProps.ts +34 -2
  1339. package/src/utils/focus.ts +186 -32
  1340. package/src/utils/geometry.ts +15 -1
  1341. package/src/utils/getMetaValue.ts +57 -0
  1342. package/src/utils/getNonce.ts +40 -0
  1343. package/src/utils/globalListeners.ts +16 -3
  1344. package/src/utils/index.ts +14 -0
  1345. package/src/utils/keyboard.ts +15 -1
  1346. package/src/utils/mergeProps.ts +149 -16
  1347. package/src/utils/owner.ts +26 -0
  1348. package/src/utils/platform.ts +15 -1
  1349. package/src/utils/reactivity.ts +2 -0
  1350. package/src/utils/refs.ts +53 -0
  1351. package/src/utils/runAfterTransition.ts +117 -0
  1352. package/src/utils/scrollIntoView.ts +14 -0
  1353. package/src/utils/splitProps.ts +70 -0
  1354. package/src/utils/textSelection.ts +15 -1
  1355. package/src/virtualizer/ScrollView.ts +210 -0
  1356. package/src/virtualizer/index.ts +2 -0
  1357. package/src/virtualizer/utils.ts +100 -0
  1358. package/src/visually-hidden/createVisuallyHidden.ts +20 -4
  1359. package/dist/_chunk/createInteractionModality.js +0 -268
  1360. package/dist/_chunk/createInteractionModality.js.map +0 -1
  1361. package/dist/_chunk/createInteractionModality.jsx +0 -268
  1362. package/dist/_chunk/createInteractionModality.jsx.map +0 -1
  1363. package/dist/_chunk/focus2.js +0 -631
  1364. package/dist/_chunk/focus2.js.map +0 -1
  1365. package/dist/_chunk/focus2.jsx +0 -631
  1366. package/dist/_chunk/focus2.jsx.map +0 -1
  1367. package/dist/_chunk/visually-hidden.js.map +0 -1
  1368. package/dist/_chunk/visually-hidden.jsx.map +0 -1
  1369. package/dist/checkbox/createCheckboxGroupState.d.ts +0 -71
  1370. package/dist/checkbox/createCheckboxGroupState.d.ts.map +0 -1
  1371. package/dist/radio/createRadioGroupState.d.ts +0 -77
  1372. package/dist/radio/createRadioGroupState.d.ts.map +0 -1
  1373. package/dist/toggle/createToggleState.d.ts +0 -34
  1374. package/dist/toggle/createToggleState.d.ts.map +0 -1
  1375. package/src/checkbox/createCheckboxGroupState.ts +0 -174
  1376. package/src/radio/createRadioGroupState.ts +0 -177
  1377. package/src/toggle/createToggleState.ts +0 -86
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","names":["createId","mergeProps","mergeProps"],"sources":["../../src/radio/createRadioGroup.ts","../../src/radio/createRadio.ts"],"sourcesContent":["/**\n * Radio group hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n *\n * This is a 1:1 port of @react-aria/radio's useRadioGroup hook.\n */\n\nimport { JSX } from \"solid-js\";\nimport { createField } from \"../label/createField\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { focusSafely, getEventTarget } from \"../utils\";\nimport { useLocale } from \"../i18n\";\nimport { createId } from \"../ssr\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { type RadioGroupState, type ValidityState } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaRadioGroupProps {\n /** The content to display as the label. */\n label?: JSX.Element;\n /** A description for the radio group. Provides additional context. */\n description?: JSX.Element;\n /** An error message for the radio group. */\n errorMessage?:\n | JSX.Element\n | ((validation: { isInvalid: boolean; validationErrors: string[] }) => JSX.Element);\n /** Whether the radio group is disabled. */\n isDisabled?: boolean;\n /** Whether the radio group is read only. */\n isReadOnly?: boolean;\n /** Whether the radio group is required. */\n isRequired?: boolean;\n /** Whether the radio group is invalid. */\n isInvalid?: boolean;\n /** The axis the Radio Button(s) should align with. Defaults to 'vertical'. */\n orientation?: \"horizontal\" | \"vertical\";\n /** The name of the radio group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the radio group with. */\n form?: string;\n /** Validation behavior for the radio group. */\n validationBehavior?: \"aria\" | \"native\";\n /** Handler that is called when the radio group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface RadioGroupAria {\n /** Props for the radio group wrapper element. */\n radioGroupProps: JSX.HTMLAttributes<HTMLDivElement>;\n /** Props for the radio group's visible label (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio group is invalid. */\n isInvalid: boolean;\n /** Validation errors, if any. */\n validationErrors: string[];\n /** Validation details, if any. */\n validationDetails: ValidityState;\n}\n\n// WeakMap to share data between radio group and radio items\ninterface RadioGroupData {\n name: string;\n form: string | undefined;\n descriptionId: string | undefined;\n errorMessageId: string | undefined;\n validationBehavior: \"aria\" | \"native\";\n}\n\nexport const radioGroupData: WeakMap<RadioGroupState, RadioGroupData> = new WeakMap();\n\n/**\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n */\nexport function createRadioGroup(\n props: MaybeAccessor<AriaRadioGroupProps>,\n state: RadioGroupState,\n): RadioGroupAria {\n const getProps = () => access(props);\n const locale = useLocale();\n\n const orientation = () => getProps().orientation ?? \"vertical\";\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isRequired = () => getProps().isRequired ?? false;\n const isDisabled = () => getProps().isDisabled ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const displayValidation = () => state.displayValidation();\n const validationErrors = () => displayValidation().validationErrors;\n const validationDetails = () => displayValidation().validationDetails;\n const isInvalid = () => displayValidation().isInvalid;\n const fallbackErrorMessage = () => {\n const errors = validationErrors();\n return errors.length > 0 ? errors : undefined;\n };\n\n const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({\n get id() {\n return getProps().id;\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n get description() {\n return getProps().description;\n },\n get errorMessage() {\n return getProps().errorMessage ?? fallbackErrorMessage();\n },\n get isInvalid() {\n return isInvalid();\n },\n // Radio group is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: \"span\",\n });\n\n // Handle focus within - reset focusable radio when group loses focus and no selection\n const { focusWithinProps } = createFocusWithin({\n onBlurWithin(e: FocusEvent) {\n getProps().onBlur?.(e);\n if (!state.selectedValue()) {\n state.setLastFocusedValue(null);\n }\n },\n onFocusWithin: (e: FocusEvent) => getProps().onFocus?.(e),\n onFocusWithinChange: (isFocused: boolean) => getProps().onFocusChange?.(isFocused),\n });\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const groupName = getProps().name ?? createId();\n\n radioGroupData.set(state, {\n name: groupName,\n form: getProps().form,\n descriptionId: descriptionProps.id,\n errorMessageId: errorMessageProps.id,\n validationBehavior: validationBehavior(),\n });\n\n const getNavigableRadios = (root: HTMLElement): HTMLInputElement[] => {\n return Array.from(root.querySelectorAll('input[type=\"radio\"]')).filter(\n (el): el is HTMLInputElement => {\n return el instanceof HTMLInputElement && !el.matches(\":disabled\");\n },\n );\n };\n\n // Keyboard navigation parity with React Aria.\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (e) => {\n let nextDir: \"next\" | \"prev\" | null = null;\n const currentOrientation = orientation();\n const isHorizontal = currentOrientation !== \"vertical\";\n const isRTL = locale().direction === \"rtl\" && isHorizontal;\n\n switch (e.key) {\n case \"ArrowRight\":\n nextDir = isRTL ? \"prev\" : \"next\";\n break;\n case \"ArrowLeft\":\n nextDir = isRTL ? \"next\" : \"prev\";\n break;\n case \"ArrowDown\":\n nextDir = \"next\";\n break;\n case \"ArrowUp\":\n nextDir = \"prev\";\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const root = e.currentTarget;\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n const radios = getNavigableRadios(root);\n if (radios.length === 0) {\n return;\n }\n\n const eventTarget = getEventTarget<Element>(e);\n const activeElement = root.ownerDocument.activeElement;\n\n const currentRadio =\n eventTarget instanceof HTMLInputElement && eventTarget.type === \"radio\"\n ? eventTarget\n : activeElement instanceof HTMLInputElement && activeElement.type === \"radio\"\n ? activeElement\n : null;\n\n const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;\n\n let nextIndex: number;\n if (nextDir === \"next\") {\n nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;\n } else {\n nextIndex =\n currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;\n }\n\n const nextRadio = radios[nextIndex];\n if (!nextRadio) {\n return;\n }\n\n focusSafely(nextRadio);\n state.setSelectedValue(nextRadio.value);\n };\n\n return {\n get radioGroupProps() {\n return mergeProps(domProps(), focusWithinProps as unknown as Record<string, unknown>, {\n role: \"radiogroup\",\n onKeyDown,\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": getProps()[\"aria-errormessage\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": isRequired() || undefined,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-orientation\": orientation(),\n ...fieldProps,\n }) as JSX.HTMLAttributes<HTMLDivElement>;\n },\n labelProps: labelProps as JSX.HTMLAttributes<HTMLElement>,\n descriptionProps,\n errorMessageProps,\n get isInvalid() {\n return isInvalid();\n },\n get validationErrors() {\n return validationErrors();\n },\n get validationDetails() {\n return validationDetails();\n },\n };\n}\n","/**\n * Radio hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n *\n * This is a 1:1 port of @react-aria/radio's useRadio hook.\n */\n\nimport { JSX, Accessor, createEffect } from \"solid-js\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type RadioGroupState, radioGroupSyncVersion } from \"@proyecto-viviana/solid-stately\";\nimport { radioGroupData } from \"./createRadioGroup\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\n\nexport interface AriaRadioProps {\n /** The value of the radio button, used when submitting an HTML form. */\n value: string;\n /** Whether the radio button is disabled. */\n isDisabled?: boolean;\n /** The label for the radio button. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface RadioAria {\n /** Props for the label wrapper element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props for the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the radio's description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio is disabled. */\n isDisabled: boolean;\n /** Whether the radio is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the radio is in a pressed state. */\n isPressed: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n */\nexport function createRadio(\n props: MaybeAccessor<AriaRadioProps>,\n state: RadioGroupState,\n ref: () => HTMLInputElement | null,\n): RadioAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled || state.isDisabled;\n const value = () => getProps().value;\n const isSelected: Accessor<boolean> = () => {\n const selected = state.selectedValue();\n const v = value();\n return selected === v;\n };\n\n createEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // SolidJS-specific: Sync DOM checked state whenever selection changes\n // This handles:\n // 1. Initial render with controlled value\n // 2. Controlled mode where parent doesn't update value after click\n // 3. Native radio group behavior (clicking one unchecks others)\n //\n // Unlike React's VDOM reconciliation that re-applies all props on every render,\n // SolidJS only updates when signals change. Native radio behavior can change\n // the DOM checked state without our knowledge, so we need to actively sync.\n //\n // We track `syncVersion` to ensure this effect runs on EVERY selection attempt,\n // even in controlled mode where isSelected() may not change.\n createEffect(() => {\n // The WeakMap accessor is outside the public API to maintain React Aria parity.\n const syncVersion = radioGroupSyncVersion.get(state);\n syncVersion?.();\n\n const shouldBeChecked = isSelected();\n const inputEl = ref();\n if (!inputEl) return;\n\n if (inputEl.checked !== shouldBeChecked) {\n inputEl.checked = shouldBeChecked;\n }\n });\n\n // SolidJS-specific: Unlike React, the input's `checked` state can get out of sync\n // with our reactive state. This happens because:\n // 1. A readonly `<input type=\"radio\" />` is always \"checkable\" in the browser\n // 2. Even controlled inputs (`<input checked={isChecked} />`) will change their\n // internal `checked` state when clicked, regardless of what the signal says\n //\n // To prevent this, we force the input's `checked` DOM property to match our state\n // after processing the change. This is a common pattern across SolidJS component\n // libraries (see CREDITS.md for attribution).\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n e.stopPropagation();\n\n const target = e.target as HTMLInputElement;\n\n // Guard against disabled state - JSDOM's fireEvent may bypass disabled check\n if (isDisabled()) {\n target.checked = isSelected();\n return;\n }\n\n state.setSelectedValue(value());\n\n // Focus the input when clicked\n // In real browsers this happens automatically, but JSDOM/fireEvent doesn't trigger it\n target.focus();\n\n // Force the DOM checked state to match our reactive state\n // This handles controlled mode where the parent might not update the value\n target.checked = isSelected();\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.setSelectedValue(value());\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n onFocus(e: FocusEvent) {\n getProps().onFocus?.(e);\n state.setLastFocusedValue(value());\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n const interactions = mergeProps(pressProps, focusableProps);\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const getTabIndex = (): number | undefined => {\n if (isDisabled()) {\n return undefined;\n }\n\n const selected = state.selectedValue();\n const lastFocused = state.lastFocusedValue();\n const currentValue = value();\n\n if (selected != null) {\n if (selected === currentValue) {\n return 0;\n }\n return -1;\n } else {\n if (lastFocused === currentValue || lastFocused == null) {\n return 0;\n }\n return -1;\n }\n };\n\n const getGroupData = () => radioGroupData.get(state);\n\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // The radio's own description slot id — resolves only once an element with\n // this id is rendered (e.g. a `<Text slot=\"description\">` child).\n const descriptionId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n onMouseDown: (e: MouseEvent) => e.preventDefault(),\n }),\n get inputProps() {\n const p = getProps();\n const groupData = getGroupData();\n\n // Order mirrors upstream useRadio: the user's aria-describedby, then the\n // radio's own description, then the group's error message (when invalid)\n // and the group's shared description.\n const describedByIds: string[] = [];\n if (p[\"aria-describedby\"]) {\n describedByIds.push(p[\"aria-describedby\"]);\n }\n const ownDescriptionId = descriptionId();\n if (ownDescriptionId) {\n describedByIds.push(ownDescriptionId);\n }\n if (state.isInvalid && groupData?.errorMessageId) {\n describedByIds.push(groupData.errorMessageId);\n }\n if (groupData?.descriptionId) {\n describedByIds.push(groupData.descriptionId);\n }\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(\" \") : undefined;\n const validationBehavior = groupData?.validationBehavior ?? \"native\";\n\n return mergeProps(domProps(), interactions, {\n type: \"radio\" as const,\n name: groupData?.name,\n form: groupData?.form,\n tabIndex: getTabIndex(),\n disabled: isDisabled(),\n required: validationBehavior === \"native\" ? state.isRequired : undefined,\n checked: isSelected(),\n value: value(),\n onChange,\n \"aria-describedby\": ariaDescribedBy,\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n isDisabled: isDisabled(),\n isSelected,\n isPressed: combinedIsPressed,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"radio.js","names":["createId"],"sources":["../../src/radio/createRadioGroup.ts","../../src/radio/createRadio.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadioGroup.ts\n\n/**\n * Radio group hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n *\n * This is a 1:1 port of @react-aria/radio's useRadioGroup hook.\n */\n\nimport { createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createField } from \"../label/createField\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { focusSafely, getEventTarget } from \"../utils\";\nimport { useLocale } from \"../i18n\";\nimport { createId } from \"../ssr\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { type RadioGroupState, type ValidityState } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaRadioGroupProps {\n /** The content to display as the label. */\n label?: JSX.Element;\n /** A description for the radio group. Provides additional context. */\n description?: JSX.Element;\n /** An error message for the radio group. */\n errorMessage?:\n | JSX.Element\n | ((validation: { isInvalid: boolean; validationErrors: string[] }) => JSX.Element);\n /** Whether the radio group is disabled. */\n isDisabled?: boolean;\n /** Whether the radio group is read only. */\n isReadOnly?: boolean;\n /** Whether the radio group is required. */\n isRequired?: boolean;\n /** Whether the radio group is invalid. */\n isInvalid?: boolean;\n /** The axis the Radio Button(s) should align with. Defaults to 'vertical'. */\n orientation?: \"horizontal\" | \"vertical\";\n /** The name of the radio group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the radio group with. */\n form?: string;\n /** Validation behavior for the radio group. */\n validationBehavior?: \"aria\" | \"native\";\n /** Handler that is called when the radio group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface RadioGroupAria {\n /** Props for the radio group wrapper element. */\n radioGroupProps: JSX.HTMLAttributes<HTMLDivElement>;\n /** Props for the radio group's visible label (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio group is invalid. */\n isInvalid: boolean;\n /** Validation errors, if any. */\n validationErrors: string[];\n /** Validation details, if any. */\n validationDetails: ValidityState;\n}\n\n// WeakMap to share data between radio group and radio items\ninterface RadioGroupData {\n name: string;\n form: string | undefined;\n descriptionId: string | undefined;\n errorMessageId: string | undefined;\n validationBehavior: \"aria\" | \"native\";\n}\n\nexport const radioGroupData: WeakMap<RadioGroupState, RadioGroupData> = new WeakMap();\n\n/**\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n */\nexport function createRadioGroup(\n props: MaybeAccessor<AriaRadioGroupProps>,\n state: RadioGroupState,\n): RadioGroupAria {\n const getProps = () => access(props);\n const locale = useLocale();\n\n const orientation = () => getProps().orientation ?? \"vertical\";\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isRequired = () => getProps().isRequired ?? false;\n const isDisabled = () => getProps().isDisabled ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const displayValidation = () => state.displayValidation();\n const validationErrors = () => displayValidation().validationErrors;\n const validationDetails = () => displayValidation().validationDetails;\n const isInvalid = () => displayValidation().isInvalid;\n const fallbackErrorMessage = () => {\n const errors = validationErrors();\n return errors.length > 0 ? errors : undefined;\n };\n\n // Keep the `createField` getters intact. Destructuring `fieldProps` would\n // freeze the first `aria-describedby` snapshot (RAC `useField.ts:51-60`).\n // `aria-describedby` must reach `createField` so slot ids concatenate with\n // the user prop instead of overwriting it (`useField.ts:51-60`).\n const field = createField({\n get id() {\n return getProps().id;\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return getProps()[\"aria-describedby\"];\n },\n get description() {\n return getProps().description;\n },\n get errorMessage() {\n return getProps().errorMessage ?? fallbackErrorMessage();\n },\n get isInvalid() {\n return isInvalid();\n },\n // Radio group is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: \"span\",\n });\n\n // Handle focus within - reset focusable radio when group loses focus and no selection\n const { focusWithinProps } = createFocusWithin({\n onBlurWithin(e: FocusEvent) {\n getProps().onBlur?.(e);\n if (!state.selectedValue()) {\n state.setLastFocusedValue(null);\n }\n },\n onFocusWithin: (e: FocusEvent) => getProps().onFocus?.(e),\n onFocusWithinChange: (isFocused: boolean) => getProps().onFocusChange?.(isFocused),\n });\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const groupName = getProps().name ?? createId();\n\n const updateRadioGroupData = () => {\n radioGroupData.set(state, {\n name: groupName,\n form: getProps().form,\n descriptionId:\n typeof field.descriptionProps.id === \"string\" ? field.descriptionProps.id : undefined,\n errorMessageId:\n typeof field.errorMessageProps.id === \"string\" ? field.errorMessageProps.id : undefined,\n validationBehavior: validationBehavior(),\n });\n };\n updateRadioGroupData();\n createTrackedEffect(updateRadioGroupData);\n\n const getNavigableRadios = (root: HTMLElement): HTMLInputElement[] => {\n return Array.from(root.querySelectorAll('input[type=\"radio\"]')).filter(\n (el): el is HTMLInputElement => {\n return el instanceof HTMLInputElement && !el.matches(\":disabled\");\n },\n );\n };\n\n // Keyboard navigation parity with React Aria.\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (e) => {\n let nextDir: \"next\" | \"prev\" | null = null;\n const currentOrientation = orientation();\n const isHorizontal = currentOrientation !== \"vertical\";\n const isRTL = locale().direction === \"rtl\" && isHorizontal;\n\n switch (e.key) {\n case \"ArrowRight\":\n nextDir = isRTL ? \"prev\" : \"next\";\n break;\n case \"ArrowLeft\":\n nextDir = isRTL ? \"next\" : \"prev\";\n break;\n case \"ArrowDown\":\n nextDir = \"next\";\n break;\n case \"ArrowUp\":\n nextDir = \"prev\";\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const root = e.currentTarget;\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n const radios = getNavigableRadios(root);\n if (radios.length === 0) {\n return;\n }\n\n const eventTarget = getEventTarget<Element>(e);\n const activeElement = root.ownerDocument.activeElement;\n\n const currentRadio =\n eventTarget instanceof HTMLInputElement && eventTarget.type === \"radio\"\n ? eventTarget\n : activeElement instanceof HTMLInputElement && activeElement.type === \"radio\"\n ? activeElement\n : null;\n\n const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;\n\n let nextIndex: number;\n if (nextDir === \"next\") {\n nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;\n } else {\n nextIndex =\n currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;\n }\n\n const nextRadio = radios[nextIndex];\n if (!nextRadio) {\n return;\n }\n\n focusSafely(nextRadio);\n state.setSelectedValue(nextRadio.value);\n };\n\n return {\n get radioGroupProps() {\n return mergeProps(domProps(), focusWithinProps as unknown as Record<string, unknown>, {\n role: \"radiogroup\",\n onKeyDown,\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": getProps()[\"aria-errormessage\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": isRequired() || undefined,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-orientation\": orientation(),\n ...field.fieldProps,\n }) as JSX.HTMLAttributes<HTMLDivElement>;\n },\n get labelProps() {\n return field.labelProps as JSX.HTMLAttributes<HTMLElement>;\n },\n get descriptionProps() {\n return field.descriptionProps;\n },\n get errorMessageProps() {\n return field.errorMessageProps;\n },\n get isInvalid() {\n return isInvalid();\n },\n get validationErrors() {\n return validationErrors();\n },\n get validationDetails() {\n return validationDetails();\n },\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadio.ts\n\n/**\n * Radio hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n *\n * This is a 1:1 port of @react-aria/radio's useRadio hook.\n */\n\nimport { Accessor, createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { isServer } from \"@solidjs/web\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type RadioGroupState, radioGroupSyncVersion } from \"@proyecto-viviana/solid-stately\";\nimport { radioGroupData } from \"./createRadioGroup\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\nimport { createFormValidation } from \"../form/createFormValidation\";\nimport { createFormReset } from \"../form/createFormReset\";\n\nexport interface AriaRadioProps {\n /** The value of the radio button, used when submitting an HTML form. */\n value: string;\n /** Whether the radio button is disabled. */\n isDisabled?: boolean;\n /** The label for the radio button. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface RadioAria {\n /** Props for the label wrapper element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props for the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /**\n * The input's `aria-describedby`. Kept off `inputProps` so a `createSlotId`\n * probe (RAC `useSlotId` / `useId.ts:135-149`) can patch the attribute\n * without a spread that recreates the input.\n */\n inputDescribedBy: Accessor<string | undefined>;\n /** Props for the radio's description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio is disabled. */\n isDisabled: boolean;\n /** Whether the radio is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the radio is in a pressed state. */\n isPressed: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n */\nexport function createRadio(\n props: MaybeAccessor<AriaRadioProps>,\n state: RadioGroupState,\n ref: () => HTMLInputElement | null,\n): RadioAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled || state.isDisabled;\n const value = () => getProps().value;\n const isSelected: Accessor<boolean> = () => {\n const selected = state.selectedValue();\n const v = value();\n return selected === v;\n };\n\n createTrackedEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // SolidJS-specific: Sync DOM checked state whenever selection changes\n // This handles:\n // 1. Initial render with controlled value\n // 2. Controlled mode where parent doesn't update value after click\n // 3. Native radio group behavior (clicking one unchecks others)\n //\n // Unlike React's VDOM reconciliation that re-applies all props on every render,\n // SolidJS only updates when signals change. Native radio behavior can change\n // the DOM checked state without our knowledge, so we need to actively sync.\n //\n // We track `syncVersion` to ensure this effect runs on EVERY selection attempt,\n // even in controlled mode where isSelected() may not change.\n createTrackedEffect(() => {\n // The WeakMap accessor is outside the public API to maintain React Aria parity.\n const syncVersion = radioGroupSyncVersion.get(state);\n syncVersion?.();\n\n const shouldBeChecked = isSelected();\n const inputEl = ref();\n if (!inputEl) return;\n\n if (inputEl.checked !== shouldBeChecked) {\n inputEl.checked = shouldBeChecked;\n }\n });\n\n // SolidJS-specific: Unlike React, the input's `checked` state can get out of sync\n // with our reactive state. This happens because:\n // 1. A readonly `<input type=\"radio\" />` is always \"checkable\" in the browser\n // 2. Even controlled inputs (`<input checked={isChecked} />`) will change their\n // internal `checked` state when clicked, regardless of what the signal says\n //\n // To prevent this, we force the input's `checked` DOM property to match our state\n // after processing the change. This is a common pattern across SolidJS component\n // libraries (see CREDITS.md for attribution).\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n e.stopPropagation();\n\n const target = e.target as HTMLInputElement;\n\n // Guard against disabled state - JSDOM's fireEvent may bypass disabled check\n if (isDisabled()) {\n target.checked = isSelected();\n return;\n }\n\n state.setSelectedValue(value());\n\n // Focus the input when clicked\n // In real browsers this happens automatically, but JSDOM/fireEvent doesn't trigger it\n target.focus();\n\n // Force the DOM checked state to match our reactive state\n // This handles controlled mode where the parent might not update the value\n target.checked = isSelected();\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.setSelectedValue(value());\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n onFocus(e: FocusEvent) {\n getProps().onFocus?.(e);\n state.setLastFocusedValue(value());\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n const interactions = mergeProps(pressProps, focusableProps);\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const getTabIndex = (): number | undefined => {\n if (isDisabled()) {\n return undefined;\n }\n\n const selected = state.selectedValue();\n const lastFocused = state.lastFocusedValue();\n const currentValue = value();\n\n if (selected != null) {\n if (selected === currentValue) {\n return 0;\n }\n return -1;\n } else {\n if (lastFocused === currentValue || lastFocused == null) {\n return 0;\n }\n return -1;\n }\n };\n\n const getGroupData = () => radioGroupData.get(state);\n\n // RAC `useRadio.ts:156-157`: native reset + custom validity on every radio.\n createFormReset(\n () => ref() ?? undefined,\n state.defaultSelectedValue,\n (value) => state.setSelectedValue(value),\n );\n createFormValidation(\n {\n get validationBehavior() {\n return getGroupData()?.validationBehavior ?? \"native\";\n },\n focus: () => ref()?.focus(),\n },\n state,\n () => ref() ?? undefined,\n );\n\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // The radio's own description slot id — resolves only once an element with\n // this id is rendered (e.g. a `<Text slot=\"description\">` child).\n const descriptionId = createSlotId();\n\n // The group's ids reach the radio through the `radioGroupData` WeakMap, a\n // snapshot rather than a signal, so the radio probes the DOM itself the way\n // `useSlotId` does (#258 replaces this path with group-level TextContext\n // slots). The probe is client-only: on the server the slot id is emitted as\n // is — `useSlotId` yields the raw id before its layout effect runs, and the\n // client probe patches the attribute after hydration. `document` does not\n // exist on the server; reading it there threw inside `renderToString` and the\n // route's error boundary rendered instead of the RadioGroup.\n const slotIdInDom = (id: string): boolean => isServer || document.getElementById(id) !== null;\n\n const inputDescribedBy: Accessor<string | undefined> = () => {\n const p = getProps();\n const groupData = getGroupData();\n\n // Order mirrors upstream useRadio: the user's aria-describedby, then the\n // radio's own description, then the group's error message (when invalid)\n // and the group's shared description.\n const describedByIds: string[] = [];\n if (p[\"aria-describedby\"]) {\n describedByIds.push(p[\"aria-describedby\"]);\n }\n const ownDescriptionId = descriptionId();\n if (ownDescriptionId) {\n describedByIds.push(ownDescriptionId);\n }\n if (state.isInvalid && groupData?.errorMessageId && slotIdInDom(groupData.errorMessageId)) {\n describedByIds.push(groupData.errorMessageId);\n }\n if (groupData?.descriptionId && slotIdInDom(groupData.descriptionId)) {\n describedByIds.push(groupData.descriptionId);\n }\n return describedByIds.length > 0 ? describedByIds.join(\" \") : undefined;\n };\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n onMouseDown: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n inputDescribedBy,\n get inputProps() {\n const groupData = getGroupData();\n const validationBehavior = groupData?.validationBehavior ?? \"native\";\n\n return mergeProps(domProps(), interactions, {\n type: \"radio\" as const,\n name: groupData?.name,\n form: groupData?.form,\n tabIndex: getTabIndex(),\n disabled: isDisabled(),\n required: validationBehavior === \"native\" ? state.isRequired : undefined,\n checked: isSelected(),\n value: value(),\n onChange,\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n isDisabled: isDisabled(),\n isSelected,\n isPressed: combinedIsPressed,\n };\n}\n"],"mappings":"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"}
@@ -1,16 +1,52 @@
1
- import { t as createPress } from "./createPress.jsx";
2
- import { i as mergeProps$1, t as isDevEnv } from "./env.jsx";
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadio.ts
13
+ /*
14
+ * Copyright 2020 Adobe. All rights reserved.
15
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License. You may obtain a copy
17
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software distributed under
20
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
21
+ * OF ANY KIND, either express or implied. See the License for the specific language
22
+ * governing permissions and limitations under the License.
23
+ */
24
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadioGroup.ts
25
+ import { t as mergeProps } from "./mergeProps.jsx";
3
26
  import { t as filterDOMProps } from "./filterDOMProps.jsx";
4
27
  import { t as access } from "./reactivity.jsx";
5
- import { a as getEventTarget, t as focusSafely } from "./focus.jsx";
28
+ import { r as getEventTarget, w as focusSafely } from "./dom.jsx";
29
+ import { t as isDevEnv } from "./env.jsx";
30
+ import { t as createPress } from "./createPress.jsx";
6
31
  import { t as createFocusWithin } from "./createFocusWithin.jsx";
7
32
  import { n as createFocusable } from "./createFocusable.jsx";
8
33
  import { i as useLocale } from "./locale.jsx";
9
34
  import { createId as createId$1, createSlotId } from "../ssr/index.jsx";
35
+ import { t as createFormValidation } from "./createFormValidation.jsx";
36
+ import { t as createFormReset } from "./createFormReset.jsx";
10
37
  import { t as createField } from "./createField.jsx";
11
- import { createEffect } from "solid-js";
38
+ import { createTrackedEffect } from "solid-js";
39
+ import { isServer } from "@solidjs/web";
12
40
  import { createRadioGroupState, radioGroupSyncVersion, radioGroupSyncVersion as radioGroupSyncVersion$1 } from "@proyecto-viviana/solid-stately";
13
41
  //#region src/radio/createRadioGroup.ts
42
+ /**
43
+ * Radio group hook for Solidaria
44
+ *
45
+ * Provides the behavior and accessibility implementation for a radio group component.
46
+ * Radio groups allow users to select a single item from a list of mutually exclusive options.
47
+ *
48
+ * This is a 1:1 port of @react-aria/radio's useRadioGroup hook.
49
+ */
14
50
  const radioGroupData = /* @__PURE__ */ new WeakMap();
15
51
  /**
16
52
  * Provides the behavior and accessibility implementation for a radio group component.
@@ -32,7 +68,7 @@ function createRadioGroup(props, state) {
32
68
  const errors = validationErrors();
33
69
  return errors.length > 0 ? errors : void 0;
34
70
  };
35
- const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({
71
+ const field = createField({
36
72
  get id() {
37
73
  return getProps().id;
38
74
  },
@@ -45,6 +81,9 @@ function createRadioGroup(props, state) {
45
81
  get "aria-labelledby"() {
46
82
  return getProps()["aria-labelledby"];
47
83
  },
84
+ get "aria-describedby"() {
85
+ return getProps()["aria-describedby"];
86
+ },
48
87
  get description() {
49
88
  return getProps().description;
50
89
  },
@@ -66,13 +105,17 @@ function createRadioGroup(props, state) {
66
105
  });
67
106
  const domProps = () => filterDOMProps(getProps(), { labelable: true });
68
107
  const groupName = getProps().name ?? createId$1();
69
- radioGroupData.set(state, {
70
- name: groupName,
71
- form: getProps().form,
72
- descriptionId: descriptionProps.id,
73
- errorMessageId: errorMessageProps.id,
74
- validationBehavior: validationBehavior()
75
- });
108
+ const updateRadioGroupData = () => {
109
+ radioGroupData.set(state, {
110
+ name: groupName,
111
+ form: getProps().form,
112
+ descriptionId: typeof field.descriptionProps.id === "string" ? field.descriptionProps.id : void 0,
113
+ errorMessageId: typeof field.errorMessageProps.id === "string" ? field.errorMessageProps.id : void 0,
114
+ validationBehavior: validationBehavior()
115
+ });
116
+ };
117
+ updateRadioGroupData();
118
+ createTrackedEffect(updateRadioGroupData);
76
119
  const getNavigableRadios = (root) => {
77
120
  return Array.from(root.querySelectorAll("input[type=\"radio\"]")).filter((el) => {
78
121
  return el instanceof HTMLInputElement && !el.matches(":disabled");
@@ -116,7 +159,7 @@ function createRadioGroup(props, state) {
116
159
  };
117
160
  return {
118
161
  get radioGroupProps() {
119
- return mergeProps$1(domProps(), focusWithinProps, {
162
+ return mergeProps(domProps(), focusWithinProps, {
120
163
  role: "radiogroup",
121
164
  onKeyDown,
122
165
  "aria-invalid": isInvalid() || void 0,
@@ -125,12 +168,18 @@ function createRadioGroup(props, state) {
125
168
  "aria-required": isRequired() || void 0,
126
169
  "aria-disabled": isDisabled() || void 0,
127
170
  "aria-orientation": orientation(),
128
- ...fieldProps
171
+ ...field.fieldProps
129
172
  });
130
173
  },
131
- labelProps,
132
- descriptionProps,
133
- errorMessageProps,
174
+ get labelProps() {
175
+ return field.labelProps;
176
+ },
177
+ get descriptionProps() {
178
+ return field.descriptionProps;
179
+ },
180
+ get errorMessageProps() {
181
+ return field.errorMessageProps;
182
+ },
134
183
  get isInvalid() {
135
184
  return isInvalid();
136
185
  },
@@ -163,13 +212,13 @@ function createRadio(props, state, ref) {
163
212
  const isSelected = () => {
164
213
  return state.selectedValue() === value();
165
214
  };
166
- createEffect(() => {
215
+ createTrackedEffect(() => {
167
216
  const p = getProps();
168
217
  const hasChildren = p.children != null;
169
218
  const hasAriaLabel = p["aria-label"] != null || p["aria-labelledby"] != null;
170
219
  if (!hasChildren && !hasAriaLabel && isDevEnv()) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
171
220
  });
172
- createEffect(() => {
221
+ createTrackedEffect(() => {
173
222
  radioGroupSyncVersion.get(state)?.();
174
223
  const shouldBeChecked = isSelected();
175
224
  const inputEl = ref();
@@ -259,7 +308,7 @@ function createRadio(props, state, ref) {
259
308
  return getProps().onKeyUp;
260
309
  }
261
310
  }, ref);
262
- const interactions = mergeProps$1(pressProps, focusableProps);
311
+ const interactions = mergeProps(pressProps, focusableProps);
263
312
  const domProps = () => filterDOMProps(getProps(), { labelable: true });
264
313
  const getTabIndex = () => {
265
314
  if (isDisabled()) return;
@@ -275,25 +324,37 @@ function createRadio(props, state, ref) {
275
324
  }
276
325
  };
277
326
  const getGroupData = () => radioGroupData.get(state);
327
+ createFormReset(() => ref() ?? void 0, state.defaultSelectedValue, (value) => state.setSelectedValue(value));
328
+ createFormValidation({
329
+ get validationBehavior() {
330
+ return getGroupData()?.validationBehavior ?? "native";
331
+ },
332
+ focus: () => ref()?.focus()
333
+ }, state, () => ref() ?? void 0);
278
334
  const combinedIsPressed = () => isPressed() || isLabelPressed();
279
335
  const descriptionId = createSlotId();
336
+ const slotIdInDom = (id) => isServer || document.getElementById(id) !== null;
337
+ const inputDescribedBy = () => {
338
+ const p = getProps();
339
+ const groupData = getGroupData();
340
+ const describedByIds = [];
341
+ if (p["aria-describedby"]) describedByIds.push(p["aria-describedby"]);
342
+ const ownDescriptionId = descriptionId();
343
+ if (ownDescriptionId) describedByIds.push(ownDescriptionId);
344
+ if (state.isInvalid && groupData?.errorMessageId && slotIdInDom(groupData.errorMessageId)) describedByIds.push(groupData.errorMessageId);
345
+ if (groupData?.descriptionId && slotIdInDom(groupData.descriptionId)) describedByIds.push(groupData.descriptionId);
346
+ return describedByIds.length > 0 ? describedByIds.join(" ") : void 0;
347
+ };
280
348
  return {
281
- labelProps: mergeProps$1(labelPressProps, {
349
+ labelProps: mergeProps(labelPressProps, {
282
350
  onClick: (e) => e.preventDefault(),
283
351
  onMouseDown: (e) => e.preventDefault()
284
352
  }),
353
+ inputDescribedBy,
285
354
  get inputProps() {
286
- const p = getProps();
287
355
  const groupData = getGroupData();
288
- const describedByIds = [];
289
- if (p["aria-describedby"]) describedByIds.push(p["aria-describedby"]);
290
- const ownDescriptionId = descriptionId();
291
- if (ownDescriptionId) describedByIds.push(ownDescriptionId);
292
- if (state.isInvalid && groupData?.errorMessageId) describedByIds.push(groupData.errorMessageId);
293
- if (groupData?.descriptionId) describedByIds.push(groupData.descriptionId);
294
- const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(" ") : void 0;
295
356
  const validationBehavior = groupData?.validationBehavior ?? "native";
296
- return mergeProps$1(domProps(), interactions, {
357
+ return mergeProps(domProps(), interactions, {
297
358
  type: "radio",
298
359
  name: groupData?.name,
299
360
  form: groupData?.form,
@@ -302,8 +363,7 @@ function createRadio(props, state, ref) {
302
363
  required: validationBehavior === "native" ? state.isRequired : void 0,
303
364
  checked: isSelected(),
304
365
  value: value(),
305
- onChange,
306
- "aria-describedby": ariaDescribedBy
366
+ onChange
307
367
  });
308
368
  },
309
369
  get descriptionProps() {
@@ -1 +1 @@
1
- {"version":3,"file":"radio.jsx","names":["createId","mergeProps","mergeProps"],"sources":["../../src/radio/createRadioGroup.ts","../../src/radio/createRadio.ts"],"sourcesContent":["/**\n * Radio group hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n *\n * This is a 1:1 port of @react-aria/radio's useRadioGroup hook.\n */\n\nimport { JSX } from \"solid-js\";\nimport { createField } from \"../label/createField\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { focusSafely, getEventTarget } from \"../utils\";\nimport { useLocale } from \"../i18n\";\nimport { createId } from \"../ssr\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { type RadioGroupState, type ValidityState } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaRadioGroupProps {\n /** The content to display as the label. */\n label?: JSX.Element;\n /** A description for the radio group. Provides additional context. */\n description?: JSX.Element;\n /** An error message for the radio group. */\n errorMessage?:\n | JSX.Element\n | ((validation: { isInvalid: boolean; validationErrors: string[] }) => JSX.Element);\n /** Whether the radio group is disabled. */\n isDisabled?: boolean;\n /** Whether the radio group is read only. */\n isReadOnly?: boolean;\n /** Whether the radio group is required. */\n isRequired?: boolean;\n /** Whether the radio group is invalid. */\n isInvalid?: boolean;\n /** The axis the Radio Button(s) should align with. Defaults to 'vertical'. */\n orientation?: \"horizontal\" | \"vertical\";\n /** The name of the radio group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the radio group with. */\n form?: string;\n /** Validation behavior for the radio group. */\n validationBehavior?: \"aria\" | \"native\";\n /** Handler that is called when the radio group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface RadioGroupAria {\n /** Props for the radio group wrapper element. */\n radioGroupProps: JSX.HTMLAttributes<HTMLDivElement>;\n /** Props for the radio group's visible label (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio group is invalid. */\n isInvalid: boolean;\n /** Validation errors, if any. */\n validationErrors: string[];\n /** Validation details, if any. */\n validationDetails: ValidityState;\n}\n\n// WeakMap to share data between radio group and radio items\ninterface RadioGroupData {\n name: string;\n form: string | undefined;\n descriptionId: string | undefined;\n errorMessageId: string | undefined;\n validationBehavior: \"aria\" | \"native\";\n}\n\nexport const radioGroupData: WeakMap<RadioGroupState, RadioGroupData> = new WeakMap();\n\n/**\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n */\nexport function createRadioGroup(\n props: MaybeAccessor<AriaRadioGroupProps>,\n state: RadioGroupState,\n): RadioGroupAria {\n const getProps = () => access(props);\n const locale = useLocale();\n\n const orientation = () => getProps().orientation ?? \"vertical\";\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isRequired = () => getProps().isRequired ?? false;\n const isDisabled = () => getProps().isDisabled ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const displayValidation = () => state.displayValidation();\n const validationErrors = () => displayValidation().validationErrors;\n const validationDetails = () => displayValidation().validationDetails;\n const isInvalid = () => displayValidation().isInvalid;\n const fallbackErrorMessage = () => {\n const errors = validationErrors();\n return errors.length > 0 ? errors : undefined;\n };\n\n const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({\n get id() {\n return getProps().id;\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n get description() {\n return getProps().description;\n },\n get errorMessage() {\n return getProps().errorMessage ?? fallbackErrorMessage();\n },\n get isInvalid() {\n return isInvalid();\n },\n // Radio group is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: \"span\",\n });\n\n // Handle focus within - reset focusable radio when group loses focus and no selection\n const { focusWithinProps } = createFocusWithin({\n onBlurWithin(e: FocusEvent) {\n getProps().onBlur?.(e);\n if (!state.selectedValue()) {\n state.setLastFocusedValue(null);\n }\n },\n onFocusWithin: (e: FocusEvent) => getProps().onFocus?.(e),\n onFocusWithinChange: (isFocused: boolean) => getProps().onFocusChange?.(isFocused),\n });\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const groupName = getProps().name ?? createId();\n\n radioGroupData.set(state, {\n name: groupName,\n form: getProps().form,\n descriptionId: descriptionProps.id,\n errorMessageId: errorMessageProps.id,\n validationBehavior: validationBehavior(),\n });\n\n const getNavigableRadios = (root: HTMLElement): HTMLInputElement[] => {\n return Array.from(root.querySelectorAll('input[type=\"radio\"]')).filter(\n (el): el is HTMLInputElement => {\n return el instanceof HTMLInputElement && !el.matches(\":disabled\");\n },\n );\n };\n\n // Keyboard navigation parity with React Aria.\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (e) => {\n let nextDir: \"next\" | \"prev\" | null = null;\n const currentOrientation = orientation();\n const isHorizontal = currentOrientation !== \"vertical\";\n const isRTL = locale().direction === \"rtl\" && isHorizontal;\n\n switch (e.key) {\n case \"ArrowRight\":\n nextDir = isRTL ? \"prev\" : \"next\";\n break;\n case \"ArrowLeft\":\n nextDir = isRTL ? \"next\" : \"prev\";\n break;\n case \"ArrowDown\":\n nextDir = \"next\";\n break;\n case \"ArrowUp\":\n nextDir = \"prev\";\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const root = e.currentTarget;\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n const radios = getNavigableRadios(root);\n if (radios.length === 0) {\n return;\n }\n\n const eventTarget = getEventTarget<Element>(e);\n const activeElement = root.ownerDocument.activeElement;\n\n const currentRadio =\n eventTarget instanceof HTMLInputElement && eventTarget.type === \"radio\"\n ? eventTarget\n : activeElement instanceof HTMLInputElement && activeElement.type === \"radio\"\n ? activeElement\n : null;\n\n const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;\n\n let nextIndex: number;\n if (nextDir === \"next\") {\n nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;\n } else {\n nextIndex =\n currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;\n }\n\n const nextRadio = radios[nextIndex];\n if (!nextRadio) {\n return;\n }\n\n focusSafely(nextRadio);\n state.setSelectedValue(nextRadio.value);\n };\n\n return {\n get radioGroupProps() {\n return mergeProps(domProps(), focusWithinProps as unknown as Record<string, unknown>, {\n role: \"radiogroup\",\n onKeyDown,\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": getProps()[\"aria-errormessage\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": isRequired() || undefined,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-orientation\": orientation(),\n ...fieldProps,\n }) as JSX.HTMLAttributes<HTMLDivElement>;\n },\n labelProps: labelProps as JSX.HTMLAttributes<HTMLElement>,\n descriptionProps,\n errorMessageProps,\n get isInvalid() {\n return isInvalid();\n },\n get validationErrors() {\n return validationErrors();\n },\n get validationDetails() {\n return validationDetails();\n },\n };\n}\n","/**\n * Radio hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n *\n * This is a 1:1 port of @react-aria/radio's useRadio hook.\n */\n\nimport { JSX, Accessor, createEffect } from \"solid-js\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type RadioGroupState, radioGroupSyncVersion } from \"@proyecto-viviana/solid-stately\";\nimport { radioGroupData } from \"./createRadioGroup\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\n\nexport interface AriaRadioProps {\n /** The value of the radio button, used when submitting an HTML form. */\n value: string;\n /** Whether the radio button is disabled. */\n isDisabled?: boolean;\n /** The label for the radio button. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface RadioAria {\n /** Props for the label wrapper element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props for the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the radio's description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio is disabled. */\n isDisabled: boolean;\n /** Whether the radio is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the radio is in a pressed state. */\n isPressed: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n */\nexport function createRadio(\n props: MaybeAccessor<AriaRadioProps>,\n state: RadioGroupState,\n ref: () => HTMLInputElement | null,\n): RadioAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled || state.isDisabled;\n const value = () => getProps().value;\n const isSelected: Accessor<boolean> = () => {\n const selected = state.selectedValue();\n const v = value();\n return selected === v;\n };\n\n createEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // SolidJS-specific: Sync DOM checked state whenever selection changes\n // This handles:\n // 1. Initial render with controlled value\n // 2. Controlled mode where parent doesn't update value after click\n // 3. Native radio group behavior (clicking one unchecks others)\n //\n // Unlike React's VDOM reconciliation that re-applies all props on every render,\n // SolidJS only updates when signals change. Native radio behavior can change\n // the DOM checked state without our knowledge, so we need to actively sync.\n //\n // We track `syncVersion` to ensure this effect runs on EVERY selection attempt,\n // even in controlled mode where isSelected() may not change.\n createEffect(() => {\n // The WeakMap accessor is outside the public API to maintain React Aria parity.\n const syncVersion = radioGroupSyncVersion.get(state);\n syncVersion?.();\n\n const shouldBeChecked = isSelected();\n const inputEl = ref();\n if (!inputEl) return;\n\n if (inputEl.checked !== shouldBeChecked) {\n inputEl.checked = shouldBeChecked;\n }\n });\n\n // SolidJS-specific: Unlike React, the input's `checked` state can get out of sync\n // with our reactive state. This happens because:\n // 1. A readonly `<input type=\"radio\" />` is always \"checkable\" in the browser\n // 2. Even controlled inputs (`<input checked={isChecked} />`) will change their\n // internal `checked` state when clicked, regardless of what the signal says\n //\n // To prevent this, we force the input's `checked` DOM property to match our state\n // after processing the change. This is a common pattern across SolidJS component\n // libraries (see CREDITS.md for attribution).\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n e.stopPropagation();\n\n const target = e.target as HTMLInputElement;\n\n // Guard against disabled state - JSDOM's fireEvent may bypass disabled check\n if (isDisabled()) {\n target.checked = isSelected();\n return;\n }\n\n state.setSelectedValue(value());\n\n // Focus the input when clicked\n // In real browsers this happens automatically, but JSDOM/fireEvent doesn't trigger it\n target.focus();\n\n // Force the DOM checked state to match our reactive state\n // This handles controlled mode where the parent might not update the value\n target.checked = isSelected();\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.setSelectedValue(value());\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n onFocus(e: FocusEvent) {\n getProps().onFocus?.(e);\n state.setLastFocusedValue(value());\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n const interactions = mergeProps(pressProps, focusableProps);\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const getTabIndex = (): number | undefined => {\n if (isDisabled()) {\n return undefined;\n }\n\n const selected = state.selectedValue();\n const lastFocused = state.lastFocusedValue();\n const currentValue = value();\n\n if (selected != null) {\n if (selected === currentValue) {\n return 0;\n }\n return -1;\n } else {\n if (lastFocused === currentValue || lastFocused == null) {\n return 0;\n }\n return -1;\n }\n };\n\n const getGroupData = () => radioGroupData.get(state);\n\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // The radio's own description slot id — resolves only once an element with\n // this id is rendered (e.g. a `<Text slot=\"description\">` child).\n const descriptionId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n onMouseDown: (e: MouseEvent) => e.preventDefault(),\n }),\n get inputProps() {\n const p = getProps();\n const groupData = getGroupData();\n\n // Order mirrors upstream useRadio: the user's aria-describedby, then the\n // radio's own description, then the group's error message (when invalid)\n // and the group's shared description.\n const describedByIds: string[] = [];\n if (p[\"aria-describedby\"]) {\n describedByIds.push(p[\"aria-describedby\"]);\n }\n const ownDescriptionId = descriptionId();\n if (ownDescriptionId) {\n describedByIds.push(ownDescriptionId);\n }\n if (state.isInvalid && groupData?.errorMessageId) {\n describedByIds.push(groupData.errorMessageId);\n }\n if (groupData?.descriptionId) {\n describedByIds.push(groupData.descriptionId);\n }\n const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(\" \") : undefined;\n const validationBehavior = groupData?.validationBehavior ?? \"native\";\n\n return mergeProps(domProps(), interactions, {\n type: \"radio\" as const,\n name: groupData?.name,\n form: groupData?.form,\n tabIndex: getTabIndex(),\n disabled: isDisabled(),\n required: validationBehavior === \"native\" ? state.isRequired : undefined,\n checked: isSelected(),\n value: value(),\n onChange,\n \"aria-describedby\": ariaDescribedBy,\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n isDisabled: isDisabled(),\n isSelected,\n isPressed: combinedIsPressed,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"radio.jsx","names":["createId"],"sources":["../../src/radio/createRadioGroup.ts","../../src/radio/createRadio.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadioGroup.ts\n\n/**\n * Radio group hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n *\n * This is a 1:1 port of @react-aria/radio's useRadioGroup hook.\n */\n\nimport { createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createField } from \"../label/createField\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { focusSafely, getEventTarget } from \"../utils\";\nimport { useLocale } from \"../i18n\";\nimport { createId } from \"../ssr\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { type RadioGroupState, type ValidityState } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaRadioGroupProps {\n /** The content to display as the label. */\n label?: JSX.Element;\n /** A description for the radio group. Provides additional context. */\n description?: JSX.Element;\n /** An error message for the radio group. */\n errorMessage?:\n | JSX.Element\n | ((validation: { isInvalid: boolean; validationErrors: string[] }) => JSX.Element);\n /** Whether the radio group is disabled. */\n isDisabled?: boolean;\n /** Whether the radio group is read only. */\n isReadOnly?: boolean;\n /** Whether the radio group is required. */\n isRequired?: boolean;\n /** Whether the radio group is invalid. */\n isInvalid?: boolean;\n /** The axis the Radio Button(s) should align with. Defaults to 'vertical'. */\n orientation?: \"horizontal\" | \"vertical\";\n /** The name of the radio group, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the radio group with. */\n form?: string;\n /** Validation behavior for the radio group. */\n validationBehavior?: \"aria\" | \"native\";\n /** Handler that is called when the radio group receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the radio group's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface RadioGroupAria {\n /** Props for the radio group wrapper element. */\n radioGroupProps: JSX.HTMLAttributes<HTMLDivElement>;\n /** Props for the radio group's visible label (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the radio group error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio group is invalid. */\n isInvalid: boolean;\n /** Validation errors, if any. */\n validationErrors: string[];\n /** Validation details, if any. */\n validationDetails: ValidityState;\n}\n\n// WeakMap to share data between radio group and radio items\ninterface RadioGroupData {\n name: string;\n form: string | undefined;\n descriptionId: string | undefined;\n errorMessageId: string | undefined;\n validationBehavior: \"aria\" | \"native\";\n}\n\nexport const radioGroupData: WeakMap<RadioGroupState, RadioGroupData> = new WeakMap();\n\n/**\n * Provides the behavior and accessibility implementation for a radio group component.\n * Radio groups allow users to select a single item from a list of mutually exclusive options.\n */\nexport function createRadioGroup(\n props: MaybeAccessor<AriaRadioGroupProps>,\n state: RadioGroupState,\n): RadioGroupAria {\n const getProps = () => access(props);\n const locale = useLocale();\n\n const orientation = () => getProps().orientation ?? \"vertical\";\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isRequired = () => getProps().isRequired ?? false;\n const isDisabled = () => getProps().isDisabled ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const displayValidation = () => state.displayValidation();\n const validationErrors = () => displayValidation().validationErrors;\n const validationDetails = () => displayValidation().validationDetails;\n const isInvalid = () => displayValidation().isInvalid;\n const fallbackErrorMessage = () => {\n const errors = validationErrors();\n return errors.length > 0 ? errors : undefined;\n };\n\n // Keep the `createField` getters intact. Destructuring `fieldProps` would\n // freeze the first `aria-describedby` snapshot (RAC `useField.ts:51-60`).\n // `aria-describedby` must reach `createField` so slot ids concatenate with\n // the user prop instead of overwriting it (`useField.ts:51-60`).\n const field = createField({\n get id() {\n return getProps().id;\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return getProps()[\"aria-describedby\"];\n },\n get description() {\n return getProps().description;\n },\n get errorMessage() {\n return getProps().errorMessage ?? fallbackErrorMessage();\n },\n get isInvalid() {\n return isInvalid();\n },\n // Radio group is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: \"span\",\n });\n\n // Handle focus within - reset focusable radio when group loses focus and no selection\n const { focusWithinProps } = createFocusWithin({\n onBlurWithin(e: FocusEvent) {\n getProps().onBlur?.(e);\n if (!state.selectedValue()) {\n state.setLastFocusedValue(null);\n }\n },\n onFocusWithin: (e: FocusEvent) => getProps().onFocus?.(e),\n onFocusWithinChange: (isFocused: boolean) => getProps().onFocusChange?.(isFocused),\n });\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const groupName = getProps().name ?? createId();\n\n const updateRadioGroupData = () => {\n radioGroupData.set(state, {\n name: groupName,\n form: getProps().form,\n descriptionId:\n typeof field.descriptionProps.id === \"string\" ? field.descriptionProps.id : undefined,\n errorMessageId:\n typeof field.errorMessageProps.id === \"string\" ? field.errorMessageProps.id : undefined,\n validationBehavior: validationBehavior(),\n });\n };\n updateRadioGroupData();\n createTrackedEffect(updateRadioGroupData);\n\n const getNavigableRadios = (root: HTMLElement): HTMLInputElement[] => {\n return Array.from(root.querySelectorAll('input[type=\"radio\"]')).filter(\n (el): el is HTMLInputElement => {\n return el instanceof HTMLInputElement && !el.matches(\":disabled\");\n },\n );\n };\n\n // Keyboard navigation parity with React Aria.\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (e) => {\n let nextDir: \"next\" | \"prev\" | null = null;\n const currentOrientation = orientation();\n const isHorizontal = currentOrientation !== \"vertical\";\n const isRTL = locale().direction === \"rtl\" && isHorizontal;\n\n switch (e.key) {\n case \"ArrowRight\":\n nextDir = isRTL ? \"prev\" : \"next\";\n break;\n case \"ArrowLeft\":\n nextDir = isRTL ? \"next\" : \"prev\";\n break;\n case \"ArrowDown\":\n nextDir = \"next\";\n break;\n case \"ArrowUp\":\n nextDir = \"prev\";\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const root = e.currentTarget;\n if (!(root instanceof HTMLElement)) {\n return;\n }\n\n const radios = getNavigableRadios(root);\n if (radios.length === 0) {\n return;\n }\n\n const eventTarget = getEventTarget<Element>(e);\n const activeElement = root.ownerDocument.activeElement;\n\n const currentRadio =\n eventTarget instanceof HTMLInputElement && eventTarget.type === \"radio\"\n ? eventTarget\n : activeElement instanceof HTMLInputElement && activeElement.type === \"radio\"\n ? activeElement\n : null;\n\n const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;\n\n let nextIndex: number;\n if (nextDir === \"next\") {\n nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;\n } else {\n nextIndex =\n currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;\n }\n\n const nextRadio = radios[nextIndex];\n if (!nextRadio) {\n return;\n }\n\n focusSafely(nextRadio);\n state.setSelectedValue(nextRadio.value);\n };\n\n return {\n get radioGroupProps() {\n return mergeProps(domProps(), focusWithinProps as unknown as Record<string, unknown>, {\n role: \"radiogroup\",\n onKeyDown,\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": getProps()[\"aria-errormessage\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": isRequired() || undefined,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-orientation\": orientation(),\n ...field.fieldProps,\n }) as JSX.HTMLAttributes<HTMLDivElement>;\n },\n get labelProps() {\n return field.labelProps as JSX.HTMLAttributes<HTMLElement>;\n },\n get descriptionProps() {\n return field.descriptionProps;\n },\n get errorMessageProps() {\n return field.errorMessageProps;\n },\n get isInvalid() {\n return isInvalid();\n },\n get validationErrors() {\n return validationErrors();\n },\n get validationDetails() {\n return validationDetails();\n },\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/radio/useRadio.ts\n\n/**\n * Radio hook for Solidaria\n *\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n *\n * This is a 1:1 port of @react-aria/radio's useRadio hook.\n */\n\nimport { Accessor, createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { isServer } from \"@solidjs/web\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type RadioGroupState, radioGroupSyncVersion } from \"@proyecto-viviana/solid-stately\";\nimport { radioGroupData } from \"./createRadioGroup\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\nimport { createFormValidation } from \"../form/createFormValidation\";\nimport { createFormReset } from \"../form/createFormReset\";\n\nexport interface AriaRadioProps {\n /** The value of the radio button, used when submitting an HTML form. */\n value: string;\n /** Whether the radio button is disabled. */\n isDisabled?: boolean;\n /** The label for the radio button. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface RadioAria {\n /** Props for the label wrapper element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props for the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /**\n * The input's `aria-describedby`. Kept off `inputProps` so a `createSlotId`\n * probe (RAC `useSlotId` / `useId.ts:135-149`) can patch the attribute\n * without a spread that recreates the input.\n */\n inputDescribedBy: Accessor<string | undefined>;\n /** Props for the radio's description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the radio is disabled. */\n isDisabled: boolean;\n /** Whether the radio is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the radio is in a pressed state. */\n isPressed: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an individual\n * radio button in a radio group.\n */\nexport function createRadio(\n props: MaybeAccessor<AriaRadioProps>,\n state: RadioGroupState,\n ref: () => HTMLInputElement | null,\n): RadioAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled || state.isDisabled;\n const value = () => getProps().value;\n const isSelected: Accessor<boolean> = () => {\n const selected = state.selectedValue();\n const v = value();\n return selected === v;\n };\n\n createTrackedEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // SolidJS-specific: Sync DOM checked state whenever selection changes\n // This handles:\n // 1. Initial render with controlled value\n // 2. Controlled mode where parent doesn't update value after click\n // 3. Native radio group behavior (clicking one unchecks others)\n //\n // Unlike React's VDOM reconciliation that re-applies all props on every render,\n // SolidJS only updates when signals change. Native radio behavior can change\n // the DOM checked state without our knowledge, so we need to actively sync.\n //\n // We track `syncVersion` to ensure this effect runs on EVERY selection attempt,\n // even in controlled mode where isSelected() may not change.\n createTrackedEffect(() => {\n // The WeakMap accessor is outside the public API to maintain React Aria parity.\n const syncVersion = radioGroupSyncVersion.get(state);\n syncVersion?.();\n\n const shouldBeChecked = isSelected();\n const inputEl = ref();\n if (!inputEl) return;\n\n if (inputEl.checked !== shouldBeChecked) {\n inputEl.checked = shouldBeChecked;\n }\n });\n\n // SolidJS-specific: Unlike React, the input's `checked` state can get out of sync\n // with our reactive state. This happens because:\n // 1. A readonly `<input type=\"radio\" />` is always \"checkable\" in the browser\n // 2. Even controlled inputs (`<input checked={isChecked} />`) will change their\n // internal `checked` state when clicked, regardless of what the signal says\n //\n // To prevent this, we force the input's `checked` DOM property to match our state\n // after processing the change. This is a common pattern across SolidJS component\n // libraries (see CREDITS.md for attribution).\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n e.stopPropagation();\n\n const target = e.target as HTMLInputElement;\n\n // Guard against disabled state - JSDOM's fireEvent may bypass disabled check\n if (isDisabled()) {\n target.checked = isSelected();\n return;\n }\n\n state.setSelectedValue(value());\n\n // Focus the input when clicked\n // In real browsers this happens automatically, but JSDOM/fireEvent doesn't trigger it\n target.focus();\n\n // Force the DOM checked state to match our reactive state\n // This handles controlled mode where the parent might not update the value\n target.checked = isSelected();\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.setSelectedValue(value());\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n onFocus(e: FocusEvent) {\n getProps().onFocus?.(e);\n state.setLastFocusedValue(value());\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n const interactions = mergeProps(pressProps, focusableProps);\n\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const getTabIndex = (): number | undefined => {\n if (isDisabled()) {\n return undefined;\n }\n\n const selected = state.selectedValue();\n const lastFocused = state.lastFocusedValue();\n const currentValue = value();\n\n if (selected != null) {\n if (selected === currentValue) {\n return 0;\n }\n return -1;\n } else {\n if (lastFocused === currentValue || lastFocused == null) {\n return 0;\n }\n return -1;\n }\n };\n\n const getGroupData = () => radioGroupData.get(state);\n\n // RAC `useRadio.ts:156-157`: native reset + custom validity on every radio.\n createFormReset(\n () => ref() ?? undefined,\n state.defaultSelectedValue,\n (value) => state.setSelectedValue(value),\n );\n createFormValidation(\n {\n get validationBehavior() {\n return getGroupData()?.validationBehavior ?? \"native\";\n },\n focus: () => ref()?.focus(),\n },\n state,\n () => ref() ?? undefined,\n );\n\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // The radio's own description slot id — resolves only once an element with\n // this id is rendered (e.g. a `<Text slot=\"description\">` child).\n const descriptionId = createSlotId();\n\n // The group's ids reach the radio through the `radioGroupData` WeakMap, a\n // snapshot rather than a signal, so the radio probes the DOM itself the way\n // `useSlotId` does (#258 replaces this path with group-level TextContext\n // slots). The probe is client-only: on the server the slot id is emitted as\n // is — `useSlotId` yields the raw id before its layout effect runs, and the\n // client probe patches the attribute after hydration. `document` does not\n // exist on the server; reading it there threw inside `renderToString` and the\n // route's error boundary rendered instead of the RadioGroup.\n const slotIdInDom = (id: string): boolean => isServer || document.getElementById(id) !== null;\n\n const inputDescribedBy: Accessor<string | undefined> = () => {\n const p = getProps();\n const groupData = getGroupData();\n\n // Order mirrors upstream useRadio: the user's aria-describedby, then the\n // radio's own description, then the group's error message (when invalid)\n // and the group's shared description.\n const describedByIds: string[] = [];\n if (p[\"aria-describedby\"]) {\n describedByIds.push(p[\"aria-describedby\"]);\n }\n const ownDescriptionId = descriptionId();\n if (ownDescriptionId) {\n describedByIds.push(ownDescriptionId);\n }\n if (state.isInvalid && groupData?.errorMessageId && slotIdInDom(groupData.errorMessageId)) {\n describedByIds.push(groupData.errorMessageId);\n }\n if (groupData?.descriptionId && slotIdInDom(groupData.descriptionId)) {\n describedByIds.push(groupData.descriptionId);\n }\n return describedByIds.length > 0 ? describedByIds.join(\" \") : undefined;\n };\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n onMouseDown: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n inputDescribedBy,\n get inputProps() {\n const groupData = getGroupData();\n const validationBehavior = groupData?.validationBehavior ?? \"native\";\n\n return mergeProps(domProps(), interactions, {\n type: \"radio\" as const,\n name: groupData?.name,\n form: groupData?.form,\n tabIndex: getTabIndex(),\n disabled: isDisabled(),\n required: validationBehavior === \"native\" ? state.isRequired : undefined,\n checked: isSelected(),\n value: value(),\n onChange,\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n isDisabled: isDisabled(),\n isSelected,\n isPressed: combinedIsPressed,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactivity.js","names":[],"sources":["../../src/utils/reactivity.ts"],"sourcesContent":["/**\n * Reactivity utilities for Solidaria\n *\n * Provides type-safe utilities for working with SolidJS reactivity patterns.\n */\n\nimport { Accessor } from \"solid-js\";\n\n/**\n * A value that may be either a raw value or an accessor function.\n * This is a common pattern in SolidJS for props that may be reactive.\n */\nexport type MaybeAccessor<T> = T | Accessor<T>;\n\n/**\n * Unwraps a MaybeAccessor to get the underlying value.\n * If the input is a function, it calls it to get the value.\n * Otherwise, it returns the value directly.\n *\n * @param value - The value or accessor to unwrap.\n */\nexport function access<T>(value: MaybeAccessor<T>): T {\n return typeof value === \"function\" ? (value as Accessor<T>)() : value;\n}\n\n/**\n * A value that may be undefined or an accessor that returns the value or undefined.\n */\nexport type MaybeAccessorValue<T> = T | undefined | Accessor<T | undefined>;\n\n/**\n * Checks if a value is an accessor function.\n */\nexport function isAccessor<T>(value: MaybeAccessor<T>): value is Accessor<T> {\n return typeof value === \"function\";\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,OAAU,OAA4B;CACpD,OAAO,OAAO,UAAU,aAAc,MAAsB,IAAI;AAClE;;;;AAUA,SAAgB,WAAc,OAA+C;CAC3E,OAAO,OAAO,UAAU;AAC1B"}
1
+ {"version":3,"file":"reactivity.js","names":[],"sources":["../../src/utils/reactivity.ts"],"sourcesContent":["/**\n * Reactivity utilities for Solidaria\n *\n * Provides type-safe utilities for working with SolidJS reactivity patterns.\n * This is a local Solid helper. It has no direct React Aria\n * counterpart.\n */\n\nimport { Accessor } from \"solid-js\";\n\n/**\n * A value that may be either a raw value or an accessor function.\n * This is a common pattern in SolidJS for props that may be reactive.\n */\nexport type MaybeAccessor<T> = T | Accessor<T>;\n\n/**\n * Unwraps a MaybeAccessor to get the underlying value.\n * If the input is a function, it calls it to get the value.\n * Otherwise, it returns the value directly.\n *\n * @param value - The value or accessor to unwrap.\n */\nexport function access<T>(value: MaybeAccessor<T>): T {\n return typeof value === \"function\" ? (value as Accessor<T>)() : value;\n}\n\n/**\n * A value that may be undefined or an accessor that returns the value or undefined.\n */\nexport type MaybeAccessorValue<T> = T | undefined | Accessor<T | undefined>;\n\n/**\n * Checks if a value is an accessor function.\n */\nexport function isAccessor<T>(value: MaybeAccessor<T>): value is Accessor<T> {\n return typeof value === \"function\";\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,OAAU,OAA4B;CACpD,OAAO,OAAO,UAAU,aAAc,MAAsB,IAAI;AAClE;;;;AAUA,SAAgB,WAAc,OAA+C;CAC3E,OAAO,OAAO,UAAU;AAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactivity.jsx","names":[],"sources":["../../src/utils/reactivity.ts"],"sourcesContent":["/**\n * Reactivity utilities for Solidaria\n *\n * Provides type-safe utilities for working with SolidJS reactivity patterns.\n */\n\nimport { Accessor } from \"solid-js\";\n\n/**\n * A value that may be either a raw value or an accessor function.\n * This is a common pattern in SolidJS for props that may be reactive.\n */\nexport type MaybeAccessor<T> = T | Accessor<T>;\n\n/**\n * Unwraps a MaybeAccessor to get the underlying value.\n * If the input is a function, it calls it to get the value.\n * Otherwise, it returns the value directly.\n *\n * @param value - The value or accessor to unwrap.\n */\nexport function access<T>(value: MaybeAccessor<T>): T {\n return typeof value === \"function\" ? (value as Accessor<T>)() : value;\n}\n\n/**\n * A value that may be undefined or an accessor that returns the value or undefined.\n */\nexport type MaybeAccessorValue<T> = T | undefined | Accessor<T | undefined>;\n\n/**\n * Checks if a value is an accessor function.\n */\nexport function isAccessor<T>(value: MaybeAccessor<T>): value is Accessor<T> {\n return typeof value === \"function\";\n}\n"],"mappings":";;;;;;;;AAqBA,SAAgB,OAAU,OAA4B;CACpD,OAAO,OAAO,UAAU,aAAc,MAAsB,IAAI;AAClE;;;;AAUA,SAAgB,WAAc,OAA+C;CAC3E,OAAO,OAAO,UAAU;AAC1B"}
1
+ {"version":3,"file":"reactivity.jsx","names":[],"sources":["../../src/utils/reactivity.ts"],"sourcesContent":["/**\n * Reactivity utilities for Solidaria\n *\n * Provides type-safe utilities for working with SolidJS reactivity patterns.\n * This is a local Solid helper. It has no direct React Aria\n * counterpart.\n */\n\nimport { Accessor } from \"solid-js\";\n\n/**\n * A value that may be either a raw value or an accessor function.\n * This is a common pattern in SolidJS for props that may be reactive.\n */\nexport type MaybeAccessor<T> = T | Accessor<T>;\n\n/**\n * Unwraps a MaybeAccessor to get the underlying value.\n * If the input is a function, it calls it to get the value.\n * Otherwise, it returns the value directly.\n *\n * @param value - The value or accessor to unwrap.\n */\nexport function access<T>(value: MaybeAccessor<T>): T {\n return typeof value === \"function\" ? (value as Accessor<T>)() : value;\n}\n\n/**\n * A value that may be undefined or an accessor that returns the value or undefined.\n */\nexport type MaybeAccessorValue<T> = T | undefined | Accessor<T | undefined>;\n\n/**\n * Checks if a value is an accessor function.\n */\nexport function isAccessor<T>(value: MaybeAccessor<T>): value is Accessor<T> {\n return typeof value === \"function\";\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,OAAU,OAA4B;CACpD,OAAO,OAAO,UAAU,aAAc,MAAsB,IAAI;AAClE;;;;AAUA,SAAgB,WAAc,OAA+C;CAC3E,OAAO,OAAO,UAAU;AAC1B"}
@@ -0,0 +1,41 @@
1
+ import { createEffect, createSignal, onSettled } from "solid-js";
2
+ //#region src/utils/refs.ts
3
+ /**
4
+ * Solid 2 ref assignment.
5
+ *
6
+ * `Ref<T>` is `T | ((val: T) => void) | undefined | Ref<T>[]`. JSX
7
+ * `ref={local.ref}` compiles as a property write (`local.ref = el`) when
8
+ * `local` is an object, so getter-only splitProps/mergeProps bags need a
9
+ * setter that forwards to the live callback / array / `{ current }`.
10
+ */
11
+ /**
12
+ * Track a ref accessor that may close over a plain `let` assigned during
13
+ * insert. `createEffect(() => ref())` runs once with `null` and never
14
+ * re-runs; `onSettled` picks the element up after commit.
15
+ */
16
+ function followRef(ref) {
17
+ const [el, setEl] = createSignal(() => ref(), { ownedWrite: true });
18
+ createEffect(() => ref(), (node) => {
19
+ setEl(() => node);
20
+ });
21
+ onSettled(() => {
22
+ setEl(() => ref());
23
+ });
24
+ return el;
25
+ }
26
+ function assignRef(ref, el) {
27
+ if (ref == null) return;
28
+ if (typeof ref === "function") {
29
+ ref(el);
30
+ return;
31
+ }
32
+ if (Array.isArray(ref)) {
33
+ for (const item of ref) assignRef(item, el);
34
+ return;
35
+ }
36
+ if (typeof ref === "object" && "current" in ref) ref.current = el;
37
+ }
38
+ //#endregion
39
+ export { followRef as n, assignRef as t };
40
+
41
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","names":[],"sources":["../../src/utils/refs.ts"],"sourcesContent":["/**\n * Solid 2 ref assignment.\n *\n * `Ref<T>` is `T | ((val: T) => void) | undefined | Ref<T>[]`. JSX\n * `ref={local.ref}` compiles as a property write (`local.ref = el`) when\n * `local` is an object, so getter-only splitProps/mergeProps bags need a\n * setter that forwards to the live callback / array / `{ current }`.\n */\n\nimport { createEffect, createSignal, onSettled } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\n\nexport type RefLike<T> = T | ((el: T) => void) | { current?: T | null } | undefined | RefLike<T>[];\n\n/**\n * Track a ref accessor that may close over a plain `let` assigned during\n * insert. `createEffect(() => ref())` runs once with `null` and never\n * re-runs; `onSettled` picks the element up after commit.\n */\nexport function followRef<T>(ref: Accessor<T | null | undefined>): Accessor<T | null | undefined> {\n // The computed initializer owns the initial ref read. Seeding undefined and\n // then reading through a setter instead makes nested ref followers read a\n // stale hydration snapshot in their caller's owner, rebuilding its children\n // when hydration completes.\n const [el, setEl] = createSignal<T | null | undefined>(() => ref(), {\n ownedWrite: true,\n });\n createEffect(\n () => ref(),\n (node) => {\n setEl(() => node);\n },\n );\n onSettled(() => {\n setEl(() => ref());\n });\n return el;\n}\n\nexport function assignRef<T>(ref: RefLike<T> | unknown, el: T): void {\n if (ref == null) return;\n if (typeof ref === \"function\") {\n (ref as (value: T) => void)(el);\n return;\n }\n if (Array.isArray(ref)) {\n for (const item of ref) assignRef(item, el);\n return;\n }\n if (typeof ref === \"object\" && \"current\" in (ref as object)) {\n (ref as { current?: T | null }).current = el;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,SAAgB,UAAa,KAAqE;CAKhG,MAAM,CAAC,IAAI,SAAS,mBAAyC,IAAI,GAAG,EAClE,YAAY,KACd,CAAC;CACD,mBACQ,IAAI,IACT,SAAS;EACR,YAAY,IAAI;CAClB,CACF;CACA,gBAAgB;EACd,YAAY,IAAI,CAAC;CACnB,CAAC;CACD,OAAO;AACT;AAEA,SAAgB,UAAa,KAA2B,IAAa;CACnE,IAAI,OAAO,MAAM;CACjB,IAAI,OAAO,QAAQ,YAAY;EAC7B,IAA4B,EAAE;EAC9B;CACF;CACA,IAAI,MAAM,QAAQ,GAAG,GAAG;EACtB,KAAK,MAAM,QAAQ,KAAK,UAAU,MAAM,EAAE;EAC1C;CACF;CACA,IAAI,OAAO,QAAQ,YAAY,aAAc,KAC3C,IAAgC,UAAU;AAE9C"}