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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1377) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/dist/_chunk/DragManager.js +71 -25
  4. package/dist/_chunk/DragManager.js.map +1 -1
  5. package/dist/_chunk/DragManager.jsx +71 -25
  6. package/dist/_chunk/DragManager.jsx.map +1 -1
  7. package/dist/_chunk/FocusScope.js +281 -66
  8. package/dist/_chunk/FocusScope.js.map +1 -1
  9. package/dist/_chunk/FocusScope.jsx +274 -55
  10. package/dist/_chunk/FocusScope.jsx.map +1 -1
  11. package/dist/_chunk/actiongroup.js +43 -19
  12. package/dist/_chunk/actiongroup.js.map +1 -1
  13. package/dist/_chunk/actiongroup.jsx +43 -19
  14. package/dist/_chunk/actiongroup.jsx.map +1 -1
  15. package/dist/_chunk/announce.js +19 -6
  16. package/dist/_chunk/announce.js.map +1 -1
  17. package/dist/_chunk/announce.jsx +19 -6
  18. package/dist/_chunk/announce.jsx.map +1 -1
  19. package/dist/_chunk/ariaHideOutside.js +212 -10
  20. package/dist/_chunk/ariaHideOutside.js.map +1 -1
  21. package/dist/_chunk/ariaHideOutside.jsx +212 -10
  22. package/dist/_chunk/ariaHideOutside.jsx.map +1 -1
  23. package/dist/_chunk/autocomplete.js +26 -7
  24. package/dist/_chunk/autocomplete.js.map +1 -1
  25. package/dist/_chunk/autocomplete.jsx +26 -7
  26. package/dist/_chunk/autocomplete.jsx.map +1 -1
  27. package/dist/_chunk/breadcrumbs.js +17 -2
  28. package/dist/_chunk/breadcrumbs.js.map +1 -1
  29. package/dist/_chunk/breadcrumbs.jsx +17 -2
  30. package/dist/_chunk/breadcrumbs.jsx.map +1 -1
  31. package/dist/_chunk/button.js +53 -20
  32. package/dist/_chunk/button.js.map +1 -1
  33. package/dist/_chunk/button.jsx +53 -20
  34. package/dist/_chunk/button.jsx.map +1 -1
  35. package/dist/_chunk/calendar.js +341 -56
  36. package/dist/_chunk/calendar.js.map +1 -1
  37. package/dist/_chunk/calendar.jsx +341 -56
  38. package/dist/_chunk/calendar.jsx.map +1 -1
  39. package/dist/_chunk/checkbox.js +69 -26
  40. package/dist/_chunk/checkbox.js.map +1 -1
  41. package/dist/_chunk/checkbox.jsx +69 -26
  42. package/dist/_chunk/checkbox.jsx.map +1 -1
  43. package/dist/_chunk/color.js +307 -48
  44. package/dist/_chunk/color.js.map +1 -1
  45. package/dist/_chunk/color.jsx +307 -48
  46. package/dist/_chunk/color.jsx.map +1 -1
  47. package/dist/_chunk/combobox.js +193 -103
  48. package/dist/_chunk/combobox.js.map +1 -1
  49. package/dist/_chunk/combobox.jsx +193 -103
  50. package/dist/_chunk/combobox.jsx.map +1 -1
  51. package/dist/_chunk/constants.js +12 -0
  52. package/dist/_chunk/constants.js.map +1 -1
  53. package/dist/_chunk/constants.jsx +12 -0
  54. package/dist/_chunk/constants.jsx.map +1 -1
  55. package/dist/_chunk/createCollator.js +12 -0
  56. package/dist/_chunk/createCollator.js.map +1 -1
  57. package/dist/_chunk/createCollator.jsx +12 -0
  58. package/dist/_chunk/createCollator.jsx.map +1 -1
  59. package/dist/_chunk/createCollectionRowInteraction.js +50 -13
  60. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -1
  61. package/dist/_chunk/createCollectionRowInteraction.jsx +50 -13
  62. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -1
  63. package/dist/_chunk/createField.js +35 -25
  64. package/dist/_chunk/createField.js.map +1 -1
  65. package/dist/_chunk/createField.jsx +35 -25
  66. package/dist/_chunk/createField.jsx.map +1 -1
  67. package/dist/_chunk/createFocus.js +18 -5
  68. package/dist/_chunk/createFocus.js.map +1 -1
  69. package/dist/_chunk/createFocus.jsx +18 -5
  70. package/dist/_chunk/createFocus.jsx.map +1 -1
  71. package/dist/_chunk/createFocusRing.js +16 -7
  72. package/dist/_chunk/createFocusRing.js.map +1 -1
  73. package/dist/_chunk/createFocusRing.jsx +16 -7
  74. package/dist/_chunk/createFocusRing.jsx.map +1 -1
  75. package/dist/_chunk/createFocusWithin.js +16 -4
  76. package/dist/_chunk/createFocusWithin.js.map +1 -1
  77. package/dist/_chunk/createFocusWithin.jsx +16 -4
  78. package/dist/_chunk/createFocusWithin.jsx.map +1 -1
  79. package/dist/_chunk/createFocusable.js +39 -53
  80. package/dist/_chunk/createFocusable.js.map +1 -1
  81. package/dist/_chunk/createFocusable.jsx +39 -53
  82. package/dist/_chunk/createFocusable.jsx.map +1 -1
  83. package/dist/_chunk/createFormReset.js +24 -12
  84. package/dist/_chunk/createFormReset.js.map +1 -1
  85. package/dist/_chunk/createFormReset.jsx +24 -12
  86. package/dist/_chunk/createFormReset.jsx.map +1 -1
  87. package/dist/_chunk/createFormValidation.js +41 -17
  88. package/dist/_chunk/createFormValidation.js.map +1 -1
  89. package/dist/_chunk/createFormValidation.jsx +41 -17
  90. package/dist/_chunk/createFormValidation.jsx.map +1 -1
  91. package/dist/_chunk/createHover.js +56 -42
  92. package/dist/_chunk/createHover.js.map +1 -1
  93. package/dist/_chunk/createHover.jsx +56 -42
  94. package/dist/_chunk/createHover.jsx.map +1 -1
  95. package/dist/_chunk/createKeyboard.js +205 -0
  96. package/dist/_chunk/createKeyboard.js.map +1 -0
  97. package/dist/_chunk/createKeyboard.jsx +205 -0
  98. package/dist/_chunk/createKeyboard.jsx.map +1 -0
  99. package/dist/_chunk/createLabel.js +17 -4
  100. package/dist/_chunk/createLabel.js.map +1 -1
  101. package/dist/_chunk/createLabel.jsx +17 -4
  102. package/dist/_chunk/createLabel.jsx.map +1 -1
  103. package/dist/_chunk/createLabels.js +14 -2
  104. package/dist/_chunk/createLabels.js.map +1 -1
  105. package/dist/_chunk/createLabels.jsx +14 -2
  106. package/dist/_chunk/createLabels.jsx.map +1 -1
  107. package/dist/_chunk/createLandmark.js +19 -3
  108. package/dist/_chunk/createLandmark.js.map +1 -1
  109. package/dist/_chunk/createLandmark.jsx +19 -3
  110. package/dist/_chunk/createLandmark.jsx.map +1 -1
  111. package/dist/_chunk/createLongPress.js +105 -0
  112. package/dist/_chunk/createLongPress.js.map +1 -0
  113. package/dist/_chunk/createLongPress.jsx +105 -0
  114. package/dist/_chunk/createLongPress.jsx.map +1 -0
  115. package/dist/_chunk/createOverlay.js +220 -111
  116. package/dist/_chunk/createOverlay.js.map +1 -1
  117. package/dist/_chunk/createOverlay.jsx +220 -111
  118. package/dist/_chunk/createOverlay.jsx.map +1 -1
  119. package/dist/_chunk/createOverlayTrigger.js +58 -0
  120. package/dist/_chunk/createOverlayTrigger.js.map +1 -0
  121. package/dist/_chunk/createOverlayTrigger.jsx +58 -0
  122. package/dist/_chunk/createOverlayTrigger.jsx.map +1 -0
  123. package/dist/_chunk/createPress.js +38 -28
  124. package/dist/_chunk/createPress.js.map +1 -1
  125. package/dist/_chunk/createPress.jsx +38 -28
  126. package/dist/_chunk/createPress.jsx.map +1 -1
  127. package/dist/_chunk/createProgressBar.js +17 -4
  128. package/dist/_chunk/createProgressBar.js.map +1 -1
  129. package/dist/_chunk/createProgressBar.jsx +17 -4
  130. package/dist/_chunk/createProgressBar.jsx.map +1 -1
  131. package/dist/_chunk/createSelectableItem.js +58 -20
  132. package/dist/_chunk/createSelectableItem.js.map +1 -1
  133. package/dist/_chunk/createSelectableItem.jsx +58 -20
  134. package/dist/_chunk/createSelectableItem.jsx.map +1 -1
  135. package/dist/_chunk/createSelectableList.js +776 -0
  136. package/dist/_chunk/createSelectableList.js.map +1 -0
  137. package/dist/_chunk/createSelectableList.jsx +776 -0
  138. package/dist/_chunk/createSelectableList.jsx.map +1 -0
  139. package/dist/_chunk/createStringFormatter.js +350 -5
  140. package/dist/_chunk/createStringFormatter.js.map +1 -1
  141. package/dist/_chunk/createStringFormatter.jsx +350 -5
  142. package/dist/_chunk/createStringFormatter.jsx.map +1 -1
  143. package/dist/_chunk/createToggle.js +68 -19
  144. package/dist/_chunk/createToggle.js.map +1 -1
  145. package/dist/_chunk/createToggle.jsx +68 -19
  146. package/dist/_chunk/createToggle.jsx.map +1 -1
  147. package/dist/_chunk/createTypeSelect.js +15 -3
  148. package/dist/_chunk/createTypeSelect.js.map +1 -1
  149. package/dist/_chunk/createTypeSelect.jsx +15 -3
  150. package/dist/_chunk/createTypeSelect.jsx.map +1 -1
  151. package/dist/_chunk/{visually-hidden.js → createVisuallyHidden.js} +16 -4
  152. package/dist/_chunk/createVisuallyHidden.js.map +1 -0
  153. package/dist/_chunk/{visually-hidden.jsx → createVisuallyHidden.jsx} +16 -4
  154. package/dist/_chunk/createVisuallyHidden.jsx.map +1 -0
  155. package/dist/_chunk/datepicker.js +687 -602
  156. package/dist/_chunk/datepicker.js.map +1 -1
  157. package/dist/_chunk/datepicker.jsx +687 -602
  158. package/dist/_chunk/datepicker.jsx.map +1 -1
  159. package/dist/_chunk/dialog.js +49 -19
  160. package/dist/_chunk/dialog.js.map +1 -1
  161. package/dist/_chunk/dialog.jsx +49 -19
  162. package/dist/_chunk/dialog.jsx.map +1 -1
  163. package/dist/_chunk/disclosure.js +48 -28
  164. package/dist/_chunk/disclosure.js.map +1 -1
  165. package/dist/_chunk/disclosure.jsx +48 -28
  166. package/dist/_chunk/disclosure.jsx.map +1 -1
  167. package/dist/_chunk/dnd.js +1340 -1172
  168. package/dist/_chunk/dnd.js.map +1 -1
  169. package/dist/_chunk/dnd.jsx +1340 -1172
  170. package/dist/_chunk/dnd.jsx.map +1 -1
  171. package/dist/_chunk/dom.js +1200 -0
  172. package/dist/_chunk/dom.js.map +1 -0
  173. package/dist/_chunk/dom.jsx +1200 -0
  174. package/dist/_chunk/dom.jsx.map +1 -0
  175. package/dist/_chunk/env.js +1 -57
  176. package/dist/_chunk/env.js.map +1 -1
  177. package/dist/_chunk/env.jsx +1 -57
  178. package/dist/_chunk/env.jsx.map +1 -1
  179. package/dist/_chunk/filterDOMProps.js +32 -7
  180. package/dist/_chunk/filterDOMProps.js.map +1 -1
  181. package/dist/_chunk/filterDOMProps.jsx +32 -7
  182. package/dist/_chunk/filterDOMProps.jsx.map +1 -1
  183. package/dist/_chunk/focus.js +570 -338
  184. package/dist/_chunk/focus.js.map +1 -1
  185. package/dist/_chunk/focus.jsx +570 -338
  186. package/dist/_chunk/focus.jsx.map +1 -1
  187. package/dist/_chunk/grid.js +62 -8
  188. package/dist/_chunk/grid.js.map +1 -1
  189. package/dist/_chunk/grid.jsx +62 -8
  190. package/dist/_chunk/grid.jsx.map +1 -1
  191. package/dist/_chunk/gridlist.js +192 -53
  192. package/dist/_chunk/gridlist.js.map +1 -1
  193. package/dist/_chunk/gridlist.jsx +192 -53
  194. package/dist/_chunk/gridlist.jsx.map +1 -1
  195. package/dist/_chunk/i18n.js +68 -1
  196. package/dist/_chunk/i18n.js.map +1 -1
  197. package/dist/_chunk/i18n.jsx +68 -1
  198. package/dist/_chunk/i18n.jsx.map +1 -1
  199. package/dist/_chunk/interactions.js +38 -102
  200. package/dist/_chunk/interactions.js.map +1 -1
  201. package/dist/_chunk/interactions.jsx +38 -100
  202. package/dist/_chunk/interactions.jsx.map +1 -1
  203. package/dist/_chunk/intl.js +280 -0
  204. package/dist/_chunk/intl.js.map +1 -0
  205. package/dist/_chunk/intl.jsx +280 -0
  206. package/dist/_chunk/intl.jsx.map +1 -0
  207. package/dist/_chunk/link.js +15 -4
  208. package/dist/_chunk/link.js.map +1 -1
  209. package/dist/_chunk/link.jsx +15 -4
  210. package/dist/_chunk/link.jsx.map +1 -1
  211. package/dist/_chunk/listbox.js +99 -175
  212. package/dist/_chunk/listbox.js.map +1 -1
  213. package/dist/_chunk/listbox.jsx +99 -175
  214. package/dist/_chunk/listbox.jsx.map +1 -1
  215. package/dist/_chunk/locale.js +58 -12
  216. package/dist/_chunk/locale.js.map +1 -1
  217. package/dist/_chunk/locale.jsx +57 -11
  218. package/dist/_chunk/locale.jsx.map +1 -1
  219. package/dist/_chunk/menu.js +298 -57
  220. package/dist/_chunk/menu.js.map +1 -1
  221. package/dist/_chunk/menu.jsx +298 -57
  222. package/dist/_chunk/menu.jsx.map +1 -1
  223. package/dist/_chunk/mergeProps.js +216 -0
  224. package/dist/_chunk/mergeProps.js.map +1 -0
  225. package/dist/_chunk/mergeProps.jsx +216 -0
  226. package/dist/_chunk/mergeProps.jsx.map +1 -0
  227. package/dist/_chunk/meter.js +16 -4
  228. package/dist/_chunk/meter.js.map +1 -1
  229. package/dist/_chunk/meter.jsx +16 -4
  230. package/dist/_chunk/meter.jsx.map +1 -1
  231. package/dist/_chunk/numberfield.js +167 -22
  232. package/dist/_chunk/numberfield.js.map +1 -1
  233. package/dist/_chunk/numberfield.jsx +167 -22
  234. package/dist/_chunk/numberfield.jsx.map +1 -1
  235. package/dist/_chunk/overlays.js +87 -74
  236. package/dist/_chunk/overlays.js.map +1 -1
  237. package/dist/_chunk/overlays.jsx +71 -57
  238. package/dist/_chunk/overlays.jsx.map +1 -1
  239. package/dist/_chunk/owner.js +23 -0
  240. package/dist/_chunk/owner.js.map +1 -0
  241. package/dist/_chunk/owner.jsx +23 -0
  242. package/dist/_chunk/owner.jsx.map +1 -0
  243. package/dist/_chunk/popover.js +180 -42
  244. package/dist/_chunk/popover.js.map +1 -1
  245. package/dist/_chunk/popover.jsx +180 -42
  246. package/dist/_chunk/popover.jsx.map +1 -1
  247. package/dist/_chunk/radio.js +92 -32
  248. package/dist/_chunk/radio.js.map +1 -1
  249. package/dist/_chunk/radio.jsx +92 -32
  250. package/dist/_chunk/radio.jsx.map +1 -1
  251. package/dist/_chunk/reactivity.js.map +1 -1
  252. package/dist/_chunk/reactivity.jsx.map +1 -1
  253. package/dist/_chunk/refs.js +41 -0
  254. package/dist/_chunk/refs.js.map +1 -0
  255. package/dist/_chunk/refs.jsx +41 -0
  256. package/dist/_chunk/refs.jsx.map +1 -0
  257. package/dist/_chunk/searchfield.js +69 -3
  258. package/dist/_chunk/searchfield.js.map +1 -1
  259. package/dist/_chunk/searchfield.jsx +69 -3
  260. package/dist/_chunk/searchfield.jsx.map +1 -1
  261. package/dist/_chunk/select.js +226 -80
  262. package/dist/_chunk/select.js.map +1 -1
  263. package/dist/_chunk/select.jsx +162 -70
  264. package/dist/_chunk/select.jsx.map +1 -1
  265. package/dist/_chunk/selection.js +20 -638
  266. package/dist/_chunk/selection.js.map +1 -1
  267. package/dist/_chunk/selection.jsx +20 -638
  268. package/dist/_chunk/selection.jsx.map +1 -1
  269. package/dist/_chunk/separator.js +12 -0
  270. package/dist/_chunk/separator.js.map +1 -1
  271. package/dist/_chunk/separator.jsx +12 -0
  272. package/dist/_chunk/separator.jsx.map +1 -1
  273. package/dist/_chunk/slider.js +25 -16
  274. package/dist/_chunk/slider.js.map +1 -1
  275. package/dist/_chunk/slider.jsx +25 -16
  276. package/dist/_chunk/slider.jsx.map +1 -1
  277. package/dist/_chunk/spinbutton.js +52 -42
  278. package/dist/_chunk/spinbutton.js.map +1 -1
  279. package/dist/_chunk/spinbutton.jsx +52 -42
  280. package/dist/_chunk/spinbutton.jsx.map +1 -1
  281. package/dist/_chunk/steplist.js +14 -1
  282. package/dist/_chunk/steplist.js.map +1 -1
  283. package/dist/_chunk/steplist.jsx +14 -1
  284. package/dist/_chunk/steplist.jsx.map +1 -1
  285. package/dist/_chunk/switch.js +21 -3
  286. package/dist/_chunk/switch.js.map +1 -1
  287. package/dist/_chunk/switch.jsx +21 -3
  288. package/dist/_chunk/switch.jsx.map +1 -1
  289. package/dist/_chunk/table.js +666 -88
  290. package/dist/_chunk/table.js.map +1 -1
  291. package/dist/_chunk/table.jsx +666 -88
  292. package/dist/_chunk/table.jsx.map +1 -1
  293. package/dist/_chunk/tabs.js +115 -17
  294. package/dist/_chunk/tabs.js.map +1 -1
  295. package/dist/_chunk/tabs.jsx +115 -17
  296. package/dist/_chunk/tabs.jsx.map +1 -1
  297. package/dist/_chunk/tag.js +240 -39
  298. package/dist/_chunk/tag.js.map +1 -1
  299. package/dist/_chunk/tag.jsx +240 -39
  300. package/dist/_chunk/tag.jsx.map +1 -1
  301. package/dist/_chunk/textfield.js +83 -12
  302. package/dist/_chunk/textfield.js.map +1 -1
  303. package/dist/_chunk/textfield.jsx +83 -12
  304. package/dist/_chunk/textfield.jsx.map +1 -1
  305. package/dist/_chunk/toast.js +61 -28
  306. package/dist/_chunk/toast.js.map +1 -1
  307. package/dist/_chunk/toast.jsx +61 -28
  308. package/dist/_chunk/toast.jsx.map +1 -1
  309. package/dist/_chunk/tokenfield.js +567 -0
  310. package/dist/_chunk/tokenfield.js.map +1 -0
  311. package/dist/_chunk/tokenfield.jsx +567 -0
  312. package/dist/_chunk/tokenfield.jsx.map +1 -0
  313. package/dist/_chunk/toolbar.js +25 -8
  314. package/dist/_chunk/toolbar.js.map +1 -1
  315. package/dist/_chunk/toolbar.jsx +25 -8
  316. package/dist/_chunk/toolbar.jsx.map +1 -1
  317. package/dist/_chunk/tooltip.js +379 -6
  318. package/dist/_chunk/tooltip.js.map +1 -1
  319. package/dist/_chunk/tooltip.jsx +379 -6
  320. package/dist/_chunk/tooltip.jsx.map +1 -1
  321. package/dist/_chunk/tree.js +280 -69
  322. package/dist/_chunk/tree.js.map +1 -1
  323. package/dist/_chunk/tree.jsx +280 -69
  324. package/dist/_chunk/tree.jsx.map +1 -1
  325. package/dist/_chunk/utils.js +192 -150
  326. package/dist/_chunk/utils.js.map +1 -1
  327. package/dist/_chunk/utils.jsx +192 -150
  328. package/dist/_chunk/utils.jsx.map +1 -1
  329. package/dist/_chunk/virtualFocus.js +54 -0
  330. package/dist/_chunk/virtualFocus.js.map +1 -0
  331. package/dist/_chunk/virtualFocus.jsx +54 -0
  332. package/dist/_chunk/virtualFocus.jsx.map +1 -0
  333. package/dist/_chunk/virtualizer.js +202 -0
  334. package/dist/_chunk/virtualizer.js.map +1 -0
  335. package/dist/_chunk/virtualizer.jsx +202 -0
  336. package/dist/_chunk/virtualizer.jsx.map +1 -0
  337. package/dist/actiongroup/createActionGroup.d.ts +2 -1
  338. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  339. package/dist/autocomplete/createAutocomplete.d.ts +1 -9
  340. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  341. package/dist/autocomplete/intl/index.d.ts +13 -0
  342. package/dist/autocomplete/intl/index.d.ts.map +1 -0
  343. package/dist/breadcrumbs/createBreadcrumbs.d.ts +3 -1
  344. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  345. package/dist/breadcrumbs/intl/index.d.ts +13 -0
  346. package/dist/breadcrumbs/intl/index.d.ts.map +1 -0
  347. package/dist/button/createButton.d.ts.map +1 -1
  348. package/dist/button/createToggleButton.d.ts.map +1 -1
  349. package/dist/button/createToggleButtonGroup.d.ts +1 -1
  350. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  351. package/dist/button/types.d.ts +14 -0
  352. package/dist/button/types.d.ts.map +1 -1
  353. package/dist/calendar/createCalendar.d.ts +1 -7
  354. package/dist/calendar/createCalendar.d.ts.map +1 -1
  355. package/dist/calendar/createCalendarCell.d.ts +0 -6
  356. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  357. package/dist/calendar/createCalendarGrid.d.ts +1 -7
  358. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  359. package/dist/calendar/createCalendarMonthPicker.d.ts +0 -8
  360. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -1
  361. package/dist/calendar/createCalendarYearPicker.d.ts +0 -8
  362. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -1
  363. package/dist/calendar/createRangeCalendar.d.ts +13 -7
  364. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  365. package/dist/calendar/createRangeCalendarCell.d.ts +2 -6
  366. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  367. package/dist/calendar/intl/index.d.ts.map +1 -1
  368. package/dist/calendar/utils.d.ts.map +1 -1
  369. package/dist/checkbox/createCheckbox.d.ts +2 -1
  370. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  371. package/dist/checkbox/createCheckboxGroup.d.ts +1 -9
  372. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  373. package/dist/checkbox/createCheckboxGroupItem.d.ts +0 -8
  374. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  375. package/dist/collections/index.d.ts +1 -1
  376. package/dist/collections/index.d.ts.map +1 -1
  377. package/dist/collections/index.js +18 -2
  378. package/dist/collections/index.js.map +1 -1
  379. package/dist/collections/index.jsx +18 -2
  380. package/dist/collections/index.jsx.map +1 -1
  381. package/dist/color/createColorArea.d.ts +2 -7
  382. package/dist/color/createColorArea.d.ts.map +1 -1
  383. package/dist/color/createColorField.d.ts +2 -7
  384. package/dist/color/createColorField.d.ts.map +1 -1
  385. package/dist/color/createColorSlider.d.ts +1 -6
  386. package/dist/color/createColorSlider.d.ts.map +1 -1
  387. package/dist/color/createColorSwatch.d.ts +1 -6
  388. package/dist/color/createColorSwatch.d.ts.map +1 -1
  389. package/dist/color/createColorWheel.d.ts +1 -6
  390. package/dist/color/createColorWheel.d.ts.map +1 -1
  391. package/dist/color/intl/index.d.ts.map +1 -1
  392. package/dist/color/types.d.ts +47 -1
  393. package/dist/color/types.d.ts.map +1 -1
  394. package/dist/combobox/createComboBox.d.ts +17 -8
  395. package/dist/combobox/createComboBox.d.ts.map +1 -1
  396. package/dist/combobox/intl/generated-locales.d.ts +3 -0
  397. package/dist/combobox/intl/generated-locales.d.ts.map +1 -1
  398. package/dist/combobox/intl/index.d.ts +3 -2
  399. package/dist/combobox/intl/index.d.ts.map +1 -1
  400. package/dist/datepicker/createDateField.d.ts +0 -10
  401. package/dist/datepicker/createDateField.d.ts.map +1 -1
  402. package/dist/datepicker/createDatePicker.d.ts +0 -16
  403. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  404. package/dist/datepicker/createDatePickerGroup.d.ts +1 -1
  405. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
  406. package/dist/datepicker/createDateRangePicker.d.ts +0 -21
  407. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  408. package/dist/datepicker/createDateSegment.d.ts +0 -9
  409. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  410. package/dist/datepicker/createDisplayNames.d.ts +1 -9
  411. package/dist/datepicker/createDisplayNames.d.ts.map +1 -1
  412. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  413. package/dist/datepicker/intl.d.ts.map +1 -1
  414. package/dist/dialog/createDialog.d.ts +2 -4
  415. package/dist/dialog/createDialog.d.ts.map +1 -1
  416. package/dist/dialog/types.d.ts +14 -0
  417. package/dist/dialog/types.d.ts.map +1 -1
  418. package/dist/disclosure/createDisclosure.d.ts +1 -8
  419. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  420. package/dist/disclosure/createDisclosureGroup.d.ts +3 -4
  421. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  422. package/dist/dnd/DragManager.d.ts +1 -16
  423. package/dist/dnd/DragManager.d.ts.map +1 -1
  424. package/dist/dnd/DropTargetKeyboardNavigation.d.ts +2 -2
  425. package/dist/dnd/createDrag.d.ts +1 -7
  426. package/dist/dnd/createDrag.d.ts.map +1 -1
  427. package/dist/dnd/createDraggableCollection.d.ts +1 -7
  428. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  429. package/dist/dnd/createDraggableItem.d.ts +2 -7
  430. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  431. package/dist/dnd/createDrop.d.ts +1 -7
  432. package/dist/dnd/createDrop.d.ts.map +1 -1
  433. package/dist/dnd/createDropIndicator.d.ts +27 -0
  434. package/dist/dnd/createDropIndicator.d.ts.map +1 -0
  435. package/dist/dnd/createDroppableCollection.d.ts +6 -8
  436. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  437. package/dist/dnd/createDroppableItem.d.ts +12 -10
  438. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  439. package/dist/dnd/index.d.ts +3 -1
  440. package/dist/dnd/index.d.ts.map +1 -1
  441. package/dist/dnd/index.js +2 -2
  442. package/dist/dnd/index.jsx +2 -2
  443. package/dist/dnd/intl/index.d.ts +6 -4
  444. package/dist/dnd/intl/index.d.ts.map +1 -1
  445. package/dist/dnd/types.d.ts +20 -1
  446. package/dist/dnd/types.d.ts.map +1 -1
  447. package/dist/dnd/utils.d.ts +4 -0
  448. package/dist/dnd/utils.d.ts.map +1 -1
  449. package/dist/focus/FocusScope.d.ts +9 -5
  450. package/dist/focus/FocusScope.d.ts.map +1 -1
  451. package/dist/focus/createAutoFocus.d.ts +3 -0
  452. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  453. package/dist/focus/createFocusRestore.d.ts +3 -0
  454. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  455. package/dist/focus/createHasTabbableChild.d.ts +13 -0
  456. package/dist/focus/createHasTabbableChild.d.ts.map +1 -0
  457. package/dist/focus/createVirtualFocus.d.ts +4 -1
  458. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  459. package/dist/focus/index.js +3 -2
  460. package/dist/focus/index.jsx +3 -2
  461. package/dist/focus/virtualFocus.d.ts +1 -1
  462. package/dist/form/createFormReset.d.ts +1 -7
  463. package/dist/form/createFormReset.d.ts.map +1 -1
  464. package/dist/form/createFormValidation.d.ts +1 -9
  465. package/dist/form/createFormValidation.d.ts.map +1 -1
  466. package/dist/grid/GridKeyboardDelegate.d.ts.map +1 -1
  467. package/dist/grid/createGrid.d.ts +1 -5
  468. package/dist/grid/createGrid.d.ts.map +1 -1
  469. package/dist/grid/createGridCell.d.ts +1 -5
  470. package/dist/grid/createGridCell.d.ts.map +1 -1
  471. package/dist/grid/createGridRow.d.ts +1 -5
  472. package/dist/grid/createGridRow.d.ts.map +1 -1
  473. package/dist/grid/index.d.ts +2 -2
  474. package/dist/grid/intl/index.d.ts +18 -0
  475. package/dist/grid/intl/index.d.ts.map +1 -0
  476. package/dist/grid/types.d.ts +25 -2
  477. package/dist/grid/types.d.ts.map +1 -1
  478. package/dist/gridlist/createGridList.d.ts +3 -5
  479. package/dist/gridlist/createGridList.d.ts.map +1 -1
  480. package/dist/gridlist/createGridListItem.d.ts +1 -5
  481. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  482. package/dist/gridlist/createGridListSection.d.ts +0 -4
  483. package/dist/gridlist/createGridListSection.d.ts.map +1 -1
  484. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +1 -5
  485. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  486. package/dist/gridlist/intl/index.d.ts +14 -0
  487. package/dist/gridlist/intl/index.d.ts.map +1 -0
  488. package/dist/gridlist/types.d.ts +56 -2
  489. package/dist/gridlist/types.d.ts.map +1 -1
  490. package/dist/i18n/compileIcu.d.ts +24 -0
  491. package/dist/i18n/compileIcu.d.ts.map +1 -0
  492. package/dist/i18n/createCollator.d.ts +0 -7
  493. package/dist/i18n/createCollator.d.ts.map +1 -1
  494. package/dist/i18n/createDateFormatter.d.ts +0 -7
  495. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  496. package/dist/i18n/createFilter.d.ts +0 -7
  497. package/dist/i18n/createFilter.d.ts.map +1 -1
  498. package/dist/i18n/createListFormatter.d.ts +9 -0
  499. package/dist/i18n/createListFormatter.d.ts.map +1 -0
  500. package/dist/i18n/createNumberFormatter.d.ts +0 -7
  501. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  502. package/dist/i18n/createStringFormatter.d.ts +14 -4
  503. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  504. package/dist/i18n/index.d.ts +1 -0
  505. package/dist/i18n/index.d.ts.map +1 -1
  506. package/dist/i18n/index.js +2 -2
  507. package/dist/i18n/index.jsx +2 -2
  508. package/dist/i18n/locale.d.ts +2 -8
  509. package/dist/i18n/locale.d.ts.map +1 -1
  510. package/dist/i18n/utils.d.ts +0 -7
  511. package/dist/i18n/utils.d.ts.map +1 -1
  512. package/dist/index.d.ts +10 -7
  513. package/dist/index.d.ts.map +1 -1
  514. package/dist/index.js +27 -21
  515. package/dist/index.jsx +27 -21
  516. package/dist/interactions/FocusableProvider.d.ts +3 -2
  517. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  518. package/dist/interactions/PressEvent.d.ts +2 -1
  519. package/dist/interactions/PressEvent.d.ts.map +1 -1
  520. package/dist/interactions/createContextMenu.d.ts +24 -0
  521. package/dist/interactions/createContextMenu.d.ts.map +1 -0
  522. package/dist/interactions/createFocus.d.ts +3 -2
  523. package/dist/interactions/createFocus.d.ts.map +1 -1
  524. package/dist/interactions/createFocusRing.d.ts +2 -1
  525. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  526. package/dist/interactions/createFocusWithin.d.ts +1 -6
  527. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  528. package/dist/interactions/createFocusable.d.ts +2 -6
  529. package/dist/interactions/createFocusable.d.ts.map +1 -1
  530. package/dist/interactions/createHover.d.ts +3 -10
  531. package/dist/interactions/createHover.d.ts.map +1 -1
  532. package/dist/interactions/createInteractionModality.d.ts +12 -10
  533. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  534. package/dist/interactions/createKeyboard.d.ts +12 -3
  535. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  536. package/dist/interactions/createKeyboardShortcutHandler.d.ts +24 -0
  537. package/dist/interactions/createKeyboardShortcutHandler.d.ts.map +1 -0
  538. package/dist/interactions/createLongPress.d.ts +4 -7
  539. package/dist/interactions/createLongPress.d.ts.map +1 -1
  540. package/dist/interactions/createMove.d.ts +1 -6
  541. package/dist/interactions/createMove.d.ts.map +1 -1
  542. package/dist/interactions/createPress.d.ts +2 -7
  543. package/dist/interactions/createPress.d.ts.map +1 -1
  544. package/dist/interactions/index.d.ts +1 -1
  545. package/dist/interactions/index.d.ts.map +1 -1
  546. package/dist/interactions/index.js +5 -3
  547. package/dist/interactions/index.jsx +5 -3
  548. package/dist/label/createField.d.ts +7 -1
  549. package/dist/label/createField.d.ts.map +1 -1
  550. package/dist/label/createLabel.d.ts +1 -1
  551. package/dist/label/createLabel.d.ts.map +1 -1
  552. package/dist/label/createLabels.d.ts +0 -7
  553. package/dist/label/createLabels.d.ts.map +1 -1
  554. package/dist/landmark/createLandmark.d.ts +4 -1
  555. package/dist/landmark/createLandmark.d.ts.map +1 -1
  556. package/dist/link/createLink.d.ts +1 -1
  557. package/dist/link/createLink.d.ts.map +1 -1
  558. package/dist/listbox/createListBox.d.ts +8 -7
  559. package/dist/listbox/createListBox.d.ts.map +1 -1
  560. package/dist/listbox/createOption.d.ts +7 -1
  561. package/dist/listbox/createOption.d.ts.map +1 -1
  562. package/dist/live-announcer/announce.d.ts +2 -13
  563. package/dist/live-announcer/announce.d.ts.map +1 -1
  564. package/dist/menu/createMenu.d.ts +3 -7
  565. package/dist/menu/createMenu.d.ts.map +1 -1
  566. package/dist/menu/createMenuItem.d.ts +2 -1
  567. package/dist/menu/createMenuItem.d.ts.map +1 -1
  568. package/dist/menu/createMenuTrigger.d.ts +24 -20
  569. package/dist/menu/createMenuTrigger.d.ts.map +1 -1
  570. package/dist/menu/index.d.ts +1 -1
  571. package/dist/menu/index.d.ts.map +1 -1
  572. package/dist/menu/intl/index.d.ts +4 -0
  573. package/dist/menu/intl/index.d.ts.map +1 -0
  574. package/dist/meter/createMeter.d.ts +2 -1
  575. package/dist/meter/createMeter.d.ts.map +1 -1
  576. package/dist/numberfield/createNumberField.d.ts +29 -6
  577. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  578. package/dist/overlays/ariaHideOutside.d.ts +0 -4
  579. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  580. package/dist/overlays/createInteractOutside.d.ts +2 -5
  581. package/dist/overlays/createInteractOutside.d.ts.map +1 -1
  582. package/dist/overlays/createModal.d.ts +3 -6
  583. package/dist/overlays/createModal.d.ts.map +1 -1
  584. package/dist/overlays/createOverlay.d.ts +1 -5
  585. package/dist/overlays/createOverlay.d.ts.map +1 -1
  586. package/dist/overlays/createOverlayTrigger.d.ts +2 -6
  587. package/dist/overlays/createOverlayTrigger.d.ts.map +1 -1
  588. package/dist/overlays/createPreventScroll.d.ts +0 -4
  589. package/dist/overlays/createPreventScroll.d.ts.map +1 -1
  590. package/dist/overlays/index.d.ts +1 -0
  591. package/dist/overlays/index.d.ts.map +1 -1
  592. package/dist/overlays/index.js +3 -2
  593. package/dist/overlays/index.jsx +3 -2
  594. package/dist/overlays/intl/index.d.ts +13 -0
  595. package/dist/overlays/intl/index.d.ts.map +1 -0
  596. package/dist/popover/calculatePosition.d.ts +1 -1
  597. package/dist/popover/calculatePosition.d.ts.map +1 -1
  598. package/dist/popover/createOverlayPosition.d.ts +1 -7
  599. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  600. package/dist/popover/createPopover.d.ts +6 -7
  601. package/dist/popover/createPopover.d.ts.map +1 -1
  602. package/dist/progress/createProgressBar.d.ts +2 -10
  603. package/dist/progress/createProgressBar.d.ts.map +1 -1
  604. package/dist/radio/createRadio.d.ts +8 -1
  605. package/dist/radio/createRadio.d.ts.map +1 -1
  606. package/dist/radio/createRadioGroup.d.ts +1 -9
  607. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  608. package/dist/searchfield/createSearchField.d.ts +1 -1
  609. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  610. package/dist/searchfield/intl/index.d.ts +13 -0
  611. package/dist/searchfield/intl/index.d.ts.map +1 -0
  612. package/dist/select/createHiddenSelect.d.ts +3 -10
  613. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  614. package/dist/select/createSelect.d.ts +10 -6
  615. package/dist/select/createSelect.d.ts.map +1 -1
  616. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -1
  617. package/dist/selection/ListKeyboardDelegate.d.ts +2 -1
  618. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -1
  619. package/dist/selection/constants.d.ts.map +1 -1
  620. package/dist/selection/createCollectionRowInteraction.d.ts +12 -1
  621. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -1
  622. package/dist/selection/createScrollIntoViewOnFocus.d.ts +0 -11
  623. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -1
  624. package/dist/selection/createSelectableCollection.d.ts +1 -23
  625. package/dist/selection/createSelectableCollection.d.ts.map +1 -1
  626. package/dist/selection/createSelectableItem.d.ts +2 -29
  627. package/dist/selection/createSelectableItem.d.ts.map +1 -1
  628. package/dist/selection/createSelectableList.d.ts +4 -17
  629. package/dist/selection/createSelectableList.d.ts.map +1 -1
  630. package/dist/selection/createTypeSelect.d.ts +2 -8
  631. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  632. package/dist/selection/index.js +3 -2
  633. package/dist/selection/index.jsx +3 -2
  634. package/dist/selection/selectItem.d.ts.map +1 -1
  635. package/dist/selection/utils.d.ts +1 -1
  636. package/dist/selection/utils.d.ts.map +1 -1
  637. package/dist/separator/createSeparator.d.ts +3 -1
  638. package/dist/separator/createSeparator.d.ts.map +1 -1
  639. package/dist/slider/createSlider.d.ts +1 -6
  640. package/dist/slider/createSlider.d.ts.map +1 -1
  641. package/dist/spinbutton/createSpinButton.d.ts +0 -9
  642. package/dist/spinbutton/createSpinButton.d.ts.map +1 -1
  643. package/dist/spinbutton/index.d.ts +2 -2
  644. package/dist/spinbutton/index.d.ts.map +1 -1
  645. package/dist/spinbutton/intl.d.ts.map +1 -1
  646. package/dist/ssr/index.d.ts +3 -9
  647. package/dist/ssr/index.d.ts.map +1 -1
  648. package/dist/ssr/index.js +47 -26
  649. package/dist/ssr/index.js.map +1 -1
  650. package/dist/ssr/index.jsx +47 -26
  651. package/dist/ssr/index.jsx.map +1 -1
  652. package/dist/steplist/createStepList.d.ts +1 -1
  653. package/dist/steplist/createStepList.d.ts.map +1 -1
  654. package/dist/switch/createSwitch.d.ts +2 -1
  655. package/dist/switch/createSwitch.d.ts.map +1 -1
  656. package/dist/table/createTable.d.ts +1 -5
  657. package/dist/table/createTable.d.ts.map +1 -1
  658. package/dist/table/createTableCell.d.ts +1 -5
  659. package/dist/table/createTableCell.d.ts.map +1 -1
  660. package/dist/table/createTableColumnHeader.d.ts +1 -5
  661. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  662. package/dist/table/createTableColumnResize.d.ts +2 -8
  663. package/dist/table/createTableColumnResize.d.ts.map +1 -1
  664. package/dist/table/createTableHeaderRow.d.ts +1 -5
  665. package/dist/table/createTableHeaderRow.d.ts.map +1 -1
  666. package/dist/table/createTableRow.d.ts +1 -5
  667. package/dist/table/createTableRow.d.ts.map +1 -1
  668. package/dist/table/createTableRowGroup.d.ts +1 -5
  669. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  670. package/dist/table/createTableSelectAllCheckbox.d.ts +1 -5
  671. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  672. package/dist/table/createTableSelectionCheckbox.d.ts +1 -5
  673. package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
  674. package/dist/table/index.d.ts +2 -2
  675. package/dist/table/intl/index.d.ts +23 -0
  676. package/dist/table/intl/index.d.ts.map +1 -0
  677. package/dist/table/types.d.ts +44 -2
  678. package/dist/table/types.d.ts.map +1 -1
  679. package/dist/table/utils.d.ts.map +1 -1
  680. package/dist/tabs/createTabs.d.ts +5 -9
  681. package/dist/tabs/createTabs.d.ts.map +1 -1
  682. package/dist/tag/createTag.d.ts +4 -8
  683. package/dist/tag/createTag.d.ts.map +1 -1
  684. package/dist/tag/createTagGroup.d.ts +0 -9
  685. package/dist/tag/createTagGroup.d.ts.map +1 -1
  686. package/dist/tag/intl/index.d.ts +14 -0
  687. package/dist/tag/intl/index.d.ts.map +1 -0
  688. package/dist/textfield/createTextField.d.ts +6 -8
  689. package/dist/textfield/createTextField.d.ts.map +1 -1
  690. package/dist/toast/createToast.d.ts +1 -8
  691. package/dist/toast/createToast.d.ts.map +1 -1
  692. package/dist/toast/createToastRegion.d.ts +7 -18
  693. package/dist/toast/createToastRegion.d.ts.map +1 -1
  694. package/dist/toast/intl/index.d.ts +14 -0
  695. package/dist/toast/intl/index.d.ts.map +1 -0
  696. package/dist/toggle/createToggle.d.ts +8 -1
  697. package/dist/toggle/createToggle.d.ts.map +1 -1
  698. package/dist/tokenfield/createToken.d.ts +15 -0
  699. package/dist/tokenfield/createToken.d.ts.map +1 -0
  700. package/dist/tokenfield/createTokenField.d.ts +52 -0
  701. package/dist/tokenfield/createTokenField.d.ts.map +1 -0
  702. package/dist/tokenfield/index.d.ts +3 -0
  703. package/dist/tokenfield/index.d.ts.map +1 -0
  704. package/dist/tokenfield/index.js +2 -0
  705. package/dist/tokenfield/index.jsx +2 -0
  706. package/dist/toolbar/createToolbar.d.ts +1 -1
  707. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  708. package/dist/tooltip/createPreviewTrigger.d.ts +23 -0
  709. package/dist/tooltip/createPreviewTrigger.d.ts.map +1 -0
  710. package/dist/tooltip/createSafeArea.d.ts +20 -0
  711. package/dist/tooltip/createSafeArea.d.ts.map +1 -0
  712. package/dist/tooltip/createTooltip.d.ts +1 -1
  713. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  714. package/dist/tooltip/createTooltipTrigger.d.ts +1 -9
  715. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  716. package/dist/tooltip/index.d.ts +2 -0
  717. package/dist/tooltip/index.d.ts.map +1 -1
  718. package/dist/tooltip/index.js +2 -2
  719. package/dist/tooltip/index.jsx +2 -2
  720. package/dist/tooltip/intl/index.d.ts +4 -0
  721. package/dist/tooltip/intl/index.d.ts.map +1 -0
  722. package/dist/tree/createTree.d.ts +1 -5
  723. package/dist/tree/createTree.d.ts.map +1 -1
  724. package/dist/tree/createTreeItem.d.ts +1 -5
  725. package/dist/tree/createTreeItem.d.ts.map +1 -1
  726. package/dist/tree/createTreeSelectionCheckbox.d.ts +1 -5
  727. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  728. package/dist/tree/intl/index.d.ts +14 -0
  729. package/dist/tree/intl/index.d.ts.map +1 -0
  730. package/dist/tree/types.d.ts +35 -2
  731. package/dist/tree/types.d.ts.map +1 -1
  732. package/dist/utils/ShadowTreeWalker.d.ts +30 -0
  733. package/dist/utils/ShadowTreeWalker.d.ts.map +1 -0
  734. package/dist/utils/animation.d.ts +1 -29
  735. package/dist/utils/animation.d.ts.map +1 -1
  736. package/dist/utils/capture.d.ts +14 -0
  737. package/dist/utils/capture.d.ts.map +1 -0
  738. package/dist/utils/createDescription.d.ts +1 -25
  739. package/dist/utils/createDescription.d.ts.map +1 -1
  740. package/dist/utils/dom.d.ts +45 -11
  741. package/dist/utils/dom.d.ts.map +1 -1
  742. package/dist/utils/domAttrs.d.ts +16 -0
  743. package/dist/utils/domAttrs.d.ts.map +1 -0
  744. package/dist/utils/env.d.ts +2 -0
  745. package/dist/utils/env.d.ts.map +1 -1
  746. package/dist/utils/events.d.ts +0 -4
  747. package/dist/utils/events.d.ts.map +1 -1
  748. package/dist/utils/filterDOMProps.d.ts +0 -6
  749. package/dist/utils/filterDOMProps.d.ts.map +1 -1
  750. package/dist/utils/focus.d.ts +19 -6
  751. package/dist/utils/focus.d.ts.map +1 -1
  752. package/dist/utils/geometry.d.ts +1 -1
  753. package/dist/utils/geometry.d.ts.map +1 -1
  754. package/dist/utils/getMetaValue.d.ts +13 -0
  755. package/dist/utils/getMetaValue.d.ts.map +1 -0
  756. package/dist/utils/getNonce.d.ts +9 -0
  757. package/dist/utils/getNonce.d.ts.map +1 -0
  758. package/dist/utils/globalListeners.d.ts +0 -6
  759. package/dist/utils/globalListeners.d.ts.map +1 -1
  760. package/dist/utils/index.d.ts +6 -1
  761. package/dist/utils/index.d.ts.map +1 -1
  762. package/dist/utils/index.js +7 -4
  763. package/dist/utils/index.jsx +7 -4
  764. package/dist/utils/keyboard.d.ts +0 -4
  765. package/dist/utils/keyboard.d.ts.map +1 -1
  766. package/dist/utils/mergeProps.d.ts +5 -2
  767. package/dist/utils/mergeProps.d.ts.map +1 -1
  768. package/dist/utils/owner.d.ts +14 -0
  769. package/dist/utils/owner.d.ts.map +1 -0
  770. package/dist/utils/platform.d.ts +0 -4
  771. package/dist/utils/platform.d.ts.map +1 -1
  772. package/dist/utils/reactivity.d.ts +2 -0
  773. package/dist/utils/reactivity.d.ts.map +1 -1
  774. package/dist/utils/refs.d.ts +20 -0
  775. package/dist/utils/refs.d.ts.map +1 -0
  776. package/dist/utils/runAfterTransition.d.ts +2 -0
  777. package/dist/utils/runAfterTransition.d.ts.map +1 -0
  778. package/dist/utils/scrollIntoView.d.ts +0 -4
  779. package/dist/utils/scrollIntoView.d.ts.map +1 -1
  780. package/dist/utils/splitProps.d.ts +17 -0
  781. package/dist/utils/splitProps.d.ts.map +1 -0
  782. package/dist/utils/textSelection.d.ts +0 -8
  783. package/dist/utils/textSelection.d.ts.map +1 -1
  784. package/dist/virtualizer/ScrollView.d.ts +38 -0
  785. package/dist/virtualizer/ScrollView.d.ts.map +1 -0
  786. package/dist/virtualizer/index.d.ts +3 -0
  787. package/dist/virtualizer/index.d.ts.map +1 -0
  788. package/dist/virtualizer/index.js +2 -0
  789. package/dist/virtualizer/index.jsx +2 -0
  790. package/dist/virtualizer/utils.d.ts +10 -0
  791. package/dist/virtualizer/utils.d.ts.map +1 -0
  792. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -9
  793. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  794. package/dist/visually-hidden/index.js +1 -1
  795. package/dist/visually-hidden/index.jsx +1 -1
  796. package/package.json +30 -11
  797. package/src/actiongroup/createActionGroup.ts +49 -27
  798. package/src/autocomplete/createAutocomplete.ts +32 -5
  799. package/src/autocomplete/intl/ar-AE.json +3 -0
  800. package/src/autocomplete/intl/bg-BG.json +3 -0
  801. package/src/autocomplete/intl/cs-CZ.json +3 -0
  802. package/src/autocomplete/intl/da-DK.json +3 -0
  803. package/src/autocomplete/intl/de-DE.json +3 -0
  804. package/src/autocomplete/intl/el-GR.json +3 -0
  805. package/src/autocomplete/intl/en-US.json +3 -0
  806. package/src/autocomplete/intl/es-ES.json +3 -0
  807. package/src/autocomplete/intl/et-EE.json +3 -0
  808. package/src/autocomplete/intl/fi-FI.json +3 -0
  809. package/src/autocomplete/intl/fr-FR.json +3 -0
  810. package/src/autocomplete/intl/he-IL.json +3 -0
  811. package/src/autocomplete/intl/hr-HR.json +3 -0
  812. package/src/autocomplete/intl/hu-HU.json +3 -0
  813. package/src/autocomplete/intl/index.ts +122 -0
  814. package/src/autocomplete/intl/it-IT.json +3 -0
  815. package/src/autocomplete/intl/ja-JP.json +3 -0
  816. package/src/autocomplete/intl/ko-KR.json +3 -0
  817. package/src/autocomplete/intl/lt-LT.json +3 -0
  818. package/src/autocomplete/intl/lv-LV.json +3 -0
  819. package/src/autocomplete/intl/nb-NO.json +3 -0
  820. package/src/autocomplete/intl/nl-NL.json +3 -0
  821. package/src/autocomplete/intl/pl-PL.json +3 -0
  822. package/src/autocomplete/intl/pt-BR.json +3 -0
  823. package/src/autocomplete/intl/pt-PT.json +3 -0
  824. package/src/autocomplete/intl/ro-RO.json +3 -0
  825. package/src/autocomplete/intl/ru-RU.json +3 -0
  826. package/src/autocomplete/intl/sk-SK.json +3 -0
  827. package/src/autocomplete/intl/sl-SI.json +3 -0
  828. package/src/autocomplete/intl/sr-SP.json +3 -0
  829. package/src/autocomplete/intl/sv-SE.json +3 -0
  830. package/src/autocomplete/intl/tr-TR.json +3 -0
  831. package/src/autocomplete/intl/uk-UA.json +3 -0
  832. package/src/autocomplete/intl/zh-CN.json +3 -0
  833. package/src/autocomplete/intl/zh-TW.json +3 -0
  834. package/src/breadcrumbs/createBreadcrumbs.ts +18 -1
  835. package/src/breadcrumbs/intl/ar-AE.json +3 -0
  836. package/src/breadcrumbs/intl/bg-BG.json +3 -0
  837. package/src/breadcrumbs/intl/cs-CZ.json +3 -0
  838. package/src/breadcrumbs/intl/da-DK.json +3 -0
  839. package/src/breadcrumbs/intl/de-DE.json +3 -0
  840. package/src/breadcrumbs/intl/el-GR.json +3 -0
  841. package/src/breadcrumbs/intl/en-US.json +3 -0
  842. package/src/breadcrumbs/intl/es-ES.json +3 -0
  843. package/src/breadcrumbs/intl/et-EE.json +3 -0
  844. package/src/breadcrumbs/intl/fi-FI.json +3 -0
  845. package/src/breadcrumbs/intl/fr-FR.json +3 -0
  846. package/src/breadcrumbs/intl/he-IL.json +3 -0
  847. package/src/breadcrumbs/intl/hr-HR.json +3 -0
  848. package/src/breadcrumbs/intl/hu-HU.json +3 -0
  849. package/src/breadcrumbs/intl/index.ts +122 -0
  850. package/src/breadcrumbs/intl/it-IT.json +3 -0
  851. package/src/breadcrumbs/intl/ja-JP.json +3 -0
  852. package/src/breadcrumbs/intl/ko-KR.json +3 -0
  853. package/src/breadcrumbs/intl/lt-LT.json +3 -0
  854. package/src/breadcrumbs/intl/lv-LV.json +3 -0
  855. package/src/breadcrumbs/intl/nb-NO.json +3 -0
  856. package/src/breadcrumbs/intl/nl-NL.json +3 -0
  857. package/src/breadcrumbs/intl/pl-PL.json +3 -0
  858. package/src/breadcrumbs/intl/pt-BR.json +3 -0
  859. package/src/breadcrumbs/intl/pt-PT.json +3 -0
  860. package/src/breadcrumbs/intl/ro-RO.json +3 -0
  861. package/src/breadcrumbs/intl/ru-RU.json +3 -0
  862. package/src/breadcrumbs/intl/sk-SK.json +3 -0
  863. package/src/breadcrumbs/intl/sl-SI.json +3 -0
  864. package/src/breadcrumbs/intl/sr-SP.json +3 -0
  865. package/src/breadcrumbs/intl/sv-SE.json +3 -0
  866. package/src/breadcrumbs/intl/tr-TR.json +3 -0
  867. package/src/breadcrumbs/intl/uk-UA.json +3 -0
  868. package/src/breadcrumbs/intl/zh-CN.json +3 -0
  869. package/src/breadcrumbs/intl/zh-TW.json +3 -0
  870. package/src/button/createButton.ts +15 -1
  871. package/src/button/createToggleButton.ts +18 -5
  872. package/src/button/createToggleButtonGroup.ts +23 -8
  873. package/src/button/types.ts +16 -0
  874. package/src/calendar/createCalendar.ts +22 -3
  875. package/src/calendar/createCalendarCell.ts +104 -15
  876. package/src/calendar/createCalendarGrid.ts +37 -13
  877. package/src/calendar/createCalendarMonthPicker.ts +14 -0
  878. package/src/calendar/createCalendarYearPicker.ts +14 -0
  879. package/src/calendar/createRangeCalendar.ts +124 -1
  880. package/src/calendar/createRangeCalendarCell.ts +179 -40
  881. package/src/calendar/intl/index.ts +37 -0
  882. package/src/calendar/utils.ts +14 -0
  883. package/src/checkbox/createCheckbox.ts +32 -17
  884. package/src/checkbox/createCheckboxGroup.ts +31 -13
  885. package/src/checkbox/createCheckboxGroupItem.ts +15 -1
  886. package/src/collections/index.ts +21 -3
  887. package/src/color/createColorArea.ts +226 -29
  888. package/src/color/createColorField.ts +98 -22
  889. package/src/color/createColorSlider.ts +24 -3
  890. package/src/color/createColorSwatch.ts +18 -1
  891. package/src/color/createColorWheel.ts +27 -5
  892. package/src/color/intl/index.ts +35 -0
  893. package/src/color/types.ts +47 -1
  894. package/src/combobox/createComboBox.ts +303 -152
  895. package/src/combobox/intl/generated-locales.ts +38 -1
  896. package/src/combobox/intl/index.ts +38 -2
  897. package/src/datepicker/createDateField.ts +38 -22
  898. package/src/datepicker/createDatePicker.ts +14 -0
  899. package/src/datepicker/createDatePickerGroup.ts +24 -12
  900. package/src/datepicker/createDateRangePicker.ts +14 -0
  901. package/src/datepicker/createDateSegment.ts +110 -46
  902. package/src/datepicker/createDisplayNames.ts +16 -1
  903. package/src/datepicker/createTimeField.ts +15 -5
  904. package/src/datepicker/intl.ts +623 -544
  905. package/src/dialog/createDialog.ts +57 -30
  906. package/src/dialog/types.ts +14 -0
  907. package/src/disclosure/createDisclosure.ts +28 -6
  908. package/src/disclosure/createDisclosureGroup.ts +3 -4
  909. package/src/dnd/DragManager.ts +60 -9
  910. package/src/dnd/DropTargetKeyboardNavigation.ts +8 -6
  911. package/src/dnd/createDrag.ts +18 -1
  912. package/src/dnd/createDraggableCollection.ts +96 -32
  913. package/src/dnd/createDraggableItem.ts +73 -31
  914. package/src/dnd/createDrop.ts +18 -1
  915. package/src/dnd/createDropIndicator.ts +92 -0
  916. package/src/dnd/createDroppableCollection.ts +113 -48
  917. package/src/dnd/createDroppableItem.ts +161 -13
  918. package/src/dnd/index.ts +3 -0
  919. package/src/dnd/intl/index.ts +77 -66
  920. package/src/dnd/types.ts +20 -1
  921. package/src/dnd/utils.ts +19 -0
  922. package/src/focus/FocusScope.tsx +542 -157
  923. package/src/focus/createAutoFocus.ts +94 -68
  924. package/src/focus/createFocusRestore.ts +16 -12
  925. package/src/focus/createHasTabbableChild.ts +78 -0
  926. package/src/focus/createVirtualFocus.ts +21 -5
  927. package/src/focus/virtualFocus.ts +1 -1
  928. package/src/form/createFormReset.ts +40 -17
  929. package/src/form/createFormValidation.ts +128 -86
  930. package/src/grid/GridKeyboardDelegate.ts +14 -0
  931. package/src/grid/createGrid.ts +17 -2
  932. package/src/grid/createGridCell.ts +17 -2
  933. package/src/grid/createGridRow.ts +17 -2
  934. package/src/grid/index.ts +2 -2
  935. package/src/grid/intl/ar-AE.json +8 -0
  936. package/src/grid/intl/bg-BG.json +8 -0
  937. package/src/grid/intl/cs-CZ.json +8 -0
  938. package/src/grid/intl/da-DK.json +8 -0
  939. package/src/grid/intl/de-DE.json +8 -0
  940. package/src/grid/intl/el-GR.json +8 -0
  941. package/src/grid/intl/en-US.json +8 -0
  942. package/src/grid/intl/es-ES.json +8 -0
  943. package/src/grid/intl/et-EE.json +8 -0
  944. package/src/grid/intl/fi-FI.json +8 -0
  945. package/src/grid/intl/fr-FR.json +8 -0
  946. package/src/grid/intl/he-IL.json +8 -0
  947. package/src/grid/intl/hr-HR.json +8 -0
  948. package/src/grid/intl/hu-HU.json +8 -0
  949. package/src/grid/intl/index.ts +127 -0
  950. package/src/grid/intl/it-IT.json +8 -0
  951. package/src/grid/intl/ja-JP.json +8 -0
  952. package/src/grid/intl/ko-KR.json +8 -0
  953. package/src/grid/intl/lt-LT.json +8 -0
  954. package/src/grid/intl/lv-LV.json +8 -0
  955. package/src/grid/intl/nb-NO.json +8 -0
  956. package/src/grid/intl/nl-NL.json +8 -0
  957. package/src/grid/intl/pl-PL.json +8 -0
  958. package/src/grid/intl/pt-BR.json +8 -0
  959. package/src/grid/intl/pt-PT.json +8 -0
  960. package/src/grid/intl/ro-RO.json +8 -0
  961. package/src/grid/intl/ru-RU.json +8 -0
  962. package/src/grid/intl/sk-SK.json +8 -0
  963. package/src/grid/intl/sl-SI.json +8 -0
  964. package/src/grid/intl/sr-SP.json +8 -0
  965. package/src/grid/intl/sv-SE.json +8 -0
  966. package/src/grid/intl/tr-TR.json +8 -0
  967. package/src/grid/intl/uk-UA.json +8 -0
  968. package/src/grid/intl/zh-CN.json +8 -0
  969. package/src/grid/intl/zh-TW.json +8 -0
  970. package/src/grid/types.ts +25 -2
  971. package/src/gridlist/createGridList.ts +172 -42
  972. package/src/gridlist/createGridListItem.ts +51 -13
  973. package/src/gridlist/createGridListSection.ts +14 -0
  974. package/src/gridlist/createGridListSelectionCheckbox.ts +31 -4
  975. package/src/gridlist/intl/ar-AE.json +4 -0
  976. package/src/gridlist/intl/bg-BG.json +4 -0
  977. package/src/gridlist/intl/cs-CZ.json +4 -0
  978. package/src/gridlist/intl/da-DK.json +4 -0
  979. package/src/gridlist/intl/de-DE.json +4 -0
  980. package/src/gridlist/intl/el-GR.json +4 -0
  981. package/src/gridlist/intl/en-US.json +4 -0
  982. package/src/gridlist/intl/es-ES.json +4 -0
  983. package/src/gridlist/intl/et-EE.json +4 -0
  984. package/src/gridlist/intl/fi-FI.json +4 -0
  985. package/src/gridlist/intl/fr-FR.json +4 -0
  986. package/src/gridlist/intl/he-IL.json +4 -0
  987. package/src/gridlist/intl/hr-HR.json +4 -0
  988. package/src/gridlist/intl/hu-HU.json +4 -0
  989. package/src/gridlist/intl/index.ts +123 -0
  990. package/src/gridlist/intl/it-IT.json +4 -0
  991. package/src/gridlist/intl/ja-JP.json +4 -0
  992. package/src/gridlist/intl/ko-KR.json +4 -0
  993. package/src/gridlist/intl/lt-LT.json +4 -0
  994. package/src/gridlist/intl/lv-LV.json +4 -0
  995. package/src/gridlist/intl/nb-NO.json +4 -0
  996. package/src/gridlist/intl/nl-NL.json +4 -0
  997. package/src/gridlist/intl/pl-PL.json +4 -0
  998. package/src/gridlist/intl/pt-BR.json +4 -0
  999. package/src/gridlist/intl/pt-PT.json +4 -0
  1000. package/src/gridlist/intl/ro-RO.json +4 -0
  1001. package/src/gridlist/intl/ru-RU.json +4 -0
  1002. package/src/gridlist/intl/sk-SK.json +4 -0
  1003. package/src/gridlist/intl/sl-SI.json +4 -0
  1004. package/src/gridlist/intl/sr-SP.json +4 -0
  1005. package/src/gridlist/intl/sv-SE.json +4 -0
  1006. package/src/gridlist/intl/tr-TR.json +4 -0
  1007. package/src/gridlist/intl/uk-UA.json +4 -0
  1008. package/src/gridlist/intl/zh-CN.json +4 -0
  1009. package/src/gridlist/intl/zh-TW.json +4 -0
  1010. package/src/gridlist/types.ts +54 -2
  1011. package/src/i18n/compileIcu.ts +440 -0
  1012. package/src/i18n/createCollator.ts +14 -0
  1013. package/src/i18n/createDateFormatter.ts +14 -0
  1014. package/src/i18n/createFilter.ts +14 -0
  1015. package/src/i18n/createListFormatter.ts +38 -0
  1016. package/src/i18n/createNumberFormatter.ts +14 -0
  1017. package/src/i18n/createStringFormatter.ts +64 -8
  1018. package/src/i18n/index.ts +3 -0
  1019. package/src/i18n/locale.tsx +60 -19
  1020. package/src/i18n/utils.ts +14 -0
  1021. package/src/index.ts +49 -1
  1022. package/src/interactions/FocusableProvider.tsx +28 -11
  1023. package/src/interactions/PressEvent.ts +16 -1
  1024. package/src/interactions/createContextMenu.ts +108 -0
  1025. package/src/interactions/createFocus.ts +26 -6
  1026. package/src/interactions/createFocusRing.ts +28 -13
  1027. package/src/interactions/createFocusWithin.ts +23 -3
  1028. package/src/interactions/createFocusable.ts +45 -28
  1029. package/src/interactions/createHover.ts +102 -81
  1030. package/src/interactions/createInteractionModality.ts +135 -45
  1031. package/src/interactions/createKeyboard.ts +85 -9
  1032. package/src/interactions/createKeyboardShortcutHandler.ts +157 -0
  1033. package/src/interactions/createLongPress.ts +31 -9
  1034. package/src/interactions/createMove.ts +24 -3
  1035. package/src/interactions/createPress.ts +85 -41
  1036. package/src/interactions/index.ts +1 -0
  1037. package/src/label/createField.ts +58 -63
  1038. package/src/label/createLabel.ts +21 -4
  1039. package/src/label/createLabels.ts +25 -1
  1040. package/src/landmark/createLandmark.ts +27 -4
  1041. package/src/link/createLink.ts +20 -12
  1042. package/src/listbox/createListBox.ts +86 -310
  1043. package/src/listbox/createOption.ts +50 -14
  1044. package/src/live-announcer/announce.ts +21 -6
  1045. package/src/menu/createMenu.ts +92 -5
  1046. package/src/menu/createMenuItem.ts +40 -23
  1047. package/src/menu/createMenuTrigger.ts +179 -51
  1048. package/src/menu/index.ts +2 -0
  1049. package/src/menu/intl/index.ts +130 -0
  1050. package/src/meter/createMeter.ts +20 -5
  1051. package/src/numberfield/createNumberField.ts +254 -14
  1052. package/src/overlays/ariaHideOutside.ts +76 -11
  1053. package/src/overlays/createInteractOutside.ts +74 -47
  1054. package/src/overlays/createModal.tsx +42 -27
  1055. package/src/overlays/createOverlay.ts +107 -66
  1056. package/src/overlays/createOverlayTrigger.ts +21 -6
  1057. package/src/overlays/createPreventScroll.ts +92 -62
  1058. package/src/overlays/index.ts +2 -0
  1059. package/src/overlays/intl/ar-AE.json +3 -0
  1060. package/src/overlays/intl/bg-BG.json +3 -0
  1061. package/src/overlays/intl/cs-CZ.json +3 -0
  1062. package/src/overlays/intl/da-DK.json +3 -0
  1063. package/src/overlays/intl/de-DE.json +3 -0
  1064. package/src/overlays/intl/el-GR.json +3 -0
  1065. package/src/overlays/intl/en-US.json +3 -0
  1066. package/src/overlays/intl/es-ES.json +3 -0
  1067. package/src/overlays/intl/et-EE.json +3 -0
  1068. package/src/overlays/intl/fi-FI.json +3 -0
  1069. package/src/overlays/intl/fr-FR.json +3 -0
  1070. package/src/overlays/intl/he-IL.json +3 -0
  1071. package/src/overlays/intl/hr-HR.json +3 -0
  1072. package/src/overlays/intl/hu-HU.json +3 -0
  1073. package/src/overlays/intl/index.ts +122 -0
  1074. package/src/overlays/intl/it-IT.json +3 -0
  1075. package/src/overlays/intl/ja-JP.json +3 -0
  1076. package/src/overlays/intl/ko-KR.json +3 -0
  1077. package/src/overlays/intl/lt-LT.json +3 -0
  1078. package/src/overlays/intl/lv-LV.json +3 -0
  1079. package/src/overlays/intl/nb-NO.json +3 -0
  1080. package/src/overlays/intl/nl-NL.json +3 -0
  1081. package/src/overlays/intl/pl-PL.json +3 -0
  1082. package/src/overlays/intl/pt-BR.json +3 -0
  1083. package/src/overlays/intl/pt-PT.json +3 -0
  1084. package/src/overlays/intl/ro-RO.json +3 -0
  1085. package/src/overlays/intl/ru-RU.json +3 -0
  1086. package/src/overlays/intl/sk-SK.json +3 -0
  1087. package/src/overlays/intl/sl-SI.json +3 -0
  1088. package/src/overlays/intl/sr-SP.json +3 -0
  1089. package/src/overlays/intl/sv-SE.json +3 -0
  1090. package/src/overlays/intl/tr-TR.json +3 -0
  1091. package/src/overlays/intl/uk-UA.json +3 -0
  1092. package/src/overlays/intl/zh-CN.json +3 -0
  1093. package/src/overlays/intl/zh-TW.json +3 -0
  1094. package/src/popover/calculatePosition.ts +21 -3
  1095. package/src/popover/createOverlayPosition.ts +149 -41
  1096. package/src/popover/createPopover.ts +88 -23
  1097. package/src/progress/createProgressBar.ts +19 -4
  1098. package/src/radio/createRadio.ts +80 -25
  1099. package/src/radio/createRadioGroup.ts +47 -13
  1100. package/src/searchfield/createSearchField.ts +31 -2
  1101. package/src/searchfield/intl/ar-AE.json +3 -0
  1102. package/src/searchfield/intl/bg-BG.json +3 -0
  1103. package/src/searchfield/intl/cs-CZ.json +3 -0
  1104. package/src/searchfield/intl/da-DK.json +3 -0
  1105. package/src/searchfield/intl/de-DE.json +3 -0
  1106. package/src/searchfield/intl/el-GR.json +3 -0
  1107. package/src/searchfield/intl/en-US.json +3 -0
  1108. package/src/searchfield/intl/es-ES.json +3 -0
  1109. package/src/searchfield/intl/et-EE.json +3 -0
  1110. package/src/searchfield/intl/fi-FI.json +3 -0
  1111. package/src/searchfield/intl/fr-FR.json +3 -0
  1112. package/src/searchfield/intl/he-IL.json +3 -0
  1113. package/src/searchfield/intl/hr-HR.json +3 -0
  1114. package/src/searchfield/intl/hu-HU.json +3 -0
  1115. package/src/searchfield/intl/index.ts +122 -0
  1116. package/src/searchfield/intl/it-IT.json +3 -0
  1117. package/src/searchfield/intl/ja-JP.json +3 -0
  1118. package/src/searchfield/intl/ko-KR.json +3 -0
  1119. package/src/searchfield/intl/lt-LT.json +3 -0
  1120. package/src/searchfield/intl/lv-LV.json +3 -0
  1121. package/src/searchfield/intl/nb-NO.json +3 -0
  1122. package/src/searchfield/intl/nl-NL.json +3 -0
  1123. package/src/searchfield/intl/pl-PL.json +3 -0
  1124. package/src/searchfield/intl/pt-BR.json +3 -0
  1125. package/src/searchfield/intl/pt-PT.json +3 -0
  1126. package/src/searchfield/intl/ro-RO.json +3 -0
  1127. package/src/searchfield/intl/ru-RU.json +3 -0
  1128. package/src/searchfield/intl/sk-SK.json +3 -0
  1129. package/src/searchfield/intl/sl-SI.json +3 -0
  1130. package/src/searchfield/intl/sr-SP.json +3 -0
  1131. package/src/searchfield/intl/sv-SE.json +3 -0
  1132. package/src/searchfield/intl/tr-TR.json +3 -0
  1133. package/src/searchfield/intl/uk-UA.json +3 -0
  1134. package/src/searchfield/intl/zh-CN.json +3 -0
  1135. package/src/searchfield/intl/zh-TW.json +3 -0
  1136. package/src/select/createHiddenSelect.tsx +166 -69
  1137. package/src/select/createSelect.ts +80 -34
  1138. package/src/selection/DOMLayoutDelegate.ts +14 -0
  1139. package/src/selection/ListKeyboardDelegate.ts +16 -1
  1140. package/src/selection/constants.ts +14 -0
  1141. package/src/selection/createCollectionRowInteraction.ts +75 -6
  1142. package/src/selection/createScrollIntoViewOnFocus.ts +23 -8
  1143. package/src/selection/createSelectableCollection.ts +352 -226
  1144. package/src/selection/createSelectableItem.ts +51 -12
  1145. package/src/selection/createSelectableList.ts +21 -1
  1146. package/src/selection/createTypeSelect.ts +21 -5
  1147. package/src/selection/selectItem.ts +14 -0
  1148. package/src/selection/utils.ts +15 -1
  1149. package/src/separator/createSeparator.ts +17 -1
  1150. package/src/slider/createSlider.ts +24 -18
  1151. package/src/spinbutton/createSpinButton.ts +16 -2
  1152. package/src/spinbutton/index.ts +2 -10
  1153. package/src/spinbutton/intl.ts +70 -34
  1154. package/src/ssr/index.tsx +79 -48
  1155. package/src/steplist/createStepList.ts +17 -2
  1156. package/src/switch/createSwitch.ts +25 -4
  1157. package/src/table/createTable.ts +104 -52
  1158. package/src/table/createTableCell.ts +17 -2
  1159. package/src/table/createTableColumnHeader.ts +21 -3
  1160. package/src/table/createTableColumnResize.ts +19 -3
  1161. package/src/table/createTableHeaderRow.ts +17 -2
  1162. package/src/table/createTableRow.ts +29 -22
  1163. package/src/table/createTableRowGroup.ts +18 -3
  1164. package/src/table/createTableSelectAllCheckbox.ts +30 -14
  1165. package/src/table/createTableSelectionCheckbox.ts +21 -3
  1166. package/src/table/index.ts +2 -2
  1167. package/src/table/intl/ar-AE.json +13 -0
  1168. package/src/table/intl/bg-BG.json +13 -0
  1169. package/src/table/intl/cs-CZ.json +13 -0
  1170. package/src/table/intl/da-DK.json +13 -0
  1171. package/src/table/intl/de-DE.json +13 -0
  1172. package/src/table/intl/el-GR.json +13 -0
  1173. package/src/table/intl/en-US.json +13 -0
  1174. package/src/table/intl/es-ES.json +13 -0
  1175. package/src/table/intl/et-EE.json +13 -0
  1176. package/src/table/intl/fi-FI.json +13 -0
  1177. package/src/table/intl/fr-FR.json +13 -0
  1178. package/src/table/intl/he-IL.json +13 -0
  1179. package/src/table/intl/hr-HR.json +13 -0
  1180. package/src/table/intl/hu-HU.json +13 -0
  1181. package/src/table/intl/index.ts +132 -0
  1182. package/src/table/intl/it-IT.json +13 -0
  1183. package/src/table/intl/ja-JP.json +13 -0
  1184. package/src/table/intl/ko-KR.json +13 -0
  1185. package/src/table/intl/lt-LT.json +13 -0
  1186. package/src/table/intl/lv-LV.json +13 -0
  1187. package/src/table/intl/nb-NO.json +13 -0
  1188. package/src/table/intl/nl-NL.json +13 -0
  1189. package/src/table/intl/pl-PL.json +13 -0
  1190. package/src/table/intl/pt-BR.json +13 -0
  1191. package/src/table/intl/pt-PT.json +13 -0
  1192. package/src/table/intl/ro-RO.json +13 -0
  1193. package/src/table/intl/ru-RU.json +13 -0
  1194. package/src/table/intl/sk-SK.json +13 -0
  1195. package/src/table/intl/sl-SI.json +13 -0
  1196. package/src/table/intl/sr-SP.json +13 -0
  1197. package/src/table/intl/sv-SE.json +13 -0
  1198. package/src/table/intl/tr-TR.json +13 -0
  1199. package/src/table/intl/uk-UA.json +13 -0
  1200. package/src/table/intl/zh-CN.json +13 -0
  1201. package/src/table/intl/zh-TW.json +13 -0
  1202. package/src/table/types.ts +44 -2
  1203. package/src/table/utils.ts +15 -6
  1204. package/src/tabs/createTabs.ts +104 -37
  1205. package/src/tag/createTag.ts +118 -37
  1206. package/src/tag/createTagGroup.ts +20 -12
  1207. package/src/tag/intl/ar-AE.json +4 -0
  1208. package/src/tag/intl/bg-BG.json +4 -0
  1209. package/src/tag/intl/cs-CZ.json +4 -0
  1210. package/src/tag/intl/da-DK.json +4 -0
  1211. package/src/tag/intl/de-DE.json +4 -0
  1212. package/src/tag/intl/el-GR.json +4 -0
  1213. package/src/tag/intl/en-US.json +4 -0
  1214. package/src/tag/intl/es-ES.json +4 -0
  1215. package/src/tag/intl/et-EE.json +4 -0
  1216. package/src/tag/intl/fi-FI.json +4 -0
  1217. package/src/tag/intl/fr-FR.json +4 -0
  1218. package/src/tag/intl/he-IL.json +4 -0
  1219. package/src/tag/intl/hr-HR.json +4 -0
  1220. package/src/tag/intl/hu-HU.json +4 -0
  1221. package/src/tag/intl/index.ts +123 -0
  1222. package/src/tag/intl/it-IT.json +4 -0
  1223. package/src/tag/intl/ja-JP.json +4 -0
  1224. package/src/tag/intl/ko-KR.json +4 -0
  1225. package/src/tag/intl/lt-LT.json +4 -0
  1226. package/src/tag/intl/lv-LV.json +4 -0
  1227. package/src/tag/intl/nb-NO.json +4 -0
  1228. package/src/tag/intl/nl-NL.json +4 -0
  1229. package/src/tag/intl/pl-PL.json +4 -0
  1230. package/src/tag/intl/pt-BR.json +4 -0
  1231. package/src/tag/intl/pt-PT.json +4 -0
  1232. package/src/tag/intl/ro-RO.json +4 -0
  1233. package/src/tag/intl/ru-RU.json +4 -0
  1234. package/src/tag/intl/sk-SK.json +4 -0
  1235. package/src/tag/intl/sl-SI.json +4 -0
  1236. package/src/tag/intl/sr-SP.json +4 -0
  1237. package/src/tag/intl/sv-SE.json +4 -0
  1238. package/src/tag/intl/tr-TR.json +4 -0
  1239. package/src/tag/intl/uk-UA.json +4 -0
  1240. package/src/tag/intl/zh-CN.json +4 -0
  1241. package/src/tag/intl/zh-TW.json +4 -0
  1242. package/src/textfield/createTextField.ts +104 -14
  1243. package/src/toast/createToast.ts +39 -6
  1244. package/src/toast/createToastRegion.ts +28 -15
  1245. package/src/toast/intl/ar-AE.json +4 -0
  1246. package/src/toast/intl/bg-BG.json +4 -0
  1247. package/src/toast/intl/cs-CZ.json +4 -0
  1248. package/src/toast/intl/da-DK.json +4 -0
  1249. package/src/toast/intl/de-DE.json +4 -0
  1250. package/src/toast/intl/el-GR.json +4 -0
  1251. package/src/toast/intl/en-US.json +4 -0
  1252. package/src/toast/intl/es-ES.json +4 -0
  1253. package/src/toast/intl/et-EE.json +4 -0
  1254. package/src/toast/intl/fi-FI.json +4 -0
  1255. package/src/toast/intl/fr-FR.json +4 -0
  1256. package/src/toast/intl/he-IL.json +4 -0
  1257. package/src/toast/intl/hr-HR.json +4 -0
  1258. package/src/toast/intl/hu-HU.json +4 -0
  1259. package/src/toast/intl/index.ts +123 -0
  1260. package/src/toast/intl/it-IT.json +4 -0
  1261. package/src/toast/intl/ja-JP.json +4 -0
  1262. package/src/toast/intl/ko-KR.json +4 -0
  1263. package/src/toast/intl/lt-LT.json +4 -0
  1264. package/src/toast/intl/lv-LV.json +4 -0
  1265. package/src/toast/intl/nb-NO.json +4 -0
  1266. package/src/toast/intl/nl-NL.json +4 -0
  1267. package/src/toast/intl/pl-PL.json +4 -0
  1268. package/src/toast/intl/pt-BR.json +4 -0
  1269. package/src/toast/intl/pt-PT.json +4 -0
  1270. package/src/toast/intl/ro-RO.json +4 -0
  1271. package/src/toast/intl/ru-RU.json +4 -0
  1272. package/src/toast/intl/sk-SK.json +4 -0
  1273. package/src/toast/intl/sl-SI.json +4 -0
  1274. package/src/toast/intl/sr-SP.json +4 -0
  1275. package/src/toast/intl/sv-SE.json +4 -0
  1276. package/src/toast/intl/tr-TR.json +4 -0
  1277. package/src/toast/intl/uk-UA.json +4 -0
  1278. package/src/toast/intl/zh-CN.json +4 -0
  1279. package/src/toast/intl/zh-TW.json +4 -0
  1280. package/src/toggle/createToggle.ts +96 -15
  1281. package/src/tokenfield/createToken.ts +82 -0
  1282. package/src/tokenfield/createTokenField.ts +859 -0
  1283. package/src/tokenfield/index.ts +10 -0
  1284. package/src/toolbar/createToolbar.ts +26 -5
  1285. package/src/tooltip/createPreviewTrigger.ts +301 -0
  1286. package/src/tooltip/createSafeArea.ts +165 -0
  1287. package/src/tooltip/createTooltip.ts +15 -1
  1288. package/src/tooltip/createTooltipTrigger.ts +24 -3
  1289. package/src/tooltip/index.ts +7 -0
  1290. package/src/tooltip/intl/index.ts +76 -0
  1291. package/src/tree/createTree.ts +66 -50
  1292. package/src/tree/createTreeItem.ts +85 -21
  1293. package/src/tree/createTreeSelectionCheckbox.ts +29 -28
  1294. package/src/tree/intl/ar-AE.json +4 -0
  1295. package/src/tree/intl/bg-BG.json +4 -0
  1296. package/src/tree/intl/cs-CZ.json +4 -0
  1297. package/src/tree/intl/da-DK.json +4 -0
  1298. package/src/tree/intl/de-DE.json +4 -0
  1299. package/src/tree/intl/el-GR.json +4 -0
  1300. package/src/tree/intl/en-US.json +4 -0
  1301. package/src/tree/intl/es-ES.json +4 -0
  1302. package/src/tree/intl/et-EE.json +4 -0
  1303. package/src/tree/intl/fi-FI.json +4 -0
  1304. package/src/tree/intl/fr-FR.json +4 -0
  1305. package/src/tree/intl/he-IL.json +4 -0
  1306. package/src/tree/intl/hr-HR.json +4 -0
  1307. package/src/tree/intl/hu-HU.json +4 -0
  1308. package/src/tree/intl/index.ts +123 -0
  1309. package/src/tree/intl/it-IT.json +4 -0
  1310. package/src/tree/intl/ja-JP.json +4 -0
  1311. package/src/tree/intl/ko-KR.json +4 -0
  1312. package/src/tree/intl/lt-LT.json +4 -0
  1313. package/src/tree/intl/lv-LV.json +4 -0
  1314. package/src/tree/intl/nb-NO.json +4 -0
  1315. package/src/tree/intl/nl-NL.json +4 -0
  1316. package/src/tree/intl/pl-PL.json +4 -0
  1317. package/src/tree/intl/pt-BR.json +4 -0
  1318. package/src/tree/intl/pt-PT.json +4 -0
  1319. package/src/tree/intl/ro-RO.json +4 -0
  1320. package/src/tree/intl/ru-RU.json +4 -0
  1321. package/src/tree/intl/sk-SK.json +4 -0
  1322. package/src/tree/intl/sl-SI.json +4 -0
  1323. package/src/tree/intl/sr-SP.json +4 -0
  1324. package/src/tree/intl/sv-SE.json +4 -0
  1325. package/src/tree/intl/tr-TR.json +4 -0
  1326. package/src/tree/intl/uk-UA.json +4 -0
  1327. package/src/tree/intl/zh-CN.json +4 -0
  1328. package/src/tree/intl/zh-TW.json +4 -0
  1329. package/src/tree/types.ts +35 -2
  1330. package/src/utils/ShadowTreeWalker.ts +249 -0
  1331. package/src/utils/animation.ts +106 -85
  1332. package/src/utils/capture.ts +51 -0
  1333. package/src/utils/createDescription.ts +31 -8
  1334. package/src/utils/dom.ts +314 -33
  1335. package/src/utils/domAttrs.ts +84 -0
  1336. package/src/utils/env.ts +2 -0
  1337. package/src/utils/events.ts +39 -3
  1338. package/src/utils/filterDOMProps.ts +34 -2
  1339. package/src/utils/focus.ts +186 -32
  1340. package/src/utils/geometry.ts +15 -1
  1341. package/src/utils/getMetaValue.ts +57 -0
  1342. package/src/utils/getNonce.ts +40 -0
  1343. package/src/utils/globalListeners.ts +16 -3
  1344. package/src/utils/index.ts +14 -0
  1345. package/src/utils/keyboard.ts +15 -1
  1346. package/src/utils/mergeProps.ts +149 -16
  1347. package/src/utils/owner.ts +26 -0
  1348. package/src/utils/platform.ts +15 -1
  1349. package/src/utils/reactivity.ts +2 -0
  1350. package/src/utils/refs.ts +53 -0
  1351. package/src/utils/runAfterTransition.ts +117 -0
  1352. package/src/utils/scrollIntoView.ts +14 -0
  1353. package/src/utils/splitProps.ts +70 -0
  1354. package/src/utils/textSelection.ts +15 -1
  1355. package/src/virtualizer/ScrollView.ts +210 -0
  1356. package/src/virtualizer/index.ts +2 -0
  1357. package/src/virtualizer/utils.ts +100 -0
  1358. package/src/visually-hidden/createVisuallyHidden.ts +20 -4
  1359. package/dist/_chunk/createInteractionModality.js +0 -268
  1360. package/dist/_chunk/createInteractionModality.js.map +0 -1
  1361. package/dist/_chunk/createInteractionModality.jsx +0 -268
  1362. package/dist/_chunk/createInteractionModality.jsx.map +0 -1
  1363. package/dist/_chunk/focus2.js +0 -631
  1364. package/dist/_chunk/focus2.js.map +0 -1
  1365. package/dist/_chunk/focus2.jsx +0 -631
  1366. package/dist/_chunk/focus2.jsx.map +0 -1
  1367. package/dist/_chunk/visually-hidden.js.map +0 -1
  1368. package/dist/_chunk/visually-hidden.jsx.map +0 -1
  1369. package/dist/checkbox/createCheckboxGroupState.d.ts +0 -71
  1370. package/dist/checkbox/createCheckboxGroupState.d.ts.map +0 -1
  1371. package/dist/radio/createRadioGroupState.d.ts +0 -77
  1372. package/dist/radio/createRadioGroupState.d.ts.map +0 -1
  1373. package/dist/toggle/createToggleState.d.ts +0 -34
  1374. package/dist/toggle/createToggleState.d.ts.map +0 -1
  1375. package/src/checkbox/createCheckboxGroupState.ts +0 -174
  1376. package/src/radio/createRadioGroupState.ts +0 -177
  1377. package/src/toggle/createToggleState.ts +0 -86
@@ -1 +1 @@
1
- {"version":3,"file":"focus.jsx","names":[],"sources":["../../src/utils/dom.ts","../../src/utils/focus.ts"],"sourcesContent":["/**\n * DOM utilities for cross-browser compatibility.\n * Based on @react-aria/utils DOM utilities.\n */\n\n/**\n * Gets the owner document of an element, or the global document.\n */\nexport function getOwnerDocument(el: Element | null | undefined): Document {\n return el?.ownerDocument ?? document;\n}\n\n/**\n * Gets the owner window of an element, or the global window.\n */\nexport function getOwnerWindow(el: Element | null | undefined): Window & typeof globalThis {\n return getOwnerDocument(el).defaultView ?? window;\n}\n\n/**\n * Cross-browser implementation of Node.contains that works with ShadowDOM.\n * In Safari, Node.contains doesn't properly detect elements inside shadow roots.\n */\nexport function nodeContains(parent: Node | null, child: Node | null): boolean {\n if (!parent || !child) {\n return false;\n }\n\n // Standard contains check\n if (parent.contains(child)) {\n return true;\n }\n\n // Check if child is in a shadow root\n let node: Node | null = child;\n while (node) {\n if (node === parent) {\n return true;\n }\n\n // Check shadow root host\n if ((node as ShadowRoot).host) {\n node = (node as ShadowRoot).host;\n } else {\n node = node.parentNode;\n }\n }\n\n return false;\n}\n\n/**\n * Gets the event target, handling composed path for shadow DOM.\n */\nexport function getEventTarget<T extends EventTarget>(event: Event): T | null {\n // Use composedPath to get the real target when using Shadow DOM\n if (typeof event.composedPath === \"function\") {\n const path = event.composedPath();\n if (path.length > 0) {\n return path[0] as T;\n }\n }\n return event.target as T | null;\n}\n\n// Ports @react-aria/utils `isElementVisible`/`isFocusable`/`isTabbable` (v3.34.1,\n// the version paired with our pinned RAC 1.19.0) so focusability matches upstream:\n// a candidate must match the focusable selector AND not be inside an `inert`\n// subtree AND be visible (unless `skipVisibilityCheck`). The previous `isFocusable`\n// was a simplified tagName/tabindex check with no visibility or `inert` filtering.\n// Owner-window lookups go through `getOwnerWindow`, which falls back to the global\n// window, so these stay robust on detached documents (`defaultView === null`).\n\nconst supportsCheckVisibility =\n typeof Element !== \"undefined\" && \"checkVisibility\" in Element.prototype;\n\n// Solid clones templates with the document that is global at creation time, so a\n// node portaled into another document (e.g. an iframe) keeps its original realm's\n// prototype even though `getOwnerWindow` now resolves to the other document's\n// window. Upstream React creates portal nodes with the container's `ownerDocument`,\n// so its single `instanceof getOwnerWindow(element)` check suffices; we also accept\n// the global realm's constructors so cross-document focus scopes still recognize\n// real elements. In the common same-realm case this is identical to upstream.\nfunction isHTMLOrSVGElement(element: Element): element is HTMLElement | SVGElement {\n const windowObject = getOwnerWindow(element);\n return (\n element instanceof windowObject.HTMLElement ||\n element instanceof windowObject.SVGElement ||\n (typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement) ||\n (typeof SVGElement !== \"undefined\" && element instanceof SVGElement)\n );\n}\n\nfunction isStyleVisible(element: Element): boolean {\n if (!isHTMLOrSVGElement(element)) {\n return false;\n }\n\n const { display, visibility } = element.style;\n\n let isVisible = display !== \"none\" && visibility !== \"hidden\" && visibility !== \"collapse\";\n\n if (isVisible) {\n const { getComputedStyle } = getOwnerWindow(element);\n const { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n\n isVisible =\n computedDisplay !== \"none\" &&\n computedVisibility !== \"hidden\" &&\n computedVisibility !== \"collapse\";\n }\n\n return isVisible;\n}\n\nfunction isAttributeVisible(element: Element, childElement?: Element): boolean {\n return (\n !element.hasAttribute(\"hidden\") &&\n // Ignore HiddenSelect when tree walking.\n !element.hasAttribute(\"data-react-aria-prevent-focus\") &&\n (element.nodeName === \"DETAILS\" && childElement && childElement.nodeName !== \"SUMMARY\"\n ? element.hasAttribute(\"open\")\n : true)\n );\n}\n\n/**\n * Whether an element is visible, and so eligible for focus. Adapted from\n * @react-aria/utils, which adapts testing-library/jest-dom and\n * vue-test-utils-next (MIT): uses `checkVisibility` when supported, otherwise\n * walks computed style and visibility-affecting attributes up the ancestor chain.\n */\nexport function isElementVisible(element: Element, childElement?: Element): boolean {\n if (supportsCheckVisibility) {\n return (\n element.checkVisibility({ visibilityProperty: true }) &&\n !element.closest(\"[data-react-aria-prevent-focus]\")\n );\n }\n\n return (\n element.nodeName !== \"#comment\" &&\n isStyleVisible(element) &&\n isAttributeVisible(element, childElement) &&\n (!element.parentElement || isElementVisible(element.parentElement, element))\n );\n}\n\nconst focusableElements = [\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"a[href]\",\n \"area[href]\",\n \"summary\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"audio[controls]\",\n \"video[controls]\",\n '[contenteditable]:not([contenteditable^=\"false\"])',\n \"permission\",\n];\n\nconst FOCUSABLE_ELEMENT_SELECTOR =\n focusableElements.join(\":not([hidden]),\") + \",[tabindex]:not([disabled]):not([hidden])\";\n\nfocusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\n\n/**\n * Checks if an element is a valid focusable element: it matches the focusable\n * selector, is not inside an `inert` subtree, and is visible. A negative tabindex\n * is programmatically focusable (matched here) but not tabbable. `skipVisibilityCheck`\n * lets callers (e.g. the press-path `preventFocus` ancestor walk) skip the\n * `isElementVisible` step, which also avoids touching layout on detached documents.\n */\nexport function isFocusable(\n element: Element,\n options?: { skipVisibilityCheck?: boolean },\n): boolean {\n return (\n element.matches(FOCUSABLE_ELEMENT_SELECTOR) &&\n !isInert(element) &&\n (options?.skipVisibilityCheck || isElementVisible(element))\n );\n}\n\n/**\n * Checks if an element is tabbable (reachable via the Tab key): focusable,\n * visible, not inert, and not `tabindex=\"-1\"`.\n */\nexport function isTabbable(element: Element): boolean {\n return (\n element.matches(TABBABLE_ELEMENT_SELECTOR) && isElementVisible(element) && !isInert(element)\n );\n}\n\nfunction isInert(element: Element): boolean {\n let node: Element | null = element;\n while (node != null) {\n // Realm-tolerant HTMLElement check (see isHTMLOrSVGElement): Solid-portaled\n // nodes keep their creating realm's prototype, so also accept the global one.\n const isHTMLElement =\n node instanceof getOwnerWindow(node).HTMLElement ||\n (typeof HTMLElement !== \"undefined\" && node instanceof HTMLElement);\n if (isHTMLElement && (node as HTMLElement).inert) {\n return true;\n }\n\n node = node.parentElement;\n }\n\n return false;\n}\n\n/**\n * Checks if a keyboard event should trigger the default action (like clicking).\n */\nexport function isValidKeyboardEvent(event: KeyboardEvent, currentTarget: Element): boolean {\n const { key, code } = event;\n const element = currentTarget as HTMLElement;\n const tagName = element.tagName.toLowerCase();\n const role = element.getAttribute(\"role\");\n\n // Only accept Enter and Space\n const isActivationKey = key === \"Enter\" || key === \" \" || key === \"Spacebar\" || code === \"Space\";\n if (!isActivationKey) {\n return false;\n }\n\n // Text inputs should handle their own keyboard events\n if (tagName === \"textarea\") {\n return false;\n }\n\n // Content editable elements should handle their own keyboard events\n if (element.isContentEditable) {\n return false;\n }\n\n // Links should only respond to Enter, not Space\n const isLink = role === \"link\" || (!role && isHTMLAnchorLink(element));\n if (isLink && key !== \"Enter\") {\n return false;\n }\n\n // Input elements have specific key handling\n if (tagName === \"input\") {\n return isValidInputKey(element as HTMLInputElement, key);\n }\n\n return true;\n}\n\n/**\n * Checks if a key is valid for a specific input type.\n */\nexport function isValidInputKey(target: HTMLInputElement, key: string): boolean {\n const type = target.type.toLowerCase();\n\n // Checkbox and radio only respond to Space\n if (type === \"checkbox\" || type === \"radio\") {\n return key === \" \" || key === \"Spacebar\";\n }\n\n // Text-like inputs handle their own keyboard events\n const textInputTypes = [\n \"text\",\n \"search\",\n \"url\",\n \"tel\",\n \"email\",\n \"password\",\n \"date\",\n \"month\",\n \"week\",\n \"time\",\n \"datetime-local\",\n \"number\",\n ];\n if (textInputTypes.includes(type)) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Checks if an element is an HTML anchor link (has href attribute).\n */\nexport function isHTMLAnchorLink(target: Element): boolean {\n return target.tagName === \"A\" && target.hasAttribute(\"href\");\n}\n\n/**\n * Whether to prevent default on keyboard events for this element.\n */\nexport function shouldPreventDefaultKeyboard(target: Element, key: string): boolean {\n if (target instanceof HTMLInputElement) {\n return !isValidInputKey(target, key);\n }\n\n return shouldPreventDefaultUp(target);\n}\n\n/**\n * Whether to prevent default on pointer up for this element.\n */\nexport function shouldPreventDefaultUp(target: Element): boolean {\n const tagName = target.tagName.toLowerCase();\n\n // Never prevent default on form elements\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") {\n return false;\n }\n\n // Don't prevent default on links\n if (tagName === \"a\" || target.getAttribute(\"role\") === \"link\") {\n return false;\n }\n\n // Buttons with submit/reset type should not prevent default\n if (tagName === \"button\") {\n const type = (target as HTMLButtonElement).type;\n if (type === \"submit\" || type === \"reset\") {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Opens a link, supporting both same-window and new-window navigation.\n * Used for keyboard activation of links with Space key (which doesn't natively open links).\n */\nexport function openLink(target: HTMLAnchorElement, event: Event, allowOpener = false): void {\n const { href, target: linkTarget, rel } = target;\n (openLink as { isOpening?: boolean }).isOpening = true;\n\n // Handle modifier keys for open-in-new-tab behavior\n const keyEvent = event as KeyboardEvent;\n const shouldOpenInNewTab =\n linkTarget === \"_blank\" ||\n keyEvent?.metaKey ||\n keyEvent?.ctrlKey ||\n keyEvent?.shiftKey ||\n keyEvent?.altKey;\n\n if (shouldOpenInNewTab) {\n const features = !allowOpener && rel?.includes(\"noopener\") ? \"noopener\" : undefined;\n window.open(href, linkTarget || \"_blank\", features);\n } else {\n window.location.href = href;\n }\n\n (openLink as { isOpening?: boolean }).isOpening = false;\n}\n\n(openLink as { isOpening?: boolean }).isOpening = false;\n\n/**\n * Checks if an element is scrollable based on its overflow style.\n * @param node - The element to check\n * @param checkForOverflow - If true, also check if the element actually overflows\n */\nexport function isScrollable(node: Element | null, checkForOverflow?: boolean): boolean {\n if (!node) {\n return false;\n }\n\n const style = window.getComputedStyle(node);\n const scrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n\n if (scrollable && checkForOverflow) {\n return node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;\n }\n\n return scrollable;\n}\n\n/**\n * Gets the nearest scrollable parent element.\n * @param node - The starting element\n * @param checkForOverflow - If true, only return parents that actually overflow\n */\nexport function getScrollParent(node: Element, checkForOverflow?: boolean): Element {\n let scrollableNode: Element | null = node;\n\n if (isScrollable(scrollableNode, checkForOverflow)) {\n scrollableNode = scrollableNode.parentElement;\n }\n\n while (scrollableNode && !isScrollable(scrollableNode, checkForOverflow)) {\n scrollableNode = scrollableNode.parentElement;\n }\n\n return scrollableNode || document.scrollingElement || document.documentElement;\n}\n\n/**\n * Gets every scrollable ancestor of an element, from the nearest up to (and\n * including) the document scrolling element.\n * @param node - The starting element\n * @param checkForOverflow - If true, only include parents that actually overflow\n */\nexport function getScrollParents(node: Element, checkForOverflow?: boolean): Element[] {\n const parentElements: Element[] = [];\n const root = document.scrollingElement || document.documentElement;\n let current: Element | null = node;\n\n while (current) {\n if (isScrollable(current, checkForOverflow)) {\n parentElements.push(current);\n }\n if (current === root) {\n break;\n }\n current = current.parentElement;\n }\n\n return parentElements;\n}\n\n/**\n * Checks if an element will open a virtual keyboard when focused.\n * Used for iOS Safari scroll handling.\n */\nexport function willOpenKeyboard(target: Element | null): boolean {\n if (!target) {\n return false;\n }\n\n const tagName = target.tagName.toLowerCase();\n\n // Inputs that open keyboard (not all input types do)\n if (tagName === \"input\") {\n const type = (target as HTMLInputElement).type.toLowerCase();\n // These input types open the keyboard\n const keyboardTypes = [\n \"text\",\n \"search\",\n \"url\",\n \"tel\",\n \"email\",\n \"password\",\n \"date\",\n \"month\",\n \"week\",\n \"time\",\n \"datetime-local\",\n \"number\",\n ];\n return keyboardTypes.includes(type);\n }\n\n // Textareas always open keyboard\n if (tagName === \"textarea\") {\n return true;\n }\n\n // Contenteditable elements open keyboard\n if (\n target.hasAttribute(\"contenteditable\") &&\n target.getAttribute(\"contenteditable\") !== \"false\"\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns the deepest active element, descending through open shadow roots.\n * Mirrors @react-aria/utils' `getActiveElement`.\n */\nexport function getActiveElement(doc: Document = document): Element | null {\n let activeElement = doc.activeElement;\n while (activeElement?.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n}\n\n/**\n * Whether the (deepest) active element is `element` or is contained within it.\n * Mirrors @react-aria/utils' `isFocusWithin`.\n */\nexport function isFocusWithin(element: Element): boolean {\n const activeElement = getActiveElement(getOwnerDocument(element));\n return !!activeElement && nodeContains(element, activeElement);\n}\n\n/**\n * Creates a `TreeWalker` that visits the focusable (or, when `tabbable`, the\n * tabbable) descendants of `root`, skipping invisible and inert elements.\n * Mirrors @react-aria/focus's `getFocusableTreeWalker`, minus the focus-scope\n * containment filter (we don't model nested scopes here). Used to treat a\n * selectable collection as a single tab stop.\n */\nexport function getFocusableTreeWalker(\n root: Element,\n opts?: { tabbable?: boolean; from?: Node; accept?: (node: Element) => boolean },\n): TreeWalker {\n const accept = (node: Element) =>\n (opts?.tabbable ? isTabbable(node) : isFocusable(node)) && (!opts?.accept || opts.accept(node));\n const walker = getOwnerDocument(root).createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node) {\n // Skip nodes inside the optional starting node.\n if (opts?.from?.contains(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n if (accept(node as Element)) {\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n },\n });\n if (opts?.from) {\n walker.currentNode = opts.from;\n }\n return walker;\n}\n","/**\n * Focus management utilities.\n * Based on @react-aria/utils focus utilities.\n */\n\nimport { getEventTarget, getOwnerDocument, getOwnerWindow, isFocusable } from \"./dom\";\n\n/**\n * Focuses an element without scrolling the page.\n * Uses preventScroll option with fallback for older browsers.\n */\nexport function focusWithoutScrolling(element: HTMLElement | null): void {\n if (!element) return;\n\n try {\n element.focus({ preventScroll: true });\n } catch {\n // Fallback for browsers that don't support preventScroll\n const scrollableElements = getScrollableAncestors(element);\n const scrollPositions = scrollableElements.map((el) => ({\n element: el,\n scrollTop: el.scrollTop,\n scrollLeft: el.scrollLeft,\n }));\n\n element.focus();\n\n for (const { element: el, scrollTop, scrollLeft } of scrollPositions) {\n el.scrollTop = scrollTop;\n el.scrollLeft = scrollLeft;\n }\n }\n}\n\n/**\n * Gets all scrollable ancestors of an element.\n */\nfunction getScrollableAncestors(element: Element): Element[] {\n const ancestors: Element[] = [];\n let parent = element.parentElement;\n\n while (parent) {\n const style = getComputedStyle(parent);\n const overflowY = style.overflowY;\n const overflowX = style.overflowX;\n\n if (\n overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowX === \"auto\" ||\n overflowX === \"scroll\"\n ) {\n ancestors.push(parent);\n }\n\n parent = parent.parentElement;\n }\n\n // Also include the document scrolling element\n const doc = getOwnerDocument(element);\n ancestors.push(doc.documentElement);\n\n return ancestors;\n}\n\n/**\n * Prevents focus from moving to a new element temporarily.\n * Used when clicking on a button that shouldn't steal focus.\n */\nexport function preventFocus(target: Element | null): (() => void) | undefined {\n while (target && !isFocusable(target)) {\n target = target.parentElement;\n }\n\n const ownerWindow = getOwnerWindow(target);\n const activeElement = ownerWindow.document.activeElement as HTMLElement | null;\n\n if (!activeElement || activeElement === target) {\n return undefined;\n }\n\n let isRefocusing = false;\n\n const onBlur = (event: FocusEvent) => {\n if (getEventTarget(event) === activeElement || isRefocusing) {\n event.stopImmediatePropagation();\n }\n };\n\n const onFocusOut = (event: FocusEvent) => {\n if (getEventTarget(event) === activeElement || isRefocusing) {\n event.stopImmediatePropagation();\n\n if (!target && !isRefocusing) {\n isRefocusing = true;\n focusWithoutScrolling(activeElement);\n cleanup();\n }\n }\n };\n\n const onFocus = (event: FocusEvent) => {\n if (getEventTarget(event) === target || isRefocusing) {\n event.stopImmediatePropagation();\n }\n };\n\n const onFocusIn = (event: FocusEvent) => {\n if (getEventTarget(event) === target || isRefocusing) {\n event.stopImmediatePropagation();\n\n if (!isRefocusing) {\n isRefocusing = true;\n focusWithoutScrolling(activeElement);\n cleanup();\n }\n }\n };\n\n ownerWindow.addEventListener(\"blur\", onBlur, true);\n ownerWindow.addEventListener(\"focusout\", onFocusOut, true);\n ownerWindow.addEventListener(\"focusin\", onFocusIn, true);\n ownerWindow.addEventListener(\"focus\", onFocus, true);\n\n const raf = ownerWindow.requestAnimationFrame(cleanup);\n\n function cleanup() {\n ownerWindow.cancelAnimationFrame(raf);\n ownerWindow.removeEventListener(\"blur\", onBlur, true);\n ownerWindow.removeEventListener(\"focusout\", onFocusOut, true);\n ownerWindow.removeEventListener(\"focusin\", onFocusIn, true);\n ownerWindow.removeEventListener(\"focus\", onFocus, true);\n isRefocusing = false;\n }\n\n return cleanup;\n}\n\n/**\n * Safely focuses an element, alias for focusWithoutScrolling.\n * This matches the react-aria focusSafely function name.\n */\nexport const focusSafely = focusWithoutScrolling;\n"],"mappings":"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"}
1
+ {"version":3,"file":"focus.jsx","names":[],"sources":["../../src/focus/createFocusRestore.ts","../../src/focus/createVirtualFocus.ts","../../src/focus/createAutoFocus.ts"],"sourcesContent":["/**\n * Focus restoration utilities for solidaria\n *\n * Provides enhanced focus restoration with retry logic, cross-scope tracking,\n * and safe restoration patterns.\n *\n * This is a local Solid helper. The pinned React Aria revision has no\n * standalone retrying focus-restore stack API.\n */\n\nimport { onOwnedCleanup } from \"../utils\";\nimport { onSettled } from \"solid-js\";\nimport { isServer } from \"@solidjs/web\";\nimport { focusSafely } from \"../utils/focus\";\n\nexport interface FocusRestoreOptions {\n /**\n * Whether to restore focus when the component unmounts.\n * @default true\n */\n restoreOnUnmount?: boolean;\n /**\n * Maximum number of retries if the element is not in the DOM.\n * @default 3\n */\n maxRetries?: number;\n /**\n * Delay between retries in milliseconds.\n * @default 50\n */\n retryDelay?: number;\n /**\n * Callback when focus is successfully restored.\n */\n onRestore?: (element: HTMLElement) => void;\n /**\n * Callback when focus restoration fails.\n */\n onRestoreFailed?: () => void;\n /**\n * Whether to prevent scrolling when restoring focus.\n * @default true\n */\n preventScroll?: boolean;\n}\n\nexport interface FocusRestoreResult {\n /**\n * Manually restore focus to the saved element.\n */\n restore: () => boolean;\n /**\n * Get the saved element (if any).\n */\n getSavedElement: () => HTMLElement | null;\n /**\n * Save the currently focused element.\n */\n saveCurrentFocus: () => void;\n /**\n * Clear the saved element without restoring.\n */\n clear: () => void;\n}\n\n// Stack to track focus history across scopes\nconst focusStack: HTMLElement[] = [];\n\n/**\n * Push an element onto the focus stack.\n */\nexport function pushFocusStack(element: HTMLElement): void {\n focusStack.push(element);\n}\n\n/**\n * Pop the last element from the focus stack.\n */\nexport function popFocusStack(): HTMLElement | undefined {\n return focusStack.pop();\n}\n\n/**\n * Get the current focus stack length.\n */\nexport function getFocusStackLength(): number {\n return focusStack.length;\n}\n\n/**\n * Clear the entire focus stack.\n */\nexport function clearFocusStack(): void {\n focusStack.length = 0;\n}\n\n/**\n * Gets the active element, accounting for shadow DOM.\n */\nfunction getActiveElement(doc: Document): HTMLElement | null {\n let activeElement = doc.activeElement as HTMLElement | null;\n while (activeElement?.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement as HTMLElement;\n }\n return activeElement;\n}\n\n/**\n * Checks if an element is still valid for focus restoration.\n */\nfunction isValidForRestore(element: HTMLElement | null): boolean {\n if (!element) return false;\n if (!document.body.contains(element)) return false;\n if (element.hasAttribute(\"disabled\")) return false;\n if (element.getAttribute(\"aria-disabled\") === \"true\") return false;\n if (element.getAttribute(\"aria-hidden\") === \"true\") return false;\n return true;\n}\n\n/**\n * Attempts to restore focus with retries.\n */\nfunction tryRestoreFocus(\n element: HTMLElement | null,\n options: Required<\n Pick<\n FocusRestoreOptions,\n \"maxRetries\" | \"retryDelay\" | \"preventScroll\" | \"onRestore\" | \"onRestoreFailed\"\n >\n >,\n): void {\n const { maxRetries, retryDelay, preventScroll, onRestore, onRestoreFailed } = options;\n let attempts = 0;\n\n const attempt = () => {\n if (!element) {\n onRestoreFailed?.();\n return;\n }\n\n if (isValidForRestore(element)) {\n if (preventScroll) {\n focusSafely(element);\n } else {\n element.focus();\n }\n onRestore?.(element);\n return;\n }\n\n attempts++;\n if (attempts < maxRetries) {\n setTimeout(attempt, retryDelay);\n } else {\n onRestoreFailed?.();\n }\n };\n\n // Use requestAnimationFrame for the first attempt to ensure DOM is ready\n requestAnimationFrame(attempt);\n}\n\n/**\n * Creates a focus restoration manager.\n *\n * This hook saves the currently focused element when mounted and provides\n * methods to restore focus later, with retry logic for reliability.\n *\n * @example\n * ```tsx\n * function Modal(props) {\n * const focusRestore = createFocusRestore({\n * restoreOnUnmount: true,\n * onRestore: () => console.log('Focus restored'),\n * });\n *\n * return (\n * <div role=\"dialog\">\n * {props.children}\n * <button onClick={() => focusRestore.restore()}>\n * Close\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Manual focus management\n * function Dropdown() {\n * const focusRestore = createFocusRestore({ restoreOnUnmount: false });\n *\n * const onOpen = () => {\n * focusRestore.saveCurrentFocus();\n * // Focus dropdown content\n * };\n *\n * const onClose = () => {\n * focusRestore.restore();\n * };\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function createFocusRestore(options: FocusRestoreOptions = {}): FocusRestoreResult {\n const {\n restoreOnUnmount = true,\n maxRetries = 3,\n retryDelay = 50,\n onRestore,\n onRestoreFailed,\n preventScroll = true,\n } = options;\n\n let savedElement: HTMLElement | null = null;\n\n // Reserve the lifecycle owner on SSR too. Keep the existing client timing:\n // capture settled focus before another component's queued autofocus runs.\n onSettled(() => {\n saveCurrentFocus();\n });\n\n // During SSR, keep the public methods inert and skip browser cleanup.\n if (isServer) {\n return {\n restore: () => false,\n getSavedElement: () => null,\n saveCurrentFocus: () => {},\n clear: () => {},\n };\n }\n\n // Restore focus on cleanup\n onOwnedCleanup(() => {\n if (restoreOnUnmount && savedElement) {\n tryRestoreFocus(savedElement, {\n maxRetries,\n retryDelay,\n preventScroll,\n onRestore: onRestore ?? (() => {}),\n onRestoreFailed: onRestoreFailed ?? (() => {}),\n });\n }\n });\n\n function saveCurrentFocus(): void {\n const doc = typeof document !== \"undefined\" ? document : null;\n if (!doc) return;\n\n const active = getActiveElement(doc);\n if (active && active !== doc.body) {\n savedElement = active;\n pushFocusStack(active);\n }\n }\n\n function restore(): boolean {\n if (!savedElement) return false;\n\n if (isValidForRestore(savedElement)) {\n if (preventScroll) {\n focusSafely(savedElement);\n } else {\n savedElement.focus();\n }\n onRestore?.(savedElement);\n return true;\n }\n\n // Try the focus stack\n while (focusStack.length > 0) {\n const stackElement = popFocusStack();\n if (stackElement && isValidForRestore(stackElement)) {\n if (preventScroll) {\n focusSafely(stackElement);\n } else {\n stackElement.focus();\n }\n onRestore?.(stackElement);\n return true;\n }\n }\n\n onRestoreFailed?.();\n return false;\n }\n\n function getSavedElement(): HTMLElement | null {\n return savedElement;\n }\n\n function clear(): void {\n savedElement = null;\n }\n\n return {\n restore,\n getSavedElement,\n saveCurrentFocus,\n clear,\n };\n}\n","/**\n * Virtual focus management for solidaria\n *\n * Provides virtual focus for large collections where tracking DOM focus\n * on every item is impractical. Instead, a single element receives real\n * focus while aria-activedescendant indicates the virtually focused item.\n *\n * This is commonly used in:\n * - Virtualized lists (where not all items are in the DOM)\n * - Large trees\n * - Autocomplete/combobox suggestions\n * - Grid/table navigation\n *\n * This is a local Solid helper. The pinned React Aria revision has no\n * standalone virtual-focus controller with this API.\n */\n\nimport { createSignal, getObserver } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport { isServer } from \"@solidjs/web\";\n\nexport interface VirtualFocusOptions<T> {\n /**\n * The items in the collection.\n */\n items: Accessor<T[]>;\n /**\n * Function to get a unique key for each item.\n */\n getKey: (item: T) => string;\n /**\n * Function to check if an item is disabled.\n */\n isDisabled?: (item: T) => boolean;\n /**\n * Initial focused key.\n */\n defaultFocusedKey?: string;\n /**\n * Controlled focused key.\n */\n focusedKey?: Accessor<string | null>;\n /**\n * Callback when focused key changes.\n */\n onFocusChange?: (key: string | null) => void;\n /**\n * Whether to wrap focus at the edges.\n * @default true\n */\n wrap?: boolean;\n /**\n * Whether to loop through disabled items.\n * @default false\n */\n skipDisabled?: boolean;\n /**\n * Orientation for keyboard navigation.\n * @default 'vertical'\n */\n orientation?: \"horizontal\" | \"vertical\" | \"both\";\n}\n\nexport interface VirtualFocusResult<T> {\n /**\n * The currently focused key.\n */\n focusedKey: Accessor<string | null>;\n /**\n * The currently focused item (if any).\n */\n focusedItem: Accessor<T | null>;\n /**\n * Set the focused key.\n */\n setFocusedKey: (key: string | null) => void;\n /**\n * Move focus to the next item.\n */\n focusNext: () => void;\n /**\n * Move focus to the previous item.\n */\n focusPrevious: () => void;\n /**\n * Move focus to the first item.\n */\n focusFirst: () => void;\n /**\n * Move focus to the last item.\n */\n focusLast: () => void;\n /**\n * Move focus by a page (for large lists).\n */\n focusPageDown: (pageSize?: number) => void;\n /**\n * Move focus up by a page (for large lists).\n */\n focusPageUp: (pageSize?: number) => void;\n /**\n * Check if a key is the currently focused key.\n */\n isFocused: (key: string) => boolean;\n /**\n * Props to spread on the container element.\n */\n containerProps: {\n \"aria-activedescendant\": Accessor<string | undefined>;\n onKeyDown: (e: KeyboardEvent) => void;\n };\n /**\n * Get props for an item element.\n */\n getItemProps: (key: string) => {\n id: string;\n \"aria-selected\"?: boolean;\n };\n}\n\nconst DEFAULT_PAGE_SIZE = 10;\n\n/**\n * Creates virtual focus management for a collection.\n *\n * Virtual focus uses aria-activedescendant to indicate which item is\n * \"focused\" while keeping real DOM focus on a container element. This\n * is more performant for large collections and required for virtualized\n * lists where items may not be in the DOM.\n *\n * @example\n * ```tsx\n * function Listbox(props) {\n * const virtualFocus = createVirtualFocus({\n * items: () => props.items,\n * getKey: (item) => item.id,\n * isDisabled: (item) => item.disabled,\n * });\n *\n * return (\n * <ul\n * role=\"listbox\"\n * tabIndex={0}\n * aria-activedescendant={virtualFocus.containerProps['aria-activedescendant']()}\n * onKeyDown={virtualFocus.containerProps.onKeyDown}\n * >\n * <For each={props.items}>\n * {(item) => (\n * <li\n * {...virtualFocus.getItemProps(item.id)}\n * role=\"option\"\n * aria-selected={virtualFocus.isFocused(item.id)}\n * >\n * {item.name}\n * </li>\n * )}\n * </For>\n * </ul>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With controlled focus\n * function ControlledListbox() {\n * const [focusedKey, setFocusedKey] = createSignal<string | null>(null);\n *\n * const virtualFocus = createVirtualFocus({\n * items: () => items,\n * getKey: (item) => item.id,\n * focusedKey: focusedKey,\n * onFocusChange: setFocusedKey,\n * });\n *\n * return <ul>...</ul>;\n * }\n * ```\n */\nexport function createVirtualFocus<T>(options: VirtualFocusOptions<T>): VirtualFocusResult<T> {\n const {\n items,\n getKey,\n isDisabled = () => false,\n defaultFocusedKey,\n focusedKey: controlledFocusedKey,\n onFocusChange,\n wrap = true,\n skipDisabled = true,\n orientation = \"vertical\",\n } = options;\n\n // During SSR, return minimal implementation\n if (isServer) {\n const emptyAccessor = () => null;\n return {\n focusedKey: emptyAccessor,\n focusedItem: emptyAccessor,\n setFocusedKey: () => {},\n focusNext: () => {},\n focusPrevious: () => {},\n focusFirst: () => {},\n focusLast: () => {},\n focusPageDown: () => {},\n focusPageUp: () => {},\n isFocused: () => false,\n containerProps: {\n \"aria-activedescendant\": () => undefined,\n onKeyDown: () => {},\n },\n getItemProps: (key: string) => ({ id: `item-${key}` }),\n };\n }\n\n // Internal state for uncontrolled mode. Live mirror so focusNext/focusPrevious\n // then focusedKey() in the same turn (tests, keyboard handlers) sees the write.\n let liveKey: string | null = defaultFocusedKey ?? null;\n const [internalKey, setInternalKeySignal] = createSignal<string | null>(liveKey, {\n ownedWrite: true,\n });\n const internalKeyRead = (() => {\n if (getObserver()) internalKey();\n return liveKey;\n }) as typeof internalKey;\n const setInternalKey = (key: string | null) => {\n liveKey = key;\n setInternalKeySignal(key);\n };\n\n // Use controlled or uncontrolled value\n const focusedKey = controlledFocusedKey ?? internalKeyRead;\n\n const setFocusedKey = (key: string | null) => {\n if (controlledFocusedKey) {\n onFocusChange?.(key);\n } else {\n setInternalKey(key);\n onFocusChange?.(key);\n }\n };\n\n // Get focused item\n const focusedItem = (): T | null => {\n const key = focusedKey();\n if (!key) return null;\n return items().find((item) => getKey(item) === key) ?? null;\n };\n\n // Get valid items (not disabled if skipDisabled is true)\n const getValidItems = (): T[] => {\n if (!skipDisabled) return items();\n return items().filter((item) => !isDisabled(item));\n };\n\n // Get index of key in valid items\n const getKeyIndex = (key: string | null): number => {\n if (!key) return -1;\n const validItems = getValidItems();\n return validItems.findIndex((item) => getKey(item) === key);\n };\n\n // Focus by index\n const focusByIndex = (index: number): void => {\n const validItems = getValidItems();\n if (validItems.length === 0) return;\n\n let targetIndex = index;\n\n if (wrap) {\n targetIndex = ((index % validItems.length) + validItems.length) % validItems.length;\n } else {\n targetIndex = Math.max(0, Math.min(index, validItems.length - 1));\n }\n\n const item = validItems[targetIndex];\n if (item) {\n setFocusedKey(getKey(item));\n }\n };\n\n const focusNext = (): void => {\n const currentIndex = getKeyIndex(focusedKey());\n focusByIndex(currentIndex + 1);\n };\n\n const focusPrevious = (): void => {\n const currentIndex = getKeyIndex(focusedKey());\n if (currentIndex === -1) {\n focusByIndex(getValidItems().length - 1);\n } else {\n focusByIndex(currentIndex - 1);\n }\n };\n\n const focusFirst = (): void => {\n focusByIndex(0);\n };\n\n const focusLast = (): void => {\n focusByIndex(getValidItems().length - 1);\n };\n\n const focusPageDown = (pageSize: number = DEFAULT_PAGE_SIZE): void => {\n const currentIndex = getKeyIndex(focusedKey());\n focusByIndex(currentIndex + pageSize);\n };\n\n const focusPageUp = (pageSize: number = DEFAULT_PAGE_SIZE): void => {\n const currentIndex = getKeyIndex(focusedKey());\n if (currentIndex === -1) {\n focusByIndex(getValidItems().length - 1);\n } else {\n focusByIndex(currentIndex - pageSize);\n }\n };\n\n const isFocused = (key: string): boolean => {\n return focusedKey() === key;\n };\n\n // Keyboard handler\n const onKeyDown = (e: KeyboardEvent): void => {\n const isVertical = orientation === \"vertical\" || orientation === \"both\";\n const isHorizontal = orientation === \"horizontal\" || orientation === \"both\";\n\n switch (e.key) {\n case \"ArrowDown\":\n if (isVertical) {\n e.preventDefault();\n focusNext();\n }\n break;\n case \"ArrowUp\":\n if (isVertical) {\n e.preventDefault();\n focusPrevious();\n }\n break;\n case \"ArrowRight\":\n if (isHorizontal) {\n e.preventDefault();\n focusNext();\n }\n break;\n case \"ArrowLeft\":\n if (isHorizontal) {\n e.preventDefault();\n focusPrevious();\n }\n break;\n case \"Home\":\n e.preventDefault();\n focusFirst();\n break;\n case \"End\":\n e.preventDefault();\n focusLast();\n break;\n case \"PageDown\":\n e.preventDefault();\n focusPageDown();\n break;\n case \"PageUp\":\n e.preventDefault();\n focusPageUp();\n break;\n }\n };\n\n const containerProps = {\n \"aria-activedescendant\": () => {\n const key = focusedKey();\n return key ? `item-${key}` : undefined;\n },\n onKeyDown,\n };\n\n const getItemProps = (key: string) => ({\n id: `item-${key}`,\n });\n\n return {\n focusedKey,\n focusedItem,\n setFocusedKey,\n focusNext,\n focusPrevious,\n focusFirst,\n focusLast,\n focusPageDown,\n focusPageUp,\n isFocused,\n containerProps,\n getItemProps,\n };\n}\n","/**\n * Auto-focus management for solidaria\n *\n * Provides priority-based auto-focus with deferred execution\n * and conflict resolution for multiple auto-focus elements.\n *\n * This is a local Solid helper. The pinned React Aria revision has no\n * priority-based auto-focus queue API.\n */\n\nimport { onOwnedCleanup } from \"../utils/owner\";\nimport { onSettled } from \"solid-js\";\nimport { isServer } from \"@solidjs/web\";\nimport { focusSafely } from \"../utils/focus\";\n\nexport interface AutoFocusOptions {\n /**\n * Whether auto-focus is enabled.\n * @default true\n */\n isEnabled?: boolean;\n /**\n * Priority level (higher = more important).\n * When multiple elements request auto-focus, the highest priority wins.\n * @default 0\n */\n priority?: number;\n /**\n * Delay in milliseconds before focusing.\n * Useful for animations or transitions.\n * @default 0\n */\n delay?: number;\n /**\n * Whether to focus even if another element is already focused.\n * @default false\n */\n force?: boolean;\n /**\n * Whether to prevent scrolling when focusing.\n * @default true\n */\n preventScroll?: boolean;\n /**\n * Callback when focus is applied.\n */\n onFocus?: (element: HTMLElement) => void;\n /**\n * Callback when focus is skipped (due to lower priority or other reasons).\n */\n onSkip?: () => void;\n}\n\nexport interface AutoFocusResult {\n /**\n * Manually trigger the auto-focus.\n */\n focus: () => void;\n /**\n * Cancel any pending auto-focus.\n */\n cancel: () => void;\n}\n\ninterface QueuedFocus {\n ref: () => HTMLElement | null | undefined;\n priority: number;\n delay: number;\n force: boolean;\n preventScroll: boolean;\n onFocus?: (element: HTMLElement) => void;\n onSkip?: () => void;\n timeout?: ReturnType<typeof setTimeout>;\n}\n\n// Global queue for managing auto-focus requests\nlet autoFocusQueue: QueuedFocus[] = [];\n// Requests remain owned after dequeue until their delayed work finishes.\nconst pendingAutoFocus = new Set<QueuedFocus>();\nlet processingTimeout: ReturnType<typeof setTimeout> | null = null;\n\n/**\n * Process the auto-focus queue and focus the highest priority element.\n */\nfunction processAutoFocusQueue(): void {\n if (processingTimeout !== null) {\n clearTimeout(processingTimeout);\n processingTimeout = null;\n }\n\n if (autoFocusQueue.length === 0) return;\n\n // Sort by priority (highest first)\n autoFocusQueue.sort((a, b) => b.priority - a.priority);\n\n // Get the highest priority item\n const winner = autoFocusQueue[0];\n const losers = autoFocusQueue.slice(1);\n\n // Clear the queue\n autoFocusQueue = [];\n\n try {\n // Callbacks can cancel another request, dispose its owner, or clear all.\n for (const loser of losers) {\n if (!pendingAutoFocus.has(loser)) continue;\n removeRequest(loser);\n loser.onSkip?.();\n }\n\n if (!pendingAutoFocus.has(winner)) return;\n const element = winner.ref();\n if (!pendingAutoFocus.has(winner)) return;\n if (!element) {\n removeRequest(winner);\n winner.onSkip?.();\n return;\n }\n\n const activeElement = document.activeElement;\n const shouldFocus =\n winner.force ||\n !activeElement ||\n activeElement === document.body ||\n activeElement === document.documentElement;\n\n if (!shouldFocus) {\n removeRequest(winner);\n winner.onSkip?.();\n return;\n }\n\n if (winner.delay > 0) {\n winner.timeout = setTimeout(() => {\n if (!pendingAutoFocus.has(winner)) return;\n try {\n const el = winner.ref();\n if (!pendingAutoFocus.has(winner)) return;\n removeRequest(winner);\n if (el && document.body.contains(el)) {\n if (winner.preventScroll) {\n focusSafely(el);\n } else {\n el.focus();\n }\n winner.onFocus?.(el);\n }\n } finally {\n removeRequest(winner);\n }\n }, winner.delay);\n } else {\n removeRequest(winner);\n if (winner.preventScroll) {\n focusSafely(element);\n } else {\n element.focus();\n }\n winner.onFocus?.(element);\n }\n } catch (error) {\n // Do not retain a detached batch if a consumer callback throws. Requests\n // queued reentrantly belong to their next batch and remain independent.\n for (const item of [winner, ...losers]) removeRequest(item);\n throw error;\n }\n}\n\n/**\n * Queue an element for auto-focus.\n */\nfunction queueAutoFocus(item: QueuedFocus): void {\n pendingAutoFocus.add(item);\n autoFocusQueue.push(item);\n\n // Schedule processing on next frame to allow all components to register\n if (processingTimeout === null) {\n processingTimeout = setTimeout(processAutoFocusQueue, 0);\n }\n}\n\n/**\n * Cancel this request in the queue, processing batch, or delayed phase.\n */\nfunction removeRequest(item: QueuedFocus): void {\n pendingAutoFocus.delete(item);\n autoFocusQueue = autoFocusQueue.filter((queued) => queued !== item);\n if (item.timeout !== undefined) {\n clearTimeout(item.timeout);\n item.timeout = undefined;\n }\n}\n\n/**\n * Creates auto-focus behavior for an element.\n *\n * This hook registers the element for auto-focus when mounted. If multiple\n * elements request auto-focus, the one with the highest priority wins.\n *\n * @param ref - Accessor for the element to focus\n * @param options - Auto-focus options\n *\n * @example\n * ```tsx\n * function Dialog(props) {\n * let contentRef: HTMLDivElement | undefined;\n *\n * createAutoFocus(() => contentRef, {\n * priority: 10, // High priority for dialogs\n * onFocus: () => console.log('Dialog focused'),\n * });\n *\n * return (\n * <div ref={contentRef} tabIndex={-1}>\n * {props.children}\n * </div>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With delay for animations\n * function AnimatedPanel() {\n * let panelRef: HTMLDivElement | undefined;\n *\n * createAutoFocus(() => panelRef, {\n * delay: 300, // Wait for animation\n * });\n *\n * return <div ref={panelRef} class=\"animated-panel\">...</div>;\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Conditional auto-focus\n * function Input(props) {\n * let inputRef: HTMLInputElement | undefined;\n *\n * createAutoFocus(() => inputRef, {\n * isEnabled: props.autoFocus,\n * });\n *\n * return <input ref={inputRef} />;\n * }\n * ```\n */\nexport function createAutoFocus(\n ref: () => HTMLElement | null | undefined,\n options: AutoFocusOptions = {},\n): AutoFocusResult {\n const {\n isEnabled = true,\n priority = 0,\n delay = 0,\n force = false,\n preventScroll = true,\n onFocus,\n onSkip,\n } = options;\n\n let canceled = false;\n const request: QueuedFocus = { ref, priority, delay, force, preventScroll, onFocus, onSkip };\n\n // Register on both sides to preserve the following owner IDs. The server\n // reserves this lifecycle slot without executing the browser callback.\n onSettled(() => {\n if (!isEnabled || canceled) return;\n\n queueAutoFocus(request);\n });\n\n // During SSR, keep the public methods inert and skip browser cleanup.\n if (isServer) {\n return {\n focus: () => {},\n cancel: () => {},\n };\n }\n\n // Stop pending automatic work even after the queue has handed it off.\n onOwnedCleanup(() => {\n canceled = true;\n removeRequest(request);\n });\n\n const focus = (): void => {\n if (canceled) return;\n\n const element = ref();\n if (!element) return;\n\n if (preventScroll) {\n focusSafely(element);\n } else {\n element.focus();\n }\n onFocus?.(element);\n };\n\n const cancel = (): void => {\n canceled = true;\n removeRequest(request);\n };\n\n return {\n focus,\n cancel,\n };\n}\n\n/**\n * Clears all pending auto-focus requests.\n * Useful for testing or when navigating away.\n */\nexport function clearAutoFocusQueue(): void {\n if (processingTimeout !== null) {\n clearTimeout(processingTimeout);\n processingTimeout = null;\n }\n for (const item of pendingAutoFocus) removeRequest(item);\n}\n\n/**\n * Gets the current auto-focus queue length.\n * Useful for debugging.\n */\nexport function getAutoFocusQueueLength(): number {\n return autoFocusQueue.length;\n}\n"],"mappings":"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"}
@@ -1,3 +1,51 @@
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/GridKeyboardDelegate.ts
13
+ /*
14
+ * Copyright 2020 Adobe. All rights reserved.
15
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License. You may obtain a copy
17
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software distributed under
20
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
21
+ * OF ANY KIND, either express or implied. See the License for the specific language
22
+ * governing permissions and limitations under the License.
23
+ */
24
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGrid.ts
25
+ /*
26
+ * Copyright 2020 Adobe. All rights reserved.
27
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
28
+ * you may not use this file except in compliance with the License. You may obtain a copy
29
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
30
+ *
31
+ * Unless required by applicable law or agreed to in writing, software distributed under
32
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
33
+ * OF ANY KIND, either express or implied. See the License for the specific language
34
+ * governing permissions and limitations under the License.
35
+ */
36
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridCell.ts
37
+ /*
38
+ * Copyright 2020 Adobe. All rights reserved.
39
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
40
+ * you may not use this file except in compliance with the License. You may obtain a copy
41
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
42
+ *
43
+ * Unless required by applicable law or agreed to in writing, software distributed under
44
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
45
+ * OF ANY KIND, either express or implied. See the License for the specific language
46
+ * governing permissions and limitations under the License.
47
+ */
48
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridRow.ts
1
49
  import { i as useLocale } from "./locale.js";
2
50
  import { createMemo, createSignal } from "solid-js";
3
51
  import { createId } from "@proyecto-viviana/solid-stately";
@@ -351,8 +399,10 @@ function createGrid(props, state, ref) {
351
399
  case " ":
352
400
  case "Enter":
353
401
  e.preventDefault();
354
- if (s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(focusedKey);
355
- else s.toggleSelection(focusedKey);
402
+ if (s.selectionMode !== "none") {
403
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(focusedKey);
404
+ else s.toggleSelection(focusedKey);
405
+ }
356
406
  return;
357
407
  default:
358
408
  if (!p.disallowTypeAhead && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
@@ -450,9 +500,11 @@ function createGridRow(props, state, _ref) {
450
500
  const p = props();
451
501
  if (isDisabled()) return;
452
502
  const onRowAction = getGridData(s)?.actions.onRowAction;
453
- if (s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(p.key);
454
- else if (e.ctrlKey || e.metaKey) s.toggleSelection(p.key);
455
- else s.replaceSelection(p.key);
503
+ if (s.selectionMode !== "none") {
504
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(p.key);
505
+ else if (e.ctrlKey || e.metaKey) s.toggleSelection(p.key);
506
+ else s.replaceSelection(p.key);
507
+ }
456
508
  if (onRowAction) onRowAction(p.key);
457
509
  if (p.onAction) p.onAction();
458
510
  };
@@ -547,9 +599,11 @@ function createGridCell(props, state, _ref) {
547
599
  if (isDisabled()) return;
548
600
  const onCellAction = getGridData(s)?.actions.onCellAction;
549
601
  const rowKey = s.collection.getItem(p.key)?.parentKey;
550
- if (rowKey != null && s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(rowKey);
551
- else if (e.ctrlKey || e.metaKey) s.toggleSelection(rowKey);
552
- else s.replaceSelection(rowKey);
602
+ if (rowKey != null && s.selectionMode !== "none") {
603
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(rowKey);
604
+ else if (e.ctrlKey || e.metaKey) s.toggleSelection(rowKey);
605
+ else s.replaceSelection(rowKey);
606
+ }
553
607
  if (onCellAction) onCellAction(p.key);
554
608
  if (p.onAction) p.onAction();
555
609
  };
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","names":[],"sources":["../../src/grid/GridKeyboardDelegate.ts","../../src/grid/createGrid.ts","../../src/grid/createGridRow.ts","../../src/grid/createGridCell.ts"],"sourcesContent":["/**\n * GridKeyboardDelegate - Handles keyboard navigation in a grid.\n * Based on @react-aria/grid/GridKeyboardDelegate.\n */\n\nimport type { GridCollection, GridNode, Key } from \"@proyecto-viviana/solid-stately\";\nimport type { KeyboardDelegate } from \"./types\";\nimport type { Accessor } from \"solid-js\";\n\nexport interface GridKeyboardDelegateOptions<T> {\n /** The grid collection. */\n collection: GridCollection<T>;\n /** Set of disabled keys. */\n disabledKeys: Set<Key>;\n /** Ref to the grid element. */\n ref: Accessor<HTMLElement | null>;\n /** Focus mode: row or cell. */\n focusMode: \"row\" | \"cell\";\n /** Text direction (ltr or rtl). */\n direction: \"ltr\" | \"rtl\";\n}\n\n/**\n * A keyboard delegate that handles navigation in a grid.\n */\nexport class GridKeyboardDelegate<T> implements KeyboardDelegate {\n private collection: GridCollection<T>;\n private disabledKeys: Set<Key>;\n private ref: Accessor<HTMLElement | null>;\n private focusMode: \"row\" | \"cell\";\n private direction: \"ltr\" | \"rtl\";\n\n constructor(options: GridKeyboardDelegateOptions<T>) {\n this.collection = options.collection;\n this.disabledKeys = options.disabledKeys;\n this.ref = options.ref;\n this.focusMode = options.focusMode;\n this.direction = options.direction;\n }\n\n /**\n * Check if a key is disabled.\n */\n private isDisabled(key: Key): boolean {\n return this.disabledKeys.has(key);\n }\n\n /**\n * Get the parent row key for a cell.\n */\n private getRowKey(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n if (item.type === \"item\") {\n return key;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n return item.parentKey;\n }\n\n return null;\n }\n\n /**\n * Get all body rows (excluding header rows).\n */\n private getBodyRows(): GridNode<T>[] {\n return this.collection.rows.filter((row) => row.type === \"item\");\n }\n\n /**\n * Get the first non-disabled key.\n */\n getFirstKey(fromKey?: Key, global?: boolean): Key | null {\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || global) {\n // Find first non-disabled row\n for (const row of rows) {\n if (!this.isDisabled(row.key)) {\n return row.key;\n }\n }\n return null;\n }\n\n // Cell focus mode - get first cell of current row or first row\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n if (rowKey != null) {\n const children = [...this.collection.getChildren(rowKey)];\n if (children.length > 0) {\n return children[0].key;\n }\n }\n }\n\n // Fall back to first cell of first row\n if (rows.length > 0) {\n const children = [...this.collection.getChildren(rows[0].key)];\n if (children.length > 0) {\n return children[0].key;\n }\n }\n\n return null;\n }\n\n /**\n * Get the last non-disabled key.\n */\n getLastKey(fromKey?: Key, global?: boolean): Key | null {\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || global) {\n // Find last non-disabled row\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n return null;\n }\n\n // Cell focus mode - get last cell of current row or last row\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n if (rowKey != null) {\n const children = [...this.collection.getChildren(rowKey)];\n if (children.length > 0) {\n return children[children.length - 1].key;\n }\n }\n }\n\n // Fall back to last cell of last row\n if (rows.length > 0) {\n const children = [...this.collection.getChildren(rows[rows.length - 1].key)];\n if (children.length > 0) {\n return children[children.length - 1].key;\n }\n }\n\n return null;\n }\n\n /**\n * Get the key above the current key.\n */\n getKeyAbove(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || item.type === \"item\") {\n // Find the row and get the previous one\n const rowKey = item.type === \"item\" ? key : item.parentKey;\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex > 0) {\n // Find previous non-disabled row\n for (let i = rowIndex - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n }\n return null;\n }\n\n // Cell focus mode - get cell in same column of previous row\n if (item.type === \"cell\" && item.parentKey != null) {\n const rowIndex = rows.findIndex((r) => r.key === item.parentKey);\n const colIndex = item.column ?? item.index;\n\n if (rowIndex > 0) {\n for (let i = rowIndex - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key below the current key.\n */\n getKeyBelow(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || item.type === \"item\") {\n // Find the row and get the next one\n const rowKey = item.type === \"item\" ? key : item.parentKey;\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex >= 0 && rowIndex < rows.length - 1) {\n // Find next non-disabled row\n for (let i = rowIndex + 1; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n }\n return null;\n }\n\n // Cell focus mode - get cell in same column of next row\n if (item.type === \"cell\" && item.parentKey != null) {\n const rowIndex = rows.findIndex((r) => r.key === item.parentKey);\n const colIndex = item.column ?? item.index;\n\n if (rowIndex >= 0 && rowIndex < rows.length - 1) {\n for (let i = rowIndex + 1; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key to the left of the current key.\n */\n getKeyLeftOf(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n // In row focus mode, left/right might not be meaningful\n if (this.focusMode === \"row\") {\n return null;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n const children = [...this.collection.getChildren(item.parentKey)];\n const colIndex = children.findIndex((c) => c.key === key);\n\n if (this.direction === \"rtl\") {\n // RTL: left moves to higher index\n if (colIndex < children.length - 1) {\n return children[colIndex + 1].key;\n }\n } else {\n // LTR: left moves to lower index\n if (colIndex > 0) {\n return children[colIndex - 1].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key to the right of the current key.\n */\n getKeyRightOf(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n // In row focus mode, left/right might not be meaningful\n if (this.focusMode === \"row\") {\n return null;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n const children = [...this.collection.getChildren(item.parentKey)];\n const colIndex = children.findIndex((c) => c.key === key);\n\n if (this.direction === \"rtl\") {\n // RTL: right moves to lower index\n if (colIndex > 0) {\n return children[colIndex - 1].key;\n }\n } else {\n // LTR: right moves to higher index\n if (colIndex < children.length - 1) {\n return children[colIndex + 1].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key for page up.\n */\n getKeyPageAbove(key: Key): Key | null {\n const el = this.ref();\n if (!el) return null;\n\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n const rowKey = this.getRowKey(key);\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex < 0) return null;\n\n // Calculate how many rows fit in a page (rough estimate)\n const rowHeight = el.scrollHeight / rows.length;\n const pageSize = Math.max(1, Math.floor(el.clientHeight / rowHeight));\n\n const targetIndex = Math.max(0, rowIndex - pageSize);\n\n // Find first non-disabled row at or before target\n for (let i = targetIndex; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n if (this.focusMode === \"row\" || item.type === \"item\") {\n return rows[i].key;\n }\n\n // Cell focus mode - return cell at same column\n const colIndex = item.type === \"cell\" ? (item.column ?? item.index) : 0;\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key for page down.\n */\n getKeyPageBelow(key: Key): Key | null {\n const el = this.ref();\n if (!el) return null;\n\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n const rowKey = this.getRowKey(key);\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex < 0) return null;\n\n // Calculate how many rows fit in a page (rough estimate)\n const rowHeight = el.scrollHeight / rows.length;\n const pageSize = Math.max(1, Math.floor(el.clientHeight / rowHeight));\n\n const targetIndex = Math.min(rows.length - 1, rowIndex + pageSize);\n\n // Find first non-disabled row at or after target\n for (let i = targetIndex; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n if (this.focusMode === \"row\" || item.type === \"item\") {\n return rows[i].key;\n }\n\n // Cell focus mode - return cell at same column\n const colIndex = item.type === \"cell\" ? (item.column ?? item.index) : 0;\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key that matches the search string.\n */\n getKeyForSearch(search: string, fromKey?: Key): Key | null {\n const searchLower = search.toLowerCase();\n const rows = this.getBodyRows();\n\n let startIndex = 0;\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n const idx = rows.findIndex((r) => r.key === rowKey);\n if (idx >= 0) {\n startIndex = idx + 1;\n }\n }\n\n // Search from startIndex to end\n for (let i = startIndex; i < rows.length; i++) {\n const row = rows[i];\n if (!this.isDisabled(row.key)) {\n const textValue = row.textValue?.toLowerCase() ?? \"\";\n if (textValue.startsWith(searchLower)) {\n return row.key;\n }\n }\n }\n\n // Wrap around and search from beginning\n for (let i = 0; i < startIndex; i++) {\n const row = rows[i];\n if (!this.isDisabled(row.key)) {\n const textValue = row.textValue?.toLowerCase() ?? \"\";\n if (textValue.startsWith(searchLower)) {\n return row.key;\n }\n }\n }\n\n return null;\n }\n}\n","/**\n * createGrid - Provides accessibility for a grid component.\n * Based on @react-aria/grid/useGrid.\n */\n\nimport { createMemo, createSignal, type Accessor } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\nimport { createId } from \"@proyecto-viviana/solid-stately\";\nimport type { GridState, GridCollection, Key } from \"@proyecto-viviana/solid-stately\";\nimport type { GridProps, GridAria, KeyboardDelegate } from \"./types\";\nimport { GridKeyboardDelegate } from \"./GridKeyboardDelegate\";\nimport { useLocale } from \"../i18n\";\n\n// Global map to store grid metadata for child components\nconst gridMap = new WeakMap<\n object,\n {\n keyboardDelegate: KeyboardDelegate;\n actions: { onRowAction?: (key: Key) => void; onCellAction?: (key: Key) => void };\n shouldSelectOnPressUp?: boolean;\n }\n>();\n\n/**\n * Get the grid metadata for child components.\n */\nexport function getGridData<T>(state: GridState<T, GridCollection<T>>) {\n return gridMap.get(state);\n}\n\n/**\n * Creates accessibility props for a grid component.\n * A grid displays data in rows and columns and enables navigation via arrow keys.\n */\nexport function createGrid<T extends object>(\n props: Accessor<GridProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n ref: Accessor<HTMLElement | null>,\n): GridAria {\n const id = createId(props().id);\n const locale = useLocale();\n\n // Track focused state\n const [_isFocused, setIsFocused] = createSignal(false);\n\n // Create keyboard delegate\n const keyboardDelegate = createMemo(() => {\n const p = props();\n const s = state();\n\n if (p.keyboardDelegate) {\n return p.keyboardDelegate;\n }\n\n return new GridKeyboardDelegate({\n collection: s.collection,\n disabledKeys: s.disabledKeys,\n ref,\n focusMode: p.focusMode ?? \"row\",\n direction: locale().direction,\n });\n });\n\n // Store metadata for child components\n const storeGridData = () => {\n const s = state();\n const p = props();\n gridMap.set(s, {\n keyboardDelegate: keyboardDelegate(),\n actions: {\n onRowAction: p.onRowAction,\n onCellAction: p.onCellAction,\n },\n shouldSelectOnPressUp: p.shouldSelectOnPressUp,\n });\n };\n\n // Update grid data whenever state changes\n createMemo(() => {\n storeGridData();\n });\n\n // Keyboard navigation handler\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n const delegate = keyboardDelegate();\n\n if (s.isKeyboardNavigationDisabled) {\n return;\n }\n\n const focusedKey = s.focusedKey;\n if (focusedKey == null) {\n // If nothing is focused, focus the first item\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Home\" || e.key === \"End\") {\n const firstKey = delegate.getFirstKey?.();\n if (firstKey != null) {\n e.preventDefault();\n s.setFocusedKey(firstKey);\n }\n }\n return;\n }\n\n let nextKey: Key | null = null;\n\n switch (e.key) {\n case \"ArrowDown\":\n nextKey = delegate.getKeyBelow?.(focusedKey) ?? null;\n break;\n case \"ArrowUp\":\n nextKey = delegate.getKeyAbove?.(focusedKey) ?? null;\n break;\n case \"ArrowLeft\":\n nextKey = delegate.getKeyLeftOf?.(focusedKey) ?? null;\n break;\n case \"ArrowRight\":\n nextKey = delegate.getKeyRightOf?.(focusedKey) ?? null;\n break;\n case \"Home\":\n if (e.ctrlKey) {\n nextKey = delegate.getFirstKey?.() ?? null;\n } else {\n // Go to first cell in row - for now just use first key\n nextKey = delegate.getFirstKey?.(focusedKey) ?? null;\n }\n break;\n case \"End\":\n if (e.ctrlKey) {\n nextKey = delegate.getLastKey?.() ?? null;\n } else {\n // Go to last cell in row - for now just use last key\n nextKey = delegate.getLastKey?.(focusedKey) ?? null;\n }\n break;\n case \"PageDown\":\n nextKey = delegate.getKeyPageBelow?.(focusedKey) ?? null;\n break;\n case \"PageUp\":\n nextKey = delegate.getKeyPageAbove?.(focusedKey) ?? null;\n break;\n case \"Escape\":\n if (p.escapeKeyBehavior !== \"none\") {\n s.clearSelection();\n }\n return;\n case \"a\":\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n if (s.selectionMode === \"multiple\") {\n s.selectAll();\n }\n }\n return;\n case \" \":\n case \"Enter\":\n e.preventDefault();\n // Toggle selection or trigger action\n if (s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(focusedKey);\n } else {\n s.toggleSelection(focusedKey);\n }\n }\n return;\n default:\n // Type to select\n if (!p.disallowTypeAhead && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n const key = delegate.getKeyForSearch?.(e.key, focusedKey);\n if (key != null) {\n e.preventDefault();\n s.setFocusedKey(key);\n }\n }\n return;\n }\n\n if (nextKey != null) {\n e.preventDefault();\n s.setFocusedKey(nextKey);\n\n // Handle shift+arrow for range selection\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(nextKey);\n }\n }\n };\n\n // Focus handling\n const onFocus = (e: FocusEvent) => {\n const s = state();\n const el = ref();\n\n if (!el?.contains(e.target as Element)) {\n return;\n }\n\n if (!s.isFocused) {\n s.setFocused(true);\n setIsFocused(true);\n\n // If no key is focused, focus the first one\n if (s.focusedKey == null) {\n const firstKey = keyboardDelegate().getFirstKey?.();\n if (firstKey != null) {\n s.setFocusedKey(firstKey);\n }\n }\n }\n };\n\n const onBlur = (e: FocusEvent) => {\n const s = state();\n const el = ref();\n\n // Only blur if focus is leaving the grid entirely\n if (el && !el.contains(e.relatedTarget as Element)) {\n s.setFocused(false);\n setIsFocused(false);\n }\n };\n\n // Warn if no label is provided\n createMemo(() => {\n const p = props();\n if (!p[\"aria-label\"] && !p[\"aria-labelledby\"]) {\n console.warn(\"Grid: An aria-label or aria-labelledby prop is required for accessibility.\");\n }\n });\n\n const gridProps = createMemo(() => {\n const p = props();\n const s = state();\n\n const baseProps: Record<string, unknown> = {\n role: \"grid\",\n id,\n \"aria-label\": p[\"aria-label\"],\n \"aria-labelledby\": p[\"aria-labelledby\"],\n \"aria-describedby\": p[\"aria-describedby\"],\n \"aria-multiselectable\": s.selectionMode === \"multiple\" ? \"true\" : undefined,\n tabIndex: s.collection.size === 0 ? 0 : -1,\n onKeyDown,\n onFocus,\n onBlur,\n };\n\n if (p.isVirtualized) {\n baseProps[\"aria-rowcount\"] = s.collection.rowCount;\n baseProps[\"aria-colcount\"] = s.collection.columnCount;\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get gridProps() {\n return gridProps();\n },\n };\n}\n","/**\n * createGridRow - Provides accessibility for a grid row.\n * Based on @react-aria/grid/useGridRow.\n */\n\nimport { createMemo, createSignal, type Accessor } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\nimport type { GridState, GridCollection } from \"@proyecto-viviana/solid-stately\";\nimport type { GridRowProps, GridRowAria } from \"./types\";\nimport { getGridData } from \"./createGrid\";\n\n/**\n * Creates accessibility props for a grid row.\n */\nexport function createGridRow<T extends object>(\n props: Accessor<GridRowProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n _ref: Accessor<HTMLElement | null>,\n): GridRowAria {\n const [isPressed, setIsPressed] = createSignal(false);\n\n const isSelected = createMemo(() => {\n const s = state();\n const p = props();\n return s.isSelected(p.key);\n });\n\n const isDisabled = createMemo(() => {\n const s = state();\n const p = props();\n return s.isDisabled(p.key);\n });\n\n const isFocused = createMemo(() => {\n const s = state();\n const p = props();\n return s.focusedKey === p.key;\n });\n\n // Handle click/press for selection\n const onClick = (e: MouseEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onRowAction = gridData?.actions.onRowAction;\n\n // Handle selection\n if (s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(p.key);\n } else if (e.ctrlKey || e.metaKey) {\n s.toggleSelection(p.key);\n } else {\n // Replace selection\n s.replaceSelection(p.key);\n }\n }\n\n // Call action handler\n if (onRowAction) {\n onRowAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onRowAction = gridData?.actions.onRowAction;\n\n // Handle selection\n if (s.selectionMode !== \"none\") {\n s.toggleSelection(p.key);\n }\n\n // Call action handler\n if (onRowAction) {\n onRowAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n }\n };\n\n const onFocus = () => {\n const s = state();\n const p = props();\n s.setFocusedKey(p.key);\n };\n\n const onPointerDown = () => {\n setIsPressed(true);\n };\n\n const onPointerUp = () => {\n setIsPressed(false);\n };\n\n const rowProps = createMemo(() => {\n const s = state();\n const p = props();\n\n const baseProps: Record<string, unknown> = {\n role: \"row\",\n \"aria-selected\": s.selectionMode !== \"none\" ? isSelected() : undefined,\n \"aria-disabled\": isDisabled() || undefined,\n tabIndex: isFocused() ? 0 : -1,\n onClick,\n onKeyDown,\n onFocus,\n onPointerDown,\n onPointerUp,\n };\n\n if (p.isVirtualized && p.index != null) {\n baseProps[\"aria-rowindex\"] = p.index + 1; // aria-rowindex is 1-based\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get rowProps() {\n return rowProps();\n },\n get isSelected() {\n return isSelected();\n },\n get isDisabled() {\n return isDisabled();\n },\n get isPressed() {\n return isPressed();\n },\n };\n}\n","/**\n * createGridCell - Provides accessibility for a grid cell.\n * Based on @react-aria/grid/useGridCell.\n */\n\nimport { createMemo, createSignal, type Accessor } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\nimport type { GridState, GridCollection } from \"@proyecto-viviana/solid-stately\";\nimport type { GridCellProps, GridCellAria } from \"./types\";\nimport { getGridData } from \"./createGrid\";\n\n/**\n * Creates accessibility props for a grid cell.\n */\nexport function createGridCell<T extends object>(\n props: Accessor<GridCellProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n _ref: Accessor<HTMLElement | null>,\n): GridCellAria {\n const [isPressed, setIsPressed] = createSignal(false);\n\n const isSelected = createMemo(() => {\n const s = state();\n const p = props();\n // Check if parent row is selected\n const node = s.collection.getItem(p.key);\n if (node?.parentKey != null) {\n return s.isSelected(node.parentKey);\n }\n return false;\n });\n\n const isDisabled = createMemo(() => {\n const s = state();\n const p = props();\n // Check if parent row is disabled\n const node = s.collection.getItem(p.key);\n if (node?.parentKey != null) {\n return s.isDisabled(node.parentKey);\n }\n return false;\n });\n\n const isFocused = createMemo(() => {\n const s = state();\n const p = props();\n return s.focusedKey === p.key;\n });\n\n // Handle click/press for cell actions\n const onClick = (e: MouseEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onCellAction = gridData?.actions.onCellAction;\n\n // Get parent row key for selection\n const node = s.collection.getItem(p.key);\n const rowKey = node?.parentKey;\n\n // Handle selection on parent row\n if (rowKey != null && s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(rowKey);\n } else if (e.ctrlKey || e.metaKey) {\n s.toggleSelection(rowKey);\n } else {\n // Replace selection\n s.replaceSelection(rowKey);\n }\n }\n\n // Call cell action handler\n if (onCellAction) {\n onCellAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Enter or Space triggers cell action\n if (e.key === \"Enter\" || e.key === \" \") {\n // Only handle if there's an action to trigger\n const gridData = getGridData(s);\n const onCellAction = gridData?.actions.onCellAction;\n\n if (onCellAction || p.onAction) {\n e.preventDefault();\n\n if (onCellAction) {\n onCellAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n }\n }\n };\n\n const onFocus = () => {\n const s = state();\n const p = props();\n s.setFocusedKey(p.key);\n };\n\n const onPointerDown = () => {\n setIsPressed(true);\n };\n\n const onPointerUp = () => {\n setIsPressed(false);\n };\n\n const cellProps = createMemo(() => {\n const s = state();\n const p = props();\n const node = s.collection.getItem(p.key);\n\n // Determine the role based on node type\n let role: string = \"gridcell\";\n if (node?.type === \"rowheader\") {\n role = \"rowheader\";\n } else if (node?.type === \"column\") {\n role = \"columnheader\";\n }\n\n const baseProps: Record<string, unknown> = {\n role,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-selected\": s.selectionMode !== \"none\" ? isSelected() : undefined,\n tabIndex: isFocused() ? 0 : -1,\n onClick,\n onKeyDown,\n onFocus,\n onPointerDown,\n onPointerUp,\n };\n\n // Add column index for virtualized grids\n if (p.isVirtualized && node?.column != null) {\n baseProps[\"aria-colindex\"] = node.column + 1; // aria-colindex is 1-based\n }\n\n // Add colspan if present\n if (node?.colspan != null && node.colspan > 1) {\n baseProps[\"aria-colspan\"] = node.colspan;\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get cellProps() {\n return cellProps();\n },\n get isSelected() {\n return isSelected();\n },\n get isDisabled() {\n return isDisabled();\n },\n get isPressed() {\n return isPressed();\n },\n get isFocused() {\n return isFocused();\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"grid.js","names":[],"sources":["../../src/grid/GridKeyboardDelegate.ts","../../src/grid/createGrid.ts","../../src/grid/createGridRow.ts","../../src/grid/createGridCell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/GridKeyboardDelegate.ts\n\n/**\n * GridKeyboardDelegate - Handles keyboard navigation in a grid.\n * Based on @react-aria/grid/GridKeyboardDelegate.\n */\n\nimport type { GridCollection, GridNode, Key } from \"@proyecto-viviana/solid-stately\";\nimport type { KeyboardDelegate } from \"./types\";\nimport type { Accessor } from \"solid-js\";\n\nexport interface GridKeyboardDelegateOptions<T> {\n /** The grid collection. */\n collection: GridCollection<T>;\n /** Set of disabled keys. */\n disabledKeys: Set<Key>;\n /** Ref to the grid element. */\n ref: Accessor<HTMLElement | null>;\n /** Focus mode: row or cell. */\n focusMode: \"row\" | \"cell\";\n /** Text direction (ltr or rtl). */\n direction: \"ltr\" | \"rtl\";\n}\n\n/**\n * A keyboard delegate that handles navigation in a grid.\n */\nexport class GridKeyboardDelegate<T> implements KeyboardDelegate {\n private collection: GridCollection<T>;\n private disabledKeys: Set<Key>;\n private ref: Accessor<HTMLElement | null>;\n private focusMode: \"row\" | \"cell\";\n private direction: \"ltr\" | \"rtl\";\n\n constructor(options: GridKeyboardDelegateOptions<T>) {\n this.collection = options.collection;\n this.disabledKeys = options.disabledKeys;\n this.ref = options.ref;\n this.focusMode = options.focusMode;\n this.direction = options.direction;\n }\n\n /**\n * Check if a key is disabled.\n */\n private isDisabled(key: Key): boolean {\n return this.disabledKeys.has(key);\n }\n\n /**\n * Get the parent row key for a cell.\n */\n private getRowKey(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n if (item.type === \"item\") {\n return key;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n return item.parentKey;\n }\n\n return null;\n }\n\n /**\n * Get all body rows (excluding header rows).\n */\n private getBodyRows(): GridNode<T>[] {\n return this.collection.rows.filter((row) => row.type === \"item\");\n }\n\n /**\n * Get the first non-disabled key.\n */\n getFirstKey(fromKey?: Key, global?: boolean): Key | null {\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || global) {\n // Find first non-disabled row\n for (const row of rows) {\n if (!this.isDisabled(row.key)) {\n return row.key;\n }\n }\n return null;\n }\n\n // Cell focus mode - get first cell of current row or first row\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n if (rowKey != null) {\n const children = [...this.collection.getChildren(rowKey)];\n if (children.length > 0) {\n return children[0].key;\n }\n }\n }\n\n // Fall back to first cell of first row\n if (rows.length > 0) {\n const children = [...this.collection.getChildren(rows[0].key)];\n if (children.length > 0) {\n return children[0].key;\n }\n }\n\n return null;\n }\n\n /**\n * Get the last non-disabled key.\n */\n getLastKey(fromKey?: Key, global?: boolean): Key | null {\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || global) {\n // Find last non-disabled row\n for (let i = rows.length - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n return null;\n }\n\n // Cell focus mode - get last cell of current row or last row\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n if (rowKey != null) {\n const children = [...this.collection.getChildren(rowKey)];\n if (children.length > 0) {\n return children[children.length - 1].key;\n }\n }\n }\n\n // Fall back to last cell of last row\n if (rows.length > 0) {\n const children = [...this.collection.getChildren(rows[rows.length - 1].key)];\n if (children.length > 0) {\n return children[children.length - 1].key;\n }\n }\n\n return null;\n }\n\n /**\n * Get the key above the current key.\n */\n getKeyAbove(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || item.type === \"item\") {\n // Find the row and get the previous one\n const rowKey = item.type === \"item\" ? key : item.parentKey;\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex > 0) {\n // Find previous non-disabled row\n for (let i = rowIndex - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n }\n return null;\n }\n\n // Cell focus mode - get cell in same column of previous row\n if (item.type === \"cell\" && item.parentKey != null) {\n const rowIndex = rows.findIndex((r) => r.key === item.parentKey);\n const colIndex = item.column ?? item.index;\n\n if (rowIndex > 0) {\n for (let i = rowIndex - 1; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key below the current key.\n */\n getKeyBelow(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n\n if (this.focusMode === \"row\" || item.type === \"item\") {\n // Find the row and get the next one\n const rowKey = item.type === \"item\" ? key : item.parentKey;\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex >= 0 && rowIndex < rows.length - 1) {\n // Find next non-disabled row\n for (let i = rowIndex + 1; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n return rows[i].key;\n }\n }\n }\n return null;\n }\n\n // Cell focus mode - get cell in same column of next row\n if (item.type === \"cell\" && item.parentKey != null) {\n const rowIndex = rows.findIndex((r) => r.key === item.parentKey);\n const colIndex = item.column ?? item.index;\n\n if (rowIndex >= 0 && rowIndex < rows.length - 1) {\n for (let i = rowIndex + 1; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key to the left of the current key.\n */\n getKeyLeftOf(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n // In row focus mode, left/right might not be meaningful\n if (this.focusMode === \"row\") {\n return null;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n const children = [...this.collection.getChildren(item.parentKey)];\n const colIndex = children.findIndex((c) => c.key === key);\n\n if (this.direction === \"rtl\") {\n // RTL: left moves to higher index\n if (colIndex < children.length - 1) {\n return children[colIndex + 1].key;\n }\n } else {\n // LTR: left moves to lower index\n if (colIndex > 0) {\n return children[colIndex - 1].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key to the right of the current key.\n */\n getKeyRightOf(key: Key): Key | null {\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n // In row focus mode, left/right might not be meaningful\n if (this.focusMode === \"row\") {\n return null;\n }\n\n if (item.type === \"cell\" && item.parentKey != null) {\n const children = [...this.collection.getChildren(item.parentKey)];\n const colIndex = children.findIndex((c) => c.key === key);\n\n if (this.direction === \"rtl\") {\n // RTL: right moves to lower index\n if (colIndex > 0) {\n return children[colIndex - 1].key;\n }\n } else {\n // LTR: right moves to higher index\n if (colIndex < children.length - 1) {\n return children[colIndex + 1].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key for page up.\n */\n getKeyPageAbove(key: Key): Key | null {\n const el = this.ref();\n if (!el) return null;\n\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n const rowKey = this.getRowKey(key);\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex < 0) return null;\n\n // Calculate how many rows fit in a page (rough estimate)\n const rowHeight = el.scrollHeight / rows.length;\n const pageSize = Math.max(1, Math.floor(el.clientHeight / rowHeight));\n\n const targetIndex = Math.max(0, rowIndex - pageSize);\n\n // Find first non-disabled row at or before target\n for (let i = targetIndex; i >= 0; i--) {\n if (!this.isDisabled(rows[i].key)) {\n if (this.focusMode === \"row\" || item.type === \"item\") {\n return rows[i].key;\n }\n\n // Cell focus mode - return cell at same column\n const colIndex = item.type === \"cell\" ? (item.column ?? item.index) : 0;\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key for page down.\n */\n getKeyPageBelow(key: Key): Key | null {\n const el = this.ref();\n if (!el) return null;\n\n const item = this.collection.getItem(key);\n if (!item) return null;\n\n const rows = this.getBodyRows();\n const rowKey = this.getRowKey(key);\n const rowIndex = rows.findIndex((r) => r.key === rowKey);\n\n if (rowIndex < 0) return null;\n\n // Calculate how many rows fit in a page (rough estimate)\n const rowHeight = el.scrollHeight / rows.length;\n const pageSize = Math.max(1, Math.floor(el.clientHeight / rowHeight));\n\n const targetIndex = Math.min(rows.length - 1, rowIndex + pageSize);\n\n // Find first non-disabled row at or after target\n for (let i = targetIndex; i < rows.length; i++) {\n if (!this.isDisabled(rows[i].key)) {\n if (this.focusMode === \"row\" || item.type === \"item\") {\n return rows[i].key;\n }\n\n // Cell focus mode - return cell at same column\n const colIndex = item.type === \"cell\" ? (item.column ?? item.index) : 0;\n const children = [...this.collection.getChildren(rows[i].key)];\n const targetCol = Math.min(colIndex, children.length - 1);\n if (targetCol >= 0) {\n return children[targetCol].key;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get the key that matches the search string.\n */\n getKeyForSearch(search: string, fromKey?: Key): Key | null {\n const searchLower = search.toLowerCase();\n const rows = this.getBodyRows();\n\n let startIndex = 0;\n if (fromKey != null) {\n const rowKey = this.getRowKey(fromKey);\n const idx = rows.findIndex((r) => r.key === rowKey);\n if (idx >= 0) {\n startIndex = idx + 1;\n }\n }\n\n // Search from startIndex to end\n for (let i = startIndex; i < rows.length; i++) {\n const row = rows[i];\n if (!this.isDisabled(row.key)) {\n const textValue = row.textValue?.toLowerCase() ?? \"\";\n if (textValue.startsWith(searchLower)) {\n return row.key;\n }\n }\n }\n\n // Wrap around and search from beginning\n for (let i = 0; i < startIndex; i++) {\n const row = rows[i];\n if (!this.isDisabled(row.key)) {\n const textValue = row.textValue?.toLowerCase() ?? \"\";\n if (textValue.startsWith(searchLower)) {\n return row.key;\n }\n }\n }\n\n return null;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGrid.ts\n\n/**\n * createGrid - Provides accessibility for a grid component.\n * Based on @react-aria/grid/useGrid.\n */\n\nimport { createMemo, createSignal } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createId } from \"@proyecto-viviana/solid-stately\";\nimport type { GridState, GridCollection, Key } from \"@proyecto-viviana/solid-stately\";\nimport type { GridProps, GridAria, KeyboardDelegate } from \"./types\";\nimport { GridKeyboardDelegate } from \"./GridKeyboardDelegate\";\nimport { useLocale } from \"../i18n\";\n\n// Global map to store grid metadata for child components\nconst gridMap = new WeakMap<\n object,\n {\n keyboardDelegate: KeyboardDelegate;\n actions: { onRowAction?: (key: Key) => void; onCellAction?: (key: Key) => void };\n shouldSelectOnPressUp?: boolean;\n }\n>();\n\n/**\n * Get the grid metadata for child components.\n */\nexport function getGridData<T>(state: GridState<T, GridCollection<T>>) {\n return gridMap.get(state);\n}\n\n/**\n * Creates accessibility props for a grid component.\n * A grid displays data in rows and columns and enables navigation via arrow keys.\n */\nexport function createGrid<T extends object>(\n props: Accessor<GridProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n ref: Accessor<HTMLElement | null>,\n): GridAria {\n const id = createId(props().id);\n const locale = useLocale();\n\n // Track focused state\n const [_isFocused, setIsFocused] = createSignal(false);\n\n // Create keyboard delegate\n const keyboardDelegate = createMemo(() => {\n const p = props();\n const s = state();\n\n if (p.keyboardDelegate) {\n return p.keyboardDelegate;\n }\n\n return new GridKeyboardDelegate({\n collection: s.collection,\n disabledKeys: s.disabledKeys,\n ref,\n focusMode: p.focusMode ?? \"row\",\n direction: locale().direction,\n });\n });\n\n // Store metadata for child components\n const storeGridData = () => {\n const s = state();\n const p = props();\n gridMap.set(s, {\n keyboardDelegate: keyboardDelegate(),\n actions: {\n onRowAction: p.onRowAction,\n onCellAction: p.onCellAction,\n },\n shouldSelectOnPressUp: p.shouldSelectOnPressUp,\n });\n };\n\n // Update grid data whenever state changes\n createMemo(() => {\n storeGridData();\n });\n\n // Keyboard navigation handler\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n const delegate = keyboardDelegate();\n\n if (s.isKeyboardNavigationDisabled) {\n return;\n }\n\n const focusedKey = s.focusedKey;\n if (focusedKey == null) {\n // If nothing is focused, focus the first item\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Home\" || e.key === \"End\") {\n const firstKey = delegate.getFirstKey?.();\n if (firstKey != null) {\n e.preventDefault();\n s.setFocusedKey(firstKey);\n }\n }\n return;\n }\n\n let nextKey: Key | null = null;\n\n switch (e.key) {\n case \"ArrowDown\":\n nextKey = delegate.getKeyBelow?.(focusedKey) ?? null;\n break;\n case \"ArrowUp\":\n nextKey = delegate.getKeyAbove?.(focusedKey) ?? null;\n break;\n case \"ArrowLeft\":\n nextKey = delegate.getKeyLeftOf?.(focusedKey) ?? null;\n break;\n case \"ArrowRight\":\n nextKey = delegate.getKeyRightOf?.(focusedKey) ?? null;\n break;\n case \"Home\":\n if (e.ctrlKey) {\n nextKey = delegate.getFirstKey?.() ?? null;\n } else {\n // Go to first cell in row - for now just use first key\n nextKey = delegate.getFirstKey?.(focusedKey) ?? null;\n }\n break;\n case \"End\":\n if (e.ctrlKey) {\n nextKey = delegate.getLastKey?.() ?? null;\n } else {\n // Go to last cell in row - for now just use last key\n nextKey = delegate.getLastKey?.(focusedKey) ?? null;\n }\n break;\n case \"PageDown\":\n nextKey = delegate.getKeyPageBelow?.(focusedKey) ?? null;\n break;\n case \"PageUp\":\n nextKey = delegate.getKeyPageAbove?.(focusedKey) ?? null;\n break;\n case \"Escape\":\n if (p.escapeKeyBehavior !== \"none\") {\n s.clearSelection();\n }\n return;\n case \"a\":\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n if (s.selectionMode === \"multiple\") {\n s.selectAll();\n }\n }\n return;\n case \" \":\n case \"Enter\":\n e.preventDefault();\n // Toggle selection or trigger action\n if (s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(focusedKey);\n } else {\n s.toggleSelection(focusedKey);\n }\n }\n return;\n default:\n // Type to select\n if (!p.disallowTypeAhead && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n const key = delegate.getKeyForSearch?.(e.key, focusedKey);\n if (key != null) {\n e.preventDefault();\n s.setFocusedKey(key);\n }\n }\n return;\n }\n\n if (nextKey != null) {\n e.preventDefault();\n s.setFocusedKey(nextKey);\n\n // Handle shift+arrow for range selection\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(nextKey);\n }\n }\n };\n\n // Focus handling\n const onFocus = (e: FocusEvent) => {\n const s = state();\n const el = ref();\n\n if (!el?.contains(e.target as Element)) {\n return;\n }\n\n if (!s.isFocused) {\n s.setFocused(true);\n setIsFocused(true);\n\n // If no key is focused, focus the first one\n if (s.focusedKey == null) {\n const firstKey = keyboardDelegate().getFirstKey?.();\n if (firstKey != null) {\n s.setFocusedKey(firstKey);\n }\n }\n }\n };\n\n const onBlur = (e: FocusEvent) => {\n const s = state();\n const el = ref();\n\n // Only blur if focus is leaving the grid entirely\n if (el && !el.contains(e.relatedTarget as Element)) {\n s.setFocused(false);\n setIsFocused(false);\n }\n };\n\n // Warn if no label is provided\n createMemo(() => {\n const p = props();\n if (!p[\"aria-label\"] && !p[\"aria-labelledby\"]) {\n console.warn(\"Grid: An aria-label or aria-labelledby prop is required for accessibility.\");\n }\n });\n\n const gridProps = createMemo(() => {\n const p = props();\n const s = state();\n\n const baseProps: Record<string, unknown> = {\n role: \"grid\",\n id,\n \"aria-label\": p[\"aria-label\"],\n \"aria-labelledby\": p[\"aria-labelledby\"],\n \"aria-describedby\": p[\"aria-describedby\"],\n \"aria-multiselectable\": s.selectionMode === \"multiple\" ? \"true\" : undefined,\n tabIndex: s.collection.size === 0 ? 0 : -1,\n onKeyDown,\n onFocus,\n onBlur,\n };\n\n if (p.isVirtualized) {\n baseProps[\"aria-rowcount\"] = s.collection.rowCount;\n baseProps[\"aria-colcount\"] = s.collection.columnCount;\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get gridProps() {\n return gridProps();\n },\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridRow.ts\n\n/**\n * createGridRow - Provides accessibility for a grid row.\n * Based on @react-aria/grid/useGridRow.\n */\n\nimport { createMemo, createSignal } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport type { GridState, GridCollection } from \"@proyecto-viviana/solid-stately\";\nimport type { GridRowProps, GridRowAria } from \"./types\";\nimport { getGridData } from \"./createGrid\";\n\n/**\n * Creates accessibility props for a grid row.\n */\nexport function createGridRow<T extends object>(\n props: Accessor<GridRowProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n _ref: Accessor<HTMLElement | null>,\n): GridRowAria {\n const [isPressed, setIsPressed] = createSignal(false);\n\n const isSelected = createMemo(() => {\n const s = state();\n const p = props();\n return s.isSelected(p.key);\n });\n\n const isDisabled = createMemo(() => {\n const s = state();\n const p = props();\n return s.isDisabled(p.key);\n });\n\n const isFocused = createMemo(() => {\n const s = state();\n const p = props();\n return s.focusedKey === p.key;\n });\n\n // Handle click/press for selection\n const onClick = (e: MouseEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onRowAction = gridData?.actions.onRowAction;\n\n // Handle selection\n if (s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(p.key);\n } else if (e.ctrlKey || e.metaKey) {\n s.toggleSelection(p.key);\n } else {\n // Replace selection\n s.replaceSelection(p.key);\n }\n }\n\n // Call action handler\n if (onRowAction) {\n onRowAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onRowAction = gridData?.actions.onRowAction;\n\n // Handle selection\n if (s.selectionMode !== \"none\") {\n s.toggleSelection(p.key);\n }\n\n // Call action handler\n if (onRowAction) {\n onRowAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n }\n };\n\n const onFocus = () => {\n const s = state();\n const p = props();\n s.setFocusedKey(p.key);\n };\n\n const onPointerDown = () => {\n setIsPressed(true);\n };\n\n const onPointerUp = () => {\n setIsPressed(false);\n };\n\n const rowProps = createMemo(() => {\n const s = state();\n const p = props();\n\n const baseProps: Record<string, unknown> = {\n role: \"row\",\n \"aria-selected\": s.selectionMode !== \"none\" ? isSelected() : undefined,\n \"aria-disabled\": isDisabled() || undefined,\n tabIndex: isFocused() ? 0 : -1,\n onClick,\n onKeyDown,\n onFocus,\n onPointerDown,\n onPointerUp,\n };\n\n if (p.isVirtualized && p.index != null) {\n baseProps[\"aria-rowindex\"] = p.index + 1; // aria-rowindex is 1-based\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get rowProps() {\n return rowProps();\n },\n get isSelected() {\n return isSelected();\n },\n get isDisabled() {\n return isDisabled();\n },\n get isPressed() {\n return isPressed();\n },\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridCell.ts\n\n/**\n * createGridCell - Provides accessibility for a grid cell.\n * Based on @react-aria/grid/useGridCell.\n */\n\nimport { createMemo, createSignal } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport type { GridState, GridCollection } from \"@proyecto-viviana/solid-stately\";\nimport type { GridCellProps, GridCellAria } from \"./types\";\nimport { getGridData } from \"./createGrid\";\n\n/**\n * Creates accessibility props for a grid cell.\n */\nexport function createGridCell<T extends object>(\n props: Accessor<GridCellProps>,\n state: Accessor<GridState<T, GridCollection<T>>>,\n _ref: Accessor<HTMLElement | null>,\n): GridCellAria {\n const [isPressed, setIsPressed] = createSignal(false);\n\n const isSelected = createMemo(() => {\n const s = state();\n const p = props();\n // Check if parent row is selected\n const node = s.collection.getItem(p.key);\n if (node?.parentKey != null) {\n return s.isSelected(node.parentKey);\n }\n return false;\n });\n\n const isDisabled = createMemo(() => {\n const s = state();\n const p = props();\n // Check if parent row is disabled\n const node = s.collection.getItem(p.key);\n if (node?.parentKey != null) {\n return s.isDisabled(node.parentKey);\n }\n return false;\n });\n\n const isFocused = createMemo(() => {\n const s = state();\n const p = props();\n return s.focusedKey === p.key;\n });\n\n // Handle click/press for cell actions\n const onClick = (e: MouseEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Get grid metadata for actions\n const gridData = getGridData(s);\n const onCellAction = gridData?.actions.onCellAction;\n\n // Get parent row key for selection\n const node = s.collection.getItem(p.key);\n const rowKey = node?.parentKey;\n\n // Handle selection on parent row\n if (rowKey != null && s.selectionMode !== \"none\") {\n if (e.shiftKey && s.selectionMode === \"multiple\") {\n s.extendSelection(rowKey);\n } else if (e.ctrlKey || e.metaKey) {\n s.toggleSelection(rowKey);\n } else {\n // Replace selection\n s.replaceSelection(rowKey);\n }\n }\n\n // Call cell action handler\n if (onCellAction) {\n onCellAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const s = state();\n const p = props();\n\n if (isDisabled()) return;\n\n // Enter or Space triggers cell action\n if (e.key === \"Enter\" || e.key === \" \") {\n // Only handle if there's an action to trigger\n const gridData = getGridData(s);\n const onCellAction = gridData?.actions.onCellAction;\n\n if (onCellAction || p.onAction) {\n e.preventDefault();\n\n if (onCellAction) {\n onCellAction(p.key);\n }\n\n if (p.onAction) {\n p.onAction();\n }\n }\n }\n };\n\n const onFocus = () => {\n const s = state();\n const p = props();\n s.setFocusedKey(p.key);\n };\n\n const onPointerDown = () => {\n setIsPressed(true);\n };\n\n const onPointerUp = () => {\n setIsPressed(false);\n };\n\n const cellProps = createMemo(() => {\n const s = state();\n const p = props();\n const node = s.collection.getItem(p.key);\n\n // Determine the role based on node type\n let role: string = \"gridcell\";\n if (node?.type === \"rowheader\") {\n role = \"rowheader\";\n } else if (node?.type === \"column\") {\n role = \"columnheader\";\n }\n\n const baseProps: Record<string, unknown> = {\n role,\n \"aria-disabled\": isDisabled() || undefined,\n \"aria-selected\": s.selectionMode !== \"none\" ? isSelected() : undefined,\n tabIndex: isFocused() ? 0 : -1,\n onClick,\n onKeyDown,\n onFocus,\n onPointerDown,\n onPointerUp,\n };\n\n // Add column index for virtualized grids\n if (p.isVirtualized && node?.column != null) {\n baseProps[\"aria-colindex\"] = node.column + 1; // aria-colindex is 1-based\n }\n\n // Add colspan if present\n if (node?.colspan != null && node.colspan > 1) {\n baseProps[\"aria-colspan\"] = node.colspan;\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n });\n\n return {\n get cellProps() {\n return cellProps();\n },\n get isSelected() {\n return isSelected();\n },\n get isDisabled() {\n return isDisabled();\n },\n get isPressed() {\n return isPressed();\n },\n get isFocused() {\n return isFocused();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,3 +1,51 @@
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/GridKeyboardDelegate.ts
13
+ /*
14
+ * Copyright 2020 Adobe. All rights reserved.
15
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License. You may obtain a copy
17
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software distributed under
20
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
21
+ * OF ANY KIND, either express or implied. See the License for the specific language
22
+ * governing permissions and limitations under the License.
23
+ */
24
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGrid.ts
25
+ /*
26
+ * Copyright 2020 Adobe. All rights reserved.
27
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
28
+ * you may not use this file except in compliance with the License. You may obtain a copy
29
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
30
+ *
31
+ * Unless required by applicable law or agreed to in writing, software distributed under
32
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
33
+ * OF ANY KIND, either express or implied. See the License for the specific language
34
+ * governing permissions and limitations under the License.
35
+ */
36
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridCell.ts
37
+ /*
38
+ * Copyright 2020 Adobe. All rights reserved.
39
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
40
+ * you may not use this file except in compliance with the License. You may obtain a copy
41
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
42
+ *
43
+ * Unless required by applicable law or agreed to in writing, software distributed under
44
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
45
+ * OF ANY KIND, either express or implied. See the License for the specific language
46
+ * governing permissions and limitations under the License.
47
+ */
48
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/grid/useGridRow.ts
1
49
  import { i as useLocale } from "./locale.jsx";
2
50
  import { createMemo, createSignal } from "solid-js";
3
51
  import { createId } from "@proyecto-viviana/solid-stately";
@@ -351,8 +399,10 @@ function createGrid(props, state, ref) {
351
399
  case " ":
352
400
  case "Enter":
353
401
  e.preventDefault();
354
- if (s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(focusedKey);
355
- else s.toggleSelection(focusedKey);
402
+ if (s.selectionMode !== "none") {
403
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(focusedKey);
404
+ else s.toggleSelection(focusedKey);
405
+ }
356
406
  return;
357
407
  default:
358
408
  if (!p.disallowTypeAhead && e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {
@@ -450,9 +500,11 @@ function createGridRow(props, state, _ref) {
450
500
  const p = props();
451
501
  if (isDisabled()) return;
452
502
  const onRowAction = getGridData(s)?.actions.onRowAction;
453
- if (s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(p.key);
454
- else if (e.ctrlKey || e.metaKey) s.toggleSelection(p.key);
455
- else s.replaceSelection(p.key);
503
+ if (s.selectionMode !== "none") {
504
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(p.key);
505
+ else if (e.ctrlKey || e.metaKey) s.toggleSelection(p.key);
506
+ else s.replaceSelection(p.key);
507
+ }
456
508
  if (onRowAction) onRowAction(p.key);
457
509
  if (p.onAction) p.onAction();
458
510
  };
@@ -547,9 +599,11 @@ function createGridCell(props, state, _ref) {
547
599
  if (isDisabled()) return;
548
600
  const onCellAction = getGridData(s)?.actions.onCellAction;
549
601
  const rowKey = s.collection.getItem(p.key)?.parentKey;
550
- if (rowKey != null && s.selectionMode !== "none") if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(rowKey);
551
- else if (e.ctrlKey || e.metaKey) s.toggleSelection(rowKey);
552
- else s.replaceSelection(rowKey);
602
+ if (rowKey != null && s.selectionMode !== "none") {
603
+ if (e.shiftKey && s.selectionMode === "multiple") s.extendSelection(rowKey);
604
+ else if (e.ctrlKey || e.metaKey) s.toggleSelection(rowKey);
605
+ else s.replaceSelection(rowKey);
606
+ }
553
607
  if (onCellAction) onCellAction(p.key);
554
608
  if (p.onAction) p.onAction();
555
609
  };