@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,870 @@
1
+ import { g as isTabbable, p as isFocusable, s as getOwnerDocument, t as focusSafely } from "./focus.jsx";
2
+ import { createContext, createEffect, createSignal, onCleanup, onMount, useContext } from "solid-js";
3
+ import { isServer } from "solid-js/web";
4
+ //#region src/focus/FocusScope.tsx
5
+ /**
6
+ * FocusScope component for managing focus containment, restoration, and auto-focus.
7
+ * Based on @react-aria/focus FocusScope.
8
+ */
9
+ const FocusScopeContext = createContext(null);
10
+ /**
11
+ * Returns a FocusManager interface for the parent FocusScope.
12
+ * A FocusManager can be used to programmatically move focus within
13
+ * a FocusScope, e.g. in response to user events like keyboard navigation.
14
+ */
15
+ function useFocusManager() {
16
+ return useContext(FocusScopeContext)?.focusManager;
17
+ }
18
+ /**
19
+ * Gets all focusable elements within a scope.
20
+ */
21
+ function getFocusableElements(scope, tabbable = false) {
22
+ const elements = [];
23
+ const filter = tabbable ? isTabbable : isFocusable;
24
+ for (const scopeElement of scope) {
25
+ if (filter(scopeElement)) elements.push(scopeElement);
26
+ const descendants = scopeElement.querySelectorAll("*");
27
+ for (let i = 0; i < descendants.length; i++) {
28
+ const el = descendants[i];
29
+ if (filter(el)) elements.push(el);
30
+ }
31
+ }
32
+ return elements;
33
+ }
34
+ /**
35
+ * Checks if an element is within a scope.
36
+ */
37
+ function isElementInScope(element, scope) {
38
+ if (!element) return false;
39
+ return scope.some((node) => node.contains(element));
40
+ }
41
+ /**
42
+ * Gets the active element, accounting for shadow DOM.
43
+ */
44
+ function getActiveElement$1(doc) {
45
+ let activeElement = doc.activeElement;
46
+ while (activeElement?.shadowRoot?.activeElement) activeElement = activeElement.shadowRoot.activeElement;
47
+ return activeElement;
48
+ }
49
+ /**
50
+ * A registry of the live FocusScopes and their parent/child relationships,
51
+ * mirroring @react-aria/focus's `focusScopeTree`. The DOM tree alone can't
52
+ * express scope nesting because a child scope (e.g. a menu opened from inside a
53
+ * modal popover) is rendered in a portal, outside its parent scope's subtree.
54
+ * The tree records that nesting so containment can recognize a portaled
55
+ * descendant scope as "inside".
56
+ */
57
+ var FocusScopeTree = class {
58
+ root;
59
+ fastMap = /* @__PURE__ */ new Map();
60
+ constructor() {
61
+ this.root = {
62
+ scopeRef: null,
63
+ parent: null,
64
+ children: /* @__PURE__ */ new Set()
65
+ };
66
+ this.fastMap.set(null, this.root);
67
+ }
68
+ getTreeNode(scopeRef) {
69
+ return this.fastMap.get(scopeRef);
70
+ }
71
+ addTreeNode(scopeRef, parent) {
72
+ const parentNode = this.fastMap.get(parent) ?? this.root;
73
+ const node = {
74
+ scopeRef,
75
+ parent: parentNode,
76
+ children: /* @__PURE__ */ new Set()
77
+ };
78
+ parentNode.children.add(node);
79
+ this.fastMap.set(scopeRef, node);
80
+ }
81
+ removeTreeNode(scopeRef) {
82
+ if (scopeRef === null) return;
83
+ const node = this.fastMap.get(scopeRef);
84
+ if (!node) return;
85
+ const parentNode = node.parent;
86
+ if (parentNode) {
87
+ parentNode.children.delete(node);
88
+ for (const child of node.children) {
89
+ child.parent = parentNode;
90
+ parentNode.children.add(child);
91
+ }
92
+ }
93
+ this.fastMap.delete(scopeRef);
94
+ }
95
+ *traverse(node = this.root) {
96
+ if (node.scopeRef != null) yield node;
97
+ for (const child of node.children) yield* this.traverse(child);
98
+ }
99
+ };
100
+ const focusScopeTree = new FocusScopeTree();
101
+ /**
102
+ * Whether the element is inside `scope` or any of its descendant scopes.
103
+ *
104
+ * `isElementInScope`'s `node.contains` already covers descendant scopes that
105
+ * are DOM children, but not those rendered in a portal. Walking the scope
106
+ * subtree closes that gap so focus moving into a portaled child scope still
107
+ * counts as "inside". Mirrors @react-aria/focus's `isElementInChildScope`.
108
+ */
109
+ function isElementInChildScope(element, scope = null) {
110
+ if (element instanceof Element && element.closest("[data-react-aria-top-layer]")) return true;
111
+ for (const node of focusScopeTree.traverse(focusScopeTree.getTreeNode(scope))) if (node.scopeRef && isElementInScope(element, node.scopeRef())) return true;
112
+ return false;
113
+ }
114
+ /**
115
+ * A FocusScope manages focus for its descendants. It supports containing focus inside
116
+ * the scope, restoring focus to the previously focused element on unmount, and auto
117
+ * focusing children on mount. It also acts as a container for a programmatic focus
118
+ * management interface that can be used to move focus forward and back in response
119
+ * to user events.
120
+ */
121
+ const FocusScope = (props) => {
122
+ if (isServer) return <>{props.children}</>;
123
+ let startRef;
124
+ let endRef;
125
+ const [scopeElements, setScopeElements] = createSignal([]);
126
+ const parentScopeRef = useContext(FocusScopeContext)?.scopeRef ?? null;
127
+ let nodeToRestore = null;
128
+ const getRestorableElement = (element, doc) => {
129
+ if (!element || element === doc.body || element === doc.documentElement) return null;
130
+ return element;
131
+ };
132
+ const focusManager = {
133
+ focusNext(opts = {}) {
134
+ const scope = scopeElements();
135
+ if (scope.length === 0) return null;
136
+ const { from, tabbable = true, wrap = false, accept } = opts;
137
+ const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
138
+ const doc = getOwnerDocument(scope[0]);
139
+ const current = from || getActiveElement$1(doc);
140
+ if (!current || elements.length === 0) return null;
141
+ let nextIndex = elements.indexOf(current) + 1;
142
+ if (nextIndex >= elements.length) if (wrap) nextIndex = 0;
143
+ else return null;
144
+ const nextElement = elements[nextIndex];
145
+ if (nextElement) {
146
+ focusSafely(nextElement);
147
+ return nextElement;
148
+ }
149
+ return null;
150
+ },
151
+ focusPrevious(opts = {}) {
152
+ const scope = scopeElements();
153
+ if (scope.length === 0) return null;
154
+ const { from, tabbable = true, wrap = false, accept } = opts;
155
+ const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
156
+ const doc = getOwnerDocument(scope[0]);
157
+ const current = from || getActiveElement$1(doc);
158
+ if (!current || elements.length === 0) return null;
159
+ let prevIndex = elements.indexOf(current) - 1;
160
+ if (prevIndex < 0) if (wrap) prevIndex = elements.length - 1;
161
+ else return null;
162
+ const prevElement = elements[prevIndex];
163
+ if (prevElement) {
164
+ focusSafely(prevElement);
165
+ return prevElement;
166
+ }
167
+ return null;
168
+ },
169
+ focusFirst(opts = {}) {
170
+ const scope = scopeElements();
171
+ if (scope.length === 0) return null;
172
+ const { tabbable = true, accept } = opts;
173
+ const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
174
+ if (elements.length > 0) {
175
+ focusSafely(elements[0]);
176
+ return elements[0];
177
+ }
178
+ return null;
179
+ },
180
+ focusLast(opts = {}) {
181
+ const scope = scopeElements();
182
+ if (scope.length === 0) return null;
183
+ const { tabbable = true, accept } = opts;
184
+ const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
185
+ if (elements.length > 0) {
186
+ const lastElement = elements[elements.length - 1];
187
+ focusSafely(lastElement);
188
+ return lastElement;
189
+ }
190
+ return null;
191
+ }
192
+ };
193
+ onMount(() => {});
194
+ onMount(() => {
195
+ focusScopeTree.addTreeNode(scopeElements, parentScopeRef);
196
+ });
197
+ onCleanup(() => {
198
+ focusScopeTree.removeTreeNode(scopeElements);
199
+ });
200
+ onMount(() => {
201
+ if (!props.restoreFocus) return;
202
+ const scopeDoc = document;
203
+ const scopeActive = getActiveElement$1(scopeDoc);
204
+ const topActive = getActiveElement$1(document);
205
+ if (scopeDoc !== document && document.activeElement instanceof HTMLIFrameElement && document.activeElement.contentDocument === scopeDoc && scopeActive && scopeActive !== scopeDoc.body) {
206
+ nodeToRestore = getRestorableElement(scopeActive, scopeDoc);
207
+ return;
208
+ }
209
+ nodeToRestore = getRestorableElement(topActive, document);
210
+ });
211
+ createEffect(() => {
212
+ if (!props.autoFocus) return;
213
+ const scope = scopeElements();
214
+ if (scope.length === 0) return;
215
+ if (!isElementInScope(getActiveElement$1(getOwnerDocument(scope[0])), scope)) focusManager.focusFirst();
216
+ });
217
+ createEffect(() => {
218
+ if (!props.contain) return;
219
+ const scope = scopeElements();
220
+ if (scope.length === 0) return;
221
+ const doc = getOwnerDocument(scope[0]);
222
+ let focusedNode = null;
223
+ const onKeyDown = (e) => {
224
+ if (e.key !== "Tab" || e.altKey || e.ctrlKey || e.metaKey) return;
225
+ const scope = scopeElements();
226
+ const activeElement = getActiveElement$1(doc);
227
+ if (!isElementInScope(activeElement, scope)) return;
228
+ const elements = getFocusableElements(scope, true);
229
+ if (elements.length === 0) return;
230
+ const firstElement = elements[0];
231
+ const lastElement = elements[elements.length - 1];
232
+ if (e.shiftKey && activeElement === firstElement) {
233
+ e.preventDefault();
234
+ focusSafely(lastElement);
235
+ } else if (!e.shiftKey && activeElement === lastElement) {
236
+ e.preventDefault();
237
+ focusSafely(firstElement);
238
+ }
239
+ };
240
+ const onFocusIn = (e) => {
241
+ const scope = scopeElements();
242
+ const target = e.target;
243
+ if (isElementInScope(target, scope)) focusedNode = target;
244
+ else if (isElementInChildScope(target, scopeElements)) focusedNode = target;
245
+ else if (focusedNode) focusSafely(focusedNode);
246
+ else focusManager.focusFirst();
247
+ };
248
+ let restoreRaf = null;
249
+ const onFocusOut = (e) => {
250
+ const target = e.target;
251
+ if (!isElementInScope(target, scopeElements())) return;
252
+ const win = doc.defaultView ?? window;
253
+ if (restoreRaf != null) win.cancelAnimationFrame(restoreRaf);
254
+ restoreRaf = win.requestAnimationFrame(() => {
255
+ restoreRaf = null;
256
+ const scope = scopeElements();
257
+ const activeElement = getActiveElement$1(doc);
258
+ if (activeElement && (isElementInScope(activeElement, scope) || isElementInChildScope(activeElement, scopeElements))) return;
259
+ if (doc.body.contains(target)) {
260
+ focusedNode = target;
261
+ focusSafely(target);
262
+ } else focusManager.focusFirst();
263
+ });
264
+ };
265
+ doc.addEventListener("keydown", onKeyDown, true);
266
+ doc.addEventListener("focusin", onFocusIn, true);
267
+ doc.addEventListener("focusout", onFocusOut, true);
268
+ onCleanup(() => {
269
+ doc.removeEventListener("keydown", onKeyDown, true);
270
+ doc.removeEventListener("focusin", onFocusIn, true);
271
+ doc.removeEventListener("focusout", onFocusOut, true);
272
+ if (restoreRaf != null) (doc.defaultView ?? window).cancelAnimationFrame(restoreRaf);
273
+ });
274
+ });
275
+ onCleanup(() => {
276
+ if (props.restoreFocus && nodeToRestore && nodeToRestore.focus) {
277
+ const doc = getOwnerDocument(nodeToRestore);
278
+ (doc.defaultView ?? window).requestAnimationFrame(() => {
279
+ if (nodeToRestore && doc.body.contains(nodeToRestore)) nodeToRestore.focus();
280
+ });
281
+ }
282
+ });
283
+ return <FocusScopeContext.Provider value={{
284
+ focusManager,
285
+ scopeRef: scopeElements
286
+ }}>
287
+ <span data-focus-scope-start hidden ref={startRef} />
288
+ {props.children}
289
+ <span data-focus-scope-end hidden ref={endRef} />
290
+ </FocusScopeContext.Provider>;
291
+ };
292
+ //#endregion
293
+ //#region src/focus/createFocusRestore.ts
294
+ /**
295
+ * Focus restoration utilities for solidaria
296
+ *
297
+ * Provides enhanced focus restoration with retry logic, cross-scope tracking,
298
+ * and safe restoration patterns.
299
+ */
300
+ const focusStack = [];
301
+ /**
302
+ * Push an element onto the focus stack.
303
+ */
304
+ function pushFocusStack(element) {
305
+ focusStack.push(element);
306
+ }
307
+ /**
308
+ * Pop the last element from the focus stack.
309
+ */
310
+ function popFocusStack() {
311
+ return focusStack.pop();
312
+ }
313
+ /**
314
+ * Get the current focus stack length.
315
+ */
316
+ function getFocusStackLength() {
317
+ return focusStack.length;
318
+ }
319
+ /**
320
+ * Clear the entire focus stack.
321
+ */
322
+ function clearFocusStack() {
323
+ focusStack.length = 0;
324
+ }
325
+ /**
326
+ * Gets the active element, accounting for shadow DOM.
327
+ */
328
+ function getActiveElement(doc) {
329
+ let activeElement = doc.activeElement;
330
+ while (activeElement?.shadowRoot?.activeElement) activeElement = activeElement.shadowRoot.activeElement;
331
+ return activeElement;
332
+ }
333
+ /**
334
+ * Checks if an element is still valid for focus restoration.
335
+ */
336
+ function isValidForRestore(element) {
337
+ if (!element) return false;
338
+ if (!document.body.contains(element)) return false;
339
+ if (element.hasAttribute("disabled")) return false;
340
+ if (element.getAttribute("aria-disabled") === "true") return false;
341
+ if (element.getAttribute("aria-hidden") === "true") return false;
342
+ return true;
343
+ }
344
+ /**
345
+ * Attempts to restore focus with retries.
346
+ */
347
+ function tryRestoreFocus(element, options) {
348
+ const { maxRetries, retryDelay, preventScroll, onRestore, onRestoreFailed } = options;
349
+ let attempts = 0;
350
+ const attempt = () => {
351
+ if (!element) {
352
+ onRestoreFailed?.();
353
+ return;
354
+ }
355
+ if (isValidForRestore(element)) {
356
+ if (preventScroll) focusSafely(element);
357
+ else element.focus();
358
+ onRestore?.(element);
359
+ return;
360
+ }
361
+ attempts++;
362
+ if (attempts < maxRetries) setTimeout(attempt, retryDelay);
363
+ else onRestoreFailed?.();
364
+ };
365
+ requestAnimationFrame(attempt);
366
+ }
367
+ /**
368
+ * Creates a focus restoration manager.
369
+ *
370
+ * This hook saves the currently focused element when mounted and provides
371
+ * methods to restore focus later, with retry logic for reliability.
372
+ *
373
+ * @example
374
+ * ```tsx
375
+ * function Modal(props) {
376
+ * const focusRestore = createFocusRestore({
377
+ * restoreOnUnmount: true,
378
+ * onRestore: () => console.log('Focus restored'),
379
+ * });
380
+ *
381
+ * return (
382
+ * <div role="dialog">
383
+ * {props.children}
384
+ * <button onClick={() => focusRestore.restore()}>
385
+ * Close
386
+ * </button>
387
+ * </div>
388
+ * );
389
+ * }
390
+ * ```
391
+ *
392
+ * @example
393
+ * ```tsx
394
+ * // Manual focus management
395
+ * function Dropdown() {
396
+ * const focusRestore = createFocusRestore({ restoreOnUnmount: false });
397
+ *
398
+ * const onOpen = () => {
399
+ * focusRestore.saveCurrentFocus();
400
+ * // Focus dropdown content
401
+ * };
402
+ *
403
+ * const onClose = () => {
404
+ * focusRestore.restore();
405
+ * };
406
+ *
407
+ * return <div>...</div>;
408
+ * }
409
+ * ```
410
+ */
411
+ function createFocusRestore(options = {}) {
412
+ const { restoreOnUnmount = true, maxRetries = 3, retryDelay = 50, onRestore, onRestoreFailed, preventScroll = true } = options;
413
+ if (isServer) return {
414
+ restore: () => false,
415
+ getSavedElement: () => null,
416
+ saveCurrentFocus: () => {},
417
+ clear: () => {}
418
+ };
419
+ let savedElement = null;
420
+ onMount(() => {
421
+ saveCurrentFocus();
422
+ });
423
+ onCleanup(() => {
424
+ if (restoreOnUnmount && savedElement) tryRestoreFocus(savedElement, {
425
+ maxRetries,
426
+ retryDelay,
427
+ preventScroll,
428
+ onRestore: onRestore ?? (() => {}),
429
+ onRestoreFailed: onRestoreFailed ?? (() => {})
430
+ });
431
+ });
432
+ function saveCurrentFocus() {
433
+ const doc = typeof document !== "undefined" ? document : null;
434
+ if (!doc) return;
435
+ const active = getActiveElement(doc);
436
+ if (active && active !== doc.body) {
437
+ savedElement = active;
438
+ pushFocusStack(active);
439
+ }
440
+ }
441
+ function restore() {
442
+ if (!savedElement) return false;
443
+ if (isValidForRestore(savedElement)) {
444
+ if (preventScroll) focusSafely(savedElement);
445
+ else savedElement.focus();
446
+ onRestore?.(savedElement);
447
+ return true;
448
+ }
449
+ while (focusStack.length > 0) {
450
+ const stackElement = popFocusStack();
451
+ if (stackElement && isValidForRestore(stackElement)) {
452
+ if (preventScroll) focusSafely(stackElement);
453
+ else stackElement.focus();
454
+ onRestore?.(stackElement);
455
+ return true;
456
+ }
457
+ }
458
+ onRestoreFailed?.();
459
+ return false;
460
+ }
461
+ function getSavedElement() {
462
+ return savedElement;
463
+ }
464
+ function clear() {
465
+ savedElement = null;
466
+ }
467
+ return {
468
+ restore,
469
+ getSavedElement,
470
+ saveCurrentFocus,
471
+ clear
472
+ };
473
+ }
474
+ //#endregion
475
+ //#region src/focus/createVirtualFocus.ts
476
+ /**
477
+ * Virtual focus management for solidaria
478
+ *
479
+ * Provides virtual focus for large collections where tracking DOM focus
480
+ * on every item is impractical. Instead, a single element receives real
481
+ * focus while aria-activedescendant indicates the virtually focused item.
482
+ *
483
+ * This is commonly used in:
484
+ * - Virtualized lists (where not all items are in the DOM)
485
+ * - Large trees
486
+ * - Autocomplete/combobox suggestions
487
+ * - Grid/table navigation
488
+ */
489
+ const DEFAULT_PAGE_SIZE = 10;
490
+ /**
491
+ * Creates virtual focus management for a collection.
492
+ *
493
+ * Virtual focus uses aria-activedescendant to indicate which item is
494
+ * "focused" while keeping real DOM focus on a container element. This
495
+ * is more performant for large collections and required for virtualized
496
+ * lists where items may not be in the DOM.
497
+ *
498
+ * @example
499
+ * ```tsx
500
+ * function Listbox(props) {
501
+ * const virtualFocus = createVirtualFocus({
502
+ * items: () => props.items,
503
+ * getKey: (item) => item.id,
504
+ * isDisabled: (item) => item.disabled,
505
+ * });
506
+ *
507
+ * return (
508
+ * <ul
509
+ * role="listbox"
510
+ * tabIndex={0}
511
+ * aria-activedescendant={virtualFocus.containerProps['aria-activedescendant']()}
512
+ * onKeyDown={virtualFocus.containerProps.onKeyDown}
513
+ * >
514
+ * <For each={props.items}>
515
+ * {(item) => (
516
+ * <li
517
+ * {...virtualFocus.getItemProps(item.id)}
518
+ * role="option"
519
+ * aria-selected={virtualFocus.isFocused(item.id)}
520
+ * >
521
+ * {item.name}
522
+ * </li>
523
+ * )}
524
+ * </For>
525
+ * </ul>
526
+ * );
527
+ * }
528
+ * ```
529
+ *
530
+ * @example
531
+ * ```tsx
532
+ * // With controlled focus
533
+ * function ControlledListbox() {
534
+ * const [focusedKey, setFocusedKey] = createSignal<string | null>(null);
535
+ *
536
+ * const virtualFocus = createVirtualFocus({
537
+ * items: () => items,
538
+ * getKey: (item) => item.id,
539
+ * focusedKey: focusedKey,
540
+ * onFocusChange: setFocusedKey,
541
+ * });
542
+ *
543
+ * return <ul>...</ul>;
544
+ * }
545
+ * ```
546
+ */
547
+ function createVirtualFocus(options) {
548
+ const { items, getKey, isDisabled = () => false, defaultFocusedKey, focusedKey: controlledFocusedKey, onFocusChange, wrap = true, skipDisabled = true, orientation = "vertical" } = options;
549
+ if (isServer) {
550
+ const emptyAccessor = () => null;
551
+ return {
552
+ focusedKey: emptyAccessor,
553
+ focusedItem: emptyAccessor,
554
+ setFocusedKey: () => {},
555
+ focusNext: () => {},
556
+ focusPrevious: () => {},
557
+ focusFirst: () => {},
558
+ focusLast: () => {},
559
+ focusPageDown: () => {},
560
+ focusPageUp: () => {},
561
+ isFocused: () => false,
562
+ containerProps: {
563
+ "aria-activedescendant": () => void 0,
564
+ onKeyDown: () => {}
565
+ },
566
+ getItemProps: (key) => ({ id: `item-${key}` })
567
+ };
568
+ }
569
+ const [internalKey, setInternalKey] = createSignal(defaultFocusedKey ?? null);
570
+ const focusedKey = controlledFocusedKey ?? internalKey;
571
+ const setFocusedKey = (key) => {
572
+ if (controlledFocusedKey) onFocusChange?.(key);
573
+ else {
574
+ setInternalKey(key);
575
+ onFocusChange?.(key);
576
+ }
577
+ };
578
+ const focusedItem = () => {
579
+ const key = focusedKey();
580
+ if (!key) return null;
581
+ return items().find((item) => getKey(item) === key) ?? null;
582
+ };
583
+ const getValidItems = () => {
584
+ if (!skipDisabled) return items();
585
+ return items().filter((item) => !isDisabled(item));
586
+ };
587
+ const getKeyIndex = (key) => {
588
+ if (!key) return -1;
589
+ return getValidItems().findIndex((item) => getKey(item) === key);
590
+ };
591
+ const focusByIndex = (index) => {
592
+ const validItems = getValidItems();
593
+ if (validItems.length === 0) return;
594
+ let targetIndex = index;
595
+ if (wrap) targetIndex = (index % validItems.length + validItems.length) % validItems.length;
596
+ else targetIndex = Math.max(0, Math.min(index, validItems.length - 1));
597
+ const item = validItems[targetIndex];
598
+ if (item) setFocusedKey(getKey(item));
599
+ };
600
+ const focusNext = () => {
601
+ focusByIndex(getKeyIndex(focusedKey()) + 1);
602
+ };
603
+ const focusPrevious = () => {
604
+ const currentIndex = getKeyIndex(focusedKey());
605
+ if (currentIndex === -1) focusByIndex(getValidItems().length - 1);
606
+ else focusByIndex(currentIndex - 1);
607
+ };
608
+ const focusFirst = () => {
609
+ focusByIndex(0);
610
+ };
611
+ const focusLast = () => {
612
+ focusByIndex(getValidItems().length - 1);
613
+ };
614
+ const focusPageDown = (pageSize = DEFAULT_PAGE_SIZE) => {
615
+ focusByIndex(getKeyIndex(focusedKey()) + pageSize);
616
+ };
617
+ const focusPageUp = (pageSize = DEFAULT_PAGE_SIZE) => {
618
+ const currentIndex = getKeyIndex(focusedKey());
619
+ if (currentIndex === -1) focusByIndex(getValidItems().length - 1);
620
+ else focusByIndex(currentIndex - pageSize);
621
+ };
622
+ const isFocused = (key) => {
623
+ return focusedKey() === key;
624
+ };
625
+ const onKeyDown = (e) => {
626
+ const isVertical = orientation === "vertical" || orientation === "both";
627
+ const isHorizontal = orientation === "horizontal" || orientation === "both";
628
+ switch (e.key) {
629
+ case "ArrowDown":
630
+ if (isVertical) {
631
+ e.preventDefault();
632
+ focusNext();
633
+ }
634
+ break;
635
+ case "ArrowUp":
636
+ if (isVertical) {
637
+ e.preventDefault();
638
+ focusPrevious();
639
+ }
640
+ break;
641
+ case "ArrowRight":
642
+ if (isHorizontal) {
643
+ e.preventDefault();
644
+ focusNext();
645
+ }
646
+ break;
647
+ case "ArrowLeft":
648
+ if (isHorizontal) {
649
+ e.preventDefault();
650
+ focusPrevious();
651
+ }
652
+ break;
653
+ case "Home":
654
+ e.preventDefault();
655
+ focusFirst();
656
+ break;
657
+ case "End":
658
+ e.preventDefault();
659
+ focusLast();
660
+ break;
661
+ case "PageDown":
662
+ e.preventDefault();
663
+ focusPageDown();
664
+ break;
665
+ case "PageUp":
666
+ e.preventDefault();
667
+ focusPageUp();
668
+ break;
669
+ }
670
+ };
671
+ const containerProps = {
672
+ "aria-activedescendant": () => {
673
+ const key = focusedKey();
674
+ return key ? `item-${key}` : void 0;
675
+ },
676
+ onKeyDown
677
+ };
678
+ const getItemProps = (key) => ({ id: `item-${key}` });
679
+ return {
680
+ focusedKey,
681
+ focusedItem,
682
+ setFocusedKey,
683
+ focusNext,
684
+ focusPrevious,
685
+ focusFirst,
686
+ focusLast,
687
+ focusPageDown,
688
+ focusPageUp,
689
+ isFocused,
690
+ containerProps,
691
+ getItemProps
692
+ };
693
+ }
694
+ //#endregion
695
+ //#region src/focus/createAutoFocus.ts
696
+ /**
697
+ * Auto-focus management for solidaria
698
+ *
699
+ * Provides priority-based auto-focus with deferred execution
700
+ * and conflict resolution for multiple auto-focus elements.
701
+ */
702
+ let autoFocusQueue = [];
703
+ let processingTimeout = null;
704
+ /**
705
+ * Process the auto-focus queue and focus the highest priority element.
706
+ */
707
+ function processAutoFocusQueue() {
708
+ if (processingTimeout) {
709
+ clearTimeout(processingTimeout);
710
+ processingTimeout = null;
711
+ }
712
+ if (autoFocusQueue.length === 0) return;
713
+ autoFocusQueue.sort((a, b) => b.priority - a.priority);
714
+ const winner = autoFocusQueue[0];
715
+ const losers = autoFocusQueue.slice(1);
716
+ autoFocusQueue = [];
717
+ for (const loser of losers) loser.onSkip?.();
718
+ const element = winner.ref();
719
+ if (!element) {
720
+ winner.onSkip?.();
721
+ return;
722
+ }
723
+ const activeElement = document.activeElement;
724
+ if (!(winner.force || !activeElement || activeElement === document.body || activeElement === document.documentElement)) {
725
+ winner.onSkip?.();
726
+ return;
727
+ }
728
+ if (winner.delay > 0) setTimeout(() => {
729
+ const el = winner.ref();
730
+ if (el && document.body.contains(el)) {
731
+ if (winner.preventScroll) focusSafely(el);
732
+ else el.focus();
733
+ winner.onFocus?.(el);
734
+ }
735
+ }, winner.delay);
736
+ else {
737
+ if (winner.preventScroll) focusSafely(element);
738
+ else element.focus();
739
+ winner.onFocus?.(element);
740
+ }
741
+ }
742
+ /**
743
+ * Queue an element for auto-focus.
744
+ */
745
+ function queueAutoFocus(item) {
746
+ autoFocusQueue.push(item);
747
+ if (processingTimeout === null) processingTimeout = setTimeout(processAutoFocusQueue, 0);
748
+ }
749
+ /**
750
+ * Remove an item from the auto-focus queue.
751
+ */
752
+ function removeFromQueue(ref) {
753
+ autoFocusQueue = autoFocusQueue.filter((item) => item.ref !== ref);
754
+ }
755
+ /**
756
+ * Creates auto-focus behavior for an element.
757
+ *
758
+ * This hook registers the element for auto-focus when mounted. If multiple
759
+ * elements request auto-focus, the one with the highest priority wins.
760
+ *
761
+ * @param ref - Accessor for the element to focus
762
+ * @param options - Auto-focus options
763
+ *
764
+ * @example
765
+ * ```tsx
766
+ * function Dialog(props) {
767
+ * let contentRef: HTMLDivElement | undefined;
768
+ *
769
+ * createAutoFocus(() => contentRef, {
770
+ * priority: 10, // High priority for dialogs
771
+ * onFocus: () => console.log('Dialog focused'),
772
+ * });
773
+ *
774
+ * return (
775
+ * <div ref={contentRef} tabIndex={-1}>
776
+ * {props.children}
777
+ * </div>
778
+ * );
779
+ * }
780
+ * ```
781
+ *
782
+ * @example
783
+ * ```tsx
784
+ * // With delay for animations
785
+ * function AnimatedPanel() {
786
+ * let panelRef: HTMLDivElement | undefined;
787
+ *
788
+ * createAutoFocus(() => panelRef, {
789
+ * delay: 300, // Wait for animation
790
+ * });
791
+ *
792
+ * return <div ref={panelRef} class="animated-panel">...</div>;
793
+ * }
794
+ * ```
795
+ *
796
+ * @example
797
+ * ```tsx
798
+ * // Conditional auto-focus
799
+ * function Input(props) {
800
+ * let inputRef: HTMLInputElement | undefined;
801
+ *
802
+ * createAutoFocus(() => inputRef, {
803
+ * isEnabled: props.autoFocus,
804
+ * });
805
+ *
806
+ * return <input ref={inputRef} />;
807
+ * }
808
+ * ```
809
+ */
810
+ function createAutoFocus(ref, options = {}) {
811
+ const { isEnabled = true, priority = 0, delay = 0, force = false, preventScroll = true, onFocus, onSkip } = options;
812
+ if (isServer) return {
813
+ focus: () => {},
814
+ cancel: () => {}
815
+ };
816
+ let canceled = false;
817
+ onMount(() => {
818
+ if (!isEnabled || canceled) return;
819
+ queueAutoFocus({
820
+ ref,
821
+ priority,
822
+ delay,
823
+ force,
824
+ preventScroll,
825
+ onFocus,
826
+ onSkip
827
+ });
828
+ });
829
+ onCleanup(() => {
830
+ removeFromQueue(ref);
831
+ });
832
+ const focus = () => {
833
+ if (canceled) return;
834
+ const element = ref();
835
+ if (!element) return;
836
+ if (preventScroll) focusSafely(element);
837
+ else element.focus();
838
+ onFocus?.(element);
839
+ };
840
+ const cancel = () => {
841
+ canceled = true;
842
+ removeFromQueue(ref);
843
+ };
844
+ return {
845
+ focus,
846
+ cancel
847
+ };
848
+ }
849
+ /**
850
+ * Clears all pending auto-focus requests.
851
+ * Useful for testing or when navigating away.
852
+ */
853
+ function clearAutoFocusQueue() {
854
+ if (processingTimeout) {
855
+ clearTimeout(processingTimeout);
856
+ processingTimeout = null;
857
+ }
858
+ autoFocusQueue = [];
859
+ }
860
+ /**
861
+ * Gets the current auto-focus queue length.
862
+ * Useful for debugging.
863
+ */
864
+ function getAutoFocusQueueLength() {
865
+ return autoFocusQueue.length;
866
+ }
867
+ //#endregion
868
+ export { clearFocusStack as a, popFocusStack as c, useFocusManager as d, createVirtualFocus as i, pushFocusStack as l, createAutoFocus as n, createFocusRestore as o, getAutoFocusQueueLength as r, getFocusStackLength as s, clearAutoFocusQueue as t, FocusScope as u };
869
+
870
+ //# sourceMappingURL=focus2.jsx.map