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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1377) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/dist/_chunk/DragManager.js +71 -25
  4. package/dist/_chunk/DragManager.js.map +1 -1
  5. package/dist/_chunk/DragManager.jsx +71 -25
  6. package/dist/_chunk/DragManager.jsx.map +1 -1
  7. package/dist/_chunk/FocusScope.js +281 -66
  8. package/dist/_chunk/FocusScope.js.map +1 -1
  9. package/dist/_chunk/FocusScope.jsx +274 -55
  10. package/dist/_chunk/FocusScope.jsx.map +1 -1
  11. package/dist/_chunk/actiongroup.js +43 -19
  12. package/dist/_chunk/actiongroup.js.map +1 -1
  13. package/dist/_chunk/actiongroup.jsx +43 -19
  14. package/dist/_chunk/actiongroup.jsx.map +1 -1
  15. package/dist/_chunk/announce.js +19 -6
  16. package/dist/_chunk/announce.js.map +1 -1
  17. package/dist/_chunk/announce.jsx +19 -6
  18. package/dist/_chunk/announce.jsx.map +1 -1
  19. package/dist/_chunk/ariaHideOutside.js +212 -10
  20. package/dist/_chunk/ariaHideOutside.js.map +1 -1
  21. package/dist/_chunk/ariaHideOutside.jsx +212 -10
  22. package/dist/_chunk/ariaHideOutside.jsx.map +1 -1
  23. package/dist/_chunk/autocomplete.js +26 -7
  24. package/dist/_chunk/autocomplete.js.map +1 -1
  25. package/dist/_chunk/autocomplete.jsx +26 -7
  26. package/dist/_chunk/autocomplete.jsx.map +1 -1
  27. package/dist/_chunk/breadcrumbs.js +17 -2
  28. package/dist/_chunk/breadcrumbs.js.map +1 -1
  29. package/dist/_chunk/breadcrumbs.jsx +17 -2
  30. package/dist/_chunk/breadcrumbs.jsx.map +1 -1
  31. package/dist/_chunk/button.js +53 -20
  32. package/dist/_chunk/button.js.map +1 -1
  33. package/dist/_chunk/button.jsx +53 -20
  34. package/dist/_chunk/button.jsx.map +1 -1
  35. package/dist/_chunk/calendar.js +341 -56
  36. package/dist/_chunk/calendar.js.map +1 -1
  37. package/dist/_chunk/calendar.jsx +341 -56
  38. package/dist/_chunk/calendar.jsx.map +1 -1
  39. package/dist/_chunk/checkbox.js +69 -26
  40. package/dist/_chunk/checkbox.js.map +1 -1
  41. package/dist/_chunk/checkbox.jsx +69 -26
  42. package/dist/_chunk/checkbox.jsx.map +1 -1
  43. package/dist/_chunk/color.js +307 -48
  44. package/dist/_chunk/color.js.map +1 -1
  45. package/dist/_chunk/color.jsx +307 -48
  46. package/dist/_chunk/color.jsx.map +1 -1
  47. package/dist/_chunk/combobox.js +193 -103
  48. package/dist/_chunk/combobox.js.map +1 -1
  49. package/dist/_chunk/combobox.jsx +193 -103
  50. package/dist/_chunk/combobox.jsx.map +1 -1
  51. package/dist/_chunk/constants.js +12 -0
  52. package/dist/_chunk/constants.js.map +1 -1
  53. package/dist/_chunk/constants.jsx +12 -0
  54. package/dist/_chunk/constants.jsx.map +1 -1
  55. package/dist/_chunk/createCollator.js +12 -0
  56. package/dist/_chunk/createCollator.js.map +1 -1
  57. package/dist/_chunk/createCollator.jsx +12 -0
  58. package/dist/_chunk/createCollator.jsx.map +1 -1
  59. package/dist/_chunk/createCollectionRowInteraction.js +50 -13
  60. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -1
  61. package/dist/_chunk/createCollectionRowInteraction.jsx +50 -13
  62. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -1
  63. package/dist/_chunk/createField.js +35 -25
  64. package/dist/_chunk/createField.js.map +1 -1
  65. package/dist/_chunk/createField.jsx +35 -25
  66. package/dist/_chunk/createField.jsx.map +1 -1
  67. package/dist/_chunk/createFocus.js +18 -5
  68. package/dist/_chunk/createFocus.js.map +1 -1
  69. package/dist/_chunk/createFocus.jsx +18 -5
  70. package/dist/_chunk/createFocus.jsx.map +1 -1
  71. package/dist/_chunk/createFocusRing.js +16 -7
  72. package/dist/_chunk/createFocusRing.js.map +1 -1
  73. package/dist/_chunk/createFocusRing.jsx +16 -7
  74. package/dist/_chunk/createFocusRing.jsx.map +1 -1
  75. package/dist/_chunk/createFocusWithin.js +16 -4
  76. package/dist/_chunk/createFocusWithin.js.map +1 -1
  77. package/dist/_chunk/createFocusWithin.jsx +16 -4
  78. package/dist/_chunk/createFocusWithin.jsx.map +1 -1
  79. package/dist/_chunk/createFocusable.js +39 -53
  80. package/dist/_chunk/createFocusable.js.map +1 -1
  81. package/dist/_chunk/createFocusable.jsx +39 -53
  82. package/dist/_chunk/createFocusable.jsx.map +1 -1
  83. package/dist/_chunk/createFormReset.js +24 -12
  84. package/dist/_chunk/createFormReset.js.map +1 -1
  85. package/dist/_chunk/createFormReset.jsx +24 -12
  86. package/dist/_chunk/createFormReset.jsx.map +1 -1
  87. package/dist/_chunk/createFormValidation.js +41 -17
  88. package/dist/_chunk/createFormValidation.js.map +1 -1
  89. package/dist/_chunk/createFormValidation.jsx +41 -17
  90. package/dist/_chunk/createFormValidation.jsx.map +1 -1
  91. package/dist/_chunk/createHover.js +56 -42
  92. package/dist/_chunk/createHover.js.map +1 -1
  93. package/dist/_chunk/createHover.jsx +56 -42
  94. package/dist/_chunk/createHover.jsx.map +1 -1
  95. package/dist/_chunk/createKeyboard.js +205 -0
  96. package/dist/_chunk/createKeyboard.js.map +1 -0
  97. package/dist/_chunk/createKeyboard.jsx +205 -0
  98. package/dist/_chunk/createKeyboard.jsx.map +1 -0
  99. package/dist/_chunk/createLabel.js +17 -4
  100. package/dist/_chunk/createLabel.js.map +1 -1
  101. package/dist/_chunk/createLabel.jsx +17 -4
  102. package/dist/_chunk/createLabel.jsx.map +1 -1
  103. package/dist/_chunk/createLabels.js +14 -2
  104. package/dist/_chunk/createLabels.js.map +1 -1
  105. package/dist/_chunk/createLabels.jsx +14 -2
  106. package/dist/_chunk/createLabels.jsx.map +1 -1
  107. package/dist/_chunk/createLandmark.js +19 -3
  108. package/dist/_chunk/createLandmark.js.map +1 -1
  109. package/dist/_chunk/createLandmark.jsx +19 -3
  110. package/dist/_chunk/createLandmark.jsx.map +1 -1
  111. package/dist/_chunk/createLongPress.js +105 -0
  112. package/dist/_chunk/createLongPress.js.map +1 -0
  113. package/dist/_chunk/createLongPress.jsx +105 -0
  114. package/dist/_chunk/createLongPress.jsx.map +1 -0
  115. package/dist/_chunk/createOverlay.js +220 -111
  116. package/dist/_chunk/createOverlay.js.map +1 -1
  117. package/dist/_chunk/createOverlay.jsx +220 -111
  118. package/dist/_chunk/createOverlay.jsx.map +1 -1
  119. package/dist/_chunk/createOverlayTrigger.js +58 -0
  120. package/dist/_chunk/createOverlayTrigger.js.map +1 -0
  121. package/dist/_chunk/createOverlayTrigger.jsx +58 -0
  122. package/dist/_chunk/createOverlayTrigger.jsx.map +1 -0
  123. package/dist/_chunk/createPress.js +38 -28
  124. package/dist/_chunk/createPress.js.map +1 -1
  125. package/dist/_chunk/createPress.jsx +38 -28
  126. package/dist/_chunk/createPress.jsx.map +1 -1
  127. package/dist/_chunk/createProgressBar.js +17 -4
  128. package/dist/_chunk/createProgressBar.js.map +1 -1
  129. package/dist/_chunk/createProgressBar.jsx +17 -4
  130. package/dist/_chunk/createProgressBar.jsx.map +1 -1
  131. package/dist/_chunk/createSelectableItem.js +58 -20
  132. package/dist/_chunk/createSelectableItem.js.map +1 -1
  133. package/dist/_chunk/createSelectableItem.jsx +58 -20
  134. package/dist/_chunk/createSelectableItem.jsx.map +1 -1
  135. package/dist/_chunk/createSelectableList.js +776 -0
  136. package/dist/_chunk/createSelectableList.js.map +1 -0
  137. package/dist/_chunk/createSelectableList.jsx +776 -0
  138. package/dist/_chunk/createSelectableList.jsx.map +1 -0
  139. package/dist/_chunk/createStringFormatter.js +350 -5
  140. package/dist/_chunk/createStringFormatter.js.map +1 -1
  141. package/dist/_chunk/createStringFormatter.jsx +350 -5
  142. package/dist/_chunk/createStringFormatter.jsx.map +1 -1
  143. package/dist/_chunk/createToggle.js +68 -19
  144. package/dist/_chunk/createToggle.js.map +1 -1
  145. package/dist/_chunk/createToggle.jsx +68 -19
  146. package/dist/_chunk/createToggle.jsx.map +1 -1
  147. package/dist/_chunk/createTypeSelect.js +15 -3
  148. package/dist/_chunk/createTypeSelect.js.map +1 -1
  149. package/dist/_chunk/createTypeSelect.jsx +15 -3
  150. package/dist/_chunk/createTypeSelect.jsx.map +1 -1
  151. package/dist/_chunk/{visually-hidden.js → createVisuallyHidden.js} +16 -4
  152. package/dist/_chunk/createVisuallyHidden.js.map +1 -0
  153. package/dist/_chunk/{visually-hidden.jsx → createVisuallyHidden.jsx} +16 -4
  154. package/dist/_chunk/createVisuallyHidden.jsx.map +1 -0
  155. package/dist/_chunk/datepicker.js +687 -602
  156. package/dist/_chunk/datepicker.js.map +1 -1
  157. package/dist/_chunk/datepicker.jsx +687 -602
  158. package/dist/_chunk/datepicker.jsx.map +1 -1
  159. package/dist/_chunk/dialog.js +49 -19
  160. package/dist/_chunk/dialog.js.map +1 -1
  161. package/dist/_chunk/dialog.jsx +49 -19
  162. package/dist/_chunk/dialog.jsx.map +1 -1
  163. package/dist/_chunk/disclosure.js +48 -28
  164. package/dist/_chunk/disclosure.js.map +1 -1
  165. package/dist/_chunk/disclosure.jsx +48 -28
  166. package/dist/_chunk/disclosure.jsx.map +1 -1
  167. package/dist/_chunk/dnd.js +1340 -1172
  168. package/dist/_chunk/dnd.js.map +1 -1
  169. package/dist/_chunk/dnd.jsx +1340 -1172
  170. package/dist/_chunk/dnd.jsx.map +1 -1
  171. package/dist/_chunk/dom.js +1200 -0
  172. package/dist/_chunk/dom.js.map +1 -0
  173. package/dist/_chunk/dom.jsx +1200 -0
  174. package/dist/_chunk/dom.jsx.map +1 -0
  175. package/dist/_chunk/env.js +1 -57
  176. package/dist/_chunk/env.js.map +1 -1
  177. package/dist/_chunk/env.jsx +1 -57
  178. package/dist/_chunk/env.jsx.map +1 -1
  179. package/dist/_chunk/filterDOMProps.js +32 -7
  180. package/dist/_chunk/filterDOMProps.js.map +1 -1
  181. package/dist/_chunk/filterDOMProps.jsx +32 -7
  182. package/dist/_chunk/filterDOMProps.jsx.map +1 -1
  183. package/dist/_chunk/focus.js +570 -338
  184. package/dist/_chunk/focus.js.map +1 -1
  185. package/dist/_chunk/focus.jsx +570 -338
  186. package/dist/_chunk/focus.jsx.map +1 -1
  187. package/dist/_chunk/grid.js +62 -8
  188. package/dist/_chunk/grid.js.map +1 -1
  189. package/dist/_chunk/grid.jsx +62 -8
  190. package/dist/_chunk/grid.jsx.map +1 -1
  191. package/dist/_chunk/gridlist.js +192 -53
  192. package/dist/_chunk/gridlist.js.map +1 -1
  193. package/dist/_chunk/gridlist.jsx +192 -53
  194. package/dist/_chunk/gridlist.jsx.map +1 -1
  195. package/dist/_chunk/i18n.js +68 -1
  196. package/dist/_chunk/i18n.js.map +1 -1
  197. package/dist/_chunk/i18n.jsx +68 -1
  198. package/dist/_chunk/i18n.jsx.map +1 -1
  199. package/dist/_chunk/interactions.js +38 -102
  200. package/dist/_chunk/interactions.js.map +1 -1
  201. package/dist/_chunk/interactions.jsx +38 -100
  202. package/dist/_chunk/interactions.jsx.map +1 -1
  203. package/dist/_chunk/intl.js +280 -0
  204. package/dist/_chunk/intl.js.map +1 -0
  205. package/dist/_chunk/intl.jsx +280 -0
  206. package/dist/_chunk/intl.jsx.map +1 -0
  207. package/dist/_chunk/link.js +15 -4
  208. package/dist/_chunk/link.js.map +1 -1
  209. package/dist/_chunk/link.jsx +15 -4
  210. package/dist/_chunk/link.jsx.map +1 -1
  211. package/dist/_chunk/listbox.js +99 -175
  212. package/dist/_chunk/listbox.js.map +1 -1
  213. package/dist/_chunk/listbox.jsx +99 -175
  214. package/dist/_chunk/listbox.jsx.map +1 -1
  215. package/dist/_chunk/locale.js +58 -12
  216. package/dist/_chunk/locale.js.map +1 -1
  217. package/dist/_chunk/locale.jsx +57 -11
  218. package/dist/_chunk/locale.jsx.map +1 -1
  219. package/dist/_chunk/menu.js +298 -57
  220. package/dist/_chunk/menu.js.map +1 -1
  221. package/dist/_chunk/menu.jsx +298 -57
  222. package/dist/_chunk/menu.jsx.map +1 -1
  223. package/dist/_chunk/mergeProps.js +216 -0
  224. package/dist/_chunk/mergeProps.js.map +1 -0
  225. package/dist/_chunk/mergeProps.jsx +216 -0
  226. package/dist/_chunk/mergeProps.jsx.map +1 -0
  227. package/dist/_chunk/meter.js +16 -4
  228. package/dist/_chunk/meter.js.map +1 -1
  229. package/dist/_chunk/meter.jsx +16 -4
  230. package/dist/_chunk/meter.jsx.map +1 -1
  231. package/dist/_chunk/numberfield.js +167 -22
  232. package/dist/_chunk/numberfield.js.map +1 -1
  233. package/dist/_chunk/numberfield.jsx +167 -22
  234. package/dist/_chunk/numberfield.jsx.map +1 -1
  235. package/dist/_chunk/overlays.js +87 -74
  236. package/dist/_chunk/overlays.js.map +1 -1
  237. package/dist/_chunk/overlays.jsx +71 -57
  238. package/dist/_chunk/overlays.jsx.map +1 -1
  239. package/dist/_chunk/owner.js +23 -0
  240. package/dist/_chunk/owner.js.map +1 -0
  241. package/dist/_chunk/owner.jsx +23 -0
  242. package/dist/_chunk/owner.jsx.map +1 -0
  243. package/dist/_chunk/popover.js +180 -42
  244. package/dist/_chunk/popover.js.map +1 -1
  245. package/dist/_chunk/popover.jsx +180 -42
  246. package/dist/_chunk/popover.jsx.map +1 -1
  247. package/dist/_chunk/radio.js +92 -32
  248. package/dist/_chunk/radio.js.map +1 -1
  249. package/dist/_chunk/radio.jsx +92 -32
  250. package/dist/_chunk/radio.jsx.map +1 -1
  251. package/dist/_chunk/reactivity.js.map +1 -1
  252. package/dist/_chunk/reactivity.jsx.map +1 -1
  253. package/dist/_chunk/refs.js +41 -0
  254. package/dist/_chunk/refs.js.map +1 -0
  255. package/dist/_chunk/refs.jsx +41 -0
  256. package/dist/_chunk/refs.jsx.map +1 -0
  257. package/dist/_chunk/searchfield.js +69 -3
  258. package/dist/_chunk/searchfield.js.map +1 -1
  259. package/dist/_chunk/searchfield.jsx +69 -3
  260. package/dist/_chunk/searchfield.jsx.map +1 -1
  261. package/dist/_chunk/select.js +226 -80
  262. package/dist/_chunk/select.js.map +1 -1
  263. package/dist/_chunk/select.jsx +162 -70
  264. package/dist/_chunk/select.jsx.map +1 -1
  265. package/dist/_chunk/selection.js +20 -638
  266. package/dist/_chunk/selection.js.map +1 -1
  267. package/dist/_chunk/selection.jsx +20 -638
  268. package/dist/_chunk/selection.jsx.map +1 -1
  269. package/dist/_chunk/separator.js +12 -0
  270. package/dist/_chunk/separator.js.map +1 -1
  271. package/dist/_chunk/separator.jsx +12 -0
  272. package/dist/_chunk/separator.jsx.map +1 -1
  273. package/dist/_chunk/slider.js +25 -16
  274. package/dist/_chunk/slider.js.map +1 -1
  275. package/dist/_chunk/slider.jsx +25 -16
  276. package/dist/_chunk/slider.jsx.map +1 -1
  277. package/dist/_chunk/spinbutton.js +52 -42
  278. package/dist/_chunk/spinbutton.js.map +1 -1
  279. package/dist/_chunk/spinbutton.jsx +52 -42
  280. package/dist/_chunk/spinbutton.jsx.map +1 -1
  281. package/dist/_chunk/steplist.js +14 -1
  282. package/dist/_chunk/steplist.js.map +1 -1
  283. package/dist/_chunk/steplist.jsx +14 -1
  284. package/dist/_chunk/steplist.jsx.map +1 -1
  285. package/dist/_chunk/switch.js +21 -3
  286. package/dist/_chunk/switch.js.map +1 -1
  287. package/dist/_chunk/switch.jsx +21 -3
  288. package/dist/_chunk/switch.jsx.map +1 -1
  289. package/dist/_chunk/table.js +666 -88
  290. package/dist/_chunk/table.js.map +1 -1
  291. package/dist/_chunk/table.jsx +666 -88
  292. package/dist/_chunk/table.jsx.map +1 -1
  293. package/dist/_chunk/tabs.js +115 -17
  294. package/dist/_chunk/tabs.js.map +1 -1
  295. package/dist/_chunk/tabs.jsx +115 -17
  296. package/dist/_chunk/tabs.jsx.map +1 -1
  297. package/dist/_chunk/tag.js +240 -39
  298. package/dist/_chunk/tag.js.map +1 -1
  299. package/dist/_chunk/tag.jsx +240 -39
  300. package/dist/_chunk/tag.jsx.map +1 -1
  301. package/dist/_chunk/textfield.js +83 -12
  302. package/dist/_chunk/textfield.js.map +1 -1
  303. package/dist/_chunk/textfield.jsx +83 -12
  304. package/dist/_chunk/textfield.jsx.map +1 -1
  305. package/dist/_chunk/toast.js +61 -28
  306. package/dist/_chunk/toast.js.map +1 -1
  307. package/dist/_chunk/toast.jsx +61 -28
  308. package/dist/_chunk/toast.jsx.map +1 -1
  309. package/dist/_chunk/tokenfield.js +567 -0
  310. package/dist/_chunk/tokenfield.js.map +1 -0
  311. package/dist/_chunk/tokenfield.jsx +567 -0
  312. package/dist/_chunk/tokenfield.jsx.map +1 -0
  313. package/dist/_chunk/toolbar.js +25 -8
  314. package/dist/_chunk/toolbar.js.map +1 -1
  315. package/dist/_chunk/toolbar.jsx +25 -8
  316. package/dist/_chunk/toolbar.jsx.map +1 -1
  317. package/dist/_chunk/tooltip.js +379 -6
  318. package/dist/_chunk/tooltip.js.map +1 -1
  319. package/dist/_chunk/tooltip.jsx +379 -6
  320. package/dist/_chunk/tooltip.jsx.map +1 -1
  321. package/dist/_chunk/tree.js +280 -69
  322. package/dist/_chunk/tree.js.map +1 -1
  323. package/dist/_chunk/tree.jsx +280 -69
  324. package/dist/_chunk/tree.jsx.map +1 -1
  325. package/dist/_chunk/utils.js +192 -150
  326. package/dist/_chunk/utils.js.map +1 -1
  327. package/dist/_chunk/utils.jsx +192 -150
  328. package/dist/_chunk/utils.jsx.map +1 -1
  329. package/dist/_chunk/virtualFocus.js +54 -0
  330. package/dist/_chunk/virtualFocus.js.map +1 -0
  331. package/dist/_chunk/virtualFocus.jsx +54 -0
  332. package/dist/_chunk/virtualFocus.jsx.map +1 -0
  333. package/dist/_chunk/virtualizer.js +202 -0
  334. package/dist/_chunk/virtualizer.js.map +1 -0
  335. package/dist/_chunk/virtualizer.jsx +202 -0
  336. package/dist/_chunk/virtualizer.jsx.map +1 -0
  337. package/dist/actiongroup/createActionGroup.d.ts +2 -1
  338. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  339. package/dist/autocomplete/createAutocomplete.d.ts +1 -9
  340. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  341. package/dist/autocomplete/intl/index.d.ts +13 -0
  342. package/dist/autocomplete/intl/index.d.ts.map +1 -0
  343. package/dist/breadcrumbs/createBreadcrumbs.d.ts +3 -1
  344. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  345. package/dist/breadcrumbs/intl/index.d.ts +13 -0
  346. package/dist/breadcrumbs/intl/index.d.ts.map +1 -0
  347. package/dist/button/createButton.d.ts.map +1 -1
  348. package/dist/button/createToggleButton.d.ts.map +1 -1
  349. package/dist/button/createToggleButtonGroup.d.ts +1 -1
  350. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  351. package/dist/button/types.d.ts +14 -0
  352. package/dist/button/types.d.ts.map +1 -1
  353. package/dist/calendar/createCalendar.d.ts +1 -7
  354. package/dist/calendar/createCalendar.d.ts.map +1 -1
  355. package/dist/calendar/createCalendarCell.d.ts +0 -6
  356. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  357. package/dist/calendar/createCalendarGrid.d.ts +1 -7
  358. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  359. package/dist/calendar/createCalendarMonthPicker.d.ts +0 -8
  360. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -1
  361. package/dist/calendar/createCalendarYearPicker.d.ts +0 -8
  362. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -1
  363. package/dist/calendar/createRangeCalendar.d.ts +13 -7
  364. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  365. package/dist/calendar/createRangeCalendarCell.d.ts +2 -6
  366. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  367. package/dist/calendar/intl/index.d.ts.map +1 -1
  368. package/dist/calendar/utils.d.ts.map +1 -1
  369. package/dist/checkbox/createCheckbox.d.ts +2 -1
  370. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  371. package/dist/checkbox/createCheckboxGroup.d.ts +1 -9
  372. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  373. package/dist/checkbox/createCheckboxGroupItem.d.ts +0 -8
  374. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  375. package/dist/collections/index.d.ts +1 -1
  376. package/dist/collections/index.d.ts.map +1 -1
  377. package/dist/collections/index.js +18 -2
  378. package/dist/collections/index.js.map +1 -1
  379. package/dist/collections/index.jsx +18 -2
  380. package/dist/collections/index.jsx.map +1 -1
  381. package/dist/color/createColorArea.d.ts +2 -7
  382. package/dist/color/createColorArea.d.ts.map +1 -1
  383. package/dist/color/createColorField.d.ts +2 -7
  384. package/dist/color/createColorField.d.ts.map +1 -1
  385. package/dist/color/createColorSlider.d.ts +1 -6
  386. package/dist/color/createColorSlider.d.ts.map +1 -1
  387. package/dist/color/createColorSwatch.d.ts +1 -6
  388. package/dist/color/createColorSwatch.d.ts.map +1 -1
  389. package/dist/color/createColorWheel.d.ts +1 -6
  390. package/dist/color/createColorWheel.d.ts.map +1 -1
  391. package/dist/color/intl/index.d.ts.map +1 -1
  392. package/dist/color/types.d.ts +47 -1
  393. package/dist/color/types.d.ts.map +1 -1
  394. package/dist/combobox/createComboBox.d.ts +17 -8
  395. package/dist/combobox/createComboBox.d.ts.map +1 -1
  396. package/dist/combobox/intl/generated-locales.d.ts +3 -0
  397. package/dist/combobox/intl/generated-locales.d.ts.map +1 -1
  398. package/dist/combobox/intl/index.d.ts +3 -2
  399. package/dist/combobox/intl/index.d.ts.map +1 -1
  400. package/dist/datepicker/createDateField.d.ts +0 -10
  401. package/dist/datepicker/createDateField.d.ts.map +1 -1
  402. package/dist/datepicker/createDatePicker.d.ts +0 -16
  403. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  404. package/dist/datepicker/createDatePickerGroup.d.ts +1 -1
  405. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
  406. package/dist/datepicker/createDateRangePicker.d.ts +0 -21
  407. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  408. package/dist/datepicker/createDateSegment.d.ts +0 -9
  409. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  410. package/dist/datepicker/createDisplayNames.d.ts +1 -9
  411. package/dist/datepicker/createDisplayNames.d.ts.map +1 -1
  412. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  413. package/dist/datepicker/intl.d.ts.map +1 -1
  414. package/dist/dialog/createDialog.d.ts +2 -4
  415. package/dist/dialog/createDialog.d.ts.map +1 -1
  416. package/dist/dialog/types.d.ts +14 -0
  417. package/dist/dialog/types.d.ts.map +1 -1
  418. package/dist/disclosure/createDisclosure.d.ts +1 -8
  419. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  420. package/dist/disclosure/createDisclosureGroup.d.ts +3 -4
  421. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  422. package/dist/dnd/DragManager.d.ts +1 -16
  423. package/dist/dnd/DragManager.d.ts.map +1 -1
  424. package/dist/dnd/DropTargetKeyboardNavigation.d.ts +2 -2
  425. package/dist/dnd/createDrag.d.ts +1 -7
  426. package/dist/dnd/createDrag.d.ts.map +1 -1
  427. package/dist/dnd/createDraggableCollection.d.ts +1 -7
  428. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  429. package/dist/dnd/createDraggableItem.d.ts +2 -7
  430. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  431. package/dist/dnd/createDrop.d.ts +1 -7
  432. package/dist/dnd/createDrop.d.ts.map +1 -1
  433. package/dist/dnd/createDropIndicator.d.ts +27 -0
  434. package/dist/dnd/createDropIndicator.d.ts.map +1 -0
  435. package/dist/dnd/createDroppableCollection.d.ts +6 -8
  436. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  437. package/dist/dnd/createDroppableItem.d.ts +12 -10
  438. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  439. package/dist/dnd/index.d.ts +3 -1
  440. package/dist/dnd/index.d.ts.map +1 -1
  441. package/dist/dnd/index.js +2 -2
  442. package/dist/dnd/index.jsx +2 -2
  443. package/dist/dnd/intl/index.d.ts +6 -4
  444. package/dist/dnd/intl/index.d.ts.map +1 -1
  445. package/dist/dnd/types.d.ts +20 -1
  446. package/dist/dnd/types.d.ts.map +1 -1
  447. package/dist/dnd/utils.d.ts +4 -0
  448. package/dist/dnd/utils.d.ts.map +1 -1
  449. package/dist/focus/FocusScope.d.ts +9 -5
  450. package/dist/focus/FocusScope.d.ts.map +1 -1
  451. package/dist/focus/createAutoFocus.d.ts +3 -0
  452. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  453. package/dist/focus/createFocusRestore.d.ts +3 -0
  454. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  455. package/dist/focus/createHasTabbableChild.d.ts +13 -0
  456. package/dist/focus/createHasTabbableChild.d.ts.map +1 -0
  457. package/dist/focus/createVirtualFocus.d.ts +4 -1
  458. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  459. package/dist/focus/index.js +3 -2
  460. package/dist/focus/index.jsx +3 -2
  461. package/dist/focus/virtualFocus.d.ts +1 -1
  462. package/dist/form/createFormReset.d.ts +1 -7
  463. package/dist/form/createFormReset.d.ts.map +1 -1
  464. package/dist/form/createFormValidation.d.ts +1 -9
  465. package/dist/form/createFormValidation.d.ts.map +1 -1
  466. package/dist/grid/GridKeyboardDelegate.d.ts.map +1 -1
  467. package/dist/grid/createGrid.d.ts +1 -5
  468. package/dist/grid/createGrid.d.ts.map +1 -1
  469. package/dist/grid/createGridCell.d.ts +1 -5
  470. package/dist/grid/createGridCell.d.ts.map +1 -1
  471. package/dist/grid/createGridRow.d.ts +1 -5
  472. package/dist/grid/createGridRow.d.ts.map +1 -1
  473. package/dist/grid/index.d.ts +2 -2
  474. package/dist/grid/intl/index.d.ts +18 -0
  475. package/dist/grid/intl/index.d.ts.map +1 -0
  476. package/dist/grid/types.d.ts +25 -2
  477. package/dist/grid/types.d.ts.map +1 -1
  478. package/dist/gridlist/createGridList.d.ts +3 -5
  479. package/dist/gridlist/createGridList.d.ts.map +1 -1
  480. package/dist/gridlist/createGridListItem.d.ts +1 -5
  481. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  482. package/dist/gridlist/createGridListSection.d.ts +0 -4
  483. package/dist/gridlist/createGridListSection.d.ts.map +1 -1
  484. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +1 -5
  485. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  486. package/dist/gridlist/intl/index.d.ts +14 -0
  487. package/dist/gridlist/intl/index.d.ts.map +1 -0
  488. package/dist/gridlist/types.d.ts +56 -2
  489. package/dist/gridlist/types.d.ts.map +1 -1
  490. package/dist/i18n/compileIcu.d.ts +24 -0
  491. package/dist/i18n/compileIcu.d.ts.map +1 -0
  492. package/dist/i18n/createCollator.d.ts +0 -7
  493. package/dist/i18n/createCollator.d.ts.map +1 -1
  494. package/dist/i18n/createDateFormatter.d.ts +0 -7
  495. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  496. package/dist/i18n/createFilter.d.ts +0 -7
  497. package/dist/i18n/createFilter.d.ts.map +1 -1
  498. package/dist/i18n/createListFormatter.d.ts +9 -0
  499. package/dist/i18n/createListFormatter.d.ts.map +1 -0
  500. package/dist/i18n/createNumberFormatter.d.ts +0 -7
  501. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  502. package/dist/i18n/createStringFormatter.d.ts +14 -4
  503. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  504. package/dist/i18n/index.d.ts +1 -0
  505. package/dist/i18n/index.d.ts.map +1 -1
  506. package/dist/i18n/index.js +2 -2
  507. package/dist/i18n/index.jsx +2 -2
  508. package/dist/i18n/locale.d.ts +2 -8
  509. package/dist/i18n/locale.d.ts.map +1 -1
  510. package/dist/i18n/utils.d.ts +0 -7
  511. package/dist/i18n/utils.d.ts.map +1 -1
  512. package/dist/index.d.ts +10 -7
  513. package/dist/index.d.ts.map +1 -1
  514. package/dist/index.js +27 -21
  515. package/dist/index.jsx +27 -21
  516. package/dist/interactions/FocusableProvider.d.ts +3 -2
  517. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  518. package/dist/interactions/PressEvent.d.ts +2 -1
  519. package/dist/interactions/PressEvent.d.ts.map +1 -1
  520. package/dist/interactions/createContextMenu.d.ts +24 -0
  521. package/dist/interactions/createContextMenu.d.ts.map +1 -0
  522. package/dist/interactions/createFocus.d.ts +3 -2
  523. package/dist/interactions/createFocus.d.ts.map +1 -1
  524. package/dist/interactions/createFocusRing.d.ts +2 -1
  525. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  526. package/dist/interactions/createFocusWithin.d.ts +1 -6
  527. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  528. package/dist/interactions/createFocusable.d.ts +2 -6
  529. package/dist/interactions/createFocusable.d.ts.map +1 -1
  530. package/dist/interactions/createHover.d.ts +3 -10
  531. package/dist/interactions/createHover.d.ts.map +1 -1
  532. package/dist/interactions/createInteractionModality.d.ts +12 -10
  533. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  534. package/dist/interactions/createKeyboard.d.ts +12 -3
  535. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  536. package/dist/interactions/createKeyboardShortcutHandler.d.ts +24 -0
  537. package/dist/interactions/createKeyboardShortcutHandler.d.ts.map +1 -0
  538. package/dist/interactions/createLongPress.d.ts +4 -7
  539. package/dist/interactions/createLongPress.d.ts.map +1 -1
  540. package/dist/interactions/createMove.d.ts +1 -6
  541. package/dist/interactions/createMove.d.ts.map +1 -1
  542. package/dist/interactions/createPress.d.ts +2 -7
  543. package/dist/interactions/createPress.d.ts.map +1 -1
  544. package/dist/interactions/index.d.ts +1 -1
  545. package/dist/interactions/index.d.ts.map +1 -1
  546. package/dist/interactions/index.js +5 -3
  547. package/dist/interactions/index.jsx +5 -3
  548. package/dist/label/createField.d.ts +7 -1
  549. package/dist/label/createField.d.ts.map +1 -1
  550. package/dist/label/createLabel.d.ts +1 -1
  551. package/dist/label/createLabel.d.ts.map +1 -1
  552. package/dist/label/createLabels.d.ts +0 -7
  553. package/dist/label/createLabels.d.ts.map +1 -1
  554. package/dist/landmark/createLandmark.d.ts +4 -1
  555. package/dist/landmark/createLandmark.d.ts.map +1 -1
  556. package/dist/link/createLink.d.ts +1 -1
  557. package/dist/link/createLink.d.ts.map +1 -1
  558. package/dist/listbox/createListBox.d.ts +8 -7
  559. package/dist/listbox/createListBox.d.ts.map +1 -1
  560. package/dist/listbox/createOption.d.ts +7 -1
  561. package/dist/listbox/createOption.d.ts.map +1 -1
  562. package/dist/live-announcer/announce.d.ts +2 -13
  563. package/dist/live-announcer/announce.d.ts.map +1 -1
  564. package/dist/menu/createMenu.d.ts +3 -7
  565. package/dist/menu/createMenu.d.ts.map +1 -1
  566. package/dist/menu/createMenuItem.d.ts +2 -1
  567. package/dist/menu/createMenuItem.d.ts.map +1 -1
  568. package/dist/menu/createMenuTrigger.d.ts +24 -20
  569. package/dist/menu/createMenuTrigger.d.ts.map +1 -1
  570. package/dist/menu/index.d.ts +1 -1
  571. package/dist/menu/index.d.ts.map +1 -1
  572. package/dist/menu/intl/index.d.ts +4 -0
  573. package/dist/menu/intl/index.d.ts.map +1 -0
  574. package/dist/meter/createMeter.d.ts +2 -1
  575. package/dist/meter/createMeter.d.ts.map +1 -1
  576. package/dist/numberfield/createNumberField.d.ts +29 -6
  577. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  578. package/dist/overlays/ariaHideOutside.d.ts +0 -4
  579. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  580. package/dist/overlays/createInteractOutside.d.ts +2 -5
  581. package/dist/overlays/createInteractOutside.d.ts.map +1 -1
  582. package/dist/overlays/createModal.d.ts +3 -6
  583. package/dist/overlays/createModal.d.ts.map +1 -1
  584. package/dist/overlays/createOverlay.d.ts +1 -5
  585. package/dist/overlays/createOverlay.d.ts.map +1 -1
  586. package/dist/overlays/createOverlayTrigger.d.ts +2 -6
  587. package/dist/overlays/createOverlayTrigger.d.ts.map +1 -1
  588. package/dist/overlays/createPreventScroll.d.ts +0 -4
  589. package/dist/overlays/createPreventScroll.d.ts.map +1 -1
  590. package/dist/overlays/index.d.ts +1 -0
  591. package/dist/overlays/index.d.ts.map +1 -1
  592. package/dist/overlays/index.js +3 -2
  593. package/dist/overlays/index.jsx +3 -2
  594. package/dist/overlays/intl/index.d.ts +13 -0
  595. package/dist/overlays/intl/index.d.ts.map +1 -0
  596. package/dist/popover/calculatePosition.d.ts +1 -1
  597. package/dist/popover/calculatePosition.d.ts.map +1 -1
  598. package/dist/popover/createOverlayPosition.d.ts +1 -7
  599. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  600. package/dist/popover/createPopover.d.ts +6 -7
  601. package/dist/popover/createPopover.d.ts.map +1 -1
  602. package/dist/progress/createProgressBar.d.ts +2 -10
  603. package/dist/progress/createProgressBar.d.ts.map +1 -1
  604. package/dist/radio/createRadio.d.ts +8 -1
  605. package/dist/radio/createRadio.d.ts.map +1 -1
  606. package/dist/radio/createRadioGroup.d.ts +1 -9
  607. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  608. package/dist/searchfield/createSearchField.d.ts +1 -1
  609. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  610. package/dist/searchfield/intl/index.d.ts +13 -0
  611. package/dist/searchfield/intl/index.d.ts.map +1 -0
  612. package/dist/select/createHiddenSelect.d.ts +3 -10
  613. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  614. package/dist/select/createSelect.d.ts +10 -6
  615. package/dist/select/createSelect.d.ts.map +1 -1
  616. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -1
  617. package/dist/selection/ListKeyboardDelegate.d.ts +2 -1
  618. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -1
  619. package/dist/selection/constants.d.ts.map +1 -1
  620. package/dist/selection/createCollectionRowInteraction.d.ts +12 -1
  621. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -1
  622. package/dist/selection/createScrollIntoViewOnFocus.d.ts +0 -11
  623. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -1
  624. package/dist/selection/createSelectableCollection.d.ts +1 -23
  625. package/dist/selection/createSelectableCollection.d.ts.map +1 -1
  626. package/dist/selection/createSelectableItem.d.ts +2 -29
  627. package/dist/selection/createSelectableItem.d.ts.map +1 -1
  628. package/dist/selection/createSelectableList.d.ts +4 -17
  629. package/dist/selection/createSelectableList.d.ts.map +1 -1
  630. package/dist/selection/createTypeSelect.d.ts +2 -8
  631. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  632. package/dist/selection/index.js +3 -2
  633. package/dist/selection/index.jsx +3 -2
  634. package/dist/selection/selectItem.d.ts.map +1 -1
  635. package/dist/selection/utils.d.ts +1 -1
  636. package/dist/selection/utils.d.ts.map +1 -1
  637. package/dist/separator/createSeparator.d.ts +3 -1
  638. package/dist/separator/createSeparator.d.ts.map +1 -1
  639. package/dist/slider/createSlider.d.ts +1 -6
  640. package/dist/slider/createSlider.d.ts.map +1 -1
  641. package/dist/spinbutton/createSpinButton.d.ts +0 -9
  642. package/dist/spinbutton/createSpinButton.d.ts.map +1 -1
  643. package/dist/spinbutton/index.d.ts +2 -2
  644. package/dist/spinbutton/index.d.ts.map +1 -1
  645. package/dist/spinbutton/intl.d.ts.map +1 -1
  646. package/dist/ssr/index.d.ts +3 -9
  647. package/dist/ssr/index.d.ts.map +1 -1
  648. package/dist/ssr/index.js +47 -26
  649. package/dist/ssr/index.js.map +1 -1
  650. package/dist/ssr/index.jsx +47 -26
  651. package/dist/ssr/index.jsx.map +1 -1
  652. package/dist/steplist/createStepList.d.ts +1 -1
  653. package/dist/steplist/createStepList.d.ts.map +1 -1
  654. package/dist/switch/createSwitch.d.ts +2 -1
  655. package/dist/switch/createSwitch.d.ts.map +1 -1
  656. package/dist/table/createTable.d.ts +1 -5
  657. package/dist/table/createTable.d.ts.map +1 -1
  658. package/dist/table/createTableCell.d.ts +1 -5
  659. package/dist/table/createTableCell.d.ts.map +1 -1
  660. package/dist/table/createTableColumnHeader.d.ts +1 -5
  661. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  662. package/dist/table/createTableColumnResize.d.ts +2 -8
  663. package/dist/table/createTableColumnResize.d.ts.map +1 -1
  664. package/dist/table/createTableHeaderRow.d.ts +1 -5
  665. package/dist/table/createTableHeaderRow.d.ts.map +1 -1
  666. package/dist/table/createTableRow.d.ts +1 -5
  667. package/dist/table/createTableRow.d.ts.map +1 -1
  668. package/dist/table/createTableRowGroup.d.ts +1 -5
  669. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  670. package/dist/table/createTableSelectAllCheckbox.d.ts +1 -5
  671. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  672. package/dist/table/createTableSelectionCheckbox.d.ts +1 -5
  673. package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
  674. package/dist/table/index.d.ts +2 -2
  675. package/dist/table/intl/index.d.ts +23 -0
  676. package/dist/table/intl/index.d.ts.map +1 -0
  677. package/dist/table/types.d.ts +44 -2
  678. package/dist/table/types.d.ts.map +1 -1
  679. package/dist/table/utils.d.ts.map +1 -1
  680. package/dist/tabs/createTabs.d.ts +5 -9
  681. package/dist/tabs/createTabs.d.ts.map +1 -1
  682. package/dist/tag/createTag.d.ts +4 -8
  683. package/dist/tag/createTag.d.ts.map +1 -1
  684. package/dist/tag/createTagGroup.d.ts +0 -9
  685. package/dist/tag/createTagGroup.d.ts.map +1 -1
  686. package/dist/tag/intl/index.d.ts +14 -0
  687. package/dist/tag/intl/index.d.ts.map +1 -0
  688. package/dist/textfield/createTextField.d.ts +6 -8
  689. package/dist/textfield/createTextField.d.ts.map +1 -1
  690. package/dist/toast/createToast.d.ts +1 -8
  691. package/dist/toast/createToast.d.ts.map +1 -1
  692. package/dist/toast/createToastRegion.d.ts +7 -18
  693. package/dist/toast/createToastRegion.d.ts.map +1 -1
  694. package/dist/toast/intl/index.d.ts +14 -0
  695. package/dist/toast/intl/index.d.ts.map +1 -0
  696. package/dist/toggle/createToggle.d.ts +8 -1
  697. package/dist/toggle/createToggle.d.ts.map +1 -1
  698. package/dist/tokenfield/createToken.d.ts +15 -0
  699. package/dist/tokenfield/createToken.d.ts.map +1 -0
  700. package/dist/tokenfield/createTokenField.d.ts +52 -0
  701. package/dist/tokenfield/createTokenField.d.ts.map +1 -0
  702. package/dist/tokenfield/index.d.ts +3 -0
  703. package/dist/tokenfield/index.d.ts.map +1 -0
  704. package/dist/tokenfield/index.js +2 -0
  705. package/dist/tokenfield/index.jsx +2 -0
  706. package/dist/toolbar/createToolbar.d.ts +1 -1
  707. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  708. package/dist/tooltip/createPreviewTrigger.d.ts +23 -0
  709. package/dist/tooltip/createPreviewTrigger.d.ts.map +1 -0
  710. package/dist/tooltip/createSafeArea.d.ts +20 -0
  711. package/dist/tooltip/createSafeArea.d.ts.map +1 -0
  712. package/dist/tooltip/createTooltip.d.ts +1 -1
  713. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  714. package/dist/tooltip/createTooltipTrigger.d.ts +1 -9
  715. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  716. package/dist/tooltip/index.d.ts +2 -0
  717. package/dist/tooltip/index.d.ts.map +1 -1
  718. package/dist/tooltip/index.js +2 -2
  719. package/dist/tooltip/index.jsx +2 -2
  720. package/dist/tooltip/intl/index.d.ts +4 -0
  721. package/dist/tooltip/intl/index.d.ts.map +1 -0
  722. package/dist/tree/createTree.d.ts +1 -5
  723. package/dist/tree/createTree.d.ts.map +1 -1
  724. package/dist/tree/createTreeItem.d.ts +1 -5
  725. package/dist/tree/createTreeItem.d.ts.map +1 -1
  726. package/dist/tree/createTreeSelectionCheckbox.d.ts +1 -5
  727. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  728. package/dist/tree/intl/index.d.ts +14 -0
  729. package/dist/tree/intl/index.d.ts.map +1 -0
  730. package/dist/tree/types.d.ts +35 -2
  731. package/dist/tree/types.d.ts.map +1 -1
  732. package/dist/utils/ShadowTreeWalker.d.ts +30 -0
  733. package/dist/utils/ShadowTreeWalker.d.ts.map +1 -0
  734. package/dist/utils/animation.d.ts +1 -29
  735. package/dist/utils/animation.d.ts.map +1 -1
  736. package/dist/utils/capture.d.ts +14 -0
  737. package/dist/utils/capture.d.ts.map +1 -0
  738. package/dist/utils/createDescription.d.ts +1 -25
  739. package/dist/utils/createDescription.d.ts.map +1 -1
  740. package/dist/utils/dom.d.ts +45 -11
  741. package/dist/utils/dom.d.ts.map +1 -1
  742. package/dist/utils/domAttrs.d.ts +16 -0
  743. package/dist/utils/domAttrs.d.ts.map +1 -0
  744. package/dist/utils/env.d.ts +2 -0
  745. package/dist/utils/env.d.ts.map +1 -1
  746. package/dist/utils/events.d.ts +0 -4
  747. package/dist/utils/events.d.ts.map +1 -1
  748. package/dist/utils/filterDOMProps.d.ts +0 -6
  749. package/dist/utils/filterDOMProps.d.ts.map +1 -1
  750. package/dist/utils/focus.d.ts +19 -6
  751. package/dist/utils/focus.d.ts.map +1 -1
  752. package/dist/utils/geometry.d.ts +1 -1
  753. package/dist/utils/geometry.d.ts.map +1 -1
  754. package/dist/utils/getMetaValue.d.ts +13 -0
  755. package/dist/utils/getMetaValue.d.ts.map +1 -0
  756. package/dist/utils/getNonce.d.ts +9 -0
  757. package/dist/utils/getNonce.d.ts.map +1 -0
  758. package/dist/utils/globalListeners.d.ts +0 -6
  759. package/dist/utils/globalListeners.d.ts.map +1 -1
  760. package/dist/utils/index.d.ts +6 -1
  761. package/dist/utils/index.d.ts.map +1 -1
  762. package/dist/utils/index.js +7 -4
  763. package/dist/utils/index.jsx +7 -4
  764. package/dist/utils/keyboard.d.ts +0 -4
  765. package/dist/utils/keyboard.d.ts.map +1 -1
  766. package/dist/utils/mergeProps.d.ts +5 -2
  767. package/dist/utils/mergeProps.d.ts.map +1 -1
  768. package/dist/utils/owner.d.ts +14 -0
  769. package/dist/utils/owner.d.ts.map +1 -0
  770. package/dist/utils/platform.d.ts +0 -4
  771. package/dist/utils/platform.d.ts.map +1 -1
  772. package/dist/utils/reactivity.d.ts +2 -0
  773. package/dist/utils/reactivity.d.ts.map +1 -1
  774. package/dist/utils/refs.d.ts +20 -0
  775. package/dist/utils/refs.d.ts.map +1 -0
  776. package/dist/utils/runAfterTransition.d.ts +2 -0
  777. package/dist/utils/runAfterTransition.d.ts.map +1 -0
  778. package/dist/utils/scrollIntoView.d.ts +0 -4
  779. package/dist/utils/scrollIntoView.d.ts.map +1 -1
  780. package/dist/utils/splitProps.d.ts +17 -0
  781. package/dist/utils/splitProps.d.ts.map +1 -0
  782. package/dist/utils/textSelection.d.ts +0 -8
  783. package/dist/utils/textSelection.d.ts.map +1 -1
  784. package/dist/virtualizer/ScrollView.d.ts +38 -0
  785. package/dist/virtualizer/ScrollView.d.ts.map +1 -0
  786. package/dist/virtualizer/index.d.ts +3 -0
  787. package/dist/virtualizer/index.d.ts.map +1 -0
  788. package/dist/virtualizer/index.js +2 -0
  789. package/dist/virtualizer/index.jsx +2 -0
  790. package/dist/virtualizer/utils.d.ts +10 -0
  791. package/dist/virtualizer/utils.d.ts.map +1 -0
  792. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -9
  793. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  794. package/dist/visually-hidden/index.js +1 -1
  795. package/dist/visually-hidden/index.jsx +1 -1
  796. package/package.json +30 -11
  797. package/src/actiongroup/createActionGroup.ts +49 -27
  798. package/src/autocomplete/createAutocomplete.ts +32 -5
  799. package/src/autocomplete/intl/ar-AE.json +3 -0
  800. package/src/autocomplete/intl/bg-BG.json +3 -0
  801. package/src/autocomplete/intl/cs-CZ.json +3 -0
  802. package/src/autocomplete/intl/da-DK.json +3 -0
  803. package/src/autocomplete/intl/de-DE.json +3 -0
  804. package/src/autocomplete/intl/el-GR.json +3 -0
  805. package/src/autocomplete/intl/en-US.json +3 -0
  806. package/src/autocomplete/intl/es-ES.json +3 -0
  807. package/src/autocomplete/intl/et-EE.json +3 -0
  808. package/src/autocomplete/intl/fi-FI.json +3 -0
  809. package/src/autocomplete/intl/fr-FR.json +3 -0
  810. package/src/autocomplete/intl/he-IL.json +3 -0
  811. package/src/autocomplete/intl/hr-HR.json +3 -0
  812. package/src/autocomplete/intl/hu-HU.json +3 -0
  813. package/src/autocomplete/intl/index.ts +122 -0
  814. package/src/autocomplete/intl/it-IT.json +3 -0
  815. package/src/autocomplete/intl/ja-JP.json +3 -0
  816. package/src/autocomplete/intl/ko-KR.json +3 -0
  817. package/src/autocomplete/intl/lt-LT.json +3 -0
  818. package/src/autocomplete/intl/lv-LV.json +3 -0
  819. package/src/autocomplete/intl/nb-NO.json +3 -0
  820. package/src/autocomplete/intl/nl-NL.json +3 -0
  821. package/src/autocomplete/intl/pl-PL.json +3 -0
  822. package/src/autocomplete/intl/pt-BR.json +3 -0
  823. package/src/autocomplete/intl/pt-PT.json +3 -0
  824. package/src/autocomplete/intl/ro-RO.json +3 -0
  825. package/src/autocomplete/intl/ru-RU.json +3 -0
  826. package/src/autocomplete/intl/sk-SK.json +3 -0
  827. package/src/autocomplete/intl/sl-SI.json +3 -0
  828. package/src/autocomplete/intl/sr-SP.json +3 -0
  829. package/src/autocomplete/intl/sv-SE.json +3 -0
  830. package/src/autocomplete/intl/tr-TR.json +3 -0
  831. package/src/autocomplete/intl/uk-UA.json +3 -0
  832. package/src/autocomplete/intl/zh-CN.json +3 -0
  833. package/src/autocomplete/intl/zh-TW.json +3 -0
  834. package/src/breadcrumbs/createBreadcrumbs.ts +18 -1
  835. package/src/breadcrumbs/intl/ar-AE.json +3 -0
  836. package/src/breadcrumbs/intl/bg-BG.json +3 -0
  837. package/src/breadcrumbs/intl/cs-CZ.json +3 -0
  838. package/src/breadcrumbs/intl/da-DK.json +3 -0
  839. package/src/breadcrumbs/intl/de-DE.json +3 -0
  840. package/src/breadcrumbs/intl/el-GR.json +3 -0
  841. package/src/breadcrumbs/intl/en-US.json +3 -0
  842. package/src/breadcrumbs/intl/es-ES.json +3 -0
  843. package/src/breadcrumbs/intl/et-EE.json +3 -0
  844. package/src/breadcrumbs/intl/fi-FI.json +3 -0
  845. package/src/breadcrumbs/intl/fr-FR.json +3 -0
  846. package/src/breadcrumbs/intl/he-IL.json +3 -0
  847. package/src/breadcrumbs/intl/hr-HR.json +3 -0
  848. package/src/breadcrumbs/intl/hu-HU.json +3 -0
  849. package/src/breadcrumbs/intl/index.ts +122 -0
  850. package/src/breadcrumbs/intl/it-IT.json +3 -0
  851. package/src/breadcrumbs/intl/ja-JP.json +3 -0
  852. package/src/breadcrumbs/intl/ko-KR.json +3 -0
  853. package/src/breadcrumbs/intl/lt-LT.json +3 -0
  854. package/src/breadcrumbs/intl/lv-LV.json +3 -0
  855. package/src/breadcrumbs/intl/nb-NO.json +3 -0
  856. package/src/breadcrumbs/intl/nl-NL.json +3 -0
  857. package/src/breadcrumbs/intl/pl-PL.json +3 -0
  858. package/src/breadcrumbs/intl/pt-BR.json +3 -0
  859. package/src/breadcrumbs/intl/pt-PT.json +3 -0
  860. package/src/breadcrumbs/intl/ro-RO.json +3 -0
  861. package/src/breadcrumbs/intl/ru-RU.json +3 -0
  862. package/src/breadcrumbs/intl/sk-SK.json +3 -0
  863. package/src/breadcrumbs/intl/sl-SI.json +3 -0
  864. package/src/breadcrumbs/intl/sr-SP.json +3 -0
  865. package/src/breadcrumbs/intl/sv-SE.json +3 -0
  866. package/src/breadcrumbs/intl/tr-TR.json +3 -0
  867. package/src/breadcrumbs/intl/uk-UA.json +3 -0
  868. package/src/breadcrumbs/intl/zh-CN.json +3 -0
  869. package/src/breadcrumbs/intl/zh-TW.json +3 -0
  870. package/src/button/createButton.ts +15 -1
  871. package/src/button/createToggleButton.ts +18 -5
  872. package/src/button/createToggleButtonGroup.ts +23 -8
  873. package/src/button/types.ts +16 -0
  874. package/src/calendar/createCalendar.ts +22 -3
  875. package/src/calendar/createCalendarCell.ts +104 -15
  876. package/src/calendar/createCalendarGrid.ts +37 -13
  877. package/src/calendar/createCalendarMonthPicker.ts +14 -0
  878. package/src/calendar/createCalendarYearPicker.ts +14 -0
  879. package/src/calendar/createRangeCalendar.ts +124 -1
  880. package/src/calendar/createRangeCalendarCell.ts +179 -40
  881. package/src/calendar/intl/index.ts +37 -0
  882. package/src/calendar/utils.ts +14 -0
  883. package/src/checkbox/createCheckbox.ts +32 -17
  884. package/src/checkbox/createCheckboxGroup.ts +31 -13
  885. package/src/checkbox/createCheckboxGroupItem.ts +15 -1
  886. package/src/collections/index.ts +21 -3
  887. package/src/color/createColorArea.ts +226 -29
  888. package/src/color/createColorField.ts +98 -22
  889. package/src/color/createColorSlider.ts +24 -3
  890. package/src/color/createColorSwatch.ts +18 -1
  891. package/src/color/createColorWheel.ts +27 -5
  892. package/src/color/intl/index.ts +35 -0
  893. package/src/color/types.ts +47 -1
  894. package/src/combobox/createComboBox.ts +303 -152
  895. package/src/combobox/intl/generated-locales.ts +38 -1
  896. package/src/combobox/intl/index.ts +38 -2
  897. package/src/datepicker/createDateField.ts +38 -22
  898. package/src/datepicker/createDatePicker.ts +14 -0
  899. package/src/datepicker/createDatePickerGroup.ts +24 -12
  900. package/src/datepicker/createDateRangePicker.ts +14 -0
  901. package/src/datepicker/createDateSegment.ts +110 -46
  902. package/src/datepicker/createDisplayNames.ts +16 -1
  903. package/src/datepicker/createTimeField.ts +15 -5
  904. package/src/datepicker/intl.ts +623 -544
  905. package/src/dialog/createDialog.ts +57 -30
  906. package/src/dialog/types.ts +14 -0
  907. package/src/disclosure/createDisclosure.ts +28 -6
  908. package/src/disclosure/createDisclosureGroup.ts +3 -4
  909. package/src/dnd/DragManager.ts +60 -9
  910. package/src/dnd/DropTargetKeyboardNavigation.ts +8 -6
  911. package/src/dnd/createDrag.ts +18 -1
  912. package/src/dnd/createDraggableCollection.ts +96 -32
  913. package/src/dnd/createDraggableItem.ts +73 -31
  914. package/src/dnd/createDrop.ts +18 -1
  915. package/src/dnd/createDropIndicator.ts +92 -0
  916. package/src/dnd/createDroppableCollection.ts +113 -48
  917. package/src/dnd/createDroppableItem.ts +161 -13
  918. package/src/dnd/index.ts +3 -0
  919. package/src/dnd/intl/index.ts +77 -66
  920. package/src/dnd/types.ts +20 -1
  921. package/src/dnd/utils.ts +19 -0
  922. package/src/focus/FocusScope.tsx +542 -157
  923. package/src/focus/createAutoFocus.ts +94 -68
  924. package/src/focus/createFocusRestore.ts +16 -12
  925. package/src/focus/createHasTabbableChild.ts +78 -0
  926. package/src/focus/createVirtualFocus.ts +21 -5
  927. package/src/focus/virtualFocus.ts +1 -1
  928. package/src/form/createFormReset.ts +40 -17
  929. package/src/form/createFormValidation.ts +128 -86
  930. package/src/grid/GridKeyboardDelegate.ts +14 -0
  931. package/src/grid/createGrid.ts +17 -2
  932. package/src/grid/createGridCell.ts +17 -2
  933. package/src/grid/createGridRow.ts +17 -2
  934. package/src/grid/index.ts +2 -2
  935. package/src/grid/intl/ar-AE.json +8 -0
  936. package/src/grid/intl/bg-BG.json +8 -0
  937. package/src/grid/intl/cs-CZ.json +8 -0
  938. package/src/grid/intl/da-DK.json +8 -0
  939. package/src/grid/intl/de-DE.json +8 -0
  940. package/src/grid/intl/el-GR.json +8 -0
  941. package/src/grid/intl/en-US.json +8 -0
  942. package/src/grid/intl/es-ES.json +8 -0
  943. package/src/grid/intl/et-EE.json +8 -0
  944. package/src/grid/intl/fi-FI.json +8 -0
  945. package/src/grid/intl/fr-FR.json +8 -0
  946. package/src/grid/intl/he-IL.json +8 -0
  947. package/src/grid/intl/hr-HR.json +8 -0
  948. package/src/grid/intl/hu-HU.json +8 -0
  949. package/src/grid/intl/index.ts +127 -0
  950. package/src/grid/intl/it-IT.json +8 -0
  951. package/src/grid/intl/ja-JP.json +8 -0
  952. package/src/grid/intl/ko-KR.json +8 -0
  953. package/src/grid/intl/lt-LT.json +8 -0
  954. package/src/grid/intl/lv-LV.json +8 -0
  955. package/src/grid/intl/nb-NO.json +8 -0
  956. package/src/grid/intl/nl-NL.json +8 -0
  957. package/src/grid/intl/pl-PL.json +8 -0
  958. package/src/grid/intl/pt-BR.json +8 -0
  959. package/src/grid/intl/pt-PT.json +8 -0
  960. package/src/grid/intl/ro-RO.json +8 -0
  961. package/src/grid/intl/ru-RU.json +8 -0
  962. package/src/grid/intl/sk-SK.json +8 -0
  963. package/src/grid/intl/sl-SI.json +8 -0
  964. package/src/grid/intl/sr-SP.json +8 -0
  965. package/src/grid/intl/sv-SE.json +8 -0
  966. package/src/grid/intl/tr-TR.json +8 -0
  967. package/src/grid/intl/uk-UA.json +8 -0
  968. package/src/grid/intl/zh-CN.json +8 -0
  969. package/src/grid/intl/zh-TW.json +8 -0
  970. package/src/grid/types.ts +25 -2
  971. package/src/gridlist/createGridList.ts +172 -42
  972. package/src/gridlist/createGridListItem.ts +51 -13
  973. package/src/gridlist/createGridListSection.ts +14 -0
  974. package/src/gridlist/createGridListSelectionCheckbox.ts +31 -4
  975. package/src/gridlist/intl/ar-AE.json +4 -0
  976. package/src/gridlist/intl/bg-BG.json +4 -0
  977. package/src/gridlist/intl/cs-CZ.json +4 -0
  978. package/src/gridlist/intl/da-DK.json +4 -0
  979. package/src/gridlist/intl/de-DE.json +4 -0
  980. package/src/gridlist/intl/el-GR.json +4 -0
  981. package/src/gridlist/intl/en-US.json +4 -0
  982. package/src/gridlist/intl/es-ES.json +4 -0
  983. package/src/gridlist/intl/et-EE.json +4 -0
  984. package/src/gridlist/intl/fi-FI.json +4 -0
  985. package/src/gridlist/intl/fr-FR.json +4 -0
  986. package/src/gridlist/intl/he-IL.json +4 -0
  987. package/src/gridlist/intl/hr-HR.json +4 -0
  988. package/src/gridlist/intl/hu-HU.json +4 -0
  989. package/src/gridlist/intl/index.ts +123 -0
  990. package/src/gridlist/intl/it-IT.json +4 -0
  991. package/src/gridlist/intl/ja-JP.json +4 -0
  992. package/src/gridlist/intl/ko-KR.json +4 -0
  993. package/src/gridlist/intl/lt-LT.json +4 -0
  994. package/src/gridlist/intl/lv-LV.json +4 -0
  995. package/src/gridlist/intl/nb-NO.json +4 -0
  996. package/src/gridlist/intl/nl-NL.json +4 -0
  997. package/src/gridlist/intl/pl-PL.json +4 -0
  998. package/src/gridlist/intl/pt-BR.json +4 -0
  999. package/src/gridlist/intl/pt-PT.json +4 -0
  1000. package/src/gridlist/intl/ro-RO.json +4 -0
  1001. package/src/gridlist/intl/ru-RU.json +4 -0
  1002. package/src/gridlist/intl/sk-SK.json +4 -0
  1003. package/src/gridlist/intl/sl-SI.json +4 -0
  1004. package/src/gridlist/intl/sr-SP.json +4 -0
  1005. package/src/gridlist/intl/sv-SE.json +4 -0
  1006. package/src/gridlist/intl/tr-TR.json +4 -0
  1007. package/src/gridlist/intl/uk-UA.json +4 -0
  1008. package/src/gridlist/intl/zh-CN.json +4 -0
  1009. package/src/gridlist/intl/zh-TW.json +4 -0
  1010. package/src/gridlist/types.ts +54 -2
  1011. package/src/i18n/compileIcu.ts +440 -0
  1012. package/src/i18n/createCollator.ts +14 -0
  1013. package/src/i18n/createDateFormatter.ts +14 -0
  1014. package/src/i18n/createFilter.ts +14 -0
  1015. package/src/i18n/createListFormatter.ts +38 -0
  1016. package/src/i18n/createNumberFormatter.ts +14 -0
  1017. package/src/i18n/createStringFormatter.ts +64 -8
  1018. package/src/i18n/index.ts +3 -0
  1019. package/src/i18n/locale.tsx +60 -19
  1020. package/src/i18n/utils.ts +14 -0
  1021. package/src/index.ts +49 -1
  1022. package/src/interactions/FocusableProvider.tsx +28 -11
  1023. package/src/interactions/PressEvent.ts +16 -1
  1024. package/src/interactions/createContextMenu.ts +108 -0
  1025. package/src/interactions/createFocus.ts +26 -6
  1026. package/src/interactions/createFocusRing.ts +28 -13
  1027. package/src/interactions/createFocusWithin.ts +23 -3
  1028. package/src/interactions/createFocusable.ts +45 -28
  1029. package/src/interactions/createHover.ts +102 -81
  1030. package/src/interactions/createInteractionModality.ts +135 -45
  1031. package/src/interactions/createKeyboard.ts +85 -9
  1032. package/src/interactions/createKeyboardShortcutHandler.ts +157 -0
  1033. package/src/interactions/createLongPress.ts +31 -9
  1034. package/src/interactions/createMove.ts +24 -3
  1035. package/src/interactions/createPress.ts +85 -41
  1036. package/src/interactions/index.ts +1 -0
  1037. package/src/label/createField.ts +58 -63
  1038. package/src/label/createLabel.ts +21 -4
  1039. package/src/label/createLabels.ts +25 -1
  1040. package/src/landmark/createLandmark.ts +27 -4
  1041. package/src/link/createLink.ts +20 -12
  1042. package/src/listbox/createListBox.ts +86 -310
  1043. package/src/listbox/createOption.ts +50 -14
  1044. package/src/live-announcer/announce.ts +21 -6
  1045. package/src/menu/createMenu.ts +92 -5
  1046. package/src/menu/createMenuItem.ts +40 -23
  1047. package/src/menu/createMenuTrigger.ts +179 -51
  1048. package/src/menu/index.ts +2 -0
  1049. package/src/menu/intl/index.ts +130 -0
  1050. package/src/meter/createMeter.ts +20 -5
  1051. package/src/numberfield/createNumberField.ts +254 -14
  1052. package/src/overlays/ariaHideOutside.ts +76 -11
  1053. package/src/overlays/createInteractOutside.ts +74 -47
  1054. package/src/overlays/createModal.tsx +42 -27
  1055. package/src/overlays/createOverlay.ts +107 -66
  1056. package/src/overlays/createOverlayTrigger.ts +21 -6
  1057. package/src/overlays/createPreventScroll.ts +92 -62
  1058. package/src/overlays/index.ts +2 -0
  1059. package/src/overlays/intl/ar-AE.json +3 -0
  1060. package/src/overlays/intl/bg-BG.json +3 -0
  1061. package/src/overlays/intl/cs-CZ.json +3 -0
  1062. package/src/overlays/intl/da-DK.json +3 -0
  1063. package/src/overlays/intl/de-DE.json +3 -0
  1064. package/src/overlays/intl/el-GR.json +3 -0
  1065. package/src/overlays/intl/en-US.json +3 -0
  1066. package/src/overlays/intl/es-ES.json +3 -0
  1067. package/src/overlays/intl/et-EE.json +3 -0
  1068. package/src/overlays/intl/fi-FI.json +3 -0
  1069. package/src/overlays/intl/fr-FR.json +3 -0
  1070. package/src/overlays/intl/he-IL.json +3 -0
  1071. package/src/overlays/intl/hr-HR.json +3 -0
  1072. package/src/overlays/intl/hu-HU.json +3 -0
  1073. package/src/overlays/intl/index.ts +122 -0
  1074. package/src/overlays/intl/it-IT.json +3 -0
  1075. package/src/overlays/intl/ja-JP.json +3 -0
  1076. package/src/overlays/intl/ko-KR.json +3 -0
  1077. package/src/overlays/intl/lt-LT.json +3 -0
  1078. package/src/overlays/intl/lv-LV.json +3 -0
  1079. package/src/overlays/intl/nb-NO.json +3 -0
  1080. package/src/overlays/intl/nl-NL.json +3 -0
  1081. package/src/overlays/intl/pl-PL.json +3 -0
  1082. package/src/overlays/intl/pt-BR.json +3 -0
  1083. package/src/overlays/intl/pt-PT.json +3 -0
  1084. package/src/overlays/intl/ro-RO.json +3 -0
  1085. package/src/overlays/intl/ru-RU.json +3 -0
  1086. package/src/overlays/intl/sk-SK.json +3 -0
  1087. package/src/overlays/intl/sl-SI.json +3 -0
  1088. package/src/overlays/intl/sr-SP.json +3 -0
  1089. package/src/overlays/intl/sv-SE.json +3 -0
  1090. package/src/overlays/intl/tr-TR.json +3 -0
  1091. package/src/overlays/intl/uk-UA.json +3 -0
  1092. package/src/overlays/intl/zh-CN.json +3 -0
  1093. package/src/overlays/intl/zh-TW.json +3 -0
  1094. package/src/popover/calculatePosition.ts +21 -3
  1095. package/src/popover/createOverlayPosition.ts +149 -41
  1096. package/src/popover/createPopover.ts +88 -23
  1097. package/src/progress/createProgressBar.ts +19 -4
  1098. package/src/radio/createRadio.ts +80 -25
  1099. package/src/radio/createRadioGroup.ts +47 -13
  1100. package/src/searchfield/createSearchField.ts +31 -2
  1101. package/src/searchfield/intl/ar-AE.json +3 -0
  1102. package/src/searchfield/intl/bg-BG.json +3 -0
  1103. package/src/searchfield/intl/cs-CZ.json +3 -0
  1104. package/src/searchfield/intl/da-DK.json +3 -0
  1105. package/src/searchfield/intl/de-DE.json +3 -0
  1106. package/src/searchfield/intl/el-GR.json +3 -0
  1107. package/src/searchfield/intl/en-US.json +3 -0
  1108. package/src/searchfield/intl/es-ES.json +3 -0
  1109. package/src/searchfield/intl/et-EE.json +3 -0
  1110. package/src/searchfield/intl/fi-FI.json +3 -0
  1111. package/src/searchfield/intl/fr-FR.json +3 -0
  1112. package/src/searchfield/intl/he-IL.json +3 -0
  1113. package/src/searchfield/intl/hr-HR.json +3 -0
  1114. package/src/searchfield/intl/hu-HU.json +3 -0
  1115. package/src/searchfield/intl/index.ts +122 -0
  1116. package/src/searchfield/intl/it-IT.json +3 -0
  1117. package/src/searchfield/intl/ja-JP.json +3 -0
  1118. package/src/searchfield/intl/ko-KR.json +3 -0
  1119. package/src/searchfield/intl/lt-LT.json +3 -0
  1120. package/src/searchfield/intl/lv-LV.json +3 -0
  1121. package/src/searchfield/intl/nb-NO.json +3 -0
  1122. package/src/searchfield/intl/nl-NL.json +3 -0
  1123. package/src/searchfield/intl/pl-PL.json +3 -0
  1124. package/src/searchfield/intl/pt-BR.json +3 -0
  1125. package/src/searchfield/intl/pt-PT.json +3 -0
  1126. package/src/searchfield/intl/ro-RO.json +3 -0
  1127. package/src/searchfield/intl/ru-RU.json +3 -0
  1128. package/src/searchfield/intl/sk-SK.json +3 -0
  1129. package/src/searchfield/intl/sl-SI.json +3 -0
  1130. package/src/searchfield/intl/sr-SP.json +3 -0
  1131. package/src/searchfield/intl/sv-SE.json +3 -0
  1132. package/src/searchfield/intl/tr-TR.json +3 -0
  1133. package/src/searchfield/intl/uk-UA.json +3 -0
  1134. package/src/searchfield/intl/zh-CN.json +3 -0
  1135. package/src/searchfield/intl/zh-TW.json +3 -0
  1136. package/src/select/createHiddenSelect.tsx +166 -69
  1137. package/src/select/createSelect.ts +80 -34
  1138. package/src/selection/DOMLayoutDelegate.ts +14 -0
  1139. package/src/selection/ListKeyboardDelegate.ts +16 -1
  1140. package/src/selection/constants.ts +14 -0
  1141. package/src/selection/createCollectionRowInteraction.ts +75 -6
  1142. package/src/selection/createScrollIntoViewOnFocus.ts +23 -8
  1143. package/src/selection/createSelectableCollection.ts +352 -226
  1144. package/src/selection/createSelectableItem.ts +51 -12
  1145. package/src/selection/createSelectableList.ts +21 -1
  1146. package/src/selection/createTypeSelect.ts +21 -5
  1147. package/src/selection/selectItem.ts +14 -0
  1148. package/src/selection/utils.ts +15 -1
  1149. package/src/separator/createSeparator.ts +17 -1
  1150. package/src/slider/createSlider.ts +24 -18
  1151. package/src/spinbutton/createSpinButton.ts +16 -2
  1152. package/src/spinbutton/index.ts +2 -10
  1153. package/src/spinbutton/intl.ts +70 -34
  1154. package/src/ssr/index.tsx +79 -48
  1155. package/src/steplist/createStepList.ts +17 -2
  1156. package/src/switch/createSwitch.ts +25 -4
  1157. package/src/table/createTable.ts +104 -52
  1158. package/src/table/createTableCell.ts +17 -2
  1159. package/src/table/createTableColumnHeader.ts +21 -3
  1160. package/src/table/createTableColumnResize.ts +19 -3
  1161. package/src/table/createTableHeaderRow.ts +17 -2
  1162. package/src/table/createTableRow.ts +29 -22
  1163. package/src/table/createTableRowGroup.ts +18 -3
  1164. package/src/table/createTableSelectAllCheckbox.ts +30 -14
  1165. package/src/table/createTableSelectionCheckbox.ts +21 -3
  1166. package/src/table/index.ts +2 -2
  1167. package/src/table/intl/ar-AE.json +13 -0
  1168. package/src/table/intl/bg-BG.json +13 -0
  1169. package/src/table/intl/cs-CZ.json +13 -0
  1170. package/src/table/intl/da-DK.json +13 -0
  1171. package/src/table/intl/de-DE.json +13 -0
  1172. package/src/table/intl/el-GR.json +13 -0
  1173. package/src/table/intl/en-US.json +13 -0
  1174. package/src/table/intl/es-ES.json +13 -0
  1175. package/src/table/intl/et-EE.json +13 -0
  1176. package/src/table/intl/fi-FI.json +13 -0
  1177. package/src/table/intl/fr-FR.json +13 -0
  1178. package/src/table/intl/he-IL.json +13 -0
  1179. package/src/table/intl/hr-HR.json +13 -0
  1180. package/src/table/intl/hu-HU.json +13 -0
  1181. package/src/table/intl/index.ts +132 -0
  1182. package/src/table/intl/it-IT.json +13 -0
  1183. package/src/table/intl/ja-JP.json +13 -0
  1184. package/src/table/intl/ko-KR.json +13 -0
  1185. package/src/table/intl/lt-LT.json +13 -0
  1186. package/src/table/intl/lv-LV.json +13 -0
  1187. package/src/table/intl/nb-NO.json +13 -0
  1188. package/src/table/intl/nl-NL.json +13 -0
  1189. package/src/table/intl/pl-PL.json +13 -0
  1190. package/src/table/intl/pt-BR.json +13 -0
  1191. package/src/table/intl/pt-PT.json +13 -0
  1192. package/src/table/intl/ro-RO.json +13 -0
  1193. package/src/table/intl/ru-RU.json +13 -0
  1194. package/src/table/intl/sk-SK.json +13 -0
  1195. package/src/table/intl/sl-SI.json +13 -0
  1196. package/src/table/intl/sr-SP.json +13 -0
  1197. package/src/table/intl/sv-SE.json +13 -0
  1198. package/src/table/intl/tr-TR.json +13 -0
  1199. package/src/table/intl/uk-UA.json +13 -0
  1200. package/src/table/intl/zh-CN.json +13 -0
  1201. package/src/table/intl/zh-TW.json +13 -0
  1202. package/src/table/types.ts +44 -2
  1203. package/src/table/utils.ts +15 -6
  1204. package/src/tabs/createTabs.ts +104 -37
  1205. package/src/tag/createTag.ts +118 -37
  1206. package/src/tag/createTagGroup.ts +20 -12
  1207. package/src/tag/intl/ar-AE.json +4 -0
  1208. package/src/tag/intl/bg-BG.json +4 -0
  1209. package/src/tag/intl/cs-CZ.json +4 -0
  1210. package/src/tag/intl/da-DK.json +4 -0
  1211. package/src/tag/intl/de-DE.json +4 -0
  1212. package/src/tag/intl/el-GR.json +4 -0
  1213. package/src/tag/intl/en-US.json +4 -0
  1214. package/src/tag/intl/es-ES.json +4 -0
  1215. package/src/tag/intl/et-EE.json +4 -0
  1216. package/src/tag/intl/fi-FI.json +4 -0
  1217. package/src/tag/intl/fr-FR.json +4 -0
  1218. package/src/tag/intl/he-IL.json +4 -0
  1219. package/src/tag/intl/hr-HR.json +4 -0
  1220. package/src/tag/intl/hu-HU.json +4 -0
  1221. package/src/tag/intl/index.ts +123 -0
  1222. package/src/tag/intl/it-IT.json +4 -0
  1223. package/src/tag/intl/ja-JP.json +4 -0
  1224. package/src/tag/intl/ko-KR.json +4 -0
  1225. package/src/tag/intl/lt-LT.json +4 -0
  1226. package/src/tag/intl/lv-LV.json +4 -0
  1227. package/src/tag/intl/nb-NO.json +4 -0
  1228. package/src/tag/intl/nl-NL.json +4 -0
  1229. package/src/tag/intl/pl-PL.json +4 -0
  1230. package/src/tag/intl/pt-BR.json +4 -0
  1231. package/src/tag/intl/pt-PT.json +4 -0
  1232. package/src/tag/intl/ro-RO.json +4 -0
  1233. package/src/tag/intl/ru-RU.json +4 -0
  1234. package/src/tag/intl/sk-SK.json +4 -0
  1235. package/src/tag/intl/sl-SI.json +4 -0
  1236. package/src/tag/intl/sr-SP.json +4 -0
  1237. package/src/tag/intl/sv-SE.json +4 -0
  1238. package/src/tag/intl/tr-TR.json +4 -0
  1239. package/src/tag/intl/uk-UA.json +4 -0
  1240. package/src/tag/intl/zh-CN.json +4 -0
  1241. package/src/tag/intl/zh-TW.json +4 -0
  1242. package/src/textfield/createTextField.ts +104 -14
  1243. package/src/toast/createToast.ts +39 -6
  1244. package/src/toast/createToastRegion.ts +28 -15
  1245. package/src/toast/intl/ar-AE.json +4 -0
  1246. package/src/toast/intl/bg-BG.json +4 -0
  1247. package/src/toast/intl/cs-CZ.json +4 -0
  1248. package/src/toast/intl/da-DK.json +4 -0
  1249. package/src/toast/intl/de-DE.json +4 -0
  1250. package/src/toast/intl/el-GR.json +4 -0
  1251. package/src/toast/intl/en-US.json +4 -0
  1252. package/src/toast/intl/es-ES.json +4 -0
  1253. package/src/toast/intl/et-EE.json +4 -0
  1254. package/src/toast/intl/fi-FI.json +4 -0
  1255. package/src/toast/intl/fr-FR.json +4 -0
  1256. package/src/toast/intl/he-IL.json +4 -0
  1257. package/src/toast/intl/hr-HR.json +4 -0
  1258. package/src/toast/intl/hu-HU.json +4 -0
  1259. package/src/toast/intl/index.ts +123 -0
  1260. package/src/toast/intl/it-IT.json +4 -0
  1261. package/src/toast/intl/ja-JP.json +4 -0
  1262. package/src/toast/intl/ko-KR.json +4 -0
  1263. package/src/toast/intl/lt-LT.json +4 -0
  1264. package/src/toast/intl/lv-LV.json +4 -0
  1265. package/src/toast/intl/nb-NO.json +4 -0
  1266. package/src/toast/intl/nl-NL.json +4 -0
  1267. package/src/toast/intl/pl-PL.json +4 -0
  1268. package/src/toast/intl/pt-BR.json +4 -0
  1269. package/src/toast/intl/pt-PT.json +4 -0
  1270. package/src/toast/intl/ro-RO.json +4 -0
  1271. package/src/toast/intl/ru-RU.json +4 -0
  1272. package/src/toast/intl/sk-SK.json +4 -0
  1273. package/src/toast/intl/sl-SI.json +4 -0
  1274. package/src/toast/intl/sr-SP.json +4 -0
  1275. package/src/toast/intl/sv-SE.json +4 -0
  1276. package/src/toast/intl/tr-TR.json +4 -0
  1277. package/src/toast/intl/uk-UA.json +4 -0
  1278. package/src/toast/intl/zh-CN.json +4 -0
  1279. package/src/toast/intl/zh-TW.json +4 -0
  1280. package/src/toggle/createToggle.ts +96 -15
  1281. package/src/tokenfield/createToken.ts +82 -0
  1282. package/src/tokenfield/createTokenField.ts +859 -0
  1283. package/src/tokenfield/index.ts +10 -0
  1284. package/src/toolbar/createToolbar.ts +26 -5
  1285. package/src/tooltip/createPreviewTrigger.ts +301 -0
  1286. package/src/tooltip/createSafeArea.ts +165 -0
  1287. package/src/tooltip/createTooltip.ts +15 -1
  1288. package/src/tooltip/createTooltipTrigger.ts +24 -3
  1289. package/src/tooltip/index.ts +7 -0
  1290. package/src/tooltip/intl/index.ts +76 -0
  1291. package/src/tree/createTree.ts +66 -50
  1292. package/src/tree/createTreeItem.ts +85 -21
  1293. package/src/tree/createTreeSelectionCheckbox.ts +29 -28
  1294. package/src/tree/intl/ar-AE.json +4 -0
  1295. package/src/tree/intl/bg-BG.json +4 -0
  1296. package/src/tree/intl/cs-CZ.json +4 -0
  1297. package/src/tree/intl/da-DK.json +4 -0
  1298. package/src/tree/intl/de-DE.json +4 -0
  1299. package/src/tree/intl/el-GR.json +4 -0
  1300. package/src/tree/intl/en-US.json +4 -0
  1301. package/src/tree/intl/es-ES.json +4 -0
  1302. package/src/tree/intl/et-EE.json +4 -0
  1303. package/src/tree/intl/fi-FI.json +4 -0
  1304. package/src/tree/intl/fr-FR.json +4 -0
  1305. package/src/tree/intl/he-IL.json +4 -0
  1306. package/src/tree/intl/hr-HR.json +4 -0
  1307. package/src/tree/intl/hu-HU.json +4 -0
  1308. package/src/tree/intl/index.ts +123 -0
  1309. package/src/tree/intl/it-IT.json +4 -0
  1310. package/src/tree/intl/ja-JP.json +4 -0
  1311. package/src/tree/intl/ko-KR.json +4 -0
  1312. package/src/tree/intl/lt-LT.json +4 -0
  1313. package/src/tree/intl/lv-LV.json +4 -0
  1314. package/src/tree/intl/nb-NO.json +4 -0
  1315. package/src/tree/intl/nl-NL.json +4 -0
  1316. package/src/tree/intl/pl-PL.json +4 -0
  1317. package/src/tree/intl/pt-BR.json +4 -0
  1318. package/src/tree/intl/pt-PT.json +4 -0
  1319. package/src/tree/intl/ro-RO.json +4 -0
  1320. package/src/tree/intl/ru-RU.json +4 -0
  1321. package/src/tree/intl/sk-SK.json +4 -0
  1322. package/src/tree/intl/sl-SI.json +4 -0
  1323. package/src/tree/intl/sr-SP.json +4 -0
  1324. package/src/tree/intl/sv-SE.json +4 -0
  1325. package/src/tree/intl/tr-TR.json +4 -0
  1326. package/src/tree/intl/uk-UA.json +4 -0
  1327. package/src/tree/intl/zh-CN.json +4 -0
  1328. package/src/tree/intl/zh-TW.json +4 -0
  1329. package/src/tree/types.ts +35 -2
  1330. package/src/utils/ShadowTreeWalker.ts +249 -0
  1331. package/src/utils/animation.ts +106 -85
  1332. package/src/utils/capture.ts +51 -0
  1333. package/src/utils/createDescription.ts +31 -8
  1334. package/src/utils/dom.ts +314 -33
  1335. package/src/utils/domAttrs.ts +84 -0
  1336. package/src/utils/env.ts +2 -0
  1337. package/src/utils/events.ts +39 -3
  1338. package/src/utils/filterDOMProps.ts +34 -2
  1339. package/src/utils/focus.ts +186 -32
  1340. package/src/utils/geometry.ts +15 -1
  1341. package/src/utils/getMetaValue.ts +57 -0
  1342. package/src/utils/getNonce.ts +40 -0
  1343. package/src/utils/globalListeners.ts +16 -3
  1344. package/src/utils/index.ts +14 -0
  1345. package/src/utils/keyboard.ts +15 -1
  1346. package/src/utils/mergeProps.ts +149 -16
  1347. package/src/utils/owner.ts +26 -0
  1348. package/src/utils/platform.ts +15 -1
  1349. package/src/utils/reactivity.ts +2 -0
  1350. package/src/utils/refs.ts +53 -0
  1351. package/src/utils/runAfterTransition.ts +117 -0
  1352. package/src/utils/scrollIntoView.ts +14 -0
  1353. package/src/utils/splitProps.ts +70 -0
  1354. package/src/utils/textSelection.ts +15 -1
  1355. package/src/virtualizer/ScrollView.ts +210 -0
  1356. package/src/virtualizer/index.ts +2 -0
  1357. package/src/virtualizer/utils.ts +100 -0
  1358. package/src/visually-hidden/createVisuallyHidden.ts +20 -4
  1359. package/dist/_chunk/createInteractionModality.js +0 -268
  1360. package/dist/_chunk/createInteractionModality.js.map +0 -1
  1361. package/dist/_chunk/createInteractionModality.jsx +0 -268
  1362. package/dist/_chunk/createInteractionModality.jsx.map +0 -1
  1363. package/dist/_chunk/focus2.js +0 -631
  1364. package/dist/_chunk/focus2.js.map +0 -1
  1365. package/dist/_chunk/focus2.jsx +0 -631
  1366. package/dist/_chunk/focus2.jsx.map +0 -1
  1367. package/dist/_chunk/visually-hidden.js.map +0 -1
  1368. package/dist/_chunk/visually-hidden.jsx.map +0 -1
  1369. package/dist/checkbox/createCheckboxGroupState.d.ts +0 -71
  1370. package/dist/checkbox/createCheckboxGroupState.d.ts.map +0 -1
  1371. package/dist/radio/createRadioGroupState.d.ts +0 -77
  1372. package/dist/radio/createRadioGroupState.d.ts.map +0 -1
  1373. package/dist/toggle/createToggleState.d.ts +0 -34
  1374. package/dist/toggle/createToggleState.d.ts.map +0 -1
  1375. package/src/checkbox/createCheckboxGroupState.ts +0 -174
  1376. package/src/radio/createRadioGroupState.ts +0 -177
  1377. package/src/toggle/createToggleState.ts +0 -86
@@ -1 +1 @@
1
- {"version":3,"file":"createToggle.js","names":["mergeProps"],"sources":["../../src/toggle/createToggle.ts"],"sourcesContent":["/**\n * Toggle hook for Solidaria\n *\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n *\n * This is a 1:1 port of @react-aria/toggle's useToggle hook.\n */\n\nimport { JSX, Accessor, createEffect } from \"solid-js\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type ToggleState } from \"@proyecto-viviana/solid-stately\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\n\nexport interface AriaToggleProps {\n /** Whether the element should be selected (controlled). */\n isSelected?: boolean;\n /** Whether the element should be selected by default (uncontrolled). */\n defaultSelected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (isSelected: boolean) => void;\n /** The value of the input element, used when submitting an HTML form. */\n value?: string;\n /** The name of the input element, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the input with. */\n form?: string;\n /** Whether the element is disabled. */\n isDisabled?: boolean;\n /** Whether the element is read only. */\n isReadOnly?: boolean;\n /** Whether the element is required. */\n isRequired?: boolean;\n /** Whether the element is invalid. */\n isInvalid?: boolean;\n /** The element's children. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** Identifies the element (or elements) whose contents or presence are controlled by the current element. */\n \"aria-controls\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to exclude the element from the tab order. */\n excludeFromTabOrder?: boolean;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface ToggleAria {\n /** Props to be spread on the label element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props to be spread on the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the toggle is selected. */\n isSelected: Accessor<boolean>;\n /** Whether the toggle is in a pressed state. */\n isPressed: Accessor<boolean>;\n /** Whether the toggle is disabled. */\n isDisabled: boolean;\n /** Whether the toggle is read only. */\n isReadOnly: boolean;\n /** Whether the toggle is invalid. */\n isInvalid: boolean;\n}\n\n/**\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n */\nexport function createToggle(\n props: MaybeAccessor<AriaToggleProps>,\n state: ToggleState,\n ref: () => HTMLInputElement | null,\n): ToggleAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled ?? false;\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n // Handle press state on the label.\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.toggle();\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled() || isReadOnly();\n },\n });\n\n // Handle focusable - extract the relevant props for createFocusable\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n get onFocus() {\n return getProps().onFocus;\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n get excludeFromTabOrder() {\n return getProps().excludeFromTabOrder;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n // Combine press and focusable props for input\n const interactions = mergeProps(pressProps, focusableProps);\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n // Handle input change\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n // Since we spread props on label, onChange will end up there as well as in here.\n // So we have to stop propagation at the lowest level that we care about\n e.stopPropagation();\n\n // Don't update state if readonly\n if (isReadOnly()) {\n // Reset the checkbox to its previous state since the browser already toggled it\n e.currentTarget.checked = state.isSelected();\n return;\n }\n\n state.setSelected(e.currentTarget.checked);\n };\n\n // Warn if no accessible label\n createEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // Combined pressed state\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // Mint ids for the description and error message slots. Copied from createField\n // because we don't want the label behavior that provides — the id resolves only\n // once an element with that id is actually rendered (e.g. via TextContext slots).\n const descriptionId = createSlotId();\n const errorMessageId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n get inputProps() {\n const p = getProps();\n return mergeProps(domProps(), {\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": p[\"aria-errormessage\"],\n \"aria-controls\": p[\"aria-controls\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-describedby\":\n [descriptionId(), errorMessageId(), p[\"aria-describedby\"]].filter(Boolean).join(\" \") ||\n undefined,\n onChange,\n disabled: isDisabled(),\n ...(p.value == null ? {} : { value: p.value }),\n name: p.name,\n form: p.form,\n type: \"checkbox\" as const,\n ...interactions,\n // Stop click propagation to prevent labelProps.onClick from calling preventDefault\n // which would prevent the checkbox from toggling in JSDOM/testing-library environments\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n get errorMessageProps() {\n return { id: errorMessageId() };\n },\n isSelected: state.isSelected,\n isPressed: combinedIsPressed,\n isDisabled: isDisabled(),\n isReadOnly: isReadOnly(),\n isInvalid: isInvalid(),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createToggle.js","names":[],"sources":["../../src/toggle/createToggle.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/toggle/useToggle.ts\n\n/**\n * Toggle hook for Solidaria\n *\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n *\n * This is a 1:1 port of @react-aria/toggle's useToggle hook.\n */\n\nimport { Accessor, createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { createFormValidationState, type ToggleState } from \"@proyecto-viviana/solid-stately\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\nimport { createFormValidation } from \"../form/createFormValidation\";\nimport { createFormReset } from \"../form/createFormReset\";\n\nexport interface AriaToggleProps {\n /** Whether the element should be selected (controlled). */\n isSelected?: boolean;\n /** Whether the element should be selected by default (uncontrolled). */\n defaultSelected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (isSelected: boolean) => void;\n /** The value of the input element, used when submitting an HTML form. */\n value?: string;\n /** The name of the input element, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the input with. */\n form?: string;\n /** Whether the element is disabled. */\n isDisabled?: boolean;\n /** Whether the element is read only. */\n isReadOnly?: boolean;\n /** Whether the element is required. */\n isRequired?: boolean;\n /** Whether the element is invalid. */\n isInvalid?: boolean;\n /**\n * `\"native\"` sets the `required` attribute and omits `aria-required`.\n * `\"aria\"` does the reverse. S2 Checkbox default is native.\n * @default \"native\"\n */\n validationBehavior?: \"aria\" | \"native\";\n /** The element's children. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** Identifies the element (or elements) whose contents or presence are controlled by the current element. */\n \"aria-controls\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to exclude the element from the tab order. */\n excludeFromTabOrder?: boolean;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface ToggleAria {\n /** Props to be spread on the label element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props to be spread on the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the toggle is selected. */\n isSelected: Accessor<boolean>;\n /** Whether the toggle is in a pressed state. */\n isPressed: Accessor<boolean>;\n /** Whether the toggle is disabled. */\n isDisabled: boolean;\n /** Whether the toggle is read only. */\n isReadOnly: boolean;\n /** Whether the toggle is invalid. */\n isInvalid: boolean;\n}\n\n/**\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n */\nexport function createToggle(\n props: MaybeAccessor<AriaToggleProps>,\n state: ToggleState,\n ref: () => HTMLInputElement | null,\n): ToggleAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled ?? false;\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n const validationState = createFormValidationState({\n get value() {\n return state.isSelected();\n },\n get isInvalid() {\n return getProps().isInvalid;\n },\n get validationBehavior() {\n return validationBehavior();\n },\n });\n\n createFormValidation(\n {\n get validationBehavior() {\n return validationBehavior();\n },\n },\n validationState,\n () => ref() ?? undefined,\n );\n\n // RAC useToggle: useFormReset(ref, state.defaultSelected, state.setSelected).\n createFormReset(\n () => ref() ?? undefined,\n state.defaultSelected,\n (value) => state.setSelected(value),\n );\n\n const skipLabelKeyboardPress = (e: PressEvent): boolean => {\n // Keyboard/virtual activation is handled by the native input (Space).\n // Enter on a focused checkbox must not toggle — RAC useToggle label press.\n if (e.pointerType === \"keyboard\" || e.pointerType === \"virtual\") {\n e.continuePropagation();\n return true;\n }\n return false;\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n // Handle press state on the label.\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n onPressStart(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressStart?.(e);\n },\n onPressEnd(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressEnd?.(e);\n },\n onPressUp(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressUp?.(e);\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPress?.(e);\n state.toggle();\n ref()?.focus();\n validationState.commitValidation();\n },\n get isDisabled() {\n return isDisabled() || isReadOnly();\n },\n });\n\n // Handle focusable - extract the relevant props for createFocusable\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n get onFocus() {\n return getProps().onFocus;\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n get excludeFromTabOrder() {\n return getProps().excludeFromTabOrder;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n // Combine press and focusable props for input\n const interactions = mergeProps(pressProps, focusableProps);\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n // Handle input change\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n // Since we spread props on label, onChange will end up there as well as in here.\n // So we have to stop propagation at the lowest level that we care about\n e.stopPropagation();\n\n // Don't update state if readonly\n if (isReadOnly()) {\n // Reset the checkbox to its previous state since the browser already toggled it\n e.currentTarget.checked = state.isSelected();\n return;\n }\n\n state.setSelected(e.currentTarget.checked);\n };\n\n // Warn if no accessible label\n createTrackedEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // Combined pressed state\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // Mint ids for the description and error message slots. Copied from createField\n // because we don't want the label behavior that provides — the id resolves only\n // once an element with that id is actually rendered (e.g. via TextContext slots).\n const descriptionId = createSlotId();\n const errorMessageId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n get inputProps() {\n const p = getProps();\n return mergeProps(domProps(), {\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": p[\"aria-errormessage\"],\n \"aria-controls\": p[\"aria-controls\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": (p.isRequired && validationBehavior() === \"aria\") || undefined,\n required: (p.isRequired && validationBehavior() === \"native\") || undefined,\n \"aria-describedby\":\n [descriptionId(), errorMessageId(), p[\"aria-describedby\"]].filter(Boolean).join(\" \") ||\n undefined,\n onChange,\n disabled: isDisabled(),\n ...(p.value == null ? {} : { value: p.value }),\n name: p.name,\n form: p.form,\n type: \"checkbox\" as const,\n ...interactions,\n // Stop click propagation to prevent labelProps.onClick from calling preventDefault\n // which would prevent the checkbox from toggling in JSDOM/testing-library environments\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n get errorMessageProps() {\n return { id: errorMessageId() };\n },\n isSelected: state.isSelected,\n isPressed: combinedIsPressed,\n get isDisabled() {\n return isDisabled();\n },\n get isReadOnly() {\n return isReadOnly();\n },\n get isInvalid() {\n return isInvalid();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,10 +1,26 @@
1
- import { t as createPress } from "./createPress.jsx";
2
- import { i as mergeProps$1, t as isDevEnv } from "./env.jsx";
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/toggle/useToggle.ts
13
+ import { t as mergeProps } from "./mergeProps.jsx";
3
14
  import { t as filterDOMProps } from "./filterDOMProps.jsx";
4
15
  import { t as access } from "./reactivity.jsx";
16
+ import { t as isDevEnv } from "./env.jsx";
17
+ import { t as createPress } from "./createPress.jsx";
5
18
  import { n as createFocusable } from "./createFocusable.jsx";
6
19
  import { createSlotId } from "../ssr/index.jsx";
7
- import { createEffect } from "solid-js";
20
+ import { t as createFormValidation } from "./createFormValidation.jsx";
21
+ import { t as createFormReset } from "./createFormReset.jsx";
22
+ import { createTrackedEffect } from "solid-js";
23
+ import { createFormValidationState } from "@proyecto-viviana/solid-stately";
8
24
  //#region src/toggle/createToggle.ts
9
25
  /**
10
26
  * Toggle hook for Solidaria
@@ -20,9 +36,32 @@ function createToggle(props, state, ref) {
20
36
  const getProps = () => access(props);
21
37
  const isDisabled = () => getProps().isDisabled ?? false;
22
38
  const isReadOnly = () => getProps().isReadOnly ?? false;
39
+ const validationBehavior = () => getProps().validationBehavior ?? "native";
23
40
  const isInvalid = () => {
24
41
  return getProps().isInvalid ?? false;
25
42
  };
43
+ const validationState = createFormValidationState({
44
+ get value() {
45
+ return state.isSelected();
46
+ },
47
+ get isInvalid() {
48
+ return getProps().isInvalid;
49
+ },
50
+ get validationBehavior() {
51
+ return validationBehavior();
52
+ }
53
+ });
54
+ createFormValidation({ get validationBehavior() {
55
+ return validationBehavior();
56
+ } }, validationState, () => ref() ?? void 0);
57
+ createFormReset(() => ref() ?? void 0, state.defaultSelected, (value) => state.setSelected(value));
58
+ const skipLabelKeyboardPress = (e) => {
59
+ if (e.pointerType === "keyboard" || e.pointerType === "virtual") {
60
+ e.continuePropagation();
61
+ return true;
62
+ }
63
+ return false;
64
+ };
26
65
  const { pressProps, isPressed } = createPress({
27
66
  get onPressStart() {
28
67
  return getProps().onPressStart;
@@ -47,25 +86,27 @@ function createToggle(props, state, ref) {
47
86
  }
48
87
  });
49
88
  const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({
50
- get onPressStart() {
51
- return getProps().onPressStart;
89
+ onPressStart(e) {
90
+ if (skipLabelKeyboardPress(e)) return;
91
+ getProps().onPressStart?.(e);
52
92
  },
53
- get onPressEnd() {
54
- return getProps().onPressEnd;
55
- },
56
- get onPressChange() {
57
- return getProps().onPressChange;
93
+ onPressEnd(e) {
94
+ if (skipLabelKeyboardPress(e)) return;
95
+ getProps().onPressEnd?.(e);
58
96
  },
59
- get onPressUp() {
60
- return getProps().onPressUp;
97
+ onPressUp(e) {
98
+ if (skipLabelKeyboardPress(e)) return;
99
+ getProps().onPressUp?.(e);
61
100
  },
62
101
  get onClick() {
63
102
  return getProps().onClick;
64
103
  },
65
104
  onPress(e) {
105
+ if (skipLabelKeyboardPress(e)) return;
66
106
  getProps().onPress?.(e);
67
107
  state.toggle();
68
108
  ref()?.focus();
109
+ validationState.commitValidation();
69
110
  },
70
111
  get isDisabled() {
71
112
  return isDisabled() || isReadOnly();
@@ -97,7 +138,7 @@ function createToggle(props, state, ref) {
97
138
  return getProps().excludeFromTabOrder;
98
139
  }
99
140
  }, ref);
100
- const interactions = mergeProps$1(pressProps, focusableProps);
141
+ const interactions = mergeProps(pressProps, focusableProps);
101
142
  const domProps = () => filterDOMProps(getProps(), { labelable: true });
102
143
  const onChange = (e) => {
103
144
  e.stopPropagation();
@@ -107,7 +148,7 @@ function createToggle(props, state, ref) {
107
148
  }
108
149
  state.setSelected(e.currentTarget.checked);
109
150
  };
110
- createEffect(() => {
151
+ createTrackedEffect(() => {
111
152
  const p = getProps();
112
153
  const hasChildren = p.children != null;
113
154
  const hasAriaLabel = p["aria-label"] != null || p["aria-labelledby"] != null;
@@ -117,14 +158,16 @@ function createToggle(props, state, ref) {
117
158
  const descriptionId = createSlotId();
118
159
  const errorMessageId = createSlotId();
119
160
  return {
120
- labelProps: mergeProps$1(labelPressProps, { onClick: (e) => e.preventDefault() }),
161
+ labelProps: mergeProps(labelPressProps, { onClick: (e) => e.preventDefault() }),
121
162
  get inputProps() {
122
163
  const p = getProps();
123
- return mergeProps$1(domProps(), {
164
+ return mergeProps(domProps(), {
124
165
  "aria-invalid": isInvalid() || void 0,
125
166
  "aria-errormessage": p["aria-errormessage"],
126
167
  "aria-controls": p["aria-controls"],
127
168
  "aria-readonly": isReadOnly() || void 0,
169
+ "aria-required": p.isRequired && validationBehavior() === "aria" || void 0,
170
+ required: p.isRequired && validationBehavior() === "native" || void 0,
128
171
  "aria-describedby": [
129
172
  descriptionId(),
130
173
  errorMessageId(),
@@ -148,9 +191,15 @@ function createToggle(props, state, ref) {
148
191
  },
149
192
  isSelected: state.isSelected,
150
193
  isPressed: combinedIsPressed,
151
- isDisabled: isDisabled(),
152
- isReadOnly: isReadOnly(),
153
- isInvalid: isInvalid()
194
+ get isDisabled() {
195
+ return isDisabled();
196
+ },
197
+ get isReadOnly() {
198
+ return isReadOnly();
199
+ },
200
+ get isInvalid() {
201
+ return isInvalid();
202
+ }
154
203
  };
155
204
  }
156
205
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"createToggle.jsx","names":["mergeProps"],"sources":["../../src/toggle/createToggle.ts"],"sourcesContent":["/**\n * Toggle hook for Solidaria\n *\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n *\n * This is a 1:1 port of @react-aria/toggle's useToggle hook.\n */\n\nimport { JSX, Accessor, createEffect } from \"solid-js\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { type ToggleState } from \"@proyecto-viviana/solid-stately\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\n\nexport interface AriaToggleProps {\n /** Whether the element should be selected (controlled). */\n isSelected?: boolean;\n /** Whether the element should be selected by default (uncontrolled). */\n defaultSelected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (isSelected: boolean) => void;\n /** The value of the input element, used when submitting an HTML form. */\n value?: string;\n /** The name of the input element, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the input with. */\n form?: string;\n /** Whether the element is disabled. */\n isDisabled?: boolean;\n /** Whether the element is read only. */\n isReadOnly?: boolean;\n /** Whether the element is required. */\n isRequired?: boolean;\n /** Whether the element is invalid. */\n isInvalid?: boolean;\n /** The element's children. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** Identifies the element (or elements) whose contents or presence are controlled by the current element. */\n \"aria-controls\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to exclude the element from the tab order. */\n excludeFromTabOrder?: boolean;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface ToggleAria {\n /** Props to be spread on the label element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props to be spread on the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the toggle is selected. */\n isSelected: Accessor<boolean>;\n /** Whether the toggle is in a pressed state. */\n isPressed: Accessor<boolean>;\n /** Whether the toggle is disabled. */\n isDisabled: boolean;\n /** Whether the toggle is read only. */\n isReadOnly: boolean;\n /** Whether the toggle is invalid. */\n isInvalid: boolean;\n}\n\n/**\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n */\nexport function createToggle(\n props: MaybeAccessor<AriaToggleProps>,\n state: ToggleState,\n ref: () => HTMLInputElement | null,\n): ToggleAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled ?? false;\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n // Handle press state on the label.\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n getProps().onPress?.(e);\n state.toggle();\n ref()?.focus();\n },\n get isDisabled() {\n return isDisabled() || isReadOnly();\n },\n });\n\n // Handle focusable - extract the relevant props for createFocusable\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n get onFocus() {\n return getProps().onFocus;\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n get excludeFromTabOrder() {\n return getProps().excludeFromTabOrder;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n // Combine press and focusable props for input\n const interactions = mergeProps(pressProps, focusableProps);\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n // Handle input change\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n // Since we spread props on label, onChange will end up there as well as in here.\n // So we have to stop propagation at the lowest level that we care about\n e.stopPropagation();\n\n // Don't update state if readonly\n if (isReadOnly()) {\n // Reset the checkbox to its previous state since the browser already toggled it\n e.currentTarget.checked = state.isSelected();\n return;\n }\n\n state.setSelected(e.currentTarget.checked);\n };\n\n // Warn if no accessible label\n createEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // Combined pressed state\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // Mint ids for the description and error message slots. Copied from createField\n // because we don't want the label behavior that provides — the id resolves only\n // once an element with that id is actually rendered (e.g. via TextContext slots).\n const descriptionId = createSlotId();\n const errorMessageId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n get inputProps() {\n const p = getProps();\n return mergeProps(domProps(), {\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": p[\"aria-errormessage\"],\n \"aria-controls\": p[\"aria-controls\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-describedby\":\n [descriptionId(), errorMessageId(), p[\"aria-describedby\"]].filter(Boolean).join(\" \") ||\n undefined,\n onChange,\n disabled: isDisabled(),\n ...(p.value == null ? {} : { value: p.value }),\n name: p.name,\n form: p.form,\n type: \"checkbox\" as const,\n ...interactions,\n // Stop click propagation to prevent labelProps.onClick from calling preventDefault\n // which would prevent the checkbox from toggling in JSDOM/testing-library environments\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n get errorMessageProps() {\n return { id: errorMessageId() };\n },\n isSelected: state.isSelected,\n isPressed: combinedIsPressed,\n isDisabled: isDisabled(),\n isReadOnly: isReadOnly(),\n isInvalid: isInvalid(),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createToggle.jsx","names":[],"sources":["../../src/toggle/createToggle.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/toggle/useToggle.ts\n\n/**\n * Toggle hook for Solidaria\n *\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n *\n * This is a 1:1 port of @react-aria/toggle's useToggle hook.\n */\n\nimport { Accessor, createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createPress } from \"../interactions/createPress\";\nimport { createFocusable } from \"../interactions/createFocusable\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport { createSlotId } from \"../ssr\";\nimport { createFormValidationState, type ToggleState } from \"@proyecto-viviana/solid-stately\";\nimport { type PressEvent } from \"../interactions/PressEvent\";\nimport { createFormValidation } from \"../form/createFormValidation\";\nimport { createFormReset } from \"../form/createFormReset\";\n\nexport interface AriaToggleProps {\n /** Whether the element should be selected (controlled). */\n isSelected?: boolean;\n /** Whether the element should be selected by default (uncontrolled). */\n defaultSelected?: boolean;\n /** Handler that is called when the element's selection state changes. */\n onChange?: (isSelected: boolean) => void;\n /** The value of the input element, used when submitting an HTML form. */\n value?: string;\n /** The name of the input element, used when submitting an HTML form. */\n name?: string;\n /** The form to associate the input with. */\n form?: string;\n /** Whether the element is disabled. */\n isDisabled?: boolean;\n /** Whether the element is read only. */\n isReadOnly?: boolean;\n /** Whether the element is required. */\n isRequired?: boolean;\n /** Whether the element is invalid. */\n isInvalid?: boolean;\n /**\n * `\"native\"` sets the `required` attribute and omits `aria-required`.\n * `\"aria\"` does the reverse. S2 Checkbox default is native.\n * @default \"native\"\n */\n validationBehavior?: \"aria\" | \"native\";\n /** The element's children. */\n children?: JSX.Element;\n /** Defines a string value that labels the current element. */\n \"aria-label\"?: string;\n /** Identifies the element (or elements) that labels the current element. */\n \"aria-labelledby\"?: string;\n /** Identifies the element (or elements) that describes the object. */\n \"aria-describedby\"?: string;\n /** Identifies the element (or elements) that provide an error message for the object. */\n \"aria-errormessage\"?: string;\n /** Identifies the element (or elements) whose contents or presence are controlled by the current element. */\n \"aria-controls\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /** Handler that is called when the press is released over the target. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction starts. */\n onPressStart?: (e: PressEvent) => void;\n /** Handler that is called when a press interaction ends, either over the target or when the pointer leaves the target. */\n onPressEnd?: (e: PressEvent) => void;\n /** Handler that is called when the press state changes. */\n onPressChange?: (isPressed: boolean) => void;\n /** Handler that is called when a press is released over the target, regardless of whether it started on the target or not. */\n onPressUp?: (e: PressEvent) => void;\n /** Handler that is called when the element is clicked. */\n onClick?: (e: MouseEvent) => void;\n /** Handler that is called when the element receives focus. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler that is called when the element loses focus. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler that is called when the element's focus status changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler that is called when a key is pressed. */\n onKeyDown?: (e: KeyboardEvent) => void;\n /** Handler that is called when a key is released. */\n onKeyUp?: (e: KeyboardEvent) => void;\n /** Whether to exclude the element from the tab order. */\n excludeFromTabOrder?: boolean;\n /** Whether to autofocus the element. */\n autoFocus?: boolean;\n}\n\nexport interface ToggleAria {\n /** Props to be spread on the label element. */\n labelProps: JSX.LabelHTMLAttributes<HTMLLabelElement>;\n /** Props to be spread on the input element. */\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n /** Props for the description element, if any. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the error message element, if any. */\n errorMessageProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the toggle is selected. */\n isSelected: Accessor<boolean>;\n /** Whether the toggle is in a pressed state. */\n isPressed: Accessor<boolean>;\n /** Whether the toggle is disabled. */\n isDisabled: boolean;\n /** Whether the toggle is read only. */\n isReadOnly: boolean;\n /** Whether the toggle is invalid. */\n isInvalid: boolean;\n}\n\n/**\n * Handles interactions for toggle elements, e.g. Checkboxes and Switches.\n */\nexport function createToggle(\n props: MaybeAccessor<AriaToggleProps>,\n state: ToggleState,\n ref: () => HTMLInputElement | null,\n): ToggleAria {\n const getProps = () => access(props);\n\n const isDisabled = () => getProps().isDisabled ?? false;\n const isReadOnly = () => getProps().isReadOnly ?? false;\n const validationBehavior = () => getProps().validationBehavior ?? \"native\";\n const isInvalid = () => {\n return getProps().isInvalid ?? false;\n };\n\n const validationState = createFormValidationState({\n get value() {\n return state.isSelected();\n },\n get isInvalid() {\n return getProps().isInvalid;\n },\n get validationBehavior() {\n return validationBehavior();\n },\n });\n\n createFormValidation(\n {\n get validationBehavior() {\n return validationBehavior();\n },\n },\n validationState,\n () => ref() ?? undefined,\n );\n\n // RAC useToggle: useFormReset(ref, state.defaultSelected, state.setSelected).\n createFormReset(\n () => ref() ?? undefined,\n state.defaultSelected,\n (value) => state.setSelected(value),\n );\n\n const skipLabelKeyboardPress = (e: PressEvent): boolean => {\n // Keyboard/virtual activation is handled by the native input (Space).\n // Enter on a focused checkbox must not toggle — RAC useToggle label press.\n if (e.pointerType === \"keyboard\" || e.pointerType === \"virtual\") {\n e.continuePropagation();\n return true;\n }\n return false;\n };\n\n // Handle press state for keyboard interactions and cases where labelProps is not used.\n const { pressProps, isPressed } = createPress({\n get onPressStart() {\n return getProps().onPressStart;\n },\n get onPressEnd() {\n return getProps().onPressEnd;\n },\n get onPressChange() {\n return getProps().onPressChange;\n },\n get onPress() {\n return getProps().onPress;\n },\n get onPressUp() {\n return getProps().onPressUp;\n },\n get onClick() {\n return getProps().onClick;\n },\n get isDisabled() {\n return isDisabled();\n },\n });\n\n // Handle press state on the label.\n const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({\n onPressStart(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressStart?.(e);\n },\n onPressEnd(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressEnd?.(e);\n },\n onPressUp(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPressUp?.(e);\n },\n get onClick() {\n return getProps().onClick;\n },\n onPress(e: PressEvent) {\n if (skipLabelKeyboardPress(e)) {\n return;\n }\n getProps().onPress?.(e);\n state.toggle();\n ref()?.focus();\n validationState.commitValidation();\n },\n get isDisabled() {\n return isDisabled() || isReadOnly();\n },\n });\n\n // Handle focusable - extract the relevant props for createFocusable\n const { focusableProps } = createFocusable(\n {\n get isDisabled() {\n return isDisabled();\n },\n get autoFocus() {\n return getProps().autoFocus;\n },\n get onFocus() {\n return getProps().onFocus;\n },\n get onBlur() {\n return getProps().onBlur;\n },\n get onFocusChange() {\n return getProps().onFocusChange;\n },\n get onKeyDown() {\n return getProps().onKeyDown;\n },\n get onKeyUp() {\n return getProps().onKeyUp;\n },\n get excludeFromTabOrder() {\n return getProps().excludeFromTabOrder;\n },\n },\n ref as unknown as (el: HTMLElement) => void,\n );\n\n // Combine press and focusable props for input\n const interactions = mergeProps(pressProps, focusableProps);\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n // Handle input change\n const onChange: JSX.EventHandler<HTMLInputElement, Event> = (e) => {\n // Since we spread props on label, onChange will end up there as well as in here.\n // So we have to stop propagation at the lowest level that we care about\n e.stopPropagation();\n\n // Don't update state if readonly\n if (isReadOnly()) {\n // Reset the checkbox to its previous state since the browser already toggled it\n e.currentTarget.checked = state.isSelected();\n return;\n }\n\n state.setSelected(e.currentTarget.checked);\n };\n\n // Warn if no accessible label\n createTrackedEffect(() => {\n const p = getProps();\n const hasChildren = p.children != null;\n const hasAriaLabel = p[\"aria-label\"] != null || p[\"aria-labelledby\"] != null;\n if (!hasChildren && !hasAriaLabel && isDevEnv()) {\n console.warn(\n \"If you do not provide children, you must specify an aria-label for accessibility\",\n );\n }\n });\n\n // Combined pressed state\n const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();\n\n // Mint ids for the description and error message slots. Copied from createField\n // because we don't want the label behavior that provides — the id resolves only\n // once an element with that id is actually rendered (e.g. via TextContext slots).\n const descriptionId = createSlotId();\n const errorMessageId = createSlotId();\n\n return {\n labelProps: mergeProps(labelPressProps, {\n onClick: (e: MouseEvent) => e.preventDefault(),\n }) as JSX.LabelHTMLAttributes<HTMLLabelElement>,\n get inputProps() {\n const p = getProps();\n return mergeProps(domProps(), {\n \"aria-invalid\": isInvalid() || undefined,\n \"aria-errormessage\": p[\"aria-errormessage\"],\n \"aria-controls\": p[\"aria-controls\"],\n \"aria-readonly\": isReadOnly() || undefined,\n \"aria-required\": (p.isRequired && validationBehavior() === \"aria\") || undefined,\n required: (p.isRequired && validationBehavior() === \"native\") || undefined,\n \"aria-describedby\":\n [descriptionId(), errorMessageId(), p[\"aria-describedby\"]].filter(Boolean).join(\" \") ||\n undefined,\n onChange,\n disabled: isDisabled(),\n ...(p.value == null ? {} : { value: p.value }),\n name: p.name,\n form: p.form,\n type: \"checkbox\" as const,\n ...interactions,\n // Stop click propagation to prevent labelProps.onClick from calling preventDefault\n // which would prevent the checkbox from toggling in JSDOM/testing-library environments\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }) as JSX.InputHTMLAttributes<HTMLInputElement>;\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n get errorMessageProps() {\n return { id: errorMessageId() };\n },\n isSelected: state.isSelected,\n isPressed: combinedIsPressed,\n get isDisabled() {\n return isDisabled();\n },\n get isReadOnly() {\n return isReadOnly();\n },\n get isInvalid() {\n return isInvalid();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,17 @@
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/selection/useTypeSelect.ts
13
+ import { t as onOwnedCleanup } from "./owner.js";
1
14
  import { t as createCollator } from "./createCollator.js";
2
- import { onCleanup } from "solid-js";
3
15
  //#region src/selection/createTypeSelect.ts
4
16
  /**
5
17
  * createTypeSelect - Handles typeahead interactions with collections.
@@ -98,7 +110,7 @@ function createTypeSelect(options) {
98
110
  const onKeyDown = (e) => {
99
111
  if (options.isDisabled) return;
100
112
  const character = getStringForKey(e.key);
101
- if (!character || e.ctrlKey || e.metaKey || e.altKey || !e.currentTarget.contains(e.target) || state.search.length === 0 && character === " ") return;
113
+ if (!character || e.ctrlKey || e.metaKey || e.altKey || !e.currentTarget?.contains(e.target) || state.search.length === 0 && character === " ") return;
102
114
  state.search += character;
103
115
  if (searchAndFocus() != null) {
104
116
  e.preventDefault();
@@ -111,7 +123,7 @@ function createTypeSelect(options) {
111
123
  }
112
124
  restartDebounce();
113
125
  };
114
- onCleanup(() => {
126
+ onOwnedCleanup(() => {
115
127
  clearTimeout(state.timeout);
116
128
  });
117
129
  return { typeSelectProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"createTypeSelect.js","names":[],"sources":["../../src/selection/createTypeSelect.ts"],"sourcesContent":["/**\n * createTypeSelect - Handles typeahead interactions with collections.\n * Based on @react-aria/selection useTypeSelect.\n *\n * Allows users to navigate to items by typing characters that match\n * item text values. Supports multi-character search with debouncing.\n */\n\nimport { onCleanup } from \"solid-js\";\nimport type { JSX, Accessor } from \"solid-js\";\nimport type { Key, Collection, CollectionNode } from \"@proyecto-viviana/solid-stately\";\nimport { createCollator } from \"../i18n/createCollator\";\n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */\nconst TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\n\nexport interface TypeSelectOptions<T> {\n /** The collection to search through. */\n collection: Accessor<Collection<T>>;\n /** The currently focused key. */\n focusedKey: Accessor<Key | null>;\n /** Callback to set the focused key when a match is found. */\n onFocusedKeyChange: (key: Key) => void;\n /** Callback when an item is focused by typing. */\n onTypeSelect?: (key: Key) => void;\n /** Function to check if a key is disabled. */\n isKeyDisabled?: (key: Key) => boolean;\n /** Whether type-to-select is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface TypeSelectAria {\n /** Props to spread on the collection element. */\n typeSelectProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Internal state for tracking the search buffer\ninterface TypeSelectState {\n search: string;\n timeout: ReturnType<typeof setTimeout> | undefined;\n}\n\n/**\n * Get a printable character from a key event.\n * Returns the character if it's a single printable character,\n * or empty string for non-printable keys.\n */\nfunction getStringForKey(key: string): string {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n return \"\";\n}\n\n/**\n * Search for a key in the collection that matches the search string.\n * Starts *at* `fromKey` (inclusive) and scans to the end, with no internal\n * wrap; the caller retries from the top to cover earlier items. Matching is\n * locale-aware via the supplied `collator`.\n */\nfunction getKeyForSearch<T>(\n collection: Collection<T>,\n search: string,\n fromKey: Key | null,\n collator: Intl.Collator,\n isKeyDisabled?: (key: Key) => boolean,\n): Key | null {\n // Collect all items in order\n const items: CollectionNode<T>[] = [];\n for (const item of collection) {\n if (item.type === \"item\") {\n items.push(item);\n }\n }\n\n if (items.length === 0) return null;\n\n // Find the starting index. Start *at* the currently focused item (inclusive),\n // mirroring upstream ListKeyboardDelegate.getKeyForSearch (`key = fromKey ||\n // getFirstKey()`): typing a prefix the focused item already matches keeps focus\n // on it instead of advancing to the next match.\n let startIndex = 0;\n if (fromKey != null) {\n const fromIndex = items.findIndex((item) => item.key === fromKey);\n if (fromIndex !== -1) {\n startIndex = fromIndex;\n }\n }\n\n // Scan from startIndex to the end (no wrap). The caller retries from the top to\n // cover items before the focused one, matching upstream useTypeSelect.\n for (let index = startIndex; index < items.length; index++) {\n const item = items[index];\n\n // Skip disabled items\n if (item.isDisabled || (isKeyDisabled && isKeyDisabled(item.key))) {\n continue;\n }\n\n // Match the leading characters of the text value against the search string\n // using locale-aware collation, mirroring upstream ListKeyboardDelegate\n // (`collator.compare(textValue.slice(0, search.length), search) === 0`). The\n // collator's `usage: 'search'` / `sensitivity: 'base'` makes this case- and\n // diacritic-insensitive in a locale-aware way.\n const textValue = item.textValue || \"\";\n const substring = textValue.slice(0, search.length);\n if (textValue && collator.compare(substring, search) === 0) {\n return item.key;\n }\n }\n\n return null;\n}\n\n/**\n * Creates typeahead/type-to-select functionality for a collection.\n *\n * @example\n * ```tsx\n * const { typeSelectProps } = createTypeSelect({\n * collection: () => state.collection(),\n * focusedKey: () => state.focusedKey(),\n * onFocusedKeyChange: (key) => state.setFocusedKey(key),\n * });\n *\n * return <ul {...mergeProps(listBoxProps, typeSelectProps)}>...</ul>;\n * ```\n */\nexport function createTypeSelect<T>(options: TypeSelectOptions<T>): TypeSelectAria {\n // Create mutable state object to persist across keystrokes\n const state: TypeSelectState = {\n search: \"\",\n timeout: undefined,\n };\n\n // Locale-aware search collator, mirroring upstream useSelectableList's\n // `useCollator({ usage: 'search', sensitivity: 'base' })`.\n const collator = createCollator({ usage: \"search\", sensitivity: \"base\" });\n\n // Append the search buffer, find a matching key (from the focused item,\n // falling back to the whole list), focus it, and (re)start the debounce timer.\n // Shared by both phase handlers below, mirroring the duplicated body in\n // upstream useTypeSelect.\n const searchAndFocus = (): Key | null => {\n const collection = options.collection();\n const currentKey = options.focusedKey();\n\n // Prioritize items at/after the focused item, then retry from the top to\n // cover earlier ones (upstream's two getKeyForSearch calls).\n let key = getKeyForSearch(\n collection,\n state.search,\n currentKey,\n collator(),\n options.isKeyDisabled,\n );\n if (key == null) {\n key = getKeyForSearch(collection, state.search, null, collator(), options.isKeyDisabled);\n }\n\n if (key != null) {\n options.onFocusedKeyChange(key);\n options.onTypeSelect?.(key);\n }\n\n return key;\n };\n\n const restartDebounce = () => {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n\n // Capture phase: mid-search a Spacebar is part of the query, not a selection\n // action, so we consume it before the collection's own keydown handler can act\n // on it. Mirrors upstream useTypeSelect's onKeyDownCapture.\n const onKeyDownCapture: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n if (state.search.length > 0 && e.key === \" \") {\n e.preventDefault();\n // Upstream guards this with `!('continuePropagation' in e) ||\n // !e.isPropagationStopped()`. Our raw DOM KeyboardEvents never carry\n // `continuePropagation`, so the guard always holds — stop unconditionally.\n e.stopPropagation();\n state.search += \" \";\n searchAndFocus();\n restartDebounce();\n }\n };\n\n // Bubble phase: handles ordinary characters (and, in environments where the\n // capture listener above is inert, mid-search Spacebar via its non-bailing\n // branch). Mirrors upstream useTypeSelect's onKeyDown.\n const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n const character = getStringForKey(e.key);\n\n // Ignore non-printable keys, Ctrl/Meta/Alt combos (Alt is excluded to match\n // upstream — AltGr-only layouts shouldn't drive type-select), events from\n // outside the element, and a leading Space (a common action key).\n if (\n !character ||\n e.ctrlKey ||\n e.metaKey ||\n e.altKey ||\n !e.currentTarget.contains(e.target as HTMLElement) ||\n (state.search.length === 0 && character === \" \")\n ) {\n return;\n }\n\n state.search += character;\n\n const key = searchAndFocus();\n\n if (key != null) {\n e.preventDefault();\n // Our raw DOM events never carry `continuePropagation`, so upstream's\n // `if (!('continuePropagation' in e)) e.stopPropagation()` is unconditional.\n e.stopPropagation();\n } else {\n // Nothing matched even after retrying from the top: type-to-select is done,\n // so reset the buffer and let the key propagate normally.\n state.search = \"\";\n clearTimeout(state.timeout);\n state.timeout = undefined;\n return;\n }\n\n restartDebounce();\n };\n\n // Mirror upstream's unmount cleanup (a useEffect teardown) so a pending\n // debounce timer never fires after the consumer is disposed.\n onCleanup(() => {\n clearTimeout(state.timeout);\n });\n\n return {\n typeSelectProps: {\n // Upstream binds `onKeyDownCapture` so Spacebar is handled before the\n // collection's own keydown handler. In Solid a capture handler delivered\n // through a `{...typeSelectProps}` spread is inert (it never fires), so the\n // bubble-phase `onKeyDown` is the live path — and it also covers mid-search\n // Space because its bail check only rejects a *leading* Space. True capture\n // would need a ref-based addEventListener threaded through every consumer;\n // see the typeahead follow-up in upstream-sync.md.\n onKeyDownCapture,\n onKeyDown,\n } as JSX.HTMLAttributes<HTMLElement>,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,6BAA6B;;;;;;AAiCnC,SAAS,gBAAgB,KAAqB;CAK5C,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,KAAK,GAAG,GACzC,OAAO;CAET,OAAO;AACT;;;;;;;AAQA,SAAS,gBACP,YACA,QACA,SACA,UACA,eACY;CAEZ,MAAM,QAA6B,CAAC;CACpC,KAAK,MAAM,QAAQ,YACjB,IAAI,KAAK,SAAS,QAChB,MAAM,KAAK,IAAI;CAInB,IAAI,MAAM,WAAW,GAAG,OAAO;CAM/B,IAAI,aAAa;CACjB,IAAI,WAAW,MAAM;EACnB,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO;EAChE,IAAI,cAAc,IAChB,aAAa;CAEjB;CAIA,KAAK,IAAI,QAAQ,YAAY,QAAQ,MAAM,QAAQ,SAAS;EAC1D,MAAM,OAAO,MAAM;EAGnB,IAAI,KAAK,cAAe,iBAAiB,cAAc,KAAK,GAAG,GAC7D;EAQF,MAAM,YAAY,KAAK,aAAa;EACpC,MAAM,YAAY,UAAU,MAAM,GAAG,OAAO,MAAM;EAClD,IAAI,aAAa,SAAS,QAAQ,WAAW,MAAM,MAAM,GACvD,OAAO,KAAK;CAEhB;CAEA,OAAO;AACT;;;;;;;;;;;;;;;AAgBA,SAAgB,iBAAoB,SAA+C;CAEjF,MAAM,QAAyB;EAC7B,QAAQ;EACR,SAAS,KAAA;CACX;CAIA,MAAM,WAAW,eAAe;EAAE,OAAO;EAAU,aAAa;CAAO,CAAC;CAMxE,MAAM,uBAAmC;EACvC,MAAM,aAAa,QAAQ,WAAW;EACtC,MAAM,aAAa,QAAQ,WAAW;EAItC,IAAI,MAAM,gBACR,YACA,MAAM,QACN,YACA,SAAS,GACT,QAAQ,aACV;EACA,IAAI,OAAO,MACT,MAAM,gBAAgB,YAAY,MAAM,QAAQ,MAAM,SAAS,GAAG,QAAQ,aAAa;EAGzF,IAAI,OAAO,MAAM;GACf,QAAQ,mBAAmB,GAAG;GAC9B,QAAQ,eAAe,GAAG;EAC5B;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB;EAC5B,aAAa,MAAM,OAAO;EAC1B,MAAM,UAAU,iBAAiB;GAC/B,MAAM,SAAS;EACjB,GAAG,0BAA0B;CAC/B;CAKA,MAAM,oBAAkE,MAAM;EAC5E,IAAI,QAAQ,YAAY;EAExB,IAAI,MAAM,OAAO,SAAS,KAAK,EAAE,QAAQ,KAAK;GAC5C,EAAE,eAAe;GAIjB,EAAE,gBAAgB;GAClB,MAAM,UAAU;GAChB,eAAe;GACf,gBAAgB;EAClB;CACF;CAKA,MAAM,aAA2D,MAAM;EACrE,IAAI,QAAQ,YAAY;EAExB,MAAM,YAAY,gBAAgB,EAAE,GAAG;EAKvC,IACE,CAAC,aACD,EAAE,WACF,EAAE,WACF,EAAE,UACF,CAAC,EAAE,cAAc,SAAS,EAAE,MAAqB,KAChD,MAAM,OAAO,WAAW,KAAK,cAAc,KAE5C;EAGF,MAAM,UAAU;EAIhB,IAFY,eAEN,KAAK,MAAM;GACf,EAAE,eAAe;GAGjB,EAAE,gBAAgB;EACpB,OAAO;GAGL,MAAM,SAAS;GACf,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,KAAA;GAChB;EACF;EAEA,gBAAgB;CAClB;CAIA,gBAAgB;EACd,aAAa,MAAM,OAAO;CAC5B,CAAC;CAED,OAAO,EACL,iBAAiB;EAQf;EACA;CACF,EACF;AACF"}
1
+ {"version":3,"file":"createTypeSelect.js","names":[],"sources":["../../src/selection/createTypeSelect.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/selection/useTypeSelect.ts\n\n/**\n * createTypeSelect - Handles typeahead interactions with collections.\n * Based on @react-aria/selection useTypeSelect.\n *\n * Allows users to navigate to items by typing characters that match\n * item text values. Supports multi-character search with debouncing.\n */\n\nimport { onOwnedCleanup } from \"../utils/owner\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport type { Key, Collection, CollectionNode } from \"@proyecto-viviana/solid-stately\";\nimport { createCollator } from \"../i18n/createCollator\";\n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */\nconst TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\n\nexport interface TypeSelectOptions<T> {\n /** The collection to search through. */\n collection: Accessor<Collection<T>>;\n /** The currently focused key. */\n focusedKey: Accessor<Key | null>;\n /** Callback to set the focused key when a match is found. */\n onFocusedKeyChange: (key: Key) => void;\n /** Callback when an item is focused by typing. */\n onTypeSelect?: (key: Key) => void;\n /** Function to check if a key is disabled. */\n isKeyDisabled?: (key: Key) => boolean;\n /** Whether type-to-select is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface TypeSelectAria {\n /** Props to spread on the collection element. */\n typeSelectProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Internal state for tracking the search buffer\ninterface TypeSelectState {\n search: string;\n timeout: ReturnType<typeof setTimeout> | undefined;\n}\n\n/**\n * Get a printable character from a key event.\n * Returns the character if it's a single printable character,\n * or empty string for non-printable keys.\n */\nfunction getStringForKey(key: string): string {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n return \"\";\n}\n\n/**\n * Search for a key in the collection that matches the search string.\n * Starts *at* `fromKey` (inclusive) and scans to the end, with no internal\n * wrap; the caller retries from the top to cover earlier items. Matching is\n * locale-aware via the supplied `collator`.\n */\nfunction getKeyForSearch<T>(\n collection: Collection<T>,\n search: string,\n fromKey: Key | null,\n collator: Intl.Collator,\n isKeyDisabled?: (key: Key) => boolean,\n): Key | null {\n // Collect all items in order\n const items: CollectionNode<T>[] = [];\n for (const item of collection) {\n if (item.type === \"item\") {\n items.push(item);\n }\n }\n\n if (items.length === 0) return null;\n\n // Find the starting index. Start *at* the currently focused item (inclusive),\n // mirroring upstream ListKeyboardDelegate.getKeyForSearch (`key = fromKey ||\n // getFirstKey()`): typing a prefix the focused item already matches keeps focus\n // on it instead of advancing to the next match.\n let startIndex = 0;\n if (fromKey != null) {\n const fromIndex = items.findIndex((item) => item.key === fromKey);\n if (fromIndex !== -1) {\n startIndex = fromIndex;\n }\n }\n\n // Scan from startIndex to the end (no wrap). The caller retries from the top to\n // cover items before the focused one, matching upstream useTypeSelect.\n for (let index = startIndex; index < items.length; index++) {\n const item = items[index];\n\n // Skip disabled items\n if (item.isDisabled || (isKeyDisabled && isKeyDisabled(item.key))) {\n continue;\n }\n\n // Match the leading characters of the text value against the search string\n // using locale-aware collation, mirroring upstream ListKeyboardDelegate\n // (`collator.compare(textValue.slice(0, search.length), search) === 0`). The\n // collator's `usage: 'search'` / `sensitivity: 'base'` makes this case- and\n // diacritic-insensitive in a locale-aware way.\n const textValue = item.textValue || \"\";\n const substring = textValue.slice(0, search.length);\n if (textValue && collator.compare(substring, search) === 0) {\n return item.key;\n }\n }\n\n return null;\n}\n\n/**\n * Creates typeahead/type-to-select functionality for a collection.\n *\n * @example\n * ```tsx\n * const { typeSelectProps } = createTypeSelect({\n * collection: () => state.collection(),\n * focusedKey: () => state.focusedKey(),\n * onFocusedKeyChange: (key) => state.setFocusedKey(key),\n * });\n *\n * return <ul {...mergeProps(listBoxProps, typeSelectProps)}>...</ul>;\n * ```\n */\nexport function createTypeSelect<T>(options: TypeSelectOptions<T>): TypeSelectAria {\n // Create mutable state object to persist across keystrokes\n const state: TypeSelectState = {\n search: \"\",\n timeout: undefined,\n };\n\n // Locale-aware search collator, mirroring upstream useSelectableList's\n // `useCollator({ usage: 'search', sensitivity: 'base' })`.\n const collator = createCollator({ usage: \"search\", sensitivity: \"base\" });\n\n // Append the search buffer, find a matching key (from the focused item,\n // falling back to the whole list), focus it, and (re)start the debounce timer.\n // Shared by both phase handlers below, mirroring the duplicated body in\n // upstream useTypeSelect.\n const searchAndFocus = (): Key | null => {\n const collection = options.collection();\n const currentKey = options.focusedKey();\n\n // Prioritize items at/after the focused item, then retry from the top to\n // cover earlier ones (upstream's two getKeyForSearch calls).\n let key = getKeyForSearch(\n collection,\n state.search,\n currentKey,\n collator(),\n options.isKeyDisabled,\n );\n if (key == null) {\n key = getKeyForSearch(collection, state.search, null, collator(), options.isKeyDisabled);\n }\n\n if (key != null) {\n options.onFocusedKeyChange(key);\n options.onTypeSelect?.(key);\n }\n\n return key;\n };\n\n const restartDebounce = () => {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n\n // Capture phase: mid-search a Spacebar is part of the query, not a selection\n // action, so we consume it before the collection's own keydown handler can act\n // on it. Mirrors upstream useTypeSelect's onKeyDownCapture.\n const onKeyDownCapture: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n if (state.search.length > 0 && e.key === \" \") {\n e.preventDefault();\n // Upstream guards this with `!('continuePropagation' in e) ||\n // !e.isPropagationStopped()`. Our raw DOM KeyboardEvents never carry\n // `continuePropagation`, so the guard always holds — stop unconditionally.\n e.stopPropagation();\n state.search += \" \";\n searchAndFocus();\n restartDebounce();\n }\n };\n\n // Bubble phase: handles ordinary characters (and, in environments where the\n // capture listener above is inert, mid-search Spacebar via its non-bailing\n // branch). Mirrors upstream useTypeSelect's onKeyDown.\n const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n const character = getStringForKey(e.key);\n\n // Ignore non-printable keys, Ctrl/Meta/Alt combos (Alt is excluded to match\n // upstream — AltGr-only layouts shouldn't drive type-select), events from\n // outside the element, and a leading Space (a common action key).\n if (\n !character ||\n e.ctrlKey ||\n e.metaKey ||\n e.altKey ||\n !e.currentTarget?.contains(e.target as HTMLElement) ||\n (state.search.length === 0 && character === \" \")\n ) {\n return;\n }\n\n state.search += character;\n\n const key = searchAndFocus();\n\n if (key != null) {\n e.preventDefault();\n // Our raw DOM events never carry `continuePropagation`, so upstream's\n // `if (!('continuePropagation' in e)) e.stopPropagation()` is unconditional.\n e.stopPropagation();\n } else {\n // Nothing matched even after retrying from the top: type-to-select is done,\n // so reset the buffer and let the key propagate normally.\n state.search = \"\";\n clearTimeout(state.timeout);\n state.timeout = undefined;\n return;\n }\n\n restartDebounce();\n };\n\n // Mirror upstream's unmount cleanup (a useEffect teardown) so a pending\n // debounce timer never fires after the consumer is disposed.\n onOwnedCleanup(() => {\n clearTimeout(state.timeout);\n });\n\n return {\n typeSelectProps: {\n // Upstream binds `onKeyDownCapture` so Spacebar is handled before the\n // collection's own keydown handler. In Solid a capture handler delivered\n // through a `{...typeSelectProps}` spread is inert (it never fires), so the\n // bubble-phase `onKeyDown` is the live path — and it also covers mid-search\n // Space because its bail check only rejects a *leading* Space. True capture\n // would need a ref-based addEventListener threaded through every consumer;\n // A spread capture handler is inert in Solid; ticket #128 owns the real\n // capture-phase binding.\n onKeyDownCapture,\n onKeyDown,\n } as JSX.HTMLAttributes<HTMLElement>,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,6BAA6B;;;;;;AAiCnC,SAAS,gBAAgB,KAAqB;CAK5C,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,KAAK,GAAG,GACzC,OAAO;CAET,OAAO;AACT;;;;;;;AAQA,SAAS,gBACP,YACA,QACA,SACA,UACA,eACY;CAEZ,MAAM,QAA6B,CAAC;CACpC,KAAK,MAAM,QAAQ,YACjB,IAAI,KAAK,SAAS,QAChB,MAAM,KAAK,IAAI;CAInB,IAAI,MAAM,WAAW,GAAG,OAAO;CAM/B,IAAI,aAAa;CACjB,IAAI,WAAW,MAAM;EACnB,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO;EAChE,IAAI,cAAc,IAChB,aAAa;CAEjB;CAIA,KAAK,IAAI,QAAQ,YAAY,QAAQ,MAAM,QAAQ,SAAS;EAC1D,MAAM,OAAO,MAAM;EAGnB,IAAI,KAAK,cAAe,iBAAiB,cAAc,KAAK,GAAG,GAC7D;EAQF,MAAM,YAAY,KAAK,aAAa;EACpC,MAAM,YAAY,UAAU,MAAM,GAAG,OAAO,MAAM;EAClD,IAAI,aAAa,SAAS,QAAQ,WAAW,MAAM,MAAM,GACvD,OAAO,KAAK;CAEhB;CAEA,OAAO;AACT;;;;;;;;;;;;;;;AAgBA,SAAgB,iBAAoB,SAA+C;CAEjF,MAAM,QAAyB;EAC7B,QAAQ;EACR,SAAS,KAAA;CACX;CAIA,MAAM,WAAW,eAAe;EAAE,OAAO;EAAU,aAAa;CAAO,CAAC;CAMxE,MAAM,uBAAmC;EACvC,MAAM,aAAa,QAAQ,WAAW;EACtC,MAAM,aAAa,QAAQ,WAAW;EAItC,IAAI,MAAM,gBACR,YACA,MAAM,QACN,YACA,SAAS,GACT,QAAQ,aACV;EACA,IAAI,OAAO,MACT,MAAM,gBAAgB,YAAY,MAAM,QAAQ,MAAM,SAAS,GAAG,QAAQ,aAAa;EAGzF,IAAI,OAAO,MAAM;GACf,QAAQ,mBAAmB,GAAG;GAC9B,QAAQ,eAAe,GAAG;EAC5B;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB;EAC5B,aAAa,MAAM,OAAO;EAC1B,MAAM,UAAU,iBAAiB;GAC/B,MAAM,SAAS;EACjB,GAAG,0BAA0B;CAC/B;CAKA,MAAM,oBAAkE,MAAM;EAC5E,IAAI,QAAQ,YAAY;EAExB,IAAI,MAAM,OAAO,SAAS,KAAK,EAAE,QAAQ,KAAK;GAC5C,EAAE,eAAe;GAIjB,EAAE,gBAAgB;GAClB,MAAM,UAAU;GAChB,eAAe;GACf,gBAAgB;EAClB;CACF;CAKA,MAAM,aAA2D,MAAM;EACrE,IAAI,QAAQ,YAAY;EAExB,MAAM,YAAY,gBAAgB,EAAE,GAAG;EAKvC,IACE,CAAC,aACD,EAAE,WACF,EAAE,WACF,EAAE,UACF,CAAC,EAAE,eAAe,SAAS,EAAE,MAAqB,KACjD,MAAM,OAAO,WAAW,KAAK,cAAc,KAE5C;EAGF,MAAM,UAAU;EAIhB,IAFY,eAEN,KAAK,MAAM;GACf,EAAE,eAAe;GAGjB,EAAE,gBAAgB;EACpB,OAAO;GAGL,MAAM,SAAS;GACf,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,KAAA;GAChB;EACF;EAEA,gBAAgB;CAClB;CAIA,qBAAqB;EACnB,aAAa,MAAM,OAAO;CAC5B,CAAC;CAED,OAAO,EACL,iBAAiB;EASf;EACA;CACF,EACF;AACF"}
@@ -1,5 +1,17 @@
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/selection/useTypeSelect.ts
13
+ import { t as onOwnedCleanup } from "./owner.jsx";
1
14
  import { t as createCollator } from "./createCollator.jsx";
2
- import { onCleanup } from "solid-js";
3
15
  //#region src/selection/createTypeSelect.ts
4
16
  /**
5
17
  * createTypeSelect - Handles typeahead interactions with collections.
@@ -98,7 +110,7 @@ function createTypeSelect(options) {
98
110
  const onKeyDown = (e) => {
99
111
  if (options.isDisabled) return;
100
112
  const character = getStringForKey(e.key);
101
- if (!character || e.ctrlKey || e.metaKey || e.altKey || !e.currentTarget.contains(e.target) || state.search.length === 0 && character === " ") return;
113
+ if (!character || e.ctrlKey || e.metaKey || e.altKey || !e.currentTarget?.contains(e.target) || state.search.length === 0 && character === " ") return;
102
114
  state.search += character;
103
115
  if (searchAndFocus() != null) {
104
116
  e.preventDefault();
@@ -111,7 +123,7 @@ function createTypeSelect(options) {
111
123
  }
112
124
  restartDebounce();
113
125
  };
114
- onCleanup(() => {
126
+ onOwnedCleanup(() => {
115
127
  clearTimeout(state.timeout);
116
128
  });
117
129
  return { typeSelectProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"createTypeSelect.jsx","names":[],"sources":["../../src/selection/createTypeSelect.ts"],"sourcesContent":["/**\n * createTypeSelect - Handles typeahead interactions with collections.\n * Based on @react-aria/selection useTypeSelect.\n *\n * Allows users to navigate to items by typing characters that match\n * item text values. Supports multi-character search with debouncing.\n */\n\nimport { onCleanup } from \"solid-js\";\nimport type { JSX, Accessor } from \"solid-js\";\nimport type { Key, Collection, CollectionNode } from \"@proyecto-viviana/solid-stately\";\nimport { createCollator } from \"../i18n/createCollator\";\n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */\nconst TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\n\nexport interface TypeSelectOptions<T> {\n /** The collection to search through. */\n collection: Accessor<Collection<T>>;\n /** The currently focused key. */\n focusedKey: Accessor<Key | null>;\n /** Callback to set the focused key when a match is found. */\n onFocusedKeyChange: (key: Key) => void;\n /** Callback when an item is focused by typing. */\n onTypeSelect?: (key: Key) => void;\n /** Function to check if a key is disabled. */\n isKeyDisabled?: (key: Key) => boolean;\n /** Whether type-to-select is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface TypeSelectAria {\n /** Props to spread on the collection element. */\n typeSelectProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Internal state for tracking the search buffer\ninterface TypeSelectState {\n search: string;\n timeout: ReturnType<typeof setTimeout> | undefined;\n}\n\n/**\n * Get a printable character from a key event.\n * Returns the character if it's a single printable character,\n * or empty string for non-printable keys.\n */\nfunction getStringForKey(key: string): string {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n return \"\";\n}\n\n/**\n * Search for a key in the collection that matches the search string.\n * Starts *at* `fromKey` (inclusive) and scans to the end, with no internal\n * wrap; the caller retries from the top to cover earlier items. Matching is\n * locale-aware via the supplied `collator`.\n */\nfunction getKeyForSearch<T>(\n collection: Collection<T>,\n search: string,\n fromKey: Key | null,\n collator: Intl.Collator,\n isKeyDisabled?: (key: Key) => boolean,\n): Key | null {\n // Collect all items in order\n const items: CollectionNode<T>[] = [];\n for (const item of collection) {\n if (item.type === \"item\") {\n items.push(item);\n }\n }\n\n if (items.length === 0) return null;\n\n // Find the starting index. Start *at* the currently focused item (inclusive),\n // mirroring upstream ListKeyboardDelegate.getKeyForSearch (`key = fromKey ||\n // getFirstKey()`): typing a prefix the focused item already matches keeps focus\n // on it instead of advancing to the next match.\n let startIndex = 0;\n if (fromKey != null) {\n const fromIndex = items.findIndex((item) => item.key === fromKey);\n if (fromIndex !== -1) {\n startIndex = fromIndex;\n }\n }\n\n // Scan from startIndex to the end (no wrap). The caller retries from the top to\n // cover items before the focused one, matching upstream useTypeSelect.\n for (let index = startIndex; index < items.length; index++) {\n const item = items[index];\n\n // Skip disabled items\n if (item.isDisabled || (isKeyDisabled && isKeyDisabled(item.key))) {\n continue;\n }\n\n // Match the leading characters of the text value against the search string\n // using locale-aware collation, mirroring upstream ListKeyboardDelegate\n // (`collator.compare(textValue.slice(0, search.length), search) === 0`). The\n // collator's `usage: 'search'` / `sensitivity: 'base'` makes this case- and\n // diacritic-insensitive in a locale-aware way.\n const textValue = item.textValue || \"\";\n const substring = textValue.slice(0, search.length);\n if (textValue && collator.compare(substring, search) === 0) {\n return item.key;\n }\n }\n\n return null;\n}\n\n/**\n * Creates typeahead/type-to-select functionality for a collection.\n *\n * @example\n * ```tsx\n * const { typeSelectProps } = createTypeSelect({\n * collection: () => state.collection(),\n * focusedKey: () => state.focusedKey(),\n * onFocusedKeyChange: (key) => state.setFocusedKey(key),\n * });\n *\n * return <ul {...mergeProps(listBoxProps, typeSelectProps)}>...</ul>;\n * ```\n */\nexport function createTypeSelect<T>(options: TypeSelectOptions<T>): TypeSelectAria {\n // Create mutable state object to persist across keystrokes\n const state: TypeSelectState = {\n search: \"\",\n timeout: undefined,\n };\n\n // Locale-aware search collator, mirroring upstream useSelectableList's\n // `useCollator({ usage: 'search', sensitivity: 'base' })`.\n const collator = createCollator({ usage: \"search\", sensitivity: \"base\" });\n\n // Append the search buffer, find a matching key (from the focused item,\n // falling back to the whole list), focus it, and (re)start the debounce timer.\n // Shared by both phase handlers below, mirroring the duplicated body in\n // upstream useTypeSelect.\n const searchAndFocus = (): Key | null => {\n const collection = options.collection();\n const currentKey = options.focusedKey();\n\n // Prioritize items at/after the focused item, then retry from the top to\n // cover earlier ones (upstream's two getKeyForSearch calls).\n let key = getKeyForSearch(\n collection,\n state.search,\n currentKey,\n collator(),\n options.isKeyDisabled,\n );\n if (key == null) {\n key = getKeyForSearch(collection, state.search, null, collator(), options.isKeyDisabled);\n }\n\n if (key != null) {\n options.onFocusedKeyChange(key);\n options.onTypeSelect?.(key);\n }\n\n return key;\n };\n\n const restartDebounce = () => {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n\n // Capture phase: mid-search a Spacebar is part of the query, not a selection\n // action, so we consume it before the collection's own keydown handler can act\n // on it. Mirrors upstream useTypeSelect's onKeyDownCapture.\n const onKeyDownCapture: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n if (state.search.length > 0 && e.key === \" \") {\n e.preventDefault();\n // Upstream guards this with `!('continuePropagation' in e) ||\n // !e.isPropagationStopped()`. Our raw DOM KeyboardEvents never carry\n // `continuePropagation`, so the guard always holds — stop unconditionally.\n e.stopPropagation();\n state.search += \" \";\n searchAndFocus();\n restartDebounce();\n }\n };\n\n // Bubble phase: handles ordinary characters (and, in environments where the\n // capture listener above is inert, mid-search Spacebar via its non-bailing\n // branch). Mirrors upstream useTypeSelect's onKeyDown.\n const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n const character = getStringForKey(e.key);\n\n // Ignore non-printable keys, Ctrl/Meta/Alt combos (Alt is excluded to match\n // upstream — AltGr-only layouts shouldn't drive type-select), events from\n // outside the element, and a leading Space (a common action key).\n if (\n !character ||\n e.ctrlKey ||\n e.metaKey ||\n e.altKey ||\n !e.currentTarget.contains(e.target as HTMLElement) ||\n (state.search.length === 0 && character === \" \")\n ) {\n return;\n }\n\n state.search += character;\n\n const key = searchAndFocus();\n\n if (key != null) {\n e.preventDefault();\n // Our raw DOM events never carry `continuePropagation`, so upstream's\n // `if (!('continuePropagation' in e)) e.stopPropagation()` is unconditional.\n e.stopPropagation();\n } else {\n // Nothing matched even after retrying from the top: type-to-select is done,\n // so reset the buffer and let the key propagate normally.\n state.search = \"\";\n clearTimeout(state.timeout);\n state.timeout = undefined;\n return;\n }\n\n restartDebounce();\n };\n\n // Mirror upstream's unmount cleanup (a useEffect teardown) so a pending\n // debounce timer never fires after the consumer is disposed.\n onCleanup(() => {\n clearTimeout(state.timeout);\n });\n\n return {\n typeSelectProps: {\n // Upstream binds `onKeyDownCapture` so Spacebar is handled before the\n // collection's own keydown handler. In Solid a capture handler delivered\n // through a `{...typeSelectProps}` spread is inert (it never fires), so the\n // bubble-phase `onKeyDown` is the live path — and it also covers mid-search\n // Space because its bail check only rejects a *leading* Space. True capture\n // would need a ref-based addEventListener threaded through every consumer;\n // see the typeahead follow-up in upstream-sync.md.\n onKeyDownCapture,\n onKeyDown,\n } as JSX.HTMLAttributes<HTMLElement>,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,6BAA6B;;;;;;AAiCnC,SAAS,gBAAgB,KAAqB;CAK5C,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,KAAK,GAAG,GACzC,OAAO;CAET,OAAO;AACT;;;;;;;AAQA,SAAS,gBACP,YACA,QACA,SACA,UACA,eACY;CAEZ,MAAM,QAA6B,CAAC;CACpC,KAAK,MAAM,QAAQ,YACjB,IAAI,KAAK,SAAS,QAChB,MAAM,KAAK,IAAI;CAInB,IAAI,MAAM,WAAW,GAAG,OAAO;CAM/B,IAAI,aAAa;CACjB,IAAI,WAAW,MAAM;EACnB,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO;EAChE,IAAI,cAAc,IAChB,aAAa;CAEjB;CAIA,KAAK,IAAI,QAAQ,YAAY,QAAQ,MAAM,QAAQ,SAAS;EAC1D,MAAM,OAAO,MAAM;EAGnB,IAAI,KAAK,cAAe,iBAAiB,cAAc,KAAK,GAAG,GAC7D;EAQF,MAAM,YAAY,KAAK,aAAa;EACpC,MAAM,YAAY,UAAU,MAAM,GAAG,OAAO,MAAM;EAClD,IAAI,aAAa,SAAS,QAAQ,WAAW,MAAM,MAAM,GACvD,OAAO,KAAK;CAEhB;CAEA,OAAO;AACT;;;;;;;;;;;;;;;AAgBA,SAAgB,iBAAoB,SAA+C;CAEjF,MAAM,QAAyB;EAC7B,QAAQ;EACR,SAAS,KAAA;CACX;CAIA,MAAM,WAAW,eAAe;EAAE,OAAO;EAAU,aAAa;CAAO,CAAC;CAMxE,MAAM,uBAAmC;EACvC,MAAM,aAAa,QAAQ,WAAW;EACtC,MAAM,aAAa,QAAQ,WAAW;EAItC,IAAI,MAAM,gBACR,YACA,MAAM,QACN,YACA,SAAS,GACT,QAAQ,aACV;EACA,IAAI,OAAO,MACT,MAAM,gBAAgB,YAAY,MAAM,QAAQ,MAAM,SAAS,GAAG,QAAQ,aAAa;EAGzF,IAAI,OAAO,MAAM;GACf,QAAQ,mBAAmB,GAAG;GAC9B,QAAQ,eAAe,GAAG;EAC5B;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB;EAC5B,aAAa,MAAM,OAAO;EAC1B,MAAM,UAAU,iBAAiB;GAC/B,MAAM,SAAS;EACjB,GAAG,0BAA0B;CAC/B;CAKA,MAAM,oBAAkE,MAAM;EAC5E,IAAI,QAAQ,YAAY;EAExB,IAAI,MAAM,OAAO,SAAS,KAAK,EAAE,QAAQ,KAAK;GAC5C,EAAE,eAAe;GAIjB,EAAE,gBAAgB;GAClB,MAAM,UAAU;GAChB,eAAe;GACf,gBAAgB;EAClB;CACF;CAKA,MAAM,aAA2D,MAAM;EACrE,IAAI,QAAQ,YAAY;EAExB,MAAM,YAAY,gBAAgB,EAAE,GAAG;EAKvC,IACE,CAAC,aACD,EAAE,WACF,EAAE,WACF,EAAE,UACF,CAAC,EAAE,cAAc,SAAS,EAAE,MAAqB,KAChD,MAAM,OAAO,WAAW,KAAK,cAAc,KAE5C;EAGF,MAAM,UAAU;EAIhB,IAFY,eAEN,KAAK,MAAM;GACf,EAAE,eAAe;GAGjB,EAAE,gBAAgB;EACpB,OAAO;GAGL,MAAM,SAAS;GACf,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,KAAA;GAChB;EACF;EAEA,gBAAgB;CAClB;CAIA,gBAAgB;EACd,aAAa,MAAM,OAAO;CAC5B,CAAC;CAED,OAAO,EACL,iBAAiB;EAQf;EACA;CACF,EACF;AACF"}
1
+ {"version":3,"file":"createTypeSelect.jsx","names":[],"sources":["../../src/selection/createTypeSelect.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/selection/useTypeSelect.ts\n\n/**\n * createTypeSelect - Handles typeahead interactions with collections.\n * Based on @react-aria/selection useTypeSelect.\n *\n * Allows users to navigate to items by typing characters that match\n * item text values. Supports multi-character search with debouncing.\n */\n\nimport { onOwnedCleanup } from \"../utils/owner\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport type { Key, Collection, CollectionNode } from \"@proyecto-viviana/solid-stately\";\nimport { createCollator } from \"../i18n/createCollator\";\n\n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */\nconst TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\n\nexport interface TypeSelectOptions<T> {\n /** The collection to search through. */\n collection: Accessor<Collection<T>>;\n /** The currently focused key. */\n focusedKey: Accessor<Key | null>;\n /** Callback to set the focused key when a match is found. */\n onFocusedKeyChange: (key: Key) => void;\n /** Callback when an item is focused by typing. */\n onTypeSelect?: (key: Key) => void;\n /** Function to check if a key is disabled. */\n isKeyDisabled?: (key: Key) => boolean;\n /** Whether type-to-select is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface TypeSelectAria {\n /** Props to spread on the collection element. */\n typeSelectProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Internal state for tracking the search buffer\ninterface TypeSelectState {\n search: string;\n timeout: ReturnType<typeof setTimeout> | undefined;\n}\n\n/**\n * Get a printable character from a key event.\n * Returns the character if it's a single printable character,\n * or empty string for non-printable keys.\n */\nfunction getStringForKey(key: string): string {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n return \"\";\n}\n\n/**\n * Search for a key in the collection that matches the search string.\n * Starts *at* `fromKey` (inclusive) and scans to the end, with no internal\n * wrap; the caller retries from the top to cover earlier items. Matching is\n * locale-aware via the supplied `collator`.\n */\nfunction getKeyForSearch<T>(\n collection: Collection<T>,\n search: string,\n fromKey: Key | null,\n collator: Intl.Collator,\n isKeyDisabled?: (key: Key) => boolean,\n): Key | null {\n // Collect all items in order\n const items: CollectionNode<T>[] = [];\n for (const item of collection) {\n if (item.type === \"item\") {\n items.push(item);\n }\n }\n\n if (items.length === 0) return null;\n\n // Find the starting index. Start *at* the currently focused item (inclusive),\n // mirroring upstream ListKeyboardDelegate.getKeyForSearch (`key = fromKey ||\n // getFirstKey()`): typing a prefix the focused item already matches keeps focus\n // on it instead of advancing to the next match.\n let startIndex = 0;\n if (fromKey != null) {\n const fromIndex = items.findIndex((item) => item.key === fromKey);\n if (fromIndex !== -1) {\n startIndex = fromIndex;\n }\n }\n\n // Scan from startIndex to the end (no wrap). The caller retries from the top to\n // cover items before the focused one, matching upstream useTypeSelect.\n for (let index = startIndex; index < items.length; index++) {\n const item = items[index];\n\n // Skip disabled items\n if (item.isDisabled || (isKeyDisabled && isKeyDisabled(item.key))) {\n continue;\n }\n\n // Match the leading characters of the text value against the search string\n // using locale-aware collation, mirroring upstream ListKeyboardDelegate\n // (`collator.compare(textValue.slice(0, search.length), search) === 0`). The\n // collator's `usage: 'search'` / `sensitivity: 'base'` makes this case- and\n // diacritic-insensitive in a locale-aware way.\n const textValue = item.textValue || \"\";\n const substring = textValue.slice(0, search.length);\n if (textValue && collator.compare(substring, search) === 0) {\n return item.key;\n }\n }\n\n return null;\n}\n\n/**\n * Creates typeahead/type-to-select functionality for a collection.\n *\n * @example\n * ```tsx\n * const { typeSelectProps } = createTypeSelect({\n * collection: () => state.collection(),\n * focusedKey: () => state.focusedKey(),\n * onFocusedKeyChange: (key) => state.setFocusedKey(key),\n * });\n *\n * return <ul {...mergeProps(listBoxProps, typeSelectProps)}>...</ul>;\n * ```\n */\nexport function createTypeSelect<T>(options: TypeSelectOptions<T>): TypeSelectAria {\n // Create mutable state object to persist across keystrokes\n const state: TypeSelectState = {\n search: \"\",\n timeout: undefined,\n };\n\n // Locale-aware search collator, mirroring upstream useSelectableList's\n // `useCollator({ usage: 'search', sensitivity: 'base' })`.\n const collator = createCollator({ usage: \"search\", sensitivity: \"base\" });\n\n // Append the search buffer, find a matching key (from the focused item,\n // falling back to the whole list), focus it, and (re)start the debounce timer.\n // Shared by both phase handlers below, mirroring the duplicated body in\n // upstream useTypeSelect.\n const searchAndFocus = (): Key | null => {\n const collection = options.collection();\n const currentKey = options.focusedKey();\n\n // Prioritize items at/after the focused item, then retry from the top to\n // cover earlier ones (upstream's two getKeyForSearch calls).\n let key = getKeyForSearch(\n collection,\n state.search,\n currentKey,\n collator(),\n options.isKeyDisabled,\n );\n if (key == null) {\n key = getKeyForSearch(collection, state.search, null, collator(), options.isKeyDisabled);\n }\n\n if (key != null) {\n options.onFocusedKeyChange(key);\n options.onTypeSelect?.(key);\n }\n\n return key;\n };\n\n const restartDebounce = () => {\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n\n // Capture phase: mid-search a Spacebar is part of the query, not a selection\n // action, so we consume it before the collection's own keydown handler can act\n // on it. Mirrors upstream useTypeSelect's onKeyDownCapture.\n const onKeyDownCapture: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n if (state.search.length > 0 && e.key === \" \") {\n e.preventDefault();\n // Upstream guards this with `!('continuePropagation' in e) ||\n // !e.isPropagationStopped()`. Our raw DOM KeyboardEvents never carry\n // `continuePropagation`, so the guard always holds — stop unconditionally.\n e.stopPropagation();\n state.search += \" \";\n searchAndFocus();\n restartDebounce();\n }\n };\n\n // Bubble phase: handles ordinary characters (and, in environments where the\n // capture listener above is inert, mid-search Spacebar via its non-bailing\n // branch). Mirrors upstream useTypeSelect's onKeyDown.\n const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n if (options.isDisabled) return;\n\n const character = getStringForKey(e.key);\n\n // Ignore non-printable keys, Ctrl/Meta/Alt combos (Alt is excluded to match\n // upstream — AltGr-only layouts shouldn't drive type-select), events from\n // outside the element, and a leading Space (a common action key).\n if (\n !character ||\n e.ctrlKey ||\n e.metaKey ||\n e.altKey ||\n !e.currentTarget?.contains(e.target as HTMLElement) ||\n (state.search.length === 0 && character === \" \")\n ) {\n return;\n }\n\n state.search += character;\n\n const key = searchAndFocus();\n\n if (key != null) {\n e.preventDefault();\n // Our raw DOM events never carry `continuePropagation`, so upstream's\n // `if (!('continuePropagation' in e)) e.stopPropagation()` is unconditional.\n e.stopPropagation();\n } else {\n // Nothing matched even after retrying from the top: type-to-select is done,\n // so reset the buffer and let the key propagate normally.\n state.search = \"\";\n clearTimeout(state.timeout);\n state.timeout = undefined;\n return;\n }\n\n restartDebounce();\n };\n\n // Mirror upstream's unmount cleanup (a useEffect teardown) so a pending\n // debounce timer never fires after the consumer is disposed.\n onOwnedCleanup(() => {\n clearTimeout(state.timeout);\n });\n\n return {\n typeSelectProps: {\n // Upstream binds `onKeyDownCapture` so Spacebar is handled before the\n // collection's own keydown handler. In Solid a capture handler delivered\n // through a `{...typeSelectProps}` spread is inert (it never fires), so the\n // bubble-phase `onKeyDown` is the live path — and it also covers mid-search\n // Space because its bail check only rejects a *leading* Space. True capture\n // would need a ref-based addEventListener threaded through every consumer;\n // A spread capture handler is inert in Solid; ticket #128 owns the real\n // capture-phase binding.\n onKeyDownCapture,\n onKeyDown,\n } as JSX.HTMLAttributes<HTMLElement>,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,6BAA6B;;;;;;AAiCnC,SAAS,gBAAgB,KAAqB;CAK5C,IAAI,IAAI,WAAW,KAAK,CAAC,UAAU,KAAK,GAAG,GACzC,OAAO;CAET,OAAO;AACT;;;;;;;AAQA,SAAS,gBACP,YACA,QACA,SACA,UACA,eACY;CAEZ,MAAM,QAA6B,CAAC;CACpC,KAAK,MAAM,QAAQ,YACjB,IAAI,KAAK,SAAS,QAChB,MAAM,KAAK,IAAI;CAInB,IAAI,MAAM,WAAW,GAAG,OAAO;CAM/B,IAAI,aAAa;CACjB,IAAI,WAAW,MAAM;EACnB,MAAM,YAAY,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO;EAChE,IAAI,cAAc,IAChB,aAAa;CAEjB;CAIA,KAAK,IAAI,QAAQ,YAAY,QAAQ,MAAM,QAAQ,SAAS;EAC1D,MAAM,OAAO,MAAM;EAGnB,IAAI,KAAK,cAAe,iBAAiB,cAAc,KAAK,GAAG,GAC7D;EAQF,MAAM,YAAY,KAAK,aAAa;EACpC,MAAM,YAAY,UAAU,MAAM,GAAG,OAAO,MAAM;EAClD,IAAI,aAAa,SAAS,QAAQ,WAAW,MAAM,MAAM,GACvD,OAAO,KAAK;CAEhB;CAEA,OAAO;AACT;;;;;;;;;;;;;;;AAgBA,SAAgB,iBAAoB,SAA+C;CAEjF,MAAM,QAAyB;EAC7B,QAAQ;EACR,SAAS,KAAA;CACX;CAIA,MAAM,WAAW,eAAe;EAAE,OAAO;EAAU,aAAa;CAAO,CAAC;CAMxE,MAAM,uBAAmC;EACvC,MAAM,aAAa,QAAQ,WAAW;EACtC,MAAM,aAAa,QAAQ,WAAW;EAItC,IAAI,MAAM,gBACR,YACA,MAAM,QACN,YACA,SAAS,GACT,QAAQ,aACV;EACA,IAAI,OAAO,MACT,MAAM,gBAAgB,YAAY,MAAM,QAAQ,MAAM,SAAS,GAAG,QAAQ,aAAa;EAGzF,IAAI,OAAO,MAAM;GACf,QAAQ,mBAAmB,GAAG;GAC9B,QAAQ,eAAe,GAAG;EAC5B;EAEA,OAAO;CACT;CAEA,MAAM,wBAAwB;EAC5B,aAAa,MAAM,OAAO;EAC1B,MAAM,UAAU,iBAAiB;GAC/B,MAAM,SAAS;EACjB,GAAG,0BAA0B;CAC/B;CAKA,MAAM,oBAAkE,MAAM;EAC5E,IAAI,QAAQ,YAAY;EAExB,IAAI,MAAM,OAAO,SAAS,KAAK,EAAE,QAAQ,KAAK;GAC5C,EAAE,eAAe;GAIjB,EAAE,gBAAgB;GAClB,MAAM,UAAU;GAChB,eAAe;GACf,gBAAgB;EAClB;CACF;CAKA,MAAM,aAA2D,MAAM;EACrE,IAAI,QAAQ,YAAY;EAExB,MAAM,YAAY,gBAAgB,EAAE,GAAG;EAKvC,IACE,CAAC,aACD,EAAE,WACF,EAAE,WACF,EAAE,UACF,CAAC,EAAE,eAAe,SAAS,EAAE,MAAqB,KACjD,MAAM,OAAO,WAAW,KAAK,cAAc,KAE5C;EAGF,MAAM,UAAU;EAIhB,IAFY,eAEN,KAAK,MAAM;GACf,EAAE,eAAe;GAGjB,EAAE,gBAAgB;EACpB,OAAO;GAGL,MAAM,SAAS;GACf,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,KAAA;GAChB;EACF;EAEA,gBAAgB;CAClB;CAIA,qBAAqB;EACnB,aAAa,MAAM,OAAO;CAC5B,CAAC;CAED,OAAO,EACL,iBAAiB;EASf;EACA;CACF,EACF;AACF"}
@@ -1,4 +1,16 @@
1
- import { i as mergeProps$1 } from "./env.js";
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/visually-hidden/VisuallyHidden.tsx
13
+ import { t as mergeProps } from "./mergeProps.js";
2
14
  import { t as access } from "./reactivity.js";
3
15
  import { t as createFocusWithin } from "./createFocusWithin.js";
4
16
  import { createMemo, createSignal } from "solid-js";
@@ -9,7 +21,7 @@ import { createMemo, createSignal } from "solid-js";
9
21
  * Provides styles and props to visually hide content while keeping it
10
22
  * accessible to screen readers.
11
23
  *
12
- * Port of react-aria's useVisuallyHidden.
24
+ * Ported from packages/react-aria/src/visually-hidden/VisuallyHidden.tsx.
13
25
  */
14
26
  /**
15
27
  * CSS styles that visually hide an element while keeping it accessible.
@@ -78,7 +90,7 @@ function createVisuallyHidden(props = {}) {
78
90
  };
79
91
  else return visuallyHiddenStyles;
80
92
  });
81
- return { visuallyHiddenProps: createMemo(() => ({ ...mergeProps$1(focusWithinProps, isFocusable() ? {
93
+ return { visuallyHiddenProps: createMemo(() => ({ ...mergeProps(focusWithinProps, isFocusable() ? {
82
94
  onFocusIn: () => setIsFocused(true),
83
95
  onFocusOut: (e) => {
84
96
  const currentTarget = e.currentTarget;
@@ -90,4 +102,4 @@ function createVisuallyHidden(props = {}) {
90
102
  //#endregion
91
103
  export { visuallyHiddenStyles as n, createVisuallyHidden as t };
92
104
 
93
- //# sourceMappingURL=visually-hidden.js.map
105
+ //# sourceMappingURL=createVisuallyHidden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVisuallyHidden.js","names":[],"sources":["../../src/visually-hidden/createVisuallyHidden.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/visually-hidden/VisuallyHidden.tsx\n\n/**\n * createVisuallyHidden hook for solidaria\n *\n * Provides styles and props to visually hide content while keeping it\n * accessible to screen readers.\n *\n * Ported from packages/react-aria/src/visually-hidden/VisuallyHidden.tsx.\n */\n\nimport { createMemo, createSignal } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { access, type MaybeAccessor } from \"../utils\";\nimport { mergeProps } from \"../utils/mergeProps\";\n\nexport interface AriaVisuallyHiddenProps {\n /** Inline styles to merge with the visually hidden styles. */\n style?: JSX.CSSProperties;\n /** Whether the element should become visible when focused (e.g., skip links). */\n isFocusable?: boolean;\n}\n\nexport interface VisuallyHiddenAria {\n /** Props to spread on the visually hidden element. */\n visuallyHiddenProps: Accessor<JSX.HTMLAttributes<HTMLElement>>;\n}\n\n/**\n * CSS styles that visually hide an element while keeping it accessible.\n * These styles ensure the element is read by screen readers but not visible on screen.\n */\nexport const visuallyHiddenStyles: JSX.CSSProperties = {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n \"clip-path\": \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\",\n \"white-space\": \"nowrap\",\n};\n\n/**\n * Provides props for an element that hides its children visually\n * but keeps content visible to assistive technology.\n *\n * @example\n * ```tsx\n * function SkipLink() {\n * let ref: HTMLAnchorElement | undefined;\n * const { visuallyHiddenProps } = createVisuallyHidden({ isFocusable: true });\n *\n * return (\n * <a\n * ref={ref}\n * href=\"#main-content\"\n * {...visuallyHiddenProps()}\n * >\n * Skip to main content\n * </a>\n * );\n * }\n *\n * // For content that should always be hidden\n * function ScreenReaderOnly(props: ParentProps) {\n * const { visuallyHiddenProps } = createVisuallyHidden();\n *\n * return (\n * <span {...visuallyHiddenProps()}>\n * {props.children}\n * </span>\n * );\n * }\n * ```\n */\nexport function createVisuallyHidden(\n props: MaybeAccessor<AriaVisuallyHiddenProps> = {},\n): VisuallyHiddenAria {\n const [isFocused, setIsFocused] = createSignal(false);\n\n const isFocusable = () => access(props).isFocusable ?? false;\n const style = () => access(props).style;\n\n // Track focus within for focusable visually hidden elements\n const { focusWithinProps } = createFocusWithin({\n get isDisabled() {\n return !isFocusable();\n },\n onFocusWithinChange: (val: boolean) => setIsFocused(val),\n });\n\n // Compute combined styles\n const combinedStyles = createMemo<JSX.CSSProperties | undefined>(() => {\n if (isFocused()) {\n // If focused, show the element (for skip links, etc.)\n return style();\n } else if (style()) {\n return { ...visuallyHiddenStyles, ...style() };\n } else {\n return visuallyHiddenStyles;\n }\n });\n\n const visuallyHiddenProps = createMemo<JSX.HTMLAttributes<HTMLElement>>(() => ({\n ...(mergeProps(\n focusWithinProps as unknown as Record<string, unknown>,\n isFocusable()\n ? {\n onFocusIn: () => setIsFocused(true),\n onFocusOut: (e: FocusEvent) => {\n const currentTarget = e.currentTarget as Element | null;\n const relatedTarget = e.relatedTarget as Element | null;\n if (currentTarget && !currentTarget.contains(relatedTarget)) {\n setIsFocused(false);\n }\n },\n }\n : {},\n { style: combinedStyles() },\n ) as JSX.HTMLAttributes<HTMLElement>),\n }));\n\n return {\n visuallyHiddenProps,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAa,uBAA0C;CACrD,QAAQ;CACR,MAAM;CACN,aAAa;CACb,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,SAAS;CACT,UAAU;CACV,OAAO;CACP,eAAe;AACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,qBACd,QAAgD,CAAC,GAC7B;CACpB,MAAM,CAAC,WAAW,gBAAgB,aAAa,KAAK;CAEpD,MAAM,oBAAoB,OAAO,KAAK,CAAC,CAAC,eAAe;CACvD,MAAM,cAAc,OAAO,KAAK,CAAC,CAAC;CAGlC,MAAM,EAAE,qBAAqB,kBAAkB;EAC7C,IAAI,aAAa;GACf,OAAO,CAAC,YAAY;EACtB;EACA,sBAAsB,QAAiB,aAAa,GAAG;CACzD,CAAC;CAGD,MAAM,iBAAiB,iBAAgD;EACrE,IAAI,UAAU,GAEZ,OAAO,MAAM;OACR,IAAI,MAAM,GACf,OAAO;GAAE,GAAG;GAAsB,GAAG,MAAM;EAAE;OAE7C,OAAO;CAEX,CAAC;CAqBD,OAAO,EACL,qBApB0B,kBAAmD,EAC7E,GAAI,WACF,kBACA,YAAY,IACR;EACE,iBAAiB,aAAa,IAAI;EAClC,aAAa,MAAkB;GAC7B,MAAM,gBAAgB,EAAE;GACxB,MAAM,gBAAgB,EAAE;GACxB,IAAI,iBAAiB,CAAC,cAAc,SAAS,aAAa,GACxD,aAAa,KAAK;EAEtB;CACF,IACA,CAAC,GACL,EAAE,OAAO,eAAe,EAAE,CAC5B,EACF,EAGoB,EACpB;AACF"}
@@ -1,4 +1,16 @@
1
- import { i as mergeProps$1 } from "./env.jsx";
1
+ /*
2
+ * Copyright 2020 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/visually-hidden/VisuallyHidden.tsx
13
+ import { t as mergeProps } from "./mergeProps.jsx";
2
14
  import { t as access } from "./reactivity.jsx";
3
15
  import { t as createFocusWithin } from "./createFocusWithin.jsx";
4
16
  import { createMemo, createSignal } from "solid-js";
@@ -9,7 +21,7 @@ import { createMemo, createSignal } from "solid-js";
9
21
  * Provides styles and props to visually hide content while keeping it
10
22
  * accessible to screen readers.
11
23
  *
12
- * Port of react-aria's useVisuallyHidden.
24
+ * Ported from packages/react-aria/src/visually-hidden/VisuallyHidden.tsx.
13
25
  */
14
26
  /**
15
27
  * CSS styles that visually hide an element while keeping it accessible.
@@ -78,7 +90,7 @@ function createVisuallyHidden(props = {}) {
78
90
  };
79
91
  else return visuallyHiddenStyles;
80
92
  });
81
- return { visuallyHiddenProps: createMemo(() => ({ ...mergeProps$1(focusWithinProps, isFocusable() ? {
93
+ return { visuallyHiddenProps: createMemo(() => ({ ...mergeProps(focusWithinProps, isFocusable() ? {
82
94
  onFocusIn: () => setIsFocused(true),
83
95
  onFocusOut: (e) => {
84
96
  const currentTarget = e.currentTarget;
@@ -90,4 +102,4 @@ function createVisuallyHidden(props = {}) {
90
102
  //#endregion
91
103
  export { visuallyHiddenStyles as n, createVisuallyHidden as t };
92
104
 
93
- //# sourceMappingURL=visually-hidden.jsx.map
105
+ //# sourceMappingURL=createVisuallyHidden.jsx.map