@proyecto-viviana/solidaria 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/dist/_chunk/actiongroup.js +207 -0
  2. package/dist/_chunk/actiongroup.js.map +1 -0
  3. package/dist/_chunk/actiongroup.jsx +207 -0
  4. package/dist/_chunk/actiongroup.jsx.map +1 -0
  5. package/dist/_chunk/ariaHideOutside.js +122 -0
  6. package/dist/_chunk/ariaHideOutside.js.map +1 -0
  7. package/dist/_chunk/ariaHideOutside.jsx +122 -0
  8. package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
  9. package/dist/_chunk/autocomplete.js +196 -0
  10. package/dist/_chunk/autocomplete.js.map +1 -0
  11. package/dist/_chunk/autocomplete.jsx +196 -0
  12. package/dist/_chunk/autocomplete.jsx.map +1 -0
  13. package/dist/_chunk/breadcrumbs.js +119 -0
  14. package/dist/_chunk/breadcrumbs.js.map +1 -0
  15. package/dist/_chunk/breadcrumbs.jsx +119 -0
  16. package/dist/_chunk/breadcrumbs.jsx.map +1 -0
  17. package/dist/_chunk/button.js +276 -0
  18. package/dist/_chunk/button.js.map +1 -0
  19. package/dist/_chunk/button.jsx +276 -0
  20. package/dist/_chunk/button.jsx.map +1 -0
  21. package/dist/_chunk/calendar.js +1036 -0
  22. package/dist/_chunk/calendar.js.map +1 -0
  23. package/dist/_chunk/calendar.jsx +1036 -0
  24. package/dist/_chunk/calendar.jsx.map +1 -0
  25. package/dist/_chunk/checkbox.js +234 -0
  26. package/dist/_chunk/checkbox.js.map +1 -0
  27. package/dist/_chunk/checkbox.jsx +234 -0
  28. package/dist/_chunk/checkbox.jsx.map +1 -0
  29. package/dist/_chunk/color.js +1174 -0
  30. package/dist/_chunk/color.js.map +1 -0
  31. package/dist/_chunk/color.jsx +1174 -0
  32. package/dist/_chunk/color.jsx.map +1 -0
  33. package/dist/_chunk/combobox.js +436 -0
  34. package/dist/_chunk/combobox.js.map +1 -0
  35. package/dist/_chunk/combobox.jsx +436 -0
  36. package/dist/_chunk/combobox.jsx.map +1 -0
  37. package/dist/_chunk/createCollator.js +229 -0
  38. package/dist/_chunk/createCollator.js.map +1 -0
  39. package/dist/_chunk/createCollator.jsx +223 -0
  40. package/dist/_chunk/createCollator.jsx.map +1 -0
  41. package/dist/_chunk/createCollectionRowInteraction.js +133 -0
  42. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
  43. package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
  44. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
  45. package/dist/_chunk/createField.js +54 -0
  46. package/dist/_chunk/createField.js.map +1 -0
  47. package/dist/_chunk/createField.jsx +54 -0
  48. package/dist/_chunk/createField.jsx.map +1 -0
  49. package/dist/_chunk/createFocus.js +101 -0
  50. package/dist/_chunk/createFocus.js.map +1 -0
  51. package/dist/_chunk/createFocus.jsx +101 -0
  52. package/dist/_chunk/createFocus.jsx.map +1 -0
  53. package/dist/_chunk/createFocusRing.js +54 -0
  54. package/dist/_chunk/createFocusRing.js.map +1 -0
  55. package/dist/_chunk/createFocusRing.jsx +54 -0
  56. package/dist/_chunk/createFocusRing.jsx.map +1 -0
  57. package/dist/_chunk/createFocusWithin.js +121 -0
  58. package/dist/_chunk/createFocusWithin.js.map +1 -0
  59. package/dist/_chunk/createFocusWithin.jsx +121 -0
  60. package/dist/_chunk/createFocusWithin.jsx.map +1 -0
  61. package/dist/_chunk/createFocusable.js +131 -0
  62. package/dist/_chunk/createFocusable.js.map +1 -0
  63. package/dist/_chunk/createFocusable.jsx +131 -0
  64. package/dist/_chunk/createFocusable.jsx.map +1 -0
  65. package/dist/_chunk/createFormValidation.js +135 -0
  66. package/dist/_chunk/createFormValidation.js.map +1 -0
  67. package/dist/_chunk/createFormValidation.jsx +135 -0
  68. package/dist/_chunk/createFormValidation.jsx.map +1 -0
  69. package/dist/_chunk/createHover.js +130 -0
  70. package/dist/_chunk/createHover.js.map +1 -0
  71. package/dist/_chunk/createHover.jsx +130 -0
  72. package/dist/_chunk/createHover.jsx.map +1 -0
  73. package/dist/_chunk/createInteractionModality.js +269 -0
  74. package/dist/_chunk/createInteractionModality.js.map +1 -0
  75. package/dist/_chunk/createInteractionModality.jsx +269 -0
  76. package/dist/_chunk/createInteractionModality.jsx.map +1 -0
  77. package/dist/_chunk/createLabel.js +46 -0
  78. package/dist/_chunk/createLabel.js.map +1 -0
  79. package/dist/_chunk/createLabel.jsx +46 -0
  80. package/dist/_chunk/createLabel.jsx.map +1 -0
  81. package/dist/_chunk/createLabels.js +31 -0
  82. package/dist/_chunk/createLabels.js.map +1 -0
  83. package/dist/_chunk/createLabels.jsx +31 -0
  84. package/dist/_chunk/createLabels.jsx.map +1 -0
  85. package/dist/_chunk/createLandmark.js +198 -0
  86. package/dist/_chunk/createLandmark.js.map +1 -0
  87. package/dist/_chunk/createLandmark.jsx +198 -0
  88. package/dist/_chunk/createLandmark.jsx.map +1 -0
  89. package/dist/_chunk/createLongPress.js +91 -0
  90. package/dist/_chunk/createLongPress.js.map +1 -0
  91. package/dist/_chunk/createLongPress.jsx +91 -0
  92. package/dist/_chunk/createLongPress.jsx.map +1 -0
  93. package/dist/_chunk/createOverlay.js +327 -0
  94. package/dist/_chunk/createOverlay.js.map +1 -0
  95. package/dist/_chunk/createOverlay.jsx +327 -0
  96. package/dist/_chunk/createOverlay.jsx.map +1 -0
  97. package/dist/_chunk/createPress.js +526 -0
  98. package/dist/_chunk/createPress.js.map +1 -0
  99. package/dist/_chunk/createPress.jsx +526 -0
  100. package/dist/_chunk/createPress.jsx.map +1 -0
  101. package/dist/_chunk/createProgressBar.js +81 -0
  102. package/dist/_chunk/createProgressBar.js.map +1 -0
  103. package/dist/_chunk/createProgressBar.jsx +81 -0
  104. package/dist/_chunk/createProgressBar.jsx.map +1 -0
  105. package/dist/_chunk/createSelectableItem.js +298 -0
  106. package/dist/_chunk/createSelectableItem.js.map +1 -0
  107. package/dist/_chunk/createSelectableItem.jsx +298 -0
  108. package/dist/_chunk/createSelectableItem.jsx.map +1 -0
  109. package/dist/_chunk/createToggle.js +158 -0
  110. package/dist/_chunk/createToggle.js.map +1 -0
  111. package/dist/_chunk/createToggle.jsx +158 -0
  112. package/dist/_chunk/createToggle.jsx.map +1 -0
  113. package/dist/_chunk/createTypeSelect.js +125 -0
  114. package/dist/_chunk/createTypeSelect.js.map +1 -0
  115. package/dist/_chunk/createTypeSelect.jsx +125 -0
  116. package/dist/_chunk/createTypeSelect.jsx.map +1 -0
  117. package/dist/_chunk/datepicker.js +1393 -0
  118. package/dist/_chunk/datepicker.js.map +1 -0
  119. package/dist/_chunk/datepicker.jsx +1393 -0
  120. package/dist/_chunk/datepicker.jsx.map +1 -0
  121. package/dist/_chunk/dialog.js +62 -0
  122. package/dist/_chunk/dialog.js.map +1 -0
  123. package/dist/_chunk/dialog.jsx +62 -0
  124. package/dist/_chunk/dialog.jsx.map +1 -0
  125. package/dist/_chunk/disclosure.js +185 -0
  126. package/dist/_chunk/disclosure.js.map +1 -0
  127. package/dist/_chunk/disclosure.jsx +185 -0
  128. package/dist/_chunk/disclosure.jsx.map +1 -0
  129. package/dist/_chunk/dnd.js +1304 -0
  130. package/dist/_chunk/dnd.js.map +1 -0
  131. package/dist/_chunk/dnd.jsx +1304 -0
  132. package/dist/_chunk/dnd.jsx.map +1 -0
  133. package/dist/_chunk/env.js +105 -0
  134. package/dist/_chunk/env.js.map +1 -0
  135. package/dist/_chunk/env.jsx +105 -0
  136. package/dist/_chunk/env.jsx.map +1 -0
  137. package/dist/_chunk/filterDOMProps.js +82 -0
  138. package/dist/_chunk/filterDOMProps.js.map +1 -0
  139. package/dist/_chunk/filterDOMProps.jsx +82 -0
  140. package/dist/_chunk/filterDOMProps.jsx.map +1 -0
  141. package/dist/_chunk/focus.js +399 -0
  142. package/dist/_chunk/focus.js.map +1 -0
  143. package/dist/_chunk/focus.jsx +399 -0
  144. package/dist/_chunk/focus.jsx.map +1 -0
  145. package/dist/_chunk/focus2.js +895 -0
  146. package/dist/_chunk/focus2.js.map +1 -0
  147. package/dist/_chunk/focus2.jsx +870 -0
  148. package/dist/_chunk/focus2.jsx.map +1 -0
  149. package/dist/_chunk/form.js +39 -0
  150. package/dist/_chunk/form.js.map +1 -0
  151. package/dist/_chunk/form.jsx +39 -0
  152. package/dist/_chunk/form.jsx.map +1 -0
  153. package/dist/_chunk/grid.js +623 -0
  154. package/dist/_chunk/grid.js.map +1 -0
  155. package/dist/_chunk/grid.jsx +623 -0
  156. package/dist/_chunk/grid.jsx.map +1 -0
  157. package/dist/_chunk/gridlist.js +364 -0
  158. package/dist/_chunk/gridlist.js.map +1 -0
  159. package/dist/_chunk/gridlist.jsx +364 -0
  160. package/dist/_chunk/gridlist.jsx.map +1 -0
  161. package/dist/_chunk/i18n.js +254 -0
  162. package/dist/_chunk/i18n.js.map +1 -0
  163. package/dist/_chunk/i18n.jsx +254 -0
  164. package/dist/_chunk/i18n.jsx.map +1 -0
  165. package/dist/_chunk/interactions.js +241 -0
  166. package/dist/_chunk/interactions.js.map +1 -0
  167. package/dist/_chunk/interactions.jsx +237 -0
  168. package/dist/_chunk/interactions.jsx.map +1 -0
  169. package/dist/_chunk/link.js +96 -0
  170. package/dist/_chunk/link.js.map +1 -0
  171. package/dist/_chunk/link.jsx +96 -0
  172. package/dist/_chunk/link.jsx.map +1 -0
  173. package/dist/_chunk/listbox.js +324 -0
  174. package/dist/_chunk/listbox.js.map +1 -0
  175. package/dist/_chunk/listbox.jsx +324 -0
  176. package/dist/_chunk/listbox.jsx.map +1 -0
  177. package/dist/_chunk/live-announcer.js +207 -0
  178. package/dist/_chunk/live-announcer.js.map +1 -0
  179. package/dist/_chunk/live-announcer.jsx +207 -0
  180. package/dist/_chunk/live-announcer.jsx.map +1 -0
  181. package/dist/_chunk/menu.js +518 -0
  182. package/dist/_chunk/menu.js.map +1 -0
  183. package/dist/_chunk/menu.jsx +518 -0
  184. package/dist/_chunk/menu.jsx.map +1 -0
  185. package/dist/_chunk/meter.js +33 -0
  186. package/dist/_chunk/meter.js.map +1 -0
  187. package/dist/_chunk/meter.jsx +33 -0
  188. package/dist/_chunk/meter.jsx.map +1 -0
  189. package/dist/_chunk/numberfield.js +258 -0
  190. package/dist/_chunk/numberfield.js.map +1 -0
  191. package/dist/_chunk/numberfield.jsx +258 -0
  192. package/dist/_chunk/numberfield.jsx.map +1 -0
  193. package/dist/_chunk/overlays.js +186 -0
  194. package/dist/_chunk/overlays.js.map +1 -0
  195. package/dist/_chunk/overlays.jsx +162 -0
  196. package/dist/_chunk/overlays.jsx.map +1 -0
  197. package/dist/_chunk/popover.js +574 -0
  198. package/dist/_chunk/popover.js.map +1 -0
  199. package/dist/_chunk/popover.jsx +574 -0
  200. package/dist/_chunk/popover.jsx.map +1 -0
  201. package/dist/_chunk/radio.js +319 -0
  202. package/dist/_chunk/radio.js.map +1 -0
  203. package/dist/_chunk/radio.jsx +319 -0
  204. package/dist/_chunk/radio.jsx.map +1 -0
  205. package/dist/_chunk/searchfield.js +209 -0
  206. package/dist/_chunk/searchfield.js.map +1 -0
  207. package/dist/_chunk/searchfield.jsx +209 -0
  208. package/dist/_chunk/searchfield.jsx.map +1 -0
  209. package/dist/_chunk/select.js +403 -0
  210. package/dist/_chunk/select.js.map +1 -0
  211. package/dist/_chunk/select.jsx +394 -0
  212. package/dist/_chunk/select.jsx.map +1 -0
  213. package/dist/_chunk/selection.js +679 -0
  214. package/dist/_chunk/selection.js.map +1 -0
  215. package/dist/_chunk/selection.jsx +679 -0
  216. package/dist/_chunk/selection.jsx.map +1 -0
  217. package/dist/_chunk/separator.js +29 -0
  218. package/dist/_chunk/separator.js.map +1 -0
  219. package/dist/_chunk/separator.jsx +29 -0
  220. package/dist/_chunk/separator.jsx.map +1 -0
  221. package/dist/_chunk/slider.js +255 -0
  222. package/dist/_chunk/slider.js.map +1 -0
  223. package/dist/_chunk/slider.jsx +255 -0
  224. package/dist/_chunk/slider.jsx.map +1 -0
  225. package/dist/_chunk/steplist.js +66 -0
  226. package/dist/_chunk/steplist.js.map +1 -0
  227. package/dist/_chunk/steplist.jsx +66 -0
  228. package/dist/_chunk/steplist.jsx.map +1 -0
  229. package/dist/_chunk/switch.js +34 -0
  230. package/dist/_chunk/switch.js.map +1 -0
  231. package/dist/_chunk/switch.jsx +34 -0
  232. package/dist/_chunk/switch.jsx.map +1 -0
  233. package/dist/_chunk/table.js +1051 -0
  234. package/dist/_chunk/table.js.map +1 -0
  235. package/dist/_chunk/table.jsx +1051 -0
  236. package/dist/_chunk/table.jsx.map +1 -0
  237. package/dist/_chunk/tabs.js +260 -0
  238. package/dist/_chunk/tabs.js.map +1 -0
  239. package/dist/_chunk/tabs.jsx +260 -0
  240. package/dist/_chunk/tabs.jsx.map +1 -0
  241. package/dist/_chunk/tag.js +286 -0
  242. package/dist/_chunk/tag.js.map +1 -0
  243. package/dist/_chunk/tag.jsx +286 -0
  244. package/dist/_chunk/tag.jsx.map +1 -0
  245. package/dist/_chunk/textfield.js +109 -0
  246. package/dist/_chunk/textfield.js.map +1 -0
  247. package/dist/_chunk/textfield.jsx +109 -0
  248. package/dist/_chunk/textfield.jsx.map +1 -0
  249. package/dist/_chunk/toast.js +250 -0
  250. package/dist/_chunk/toast.js.map +1 -0
  251. package/dist/_chunk/toast.jsx +250 -0
  252. package/dist/_chunk/toast.jsx.map +1 -0
  253. package/dist/_chunk/toolbar.js +258 -0
  254. package/dist/_chunk/toolbar.js.map +1 -0
  255. package/dist/_chunk/toolbar.jsx +258 -0
  256. package/dist/_chunk/toolbar.jsx.map +1 -0
  257. package/dist/_chunk/tooltip.js +185 -0
  258. package/dist/_chunk/tooltip.js.map +1 -0
  259. package/dist/_chunk/tooltip.jsx +185 -0
  260. package/dist/_chunk/tooltip.jsx.map +1 -0
  261. package/dist/_chunk/tree.js +424 -0
  262. package/dist/_chunk/tree.js.map +1 -0
  263. package/dist/_chunk/tree.jsx +424 -0
  264. package/dist/_chunk/tree.jsx.map +1 -0
  265. package/dist/_chunk/utils.js +665 -0
  266. package/dist/_chunk/utils.js.map +1 -0
  267. package/dist/_chunk/utils.jsx +665 -0
  268. package/dist/_chunk/utils.jsx.map +1 -0
  269. package/dist/_chunk/visually-hidden.js +92 -0
  270. package/dist/_chunk/visually-hidden.js.map +1 -0
  271. package/dist/_chunk/visually-hidden.jsx +92 -0
  272. package/dist/_chunk/visually-hidden.jsx.map +1 -0
  273. package/dist/actiongroup/index.js +2 -0
  274. package/dist/actiongroup/index.jsx +2 -0
  275. package/dist/autocomplete/createAutocomplete.d.ts +2 -0
  276. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  277. package/dist/autocomplete/index.js +2 -0
  278. package/dist/autocomplete/index.jsx +2 -0
  279. package/dist/breadcrumbs/index.js +2 -0
  280. package/dist/breadcrumbs/index.jsx +2 -0
  281. package/dist/button/index.js +2 -0
  282. package/dist/button/index.jsx +2 -0
  283. package/dist/calendar/createCalendar.d.ts.map +1 -1
  284. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  285. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  286. package/dist/calendar/createCalendarMonthPicker.d.ts +41 -0
  287. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
  288. package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
  289. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
  290. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  291. package/dist/calendar/index.d.ts +2 -0
  292. package/dist/calendar/index.d.ts.map +1 -1
  293. package/dist/calendar/index.js +2 -0
  294. package/dist/calendar/index.jsx +2 -0
  295. package/dist/calendar/utils.d.ts +4 -0
  296. package/dist/calendar/utils.d.ts.map +1 -1
  297. package/dist/checkbox/createCheckbox.d.ts +4 -0
  298. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  299. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  300. package/dist/checkbox/index.js +2 -0
  301. package/dist/checkbox/index.jsx +2 -0
  302. package/dist/collections/index.js +160 -0
  303. package/dist/collections/index.js.map +1 -0
  304. package/dist/collections/index.jsx +160 -0
  305. package/dist/collections/index.jsx.map +1 -0
  306. package/dist/color/index.js +2 -0
  307. package/dist/color/index.jsx +2 -0
  308. package/dist/combobox/index.js +2 -0
  309. package/dist/combobox/index.jsx +2 -0
  310. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  311. package/dist/datepicker/index.js +2 -0
  312. package/dist/datepicker/index.jsx +2 -0
  313. package/dist/dialog/index.js +2 -0
  314. package/dist/dialog/index.jsx +2 -0
  315. package/dist/disclosure/index.js +2 -0
  316. package/dist/disclosure/index.jsx +2 -0
  317. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  318. package/dist/dnd/index.js +2 -0
  319. package/dist/dnd/index.jsx +2 -0
  320. package/dist/dnd/utils.d.ts +2 -2
  321. package/dist/dnd/utils.d.ts.map +1 -1
  322. package/dist/focus/FocusScope.d.ts.map +1 -1
  323. package/dist/focus/index.js +2 -0
  324. package/dist/focus/index.jsx +2 -0
  325. package/dist/form/createFormValidation.d.ts.map +1 -1
  326. package/dist/form/index.js +3 -0
  327. package/dist/form/index.jsx +3 -0
  328. package/dist/grid/index.js +2 -0
  329. package/dist/grid/index.jsx +2 -0
  330. package/dist/gridlist/createGridList.d.ts +7 -1
  331. package/dist/gridlist/createGridList.d.ts.map +1 -1
  332. package/dist/gridlist/createGridListItem.d.ts +1 -1
  333. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  334. package/dist/gridlist/createGridListSection.d.ts +15 -0
  335. package/dist/gridlist/createGridListSection.d.ts.map +1 -0
  336. package/dist/gridlist/index.d.ts +2 -1
  337. package/dist/gridlist/index.d.ts.map +1 -1
  338. package/dist/gridlist/index.js +2 -0
  339. package/dist/gridlist/index.jsx +2 -0
  340. package/dist/gridlist/types.d.ts +50 -0
  341. package/dist/gridlist/types.d.ts.map +1 -1
  342. package/dist/i18n/index.js +3 -0
  343. package/dist/i18n/index.jsx +3 -0
  344. package/dist/index.d.ts +7 -3
  345. package/dist/index.d.ts.map +1 -1
  346. package/dist/index.js +71 -18311
  347. package/dist/index.jsx +71 -18242
  348. package/dist/interactions/PressEvent.d.ts +11 -0
  349. package/dist/interactions/PressEvent.d.ts.map +1 -1
  350. package/dist/interactions/createInteractionModality.d.ts +0 -1
  351. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  352. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  353. package/dist/interactions/createPress.d.ts.map +1 -1
  354. package/dist/interactions/index.js +10 -0
  355. package/dist/interactions/index.jsx +10 -0
  356. package/dist/label/index.js +4 -0
  357. package/dist/label/index.jsx +4 -0
  358. package/dist/landmark/index.js +2 -0
  359. package/dist/landmark/index.jsx +2 -0
  360. package/dist/link/index.js +2 -0
  361. package/dist/link/index.jsx +2 -0
  362. package/dist/listbox/createListBox.d.ts +37 -0
  363. package/dist/listbox/createListBox.d.ts.map +1 -1
  364. package/dist/listbox/createOption.d.ts +6 -0
  365. package/dist/listbox/createOption.d.ts.map +1 -1
  366. package/dist/listbox/index.js +2 -0
  367. package/dist/listbox/index.jsx +2 -0
  368. package/dist/live-announcer/index.js +2 -0
  369. package/dist/live-announcer/index.jsx +2 -0
  370. package/dist/menu/createMenu.d.ts +7 -4
  371. package/dist/menu/createMenu.d.ts.map +1 -1
  372. package/dist/menu/createMenuItem.d.ts +9 -1
  373. package/dist/menu/createMenuItem.d.ts.map +1 -1
  374. package/dist/menu/index.js +2 -0
  375. package/dist/menu/index.jsx +2 -0
  376. package/dist/meter/index.js +2 -0
  377. package/dist/meter/index.jsx +2 -0
  378. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  379. package/dist/numberfield/index.js +2 -0
  380. package/dist/numberfield/index.jsx +2 -0
  381. package/dist/overlays/index.js +4 -0
  382. package/dist/overlays/index.jsx +4 -0
  383. package/dist/popover/calculatePosition.d.ts +2 -0
  384. package/dist/popover/calculatePosition.d.ts.map +1 -1
  385. package/dist/popover/createOverlayPosition.d.ts +8 -0
  386. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  387. package/dist/popover/index.js +2 -0
  388. package/dist/popover/index.jsx +2 -0
  389. package/dist/progress/index.js +2 -0
  390. package/dist/progress/index.jsx +2 -0
  391. package/dist/radio/createRadio.d.ts +2 -0
  392. package/dist/radio/createRadio.d.ts.map +1 -1
  393. package/dist/radio/index.js +2 -0
  394. package/dist/radio/index.jsx +2 -0
  395. package/dist/searchfield/index.js +2 -0
  396. package/dist/searchfield/index.jsx +2 -0
  397. package/dist/select/createSelect.d.ts.map +1 -1
  398. package/dist/select/index.js +2 -0
  399. package/dist/select/index.jsx +2 -0
  400. package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
  401. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
  402. package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
  403. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
  404. package/dist/selection/constants.d.ts +15 -0
  405. package/dist/selection/constants.d.ts.map +1 -0
  406. package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
  407. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
  408. package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
  409. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
  410. package/dist/selection/createSelectableCollection.d.ts +69 -0
  411. package/dist/selection/createSelectableCollection.d.ts.map +1 -0
  412. package/dist/selection/createSelectableItem.d.ts +154 -0
  413. package/dist/selection/createSelectableItem.d.ts.map +1 -0
  414. package/dist/selection/createSelectableList.d.ts +43 -0
  415. package/dist/selection/createSelectableList.d.ts.map +1 -0
  416. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  417. package/dist/selection/index.d.ts +9 -0
  418. package/dist/selection/index.d.ts.map +1 -1
  419. package/dist/selection/index.js +4 -0
  420. package/dist/selection/index.jsx +4 -0
  421. package/dist/selection/selectItem.d.ts +29 -0
  422. package/dist/selection/selectItem.d.ts.map +1 -0
  423. package/dist/selection/utils.d.ts +40 -0
  424. package/dist/selection/utils.d.ts.map +1 -0
  425. package/dist/separator/index.js +2 -0
  426. package/dist/separator/index.jsx +2 -0
  427. package/dist/slider/createSlider.d.ts.map +1 -1
  428. package/dist/slider/index.js +2 -0
  429. package/dist/slider/index.jsx +2 -0
  430. package/dist/ssr/index.d.ts +17 -0
  431. package/dist/ssr/index.d.ts.map +1 -1
  432. package/dist/ssr/index.js +299 -0
  433. package/dist/ssr/index.js.map +1 -0
  434. package/dist/ssr/index.jsx +292 -0
  435. package/dist/ssr/index.jsx.map +1 -0
  436. package/dist/steplist/index.js +2 -0
  437. package/dist/steplist/index.jsx +2 -0
  438. package/dist/switch/createSwitch.d.ts +4 -0
  439. package/dist/switch/createSwitch.d.ts.map +1 -1
  440. package/dist/switch/index.js +2 -0
  441. package/dist/switch/index.jsx +2 -0
  442. package/dist/table/createTable.d.ts.map +1 -1
  443. package/dist/table/createTableRow.d.ts +1 -1
  444. package/dist/table/createTableRow.d.ts.map +1 -1
  445. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  446. package/dist/table/index.js +2 -0
  447. package/dist/table/index.jsx +2 -0
  448. package/dist/table/types.d.ts +27 -1
  449. package/dist/table/types.d.ts.map +1 -1
  450. package/dist/tabs/createTabs.d.ts +4 -3
  451. package/dist/tabs/createTabs.d.ts.map +1 -1
  452. package/dist/tabs/index.js +2 -0
  453. package/dist/tabs/index.jsx +2 -0
  454. package/dist/tag/createTag.d.ts +2 -0
  455. package/dist/tag/createTag.d.ts.map +1 -1
  456. package/dist/tag/index.js +2 -0
  457. package/dist/tag/index.jsx +2 -0
  458. package/dist/textfield/index.js +2 -0
  459. package/dist/textfield/index.jsx +2 -0
  460. package/dist/toast/createToast.d.ts.map +1 -1
  461. package/dist/toast/index.js +2 -0
  462. package/dist/toast/index.jsx +2 -0
  463. package/dist/toggle/createToggle.d.ts +4 -0
  464. package/dist/toggle/createToggle.d.ts.map +1 -1
  465. package/dist/toggle/index.js +3 -0
  466. package/dist/toggle/index.jsx +3 -0
  467. package/dist/toolbar/createToolbar.d.ts +1 -1
  468. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  469. package/dist/toolbar/index.js +2 -0
  470. package/dist/toolbar/index.jsx +2 -0
  471. package/dist/tooltip/index.js +2 -0
  472. package/dist/tooltip/index.jsx +2 -0
  473. package/dist/tree/createTree.d.ts +5 -1
  474. package/dist/tree/createTree.d.ts.map +1 -1
  475. package/dist/tree/createTreeItem.d.ts +1 -1
  476. package/dist/tree/createTreeItem.d.ts.map +1 -1
  477. package/dist/tree/index.js +2 -0
  478. package/dist/tree/index.jsx +2 -0
  479. package/dist/tree/types.d.ts +10 -0
  480. package/dist/tree/types.d.ts.map +1 -1
  481. package/dist/utils/animation.d.ts +60 -0
  482. package/dist/utils/animation.d.ts.map +1 -0
  483. package/dist/utils/dom.d.ts +48 -2
  484. package/dist/utils/dom.d.ts.map +1 -1
  485. package/dist/utils/index.d.ts +4 -1
  486. package/dist/utils/index.d.ts.map +1 -1
  487. package/dist/utils/index.js +5 -0
  488. package/dist/utils/index.jsx +5 -0
  489. package/dist/utils/keyboard.d.ts +17 -0
  490. package/dist/utils/keyboard.d.ts.map +1 -0
  491. package/dist/utils/mergeProps.d.ts.map +1 -1
  492. package/dist/utils/scrollIntoView.d.ts +30 -0
  493. package/dist/utils/scrollIntoView.d.ts.map +1 -0
  494. package/dist/visually-hidden/index.js +2 -0
  495. package/dist/visually-hidden/index.jsx +2 -0
  496. package/package.json +304 -3
  497. package/src/autocomplete/createAutocomplete.ts +67 -21
  498. package/src/calendar/createCalendar.ts +2 -0
  499. package/src/calendar/createCalendarCell.ts +19 -2
  500. package/src/calendar/createCalendarGrid.ts +43 -9
  501. package/src/calendar/createCalendarMonthPicker.ts +105 -0
  502. package/src/calendar/createCalendarYearPicker.ts +144 -0
  503. package/src/calendar/createRangeCalendar.ts +2 -0
  504. package/src/calendar/index.ts +17 -0
  505. package/src/calendar/utils.ts +4 -0
  506. package/src/checkbox/createCheckbox.ts +10 -0
  507. package/src/checkbox/createCheckboxGroupItem.ts +12 -16
  508. package/src/datepicker/createDateSegment.ts +6 -1
  509. package/src/dnd/createDroppableCollection.ts +4 -1
  510. package/src/dnd/utils.ts +27 -3
  511. package/src/focus/FocusScope.tsx +152 -18
  512. package/src/form/createFormValidation.ts +8 -1
  513. package/src/gridlist/createGridList.ts +145 -42
  514. package/src/gridlist/createGridListItem.ts +87 -155
  515. package/src/gridlist/createGridListSection.ts +54 -0
  516. package/src/gridlist/index.ts +3 -0
  517. package/src/gridlist/types.ts +47 -0
  518. package/src/index.ts +40 -0
  519. package/src/interactions/PressEvent.ts +14 -0
  520. package/src/interactions/createInteractionModality.ts +21 -12
  521. package/src/interactions/createKeyboard.ts +10 -0
  522. package/src/interactions/createPress.ts +29 -6
  523. package/src/listbox/createListBox.ts +129 -8
  524. package/src/listbox/createOption.ts +68 -73
  525. package/src/menu/createMenu.ts +93 -16
  526. package/src/menu/createMenuItem.ts +253 -41
  527. package/src/numberfield/createNumberField.ts +82 -14
  528. package/src/popover/calculatePosition.ts +19 -7
  529. package/src/popover/createOverlayPosition.ts +9 -0
  530. package/src/radio/createRadio.ts +19 -2
  531. package/src/select/createSelect.ts +18 -2
  532. package/src/selection/DOMLayoutDelegate.ts +102 -0
  533. package/src/selection/ListKeyboardDelegate.ts +398 -0
  534. package/src/selection/constants.ts +16 -0
  535. package/src/selection/createCollectionRowInteraction.ts +209 -0
  536. package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
  537. package/src/selection/createSelectableCollection.ts +645 -0
  538. package/src/selection/createSelectableItem.ts +498 -0
  539. package/src/selection/createSelectableList.ts +93 -0
  540. package/src/selection/createTypeSelect.ts +112 -51
  541. package/src/selection/index.ts +31 -0
  542. package/src/selection/selectItem.ts +80 -0
  543. package/src/selection/utils.ts +82 -0
  544. package/src/slider/createSlider.ts +48 -1
  545. package/src/ssr/index.tsx +31 -0
  546. package/src/switch/createSwitch.ts +10 -0
  547. package/src/table/createTable.ts +56 -26
  548. package/src/table/createTableRow.ts +198 -203
  549. package/src/table/createTableSelectAllCheckbox.ts +3 -4
  550. package/src/table/types.ts +29 -1
  551. package/src/tabs/createTabs.ts +50 -20
  552. package/src/tag/createTag.ts +9 -4
  553. package/src/toast/createToast.ts +1 -0
  554. package/src/toggle/createToggle.ts +20 -0
  555. package/src/toolbar/createToolbar.ts +43 -42
  556. package/src/tree/createTree.ts +100 -42
  557. package/src/tree/createTreeItem.ts +105 -120
  558. package/src/tree/types.ts +10 -0
  559. package/src/utils/animation.ts +151 -0
  560. package/src/utils/dom.ts +215 -25
  561. package/src/utils/index.ts +8 -0
  562. package/src/utils/keyboard.ts +25 -0
  563. package/src/utils/mergeProps.ts +8 -1
  564. package/src/utils/scrollIntoView.ts +181 -0
  565. package/dist/index.js.map +0 -1
  566. package/dist/index.jsx.map +0 -1
@@ -25,6 +25,7 @@ import {
25
25
  isMac,
26
26
  createGlobalListeners,
27
27
  setEventTarget,
28
+ focusWithoutScrolling,
28
29
  } from "../utils";
29
30
 
30
31
  export { PressEvent, type PointerType } from "./PressEvent";
@@ -83,6 +84,28 @@ function isPressedValue(isPressed: Accessor<boolean> | boolean | undefined): boo
83
84
  return isPressed ?? false;
84
85
  }
85
86
 
87
+ function eventPathContains(parent: EventTarget | null | undefined, event: Event): boolean {
88
+ if (!parent) {
89
+ return false;
90
+ }
91
+
92
+ const target = getEventTarget(event);
93
+ if (
94
+ typeof Node !== "undefined" &&
95
+ parent instanceof Node &&
96
+ target instanceof Node &&
97
+ nodeContains(parent, target)
98
+ ) {
99
+ return true;
100
+ }
101
+
102
+ if (typeof event.composedPath === "function") {
103
+ return event.composedPath().includes(parent);
104
+ }
105
+
106
+ return false;
107
+ }
108
+
86
109
  // Track which links have been programmatically clicked to avoid double activation
87
110
  const linkClickedSet = new WeakSet<HTMLElement>();
88
111
 
@@ -280,7 +303,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
280
303
  const onPointerDown: JSX.EventHandler<HTMLElement, PointerEvent> = (e) => {
281
304
  // Only handle left clicks, and ignore events that bubbled through portals
282
305
  const button = e.button ?? 0;
283
- if (button !== 0 || !nodeContains(e.currentTarget, getEventTarget(e))) {
306
+ if (button !== 0 || !eventPathContains(e.currentTarget, e)) {
284
307
  return;
285
308
  }
286
309
 
@@ -316,7 +339,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
316
339
 
317
340
  // Mouse down handler when using pointer events - only prevents focus, doesn't trigger press
318
341
  const onMouseDownPointer: JSX.EventHandler<HTMLElement, MouseEvent> = (e) => {
319
- if (!nodeContains(e.currentTarget, getEventTarget(e))) {
342
+ if (!eventPathContains(e.currentTarget, e)) {
320
343
  return;
321
344
  }
322
345
 
@@ -341,7 +364,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
341
364
  return;
342
365
  }
343
366
 
344
- const isOverTarget = nodeContains(pressState.target, getEventTarget(e) as Element);
367
+ const isOverTarget = eventPathContains(pressState.target, e);
345
368
  if (isOverTarget && pressState.pointerType != null && pressState.pointerType !== "virtual") {
346
369
  // Pointer released over target - wait for onClick to complete the press sequence.
347
370
  // This matches React-Aria's behavior for compatibility with DOM mutations and third-party libraries.
@@ -366,7 +389,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
366
389
  cancel(e);
367
390
  } else {
368
391
  // Click didn't happen (probably due to stopPropagation), trigger it manually
369
- pressState.target.focus();
392
+ focusWithoutScrolling(pressState.target);
370
393
  pressState.target.click();
371
394
  }
372
395
  }
@@ -400,7 +423,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
400
423
  };
401
424
 
402
425
  const onPointerUpTarget: JSX.EventHandler<HTMLElement, PointerEvent> = (e) => {
403
- if (!nodeContains(e.currentTarget, getEventTarget(e)) || pressState.pointerType === "virtual") {
426
+ if (!eventPathContains(e.currentTarget, e) || pressState.pointerType === "virtual") {
404
427
  return;
405
428
  }
406
429
 
@@ -781,7 +804,7 @@ export function createPress(props: CreatePressProps = {}): PressResult {
781
804
 
782
805
  const onClick: JSX.EventHandler<HTMLElement, MouseEvent> = (e) => {
783
806
  // Don't handle click if it's not on the target
784
- if (!nodeContains(e.currentTarget, e.target as Element)) {
807
+ if (!eventPathContains(e.currentTarget, e)) {
785
808
  return;
786
809
  }
787
810
 
@@ -42,6 +42,17 @@ export interface AriaListBoxProps {
42
42
  shouldSelectOnPressUp?: boolean;
43
43
  /** Whether to focus items on hover. */
44
44
  shouldFocusOnHover?: boolean;
45
+ /** Whether the listbox uses virtual scrolling. */
46
+ isVirtualized?: boolean;
47
+ /** Whether options should use virtual focus instead of receiving DOM focus. */
48
+ shouldUseVirtualFocus?: boolean;
49
+ /** The behavior of links in the collection. */
50
+ linkBehavior?: "action" | "selection" | "override" | "none";
51
+ /**
52
+ * Unstable upstream override that forces items with actions to prefer
53
+ * selection or action behavior.
54
+ */
55
+ UNSTABLE_itemBehavior?: "selection" | "action";
45
56
  /**
46
57
  * Whether keyboard focus movement should also update selection in single selection mode.
47
58
  * @default true
@@ -49,6 +60,28 @@ export interface AriaListBoxProps {
49
60
  shouldSelectOnFocus?: boolean;
50
61
  /** Whether type-to-select is disabled. @default false */
51
62
  disallowTypeAhead?: boolean;
63
+ /**
64
+ * The primary orientation of the items. In a horizontal listbox the Left/Right
65
+ * arrows navigate the list (the block-axis Up/Down arrows still work); in a
66
+ * vertical listbox Left/Right are no-ops, matching upstream's
67
+ * `ListKeyboardDelegate` for a `stack` layout.
68
+ * @default "vertical"
69
+ */
70
+ orientation?: "vertical" | "horizontal";
71
+ /**
72
+ * The text direction, used to resolve the horizontal navigation axis. In a
73
+ * horizontal listbox, RTL flips Left/Right (Right=previous, Left=next).
74
+ * @default "ltr"
75
+ */
76
+ direction?: "ltr" | "rtl";
77
+ /**
78
+ * Whether pressing the Escape key should clear selection in the listbox or not.
79
+ * Most experiences should not modify this option as it eliminates a keyboard
80
+ * user's ability to easily clear selection. Only use if the escape key is being
81
+ * handled externally or should not trigger selection clearing contextually.
82
+ * @default "clearSelection"
83
+ */
84
+ escapeKeyBehavior?: "clearSelection" | "none";
52
85
  }
53
86
 
54
87
  export interface ListBoxAria {
@@ -66,13 +99,28 @@ interface ListBoxData {
66
99
  onAction?: (key: Key) => void;
67
100
  shouldSelectOnPressUp?: boolean;
68
101
  shouldFocusOnHover?: boolean;
102
+ isVirtualized?: boolean;
103
+ shouldUseVirtualFocus?: boolean;
69
104
  isDisabled?: boolean;
105
+ linkBehavior?: "action" | "selection" | "override" | "none";
106
+ UNSTABLE_itemBehavior?: "selection" | "action";
70
107
  }
71
108
 
72
109
  export function getListBoxData(state: ListState): ListBoxData | undefined {
73
110
  return listBoxData.get(state);
74
111
  }
75
112
 
113
+ /**
114
+ * Whether a key should be skipped during keyboard navigation. Disabled keys only
115
+ * block navigation under `disabledBehavior: "all"` (the default); under
116
+ * `"selection"` they stay focusable (selection is still blocked elsewhere).
117
+ * Mirrors `ListKeyboardDelegate.isDisabled` in React Aria, which gates the skip
118
+ * on the resolved `disabledBehavior` from the selection manager.
119
+ */
120
+ function isNavigationDisabled<T>(state: ListState<T>, key: Key): boolean {
121
+ return state.isDisabled(key) && state.disabledBehavior() === "all";
122
+ }
123
+
76
124
  function findNextEnabledKey<T>(
77
125
  state: ListState<T>,
78
126
  currentKey: Key | null,
@@ -88,13 +136,13 @@ function findNextEnabledKey<T>(
88
136
  direction === "next" ? () => collection.getFirstKey() : () => collection.getLastKey();
89
137
 
90
138
  let key = currentKey != null ? getAdjacentKey(currentKey) : getBoundaryKey();
91
- while (key != null && state.isDisabled(key)) {
139
+ while (key != null && isNavigationDisabled(state, key)) {
92
140
  key = getAdjacentKey(key);
93
141
  }
94
142
 
95
143
  if (key == null && wrap) {
96
144
  key = getBoundaryKey();
97
- while (key != null && state.isDisabled(key)) {
145
+ while (key != null && isNavigationDisabled(state, key)) {
98
146
  key = getAdjacentKey(key);
99
147
  }
100
148
  }
@@ -130,12 +178,22 @@ export function createListBox<T>(
130
178
 
131
179
  const updateSharedData = () => {
132
180
  const p = getProps();
181
+ const selectionBehavior = state.selectionBehavior();
182
+ let linkBehavior = p.linkBehavior ?? (selectionBehavior === "replace" ? "action" : "override");
183
+ if (selectionBehavior === "toggle" && linkBehavior === "action") {
184
+ linkBehavior = "override";
185
+ }
186
+
133
187
  listBoxData.set(state, {
134
188
  id,
135
189
  onAction: p.onAction,
136
190
  shouldSelectOnPressUp: p.shouldSelectOnPressUp,
137
191
  shouldFocusOnHover: p.shouldFocusOnHover,
192
+ isVirtualized: p.isVirtualized,
193
+ shouldUseVirtualFocus: p.shouldUseVirtualFocus,
138
194
  isDisabled: p.isDisabled,
195
+ linkBehavior,
196
+ UNSTABLE_itemBehavior: p.UNSTABLE_itemBehavior,
139
197
  });
140
198
  };
141
199
 
@@ -157,7 +215,10 @@ export function createListBox<T>(
157
215
  onBlurWithin: (e) => getProps().onBlur?.(e),
158
216
  onFocusWithinChange: (isFocused) => {
159
217
  getProps().onFocusChange?.(isFocused);
160
- state.setFocused(isFocused);
218
+ // Collection focus lives on the selection manager (upstream tracks it in
219
+ // useSelectableCollection); the ListState-level setFocused may be a
220
+ // widget-level focus state (e.g. Select's trigger focus).
221
+ state.selectionManager.setFocused(isFocused);
161
222
  },
162
223
  });
163
224
 
@@ -200,9 +261,13 @@ export function createListBox<T>(
200
261
 
201
262
  switch (e.key) {
202
263
  case "ArrowDown": {
203
- e.preventDefault();
264
+ // Only consume the key once a target exists. Mirrors
265
+ // useSelectableCollection (ArrowDown, 211-225): preventDefault is called
266
+ // inside `if (nextKey != null)`, so at the last item without wrap the
267
+ // arrow is left alone to bubble (e.g. to scroll an enclosing region).
204
268
  const nextKey = findNextEnabledKey(state, state.focusedKey(), "next", shouldWrap);
205
269
  if (nextKey != null) {
270
+ e.preventDefault();
206
271
  state.setFocusedKey(nextKey);
207
272
  if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === "single") {
208
273
  state.replaceSelection(nextKey);
@@ -213,9 +278,9 @@ export function createListBox<T>(
213
278
  break;
214
279
  }
215
280
  case "ArrowUp": {
216
- e.preventDefault();
217
281
  const prevKey = findNextEnabledKey(state, state.focusedKey(), "prev", shouldWrap);
218
282
  if (prevKey != null) {
283
+ e.preventDefault();
219
284
  state.setFocusedKey(prevKey);
220
285
  if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === "single") {
221
286
  state.replaceSelection(prevKey);
@@ -225,7 +290,41 @@ export function createListBox<T>(
225
290
  }
226
291
  break;
227
292
  }
293
+ case "ArrowRight":
294
+ case "ArrowLeft": {
295
+ // Horizontal orientation promotes the inline axis to the primary
296
+ // navigation axis. Upstream's ListKeyboardDelegate strips
297
+ // getKeyLeftOf/getKeyRightOf for a vertical stack, so Left/Right stay
298
+ // no-ops there; in a horizontal stack they move prev/next, flipped
299
+ // under RTL (Right=next, Left=prev in LTR).
300
+ if (p.orientation !== "horizontal") break;
301
+ const isRtl = p.direction === "rtl";
302
+ const forward = e.key === "ArrowRight" ? !isRtl : isRtl;
303
+ const focusedKey = state.focusedKey();
304
+ // With nothing focused, both directions enter at the first item,
305
+ // mirroring upstream's getFirstKey() fallback for Left and Right.
306
+ const nextKey =
307
+ focusedKey != null
308
+ ? findNextEnabledKey(state, focusedKey, forward ? "next" : "prev", shouldWrap)
309
+ : findNextEnabledKey(state, null, "next", false);
310
+ // As with the block axis, only swallow the key when it moves focus
311
+ // (useSelectableCollection ArrowLeft/Right, 243-280).
312
+ if (nextKey != null) {
313
+ e.preventDefault();
314
+ state.setFocusedKey(nextKey);
315
+ if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === "single") {
316
+ state.replaceSelection(nextKey);
317
+ } else if (e.shiftKey && state.selectionMode() === "multiple") {
318
+ state.extendSelection(nextKey, collection);
319
+ }
320
+ }
321
+ break;
322
+ }
228
323
  case "Home": {
324
+ // Mirror useSelectableCollection (Home, 283-285): with nothing focused,
325
+ // Shift+Home has no anchor to extend a selection from, so leave the
326
+ // event alone (no focus move, no preventDefault).
327
+ if (state.focusedKey() == null && e.shiftKey) break;
229
328
  e.preventDefault();
230
329
  const firstKey = findNextEnabledKey(state, null, "next", false);
231
330
  if (firstKey != null) {
@@ -240,6 +339,8 @@ export function createListBox<T>(
240
339
  break;
241
340
  }
242
341
  case "End": {
342
+ // Mirror useSelectableCollection (End, 300-302): same anchor guard as Home.
343
+ if (state.focusedKey() == null && e.shiftKey) break;
243
344
  e.preventDefault();
244
345
  const lastKey = findNextEnabledKey(state, null, "prev", false);
245
346
  if (lastKey != null) {
@@ -255,9 +356,18 @@ export function createListBox<T>(
255
356
  }
256
357
  case " ":
257
358
  case "Enter": {
359
+ if (e.target !== e.currentTarget) {
360
+ break;
361
+ }
362
+
258
363
  e.preventDefault();
259
364
  const focusedKey = state.focusedKey();
260
- if (focusedKey != null && !state.isDisabled(focusedKey)) {
365
+ // Activation is gated on the navigation-disabled check, not the raw
366
+ // one: under disabledBehavior "selection" a focusable disabled option
367
+ // still fires onAction, mirroring useSelectableItem's allowsActions
368
+ // (manager.isDisabled is gated on "all"). Selection stays blocked —
369
+ // toggleSelection self-guards on the raw disabled check.
370
+ if (focusedKey != null && !isNavigationDisabled(state, focusedKey)) {
261
371
  if (state.selectionMode() !== "none") {
262
372
  state.toggleSelection(focusedKey);
263
373
  }
@@ -273,8 +383,19 @@ export function createListBox<T>(
273
383
  break;
274
384
  }
275
385
  case "Escape": {
276
- e.preventDefault();
277
- if (!state.disallowEmptySelection()) {
386
+ // Mirror useSelectableCollection (Escape, 352-362): only clear the
387
+ // selection — and swallow the event — when escapeKeyBehavior is
388
+ // 'clearSelection', there is actually a selection to clear, and empty
389
+ // selection is allowed. With escapeKeyBehavior 'none', or otherwise,
390
+ // leave Escape alone so an enclosing overlay (popover, dialog, combobox)
391
+ // can handle it.
392
+ if (
393
+ (p.escapeKeyBehavior ?? "clearSelection") === "clearSelection" &&
394
+ !state.disallowEmptySelection() &&
395
+ !state.isEmpty()
396
+ ) {
397
+ e.stopPropagation();
398
+ e.preventDefault();
278
399
  state.clearSelection();
279
400
  }
280
401
  break;
@@ -4,13 +4,13 @@
4
4
  */
5
5
 
6
6
  import { type JSX, type Accessor } from "solid-js";
7
- import { createPress } from "../interactions/createPress";
8
7
  import { createHover, type HoverEvents } from "../interactions/createHover";
9
8
  import { createFocusRing } from "../interactions/createFocusRing";
10
9
  import { mergeProps } from "../utils/mergeProps";
11
10
  import { access, type MaybeAccessor } from "../utils/reactivity";
12
11
  import { getListBoxData } from "./createListBox";
13
12
  import type { ListState, Key } from "@proyecto-viviana/solid-stately";
13
+ import { createSelectableItem, type SelectableItemState } from "../selection/createSelectableItem";
14
14
 
15
15
  export interface AriaOptionProps {
16
16
  /** The unique key for the option. */
@@ -27,6 +27,8 @@ export interface AriaOptionProps {
27
27
  shouldFocusOnHover?: boolean;
28
28
  /** Whether the option should use virtual focus instead of receiving DOM focus. */
29
29
  shouldUseVirtualFocus?: boolean;
30
+ /** Whether the option is contained in a virtual scrolling listbox. */
31
+ isVirtualized?: boolean;
30
32
  /** Whether press-up may occur without the press starting on this option. */
31
33
  allowsDifferentPressOrigin?: boolean;
32
34
  /** Handler called when hover starts. */
@@ -58,6 +60,10 @@ export interface OptionAria {
58
60
  isHovered: Accessor<boolean>;
59
61
  /** Whether the option is disabled. */
60
62
  isDisabled: Accessor<boolean>;
63
+ /** Whether the option may be selected. */
64
+ allowsSelection: Accessor<boolean>;
65
+ /** Whether the option has an action. */
66
+ hasAction: Accessor<boolean>;
61
67
  }
62
68
 
63
69
  /**
@@ -72,81 +78,70 @@ export function createOption<T>(
72
78
 
73
79
  const getData = () => getListBoxData(state);
74
80
 
75
- const isDisabled: Accessor<boolean> = () => {
76
- return Boolean(
77
- getData()?.isDisabled || getProps().isDisabled || state.isDisabled(getProps().key),
78
- );
79
- };
80
-
81
- const isSelected: Accessor<boolean> = () => {
82
- return state.isSelected(getProps().key);
81
+ const shouldSelectOnPressUp = () => {
82
+ return getProps().shouldSelectOnPressUp ?? getData()?.shouldSelectOnPressUp;
83
83
  };
84
84
 
85
- const isFocused: Accessor<boolean> = () => {
86
- return state.focusedKey() === getProps().key;
85
+ const shouldFocusOnHover = () => {
86
+ return getProps().shouldFocusOnHover ?? getData()?.shouldFocusOnHover ?? false;
87
87
  };
88
88
 
89
- const shouldSelectOnPressUp = () => {
90
- return getProps().shouldSelectOnPressUp ?? getData()?.shouldSelectOnPressUp ?? true;
89
+ const shouldUseVirtualFocus = () => {
90
+ return getProps().shouldUseVirtualFocus ?? getData()?.shouldUseVirtualFocus ?? false;
91
91
  };
92
92
 
93
- const shouldUseVirtualFocus = () => {
94
- return getProps().shouldUseVirtualFocus ?? false;
93
+ const isVirtualized = () => {
94
+ return getProps().isVirtualized ?? getData()?.isVirtualized ?? false;
95
95
  };
96
96
 
97
97
  const allowsDifferentPressOrigin = () => {
98
- return getProps().allowsDifferentPressOrigin ?? false;
98
+ return (
99
+ getProps().allowsDifferentPressOrigin ??
100
+ Boolean(shouldSelectOnPressUp() && shouldFocusOnHover())
101
+ );
99
102
  };
100
103
 
101
- const selectAndAction = () => {
102
- const key = getProps().key;
103
- if (state.selectionMode() !== "none") {
104
- state.select(key);
105
- }
106
- getProps().onAction?.();
107
- getData()?.onAction?.(key);
104
+ const isDisabledProp = () => {
105
+ return Boolean(getData()?.isDisabled || getProps().isDisabled);
108
106
  };
109
107
 
110
- const { pressProps, isPressed } = createPress({
111
- get isDisabled() {
112
- return isDisabled();
113
- },
114
- get preventFocusOnPress() {
115
- return shouldUseVirtualFocus();
116
- },
117
- onPressStart(e) {
118
- if (!shouldSelectOnPressUp() && e.pointerType !== "keyboard" && e.pointerType !== "virtual") {
119
- selectAndAction();
120
- }
121
- },
122
- onPressUp(e) {
123
- if (shouldSelectOnPressUp() && allowsDifferentPressOrigin() && e.pointerType === "mouse") {
124
- selectAndAction();
125
- }
126
- },
127
- onPress(e) {
128
- if (
129
- (shouldSelectOnPressUp() && !allowsDifferentPressOrigin()) ||
130
- (shouldSelectOnPressUp() &&
131
- allowsDifferentPressOrigin() &&
132
- e.pointerType !== "keyboard" &&
133
- e.pointerType !== "mouse") ||
134
- e.pointerType === "keyboard" ||
135
- e.pointerType === "virtual"
136
- ) {
137
- selectAndAction();
138
- }
108
+ const optionId = () => getProps().optionId ?? String(getProps().key);
109
+
110
+ const selectableItem = createSelectableItem<T>(
111
+ () => {
112
+ const key = getProps().key;
113
+ const hasAction = getProps().onAction != null || getData()?.onAction != null;
114
+
115
+ return {
116
+ key,
117
+ id: optionId(),
118
+ isDisabled: isDisabledProp(),
119
+ shouldSelectOnPressUp: shouldSelectOnPressUp(),
120
+ allowsDifferentPressOrigin: allowsDifferentPressOrigin(),
121
+ isVirtualized: isVirtualized(),
122
+ shouldUseVirtualFocus: shouldUseVirtualFocus(),
123
+ onAction: hasAction
124
+ ? () => {
125
+ getProps().onAction?.();
126
+ getData()?.onAction?.(key);
127
+ }
128
+ : undefined,
129
+ linkBehavior: getData()?.linkBehavior,
130
+ UNSTABLE_itemBehavior: getData()?.UNSTABLE_itemBehavior,
131
+ };
139
132
  },
140
- });
133
+ state as SelectableItemState<T>,
134
+ () => _ref?.() ?? null,
135
+ );
141
136
 
142
137
  const { hoverProps, isHovered } = createHover({
143
138
  get isDisabled() {
144
- return isDisabled();
139
+ return selectableItem.isDisabled();
145
140
  },
146
141
  onHoverStart(e) {
147
- const shouldFocus = getProps().shouldFocusOnHover ?? getData()?.shouldFocusOnHover;
148
- if (shouldFocus) {
149
- state.setFocusedKey(getProps().key);
142
+ if (shouldFocusOnHover() && !isFocusVisible()) {
143
+ state.selectionManager.setFocused(true);
144
+ state.selectionManager.setFocusedKey(getProps().key);
150
145
  }
151
146
  getProps().onHoverStart?.(e);
152
147
  },
@@ -170,24 +165,22 @@ export function createOption<T>(
170
165
  const ariaLabel = getProps()["aria-label"];
171
166
 
172
167
  return mergeProps(
173
- pressProps as Record<string, unknown>,
168
+ selectableItem.itemProps as Record<string, unknown>,
174
169
  hoverProps as Record<string, unknown>,
175
170
  focusProps as Record<string, unknown>,
176
171
  {
177
172
  role: "option",
178
- id: getProps().optionId ?? String(key),
179
- "data-key": String(key),
180
- "aria-selected": selectionMode !== "none" ? isSelected() : undefined,
181
- "aria-disabled": isDisabled() || undefined,
173
+ id: optionId(),
174
+ "aria-selected": selectionMode !== "none" ? selectableItem.isSelected() : undefined,
175
+ "aria-disabled": selectableItem.isDisabled() || undefined,
182
176
  "aria-label": ariaLabel,
183
177
  "aria-labelledby": !ariaLabel ? labelId : undefined,
184
178
  "aria-describedby": descriptionId,
185
- tabIndex: shouldUseVirtualFocus() ? undefined : isFocused() ? 0 : -1,
186
- "data-selected": isSelected() || undefined,
187
- "data-focused": isFocused() || undefined,
188
- "data-focus-visible": isFocusVisible() || undefined,
189
- "data-pressed": isPressed() || undefined,
190
- "data-disabled": isDisabled() || undefined,
179
+ "data-selected": selectableItem.isSelected() || undefined,
180
+ "data-focused": selectableItem.isFocused() || undefined,
181
+ "data-focus-visible": (selectableItem.isFocused() && isFocusVisible()) || undefined,
182
+ "data-pressed": selectableItem.isPressed() || undefined,
183
+ "data-disabled": selectableItem.isDisabled() || undefined,
191
184
  "data-hovered": isHovered() || undefined,
192
185
  } as Record<string, unknown>,
193
186
  ) as JSX.HTMLAttributes<HTMLElement>;
@@ -198,11 +191,13 @@ export function createOption<T>(
198
191
  descriptionProps: {
199
192
  id: descriptionId,
200
193
  },
201
- isSelected,
202
- isFocused,
203
- isFocusVisible: () => isFocused() && isFocusVisible(),
204
- isPressed,
194
+ isSelected: selectableItem.isSelected,
195
+ isFocused: selectableItem.isFocused,
196
+ isFocusVisible: () => selectableItem.isFocused() && isFocusVisible(),
197
+ isPressed: selectableItem.isPressed,
205
198
  isHovered,
206
- isDisabled,
199
+ isDisabled: selectableItem.isDisabled,
200
+ allowsSelection: selectableItem.allowsSelection,
201
+ hasAction: selectableItem.hasAction,
207
202
  };
208
203
  }