@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
@@ -109,15 +109,31 @@ export function createNumberField(
109
109
  get "aria-labelledby"() {
110
110
  return getProps()["aria-labelledby"];
111
111
  },
112
- labelElementType: "span",
112
+ // Upstream react-aria `useNumberField` → `useField` → `useLabel` with the DEFAULT
113
+ // `labelElementType: 'label'`: the S2 NumberField label is a native `<label htmlFor>`
114
+ // (verified against the shipped React DOM: `<label id for=inputId>`). This hardcoded
115
+ // `"span"` was a self-inflicted divergence — it dropped the `for` association and made
116
+ // `NumberFieldLabel` render a `<span>`. Reverted to `"label"` so `createLabel` emits
117
+ // `for: inputId` (the input still also carries `aria-labelledby`, exactly as upstream).
118
+ labelElementType: "label",
113
119
  });
114
120
 
115
- // Get the label text for button aria-labels
116
- const getLabelText = (): string => {
117
- const p = getProps();
118
- if (p["aria-label"]) return p["aria-label"];
119
- if (typeof p.label === "string") return p.label;
120
- return "value";
121
+ // Increment/decrement button labels a 1:1 port of upstream `useNumberField`'s
122
+ // four-case logic. Upstream RAC's `NumberField` component feeds `useNumberField` a
123
+ // BOOLEAN slot for `label` (from `useSlot`), never the label string, so a visible
124
+ // label is NEVER concatenated into the button `aria-label`. Instead: with a visible
125
+ // label the button reads `aria-label: "Increase"` PLUS `aria-labelledby: "<selfId>
126
+ // <labelId>"`; only an explicit `aria-label` (and no visible label) changes the text
127
+ // (`"Increase <aria-label>"`). The prior `Increase ${getLabelText()}` was a
128
+ // self-inflicted divergence that produced "Increase Quantity" where S2 ships
129
+ // "Increase". `fieldLabel` mirrors upstream: `props['aria-label'] || ''` — the visible
130
+ // label string is intentionally excluded (it arrives as a boolean slot in RAC).
131
+ const fieldLabel = (): string => getProps()["aria-label"] ?? "";
132
+ const buttonLabelledBy = (): string | undefined => {
133
+ if (fieldLabel()) return undefined;
134
+ return getProps().label != null
135
+ ? (labelProps.id as string | undefined)
136
+ : getProps()["aria-labelledby"];
121
137
  };
122
138
 
123
139
  // Filter DOM props
@@ -234,6 +250,15 @@ export function createNumberField(
234
250
 
235
251
  incrementTouchPressUp = false;
236
252
  };
253
+ const onIncrementClick = (e: MouseEvent) => {
254
+ if (!state.canIncrement()) {
255
+ e.preventDefault();
256
+ return;
257
+ }
258
+
259
+ state.increment();
260
+ inputRef?.()?.focus();
261
+ };
237
262
 
238
263
  const onDecrementPressStart = (e: PressEvent) => {
239
264
  if (e.pointerType !== "touch") {
@@ -258,6 +283,15 @@ export function createNumberField(
258
283
 
259
284
  decrementTouchPressUp = false;
260
285
  };
286
+ const onDecrementClick = (e: MouseEvent) => {
287
+ if (!state.canDecrement()) {
288
+ e.preventDefault();
289
+ return;
290
+ }
291
+
292
+ state.decrement();
293
+ inputRef?.()?.focus();
294
+ };
261
295
 
262
296
  // Build aria-describedby
263
297
  const getAriaDescribedBy = () => {
@@ -295,11 +329,29 @@ export function createNumberField(
295
329
  autoComplete: "off",
296
330
  autoCorrect: "off",
297
331
  spellcheck: false,
298
- role: "spinbutton",
299
- "aria-valuenow": isNaN(state.numberValue()) ? undefined : state.numberValue(),
300
- "aria-valuemin": state.minValue(),
301
- "aria-valuemax": state.maxValue(),
302
- "aria-valuetext": isNaN(state.numberValue()) ? undefined : state.inputValue(),
332
+ // Upstream routes the input through useFormattedTextField → useTextField →
333
+ // useFocusable, which "always set[s] a tabIndex so that Safari allows
334
+ // focusing native buttons and inputs": `excludeFromTabOrder ? -1 : 0`, then
335
+ // `undefined` when disabled. The input is never excluded, so the rendered
336
+ // DOM carries `tabindex="0"` (absent only when disabled). We hand-roll
337
+ // inputProps (see the spinbutton-override note below) so we must replay that
338
+ // one focusable prop here to stay byte-identical to React's tab order.
339
+ tabIndex: isDisabled ? undefined : 0,
340
+ // Upstream useNumberField wraps useSpinButton but deliberately
341
+ // overrides its output: role=spinbutton can't be focused with
342
+ // VoiceOver, so the input is a plain textbox (inside the role=group
343
+ // wrapper above) and every aria-value* is dropped in favour of
344
+ // aria-roledescription. The formatted value is still announced via the
345
+ // input's own value. Mirror that contract instead of leaking the raw
346
+ // spinbutton semantics.
347
+ //
348
+ // The string MUST match upstream's `stringFormatter.format('numberField')`,
349
+ // whose en-US value is `Number field` (capitalised) — not a lowercase
350
+ // hand-roll. Full locale routing via `createStringFormatter` (as
351
+ // `createDateField` does) is tracked as `intl-roledescription-hardcodes`
352
+ // (also covers the ColorArea/ColorSwatch English hardcodes); this keeps the
353
+ // en-US roledescription byte-identical to React Spectrum in the meantime.
354
+ "aria-roledescription": "Number field",
303
355
  "aria-invalid": p.isInvalid || undefined,
304
356
  "aria-required": p.isRequired || undefined,
305
357
  "aria-describedby": getAriaDescribedBy(),
@@ -323,32 +375,48 @@ export function createNumberField(
323
375
  ) as JSX.InputHTMLAttributes<HTMLInputElement>;
324
376
  },
325
377
  get incrementButtonProps() {
378
+ const labelledBy = buttonLabelledBy();
326
379
  return {
327
380
  id: incrementId,
328
- "aria-label": `Increase ${getLabelText()}`,
381
+ type: "button",
382
+ "aria-label": `Increase ${fieldLabel()}`.trim(),
383
+ "aria-labelledby": labelledBy ? `${incrementId} ${labelledBy}` : undefined,
329
384
  "aria-controls": inputId,
330
385
  excludeFromTabOrder: true,
331
386
  preventFocusOnPress: true,
332
387
  allowFocusWhenDisabled: true,
388
+ get disabled() {
389
+ return !state.canIncrement();
390
+ },
391
+ tabIndex: -1,
333
392
  get isDisabled() {
334
393
  return !state.canIncrement();
335
394
  },
395
+ onClick: onIncrementClick,
336
396
  onPressStart: onIncrementPressStart,
337
397
  onPressUp: onIncrementPressUp,
338
398
  onPressEnd: onIncrementPressEnd,
339
399
  } as AriaButtonProps;
340
400
  },
341
401
  get decrementButtonProps() {
402
+ const labelledBy = buttonLabelledBy();
342
403
  return {
343
404
  id: decrementId,
344
- "aria-label": `Decrease ${getLabelText()}`,
405
+ type: "button",
406
+ "aria-label": `Decrease ${fieldLabel()}`.trim(),
407
+ "aria-labelledby": labelledBy ? `${decrementId} ${labelledBy}` : undefined,
345
408
  "aria-controls": inputId,
346
409
  excludeFromTabOrder: true,
347
410
  preventFocusOnPress: true,
348
411
  allowFocusWhenDisabled: true,
412
+ get disabled() {
413
+ return !state.canDecrement();
414
+ },
415
+ tabIndex: -1,
349
416
  get isDisabled() {
350
417
  return !state.canDecrement();
351
418
  },
419
+ onClick: onDecrementClick,
352
420
  onPressStart: onDecrementPressStart,
353
421
  onPressUp: onDecrementPressUp,
354
422
  onPressEnd: onDecrementPressEnd,
@@ -78,6 +78,8 @@ export interface PositionOpts {
78
78
  crossOffset: number;
79
79
  maxHeight?: number;
80
80
  arrowBoundaryOffset?: number;
81
+ /** Overrides the target element's measured rect (e.g. position relative to a cursor point). */
82
+ targetRect?: Offset | null | undefined;
81
83
  }
82
84
 
83
85
  type HeightGrowthDirection = "top" | "bottom";
@@ -627,8 +629,12 @@ export function getRect(node: Element, ignoreScale: boolean) {
627
629
  return { top, left, width, height };
628
630
  }
629
631
 
630
- function getElementOffset(node: Element, ignoreScale: boolean): Offset {
631
- const { top, left, width, height } = getRect(node, ignoreScale);
632
+ function getElementOffset(
633
+ node: Element,
634
+ ignoreScale: boolean,
635
+ overrideRect?: Offset | null,
636
+ ): Offset {
637
+ const { top, left, width, height } = overrideRect || getRect(node, ignoreScale);
632
638
  const { scrollTop, scrollLeft, clientTop, clientLeft } = document.documentElement;
633
639
  return {
634
640
  top: top + scrollTop - clientTop,
@@ -638,13 +644,18 @@ function getElementOffset(node: Element, ignoreScale: boolean): Offset {
638
644
  };
639
645
  }
640
646
 
641
- function getPosition(node: Element, parent: Element, ignoreScale: boolean): Offset {
647
+ function getPosition(
648
+ node: Element,
649
+ parent: Element,
650
+ ignoreScale: boolean,
651
+ overrideRect?: Offset | null,
652
+ ): Offset {
642
653
  const style = window.getComputedStyle(node);
643
654
  let offset: Offset;
644
655
  if (style.position === "fixed") {
645
- offset = getRect(node, ignoreScale);
656
+ offset = overrideRect || getRect(node, ignoreScale);
646
657
  } else {
647
- offset = getElementOffset(node, ignoreScale);
658
+ offset = getElementOffset(node, ignoreScale, overrideRect);
648
659
  const parentOffset = getElementOffset(parent, ignoreScale);
649
660
  const parentStyle = window.getComputedStyle(parent);
650
661
  parentOffset.top +=
@@ -712,6 +723,7 @@ export function calculatePosition(opts: PositionOpts): PositionResult {
712
723
  maxHeight,
713
724
  arrowSize,
714
725
  arrowBoundaryOffset = 0,
726
+ targetRect,
715
727
  } = opts;
716
728
 
717
729
  const visualViewport = getVisualViewport();
@@ -721,8 +733,8 @@ export function calculatePosition(opts: PositionOpts): PositionResult {
721
733
  const containerPositionStyle = window.getComputedStyle(container).position;
722
734
  const isContainerPositioned = !!containerPositionStyle && containerPositionStyle !== "static";
723
735
  const childOffset: Offset = isViewportContainer
724
- ? getElementOffset(targetNode, false)
725
- : getPosition(targetNode, container, false);
736
+ ? getElementOffset(targetNode, false, targetRect)
737
+ : getPosition(targetNode, container, false, targetRect);
726
738
 
727
739
  if (!isViewportContainer) {
728
740
  const { marginTop, marginLeft } = window.getComputedStyle(targetNode);
@@ -94,6 +94,14 @@ export interface AriaPositionProps extends PositionProps {
94
94
  * @default 0
95
95
  */
96
96
  arrowBoundaryOffset?: number;
97
+ /**
98
+ * Overrides the target element's bounding rectangle. Useful for positioning relative to
99
+ * a specific point such as the mouse cursor (e.g. context menus) or text selection.
100
+ *
101
+ * @default target.getBoundingClientRect()
102
+ * @param target - The target element.
103
+ */
104
+ getTargetRect?: (target: Element) => DOMRect | null | undefined;
97
105
  }
98
106
 
99
107
  export interface PositionAria {
@@ -192,6 +200,7 @@ export function createOverlayPosition(props: AriaPositionProps): PositionAria {
192
200
  maxHeight: maxHeight(),
193
201
  arrowSize: arrowSize() ?? (arrowNode ? getRect(arrowNode, true).width : 0),
194
202
  arrowBoundaryOffset: arrowBoundaryOffset(),
203
+ targetRect: props.getTargetRect?.(targetNode),
195
204
  });
196
205
 
197
206
  if (!result.position) {
@@ -14,6 +14,7 @@ import { mergeProps } from "../utils/mergeProps";
14
14
  import { filterDOMProps } from "../utils/filterDOMProps";
15
15
  import { type MaybeAccessor, access } from "../utils/reactivity";
16
16
  import { isDevEnv } from "../utils/env";
17
+ import { createSlotId } from "../ssr";
17
18
  import { type RadioGroupState, radioGroupSyncVersion } from "@proyecto-viviana/solid-stately";
18
19
  import { radioGroupData } from "./createRadioGroup";
19
20
  import { type PressEvent } from "../interactions/PressEvent";
@@ -62,6 +63,8 @@ export interface RadioAria {
62
63
  labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;
63
64
  /** Props for the input element. */
64
65
  inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
66
+ /** Props for the radio's description element, if any. */
67
+ descriptionProps: JSX.HTMLAttributes<HTMLElement>;
65
68
  /** Whether the radio is disabled. */
66
69
  isDisabled: boolean;
67
70
  /** Whether the radio is currently selected. */
@@ -133,8 +136,8 @@ export function createRadio(
133
136
  // internal `checked` state when clicked, regardless of what the signal says
134
137
  //
135
138
  // To prevent this, we force the input's `checked` DOM property to match our state
136
- // after processing the change. This is the pattern used by Kobalte and other
137
- // SolidJS component libraries.
139
+ // after processing the change. This is a common pattern across SolidJS component
140
+ // libraries (see CREDITS.md for attribution).
138
141
  const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {
139
142
  e.stopPropagation();
140
143
 
@@ -267,6 +270,10 @@ export function createRadio(
267
270
 
268
271
  const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();
269
272
 
273
+ // The radio's own description slot id — resolves only once an element with
274
+ // this id is rendered (e.g. a `<Text slot="description">` child).
275
+ const descriptionId = createSlotId();
276
+
270
277
  return {
271
278
  labelProps: mergeProps(labelPressProps, {
272
279
  onClick: (e: MouseEvent) => e.preventDefault(),
@@ -276,10 +283,17 @@ export function createRadio(
276
283
  const p = getProps();
277
284
  const groupData = getGroupData();
278
285
 
286
+ // Order mirrors upstream useRadio: the user's aria-describedby, then the
287
+ // radio's own description, then the group's error message (when invalid)
288
+ // and the group's shared description.
279
289
  const describedByIds: string[] = [];
280
290
  if (p["aria-describedby"]) {
281
291
  describedByIds.push(p["aria-describedby"]);
282
292
  }
293
+ const ownDescriptionId = descriptionId();
294
+ if (ownDescriptionId) {
295
+ describedByIds.push(ownDescriptionId);
296
+ }
283
297
  if (state.isInvalid && groupData?.errorMessageId) {
284
298
  describedByIds.push(groupData.errorMessageId);
285
299
  }
@@ -302,6 +316,9 @@ export function createRadio(
302
316
  "aria-describedby": ariaDescribedBy,
303
317
  }) as JSX.InputHTMLAttributes<HTMLInputElement>;
304
318
  },
319
+ get descriptionProps() {
320
+ return { id: descriptionId() };
321
+ },
305
322
  isDisabled: isDisabled(),
306
323
  isSelected,
307
324
  isPressed: combinedIsPressed,
@@ -344,15 +344,21 @@ export function createSelect<T>(
344
344
 
345
345
  // Handle focus events
346
346
  const handleFocus = (e: FocusEvent) => {
347
- state.setFocused(true);
348
347
  getProps().onFocus?.(e);
349
348
  getProps().onFocusChange?.(true);
349
+ state.setFocused(true);
350
350
  };
351
351
 
352
352
  const handleBlur = (e: FocusEvent) => {
353
- state.setFocused(false);
353
+ // Focus moving into the open listbox is not a select blur; the menu's own
354
+ // onBlur clears the state when focus leaves the listbox entirely.
355
+ if (state.isOpen()) {
356
+ return;
357
+ }
358
+
354
359
  getProps().onBlur?.(e);
355
360
  getProps().onFocusChange?.(false);
361
+ state.setFocused(false);
356
362
  };
357
363
 
358
364
  return {
@@ -410,6 +416,16 @@ export function createSelect<T>(
410
416
  "aria-labelledby": buttonId,
411
417
  "aria-multiselectable": state.selectionMode() === "multiple" ? true : undefined,
412
418
  tabIndex: -1,
419
+ onBlur: (e: FocusEvent) => {
420
+ // Only a blur that leaves the listbox entirely blurs the select.
421
+ if ((e.currentTarget as Node | null)?.contains(e.relatedTarget as Node)) {
422
+ return;
423
+ }
424
+
425
+ getProps().onBlur?.(e);
426
+ getProps().onFocusChange?.(false);
427
+ state.setFocused(false);
428
+ },
413
429
  } as JSX.HTMLAttributes<HTMLElement>;
414
430
  },
415
431
  get descriptionProps() {
@@ -0,0 +1,102 @@
1
+ /**
2
+ * DOMLayoutDelegate - reads layout information for collection items directly
3
+ * from the DOM, used by {@link ListKeyboardDelegate} for page up/down
4
+ * navigation. Based on @react-aria/selection's `DOMLayoutDelegate`.
5
+ *
6
+ * React → Solid adaptation: the layout delegate captures a Solid ref accessor
7
+ * (`() => HTMLElement | null`) instead of a React `RefObject`; everything else
8
+ * is a faithful port.
9
+ */
10
+
11
+ import type { Accessor } from "solid-js";
12
+ import type { Key } from "@proyecto-viviana/solid-stately";
13
+ import { getItemElement } from "./utils";
14
+
15
+ /** A rectangle in the collection's scroll coordinate space. */
16
+ export interface Rect {
17
+ x: number;
18
+ y: number;
19
+ width: number;
20
+ height: number;
21
+ }
22
+
23
+ /** The size of the collection's scrollable content. */
24
+ export interface Size {
25
+ width: number;
26
+ height: number;
27
+ }
28
+
29
+ /**
30
+ * Provides layout information about the items in a collection. By default this
31
+ * is read from the DOM (see {@link DOMLayoutDelegate}), but a virtualized
32
+ * collection can supply its own implementation. Mirrors @react-types/shared's
33
+ * `LayoutDelegate`, scoped to the members that selection navigation consumes.
34
+ */
35
+ export interface LayoutDelegate {
36
+ /** Returns the rectangle for the item with the given key, in scroll coordinates. */
37
+ getItemRect(key: Key): Rect | null;
38
+ /** Returns the total size of the scrollable content. */
39
+ getContentSize(): Size;
40
+ /** Returns the currently visible rectangle (the scroll viewport). */
41
+ getVisibleRect(): Rect;
42
+ /** Returns the keys between two keys (inclusive), if known without walking the collection. */
43
+ getKeyRange?(from: Key, to: Key): Key[];
44
+ /** Returns the key spatially to the left of the given key, if known. */
45
+ getKeyLeftOf?(key: Key): Key | null;
46
+ /** Returns the key spatially to the right of the given key, if known. */
47
+ getKeyRightOf?(key: Key): Key | null;
48
+ /** Returns the key spatially above the given key, if known. */
49
+ getKeyAbove?(key: Key): Key | null;
50
+ /** Returns the key spatially below the given key, if known. */
51
+ getKeyBelow?(key: Key): Key | null;
52
+ }
53
+
54
+ /**
55
+ * A {@link LayoutDelegate} that measures items via the DOM.
56
+ */
57
+ export class DOMLayoutDelegate implements LayoutDelegate {
58
+ private ref: Accessor<HTMLElement | null>;
59
+
60
+ constructor(ref: Accessor<HTMLElement | null>) {
61
+ this.ref = ref;
62
+ }
63
+
64
+ getItemRect(key: Key): Rect | null {
65
+ const container = this.ref();
66
+ if (!container) {
67
+ return null;
68
+ }
69
+ const item = key != null ? getItemElement(this.ref, key) : null;
70
+ if (!item) {
71
+ return null;
72
+ }
73
+
74
+ const containerRect = container.getBoundingClientRect();
75
+ const itemRect = item.getBoundingClientRect();
76
+
77
+ return {
78
+ x: itemRect.left - containerRect.left - container.clientLeft + container.scrollLeft,
79
+ y: itemRect.top - containerRect.top - container.clientTop + container.scrollTop,
80
+ width: itemRect.width,
81
+ height: itemRect.height,
82
+ };
83
+ }
84
+
85
+ getContentSize(): Size {
86
+ const container = this.ref();
87
+ return {
88
+ width: container?.scrollWidth ?? 0,
89
+ height: container?.scrollHeight ?? 0,
90
+ };
91
+ }
92
+
93
+ getVisibleRect(): Rect {
94
+ const container = this.ref();
95
+ return {
96
+ x: container?.scrollLeft ?? 0,
97
+ y: container?.scrollTop ?? 0,
98
+ width: container?.clientWidth ?? 0,
99
+ height: container?.clientHeight ?? 0,
100
+ };
101
+ }
102
+ }