@proyecto-viviana/solidaria 0.3.0 → 0.4.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 (566) hide show
  1. package/dist/_chunk/actiongroup.js +207 -0
  2. package/dist/_chunk/actiongroup.js.map +1 -0
  3. package/dist/_chunk/actiongroup.jsx +207 -0
  4. package/dist/_chunk/actiongroup.jsx.map +1 -0
  5. package/dist/_chunk/ariaHideOutside.js +122 -0
  6. package/dist/_chunk/ariaHideOutside.js.map +1 -0
  7. package/dist/_chunk/ariaHideOutside.jsx +122 -0
  8. package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
  9. package/dist/_chunk/autocomplete.js +196 -0
  10. package/dist/_chunk/autocomplete.js.map +1 -0
  11. package/dist/_chunk/autocomplete.jsx +196 -0
  12. package/dist/_chunk/autocomplete.jsx.map +1 -0
  13. package/dist/_chunk/breadcrumbs.js +119 -0
  14. package/dist/_chunk/breadcrumbs.js.map +1 -0
  15. package/dist/_chunk/breadcrumbs.jsx +119 -0
  16. package/dist/_chunk/breadcrumbs.jsx.map +1 -0
  17. package/dist/_chunk/button.js +276 -0
  18. package/dist/_chunk/button.js.map +1 -0
  19. package/dist/_chunk/button.jsx +276 -0
  20. package/dist/_chunk/button.jsx.map +1 -0
  21. package/dist/_chunk/calendar.js +1036 -0
  22. package/dist/_chunk/calendar.js.map +1 -0
  23. package/dist/_chunk/calendar.jsx +1036 -0
  24. package/dist/_chunk/calendar.jsx.map +1 -0
  25. package/dist/_chunk/checkbox.js +234 -0
  26. package/dist/_chunk/checkbox.js.map +1 -0
  27. package/dist/_chunk/checkbox.jsx +234 -0
  28. package/dist/_chunk/checkbox.jsx.map +1 -0
  29. package/dist/_chunk/color.js +1174 -0
  30. package/dist/_chunk/color.js.map +1 -0
  31. package/dist/_chunk/color.jsx +1174 -0
  32. package/dist/_chunk/color.jsx.map +1 -0
  33. package/dist/_chunk/combobox.js +436 -0
  34. package/dist/_chunk/combobox.js.map +1 -0
  35. package/dist/_chunk/combobox.jsx +436 -0
  36. package/dist/_chunk/combobox.jsx.map +1 -0
  37. package/dist/_chunk/createCollator.js +229 -0
  38. package/dist/_chunk/createCollator.js.map +1 -0
  39. package/dist/_chunk/createCollator.jsx +223 -0
  40. package/dist/_chunk/createCollator.jsx.map +1 -0
  41. package/dist/_chunk/createCollectionRowInteraction.js +133 -0
  42. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
  43. package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
  44. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
  45. package/dist/_chunk/createField.js +54 -0
  46. package/dist/_chunk/createField.js.map +1 -0
  47. package/dist/_chunk/createField.jsx +54 -0
  48. package/dist/_chunk/createField.jsx.map +1 -0
  49. package/dist/_chunk/createFocus.js +101 -0
  50. package/dist/_chunk/createFocus.js.map +1 -0
  51. package/dist/_chunk/createFocus.jsx +101 -0
  52. package/dist/_chunk/createFocus.jsx.map +1 -0
  53. package/dist/_chunk/createFocusRing.js +54 -0
  54. package/dist/_chunk/createFocusRing.js.map +1 -0
  55. package/dist/_chunk/createFocusRing.jsx +54 -0
  56. package/dist/_chunk/createFocusRing.jsx.map +1 -0
  57. package/dist/_chunk/createFocusWithin.js +121 -0
  58. package/dist/_chunk/createFocusWithin.js.map +1 -0
  59. package/dist/_chunk/createFocusWithin.jsx +121 -0
  60. package/dist/_chunk/createFocusWithin.jsx.map +1 -0
  61. package/dist/_chunk/createFocusable.js +131 -0
  62. package/dist/_chunk/createFocusable.js.map +1 -0
  63. package/dist/_chunk/createFocusable.jsx +131 -0
  64. package/dist/_chunk/createFocusable.jsx.map +1 -0
  65. package/dist/_chunk/createFormValidation.js +135 -0
  66. package/dist/_chunk/createFormValidation.js.map +1 -0
  67. package/dist/_chunk/createFormValidation.jsx +135 -0
  68. package/dist/_chunk/createFormValidation.jsx.map +1 -0
  69. package/dist/_chunk/createHover.js +130 -0
  70. package/dist/_chunk/createHover.js.map +1 -0
  71. package/dist/_chunk/createHover.jsx +130 -0
  72. package/dist/_chunk/createHover.jsx.map +1 -0
  73. package/dist/_chunk/createInteractionModality.js +269 -0
  74. package/dist/_chunk/createInteractionModality.js.map +1 -0
  75. package/dist/_chunk/createInteractionModality.jsx +269 -0
  76. package/dist/_chunk/createInteractionModality.jsx.map +1 -0
  77. package/dist/_chunk/createLabel.js +46 -0
  78. package/dist/_chunk/createLabel.js.map +1 -0
  79. package/dist/_chunk/createLabel.jsx +46 -0
  80. package/dist/_chunk/createLabel.jsx.map +1 -0
  81. package/dist/_chunk/createLabels.js +31 -0
  82. package/dist/_chunk/createLabels.js.map +1 -0
  83. package/dist/_chunk/createLabels.jsx +31 -0
  84. package/dist/_chunk/createLabels.jsx.map +1 -0
  85. package/dist/_chunk/createLandmark.js +198 -0
  86. package/dist/_chunk/createLandmark.js.map +1 -0
  87. package/dist/_chunk/createLandmark.jsx +198 -0
  88. package/dist/_chunk/createLandmark.jsx.map +1 -0
  89. package/dist/_chunk/createLongPress.js +91 -0
  90. package/dist/_chunk/createLongPress.js.map +1 -0
  91. package/dist/_chunk/createLongPress.jsx +91 -0
  92. package/dist/_chunk/createLongPress.jsx.map +1 -0
  93. package/dist/_chunk/createOverlay.js +327 -0
  94. package/dist/_chunk/createOverlay.js.map +1 -0
  95. package/dist/_chunk/createOverlay.jsx +327 -0
  96. package/dist/_chunk/createOverlay.jsx.map +1 -0
  97. package/dist/_chunk/createPress.js +526 -0
  98. package/dist/_chunk/createPress.js.map +1 -0
  99. package/dist/_chunk/createPress.jsx +526 -0
  100. package/dist/_chunk/createPress.jsx.map +1 -0
  101. package/dist/_chunk/createProgressBar.js +81 -0
  102. package/dist/_chunk/createProgressBar.js.map +1 -0
  103. package/dist/_chunk/createProgressBar.jsx +81 -0
  104. package/dist/_chunk/createProgressBar.jsx.map +1 -0
  105. package/dist/_chunk/createSelectableItem.js +298 -0
  106. package/dist/_chunk/createSelectableItem.js.map +1 -0
  107. package/dist/_chunk/createSelectableItem.jsx +298 -0
  108. package/dist/_chunk/createSelectableItem.jsx.map +1 -0
  109. package/dist/_chunk/createToggle.js +158 -0
  110. package/dist/_chunk/createToggle.js.map +1 -0
  111. package/dist/_chunk/createToggle.jsx +158 -0
  112. package/dist/_chunk/createToggle.jsx.map +1 -0
  113. package/dist/_chunk/createTypeSelect.js +125 -0
  114. package/dist/_chunk/createTypeSelect.js.map +1 -0
  115. package/dist/_chunk/createTypeSelect.jsx +125 -0
  116. package/dist/_chunk/createTypeSelect.jsx.map +1 -0
  117. package/dist/_chunk/datepicker.js +1393 -0
  118. package/dist/_chunk/datepicker.js.map +1 -0
  119. package/dist/_chunk/datepicker.jsx +1393 -0
  120. package/dist/_chunk/datepicker.jsx.map +1 -0
  121. package/dist/_chunk/dialog.js +62 -0
  122. package/dist/_chunk/dialog.js.map +1 -0
  123. package/dist/_chunk/dialog.jsx +62 -0
  124. package/dist/_chunk/dialog.jsx.map +1 -0
  125. package/dist/_chunk/disclosure.js +185 -0
  126. package/dist/_chunk/disclosure.js.map +1 -0
  127. package/dist/_chunk/disclosure.jsx +185 -0
  128. package/dist/_chunk/disclosure.jsx.map +1 -0
  129. package/dist/_chunk/dnd.js +1304 -0
  130. package/dist/_chunk/dnd.js.map +1 -0
  131. package/dist/_chunk/dnd.jsx +1304 -0
  132. package/dist/_chunk/dnd.jsx.map +1 -0
  133. package/dist/_chunk/env.js +105 -0
  134. package/dist/_chunk/env.js.map +1 -0
  135. package/dist/_chunk/env.jsx +105 -0
  136. package/dist/_chunk/env.jsx.map +1 -0
  137. package/dist/_chunk/filterDOMProps.js +82 -0
  138. package/dist/_chunk/filterDOMProps.js.map +1 -0
  139. package/dist/_chunk/filterDOMProps.jsx +82 -0
  140. package/dist/_chunk/filterDOMProps.jsx.map +1 -0
  141. package/dist/_chunk/focus.js +399 -0
  142. package/dist/_chunk/focus.js.map +1 -0
  143. package/dist/_chunk/focus.jsx +399 -0
  144. package/dist/_chunk/focus.jsx.map +1 -0
  145. package/dist/_chunk/focus2.js +895 -0
  146. package/dist/_chunk/focus2.js.map +1 -0
  147. package/dist/_chunk/focus2.jsx +870 -0
  148. package/dist/_chunk/focus2.jsx.map +1 -0
  149. package/dist/_chunk/form.js +39 -0
  150. package/dist/_chunk/form.js.map +1 -0
  151. package/dist/_chunk/form.jsx +39 -0
  152. package/dist/_chunk/form.jsx.map +1 -0
  153. package/dist/_chunk/grid.js +623 -0
  154. package/dist/_chunk/grid.js.map +1 -0
  155. package/dist/_chunk/grid.jsx +623 -0
  156. package/dist/_chunk/grid.jsx.map +1 -0
  157. package/dist/_chunk/gridlist.js +364 -0
  158. package/dist/_chunk/gridlist.js.map +1 -0
  159. package/dist/_chunk/gridlist.jsx +364 -0
  160. package/dist/_chunk/gridlist.jsx.map +1 -0
  161. package/dist/_chunk/i18n.js +254 -0
  162. package/dist/_chunk/i18n.js.map +1 -0
  163. package/dist/_chunk/i18n.jsx +254 -0
  164. package/dist/_chunk/i18n.jsx.map +1 -0
  165. package/dist/_chunk/interactions.js +241 -0
  166. package/dist/_chunk/interactions.js.map +1 -0
  167. package/dist/_chunk/interactions.jsx +237 -0
  168. package/dist/_chunk/interactions.jsx.map +1 -0
  169. package/dist/_chunk/link.js +96 -0
  170. package/dist/_chunk/link.js.map +1 -0
  171. package/dist/_chunk/link.jsx +96 -0
  172. package/dist/_chunk/link.jsx.map +1 -0
  173. package/dist/_chunk/listbox.js +324 -0
  174. package/dist/_chunk/listbox.js.map +1 -0
  175. package/dist/_chunk/listbox.jsx +324 -0
  176. package/dist/_chunk/listbox.jsx.map +1 -0
  177. package/dist/_chunk/live-announcer.js +207 -0
  178. package/dist/_chunk/live-announcer.js.map +1 -0
  179. package/dist/_chunk/live-announcer.jsx +207 -0
  180. package/dist/_chunk/live-announcer.jsx.map +1 -0
  181. package/dist/_chunk/menu.js +518 -0
  182. package/dist/_chunk/menu.js.map +1 -0
  183. package/dist/_chunk/menu.jsx +518 -0
  184. package/dist/_chunk/menu.jsx.map +1 -0
  185. package/dist/_chunk/meter.js +33 -0
  186. package/dist/_chunk/meter.js.map +1 -0
  187. package/dist/_chunk/meter.jsx +33 -0
  188. package/dist/_chunk/meter.jsx.map +1 -0
  189. package/dist/_chunk/numberfield.js +258 -0
  190. package/dist/_chunk/numberfield.js.map +1 -0
  191. package/dist/_chunk/numberfield.jsx +258 -0
  192. package/dist/_chunk/numberfield.jsx.map +1 -0
  193. package/dist/_chunk/overlays.js +186 -0
  194. package/dist/_chunk/overlays.js.map +1 -0
  195. package/dist/_chunk/overlays.jsx +162 -0
  196. package/dist/_chunk/overlays.jsx.map +1 -0
  197. package/dist/_chunk/popover.js +574 -0
  198. package/dist/_chunk/popover.js.map +1 -0
  199. package/dist/_chunk/popover.jsx +574 -0
  200. package/dist/_chunk/popover.jsx.map +1 -0
  201. package/dist/_chunk/radio.js +319 -0
  202. package/dist/_chunk/radio.js.map +1 -0
  203. package/dist/_chunk/radio.jsx +319 -0
  204. package/dist/_chunk/radio.jsx.map +1 -0
  205. package/dist/_chunk/searchfield.js +209 -0
  206. package/dist/_chunk/searchfield.js.map +1 -0
  207. package/dist/_chunk/searchfield.jsx +209 -0
  208. package/dist/_chunk/searchfield.jsx.map +1 -0
  209. package/dist/_chunk/select.js +403 -0
  210. package/dist/_chunk/select.js.map +1 -0
  211. package/dist/_chunk/select.jsx +394 -0
  212. package/dist/_chunk/select.jsx.map +1 -0
  213. package/dist/_chunk/selection.js +679 -0
  214. package/dist/_chunk/selection.js.map +1 -0
  215. package/dist/_chunk/selection.jsx +679 -0
  216. package/dist/_chunk/selection.jsx.map +1 -0
  217. package/dist/_chunk/separator.js +29 -0
  218. package/dist/_chunk/separator.js.map +1 -0
  219. package/dist/_chunk/separator.jsx +29 -0
  220. package/dist/_chunk/separator.jsx.map +1 -0
  221. package/dist/_chunk/slider.js +255 -0
  222. package/dist/_chunk/slider.js.map +1 -0
  223. package/dist/_chunk/slider.jsx +255 -0
  224. package/dist/_chunk/slider.jsx.map +1 -0
  225. package/dist/_chunk/steplist.js +66 -0
  226. package/dist/_chunk/steplist.js.map +1 -0
  227. package/dist/_chunk/steplist.jsx +66 -0
  228. package/dist/_chunk/steplist.jsx.map +1 -0
  229. package/dist/_chunk/switch.js +34 -0
  230. package/dist/_chunk/switch.js.map +1 -0
  231. package/dist/_chunk/switch.jsx +34 -0
  232. package/dist/_chunk/switch.jsx.map +1 -0
  233. package/dist/_chunk/table.js +1051 -0
  234. package/dist/_chunk/table.js.map +1 -0
  235. package/dist/_chunk/table.jsx +1051 -0
  236. package/dist/_chunk/table.jsx.map +1 -0
  237. package/dist/_chunk/tabs.js +260 -0
  238. package/dist/_chunk/tabs.js.map +1 -0
  239. package/dist/_chunk/tabs.jsx +260 -0
  240. package/dist/_chunk/tabs.jsx.map +1 -0
  241. package/dist/_chunk/tag.js +286 -0
  242. package/dist/_chunk/tag.js.map +1 -0
  243. package/dist/_chunk/tag.jsx +286 -0
  244. package/dist/_chunk/tag.jsx.map +1 -0
  245. package/dist/_chunk/textfield.js +109 -0
  246. package/dist/_chunk/textfield.js.map +1 -0
  247. package/dist/_chunk/textfield.jsx +109 -0
  248. package/dist/_chunk/textfield.jsx.map +1 -0
  249. package/dist/_chunk/toast.js +250 -0
  250. package/dist/_chunk/toast.js.map +1 -0
  251. package/dist/_chunk/toast.jsx +250 -0
  252. package/dist/_chunk/toast.jsx.map +1 -0
  253. package/dist/_chunk/toolbar.js +258 -0
  254. package/dist/_chunk/toolbar.js.map +1 -0
  255. package/dist/_chunk/toolbar.jsx +258 -0
  256. package/dist/_chunk/toolbar.jsx.map +1 -0
  257. package/dist/_chunk/tooltip.js +185 -0
  258. package/dist/_chunk/tooltip.js.map +1 -0
  259. package/dist/_chunk/tooltip.jsx +185 -0
  260. package/dist/_chunk/tooltip.jsx.map +1 -0
  261. package/dist/_chunk/tree.js +424 -0
  262. package/dist/_chunk/tree.js.map +1 -0
  263. package/dist/_chunk/tree.jsx +424 -0
  264. package/dist/_chunk/tree.jsx.map +1 -0
  265. package/dist/_chunk/utils.js +665 -0
  266. package/dist/_chunk/utils.js.map +1 -0
  267. package/dist/_chunk/utils.jsx +665 -0
  268. package/dist/_chunk/utils.jsx.map +1 -0
  269. package/dist/_chunk/visually-hidden.js +92 -0
  270. package/dist/_chunk/visually-hidden.js.map +1 -0
  271. package/dist/_chunk/visually-hidden.jsx +92 -0
  272. package/dist/_chunk/visually-hidden.jsx.map +1 -0
  273. package/dist/actiongroup/index.js +2 -0
  274. package/dist/actiongroup/index.jsx +2 -0
  275. package/dist/autocomplete/createAutocomplete.d.ts +2 -0
  276. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  277. package/dist/autocomplete/index.js +2 -0
  278. package/dist/autocomplete/index.jsx +2 -0
  279. package/dist/breadcrumbs/index.js +2 -0
  280. package/dist/breadcrumbs/index.jsx +2 -0
  281. package/dist/button/index.js +2 -0
  282. package/dist/button/index.jsx +2 -0
  283. package/dist/calendar/createCalendar.d.ts.map +1 -1
  284. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  285. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  286. package/dist/calendar/createCalendarMonthPicker.d.ts +41 -0
  287. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
  288. package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
  289. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
  290. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  291. package/dist/calendar/index.d.ts +2 -0
  292. package/dist/calendar/index.d.ts.map +1 -1
  293. package/dist/calendar/index.js +2 -0
  294. package/dist/calendar/index.jsx +2 -0
  295. package/dist/calendar/utils.d.ts +4 -0
  296. package/dist/calendar/utils.d.ts.map +1 -1
  297. package/dist/checkbox/createCheckbox.d.ts +4 -0
  298. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  299. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  300. package/dist/checkbox/index.js +2 -0
  301. package/dist/checkbox/index.jsx +2 -0
  302. package/dist/collections/index.js +160 -0
  303. package/dist/collections/index.js.map +1 -0
  304. package/dist/collections/index.jsx +160 -0
  305. package/dist/collections/index.jsx.map +1 -0
  306. package/dist/color/index.js +2 -0
  307. package/dist/color/index.jsx +2 -0
  308. package/dist/combobox/index.js +2 -0
  309. package/dist/combobox/index.jsx +2 -0
  310. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  311. package/dist/datepicker/index.js +2 -0
  312. package/dist/datepicker/index.jsx +2 -0
  313. package/dist/dialog/index.js +2 -0
  314. package/dist/dialog/index.jsx +2 -0
  315. package/dist/disclosure/index.js +2 -0
  316. package/dist/disclosure/index.jsx +2 -0
  317. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  318. package/dist/dnd/index.js +2 -0
  319. package/dist/dnd/index.jsx +2 -0
  320. package/dist/dnd/utils.d.ts +2 -2
  321. package/dist/dnd/utils.d.ts.map +1 -1
  322. package/dist/focus/FocusScope.d.ts.map +1 -1
  323. package/dist/focus/index.js +2 -0
  324. package/dist/focus/index.jsx +2 -0
  325. package/dist/form/createFormValidation.d.ts.map +1 -1
  326. package/dist/form/index.js +3 -0
  327. package/dist/form/index.jsx +3 -0
  328. package/dist/grid/index.js +2 -0
  329. package/dist/grid/index.jsx +2 -0
  330. package/dist/gridlist/createGridList.d.ts +7 -1
  331. package/dist/gridlist/createGridList.d.ts.map +1 -1
  332. package/dist/gridlist/createGridListItem.d.ts +1 -1
  333. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  334. package/dist/gridlist/createGridListSection.d.ts +15 -0
  335. package/dist/gridlist/createGridListSection.d.ts.map +1 -0
  336. package/dist/gridlist/index.d.ts +2 -1
  337. package/dist/gridlist/index.d.ts.map +1 -1
  338. package/dist/gridlist/index.js +2 -0
  339. package/dist/gridlist/index.jsx +2 -0
  340. package/dist/gridlist/types.d.ts +50 -0
  341. package/dist/gridlist/types.d.ts.map +1 -1
  342. package/dist/i18n/index.js +3 -0
  343. package/dist/i18n/index.jsx +3 -0
  344. package/dist/index.d.ts +7 -3
  345. package/dist/index.d.ts.map +1 -1
  346. package/dist/index.js +71 -18311
  347. package/dist/index.jsx +71 -18242
  348. package/dist/interactions/PressEvent.d.ts +11 -0
  349. package/dist/interactions/PressEvent.d.ts.map +1 -1
  350. package/dist/interactions/createInteractionModality.d.ts +0 -1
  351. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  352. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  353. package/dist/interactions/createPress.d.ts.map +1 -1
  354. package/dist/interactions/index.js +10 -0
  355. package/dist/interactions/index.jsx +10 -0
  356. package/dist/label/index.js +4 -0
  357. package/dist/label/index.jsx +4 -0
  358. package/dist/landmark/index.js +2 -0
  359. package/dist/landmark/index.jsx +2 -0
  360. package/dist/link/index.js +2 -0
  361. package/dist/link/index.jsx +2 -0
  362. package/dist/listbox/createListBox.d.ts +37 -0
  363. package/dist/listbox/createListBox.d.ts.map +1 -1
  364. package/dist/listbox/createOption.d.ts +6 -0
  365. package/dist/listbox/createOption.d.ts.map +1 -1
  366. package/dist/listbox/index.js +2 -0
  367. package/dist/listbox/index.jsx +2 -0
  368. package/dist/live-announcer/index.js +2 -0
  369. package/dist/live-announcer/index.jsx +2 -0
  370. package/dist/menu/createMenu.d.ts +7 -4
  371. package/dist/menu/createMenu.d.ts.map +1 -1
  372. package/dist/menu/createMenuItem.d.ts +9 -1
  373. package/dist/menu/createMenuItem.d.ts.map +1 -1
  374. package/dist/menu/index.js +2 -0
  375. package/dist/menu/index.jsx +2 -0
  376. package/dist/meter/index.js +2 -0
  377. package/dist/meter/index.jsx +2 -0
  378. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  379. package/dist/numberfield/index.js +2 -0
  380. package/dist/numberfield/index.jsx +2 -0
  381. package/dist/overlays/index.js +4 -0
  382. package/dist/overlays/index.jsx +4 -0
  383. package/dist/popover/calculatePosition.d.ts +2 -0
  384. package/dist/popover/calculatePosition.d.ts.map +1 -1
  385. package/dist/popover/createOverlayPosition.d.ts +8 -0
  386. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  387. package/dist/popover/index.js +2 -0
  388. package/dist/popover/index.jsx +2 -0
  389. package/dist/progress/index.js +2 -0
  390. package/dist/progress/index.jsx +2 -0
  391. package/dist/radio/createRadio.d.ts +2 -0
  392. package/dist/radio/createRadio.d.ts.map +1 -1
  393. package/dist/radio/index.js +2 -0
  394. package/dist/radio/index.jsx +2 -0
  395. package/dist/searchfield/index.js +2 -0
  396. package/dist/searchfield/index.jsx +2 -0
  397. package/dist/select/createSelect.d.ts.map +1 -1
  398. package/dist/select/index.js +2 -0
  399. package/dist/select/index.jsx +2 -0
  400. package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
  401. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
  402. package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
  403. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
  404. package/dist/selection/constants.d.ts +15 -0
  405. package/dist/selection/constants.d.ts.map +1 -0
  406. package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
  407. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
  408. package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
  409. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
  410. package/dist/selection/createSelectableCollection.d.ts +69 -0
  411. package/dist/selection/createSelectableCollection.d.ts.map +1 -0
  412. package/dist/selection/createSelectableItem.d.ts +154 -0
  413. package/dist/selection/createSelectableItem.d.ts.map +1 -0
  414. package/dist/selection/createSelectableList.d.ts +43 -0
  415. package/dist/selection/createSelectableList.d.ts.map +1 -0
  416. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  417. package/dist/selection/index.d.ts +9 -0
  418. package/dist/selection/index.d.ts.map +1 -1
  419. package/dist/selection/index.js +4 -0
  420. package/dist/selection/index.jsx +4 -0
  421. package/dist/selection/selectItem.d.ts +29 -0
  422. package/dist/selection/selectItem.d.ts.map +1 -0
  423. package/dist/selection/utils.d.ts +40 -0
  424. package/dist/selection/utils.d.ts.map +1 -0
  425. package/dist/separator/index.js +2 -0
  426. package/dist/separator/index.jsx +2 -0
  427. package/dist/slider/createSlider.d.ts.map +1 -1
  428. package/dist/slider/index.js +2 -0
  429. package/dist/slider/index.jsx +2 -0
  430. package/dist/ssr/index.d.ts +17 -0
  431. package/dist/ssr/index.d.ts.map +1 -1
  432. package/dist/ssr/index.js +299 -0
  433. package/dist/ssr/index.js.map +1 -0
  434. package/dist/ssr/index.jsx +292 -0
  435. package/dist/ssr/index.jsx.map +1 -0
  436. package/dist/steplist/index.js +2 -0
  437. package/dist/steplist/index.jsx +2 -0
  438. package/dist/switch/createSwitch.d.ts +4 -0
  439. package/dist/switch/createSwitch.d.ts.map +1 -1
  440. package/dist/switch/index.js +2 -0
  441. package/dist/switch/index.jsx +2 -0
  442. package/dist/table/createTable.d.ts.map +1 -1
  443. package/dist/table/createTableRow.d.ts +1 -1
  444. package/dist/table/createTableRow.d.ts.map +1 -1
  445. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  446. package/dist/table/index.js +2 -0
  447. package/dist/table/index.jsx +2 -0
  448. package/dist/table/types.d.ts +27 -1
  449. package/dist/table/types.d.ts.map +1 -1
  450. package/dist/tabs/createTabs.d.ts +4 -3
  451. package/dist/tabs/createTabs.d.ts.map +1 -1
  452. package/dist/tabs/index.js +2 -0
  453. package/dist/tabs/index.jsx +2 -0
  454. package/dist/tag/createTag.d.ts +2 -0
  455. package/dist/tag/createTag.d.ts.map +1 -1
  456. package/dist/tag/index.js +2 -0
  457. package/dist/tag/index.jsx +2 -0
  458. package/dist/textfield/index.js +2 -0
  459. package/dist/textfield/index.jsx +2 -0
  460. package/dist/toast/createToast.d.ts.map +1 -1
  461. package/dist/toast/index.js +2 -0
  462. package/dist/toast/index.jsx +2 -0
  463. package/dist/toggle/createToggle.d.ts +4 -0
  464. package/dist/toggle/createToggle.d.ts.map +1 -1
  465. package/dist/toggle/index.js +3 -0
  466. package/dist/toggle/index.jsx +3 -0
  467. package/dist/toolbar/createToolbar.d.ts +1 -1
  468. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  469. package/dist/toolbar/index.js +2 -0
  470. package/dist/toolbar/index.jsx +2 -0
  471. package/dist/tooltip/index.js +2 -0
  472. package/dist/tooltip/index.jsx +2 -0
  473. package/dist/tree/createTree.d.ts +5 -1
  474. package/dist/tree/createTree.d.ts.map +1 -1
  475. package/dist/tree/createTreeItem.d.ts +1 -1
  476. package/dist/tree/createTreeItem.d.ts.map +1 -1
  477. package/dist/tree/index.js +2 -0
  478. package/dist/tree/index.jsx +2 -0
  479. package/dist/tree/types.d.ts +10 -0
  480. package/dist/tree/types.d.ts.map +1 -1
  481. package/dist/utils/animation.d.ts +60 -0
  482. package/dist/utils/animation.d.ts.map +1 -0
  483. package/dist/utils/dom.d.ts +48 -2
  484. package/dist/utils/dom.d.ts.map +1 -1
  485. package/dist/utils/index.d.ts +4 -1
  486. package/dist/utils/index.d.ts.map +1 -1
  487. package/dist/utils/index.js +5 -0
  488. package/dist/utils/index.jsx +5 -0
  489. package/dist/utils/keyboard.d.ts +17 -0
  490. package/dist/utils/keyboard.d.ts.map +1 -0
  491. package/dist/utils/mergeProps.d.ts.map +1 -1
  492. package/dist/utils/scrollIntoView.d.ts +30 -0
  493. package/dist/utils/scrollIntoView.d.ts.map +1 -0
  494. package/dist/visually-hidden/index.js +2 -0
  495. package/dist/visually-hidden/index.jsx +2 -0
  496. package/package.json +304 -3
  497. package/src/autocomplete/createAutocomplete.ts +67 -21
  498. package/src/calendar/createCalendar.ts +2 -0
  499. package/src/calendar/createCalendarCell.ts +19 -2
  500. package/src/calendar/createCalendarGrid.ts +43 -9
  501. package/src/calendar/createCalendarMonthPicker.ts +105 -0
  502. package/src/calendar/createCalendarYearPicker.ts +144 -0
  503. package/src/calendar/createRangeCalendar.ts +2 -0
  504. package/src/calendar/index.ts +17 -0
  505. package/src/calendar/utils.ts +4 -0
  506. package/src/checkbox/createCheckbox.ts +10 -0
  507. package/src/checkbox/createCheckboxGroupItem.ts +12 -16
  508. package/src/datepicker/createDateSegment.ts +6 -1
  509. package/src/dnd/createDroppableCollection.ts +4 -1
  510. package/src/dnd/utils.ts +27 -3
  511. package/src/focus/FocusScope.tsx +152 -18
  512. package/src/form/createFormValidation.ts +8 -1
  513. package/src/gridlist/createGridList.ts +145 -42
  514. package/src/gridlist/createGridListItem.ts +87 -155
  515. package/src/gridlist/createGridListSection.ts +54 -0
  516. package/src/gridlist/index.ts +3 -0
  517. package/src/gridlist/types.ts +47 -0
  518. package/src/index.ts +40 -0
  519. package/src/interactions/PressEvent.ts +14 -0
  520. package/src/interactions/createInteractionModality.ts +21 -12
  521. package/src/interactions/createKeyboard.ts +10 -0
  522. package/src/interactions/createPress.ts +29 -6
  523. package/src/listbox/createListBox.ts +129 -8
  524. package/src/listbox/createOption.ts +68 -73
  525. package/src/menu/createMenu.ts +93 -16
  526. package/src/menu/createMenuItem.ts +253 -41
  527. package/src/numberfield/createNumberField.ts +82 -14
  528. package/src/popover/calculatePosition.ts +19 -7
  529. package/src/popover/createOverlayPosition.ts +9 -0
  530. package/src/radio/createRadio.ts +19 -2
  531. package/src/select/createSelect.ts +18 -2
  532. package/src/selection/DOMLayoutDelegate.ts +102 -0
  533. package/src/selection/ListKeyboardDelegate.ts +398 -0
  534. package/src/selection/constants.ts +16 -0
  535. package/src/selection/createCollectionRowInteraction.ts +209 -0
  536. package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
  537. package/src/selection/createSelectableCollection.ts +645 -0
  538. package/src/selection/createSelectableItem.ts +498 -0
  539. package/src/selection/createSelectableList.ts +93 -0
  540. package/src/selection/createTypeSelect.ts +112 -51
  541. package/src/selection/index.ts +31 -0
  542. package/src/selection/selectItem.ts +80 -0
  543. package/src/selection/utils.ts +82 -0
  544. package/src/slider/createSlider.ts +48 -1
  545. package/src/ssr/index.tsx +31 -0
  546. package/src/switch/createSwitch.ts +10 -0
  547. package/src/table/createTable.ts +56 -26
  548. package/src/table/createTableRow.ts +198 -203
  549. package/src/table/createTableSelectAllCheckbox.ts +3 -4
  550. package/src/table/types.ts +29 -1
  551. package/src/tabs/createTabs.ts +50 -20
  552. package/src/tag/createTag.ts +9 -4
  553. package/src/toast/createToast.ts +1 -0
  554. package/src/toggle/createToggle.ts +20 -0
  555. package/src/toolbar/createToolbar.ts +43 -42
  556. package/src/tree/createTree.ts +100 -42
  557. package/src/tree/createTreeItem.ts +105 -120
  558. package/src/tree/types.ts +10 -0
  559. package/src/utils/animation.ts +151 -0
  560. package/src/utils/dom.ts +215 -25
  561. package/src/utils/index.ts +8 -0
  562. package/src/utils/keyboard.ts +25 -0
  563. package/src/utils/mergeProps.ts +8 -1
  564. package/src/utils/scrollIntoView.ts +181 -0
  565. package/dist/index.js.map +0 -1
  566. package/dist/index.jsx.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.jsx","names":[],"sources":["../../src/popover/calculatePosition.ts","../../src/popover/createOverlayPosition.ts","../../src/popover/createPopover.ts"],"sourcesContent":["/**\n * Position calculation utilities for popovers and overlays.\n * Ported from @react-aria/overlays calculatePosition.ts\n */\n\n// Types\nexport type Placement =\n | \"bottom\"\n | \"bottom left\"\n | \"bottom right\"\n | \"bottom start\"\n | \"bottom end\"\n | \"top\"\n | \"top left\"\n | \"top right\"\n | \"top start\"\n | \"top end\"\n | \"left\"\n | \"left top\"\n | \"left bottom\"\n | \"right\"\n | \"right top\"\n | \"right bottom\"\n | \"start\"\n | \"start top\"\n | \"start bottom\"\n | \"end\"\n | \"end top\"\n | \"end bottom\";\n\nexport type PlacementAxis = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type Axis = \"top\" | \"left\";\nexport type SizeAxis = \"width\" | \"height\";\n\ninterface Position {\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\ninterface Dimensions {\n width: number;\n height: number;\n totalWidth: number;\n totalHeight: number;\n top: number;\n left: number;\n scroll: Position;\n}\n\ninterface ParsedPlacement {\n placement: PlacementAxis;\n crossPlacement: PlacementAxis | \"center\";\n axis: Axis;\n crossAxis: Axis;\n size: SizeAxis;\n crossSize: SizeAxis;\n}\n\ninterface Offset {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface PositionOpts {\n arrowSize: number;\n placement: Placement;\n targetNode: Element;\n overlayNode: Element;\n scrollNode: Element;\n padding: number;\n shouldFlip: boolean;\n boundaryElement: Element;\n offset: number;\n crossOffset: number;\n maxHeight?: number;\n arrowBoundaryOffset?: number;\n /** Overrides the target element's measured rect (e.g. position relative to a cursor point). */\n targetRect?: Offset | null | undefined;\n}\n\ntype HeightGrowthDirection = \"top\" | \"bottom\";\n\nexport interface PositionResult {\n position: Position;\n arrowOffsetLeft?: number;\n arrowOffsetTop?: number;\n triggerAnchorPoint: { x: number; y: number };\n maxHeight: number;\n placement: PlacementAxis;\n}\n\n// Constants\nconst AXIS: Record<string, Axis> = {\n top: \"top\",\n bottom: \"top\",\n left: \"left\",\n right: \"left\",\n};\n\nconst FLIPPED_DIRECTION: Record<string, string> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nconst CROSS_AXIS: Record<string, Axis> = {\n top: \"left\",\n left: \"top\",\n};\n\nconst AXIS_SIZE: Record<string, SizeAxis> = {\n top: \"height\",\n left: \"width\",\n};\n\nconst TOTAL_SIZE: Record<SizeAxis, \"totalWidth\" | \"totalHeight\"> = {\n width: \"totalWidth\",\n height: \"totalHeight\",\n};\n\nconst PARSED_PLACEMENT_CACHE: Record<string, ParsedPlacement> = {};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction isWebKit(): boolean {\n return typeof window !== \"undefined\" && \"WebkitAppearance\" in document.documentElement.style;\n}\n\nconst getVisualViewport = () => (typeof document !== \"undefined\" ? window.visualViewport : null);\n\nfunction getContainerDimensions(\n containerNode: Element,\n visualViewport: VisualViewport | null,\n): Dimensions {\n let width = 0,\n height = 0,\n totalWidth = 0,\n totalHeight = 0,\n top = 0,\n left = 0;\n const scroll: Position = {};\n const isPinchZoomedIn = (visualViewport?.scale ?? 1) > 1;\n\n if (containerNode.tagName === \"BODY\" || containerNode.tagName === \"HTML\") {\n const documentElement = document.documentElement;\n totalWidth = documentElement.clientWidth;\n totalHeight = documentElement.clientHeight;\n width = visualViewport?.width ?? totalWidth;\n height = visualViewport?.height ?? totalHeight;\n scroll.top = documentElement.scrollTop || (containerNode as HTMLElement).scrollTop;\n scroll.left = documentElement.scrollLeft || (containerNode as HTMLElement).scrollLeft;\n\n if (visualViewport) {\n top = visualViewport.offsetTop;\n left = visualViewport.offsetLeft;\n }\n } else {\n ({ width, height, top, left } = getElementOffset(containerNode, false));\n scroll.top = (containerNode as HTMLElement).scrollTop;\n scroll.left = (containerNode as HTMLElement).scrollLeft;\n totalWidth = width;\n totalHeight = height;\n }\n\n if (\n isWebKit() &&\n (containerNode.tagName === \"BODY\" || containerNode.tagName === \"HTML\") &&\n isPinchZoomedIn\n ) {\n scroll.top = 0;\n scroll.left = 0;\n top = visualViewport?.pageTop ?? 0;\n left = visualViewport?.pageLeft ?? 0;\n }\n\n return { width, height, totalWidth, totalHeight, scroll, top, left };\n}\n\nfunction getScroll(node: Element): Offset {\n return {\n top: (node as HTMLElement).scrollTop,\n left: (node as HTMLElement).scrollLeft,\n width: (node as HTMLElement).scrollWidth,\n height: (node as HTMLElement).scrollHeight,\n };\n}\n\nfunction getDelta(\n axis: Axis,\n offset: number,\n size: number,\n boundaryDimensions: Dimensions,\n containerDimensions: Dimensions,\n padding: number,\n containerOffsetWithBoundary: Offset,\n): number {\n const containerScroll = containerDimensions.scroll[axis] ?? 0;\n const boundarySize = boundaryDimensions[AXIS_SIZE[axis]];\n\n const boundaryStartEdge =\n containerOffsetWithBoundary[axis] + (boundaryDimensions.scroll[AXIS[axis]] ?? 0) + padding;\n const boundaryEndEdge =\n containerOffsetWithBoundary[axis] +\n (boundaryDimensions.scroll[AXIS[axis]] ?? 0) +\n boundarySize -\n padding;\n\n const startEdgeOffset =\n offset -\n containerScroll +\n (boundaryDimensions.scroll[AXIS[axis]] ?? 0) +\n containerOffsetWithBoundary[axis] -\n boundaryDimensions[AXIS[axis]];\n const endEdgeOffset =\n offset -\n containerScroll +\n size +\n (boundaryDimensions.scroll[AXIS[axis]] ?? 0) +\n containerOffsetWithBoundary[axis] -\n boundaryDimensions[AXIS[axis]];\n\n if (startEdgeOffset < boundaryStartEdge) {\n return boundaryStartEdge - startEdgeOffset;\n } else if (endEdgeOffset > boundaryEndEdge) {\n return Math.max(boundaryEndEdge - endEdgeOffset, boundaryStartEdge - startEdgeOffset);\n } else {\n return 0;\n }\n}\n\nfunction getMargins(node: Element): Position {\n const style = window.getComputedStyle(node);\n return {\n top: parseInt(style.marginTop, 10) || 0,\n bottom: parseInt(style.marginBottom, 10) || 0,\n left: parseInt(style.marginLeft, 10) || 0,\n right: parseInt(style.marginRight, 10) || 0,\n };\n}\n\nfunction parsePlacement(input: Placement): ParsedPlacement {\n if (PARSED_PLACEMENT_CACHE[input]) {\n return PARSED_PLACEMENT_CACHE[input];\n }\n\n const [placement, crossPlacement] = input.split(\" \") as [PlacementAxis, string?];\n const resolvedCrossPlacementInput = crossPlacement ?? \"center\";\n const axis: Axis = AXIS[placement] || \"right\";\n const crossAxis: Axis = CROSS_AXIS[axis];\n\n let resolvedCrossPlacement: PlacementAxis | \"center\" = \"center\";\n if (AXIS[resolvedCrossPlacementInput]) {\n resolvedCrossPlacement = resolvedCrossPlacementInput as PlacementAxis;\n }\n\n const size = AXIS_SIZE[axis];\n const crossSize = AXIS_SIZE[crossAxis];\n PARSED_PLACEMENT_CACHE[input] = {\n placement,\n crossPlacement: resolvedCrossPlacement,\n axis,\n crossAxis,\n size,\n crossSize,\n };\n return PARSED_PLACEMENT_CACHE[input];\n}\n\nfunction computePosition(\n childOffset: Offset,\n _boundaryDimensions: Dimensions,\n overlaySize: Offset,\n placementInfo: ParsedPlacement,\n offset: number,\n crossOffset: number,\n _containerOffsetWithBoundary: Offset,\n isContainerPositioned: boolean,\n arrowSize: number,\n arrowBoundaryOffset: number,\n containerDimensions: Dimensions,\n): Position {\n const { placement, crossPlacement, axis, crossAxis, size, crossSize } = placementInfo;\n const position: Position = {};\n\n position[crossAxis] = childOffset[crossAxis] ?? 0;\n if (crossPlacement === \"center\") {\n position[crossAxis]! += ((childOffset[crossSize] ?? 0) - (overlaySize[crossSize] ?? 0)) / 2;\n } else if (crossPlacement !== crossAxis) {\n position[crossAxis]! += (childOffset[crossSize] ?? 0) - (overlaySize[crossSize] ?? 0);\n }\n\n position[crossAxis]! += crossOffset;\n\n const minPosition =\n childOffset[crossAxis] - overlaySize[crossSize] + arrowSize + arrowBoundaryOffset;\n const maxPosition =\n childOffset[crossAxis] + childOffset[crossSize] - arrowSize - arrowBoundaryOffset;\n position[crossAxis] = clamp(position[crossAxis]!, minPosition, maxPosition);\n\n if (placement === axis) {\n const containerHeight = isContainerPositioned\n ? containerDimensions[size]\n : containerDimensions[TOTAL_SIZE[size]];\n position[FLIPPED_DIRECTION[axis] as keyof Position] = Math.floor(\n containerHeight - childOffset[axis] + offset,\n );\n } else {\n position[axis] = Math.floor(childOffset[axis] + childOffset[size] + offset);\n }\n return position;\n}\n\nfunction getMaxHeight(\n position: Position,\n boundaryDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n _isContainerPositioned: boolean,\n margins: Position,\n padding: number,\n overlayHeight: number,\n heightGrowthDirection: HeightGrowthDirection,\n containerDimensions: Dimensions,\n isContainerDescendentOfBoundary: boolean,\n visualViewport: VisualViewport | null,\n): number {\n const overlayTop =\n (position.top != null\n ? position.top\n : containerDimensions[TOTAL_SIZE.height] - (position.bottom ?? 0) - overlayHeight) -\n (containerDimensions.scroll.top ?? 0);\n\n const boundaryToContainerTransformOffset = isContainerDescendentOfBoundary\n ? containerOffsetWithBoundary.top\n : 0;\n const boundingRect = {\n top: Math.max(\n boundaryDimensions.top + boundaryToContainerTransformOffset,\n (visualViewport?.offsetTop ?? boundaryDimensions.top) + boundaryToContainerTransformOffset,\n ),\n bottom: Math.min(\n boundaryDimensions.top + boundaryDimensions.height + boundaryToContainerTransformOffset,\n (visualViewport?.offsetTop ?? 0) + (visualViewport?.height ?? 0),\n ),\n };\n\n const maxHeight =\n heightGrowthDirection !== \"top\"\n ? Math.max(\n 0,\n boundingRect.bottom - overlayTop - ((margins.top ?? 0) + (margins.bottom ?? 0) + padding),\n )\n : Math.max(\n 0,\n overlayTop +\n overlayHeight -\n boundingRect.top -\n ((margins.top ?? 0) + (margins.bottom ?? 0) + padding),\n );\n return maxHeight;\n}\n\nfunction getAvailableSpace(\n boundaryDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n childOffset: Offset,\n margins: Position,\n padding: number,\n placementInfo: ParsedPlacement,\n containerDimensions: Dimensions,\n isContainerDescendentOfBoundary: boolean,\n): number {\n const { placement, axis, size } = placementInfo;\n if (placement === axis) {\n return Math.max(\n 0,\n childOffset[axis] -\n (containerDimensions.scroll[axis] ?? 0) -\n (boundaryDimensions[axis] +\n (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0)) -\n (margins[axis] ?? 0) -\n (margins[FLIPPED_DIRECTION[axis] as keyof Position] ?? 0) -\n padding,\n );\n }\n\n return Math.max(\n 0,\n boundaryDimensions[size] +\n boundaryDimensions[axis] +\n (isContainerDescendentOfBoundary ? containerOffsetWithBoundary[axis] : 0) -\n childOffset[axis] -\n childOffset[size] +\n (containerDimensions.scroll[axis] ?? 0) -\n (margins[axis] ?? 0) -\n (margins[FLIPPED_DIRECTION[axis] as keyof Position] ?? 0) -\n padding,\n );\n}\n\nexport function calculatePositionInternal(\n placementInput: Placement,\n childOffset: Offset,\n overlaySize: Offset,\n _scrollSize: Offset,\n margins: Position,\n padding: number,\n flip: boolean,\n boundaryDimensions: Dimensions,\n containerDimensions: Dimensions,\n containerOffsetWithBoundary: Offset,\n offset: number,\n crossOffset: number,\n isContainerPositioned: boolean,\n userSetMaxHeight: number | undefined,\n arrowSize: number,\n arrowBoundaryOffset: number,\n isContainerDescendentOfBoundary: boolean,\n visualViewport: VisualViewport | null,\n): PositionResult {\n let placementInfo = parsePlacement(placementInput);\n let { size, crossAxis, crossSize, placement, crossPlacement } = placementInfo;\n let position = computePosition(\n childOffset,\n boundaryDimensions,\n overlaySize,\n placementInfo,\n offset,\n crossOffset,\n containerOffsetWithBoundary,\n isContainerPositioned,\n arrowSize,\n arrowBoundaryOffset,\n containerDimensions,\n );\n let normalizedOffset = offset;\n const space = getAvailableSpace(\n boundaryDimensions,\n containerOffsetWithBoundary,\n childOffset,\n margins,\n padding + offset,\n placementInfo,\n containerDimensions,\n isContainerDescendentOfBoundary,\n );\n\n if (flip && overlaySize[size] > space) {\n const flippedPlacementInfo = parsePlacement(\n `${FLIPPED_DIRECTION[placement]} ${crossPlacement}` as Placement,\n );\n const flippedPosition = computePosition(\n childOffset,\n boundaryDimensions,\n overlaySize,\n flippedPlacementInfo,\n offset,\n crossOffset,\n containerOffsetWithBoundary,\n isContainerPositioned,\n arrowSize,\n arrowBoundaryOffset,\n containerDimensions,\n );\n\n const flippedSpace = getAvailableSpace(\n boundaryDimensions,\n containerOffsetWithBoundary,\n childOffset,\n margins,\n padding + offset,\n flippedPlacementInfo,\n containerDimensions,\n isContainerDescendentOfBoundary,\n );\n\n if (flippedSpace > space) {\n placementInfo = flippedPlacementInfo;\n position = flippedPosition;\n normalizedOffset = offset;\n }\n }\n\n let heightGrowthDirection: HeightGrowthDirection = \"bottom\";\n if (placementInfo.axis === \"top\") {\n if (placementInfo.placement === \"top\") {\n heightGrowthDirection = \"top\";\n } else if (placementInfo.placement === \"bottom\") {\n heightGrowthDirection = \"bottom\";\n }\n } else if (placementInfo.crossAxis === \"top\") {\n if (placementInfo.crossPlacement === \"top\") {\n heightGrowthDirection = \"bottom\";\n } else if (placementInfo.crossPlacement === \"bottom\") {\n heightGrowthDirection = \"top\";\n }\n }\n\n let delta = getDelta(\n crossAxis,\n position[crossAxis]!,\n overlaySize[crossSize],\n boundaryDimensions,\n containerDimensions,\n padding,\n containerOffsetWithBoundary,\n );\n position[crossAxis]! += delta;\n\n let maxHeight = getMaxHeight(\n position,\n boundaryDimensions,\n containerOffsetWithBoundary,\n isContainerPositioned,\n margins,\n padding,\n overlaySize.height,\n heightGrowthDirection,\n containerDimensions,\n isContainerDescendentOfBoundary,\n visualViewport,\n );\n\n if (userSetMaxHeight && userSetMaxHeight < maxHeight) {\n maxHeight = userSetMaxHeight;\n }\n\n overlaySize.height = Math.min(overlaySize.height, maxHeight);\n\n position = computePosition(\n childOffset,\n boundaryDimensions,\n overlaySize,\n placementInfo,\n normalizedOffset,\n crossOffset,\n containerOffsetWithBoundary,\n isContainerPositioned,\n arrowSize,\n arrowBoundaryOffset,\n containerDimensions,\n );\n delta = getDelta(\n crossAxis,\n position[crossAxis]!,\n overlaySize[crossSize],\n boundaryDimensions,\n containerDimensions,\n padding,\n containerOffsetWithBoundary,\n );\n position[crossAxis]! += delta;\n\n const arrowPosition: Position = {};\n\n ({ placement, crossPlacement } = placementInfo);\n let origin = childOffset[crossAxis] - position[crossAxis]! - (margins[AXIS[crossAxis]] ?? 0);\n let preferredArrowPosition = origin + 0.5 * childOffset[crossSize];\n\n const arrowMinPosition = arrowSize / 2 + arrowBoundaryOffset;\n const overlayMargin =\n AXIS[crossAxis] === \"left\"\n ? (margins.left ?? 0) + (margins.right ?? 0)\n : (margins.top ?? 0) + (margins.bottom ?? 0);\n const arrowMaxPosition =\n overlaySize[crossSize] - overlayMargin - arrowSize / 2 - arrowBoundaryOffset;\n\n const arrowOverlappingChildMinEdge =\n childOffset[crossAxis] +\n arrowSize / 2 -\n (position[crossAxis]! + (margins[AXIS[crossAxis]] ?? 0));\n const arrowOverlappingChildMaxEdge =\n childOffset[crossAxis] +\n childOffset[crossSize] -\n arrowSize / 2 -\n (position[crossAxis]! + (margins[AXIS[crossAxis]] ?? 0));\n\n const arrowPositionOverlappingChild = clamp(\n preferredArrowPosition,\n arrowOverlappingChildMinEdge,\n arrowOverlappingChildMaxEdge,\n );\n arrowPosition[crossAxis] = clamp(\n arrowPositionOverlappingChild,\n arrowMinPosition,\n arrowMaxPosition,\n );\n\n if (arrowSize) {\n origin = arrowPosition[crossAxis]!;\n } else if (crossPlacement === \"right\" || crossPlacement === \"bottom\") {\n origin += childOffset[crossSize];\n } else if (crossPlacement === \"center\") {\n origin += childOffset[crossSize] / 2;\n }\n\n const crossOrigin = placement === \"left\" || placement === \"top\" ? overlaySize[size] : 0;\n const triggerAnchorPoint = {\n x: placement === \"top\" || placement === \"bottom\" ? origin : crossOrigin,\n y: placement === \"left\" || placement === \"right\" ? origin : crossOrigin,\n };\n\n return {\n position,\n maxHeight: maxHeight,\n arrowOffsetLeft: arrowPosition.left,\n arrowOffsetTop: arrowPosition.top,\n placement,\n triggerAnchorPoint,\n };\n}\n\nexport function getRect(node: Element, ignoreScale: boolean) {\n const { top, left, width: bWidth, height: bHeight } = node.getBoundingClientRect();\n let width = bWidth;\n let height = bHeight;\n\n if (ignoreScale && node instanceof (node.ownerDocument.defaultView?.HTMLElement ?? HTMLElement)) {\n width = (node as HTMLElement).offsetWidth;\n height = (node as HTMLElement).offsetHeight;\n }\n\n return { top, left, width, height };\n}\n\nfunction getElementOffset(\n node: Element,\n ignoreScale: boolean,\n overrideRect?: Offset | null,\n): Offset {\n const { top, left, width, height } = overrideRect || getRect(node, ignoreScale);\n const { scrollTop, scrollLeft, clientTop, clientLeft } = document.documentElement;\n return {\n top: top + scrollTop - clientTop,\n left: left + scrollLeft - clientLeft,\n width,\n height,\n };\n}\n\nfunction getPosition(\n node: Element,\n parent: Element,\n ignoreScale: boolean,\n overrideRect?: Offset | null,\n): Offset {\n const style = window.getComputedStyle(node);\n let offset: Offset;\n if (style.position === \"fixed\") {\n offset = overrideRect || getRect(node, ignoreScale);\n } else {\n offset = getElementOffset(node, ignoreScale, overrideRect);\n const parentOffset = getElementOffset(parent, ignoreScale);\n const parentStyle = window.getComputedStyle(parent);\n parentOffset.top +=\n (parseInt(parentStyle.borderTopWidth, 10) || 0) - (parent as HTMLElement).scrollTop;\n parentOffset.left +=\n (parseInt(parentStyle.borderLeftWidth, 10) || 0) - (parent as HTMLElement).scrollLeft;\n offset.top -= parentOffset.top;\n offset.left -= parentOffset.left;\n }\n\n offset.top -= parseInt(style.marginTop, 10) || 0;\n offset.left -= parseInt(style.marginLeft, 10) || 0;\n return offset;\n}\n\nfunction getContainingBlock(node: HTMLElement): Element {\n let offsetParent = node.offsetParent;\n\n if (\n offsetParent &&\n offsetParent === document.body &&\n window.getComputedStyle(offsetParent).position === \"static\" &&\n !isContainingBlock(offsetParent)\n ) {\n offsetParent = document.documentElement;\n }\n\n if (offsetParent == null) {\n offsetParent = node.parentElement;\n while (offsetParent && !isContainingBlock(offsetParent)) {\n offsetParent = offsetParent.parentElement;\n }\n }\n\n return offsetParent || document.documentElement;\n}\n\nfunction isContainingBlock(node: Element): boolean {\n const style = window.getComputedStyle(node);\n return (\n style.transform !== \"none\" ||\n /transform|perspective/.test(style.willChange) ||\n style.filter !== \"none\" ||\n style.contain === \"paint\" ||\n (\"backdropFilter\" in style && style.getPropertyValue(\"backdrop-filter\") !== \"none\") ||\n (\"WebkitBackdropFilter\" in style &&\n style.getPropertyValue(\"-webkit-backdrop-filter\") !== \"none\")\n );\n}\n\n/**\n * Determines where to place the overlay with regards to the target and the position of an optional indicator.\n */\nexport function calculatePosition(opts: PositionOpts): PositionResult {\n const {\n placement,\n targetNode,\n overlayNode,\n scrollNode,\n padding,\n shouldFlip,\n boundaryElement,\n offset,\n crossOffset,\n maxHeight,\n arrowSize,\n arrowBoundaryOffset = 0,\n targetRect,\n } = opts;\n\n const visualViewport = getVisualViewport();\n const container =\n overlayNode instanceof HTMLElement ? getContainingBlock(overlayNode) : document.documentElement;\n const isViewportContainer = container === document.documentElement;\n const containerPositionStyle = window.getComputedStyle(container).position;\n const isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== \"static\";\n const childOffset: Offset = isViewportContainer\n ? getElementOffset(targetNode, false, targetRect)\n : getPosition(targetNode, container, false, targetRect);\n\n if (!isViewportContainer) {\n const { marginTop, marginLeft } = window.getComputedStyle(targetNode);\n childOffset.top += parseInt(marginTop, 10) || 0;\n childOffset.left += parseInt(marginLeft, 10) || 0;\n }\n\n const overlaySize: Offset = getElementOffset(overlayNode, true);\n const margins = getMargins(overlayNode);\n overlaySize.width += (margins.left ?? 0) + (margins.right ?? 0);\n overlaySize.height += (margins.top ?? 0) + (margins.bottom ?? 0);\n\n const scrollSize = getScroll(scrollNode);\n const boundaryDimensions = getContainerDimensions(boundaryElement, visualViewport);\n const containerDimensions = getContainerDimensions(container, visualViewport);\n const containerOffsetWithBoundary: Offset = getPosition(boundaryElement, container, false);\n\n const isContainerDescendentOfBoundary = boundaryElement.contains(container);\n return calculatePositionInternal(\n placement,\n childOffset,\n overlaySize,\n scrollSize,\n margins,\n padding,\n shouldFlip,\n boundaryDimensions,\n containerDimensions,\n containerOffsetWithBoundary,\n offset,\n crossOffset,\n isContainerPositioned,\n maxHeight,\n arrowSize,\n arrowBoundaryOffset,\n isContainerDescendentOfBoundary,\n visualViewport,\n );\n}\n","/**\n * Handles positioning overlays like popovers and menus relative to a trigger\n * element, and updating the position when the window resizes.\n *\n * Ported from @react-aria/overlays useOverlayPosition.\n */\n\nimport { createEffect, createSignal, onCleanup, type JSX } from \"solid-js\";\nimport { useLocale } from \"../i18n\";\nimport {\n calculatePosition,\n getRect,\n type Placement,\n type PlacementAxis,\n type PositionResult,\n} from \"./calculatePosition\";\n\nexport interface PositionProps {\n /**\n * The placement of the element with respect to its anchor element.\n * @default 'bottom'\n */\n placement?: Placement;\n /**\n * The placement padding that should be applied between the element and its\n * surrounding container.\n * @default 12\n */\n containerPadding?: number;\n /**\n * The additional offset applied along the main axis between the element and its\n * anchor element.\n * @default 0\n */\n offset?: number;\n /**\n * The additional offset applied along the cross axis between the element and its\n * anchor element.\n * @default 0\n */\n crossOffset?: number;\n /**\n * Whether the element should flip its orientation (e.g. top to bottom or left to right) when\n * there is insufficient room for it to render completely.\n * @default true\n */\n shouldFlip?: boolean;\n /** Whether the overlay is currently open. */\n isOpen?: boolean;\n}\n\nexport interface AriaPositionProps extends PositionProps {\n /**\n * Cross size of the overlay arrow in pixels.\n * @default 0\n */\n arrowSize?: number;\n /**\n * Element that that serves as the positioning boundary.\n * @default document.body\n */\n boundaryElement?: Element;\n /**\n * The ref for the element which the overlay positions itself with respect to.\n */\n targetRef: () => Element | null;\n /**\n * The ref for the overlay element.\n */\n overlayRef: () => Element | null;\n /**\n * The ref for the arrow element.\n */\n arrowRef?: () => Element | null;\n /**\n * A ref for the scrollable region within the overlay.\n * @default overlayRef\n */\n scrollRef?: () => Element | null;\n /**\n * Whether the overlay should update its position automatically.\n * @default true\n */\n shouldUpdatePosition?: boolean;\n /** Handler that is called when the overlay should close. */\n onClose?: (() => void) | null;\n /**\n * The maxHeight specified for the overlay element.\n * By default, it will take all space up to the current viewport height.\n */\n maxHeight?: number;\n /**\n * The minimum distance the arrow's edge should be from the edge of the overlay element.\n * @default 0\n */\n arrowBoundaryOffset?: number;\n /**\n * Overrides the target element's bounding rectangle. Useful for positioning relative to\n * a specific point such as the mouse cursor (e.g. context menus) or text selection.\n *\n * @default target.getBoundingClientRect()\n * @param target - The target element.\n */\n getTargetRect?: (target: Element) => DOMRect | null | undefined;\n}\n\nexport interface PositionAria {\n /** Props for the overlay container element. */\n overlayProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the overlay tip arrow if any. */\n arrowProps: JSX.HTMLAttributes<HTMLElement>;\n /** Placement of the overlay with respect to the overlay trigger. */\n placement: () => PlacementAxis | null;\n /** The origin of the target in the overlay's coordinate system. Useful for animations. */\n triggerAnchorPoint: () => { x: number; y: number } | null;\n /** Updates the position of the overlay. */\n updatePosition: () => void;\n}\n\nconst visualViewport = typeof document !== \"undefined\" ? window.visualViewport : null;\n\nfunction translateRTL(position: string, direction: string): string {\n if (direction === \"rtl\") {\n return position.replace(\"start\", \"right\").replace(\"end\", \"left\");\n }\n return position.replace(\"start\", \"left\").replace(\"end\", \"right\");\n}\n\n/**\n * Handles positioning overlays like popovers and menus relative to a trigger\n * element, and updating the position when the window resizes.\n */\nexport function createOverlayPosition(props: AriaPositionProps): PositionAria {\n const locale = useLocale();\n const direction = () => locale().direction;\n\n const arrowSize = () => props.arrowSize ?? 0;\n const targetRef = () => props.targetRef();\n const overlayRef = () => props.overlayRef();\n const arrowRef = () => props.arrowRef?.() ?? null;\n const scrollRef = () => props.scrollRef?.() ?? overlayRef();\n const placement = () => (props.placement ?? \"bottom\") as Placement;\n const containerPadding = () => props.containerPadding ?? 12;\n const shouldFlip = () => props.shouldFlip ?? true;\n const boundaryElement = () =>\n props.boundaryElement ?? (typeof document !== \"undefined\" ? document.body : null);\n const offset = () => props.offset ?? 0;\n const crossOffset = () => props.crossOffset ?? 0;\n const shouldUpdatePosition = () => props.shouldUpdatePosition ?? true;\n const isOpen = () => props.isOpen ?? true;\n const onClose = () => props.onClose;\n const maxHeight = () => props.maxHeight;\n const arrowBoundaryOffset = () => props.arrowBoundaryOffset ?? 0;\n\n const [position, setPosition] = createSignal<PositionResult | null>(null);\n\n // Track the last scale to freeze overlay during pinch zoom\n let lastScale = visualViewport?.scale;\n\n createEffect(() => {\n if (isOpen()) {\n lastScale = visualViewport?.scale;\n }\n });\n\n const updatePosition = () => {\n const overlayNode = overlayRef();\n const targetNode = targetRef();\n const boundary = boundaryElement();\n\n if (!shouldUpdatePosition() || !isOpen() || !overlayNode || !targetNode || !boundary) {\n return;\n }\n\n if (visualViewport?.scale !== lastScale) {\n return;\n }\n\n const scrollNode = scrollRef();\n const arrowNode = arrowRef();\n\n // Reset overlay's previous max height\n const overlay = overlayNode as HTMLElement;\n if (!maxHeight() && overlayNode) {\n overlay.style.top = \"0px\";\n overlay.style.bottom = \"\";\n overlay.style.maxHeight = (window.visualViewport?.height ?? window.innerHeight) + \"px\";\n }\n\n const result = calculatePosition({\n placement: translateRTL(placement(), direction()) as Placement,\n overlayNode,\n targetNode,\n scrollNode: scrollNode || overlayNode,\n padding: containerPadding(),\n shouldFlip: shouldFlip(),\n boundaryElement: boundary,\n offset: offset(),\n crossOffset: crossOffset(),\n maxHeight: maxHeight(),\n arrowSize: arrowSize() ?? (arrowNode ? getRect(arrowNode, true).width : 0),\n arrowBoundaryOffset: arrowBoundaryOffset(),\n targetRect: props.getTargetRect?.(targetNode),\n });\n\n if (!result.position) {\n return;\n }\n\n // Apply styles directly for immediate positioning\n overlay.style.top = \"\";\n overlay.style.bottom = \"\";\n overlay.style.left = \"\";\n overlay.style.right = \"\";\n\n const pos = result.position as Record<string, number | undefined>;\n Object.keys(pos).forEach((key) => {\n overlay.style.setProperty(key, pos[key] + \"px\");\n });\n overlay.style.maxHeight = result.maxHeight != null ? result.maxHeight + \"px\" : \"\";\n\n setPosition(result);\n };\n\n // Update position when dependencies change\n createEffect(() => {\n // Track all dependencies\n shouldUpdatePosition();\n placement();\n overlayRef();\n targetRef();\n arrowRef();\n scrollRef();\n containerPadding();\n shouldFlip();\n boundaryElement();\n offset();\n crossOffset();\n isOpen();\n maxHeight();\n arrowBoundaryOffset();\n arrowSize();\n\n updatePosition();\n });\n\n // Update position on window resize\n createEffect(() => {\n if (!isOpen()) return;\n\n const handleResize = () => updatePosition();\n window.addEventListener(\"resize\", handleResize, false);\n\n onCleanup(() => {\n window.removeEventListener(\"resize\", handleResize, false);\n });\n });\n\n // Update position when overlay changes size using ResizeObserver\n createEffect(() => {\n const overlayNode = overlayRef();\n if (!overlayNode || !isOpen()) return;\n\n const resizeObserver = new ResizeObserver(() => updatePosition());\n resizeObserver.observe(overlayNode);\n\n onCleanup(() => {\n resizeObserver.disconnect();\n });\n });\n\n // Update position when target changes size\n createEffect(() => {\n const targetNode = targetRef();\n if (!targetNode || !isOpen()) return;\n\n const resizeObserver = new ResizeObserver(() => updatePosition());\n resizeObserver.observe(targetNode);\n\n onCleanup(() => {\n resizeObserver.disconnect();\n });\n });\n\n // Handle visual viewport resize (for iOS virtual keyboard)\n createEffect(() => {\n if (!isOpen()) return;\n\n let timeout: ReturnType<typeof setTimeout>;\n let isResizing = false;\n\n const onResize = () => {\n isResizing = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n isResizing = false;\n }, 500);\n updatePosition();\n };\n\n const onScroll = () => {\n if (isResizing) {\n onResize();\n }\n };\n\n visualViewport?.addEventListener(\"resize\", onResize);\n visualViewport?.addEventListener(\"scroll\", onScroll);\n\n onCleanup(() => {\n visualViewport?.removeEventListener(\"resize\", onResize);\n visualViewport?.removeEventListener(\"scroll\", onScroll);\n clearTimeout(timeout);\n });\n });\n\n // Close on scroll (when scrolling a parent of the trigger)\n createEffect(() => {\n const targetNode = targetRef();\n const closeHandler = onClose();\n if (!targetNode || !isOpen() || !closeHandler) return;\n\n const handleScroll = (e: Event) => {\n const target = e.target as Element;\n // Don't close if scrolling within the overlay\n if (overlayRef()?.contains(target)) return;\n // Close if scrolling a parent of the target (but not body/html)\n if (\n target !== document.body &&\n target !== document.documentElement &&\n target.contains(targetNode)\n ) {\n closeHandler();\n }\n };\n\n document.addEventListener(\"scroll\", handleScroll, true);\n\n onCleanup(() => {\n document.removeEventListener(\"scroll\", handleScroll, true);\n });\n });\n\n return {\n overlayProps: {\n get style(): JSX.CSSProperties {\n const current = position();\n return {\n position: current ? \"absolute\" : \"fixed\",\n top: !current ? 0 : undefined,\n left: !current ? 0 : undefined,\n \"z-index\": 100000,\n \"max-height\": current?.maxHeight ?? \"100vh\",\n } as JSX.CSSProperties;\n },\n },\n placement: () => position()?.placement ?? null,\n triggerAnchorPoint: () => position()?.triggerAnchorPoint ?? null,\n arrowProps: {\n \"aria-hidden\": \"true\",\n role: \"presentation\",\n get style(): JSX.CSSProperties {\n const current = position();\n return {\n left: current?.arrowOffsetLeft != null ? `${current.arrowOffsetLeft}px` : undefined,\n top: current?.arrowOffsetTop != null ? `${current.arrowOffsetTop}px` : undefined,\n };\n },\n },\n updatePosition,\n };\n}\n\nexport { type Placement, type PlacementAxis } from \"./calculatePosition\";\n","/**\n * Provides the behavior and accessibility implementation for a popover component.\n * A popover is an overlay element positioned relative to a trigger.\n *\n * Ported from @react-aria/overlays usePopover.\n */\n\nimport { createEffect, onCleanup, type JSX } from \"solid-js\";\nimport { createOverlay } from \"../overlays/createOverlay\";\nimport {\n createOverlayPosition,\n type AriaPositionProps,\n type PlacementAxis,\n} from \"./createOverlayPosition\";\nimport { createPreventScroll } from \"../overlays/createPreventScroll\";\nimport { ariaHideOutside, keepVisible } from \"../overlays/ariaHideOutside\";\nimport { mergeProps } from \"../utils/mergeProps\";\n\nexport interface OverlayTriggerState {\n /** Whether the overlay is currently open. */\n isOpen: () => boolean;\n /** Opens the overlay. */\n open: () => void;\n /** Closes the overlay. */\n close: () => void;\n /** Toggles the overlay's open state. */\n toggle: () => void;\n}\n\nexport interface AriaPopoverProps extends Omit<\n AriaPositionProps,\n \"isOpen\" | \"onClose\" | \"targetRef\" | \"overlayRef\"\n> {\n /**\n * The ref for the element which the popover positions itself with respect to.\n */\n triggerRef: () => Element | null;\n /**\n * The ref for the popover element.\n */\n popoverRef: () => Element | null;\n /** A ref for the popover arrow element. */\n arrowRef?: () => Element | null;\n /**\n * An optional ref for a group of popovers, e.g. submenus.\n * When provided, this element is used to detect outside interactions\n * and hiding elements from assistive technologies instead of the popoverRef.\n */\n groupRef?: () => Element | null;\n /**\n * Whether the popover is non-modal, i.e. elements outside the popover may be\n * interacted with by assistive technologies.\n *\n * Most popovers should not use this option as it may negatively impact the screen\n * reader experience. Only use with components such as combobox, which are designed\n * to handle this situation carefully.\n */\n isNonModal?: boolean;\n /**\n * Whether pressing the escape key to close the popover should be disabled.\n *\n * Most popovers should not use this option. When set to true, an alternative\n * way to close the popover with a keyboard must be provided.\n *\n * @default false\n */\n isKeyboardDismissDisabled?: boolean;\n /**\n * When user interacts with the argument element outside of the popover ref,\n * return true if onClose should be called. This gives you a chance to filter\n * out interaction with elements that should not dismiss the popover.\n * By default, onClose will always be called on interaction outside the popover ref.\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean;\n /**\n * The type of trigger that opened the popover.\n * Used for submenu detection.\n */\n trigger?: string;\n}\n\nexport interface PopoverAria {\n /** Props for the popover element. */\n popoverProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the popover tip arrow if any. */\n arrowProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props to apply to the underlay element, if any. */\n underlayProps: JSX.HTMLAttributes<HTMLElement>;\n /** Placement of the popover with respect to the trigger. */\n placement: () => PlacementAxis | null;\n /** The origin of the target in the overlay's coordinate system. Useful for animations. */\n triggerAnchorPoint: () => { x: number; y: number } | null;\n}\n\n/**\n * Provides the behavior and accessibility implementation for a popover component.\n * A popover is an overlay element positioned relative to a trigger.\n */\nexport function createPopover(props: AriaPopoverProps, state: OverlayTriggerState): PopoverAria {\n const triggerRef = () => props.triggerRef();\n const popoverRef = () => props.popoverRef();\n const groupRef = () => props.groupRef?.() ?? null;\n const isNonModal = () => props.isNonModal ?? false;\n const isKeyboardDismissDisabled = () => props.isKeyboardDismissDisabled ?? false;\n const shouldCloseOnInteractOutside = props.shouldCloseOnInteractOutside;\n const isSubmenu = () => props.trigger === \"SubmenuTrigger\";\n\n // Overlay behavior (dismiss handling)\n const { overlayProps, underlayProps } = createOverlay(\n {\n get isOpen() {\n return state.isOpen();\n },\n onClose: state.close,\n get shouldCloseOnBlur() {\n return !isSubmenu();\n },\n get isDismissable() {\n return !isNonModal() || isSubmenu();\n },\n get isKeyboardDismissDisabled() {\n return isKeyboardDismissDisabled();\n },\n get shouldCloseOnInteractOutside() {\n return shouldCloseOnInteractOutside;\n },\n },\n () => groupRef() ?? popoverRef(),\n );\n\n // Overlay positioning\n const {\n overlayProps: positionProps,\n arrowProps,\n placement,\n triggerAnchorPoint,\n } = createOverlayPosition({\n ...props,\n targetRef: triggerRef,\n overlayRef: popoverRef,\n get isOpen() {\n return state.isOpen();\n },\n get onClose() {\n return isNonModal() && !isSubmenu() ? state.close : null;\n },\n });\n\n // Prevent scroll when modal popover is open\n createPreventScroll({\n get isDisabled() {\n return isNonModal() || !state.isOpen();\n },\n });\n\n // Aria-hide outside elements\n createEffect(() => {\n if (state.isOpen() && popoverRef()) {\n const element = groupRef() ?? popoverRef();\n if (!element) return;\n\n let cleanup: (() => void) | undefined;\n\n if (isNonModal()) {\n cleanup = keepVisible(element);\n } else {\n cleanup = ariaHideOutside([element], { shouldUseInert: true });\n }\n\n onCleanup(() => {\n cleanup?.();\n });\n }\n });\n\n const merged = mergeProps(overlayProps, positionProps) as Record<string, unknown>;\n const popoverProps = new Proxy(merged, {\n get(target, key: string) {\n if (key === \"style\") return positionProps.style;\n return target[key];\n },\n has(target, key) {\n return key in target;\n },\n ownKeys(target) {\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, key) {\n if (key === \"style\") {\n return {\n configurable: true,\n enumerable: true,\n get: () => positionProps.style,\n };\n }\n return Reflect.getOwnPropertyDescriptor(target, key);\n },\n });\n\n return {\n popoverProps,\n arrowProps,\n underlayProps,\n placement,\n triggerAnchorPoint,\n };\n}\n\nexport { type PlacementAxis } from \"./createOverlayPosition\";\n"],"mappings":"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"}
@@ -0,0 +1,319 @@
1
+ import { t as createPress } from "./createPress.js";
2
+ import { i as access, o as mergeProps, t as isDevEnv } from "./env.js";
3
+ import { t as filterDOMProps } from "./filterDOMProps.js";
4
+ import { a as getEventTarget, t as focusSafely } from "./focus.js";
5
+ import { t as createFocusWithin } from "./createFocusWithin.js";
6
+ import { n as createFocusable } from "./createFocusable.js";
7
+ import { a as useLocale } from "./createCollator.js";
8
+ import { createId as createId$1, createSlotId } from "../ssr/index.js";
9
+ import { t as createField } from "./createField.js";
10
+ import { createEffect } from "solid-js";
11
+ import { createRadioGroupState, radioGroupSyncVersion, radioGroupSyncVersion as radioGroupSyncVersion$1 } from "@proyecto-viviana/solid-stately";
12
+ //#region src/radio/createRadioGroup.ts
13
+ const radioGroupData = /* @__PURE__ */ new WeakMap();
14
+ /**
15
+ * Provides the behavior and accessibility implementation for a radio group component.
16
+ * Radio groups allow users to select a single item from a list of mutually exclusive options.
17
+ */
18
+ function createRadioGroup(props, state) {
19
+ const getProps = () => access(props);
20
+ const locale = useLocale();
21
+ const orientation = () => getProps().orientation ?? "vertical";
22
+ const isReadOnly = () => getProps().isReadOnly ?? false;
23
+ const isRequired = () => getProps().isRequired ?? false;
24
+ const isDisabled = () => getProps().isDisabled ?? false;
25
+ const validationBehavior = () => getProps().validationBehavior ?? "native";
26
+ const displayValidation = () => state.displayValidation();
27
+ const validationErrors = () => displayValidation().validationErrors;
28
+ const validationDetails = () => displayValidation().validationDetails;
29
+ const isInvalid = () => displayValidation().isInvalid;
30
+ const fallbackErrorMessage = () => {
31
+ const errors = validationErrors();
32
+ return errors.length > 0 ? errors : void 0;
33
+ };
34
+ const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({
35
+ get id() {
36
+ return getProps().id;
37
+ },
38
+ get label() {
39
+ return getProps().label;
40
+ },
41
+ get "aria-label"() {
42
+ return getProps()["aria-label"];
43
+ },
44
+ get "aria-labelledby"() {
45
+ return getProps()["aria-labelledby"];
46
+ },
47
+ get description() {
48
+ return getProps().description;
49
+ },
50
+ get errorMessage() {
51
+ return getProps().errorMessage ?? fallbackErrorMessage();
52
+ },
53
+ get isInvalid() {
54
+ return isInvalid();
55
+ },
56
+ labelElementType: "span"
57
+ });
58
+ const { focusWithinProps } = createFocusWithin({
59
+ onBlurWithin(e) {
60
+ getProps().onBlur?.(e);
61
+ if (!state.selectedValue()) state.setLastFocusedValue(null);
62
+ },
63
+ onFocusWithin: (e) => getProps().onFocus?.(e),
64
+ onFocusWithinChange: (isFocused) => getProps().onFocusChange?.(isFocused)
65
+ });
66
+ const domProps = () => filterDOMProps(getProps(), { labelable: true });
67
+ const groupName = getProps().name ?? createId$1();
68
+ radioGroupData.set(state, {
69
+ name: groupName,
70
+ form: getProps().form,
71
+ descriptionId: descriptionProps.id,
72
+ errorMessageId: errorMessageProps.id,
73
+ validationBehavior: validationBehavior()
74
+ });
75
+ const getNavigableRadios = (root) => {
76
+ return Array.from(root.querySelectorAll("input[type=\"radio\"]")).filter((el) => {
77
+ return el instanceof HTMLInputElement && !el.matches(":disabled");
78
+ });
79
+ };
80
+ const onKeyDown = (e) => {
81
+ let nextDir = null;
82
+ const isHorizontal = orientation() !== "vertical";
83
+ const isRTL = locale().direction === "rtl" && isHorizontal;
84
+ switch (e.key) {
85
+ case "ArrowRight":
86
+ nextDir = isRTL ? "prev" : "next";
87
+ break;
88
+ case "ArrowLeft":
89
+ nextDir = isRTL ? "next" : "prev";
90
+ break;
91
+ case "ArrowDown":
92
+ nextDir = "next";
93
+ break;
94
+ case "ArrowUp":
95
+ nextDir = "prev";
96
+ break;
97
+ default: return;
98
+ }
99
+ e.preventDefault();
100
+ const root = e.currentTarget;
101
+ if (!(root instanceof HTMLElement)) return;
102
+ const radios = getNavigableRadios(root);
103
+ if (radios.length === 0) return;
104
+ const eventTarget = getEventTarget(e);
105
+ const activeElement = root.ownerDocument.activeElement;
106
+ const currentRadio = eventTarget instanceof HTMLInputElement && eventTarget.type === "radio" ? eventTarget : activeElement instanceof HTMLInputElement && activeElement.type === "radio" ? activeElement : null;
107
+ const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;
108
+ let nextIndex;
109
+ if (nextDir === "next") nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;
110
+ else nextIndex = currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;
111
+ const nextRadio = radios[nextIndex];
112
+ if (!nextRadio) return;
113
+ focusSafely(nextRadio);
114
+ state.setSelectedValue(nextRadio.value);
115
+ };
116
+ return {
117
+ get radioGroupProps() {
118
+ return mergeProps(domProps(), focusWithinProps, {
119
+ role: "radiogroup",
120
+ onKeyDown,
121
+ "aria-invalid": isInvalid() || void 0,
122
+ "aria-errormessage": getProps()["aria-errormessage"],
123
+ "aria-readonly": isReadOnly() || void 0,
124
+ "aria-required": isRequired() || void 0,
125
+ "aria-disabled": isDisabled() || void 0,
126
+ "aria-orientation": orientation(),
127
+ ...fieldProps
128
+ });
129
+ },
130
+ labelProps,
131
+ descriptionProps,
132
+ errorMessageProps,
133
+ get isInvalid() {
134
+ return isInvalid();
135
+ },
136
+ get validationErrors() {
137
+ return validationErrors();
138
+ },
139
+ get validationDetails() {
140
+ return validationDetails();
141
+ }
142
+ };
143
+ }
144
+ //#endregion
145
+ //#region src/radio/createRadio.ts
146
+ /**
147
+ * Radio hook for Solidaria
148
+ *
149
+ * Provides the behavior and accessibility implementation for an individual
150
+ * radio button in a radio group.
151
+ *
152
+ * This is a 1:1 port of @react-aria/radio's useRadio hook.
153
+ */
154
+ /**
155
+ * Provides the behavior and accessibility implementation for an individual
156
+ * radio button in a radio group.
157
+ */
158
+ function createRadio(props, state, ref) {
159
+ const getProps = () => access(props);
160
+ const isDisabled = () => getProps().isDisabled || state.isDisabled;
161
+ const value = () => getProps().value;
162
+ const isSelected = () => {
163
+ return state.selectedValue() === value();
164
+ };
165
+ createEffect(() => {
166
+ const p = getProps();
167
+ const hasChildren = p.children != null;
168
+ const hasAriaLabel = p["aria-label"] != null || p["aria-labelledby"] != null;
169
+ if (!hasChildren && !hasAriaLabel && isDevEnv()) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
170
+ });
171
+ createEffect(() => {
172
+ radioGroupSyncVersion.get(state)?.();
173
+ const shouldBeChecked = isSelected();
174
+ const inputEl = ref();
175
+ if (!inputEl) return;
176
+ if (inputEl.checked !== shouldBeChecked) inputEl.checked = shouldBeChecked;
177
+ });
178
+ const onChange = (e) => {
179
+ e.stopPropagation();
180
+ const target = e.target;
181
+ if (isDisabled()) {
182
+ target.checked = isSelected();
183
+ return;
184
+ }
185
+ state.setSelectedValue(value());
186
+ target.focus();
187
+ target.checked = isSelected();
188
+ };
189
+ const { pressProps, isPressed } = createPress({
190
+ get onPressStart() {
191
+ return getProps().onPressStart;
192
+ },
193
+ get onPressEnd() {
194
+ return getProps().onPressEnd;
195
+ },
196
+ get onPressChange() {
197
+ return getProps().onPressChange;
198
+ },
199
+ get onPress() {
200
+ return getProps().onPress;
201
+ },
202
+ get onPressUp() {
203
+ return getProps().onPressUp;
204
+ },
205
+ get onClick() {
206
+ return getProps().onClick;
207
+ },
208
+ get isDisabled() {
209
+ return isDisabled();
210
+ }
211
+ });
212
+ const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({
213
+ get onPressStart() {
214
+ return getProps().onPressStart;
215
+ },
216
+ get onPressEnd() {
217
+ return getProps().onPressEnd;
218
+ },
219
+ get onPressChange() {
220
+ return getProps().onPressChange;
221
+ },
222
+ get onPressUp() {
223
+ return getProps().onPressUp;
224
+ },
225
+ get onClick() {
226
+ return getProps().onClick;
227
+ },
228
+ onPress(e) {
229
+ getProps().onPress?.(e);
230
+ state.setSelectedValue(value());
231
+ ref()?.focus();
232
+ },
233
+ get isDisabled() {
234
+ return isDisabled();
235
+ }
236
+ });
237
+ const { focusableProps } = createFocusable({
238
+ get isDisabled() {
239
+ return isDisabled();
240
+ },
241
+ get autoFocus() {
242
+ return getProps().autoFocus;
243
+ },
244
+ onFocus(e) {
245
+ getProps().onFocus?.(e);
246
+ state.setLastFocusedValue(value());
247
+ },
248
+ get onBlur() {
249
+ return getProps().onBlur;
250
+ },
251
+ get onFocusChange() {
252
+ return getProps().onFocusChange;
253
+ },
254
+ get onKeyDown() {
255
+ return getProps().onKeyDown;
256
+ },
257
+ get onKeyUp() {
258
+ return getProps().onKeyUp;
259
+ }
260
+ }, ref);
261
+ const interactions = mergeProps(pressProps, focusableProps);
262
+ const domProps = () => filterDOMProps(getProps(), { labelable: true });
263
+ const getTabIndex = () => {
264
+ if (isDisabled()) return;
265
+ const selected = state.selectedValue();
266
+ const lastFocused = state.lastFocusedValue();
267
+ const currentValue = value();
268
+ if (selected != null) {
269
+ if (selected === currentValue) return 0;
270
+ return -1;
271
+ } else {
272
+ if (lastFocused === currentValue || lastFocused == null) return 0;
273
+ return -1;
274
+ }
275
+ };
276
+ const getGroupData = () => radioGroupData.get(state);
277
+ const combinedIsPressed = () => isPressed() || isLabelPressed();
278
+ const descriptionId = createSlotId();
279
+ return {
280
+ labelProps: mergeProps(labelPressProps, {
281
+ onClick: (e) => e.preventDefault(),
282
+ onMouseDown: (e) => e.preventDefault()
283
+ }),
284
+ get inputProps() {
285
+ const p = getProps();
286
+ const groupData = getGroupData();
287
+ const describedByIds = [];
288
+ if (p["aria-describedby"]) describedByIds.push(p["aria-describedby"]);
289
+ const ownDescriptionId = descriptionId();
290
+ if (ownDescriptionId) describedByIds.push(ownDescriptionId);
291
+ if (state.isInvalid && groupData?.errorMessageId) describedByIds.push(groupData.errorMessageId);
292
+ if (groupData?.descriptionId) describedByIds.push(groupData.descriptionId);
293
+ const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(" ") : void 0;
294
+ const validationBehavior = groupData?.validationBehavior ?? "native";
295
+ return mergeProps(domProps(), interactions, {
296
+ type: "radio",
297
+ name: groupData?.name,
298
+ form: groupData?.form,
299
+ tabIndex: getTabIndex(),
300
+ disabled: isDisabled(),
301
+ required: validationBehavior === "native" ? state.isRequired : void 0,
302
+ checked: isSelected(),
303
+ value: value(),
304
+ onChange,
305
+ "aria-describedby": ariaDescribedBy
306
+ });
307
+ },
308
+ get descriptionProps() {
309
+ return { id: descriptionId() };
310
+ },
311
+ isDisabled: isDisabled(),
312
+ isSelected,
313
+ isPressed: combinedIsPressed
314
+ };
315
+ }
316
+ //#endregion
317
+ export { radioGroupData as a, createRadioGroup as i, radioGroupSyncVersion$1 as n, createRadio as r, createRadioGroupState as t };
318
+
319
+ //# sourceMappingURL=radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.js","names":["createId"],"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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"}