@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
@@ -6,8 +6,10 @@
6
6
  * item text values. Supports multi-character search with debouncing.
7
7
  */
8
8
 
9
+ import { onCleanup } from "solid-js";
9
10
  import type { JSX, Accessor } from "solid-js";
10
11
  import type { Key, Collection, CollectionNode } from "@proyecto-viviana/solid-stately";
12
+ import { createCollator } from "../i18n/createCollator";
11
13
 
12
14
  /**
13
15
  * Controls how long to wait before clearing the typeahead buffer.
@@ -58,16 +60,17 @@ function getStringForKey(key: string): string {
58
60
 
59
61
  /**
60
62
  * Search for a key in the collection that matches the search string.
61
- * Starts searching from the key after `fromKey`, wrapping around if needed.
63
+ * Starts *at* `fromKey` (inclusive) and scans to the end, with no internal
64
+ * wrap; the caller retries from the top to cover earlier items. Matching is
65
+ * locale-aware via the supplied `collator`.
62
66
  */
63
67
  function getKeyForSearch<T>(
64
68
  collection: Collection<T>,
65
69
  search: string,
66
70
  fromKey: Key | null,
71
+ collator: Intl.Collator,
67
72
  isKeyDisabled?: (key: Key) => boolean,
68
73
  ): Key | null {
69
- const searchLower = search.toLowerCase();
70
-
71
74
  // Collect all items in order
72
75
  const items: CollectionNode<T>[] = [];
73
76
  for (const item of collection) {
@@ -78,19 +81,21 @@ function getKeyForSearch<T>(
78
81
 
79
82
  if (items.length === 0) return null;
80
83
 
81
- // Find the starting index
84
+ // Find the starting index. Start *at* the currently focused item (inclusive),
85
+ // mirroring upstream ListKeyboardDelegate.getKeyForSearch (`key = fromKey ||
86
+ // getFirstKey()`): typing a prefix the focused item already matches keeps focus
87
+ // on it instead of advancing to the next match.
82
88
  let startIndex = 0;
83
89
  if (fromKey != null) {
84
90
  const fromIndex = items.findIndex((item) => item.key === fromKey);
85
91
  if (fromIndex !== -1) {
86
- // Start searching from the item AFTER the current one
87
- startIndex = (fromIndex + 1) % items.length;
92
+ startIndex = fromIndex;
88
93
  }
89
94
  }
90
95
 
91
- // Search from startIndex, wrapping around
92
- for (let i = 0; i < items.length; i++) {
93
- const index = (startIndex + i) % items.length;
96
+ // Scan from startIndex to the end (no wrap). The caller retries from the top to
97
+ // cover items before the focused one, matching upstream useTypeSelect.
98
+ for (let index = startIndex; index < items.length; index++) {
94
99
  const item = items[index];
95
100
 
96
101
  // Skip disabled items
@@ -98,9 +103,14 @@ function getKeyForSearch<T>(
98
103
  continue;
99
104
  }
100
105
 
101
- // Check if the text value starts with the search string
106
+ // Match the leading characters of the text value against the search string
107
+ // using locale-aware collation, mirroring upstream ListKeyboardDelegate
108
+ // (`collator.compare(textValue.slice(0, search.length), search) === 0`). The
109
+ // collator's `usage: 'search'` / `sensitivity: 'base'` makes this case- and
110
+ // diacritic-insensitive in a locale-aware way.
102
111
  const textValue = item.textValue || "";
103
- if (textValue.toLowerCase().startsWith(searchLower)) {
112
+ const substring = textValue.slice(0, search.length);
113
+ if (textValue && collator.compare(substring, search) === 0) {
104
114
  return item.key;
105
115
  }
106
116
  }
@@ -129,72 +139,123 @@ export function createTypeSelect<T>(options: TypeSelectOptions<T>): TypeSelectAr
129
139
  timeout: undefined,
130
140
  };
131
141
 
142
+ // Locale-aware search collator, mirroring upstream useSelectableList's
143
+ // `useCollator({ usage: 'search', sensitivity: 'base' })`.
144
+ const collator = createCollator({ usage: "search", sensitivity: "base" });
145
+
146
+ // Append the search buffer, find a matching key (from the focused item,
147
+ // falling back to the whole list), focus it, and (re)start the debounce timer.
148
+ // Shared by both phase handlers below, mirroring the duplicated body in
149
+ // upstream useTypeSelect.
150
+ const searchAndFocus = (): Key | null => {
151
+ const collection = options.collection();
152
+ const currentKey = options.focusedKey();
153
+
154
+ // Prioritize items at/after the focused item, then retry from the top to
155
+ // cover earlier ones (upstream's two getKeyForSearch calls).
156
+ let key = getKeyForSearch(
157
+ collection,
158
+ state.search,
159
+ currentKey,
160
+ collator(),
161
+ options.isKeyDisabled,
162
+ );
163
+ if (key == null) {
164
+ key = getKeyForSearch(collection, state.search, null, collator(), options.isKeyDisabled);
165
+ }
166
+
167
+ if (key != null) {
168
+ options.onFocusedKeyChange(key);
169
+ options.onTypeSelect?.(key);
170
+ }
171
+
172
+ return key;
173
+ };
174
+
175
+ const restartDebounce = () => {
176
+ clearTimeout(state.timeout);
177
+ state.timeout = setTimeout(() => {
178
+ state.search = "";
179
+ }, TYPEAHEAD_DEBOUNCE_WAIT_MS);
180
+ };
181
+
182
+ // Capture phase: mid-search a Spacebar is part of the query, not a selection
183
+ // action, so we consume it before the collection's own keydown handler can act
184
+ // on it. Mirrors upstream useTypeSelect's onKeyDownCapture.
132
185
  const onKeyDownCapture: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {
133
186
  if (options.isDisabled) return;
134
187
 
188
+ if (state.search.length > 0 && e.key === " ") {
189
+ e.preventDefault();
190
+ // Upstream guards this with `!('continuePropagation' in e) ||
191
+ // !e.isPropagationStopped()`. Our raw DOM KeyboardEvents never carry
192
+ // `continuePropagation`, so the guard always holds — stop unconditionally.
193
+ e.stopPropagation();
194
+ state.search += " ";
195
+ searchAndFocus();
196
+ restartDebounce();
197
+ }
198
+ };
199
+
200
+ // Bubble phase: handles ordinary characters (and, in environments where the
201
+ // capture listener above is inert, mid-search Spacebar via its non-bailing
202
+ // branch). Mirrors upstream useTypeSelect's onKeyDown.
203
+ const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {
204
+ if (options.isDisabled) return;
205
+
135
206
  const character = getStringForKey(e.key);
136
207
 
137
- // Ignore non-printable characters, modifier key combos,
138
- // and events that didn't originate from within the element
208
+ // Ignore non-printable keys, Ctrl/Meta/Alt combos (Alt is excluded to match
209
+ // upstream AltGr-only layouts shouldn't drive type-select), events from
210
+ // outside the element, and a leading Space (a common action key).
139
211
  if (
140
212
  !character ||
141
213
  e.ctrlKey ||
142
214
  e.metaKey ||
143
215
  e.altKey ||
144
- !e.currentTarget.contains(e.target as HTMLElement)
216
+ !e.currentTarget.contains(e.target as HTMLElement) ||
217
+ (state.search.length === 0 && character === " ")
145
218
  ) {
146
219
  return;
147
220
  }
148
221
 
149
- // Don't start search with space (common action key)
150
- if (state.search.length === 0 && character === " ") {
151
- return;
152
- }
153
-
154
- // If there's already search text and the user types a space,
155
- // prevent it from triggering selection and include it in the search
156
- if (character === " " && state.search.trim().length > 0) {
157
- e.preventDefault();
158
- e.stopPropagation();
159
- }
160
-
161
- // Append to the search buffer
162
222
  state.search += character;
163
223
 
164
- // Find a matching key
165
- const collection = options.collection();
166
- const currentKey = options.focusedKey();
167
-
168
- // First, try to find a match starting after the current key
169
- let key = getKeyForSearch(collection, state.search, currentKey, options.isKeyDisabled);
170
-
171
- // If no match found, try from the beginning
172
- if (key == null && currentKey != null) {
173
- key = getKeyForSearch(collection, state.search, null, options.isKeyDisabled);
174
- }
224
+ const key = searchAndFocus();
175
225
 
176
226
  if (key != null) {
177
- options.onFocusedKeyChange(key);
178
- options.onTypeSelect?.(key);
179
- }
180
-
181
- // Reset the debounce timer
182
- if (state.timeout !== undefined) {
227
+ e.preventDefault();
228
+ // Our raw DOM events never carry `continuePropagation`, so upstream's
229
+ // `if (!('continuePropagation' in e)) e.stopPropagation()` is unconditional.
230
+ e.stopPropagation();
231
+ } else {
232
+ // Nothing matched even after retrying from the top: type-to-select is done,
233
+ // so reset the buffer and let the key propagate normally.
234
+ state.search = "";
183
235
  clearTimeout(state.timeout);
236
+ state.timeout = undefined;
237
+ return;
184
238
  }
185
- state.timeout = setTimeout(() => {
186
- state.search = "";
187
- }, TYPEAHEAD_DEBOUNCE_WAIT_MS);
239
+
240
+ restartDebounce();
188
241
  };
189
242
 
190
- // Handler for bubble phase (used in test environments and as fallback)
191
- const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = onKeyDownCapture;
243
+ // Mirror upstream's unmount cleanup (a useEffect teardown) so a pending
244
+ // debounce timer never fires after the consumer is disposed.
245
+ onCleanup(() => {
246
+ clearTimeout(state.timeout);
247
+ });
192
248
 
193
249
  return {
194
250
  typeSelectProps: {
195
- // Use capture phase to handle spacebar before other handlers in production
251
+ // Upstream binds `onKeyDownCapture` so Spacebar is handled before the
252
+ // collection's own keydown handler. In Solid a capture handler delivered
253
+ // through a `{...typeSelectProps}` spread is inert (it never fires), so the
254
+ // bubble-phase `onKeyDown` is the live path — and it also covers mid-search
255
+ // Space because its bail check only rejects a *leading* Space. True capture
256
+ // would need a ref-based addEventListener threaded through every consumer;
257
+ // see the typeahead follow-up in upstream-sync.md.
196
258
  onKeyDownCapture,
197
- // Also attach to bubble phase for test environments
198
259
  onKeyDown,
199
260
  } as JSX.HTMLAttributes<HTMLElement>,
200
261
  };
@@ -4,3 +4,34 @@
4
4
  */
5
5
 
6
6
  export { createTypeSelect, type TypeSelectOptions, type TypeSelectAria } from "./createTypeSelect";
7
+ export {
8
+ createScrollIntoViewOnFocus,
9
+ type ScrollIntoViewOnFocusOptions,
10
+ } from "./createScrollIntoViewOnFocus";
11
+ export { selectItem } from "./selectItem";
12
+ export {
13
+ createSelectableItem,
14
+ ITEM_ACTION_EVENT,
15
+ type CreateSelectableItemOptions,
16
+ type SelectableItemAria,
17
+ type LinkBehavior,
18
+ } from "./createSelectableItem";
19
+ export { isNonContiguousSelectionModifier, getItemElement } from "./utils";
20
+ export { FOCUS_EVENT, CLEAR_FOCUS_EVENT } from "./constants";
21
+ export {
22
+ ListKeyboardDelegate,
23
+ type ListKeyboardDelegateOptions,
24
+ type Orientation,
25
+ type Direction,
26
+ } from "./ListKeyboardDelegate";
27
+ export { DOMLayoutDelegate, type LayoutDelegate, type Rect, type Size } from "./DOMLayoutDelegate";
28
+ export {
29
+ createSelectableCollection,
30
+ type CreateSelectableCollectionOptions,
31
+ type SelectableCollectionAria,
32
+ } from "./createSelectableCollection";
33
+ export {
34
+ createSelectableList,
35
+ type CreateSelectableListOptions,
36
+ type SelectableListAria,
37
+ } from "./createSelectableList";
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The aria-layer selection decision, mirroring `@react-aria/selection`'s
3
+ * `useSelectableItem` `onSelect`. This is where the platform-aware modifier
4
+ * resolution lives — react-stately's `SelectionManager.select` only knows
5
+ * `pointerType` + `selectionBehavior`; the ctrl/meta/shift decision belongs one
6
+ * layer up, here, where `isMac` is reachable.
7
+ *
8
+ * The link branch (`linkBehavior` 'selection'/'override'/'none') is deferred to
9
+ * `createSelectableItem` (Phase 1 of the press-path epic); callers here pass
10
+ * non-link items.
11
+ */
12
+
13
+ import type { Accessor } from "solid-js";
14
+ import type {
15
+ Collection,
16
+ Key,
17
+ SelectionBehavior,
18
+ SelectionMode,
19
+ SelectionPressEvent,
20
+ } from "@proyecto-viviana/solid-stately";
21
+
22
+ import { isCtrlKeyPressed } from "../utils/keyboard";
23
+ import { isNonContiguousSelectionModifier } from "./utils";
24
+
25
+ export interface SelectItemState {
26
+ readonly selectionMode: Accessor<SelectionMode>;
27
+ readonly selectionBehavior: Accessor<SelectionBehavior>;
28
+ readonly disallowEmptySelection: Accessor<boolean>;
29
+ isSelected(key: Key): boolean;
30
+ toggleSelection(key: Key): void;
31
+ replaceSelection(key: Key): void;
32
+ extendSelection(toKey: Key, collection: Collection): void;
33
+ }
34
+
35
+ /**
36
+ * Resolve a press/keyboard interaction into a selection mutation on `manager`,
37
+ * faithful to `useSelectableItem.onSelect`. `collection` is required for the
38
+ * shift-extend (contiguous range) path.
39
+ */
40
+ export function selectItem(
41
+ manager: SelectItemState,
42
+ key: Key,
43
+ e: SelectionPressEvent,
44
+ collection: Collection,
45
+ ): void {
46
+ // A keyboard non-contiguous modifier (Alt on Apple devices, Ctrl elsewhere)
47
+ // always toggles, independent of mode/behavior.
48
+ if (e.pointerType === "keyboard" && isNonContiguousSelectionModifier(e)) {
49
+ manager.toggleSelection(key);
50
+ return;
51
+ }
52
+
53
+ if (manager.selectionMode() === "none") {
54
+ return;
55
+ }
56
+
57
+ if (manager.selectionMode() === "single") {
58
+ // Single mode ignores selectionBehavior. Re-selecting the current item
59
+ // deselects it when empty selection is allowed; otherwise it stays
60
+ // selected (replace).
61
+ if (manager.isSelected(key) && !manager.disallowEmptySelection()) {
62
+ manager.toggleSelection(key);
63
+ } else {
64
+ manager.replaceSelection(key);
65
+ }
66
+ } else if (e.shiftKey) {
67
+ manager.extendSelection(key, collection);
68
+ } else if (
69
+ manager.selectionBehavior() === "toggle" ||
70
+ isCtrlKeyPressed(e) ||
71
+ e.pointerType === "touch" ||
72
+ e.pointerType === "virtual"
73
+ ) {
74
+ // touch / virtual (VoiceOver) have no modifier keys, so multi-select is
75
+ // only reachable by toggling.
76
+ manager.toggleSelection(key);
77
+ } else {
78
+ manager.replaceSelection(key);
79
+ }
80
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Selection helpers shared across collection item hooks.
3
+ * Based on @react-aria/selection's utilities.
4
+ */
5
+
6
+ import type { Accessor } from "solid-js";
7
+ import type { Key } from "@proyecto-viviana/solid-stately";
8
+ import { isAppleDevice } from "../utils/platform";
9
+ import { createId } from "../ssr";
10
+
11
+ /**
12
+ * Resolves the DOM element rendered for a collection item by its key, scoped to
13
+ * the owning collection when a `data-collection` id is present. Mirrors
14
+ * `@react-aria/selection`'s `getItemElement`, adapted to take a Solid ref
15
+ * accessor instead of a React ref object.
16
+ */
17
+ export function getItemElement(ref: Accessor<HTMLElement | null>, key: Key): HTMLElement | null {
18
+ const root = ref();
19
+ if (!root) {
20
+ return null;
21
+ }
22
+ let selector = `[data-key="${CSS.escape(String(key))}"]`;
23
+ const collectionId = root.dataset.collection;
24
+ if (collectionId) {
25
+ selector = `[data-collection="${CSS.escape(collectionId)}"]${selector}`;
26
+ }
27
+ return root.querySelector<HTMLElement>(selector);
28
+ }
29
+
30
+ /**
31
+ * A stable, SSR-safe id for a collection, shared between the collection
32
+ * container and its items so {@link getItemElement} can scope a query by
33
+ * `data-collection` (needed to disambiguate nested collections).
34
+ *
35
+ * Divergence from upstream: React's `useCollectionId` keys this WeakMap by the
36
+ * collection object and relies on a render-stable `useId`. A Solid collection is
37
+ * rebuilt with a new identity whenever its items change, so we key by the
38
+ * SelectionManager instance instead — it is created once and never replaced, so
39
+ * the container and its items always resolve to the same entry — and generate
40
+ * the id with our SSR-safe `createId`.
41
+ */
42
+ const collectionIdMap = new WeakMap<object, string>();
43
+
44
+ /**
45
+ * Registers (on first call) and returns the collection id for a SelectionManager.
46
+ * The collection container calls this; its items read the same id via
47
+ * {@link getCollectionId}. Must be called within a reactive owner (uses createId).
48
+ */
49
+ export function registerCollectionId(manager: object): string {
50
+ let id = collectionIdMap.get(manager);
51
+ if (id == null) {
52
+ id = createId();
53
+ collectionIdMap.set(manager, id);
54
+ }
55
+ return id;
56
+ }
57
+
58
+ /**
59
+ * Returns the collection id registered for a SelectionManager, or `undefined`
60
+ * when its container has not registered one (e.g. an item not yet wired into a
61
+ * `createSelectableCollection`). A Solid `undefined` attribute is omitted, so an
62
+ * unregistered item simply renders no `data-collection`.
63
+ */
64
+ export function getCollectionId(manager: object): string | undefined {
65
+ return collectionIdMap.get(manager);
66
+ }
67
+
68
+ /** The modifier-key fields consulted by {@link isNonContiguousSelectionModifier}. */
69
+ interface ModifierKeyEvent {
70
+ altKey?: boolean;
71
+ ctrlKey?: boolean;
72
+ }
73
+
74
+ /**
75
+ * Returns whether the modifier for non-contiguous (toggle) keyboard selection
76
+ * is pressed. Mirrors `@react-aria/selection`'s `isNonContiguousSelectionModifier`:
77
+ * Ctrl + Arrow Up/Down has a system-wide meaning on macOS, so Apple devices use
78
+ * Alt instead; Windows and Ubuntu use Ctrl.
79
+ */
80
+ export function isNonContiguousSelectionModifier(e: ModifierKeyEvent): boolean {
81
+ return isAppleDevice() ? e.altKey === true : e.ctrlKey === true;
82
+ }
@@ -11,6 +11,7 @@ import { filterDOMProps } from "../utils/filterDOMProps";
11
11
  import { focusWithoutScrolling } from "../utils/focus";
12
12
  import { mergeProps } from "../utils/mergeProps";
13
13
  import { createId } from "../ssr";
14
+ import { useLocale } from "../i18n";
14
15
  import { access, type MaybeAccessor } from "../utils/reactivity";
15
16
  import type { SliderState, SliderOrientation } from "@proyecto-viviana/solid-stately";
16
17
 
@@ -61,6 +62,7 @@ export function createSlider(
61
62
  ): SliderAria {
62
63
  const getProps = () => access(props);
63
64
  const id = createId(getProps().id);
65
+ const locale = useLocale();
64
66
 
65
67
  // Generate IDs for associated elements
66
68
  const inputId = `${id}-input`;
@@ -158,6 +160,38 @@ export function createSlider(
158
160
  if (state.isDisabled) return;
159
161
 
160
162
  switch (e.key) {
163
+ case "ArrowRight":
164
+ e.preventDefault();
165
+ if (state.orientation === "horizontal" && locale().direction === "rtl") {
166
+ state.decrement();
167
+ } else {
168
+ state.increment();
169
+ }
170
+ break;
171
+ case "ArrowLeft":
172
+ e.preventDefault();
173
+ if (state.orientation === "horizontal" && locale().direction === "rtl") {
174
+ state.increment();
175
+ } else {
176
+ state.decrement();
177
+ }
178
+ break;
179
+ case "ArrowUp":
180
+ e.preventDefault();
181
+ if (state.orientation === "vertical") {
182
+ state.increment();
183
+ } else {
184
+ state.decrement();
185
+ }
186
+ break;
187
+ case "ArrowDown":
188
+ e.preventDefault();
189
+ if (state.orientation === "vertical") {
190
+ state.decrement();
191
+ } else {
192
+ state.increment();
193
+ }
194
+ break;
161
195
  case "PageUp":
162
196
  e.preventDefault();
163
197
  state.increment(state.pageStep / state.step);
@@ -277,8 +311,20 @@ export function createSlider(
277
311
  const isVertical = state.orientation === "vertical";
278
312
 
279
313
  return {
314
+ role: "slider",
315
+ "aria-valuemin": state.minValue,
316
+ "aria-valuemax": state.maxValue,
317
+ "aria-valuenow": state.value(),
318
+ "aria-valuetext": state.getFormattedValue(),
319
+ "aria-orientation": state.orientation,
320
+ "aria-disabled": state.isDisabled || undefined,
321
+ "aria-labelledby": labelledBy(),
322
+ "aria-label": labelledBy() ? undefined : ariaLabel(),
323
+ tabIndex: state.isDisabled ? undefined : 0,
280
324
  onPointerDown: onThumbPointerDown,
281
325
  onKeyDown: onThumbKeyDown,
326
+ onFocus,
327
+ onBlur,
282
328
  style: {
283
329
  position: "absolute",
284
330
  [isVertical ? "bottom" : "left"]: `${percent * 100}%`,
@@ -297,6 +343,7 @@ export function createSlider(
297
343
  {
298
344
  type: "range",
299
345
  id: inputId,
346
+ "aria-hidden": true,
300
347
  min: state.minValue,
301
348
  max: state.maxValue,
302
349
  step: state.step,
@@ -308,7 +355,7 @@ export function createSlider(
308
355
  "aria-valuetext": state.getFormattedValue(),
309
356
  "aria-labelledby": labelledBy(),
310
357
  "aria-label": labelledBy() ? undefined : ariaLabel(),
311
- tabIndex: state.isDisabled ? undefined : 0,
358
+ tabIndex: -1,
312
359
  onInput: (e: Event) => {
313
360
  const target = e.target as HTMLInputElement;
314
361
  state.setValue(parseFloat(target.value));
package/src/ssr/index.tsx CHANGED
@@ -80,6 +80,37 @@ export function createId(defaultId?: string): string {
80
80
  return ctx.prefix ? `solidaria-${ctx.prefix}-${uniqueId}` : `solidaria-${uniqueId}`;
81
81
  }
82
82
 
83
+ /**
84
+ * Generates an id, but only resolves to it once an element with that id is
85
+ * actually present in the DOM. Returns `undefined` otherwise.
86
+ *
87
+ * This is a 1:1 port of @react-aria/utils's `useSlotId`. It exists so that an
88
+ * `aria-labelledby` can point at an optional slot (e.g. a section header) and
89
+ * automatically fall back to `undefined` when the slot is not rendered, instead
90
+ * of leaving a dangling reference to a non-existent id.
91
+ *
92
+ * The initial value is the generated id so that server and first client render
93
+ * agree (no hydration mismatch); a client-only effect then probes the DOM and
94
+ * clears the value when no matching element exists.
95
+ *
96
+ * @param deps - Accessors re-probed when their values change (mirrors the
97
+ * dependency array of the upstream hook).
98
+ */
99
+ export function createSlotId(deps: Array<Accessor<unknown>> = []): Accessor<string | undefined> {
100
+ const id = createId();
101
+ const [resolvedId, setResolvedId] = createSignal<string | undefined>(id);
102
+
103
+ createEffect(() => {
104
+ // Re-probe when any explicit dependency changes.
105
+ for (const dep of deps) {
106
+ dep();
107
+ }
108
+ setResolvedId(document.getElementById(id) ? id : undefined);
109
+ });
110
+
111
+ return resolvedId;
112
+ }
113
+
83
114
  /**
84
115
  * Provides SSR context to the component tree.
85
116
  *
@@ -21,6 +21,10 @@ export interface SwitchAria {
21
21
  labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;
22
22
  /** Props for the input element. */
23
23
  inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
24
+ /** Props for the switch description element, if any. */
25
+ descriptionProps: JSX.HTMLAttributes<HTMLElement>;
26
+ /** Props for the switch error message element, if any. */
27
+ errorMessageProps: JSX.HTMLAttributes<HTMLElement>;
24
28
  /** Whether the switch is selected. */
25
29
  isSelected: Accessor<boolean>;
26
30
  /** Whether the switch is in a pressed state. */
@@ -56,6 +60,12 @@ export function createSwitch(
56
60
  checked: toggle.isSelected(),
57
61
  };
58
62
  },
63
+ get descriptionProps() {
64
+ return toggle.descriptionProps;
65
+ },
66
+ get errorMessageProps() {
67
+ return toggle.errorMessageProps;
68
+ },
59
69
  isSelected: toggle.isSelected,
60
70
  isPressed: toggle.isPressed,
61
71
  isDisabled: toggle.isDisabled,