@proyecto-viviana/solidaria 0.2.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (976) hide show
  1. package/README.md +31 -236
  2. package/dist/_chunk/actiongroup.js +207 -0
  3. package/dist/_chunk/actiongroup.js.map +1 -0
  4. package/dist/_chunk/actiongroup.jsx +207 -0
  5. package/dist/_chunk/actiongroup.jsx.map +1 -0
  6. package/dist/_chunk/ariaHideOutside.js +122 -0
  7. package/dist/_chunk/ariaHideOutside.js.map +1 -0
  8. package/dist/_chunk/ariaHideOutside.jsx +122 -0
  9. package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
  10. package/dist/_chunk/autocomplete.js +196 -0
  11. package/dist/_chunk/autocomplete.js.map +1 -0
  12. package/dist/_chunk/autocomplete.jsx +196 -0
  13. package/dist/_chunk/autocomplete.jsx.map +1 -0
  14. package/dist/_chunk/breadcrumbs.js +119 -0
  15. package/dist/_chunk/breadcrumbs.js.map +1 -0
  16. package/dist/_chunk/breadcrumbs.jsx +119 -0
  17. package/dist/_chunk/breadcrumbs.jsx.map +1 -0
  18. package/dist/_chunk/button.js +276 -0
  19. package/dist/_chunk/button.js.map +1 -0
  20. package/dist/_chunk/button.jsx +276 -0
  21. package/dist/_chunk/button.jsx.map +1 -0
  22. package/dist/_chunk/calendar.js +1036 -0
  23. package/dist/_chunk/calendar.js.map +1 -0
  24. package/dist/_chunk/calendar.jsx +1036 -0
  25. package/dist/_chunk/calendar.jsx.map +1 -0
  26. package/dist/_chunk/checkbox.js +234 -0
  27. package/dist/_chunk/checkbox.js.map +1 -0
  28. package/dist/_chunk/checkbox.jsx +234 -0
  29. package/dist/_chunk/checkbox.jsx.map +1 -0
  30. package/dist/_chunk/color.js +1174 -0
  31. package/dist/_chunk/color.js.map +1 -0
  32. package/dist/_chunk/color.jsx +1174 -0
  33. package/dist/_chunk/color.jsx.map +1 -0
  34. package/dist/_chunk/combobox.js +436 -0
  35. package/dist/_chunk/combobox.js.map +1 -0
  36. package/dist/_chunk/combobox.jsx +436 -0
  37. package/dist/_chunk/combobox.jsx.map +1 -0
  38. package/dist/_chunk/createCollator.js +229 -0
  39. package/dist/_chunk/createCollator.js.map +1 -0
  40. package/dist/_chunk/createCollator.jsx +223 -0
  41. package/dist/_chunk/createCollator.jsx.map +1 -0
  42. package/dist/_chunk/createCollectionRowInteraction.js +133 -0
  43. package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
  44. package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
  45. package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
  46. package/dist/_chunk/createField.js +54 -0
  47. package/dist/_chunk/createField.js.map +1 -0
  48. package/dist/_chunk/createField.jsx +54 -0
  49. package/dist/_chunk/createField.jsx.map +1 -0
  50. package/dist/_chunk/createFocus.js +101 -0
  51. package/dist/_chunk/createFocus.js.map +1 -0
  52. package/dist/_chunk/createFocus.jsx +101 -0
  53. package/dist/_chunk/createFocus.jsx.map +1 -0
  54. package/dist/_chunk/createFocusRing.js +54 -0
  55. package/dist/_chunk/createFocusRing.js.map +1 -0
  56. package/dist/_chunk/createFocusRing.jsx +54 -0
  57. package/dist/_chunk/createFocusRing.jsx.map +1 -0
  58. package/dist/_chunk/createFocusWithin.js +121 -0
  59. package/dist/_chunk/createFocusWithin.js.map +1 -0
  60. package/dist/_chunk/createFocusWithin.jsx +121 -0
  61. package/dist/_chunk/createFocusWithin.jsx.map +1 -0
  62. package/dist/_chunk/createFocusable.js +131 -0
  63. package/dist/_chunk/createFocusable.js.map +1 -0
  64. package/dist/_chunk/createFocusable.jsx +131 -0
  65. package/dist/_chunk/createFocusable.jsx.map +1 -0
  66. package/dist/_chunk/createFormValidation.js +135 -0
  67. package/dist/_chunk/createFormValidation.js.map +1 -0
  68. package/dist/_chunk/createFormValidation.jsx +135 -0
  69. package/dist/_chunk/createFormValidation.jsx.map +1 -0
  70. package/dist/_chunk/createHover.js +130 -0
  71. package/dist/_chunk/createHover.js.map +1 -0
  72. package/dist/_chunk/createHover.jsx +130 -0
  73. package/dist/_chunk/createHover.jsx.map +1 -0
  74. package/dist/_chunk/createInteractionModality.js +269 -0
  75. package/dist/_chunk/createInteractionModality.js.map +1 -0
  76. package/dist/_chunk/createInteractionModality.jsx +269 -0
  77. package/dist/_chunk/createInteractionModality.jsx.map +1 -0
  78. package/dist/_chunk/createLabel.js +46 -0
  79. package/dist/_chunk/createLabel.js.map +1 -0
  80. package/dist/_chunk/createLabel.jsx +46 -0
  81. package/dist/_chunk/createLabel.jsx.map +1 -0
  82. package/dist/_chunk/createLabels.js +31 -0
  83. package/dist/_chunk/createLabels.js.map +1 -0
  84. package/dist/_chunk/createLabels.jsx +31 -0
  85. package/dist/_chunk/createLabels.jsx.map +1 -0
  86. package/dist/_chunk/createLandmark.js +198 -0
  87. package/dist/_chunk/createLandmark.js.map +1 -0
  88. package/dist/_chunk/createLandmark.jsx +198 -0
  89. package/dist/_chunk/createLandmark.jsx.map +1 -0
  90. package/dist/_chunk/createLongPress.js +91 -0
  91. package/dist/_chunk/createLongPress.js.map +1 -0
  92. package/dist/_chunk/createLongPress.jsx +91 -0
  93. package/dist/_chunk/createLongPress.jsx.map +1 -0
  94. package/dist/_chunk/createOverlay.js +327 -0
  95. package/dist/_chunk/createOverlay.js.map +1 -0
  96. package/dist/_chunk/createOverlay.jsx +327 -0
  97. package/dist/_chunk/createOverlay.jsx.map +1 -0
  98. package/dist/_chunk/createPress.js +526 -0
  99. package/dist/_chunk/createPress.js.map +1 -0
  100. package/dist/_chunk/createPress.jsx +526 -0
  101. package/dist/_chunk/createPress.jsx.map +1 -0
  102. package/dist/_chunk/createProgressBar.js +81 -0
  103. package/dist/_chunk/createProgressBar.js.map +1 -0
  104. package/dist/_chunk/createProgressBar.jsx +81 -0
  105. package/dist/_chunk/createProgressBar.jsx.map +1 -0
  106. package/dist/_chunk/createSelectableItem.js +298 -0
  107. package/dist/_chunk/createSelectableItem.js.map +1 -0
  108. package/dist/_chunk/createSelectableItem.jsx +298 -0
  109. package/dist/_chunk/createSelectableItem.jsx.map +1 -0
  110. package/dist/_chunk/createToggle.js +158 -0
  111. package/dist/_chunk/createToggle.js.map +1 -0
  112. package/dist/_chunk/createToggle.jsx +158 -0
  113. package/dist/_chunk/createToggle.jsx.map +1 -0
  114. package/dist/_chunk/createTypeSelect.js +125 -0
  115. package/dist/_chunk/createTypeSelect.js.map +1 -0
  116. package/dist/_chunk/createTypeSelect.jsx +125 -0
  117. package/dist/_chunk/createTypeSelect.jsx.map +1 -0
  118. package/dist/_chunk/datepicker.js +1393 -0
  119. package/dist/_chunk/datepicker.js.map +1 -0
  120. package/dist/_chunk/datepicker.jsx +1393 -0
  121. package/dist/_chunk/datepicker.jsx.map +1 -0
  122. package/dist/_chunk/dialog.js +62 -0
  123. package/dist/_chunk/dialog.js.map +1 -0
  124. package/dist/_chunk/dialog.jsx +62 -0
  125. package/dist/_chunk/dialog.jsx.map +1 -0
  126. package/dist/_chunk/disclosure.js +185 -0
  127. package/dist/_chunk/disclosure.js.map +1 -0
  128. package/dist/_chunk/disclosure.jsx +185 -0
  129. package/dist/_chunk/disclosure.jsx.map +1 -0
  130. package/dist/_chunk/dnd.js +1304 -0
  131. package/dist/_chunk/dnd.js.map +1 -0
  132. package/dist/_chunk/dnd.jsx +1304 -0
  133. package/dist/_chunk/dnd.jsx.map +1 -0
  134. package/dist/_chunk/env.js +105 -0
  135. package/dist/_chunk/env.js.map +1 -0
  136. package/dist/_chunk/env.jsx +105 -0
  137. package/dist/_chunk/env.jsx.map +1 -0
  138. package/dist/_chunk/filterDOMProps.js +82 -0
  139. package/dist/_chunk/filterDOMProps.js.map +1 -0
  140. package/dist/_chunk/filterDOMProps.jsx +82 -0
  141. package/dist/_chunk/filterDOMProps.jsx.map +1 -0
  142. package/dist/_chunk/focus.js +399 -0
  143. package/dist/_chunk/focus.js.map +1 -0
  144. package/dist/_chunk/focus.jsx +399 -0
  145. package/dist/_chunk/focus.jsx.map +1 -0
  146. package/dist/_chunk/focus2.js +895 -0
  147. package/dist/_chunk/focus2.js.map +1 -0
  148. package/dist/_chunk/focus2.jsx +870 -0
  149. package/dist/_chunk/focus2.jsx.map +1 -0
  150. package/dist/_chunk/form.js +39 -0
  151. package/dist/_chunk/form.js.map +1 -0
  152. package/dist/_chunk/form.jsx +39 -0
  153. package/dist/_chunk/form.jsx.map +1 -0
  154. package/dist/_chunk/grid.js +623 -0
  155. package/dist/_chunk/grid.js.map +1 -0
  156. package/dist/_chunk/grid.jsx +623 -0
  157. package/dist/_chunk/grid.jsx.map +1 -0
  158. package/dist/_chunk/gridlist.js +364 -0
  159. package/dist/_chunk/gridlist.js.map +1 -0
  160. package/dist/_chunk/gridlist.jsx +364 -0
  161. package/dist/_chunk/gridlist.jsx.map +1 -0
  162. package/dist/_chunk/i18n.js +254 -0
  163. package/dist/_chunk/i18n.js.map +1 -0
  164. package/dist/_chunk/i18n.jsx +254 -0
  165. package/dist/_chunk/i18n.jsx.map +1 -0
  166. package/dist/_chunk/interactions.js +241 -0
  167. package/dist/_chunk/interactions.js.map +1 -0
  168. package/dist/_chunk/interactions.jsx +237 -0
  169. package/dist/_chunk/interactions.jsx.map +1 -0
  170. package/dist/_chunk/link.js +96 -0
  171. package/dist/_chunk/link.js.map +1 -0
  172. package/dist/_chunk/link.jsx +96 -0
  173. package/dist/_chunk/link.jsx.map +1 -0
  174. package/dist/_chunk/listbox.js +324 -0
  175. package/dist/_chunk/listbox.js.map +1 -0
  176. package/dist/_chunk/listbox.jsx +324 -0
  177. package/dist/_chunk/listbox.jsx.map +1 -0
  178. package/dist/_chunk/live-announcer.js +207 -0
  179. package/dist/_chunk/live-announcer.js.map +1 -0
  180. package/dist/_chunk/live-announcer.jsx +207 -0
  181. package/dist/_chunk/live-announcer.jsx.map +1 -0
  182. package/dist/_chunk/menu.js +518 -0
  183. package/dist/_chunk/menu.js.map +1 -0
  184. package/dist/_chunk/menu.jsx +518 -0
  185. package/dist/_chunk/menu.jsx.map +1 -0
  186. package/dist/_chunk/meter.js +33 -0
  187. package/dist/_chunk/meter.js.map +1 -0
  188. package/dist/_chunk/meter.jsx +33 -0
  189. package/dist/_chunk/meter.jsx.map +1 -0
  190. package/dist/_chunk/numberfield.js +258 -0
  191. package/dist/_chunk/numberfield.js.map +1 -0
  192. package/dist/_chunk/numberfield.jsx +258 -0
  193. package/dist/_chunk/numberfield.jsx.map +1 -0
  194. package/dist/_chunk/overlays.js +186 -0
  195. package/dist/_chunk/overlays.js.map +1 -0
  196. package/dist/_chunk/overlays.jsx +162 -0
  197. package/dist/_chunk/overlays.jsx.map +1 -0
  198. package/dist/_chunk/popover.js +574 -0
  199. package/dist/_chunk/popover.js.map +1 -0
  200. package/dist/_chunk/popover.jsx +574 -0
  201. package/dist/_chunk/popover.jsx.map +1 -0
  202. package/dist/_chunk/radio.js +319 -0
  203. package/dist/_chunk/radio.js.map +1 -0
  204. package/dist/_chunk/radio.jsx +319 -0
  205. package/dist/_chunk/radio.jsx.map +1 -0
  206. package/dist/_chunk/searchfield.js +209 -0
  207. package/dist/_chunk/searchfield.js.map +1 -0
  208. package/dist/_chunk/searchfield.jsx +209 -0
  209. package/dist/_chunk/searchfield.jsx.map +1 -0
  210. package/dist/_chunk/select.js +403 -0
  211. package/dist/_chunk/select.js.map +1 -0
  212. package/dist/_chunk/select.jsx +394 -0
  213. package/dist/_chunk/select.jsx.map +1 -0
  214. package/dist/_chunk/selection.js +679 -0
  215. package/dist/_chunk/selection.js.map +1 -0
  216. package/dist/_chunk/selection.jsx +679 -0
  217. package/dist/_chunk/selection.jsx.map +1 -0
  218. package/dist/_chunk/separator.js +29 -0
  219. package/dist/_chunk/separator.js.map +1 -0
  220. package/dist/_chunk/separator.jsx +29 -0
  221. package/dist/_chunk/separator.jsx.map +1 -0
  222. package/dist/_chunk/slider.js +255 -0
  223. package/dist/_chunk/slider.js.map +1 -0
  224. package/dist/_chunk/slider.jsx +255 -0
  225. package/dist/_chunk/slider.jsx.map +1 -0
  226. package/dist/_chunk/steplist.js +66 -0
  227. package/dist/_chunk/steplist.js.map +1 -0
  228. package/dist/_chunk/steplist.jsx +66 -0
  229. package/dist/_chunk/steplist.jsx.map +1 -0
  230. package/dist/_chunk/switch.js +34 -0
  231. package/dist/_chunk/switch.js.map +1 -0
  232. package/dist/_chunk/switch.jsx +34 -0
  233. package/dist/_chunk/switch.jsx.map +1 -0
  234. package/dist/_chunk/table.js +1051 -0
  235. package/dist/_chunk/table.js.map +1 -0
  236. package/dist/_chunk/table.jsx +1051 -0
  237. package/dist/_chunk/table.jsx.map +1 -0
  238. package/dist/_chunk/tabs.js +260 -0
  239. package/dist/_chunk/tabs.js.map +1 -0
  240. package/dist/_chunk/tabs.jsx +260 -0
  241. package/dist/_chunk/tabs.jsx.map +1 -0
  242. package/dist/_chunk/tag.js +286 -0
  243. package/dist/_chunk/tag.js.map +1 -0
  244. package/dist/_chunk/tag.jsx +286 -0
  245. package/dist/_chunk/tag.jsx.map +1 -0
  246. package/dist/_chunk/textfield.js +109 -0
  247. package/dist/_chunk/textfield.js.map +1 -0
  248. package/dist/_chunk/textfield.jsx +109 -0
  249. package/dist/_chunk/textfield.jsx.map +1 -0
  250. package/dist/_chunk/toast.js +250 -0
  251. package/dist/_chunk/toast.js.map +1 -0
  252. package/dist/_chunk/toast.jsx +250 -0
  253. package/dist/_chunk/toast.jsx.map +1 -0
  254. package/dist/_chunk/toolbar.js +258 -0
  255. package/dist/_chunk/toolbar.js.map +1 -0
  256. package/dist/_chunk/toolbar.jsx +258 -0
  257. package/dist/_chunk/toolbar.jsx.map +1 -0
  258. package/dist/_chunk/tooltip.js +185 -0
  259. package/dist/_chunk/tooltip.js.map +1 -0
  260. package/dist/_chunk/tooltip.jsx +185 -0
  261. package/dist/_chunk/tooltip.jsx.map +1 -0
  262. package/dist/_chunk/tree.js +424 -0
  263. package/dist/_chunk/tree.js.map +1 -0
  264. package/dist/_chunk/tree.jsx +424 -0
  265. package/dist/_chunk/tree.jsx.map +1 -0
  266. package/dist/_chunk/utils.js +665 -0
  267. package/dist/_chunk/utils.js.map +1 -0
  268. package/dist/_chunk/utils.jsx +665 -0
  269. package/dist/_chunk/utils.jsx.map +1 -0
  270. package/dist/_chunk/visually-hidden.js +92 -0
  271. package/dist/_chunk/visually-hidden.js.map +1 -0
  272. package/dist/_chunk/visually-hidden.jsx +92 -0
  273. package/dist/_chunk/visually-hidden.jsx.map +1 -0
  274. package/dist/actiongroup/createActionGroup.d.ts +5 -5
  275. package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
  276. package/dist/actiongroup/index.d.ts +1 -1
  277. package/dist/actiongroup/index.js +2 -0
  278. package/dist/actiongroup/index.jsx +2 -0
  279. package/dist/autocomplete/createAutocomplete.d.ts +12 -10
  280. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  281. package/dist/autocomplete/index.d.ts +1 -1
  282. package/dist/autocomplete/index.d.ts.map +1 -1
  283. package/dist/autocomplete/index.js +2 -0
  284. package/dist/autocomplete/index.jsx +2 -0
  285. package/dist/breadcrumbs/createBreadcrumbs.d.ts +9 -7
  286. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  287. package/dist/breadcrumbs/index.d.ts +1 -1
  288. package/dist/breadcrumbs/index.js +2 -0
  289. package/dist/breadcrumbs/index.jsx +2 -0
  290. package/dist/button/createButton.d.ts +1 -1
  291. package/dist/button/createButton.d.ts.map +1 -1
  292. package/dist/button/createToggleButton.d.ts +3 -3
  293. package/dist/button/createToggleButtonGroup.d.ts +7 -7
  294. package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
  295. package/dist/button/index.d.ts +6 -6
  296. package/dist/button/index.d.ts.map +1 -1
  297. package/dist/button/index.js +2 -0
  298. package/dist/button/index.jsx +2 -0
  299. package/dist/button/types.d.ts +18 -12
  300. package/dist/button/types.d.ts.map +1 -1
  301. package/dist/calendar/createCalendar.d.ts +15 -5
  302. package/dist/calendar/createCalendar.d.ts.map +1 -1
  303. package/dist/calendar/createCalendarCell.d.ts +6 -2
  304. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  305. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  306. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  307. package/dist/calendar/createCalendarMonthPicker.d.ts +41 -0
  308. package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
  309. package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
  310. package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
  311. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  312. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  313. package/dist/calendar/createRangeCalendarCell.d.ts +4 -2
  314. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  315. package/dist/calendar/index.d.ts +7 -5
  316. package/dist/calendar/index.d.ts.map +1 -1
  317. package/dist/calendar/index.js +2 -0
  318. package/dist/calendar/index.jsx +2 -0
  319. package/dist/calendar/intl/index.d.ts +12 -0
  320. package/dist/calendar/intl/index.d.ts.map +1 -0
  321. package/dist/calendar/utils.d.ts +16 -0
  322. package/dist/calendar/utils.d.ts.map +1 -0
  323. package/dist/checkbox/createCheckbox.d.ts +10 -6
  324. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  325. package/dist/checkbox/createCheckboxGroup.d.ts +7 -7
  326. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  327. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  328. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  329. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  330. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  331. package/dist/checkbox/index.d.ts +8 -8
  332. package/dist/checkbox/index.d.ts.map +1 -1
  333. package/dist/checkbox/index.js +2 -0
  334. package/dist/checkbox/index.jsx +2 -0
  335. package/dist/collections/index.d.ts +3 -3
  336. package/dist/collections/index.d.ts.map +1 -1
  337. package/dist/collections/index.js +160 -0
  338. package/dist/collections/index.js.map +1 -0
  339. package/dist/collections/index.jsx +160 -0
  340. package/dist/collections/index.jsx.map +1 -0
  341. package/dist/color/createColorArea.d.ts +3 -3
  342. package/dist/color/createColorArea.d.ts.map +1 -1
  343. package/dist/color/createColorField.d.ts +4 -4
  344. package/dist/color/createColorField.d.ts.map +1 -1
  345. package/dist/color/createColorSlider.d.ts +4 -4
  346. package/dist/color/createColorSlider.d.ts.map +1 -1
  347. package/dist/color/createColorSwatch.d.ts +2 -2
  348. package/dist/color/createColorSwatch.d.ts.map +1 -1
  349. package/dist/color/createColorWheel.d.ts +3 -3
  350. package/dist/color/createColorWheel.d.ts.map +1 -1
  351. package/dist/color/index.d.ts +6 -6
  352. package/dist/color/index.js +2 -0
  353. package/dist/color/index.jsx +2 -0
  354. package/dist/color/types.d.ts +98 -16
  355. package/dist/color/types.d.ts.map +1 -1
  356. package/dist/combobox/createComboBox.d.ts +10 -7
  357. package/dist/combobox/createComboBox.d.ts.map +1 -1
  358. package/dist/combobox/index.d.ts +1 -1
  359. package/dist/combobox/index.js +2 -0
  360. package/dist/combobox/index.jsx +2 -0
  361. package/dist/combobox/intl/index.d.ts +1 -1
  362. package/dist/datepicker/createDateField.d.ts +18 -6
  363. package/dist/datepicker/createDateField.d.ts.map +1 -1
  364. package/dist/datepicker/createDatePicker.d.ts +51 -5
  365. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  366. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  367. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  368. package/dist/datepicker/createDateRangePicker.d.ts +8 -6
  369. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
  370. package/dist/datepicker/createDateSegment.d.ts +10 -2
  371. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  372. package/dist/datepicker/createTimeField.d.ts +11 -5
  373. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  374. package/dist/datepicker/createTimeSegment.d.ts +2 -2
  375. package/dist/datepicker/createTimeSegment.d.ts.map +1 -1
  376. package/dist/datepicker/index.d.ts +7 -6
  377. package/dist/datepicker/index.d.ts.map +1 -1
  378. package/dist/datepicker/index.js +2 -0
  379. package/dist/datepicker/index.jsx +2 -0
  380. package/dist/dialog/createDialog.d.ts +5 -5
  381. package/dist/dialog/createDialog.d.ts.map +1 -1
  382. package/dist/dialog/index.d.ts +2 -2
  383. package/dist/dialog/index.d.ts.map +1 -1
  384. package/dist/dialog/index.js +2 -0
  385. package/dist/dialog/index.jsx +2 -0
  386. package/dist/dialog/types.d.ts +4 -4
  387. package/dist/disclosure/createDisclosure.d.ts +5 -2
  388. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  389. package/dist/disclosure/createDisclosureGroup.d.ts +4 -4
  390. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  391. package/dist/disclosure/index.d.ts +2 -2
  392. package/dist/disclosure/index.js +2 -0
  393. package/dist/disclosure/index.jsx +2 -0
  394. package/dist/dnd/createDrag.d.ts +2 -2
  395. package/dist/dnd/createDrag.d.ts.map +1 -1
  396. package/dist/dnd/createDraggableCollection.d.ts +2 -2
  397. package/dist/dnd/createDraggableItem.d.ts +3 -3
  398. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  399. package/dist/dnd/createDrop.d.ts +2 -2
  400. package/dist/dnd/createDrop.d.ts.map +1 -1
  401. package/dist/dnd/createDroppableCollection.d.ts +26 -6
  402. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  403. package/dist/dnd/createDroppableItem.d.ts +3 -3
  404. package/dist/dnd/index.d.ts +12 -12
  405. package/dist/dnd/index.d.ts.map +1 -1
  406. package/dist/dnd/index.js +2 -0
  407. package/dist/dnd/index.jsx +2 -0
  408. package/dist/dnd/types.d.ts +2 -2
  409. package/dist/dnd/types.d.ts.map +1 -1
  410. package/dist/dnd/utils.d.ts +2 -2
  411. package/dist/dnd/utils.d.ts.map +1 -1
  412. package/dist/focus/FocusScope.d.ts +1 -1
  413. package/dist/focus/FocusScope.d.ts.map +1 -1
  414. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  415. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  416. package/dist/focus/createVirtualFocus.d.ts +4 -4
  417. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  418. package/dist/focus/index.d.ts +4 -4
  419. package/dist/focus/index.d.ts.map +1 -1
  420. package/dist/focus/index.js +2 -0
  421. package/dist/focus/index.jsx +2 -0
  422. package/dist/form/createFormReset.d.ts +1 -1
  423. package/dist/form/createFormValidation.d.ts +3 -3
  424. package/dist/form/createFormValidation.d.ts.map +1 -1
  425. package/dist/form/index.d.ts +2 -2
  426. package/dist/form/index.d.ts.map +1 -1
  427. package/dist/form/index.js +3 -0
  428. package/dist/form/index.jsx +3 -0
  429. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  430. package/dist/grid/createGrid.d.ts +3 -3
  431. package/dist/grid/createGridCell.d.ts +3 -3
  432. package/dist/grid/createGridRow.d.ts +3 -3
  433. package/dist/grid/index.d.ts +5 -5
  434. package/dist/grid/index.js +2 -0
  435. package/dist/grid/index.jsx +2 -0
  436. package/dist/grid/types.d.ts +8 -8
  437. package/dist/gridlist/createGridList.d.ts +12 -4
  438. package/dist/gridlist/createGridList.d.ts.map +1 -1
  439. package/dist/gridlist/createGridListItem.d.ts +4 -4
  440. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  441. package/dist/gridlist/createGridListSection.d.ts +15 -0
  442. package/dist/gridlist/createGridListSection.d.ts.map +1 -0
  443. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  444. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  445. package/dist/gridlist/index.d.ts +5 -4
  446. package/dist/gridlist/index.d.ts.map +1 -1
  447. package/dist/gridlist/index.js +2 -0
  448. package/dist/gridlist/index.jsx +2 -0
  449. package/dist/gridlist/types.d.ts +61 -7
  450. package/dist/gridlist/types.d.ts.map +1 -1
  451. package/dist/i18n/createCollator.d.ts.map +1 -1
  452. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  453. package/dist/i18n/createFilter.d.ts.map +1 -1
  454. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  455. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  456. package/dist/i18n/createStringFormatter.d.ts +2 -2
  457. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  458. package/dist/i18n/index.d.ts +8 -8
  459. package/dist/i18n/index.d.ts.map +1 -1
  460. package/dist/i18n/index.js +3 -0
  461. package/dist/i18n/index.jsx +3 -0
  462. package/dist/i18n/locale.d.ts +2 -2
  463. package/dist/i18n/locale.d.ts.map +1 -1
  464. package/dist/i18n/utils.d.ts.map +1 -1
  465. package/dist/index.d.ts +56 -51
  466. package/dist/index.d.ts.map +1 -1
  467. package/dist/index.js +71 -17119
  468. package/dist/index.jsx +71 -0
  469. package/dist/interactions/FocusableProvider.d.ts +2 -2
  470. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  471. package/dist/interactions/PressEvent.d.ts +13 -2
  472. package/dist/interactions/PressEvent.d.ts.map +1 -1
  473. package/dist/interactions/createFocus.d.ts +1 -1
  474. package/dist/interactions/createFocus.d.ts.map +1 -1
  475. package/dist/interactions/createFocusRing.d.ts +1 -1
  476. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  477. package/dist/interactions/createFocusWithin.d.ts +1 -1
  478. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  479. package/dist/interactions/createFocusable.d.ts +3 -3
  480. package/dist/interactions/createFocusable.d.ts.map +1 -1
  481. package/dist/interactions/createHover.d.ts +5 -5
  482. package/dist/interactions/createHover.d.ts.map +1 -1
  483. package/dist/interactions/createInteractionModality.d.ts +3 -4
  484. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  485. package/dist/interactions/createKeyboard.d.ts +1 -1
  486. package/dist/interactions/createKeyboard.d.ts.map +1 -1
  487. package/dist/interactions/createLongPress.d.ts +5 -5
  488. package/dist/interactions/createMove.d.ts +5 -5
  489. package/dist/interactions/createMove.d.ts.map +1 -1
  490. package/dist/interactions/createPress.d.ts +4 -4
  491. package/dist/interactions/createPress.d.ts.map +1 -1
  492. package/dist/interactions/index.d.ts +12 -12
  493. package/dist/interactions/index.d.ts.map +1 -1
  494. package/dist/interactions/index.js +10 -0
  495. package/dist/interactions/index.jsx +10 -0
  496. package/dist/label/createField.d.ts +4 -4
  497. package/dist/label/createField.d.ts.map +1 -1
  498. package/dist/label/createLabel.d.ts +7 -7
  499. package/dist/label/createLabel.d.ts.map +1 -1
  500. package/dist/label/createLabels.d.ts +1 -1
  501. package/dist/label/createLabels.d.ts.map +1 -1
  502. package/dist/label/index.d.ts +5 -5
  503. package/dist/label/index.js +4 -0
  504. package/dist/label/index.jsx +4 -0
  505. package/dist/landmark/createLandmark.d.ts +5 -5
  506. package/dist/landmark/createLandmark.d.ts.map +1 -1
  507. package/dist/landmark/index.d.ts +1 -1
  508. package/dist/landmark/index.js +2 -0
  509. package/dist/landmark/index.jsx +2 -0
  510. package/dist/link/createLink.d.ts +14 -8
  511. package/dist/link/createLink.d.ts.map +1 -1
  512. package/dist/link/index.d.ts +1 -1
  513. package/dist/link/index.js +2 -0
  514. package/dist/link/index.jsx +2 -0
  515. package/dist/listbox/createListBox.d.ts +48 -6
  516. package/dist/listbox/createListBox.d.ts.map +1 -1
  517. package/dist/listbox/createOption.d.ts +27 -4
  518. package/dist/listbox/createOption.d.ts.map +1 -1
  519. package/dist/listbox/index.d.ts +2 -2
  520. package/dist/listbox/index.d.ts.map +1 -1
  521. package/dist/listbox/index.js +2 -0
  522. package/dist/listbox/index.jsx +2 -0
  523. package/dist/live-announcer/announce.d.ts +2 -2
  524. package/dist/live-announcer/announce.d.ts.map +1 -1
  525. package/dist/live-announcer/index.d.ts +1 -1
  526. package/dist/live-announcer/index.js +2 -0
  527. package/dist/live-announcer/index.jsx +2 -0
  528. package/dist/menu/createMenu.d.ts +14 -11
  529. package/dist/menu/createMenu.d.ts.map +1 -1
  530. package/dist/menu/createMenuItem.d.ts +25 -5
  531. package/dist/menu/createMenuItem.d.ts.map +1 -1
  532. package/dist/menu/createMenuTrigger.d.ts +4 -4
  533. package/dist/menu/index.d.ts +3 -3
  534. package/dist/menu/index.d.ts.map +1 -1
  535. package/dist/menu/index.js +2 -0
  536. package/dist/menu/index.jsx +2 -0
  537. package/dist/meter/createMeter.d.ts +6 -6
  538. package/dist/meter/createMeter.d.ts.map +1 -1
  539. package/dist/meter/index.d.ts +1 -1
  540. package/dist/meter/index.js +2 -0
  541. package/dist/meter/index.jsx +2 -0
  542. package/dist/numberfield/createNumberField.d.ts +9 -8
  543. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  544. package/dist/numberfield/index.d.ts +1 -1
  545. package/dist/numberfield/index.js +2 -0
  546. package/dist/numberfield/index.jsx +2 -0
  547. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  548. package/dist/overlays/createModal.d.ts +3 -3
  549. package/dist/overlays/createModal.d.ts.map +1 -1
  550. package/dist/overlays/createOverlay.d.ts +1 -1
  551. package/dist/overlays/createOverlay.d.ts.map +1 -1
  552. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  553. package/dist/overlays/index.d.ts +6 -6
  554. package/dist/overlays/index.d.ts.map +1 -1
  555. package/dist/overlays/index.js +4 -0
  556. package/dist/overlays/index.jsx +4 -0
  557. package/dist/popover/calculatePosition.d.ts +6 -4
  558. package/dist/popover/calculatePosition.d.ts.map +1 -1
  559. package/dist/popover/createOverlayPosition.d.ts +11 -3
  560. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  561. package/dist/popover/createPopover.d.ts +4 -4
  562. package/dist/popover/createPopover.d.ts.map +1 -1
  563. package/dist/popover/index.d.ts +3 -3
  564. package/dist/popover/index.js +2 -0
  565. package/dist/popover/index.jsx +2 -0
  566. package/dist/progress/createProgressBar.d.ts +7 -5
  567. package/dist/progress/createProgressBar.d.ts.map +1 -1
  568. package/dist/progress/index.d.ts +1 -1
  569. package/dist/progress/index.js +2 -0
  570. package/dist/progress/index.jsx +2 -0
  571. package/dist/radio/createRadio.d.ts +9 -7
  572. package/dist/radio/createRadio.d.ts.map +1 -1
  573. package/dist/radio/createRadioGroup.d.ts +10 -10
  574. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  575. package/dist/radio/createRadioGroupState.d.ts +3 -3
  576. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  577. package/dist/radio/index.d.ts +3 -3
  578. package/dist/radio/index.d.ts.map +1 -1
  579. package/dist/radio/index.js +2 -0
  580. package/dist/radio/index.jsx +2 -0
  581. package/dist/searchfield/createSearchField.d.ts +7 -7
  582. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  583. package/dist/searchfield/index.d.ts +2 -2
  584. package/dist/searchfield/index.js +2 -0
  585. package/dist/searchfield/index.jsx +2 -0
  586. package/dist/select/createHiddenSelect.d.ts +4 -4
  587. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  588. package/dist/select/createSelect.d.ts +14 -6
  589. package/dist/select/createSelect.d.ts.map +1 -1
  590. package/dist/select/index.d.ts +2 -2
  591. package/dist/select/index.d.ts.map +1 -1
  592. package/dist/select/index.js +2 -0
  593. package/dist/select/index.jsx +2 -0
  594. package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
  595. package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
  596. package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
  597. package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
  598. package/dist/selection/constants.d.ts +15 -0
  599. package/dist/selection/constants.d.ts.map +1 -0
  600. package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
  601. package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
  602. package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
  603. package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
  604. package/dist/selection/createSelectableCollection.d.ts +69 -0
  605. package/dist/selection/createSelectableCollection.d.ts.map +1 -0
  606. package/dist/selection/createSelectableItem.d.ts +154 -0
  607. package/dist/selection/createSelectableItem.d.ts.map +1 -0
  608. package/dist/selection/createSelectableList.d.ts +43 -0
  609. package/dist/selection/createSelectableList.d.ts.map +1 -0
  610. package/dist/selection/createTypeSelect.d.ts +2 -2
  611. package/dist/selection/createTypeSelect.d.ts.map +1 -1
  612. package/dist/selection/index.d.ts +10 -1
  613. package/dist/selection/index.d.ts.map +1 -1
  614. package/dist/selection/index.js +4 -0
  615. package/dist/selection/index.jsx +4 -0
  616. package/dist/selection/selectItem.d.ts +29 -0
  617. package/dist/selection/selectItem.d.ts.map +1 -0
  618. package/dist/selection/utils.d.ts +40 -0
  619. package/dist/selection/utils.d.ts.map +1 -0
  620. package/dist/separator/createSeparator.d.ts +9 -5
  621. package/dist/separator/createSeparator.d.ts.map +1 -1
  622. package/dist/separator/index.d.ts +1 -1
  623. package/dist/separator/index.js +2 -0
  624. package/dist/separator/index.jsx +2 -0
  625. package/dist/slider/createSlider.d.ts +11 -7
  626. package/dist/slider/createSlider.d.ts.map +1 -1
  627. package/dist/slider/index.d.ts +2 -2
  628. package/dist/slider/index.js +2 -0
  629. package/dist/slider/index.jsx +2 -0
  630. package/dist/ssr/index.d.ts +18 -1
  631. package/dist/ssr/index.d.ts.map +1 -1
  632. package/dist/ssr/index.js +299 -0
  633. package/dist/ssr/index.js.map +1 -0
  634. package/dist/ssr/index.jsx +292 -0
  635. package/dist/ssr/index.jsx.map +1 -0
  636. package/dist/steplist/createStepList.d.ts +36 -0
  637. package/dist/steplist/createStepList.d.ts.map +1 -0
  638. package/dist/steplist/index.d.ts +2 -0
  639. package/dist/steplist/index.d.ts.map +1 -0
  640. package/dist/steplist/index.js +2 -0
  641. package/dist/steplist/index.jsx +2 -0
  642. package/dist/switch/createSwitch.d.ts +10 -4
  643. package/dist/switch/createSwitch.d.ts.map +1 -1
  644. package/dist/switch/index.d.ts +1 -1
  645. package/dist/switch/index.js +2 -0
  646. package/dist/switch/index.jsx +2 -0
  647. package/dist/table/createTable.d.ts +3 -3
  648. package/dist/table/createTable.d.ts.map +1 -1
  649. package/dist/table/createTableCell.d.ts +3 -3
  650. package/dist/table/createTableCell.d.ts.map +1 -1
  651. package/dist/table/createTableColumnHeader.d.ts +3 -3
  652. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  653. package/dist/table/createTableColumnResize.d.ts +41 -0
  654. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  655. package/dist/table/createTableHeaderRow.d.ts +3 -3
  656. package/dist/table/createTableRow.d.ts +4 -4
  657. package/dist/table/createTableRow.d.ts.map +1 -1
  658. package/dist/table/createTableRowGroup.d.ts +2 -2
  659. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  660. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  661. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  662. package/dist/table/index.d.ts +11 -9
  663. package/dist/table/index.d.ts.map +1 -1
  664. package/dist/table/index.js +2 -0
  665. package/dist/table/index.jsx +2 -0
  666. package/dist/table/types.d.ts +41 -7
  667. package/dist/table/types.d.ts.map +1 -1
  668. package/dist/tabs/createTabs.d.ts +32 -28
  669. package/dist/tabs/createTabs.d.ts.map +1 -1
  670. package/dist/tabs/index.d.ts +1 -1
  671. package/dist/tabs/index.js +2 -0
  672. package/dist/tabs/index.jsx +2 -0
  673. package/dist/tag/createTag.d.ts +4 -2
  674. package/dist/tag/createTag.d.ts.map +1 -1
  675. package/dist/tag/createTagGroup.d.ts +5 -5
  676. package/dist/tag/createTagGroup.d.ts.map +1 -1
  677. package/dist/tag/index.d.ts +2 -2
  678. package/dist/tag/index.d.ts.map +1 -1
  679. package/dist/tag/index.js +2 -0
  680. package/dist/tag/index.jsx +2 -0
  681. package/dist/textfield/createTextField.d.ts +17 -11
  682. package/dist/textfield/createTextField.d.ts.map +1 -1
  683. package/dist/textfield/index.d.ts +1 -1
  684. package/dist/textfield/index.d.ts.map +1 -1
  685. package/dist/textfield/index.js +2 -0
  686. package/dist/textfield/index.jsx +2 -0
  687. package/dist/toast/createToast.d.ts +2 -2
  688. package/dist/toast/createToast.d.ts.map +1 -1
  689. package/dist/toast/createToastRegion.d.ts +5 -3
  690. package/dist/toast/createToastRegion.d.ts.map +1 -1
  691. package/dist/toast/index.d.ts +2 -2
  692. package/dist/toast/index.d.ts.map +1 -1
  693. package/dist/toast/index.js +2 -0
  694. package/dist/toast/index.jsx +2 -0
  695. package/dist/toggle/createToggle.d.ts +13 -9
  696. package/dist/toggle/createToggle.d.ts.map +1 -1
  697. package/dist/toggle/createToggleState.d.ts +2 -2
  698. package/dist/toggle/createToggleState.d.ts.map +1 -1
  699. package/dist/toggle/index.d.ts +4 -4
  700. package/dist/toggle/index.d.ts.map +1 -1
  701. package/dist/toggle/index.js +3 -0
  702. package/dist/toggle/index.jsx +3 -0
  703. package/dist/toolbar/createToolbar.d.ts +9 -9
  704. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  705. package/dist/toolbar/index.d.ts +1 -1
  706. package/dist/toolbar/index.d.ts.map +1 -1
  707. package/dist/toolbar/index.js +2 -0
  708. package/dist/toolbar/index.jsx +2 -0
  709. package/dist/tooltip/createTooltip.d.ts +5 -5
  710. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  711. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  712. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  713. package/dist/tooltip/index.d.ts +2 -2
  714. package/dist/tooltip/index.js +2 -0
  715. package/dist/tooltip/index.jsx +2 -0
  716. package/dist/tree/createTree.d.ts +8 -4
  717. package/dist/tree/createTree.d.ts.map +1 -1
  718. package/dist/tree/createTreeItem.d.ts +4 -4
  719. package/dist/tree/createTreeItem.d.ts.map +1 -1
  720. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  721. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  722. package/dist/tree/index.d.ts +4 -4
  723. package/dist/tree/index.js +2 -0
  724. package/dist/tree/index.jsx +2 -0
  725. package/dist/tree/types.d.ts +20 -6
  726. package/dist/tree/types.d.ts.map +1 -1
  727. package/dist/utils/animation.d.ts +60 -0
  728. package/dist/utils/animation.d.ts.map +1 -0
  729. package/dist/utils/createDescription.d.ts +2 -2
  730. package/dist/utils/createDescription.d.ts.map +1 -1
  731. package/dist/utils/dom.d.ts +48 -2
  732. package/dist/utils/dom.d.ts.map +1 -1
  733. package/dist/utils/env.d.ts.map +1 -1
  734. package/dist/utils/focus.d.ts +1 -1
  735. package/dist/utils/focus.d.ts.map +1 -1
  736. package/dist/utils/geometry.d.ts.map +1 -1
  737. package/dist/utils/index.d.ts +15 -12
  738. package/dist/utils/index.d.ts.map +1 -1
  739. package/dist/utils/index.js +5 -0
  740. package/dist/utils/index.jsx +5 -0
  741. package/dist/utils/keyboard.d.ts +17 -0
  742. package/dist/utils/keyboard.d.ts.map +1 -0
  743. package/dist/utils/mergeProps.d.ts.map +1 -1
  744. package/dist/utils/reactivity.d.ts +1 -1
  745. package/dist/utils/scrollIntoView.d.ts +30 -0
  746. package/dist/utils/scrollIntoView.d.ts.map +1 -0
  747. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  748. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  749. package/dist/visually-hidden/index.d.ts +1 -1
  750. package/dist/visually-hidden/index.js +2 -0
  751. package/dist/visually-hidden/index.jsx +2 -0
  752. package/package.json +334 -33
  753. package/src/actiongroup/createActionGroup.ts +101 -91
  754. package/src/actiongroup/index.ts +1 -1
  755. package/src/autocomplete/createAutocomplete.ts +177 -148
  756. package/src/autocomplete/index.ts +1 -1
  757. package/src/breadcrumbs/createBreadcrumbs.ts +33 -42
  758. package/src/breadcrumbs/index.ts +1 -1
  759. package/src/button/createButton.ts +102 -73
  760. package/src/button/createToggleButton.ts +10 -10
  761. package/src/button/createToggleButtonGroup.ts +25 -32
  762. package/src/button/index.ts +6 -9
  763. package/src/button/types.ts +18 -12
  764. package/src/calendar/createCalendar.ts +64 -29
  765. package/src/calendar/createCalendarCell.ts +115 -46
  766. package/src/calendar/createCalendarGrid.ts +97 -41
  767. package/src/calendar/createCalendarMonthPicker.ts +105 -0
  768. package/src/calendar/createCalendarYearPicker.ts +144 -0
  769. package/src/calendar/createRangeCalendar.ts +68 -31
  770. package/src/calendar/createRangeCalendarCell.ts +92 -31
  771. package/src/calendar/index.ts +21 -8
  772. package/src/calendar/intl/index.ts +210 -0
  773. package/src/calendar/utils.ts +231 -0
  774. package/src/checkbox/createCheckbox.ts +23 -21
  775. package/src/checkbox/createCheckboxGroup.ts +68 -44
  776. package/src/checkbox/createCheckboxGroupItem.ts +26 -41
  777. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  778. package/src/checkbox/index.ts +8 -10
  779. package/src/collections/index.ts +33 -29
  780. package/src/color/createColorArea.ts +232 -154
  781. package/src/color/createColorField.ts +107 -58
  782. package/src/color/createColorSlider.ts +231 -73
  783. package/src/color/createColorSwatch.ts +38 -13
  784. package/src/color/createColorWheel.ts +208 -83
  785. package/src/color/index.ts +6 -6
  786. package/src/color/types.ts +98 -16
  787. package/src/combobox/createComboBox.ts +157 -100
  788. package/src/combobox/index.ts +1 -1
  789. package/src/combobox/intl/index.ts +5 -5
  790. package/src/datepicker/createDateField.ts +192 -39
  791. package/src/datepicker/createDatePicker.ts +260 -67
  792. package/src/datepicker/createDatePickerGroup.ts +149 -0
  793. package/src/datepicker/createDateRangePicker.ts +105 -57
  794. package/src/datepicker/createDateSegment.ts +188 -96
  795. package/src/datepicker/createTimeField.ts +38 -34
  796. package/src/datepicker/createTimeSegment.ts +67 -85
  797. package/src/datepicker/index.ts +13 -14
  798. package/src/dialog/createDialog.ts +45 -38
  799. package/src/dialog/index.ts +2 -2
  800. package/src/dialog/types.ts +4 -4
  801. package/src/disclosure/createDisclosure.ts +138 -33
  802. package/src/disclosure/createDisclosureGroup.ts +8 -21
  803. package/src/disclosure/index.ts +2 -2
  804. package/src/dnd/createDrag.ts +19 -25
  805. package/src/dnd/createDraggableCollection.ts +4 -4
  806. package/src/dnd/createDraggableItem.ts +20 -19
  807. package/src/dnd/createDrop.ts +42 -51
  808. package/src/dnd/createDroppableCollection.ts +293 -173
  809. package/src/dnd/createDroppableItem.ts +34 -34
  810. package/src/dnd/index.ts +23 -12
  811. package/src/dnd/types.ts +4 -7
  812. package/src/dnd/utils.ts +58 -47
  813. package/src/focus/FocusScope.tsx +301 -176
  814. package/src/focus/createAutoFocus.ts +4 -20
  815. package/src/focus/createFocusRestore.ts +15 -28
  816. package/src/focus/createVirtualFocus.ts +20 -36
  817. package/src/focus/index.ts +4 -8
  818. package/src/form/createFormReset.ts +4 -4
  819. package/src/form/createFormValidation.ts +23 -39
  820. package/src/form/index.ts +2 -5
  821. package/src/grid/GridKeyboardDelegate.ts +30 -30
  822. package/src/grid/createGrid.ts +36 -36
  823. package/src/grid/createGridCell.ts +18 -18
  824. package/src/grid/createGridRow.ts +14 -14
  825. package/src/grid/index.ts +5 -5
  826. package/src/grid/types.ts +8 -8
  827. package/src/gridlist/createGridList.ts +172 -64
  828. package/src/gridlist/createGridListItem.ts +98 -121
  829. package/src/gridlist/createGridListSection.ts +54 -0
  830. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  831. package/src/gridlist/index.ts +7 -4
  832. package/src/gridlist/types.ts +58 -7
  833. package/src/i18n/createCollator.ts +5 -18
  834. package/src/i18n/createDateFormatter.ts +5 -13
  835. package/src/i18n/createFilter.ts +11 -24
  836. package/src/i18n/createNumberFormatter.ts +4 -6
  837. package/src/i18n/createStringFormatter.ts +19 -15
  838. package/src/i18n/index.ts +8 -11
  839. package/src/i18n/locale.tsx +15 -40
  840. package/src/i18n/utils.ts +35 -39
  841. package/src/index.ts +111 -172
  842. package/src/interactions/FocusableProvider.tsx +3 -7
  843. package/src/interactions/PressEvent.ts +18 -4
  844. package/src/interactions/createFocus.ts +12 -8
  845. package/src/interactions/createFocusRing.ts +21 -19
  846. package/src/interactions/createFocusWithin.ts +20 -13
  847. package/src/interactions/createFocusable.ts +15 -16
  848. package/src/interactions/createHover.ts +70 -55
  849. package/src/interactions/createInteractionModality.ts +96 -94
  850. package/src/interactions/createKeyboard.ts +12 -2
  851. package/src/interactions/createLongPress.ts +23 -23
  852. package/src/interactions/createMove.ts +72 -62
  853. package/src/interactions/createPress.ts +192 -92
  854. package/src/interactions/index.ts +24 -16
  855. package/src/label/createField.ts +18 -19
  856. package/src/label/createLabel.ts +18 -30
  857. package/src/label/createLabels.ts +8 -12
  858. package/src/label/index.ts +5 -5
  859. package/src/landmark/createLandmark.ts +30 -51
  860. package/src/landmark/index.ts +1 -1
  861. package/src/link/createLink.ts +83 -56
  862. package/src/link/index.ts +1 -1
  863. package/src/listbox/createListBox.ts +198 -66
  864. package/src/listbox/createOption.ts +112 -71
  865. package/src/listbox/index.ts +2 -6
  866. package/src/live-announcer/announce.ts +44 -71
  867. package/src/live-announcer/index.ts +1 -1
  868. package/src/menu/createMenu.ts +171 -65
  869. package/src/menu/createMenuItem.ts +315 -51
  870. package/src/menu/createMenuTrigger.ts +15 -15
  871. package/src/menu/index.ts +3 -12
  872. package/src/meter/createMeter.ts +7 -15
  873. package/src/meter/index.ts +1 -1
  874. package/src/numberfield/createNumberField.ts +205 -80
  875. package/src/numberfield/index.ts +1 -1
  876. package/src/overlays/ariaHideOutside.ts +14 -10
  877. package/src/overlays/createInteractOutside.ts +21 -18
  878. package/src/overlays/createModal.tsx +17 -17
  879. package/src/overlays/createOverlay.ts +38 -8
  880. package/src/overlays/createOverlayTrigger.ts +16 -16
  881. package/src/overlays/createPreventScroll.ts +46 -24
  882. package/src/overlays/index.ts +6 -17
  883. package/src/popover/calculatePosition.ts +134 -124
  884. package/src/popover/createOverlayPosition.ts +55 -40
  885. package/src/popover/createPopover.ts +42 -17
  886. package/src/popover/index.ts +3 -3
  887. package/src/progress/createProgressBar.ts +31 -32
  888. package/src/progress/index.ts +1 -1
  889. package/src/radio/createRadio.ts +114 -75
  890. package/src/radio/createRadioGroup.ts +83 -77
  891. package/src/radio/createRadioGroupState.ts +7 -31
  892. package/src/radio/index.ts +3 -8
  893. package/src/searchfield/createSearchField.ts +57 -29
  894. package/src/searchfield/index.ts +2 -2
  895. package/src/select/createHiddenSelect.tsx +57 -44
  896. package/src/select/createSelect.ts +146 -73
  897. package/src/select/index.ts +2 -7
  898. package/src/selection/DOMLayoutDelegate.ts +102 -0
  899. package/src/selection/ListKeyboardDelegate.ts +398 -0
  900. package/src/selection/constants.ts +16 -0
  901. package/src/selection/createCollectionRowInteraction.ts +209 -0
  902. package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
  903. package/src/selection/createSelectableCollection.ts +645 -0
  904. package/src/selection/createSelectableItem.ts +498 -0
  905. package/src/selection/createSelectableList.ts +93 -0
  906. package/src/selection/createTypeSelect.ts +120 -59
  907. package/src/selection/index.ts +32 -1
  908. package/src/selection/selectItem.ts +80 -0
  909. package/src/selection/utils.ts +82 -0
  910. package/src/separator/createSeparator.ts +20 -25
  911. package/src/separator/index.ts +1 -1
  912. package/src/slider/createSlider.ts +128 -112
  913. package/src/slider/index.ts +2 -2
  914. package/src/ssr/index.tsx +38 -46
  915. package/src/steplist/createStepList.ts +106 -0
  916. package/src/steplist/index.ts +8 -0
  917. package/src/switch/createSwitch.ts +19 -14
  918. package/src/switch/index.ts +1 -1
  919. package/src/table/createTable.ts +192 -95
  920. package/src/table/createTableCell.ts +17 -16
  921. package/src/table/createTableColumnHeader.ts +67 -20
  922. package/src/table/createTableColumnResize.ts +256 -0
  923. package/src/table/createTableHeaderRow.ts +7 -7
  924. package/src/table/createTableRow.ts +206 -91
  925. package/src/table/createTableRowGroup.ts +5 -7
  926. package/src/table/createTableSelectAllCheckbox.ts +14 -14
  927. package/src/table/createTableSelectionCheckbox.ts +8 -8
  928. package/src/table/index.ts +14 -9
  929. package/src/table/types.ts +43 -7
  930. package/src/tabs/createTabs.ts +123 -111
  931. package/src/tabs/index.ts +1 -1
  932. package/src/tag/createTag.ts +57 -50
  933. package/src/tag/createTagGroup.ts +47 -41
  934. package/src/tag/index.ts +2 -6
  935. package/src/textfield/createTextField.ts +67 -35
  936. package/src/textfield/index.ts +1 -5
  937. package/src/toast/createToast.ts +29 -26
  938. package/src/toast/createToastRegion.ts +169 -26
  939. package/src/toast/index.ts +2 -6
  940. package/src/toggle/createToggle.ts +115 -53
  941. package/src/toggle/createToggleState.ts +2 -10
  942. package/src/toggle/index.ts +4 -5
  943. package/src/toolbar/createToolbar.ts +214 -230
  944. package/src/toolbar/index.ts +1 -1
  945. package/src/tooltip/createTooltip.ts +11 -24
  946. package/src/tooltip/createTooltipTrigger.ts +61 -49
  947. package/src/tooltip/index.ts +2 -2
  948. package/src/tree/createTree.ts +128 -72
  949. package/src/tree/createTreeItem.ts +120 -135
  950. package/src/tree/createTreeSelectionCheckbox.ts +11 -8
  951. package/src/tree/index.ts +4 -4
  952. package/src/tree/types.ts +20 -6
  953. package/src/utils/animation.ts +151 -0
  954. package/src/utils/createDescription.ts +6 -23
  955. package/src/utils/dom.ts +265 -68
  956. package/src/utils/env.ts +9 -11
  957. package/src/utils/events.ts +7 -7
  958. package/src/utils/filterDOMProps.ts +49 -49
  959. package/src/utils/focus.ts +60 -68
  960. package/src/utils/geometry.ts +1 -4
  961. package/src/utils/globalListeners.ts +9 -9
  962. package/src/utils/index.ts +20 -22
  963. package/src/utils/keyboard.ts +25 -0
  964. package/src/utils/mergeProps.ts +49 -15
  965. package/src/utils/platform.ts +2 -2
  966. package/src/utils/reactivity.ts +3 -3
  967. package/src/utils/scrollIntoView.ts +181 -0
  968. package/src/utils/textSelection.ts +16 -16
  969. package/src/visually-hidden/createVisuallyHidden.ts +16 -28
  970. package/src/visually-hidden/index.ts +1 -1
  971. package/dist/i18n/NumberFormatter.d.ts +0 -43
  972. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  973. package/dist/index.js.map +0 -1
  974. package/dist/index.ssr.js +0 -17082
  975. package/dist/index.ssr.js.map +0 -1
  976. package/src/i18n/NumberFormatter.ts +0 -266
@@ -0,0 +1,135 @@
1
+ import { l as setInteractionModality } from "./createInteractionModality.js";
2
+ import { createEffect, onCleanup } from "solid-js";
3
+ //#region src/form/createFormValidation.ts
4
+ /**
5
+ * createFormValidation hook for solidaria
6
+ *
7
+ * Connects form validation state to native HTML form validation.
8
+ * Handles the invalid event, form reset, and focus management.
9
+ *
10
+ * Port of react-aria's useFormValidation.
11
+ */
12
+ function getValidity(input) {
13
+ const validity = input.validity;
14
+ return {
15
+ badInput: validity.badInput,
16
+ customError: validity.customError,
17
+ patternMismatch: validity.patternMismatch,
18
+ rangeOverflow: validity.rangeOverflow,
19
+ rangeUnderflow: validity.rangeUnderflow,
20
+ stepMismatch: validity.stepMismatch,
21
+ tooLong: validity.tooLong,
22
+ tooShort: validity.tooShort,
23
+ typeMismatch: validity.typeMismatch,
24
+ valueMissing: validity.valueMissing,
25
+ valid: validity.valid
26
+ };
27
+ }
28
+ function getNativeValidity(input) {
29
+ return {
30
+ isInvalid: !input.validity.valid,
31
+ validationDetails: getValidity(input),
32
+ validationErrors: input.validationMessage ? [input.validationMessage] : []
33
+ };
34
+ }
35
+ function getFirstInvalidInput(form) {
36
+ for (let i = 0; i < form.elements.length; i++) {
37
+ const element = form.elements[i];
38
+ if (!element.validity.valid) return element;
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Connects form validation state to a native HTML form input.
44
+ *
45
+ * This hook:
46
+ * - Sets custom validity on the native input based on validation state
47
+ * - Handles the 'invalid' event to commit validation and focus the first invalid input
48
+ * - Handles form reset to clear validation state
49
+ * - Handles input change to commit validation
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * function MyTextField(props) {
54
+ * let inputRef: HTMLInputElement | undefined;
55
+ *
56
+ * const validationState = createFormValidationState({
57
+ * value: props.value,
58
+ * validate: props.validate,
59
+ * validationBehavior: 'native',
60
+ * });
61
+ *
62
+ * createFormValidation(
63
+ * { validationBehavior: 'native' },
64
+ * validationState,
65
+ * () => inputRef
66
+ * );
67
+ *
68
+ * return (
69
+ * <input
70
+ * ref={inputRef}
71
+ * value={props.value}
72
+ * aria-invalid={validationState.displayValidation().isInvalid || undefined}
73
+ * />
74
+ * );
75
+ * }
76
+ * ```
77
+ */
78
+ function createFormValidation(props, state, ref) {
79
+ const validationBehavior = () => props.validationBehavior ?? "aria";
80
+ const focus = () => props.focus;
81
+ let isIgnoredReset = false;
82
+ createEffect(() => {
83
+ const input = ref();
84
+ if (validationBehavior() === "native" && input && "setCustomValidity" in input && !input.disabled) {
85
+ const realtimeValidation = state.realtimeValidation();
86
+ const errorMessage = realtimeValidation.isInvalid ? realtimeValidation.validationErrors.join(" ") || "Invalid value." : "";
87
+ input.setCustomValidity(errorMessage);
88
+ if (!input.hasAttribute("title")) input.title = "";
89
+ if (!realtimeValidation.isInvalid) state.updateValidation(getNativeValidity(input));
90
+ }
91
+ });
92
+ createEffect(() => {
93
+ const input = ref();
94
+ if (!input) return;
95
+ const form = input.form;
96
+ const onInvalid = (e) => {
97
+ if (!state.displayValidation().isInvalid) state.commitValidation();
98
+ if (!e.defaultPrevented && form && getFirstInvalidInput(form) === input) {
99
+ const focusFn = focus();
100
+ if (focusFn) focusFn();
101
+ else input.focus();
102
+ setInteractionModality("keyboard");
103
+ }
104
+ e.preventDefault();
105
+ };
106
+ const onChange = () => {
107
+ state.commitValidation();
108
+ };
109
+ const onReset = () => {
110
+ if (!isIgnoredReset) state.resetValidation();
111
+ };
112
+ let originalReset;
113
+ if (form) {
114
+ originalReset = form.reset.bind(form);
115
+ form.reset = () => {
116
+ isIgnoredReset = !window.event || window.event.type === "message" && window.event.target instanceof MessagePort;
117
+ originalReset?.();
118
+ isIgnoredReset = false;
119
+ };
120
+ }
121
+ input.addEventListener("invalid", onInvalid);
122
+ input.addEventListener("change", onChange);
123
+ form?.addEventListener("reset", onReset);
124
+ onCleanup(() => {
125
+ input.removeEventListener("invalid", onInvalid);
126
+ input.removeEventListener("change", onChange);
127
+ form?.removeEventListener("reset", onReset);
128
+ if (form && originalReset) form.reset = originalReset;
129
+ });
130
+ });
131
+ }
132
+ //#endregion
133
+ export { createFormValidation as t };
134
+
135
+ //# sourceMappingURL=createFormValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFormValidation.js","names":[],"sources":["../../src/form/createFormValidation.ts"],"sourcesContent":["/**\n * createFormValidation hook for solidaria\n *\n * Connects form validation state to native HTML form validation.\n * Handles the invalid event, form reset, and focus management.\n *\n * Port of react-aria's useFormValidation.\n */\n\nimport { type Accessor, createEffect, onCleanup } from \"solid-js\";\nimport { type FormValidationState, type ValidationResult } from \"@proyecto-viviana/solid-stately\";\nimport { setInteractionModality } from \"../interactions/createInteractionModality\";\n\nexport type ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport type ValidationBehavior = \"aria\" | \"native\";\n\nexport interface FormValidationProps {\n /** Validation behavior: 'aria' for realtime, 'native' for on submit. */\n validationBehavior?: ValidationBehavior;\n /** Custom focus function to call on validation error. */\n focus?: () => void;\n}\n\nfunction getValidity(input: ValidatableElement): ValidityState {\n // Create a snapshot of the validity state (the native object is live)\n const validity = input.validity;\n return {\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n valid: validity.valid,\n };\n}\n\nfunction getNativeValidity(input: ValidatableElement): ValidationResult {\n return {\n isInvalid: !input.validity.valid,\n validationDetails: getValidity(input),\n validationErrors: input.validationMessage ? [input.validationMessage] : [],\n };\n}\n\nfunction getFirstInvalidInput(form: HTMLFormElement): ValidatableElement | null {\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i] as ValidatableElement;\n if (!element.validity.valid) {\n return element;\n }\n }\n return null;\n}\n\n/**\n * Connects form validation state to a native HTML form input.\n *\n * This hook:\n * - Sets custom validity on the native input based on validation state\n * - Handles the 'invalid' event to commit validation and focus the first invalid input\n * - Handles form reset to clear validation state\n * - Handles input change to commit validation\n *\n * @example\n * ```tsx\n * function MyTextField(props) {\n * let inputRef: HTMLInputElement | undefined;\n *\n * const validationState = createFormValidationState({\n * value: props.value,\n * validate: props.validate,\n * validationBehavior: 'native',\n * });\n *\n * createFormValidation(\n * { validationBehavior: 'native' },\n * validationState,\n * () => inputRef\n * );\n *\n * return (\n * <input\n * ref={inputRef}\n * value={props.value}\n * aria-invalid={validationState.displayValidation().isInvalid || undefined}\n * />\n * );\n * }\n * ```\n */\nexport function createFormValidation(\n props: FormValidationProps,\n state: FormValidationState,\n ref: Accessor<ValidatableElement | undefined>,\n): void {\n const validationBehavior = () => props.validationBehavior ?? \"aria\";\n const focus = () => props.focus;\n\n // Track whether we should ignore form reset (for React-like programmatic resets)\n let isIgnoredReset = false;\n\n // Set custom validity on the native input\n createEffect(() => {\n const input = ref();\n // `'setCustomValidity' in input` guards refs that aren't true form elements\n // (e.g. a custom element), matching upstream useFormValidation.\n if (\n validationBehavior() === \"native\" &&\n input &&\n \"setCustomValidity\" in input &&\n !input.disabled\n ) {\n const realtimeValidation = state.realtimeValidation();\n const errorMessage = realtimeValidation.isInvalid\n ? realtimeValidation.validationErrors.join(\" \") || \"Invalid value.\"\n : \"\";\n input.setCustomValidity(errorMessage);\n\n // Prevent default tooltip for validation message\n if (!input.hasAttribute(\"title\")) {\n input.title = \"\";\n }\n\n // Update validation with native validity if not already invalid\n if (!realtimeValidation.isInvalid) {\n state.updateValidation(getNativeValidity(input));\n }\n }\n });\n\n // Set up event listeners\n createEffect(() => {\n const input = ref();\n if (!input) {\n return;\n }\n\n const form = input.form;\n\n // Handle invalid event\n const onInvalid = (e: Event) => {\n // Only commit validation if we are not already displaying one\n if (!state.displayValidation().isInvalid) {\n state.commitValidation();\n }\n\n // Auto focus the first invalid input in a form\n if (!e.defaultPrevented && form && getFirstInvalidInput(form) === input) {\n const focusFn = focus();\n if (focusFn) {\n focusFn();\n } else {\n input.focus();\n }\n // Always show focus ring\n setInteractionModality(\"keyboard\");\n }\n\n // Prevent default browser error UI\n e.preventDefault();\n };\n\n // Handle change event\n const onChange = () => {\n state.commitValidation();\n };\n\n // Handle form reset\n const onReset = () => {\n if (!isIgnoredReset) {\n state.resetValidation();\n }\n };\n\n // Patch form.reset to detect programmatic resets\n let originalReset: (() => void) | undefined;\n if (form) {\n originalReset = form.reset.bind(form);\n form.reset = () => {\n // Ignore programmatic resets outside user events\n isIgnoredReset =\n !window.event ||\n (window.event.type === \"message\" && window.event.target instanceof MessagePort);\n originalReset?.();\n isIgnoredReset = false;\n };\n }\n\n input.addEventListener(\"invalid\", onInvalid);\n input.addEventListener(\"change\", onChange);\n form?.addEventListener(\"reset\", onReset);\n\n onCleanup(() => {\n input.removeEventListener(\"invalid\", onInvalid);\n input.removeEventListener(\"change\", onChange);\n form?.removeEventListener(\"reset\", onReset);\n if (form && originalReset) {\n form.reset = originalReset;\n }\n });\n });\n}\n"],"mappings":";;;;;;;;;;;AAwBA,SAAS,YAAY,OAA0C;CAE7D,MAAM,WAAW,MAAM;CACvB,OAAO;EACL,UAAU,SAAS;EACnB,aAAa,SAAS;EACtB,iBAAiB,SAAS;EAC1B,eAAe,SAAS;EACxB,gBAAgB,SAAS;EACzB,cAAc,SAAS;EACvB,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,cAAc,SAAS;EACvB,cAAc,SAAS;EACvB,OAAO,SAAS;CAClB;AACF;AAEA,SAAS,kBAAkB,OAA6C;CACtE,OAAO;EACL,WAAW,CAAC,MAAM,SAAS;EAC3B,mBAAmB,YAAY,KAAK;EACpC,kBAAkB,MAAM,oBAAoB,CAAC,MAAM,iBAAiB,IAAI,CAAC;CAC3E;AACF;AAEA,SAAS,qBAAqB,MAAkD;CAC9E,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;EAC7C,MAAM,UAAU,KAAK,SAAS;EAC9B,IAAI,CAAC,QAAQ,SAAS,OACpB,OAAO;CAEX;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,qBACd,OACA,OACA,KACM;CACN,MAAM,2BAA2B,MAAM,sBAAsB;CAC7D,MAAM,cAAc,MAAM;CAG1B,IAAI,iBAAiB;CAGrB,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAGlB,IACE,mBAAmB,MAAM,YACzB,SACA,uBAAuB,SACvB,CAAC,MAAM,UACP;GACA,MAAM,qBAAqB,MAAM,mBAAmB;GACpD,MAAM,eAAe,mBAAmB,YACpC,mBAAmB,iBAAiB,KAAK,GAAG,KAAK,mBACjD;GACJ,MAAM,kBAAkB,YAAY;GAGpC,IAAI,CAAC,MAAM,aAAa,OAAO,GAC7B,MAAM,QAAQ;GAIhB,IAAI,CAAC,mBAAmB,WACtB,MAAM,iBAAiB,kBAAkB,KAAK,CAAC;EAEnD;CACF,CAAC;CAGD,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAClB,IAAI,CAAC,OACH;EAGF,MAAM,OAAO,MAAM;EAGnB,MAAM,aAAa,MAAa;GAE9B,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,WAC7B,MAAM,iBAAiB;GAIzB,IAAI,CAAC,EAAE,oBAAoB,QAAQ,qBAAqB,IAAI,MAAM,OAAO;IACvE,MAAM,UAAU,MAAM;IACtB,IAAI,SACF,QAAQ;SAER,MAAM,MAAM;IAGd,uBAAuB,UAAU;GACnC;GAGA,EAAE,eAAe;EACnB;EAGA,MAAM,iBAAiB;GACrB,MAAM,iBAAiB;EACzB;EAGA,MAAM,gBAAgB;GACpB,IAAI,CAAC,gBACH,MAAM,gBAAgB;EAE1B;EAGA,IAAI;EACJ,IAAI,MAAM;GACR,gBAAgB,KAAK,MAAM,KAAK,IAAI;GACpC,KAAK,cAAc;IAEjB,iBACE,CAAC,OAAO,SACP,OAAO,MAAM,SAAS,aAAa,OAAO,MAAM,kBAAkB;IACrE,gBAAgB;IAChB,iBAAiB;GACnB;EACF;EAEA,MAAM,iBAAiB,WAAW,SAAS;EAC3C,MAAM,iBAAiB,UAAU,QAAQ;EACzC,MAAM,iBAAiB,SAAS,OAAO;EAEvC,gBAAgB;GACd,MAAM,oBAAoB,WAAW,SAAS;GAC9C,MAAM,oBAAoB,UAAU,QAAQ;GAC5C,MAAM,oBAAoB,SAAS,OAAO;GAC1C,IAAI,QAAQ,eACV,KAAK,QAAQ;EAEjB,CAAC;CACH,CAAC;AACH"}
@@ -0,0 +1,135 @@
1
+ import { l as setInteractionModality } from "./createInteractionModality.jsx";
2
+ import { createEffect, onCleanup } from "solid-js";
3
+ //#region src/form/createFormValidation.ts
4
+ /**
5
+ * createFormValidation hook for solidaria
6
+ *
7
+ * Connects form validation state to native HTML form validation.
8
+ * Handles the invalid event, form reset, and focus management.
9
+ *
10
+ * Port of react-aria's useFormValidation.
11
+ */
12
+ function getValidity(input) {
13
+ const validity = input.validity;
14
+ return {
15
+ badInput: validity.badInput,
16
+ customError: validity.customError,
17
+ patternMismatch: validity.patternMismatch,
18
+ rangeOverflow: validity.rangeOverflow,
19
+ rangeUnderflow: validity.rangeUnderflow,
20
+ stepMismatch: validity.stepMismatch,
21
+ tooLong: validity.tooLong,
22
+ tooShort: validity.tooShort,
23
+ typeMismatch: validity.typeMismatch,
24
+ valueMissing: validity.valueMissing,
25
+ valid: validity.valid
26
+ };
27
+ }
28
+ function getNativeValidity(input) {
29
+ return {
30
+ isInvalid: !input.validity.valid,
31
+ validationDetails: getValidity(input),
32
+ validationErrors: input.validationMessage ? [input.validationMessage] : []
33
+ };
34
+ }
35
+ function getFirstInvalidInput(form) {
36
+ for (let i = 0; i < form.elements.length; i++) {
37
+ const element = form.elements[i];
38
+ if (!element.validity.valid) return element;
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Connects form validation state to a native HTML form input.
44
+ *
45
+ * This hook:
46
+ * - Sets custom validity on the native input based on validation state
47
+ * - Handles the 'invalid' event to commit validation and focus the first invalid input
48
+ * - Handles form reset to clear validation state
49
+ * - Handles input change to commit validation
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * function MyTextField(props) {
54
+ * let inputRef: HTMLInputElement | undefined;
55
+ *
56
+ * const validationState = createFormValidationState({
57
+ * value: props.value,
58
+ * validate: props.validate,
59
+ * validationBehavior: 'native',
60
+ * });
61
+ *
62
+ * createFormValidation(
63
+ * { validationBehavior: 'native' },
64
+ * validationState,
65
+ * () => inputRef
66
+ * );
67
+ *
68
+ * return (
69
+ * <input
70
+ * ref={inputRef}
71
+ * value={props.value}
72
+ * aria-invalid={validationState.displayValidation().isInvalid || undefined}
73
+ * />
74
+ * );
75
+ * }
76
+ * ```
77
+ */
78
+ function createFormValidation(props, state, ref) {
79
+ const validationBehavior = () => props.validationBehavior ?? "aria";
80
+ const focus = () => props.focus;
81
+ let isIgnoredReset = false;
82
+ createEffect(() => {
83
+ const input = ref();
84
+ if (validationBehavior() === "native" && input && "setCustomValidity" in input && !input.disabled) {
85
+ const realtimeValidation = state.realtimeValidation();
86
+ const errorMessage = realtimeValidation.isInvalid ? realtimeValidation.validationErrors.join(" ") || "Invalid value." : "";
87
+ input.setCustomValidity(errorMessage);
88
+ if (!input.hasAttribute("title")) input.title = "";
89
+ if (!realtimeValidation.isInvalid) state.updateValidation(getNativeValidity(input));
90
+ }
91
+ });
92
+ createEffect(() => {
93
+ const input = ref();
94
+ if (!input) return;
95
+ const form = input.form;
96
+ const onInvalid = (e) => {
97
+ if (!state.displayValidation().isInvalid) state.commitValidation();
98
+ if (!e.defaultPrevented && form && getFirstInvalidInput(form) === input) {
99
+ const focusFn = focus();
100
+ if (focusFn) focusFn();
101
+ else input.focus();
102
+ setInteractionModality("keyboard");
103
+ }
104
+ e.preventDefault();
105
+ };
106
+ const onChange = () => {
107
+ state.commitValidation();
108
+ };
109
+ const onReset = () => {
110
+ if (!isIgnoredReset) state.resetValidation();
111
+ };
112
+ let originalReset;
113
+ if (form) {
114
+ originalReset = form.reset.bind(form);
115
+ form.reset = () => {
116
+ isIgnoredReset = !window.event || window.event.type === "message" && window.event.target instanceof MessagePort;
117
+ originalReset?.();
118
+ isIgnoredReset = false;
119
+ };
120
+ }
121
+ input.addEventListener("invalid", onInvalid);
122
+ input.addEventListener("change", onChange);
123
+ form?.addEventListener("reset", onReset);
124
+ onCleanup(() => {
125
+ input.removeEventListener("invalid", onInvalid);
126
+ input.removeEventListener("change", onChange);
127
+ form?.removeEventListener("reset", onReset);
128
+ if (form && originalReset) form.reset = originalReset;
129
+ });
130
+ });
131
+ }
132
+ //#endregion
133
+ export { createFormValidation as t };
134
+
135
+ //# sourceMappingURL=createFormValidation.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFormValidation.jsx","names":[],"sources":["../../src/form/createFormValidation.ts"],"sourcesContent":["/**\n * createFormValidation hook for solidaria\n *\n * Connects form validation state to native HTML form validation.\n * Handles the invalid event, form reset, and focus management.\n *\n * Port of react-aria's useFormValidation.\n */\n\nimport { type Accessor, createEffect, onCleanup } from \"solid-js\";\nimport { type FormValidationState, type ValidationResult } from \"@proyecto-viviana/solid-stately\";\nimport { setInteractionModality } from \"../interactions/createInteractionModality\";\n\nexport type ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport type ValidationBehavior = \"aria\" | \"native\";\n\nexport interface FormValidationProps {\n /** Validation behavior: 'aria' for realtime, 'native' for on submit. */\n validationBehavior?: ValidationBehavior;\n /** Custom focus function to call on validation error. */\n focus?: () => void;\n}\n\nfunction getValidity(input: ValidatableElement): ValidityState {\n // Create a snapshot of the validity state (the native object is live)\n const validity = input.validity;\n return {\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n valid: validity.valid,\n };\n}\n\nfunction getNativeValidity(input: ValidatableElement): ValidationResult {\n return {\n isInvalid: !input.validity.valid,\n validationDetails: getValidity(input),\n validationErrors: input.validationMessage ? [input.validationMessage] : [],\n };\n}\n\nfunction getFirstInvalidInput(form: HTMLFormElement): ValidatableElement | null {\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i] as ValidatableElement;\n if (!element.validity.valid) {\n return element;\n }\n }\n return null;\n}\n\n/**\n * Connects form validation state to a native HTML form input.\n *\n * This hook:\n * - Sets custom validity on the native input based on validation state\n * - Handles the 'invalid' event to commit validation and focus the first invalid input\n * - Handles form reset to clear validation state\n * - Handles input change to commit validation\n *\n * @example\n * ```tsx\n * function MyTextField(props) {\n * let inputRef: HTMLInputElement | undefined;\n *\n * const validationState = createFormValidationState({\n * value: props.value,\n * validate: props.validate,\n * validationBehavior: 'native',\n * });\n *\n * createFormValidation(\n * { validationBehavior: 'native' },\n * validationState,\n * () => inputRef\n * );\n *\n * return (\n * <input\n * ref={inputRef}\n * value={props.value}\n * aria-invalid={validationState.displayValidation().isInvalid || undefined}\n * />\n * );\n * }\n * ```\n */\nexport function createFormValidation(\n props: FormValidationProps,\n state: FormValidationState,\n ref: Accessor<ValidatableElement | undefined>,\n): void {\n const validationBehavior = () => props.validationBehavior ?? \"aria\";\n const focus = () => props.focus;\n\n // Track whether we should ignore form reset (for React-like programmatic resets)\n let isIgnoredReset = false;\n\n // Set custom validity on the native input\n createEffect(() => {\n const input = ref();\n // `'setCustomValidity' in input` guards refs that aren't true form elements\n // (e.g. a custom element), matching upstream useFormValidation.\n if (\n validationBehavior() === \"native\" &&\n input &&\n \"setCustomValidity\" in input &&\n !input.disabled\n ) {\n const realtimeValidation = state.realtimeValidation();\n const errorMessage = realtimeValidation.isInvalid\n ? realtimeValidation.validationErrors.join(\" \") || \"Invalid value.\"\n : \"\";\n input.setCustomValidity(errorMessage);\n\n // Prevent default tooltip for validation message\n if (!input.hasAttribute(\"title\")) {\n input.title = \"\";\n }\n\n // Update validation with native validity if not already invalid\n if (!realtimeValidation.isInvalid) {\n state.updateValidation(getNativeValidity(input));\n }\n }\n });\n\n // Set up event listeners\n createEffect(() => {\n const input = ref();\n if (!input) {\n return;\n }\n\n const form = input.form;\n\n // Handle invalid event\n const onInvalid = (e: Event) => {\n // Only commit validation if we are not already displaying one\n if (!state.displayValidation().isInvalid) {\n state.commitValidation();\n }\n\n // Auto focus the first invalid input in a form\n if (!e.defaultPrevented && form && getFirstInvalidInput(form) === input) {\n const focusFn = focus();\n if (focusFn) {\n focusFn();\n } else {\n input.focus();\n }\n // Always show focus ring\n setInteractionModality(\"keyboard\");\n }\n\n // Prevent default browser error UI\n e.preventDefault();\n };\n\n // Handle change event\n const onChange = () => {\n state.commitValidation();\n };\n\n // Handle form reset\n const onReset = () => {\n if (!isIgnoredReset) {\n state.resetValidation();\n }\n };\n\n // Patch form.reset to detect programmatic resets\n let originalReset: (() => void) | undefined;\n if (form) {\n originalReset = form.reset.bind(form);\n form.reset = () => {\n // Ignore programmatic resets outside user events\n isIgnoredReset =\n !window.event ||\n (window.event.type === \"message\" && window.event.target instanceof MessagePort);\n originalReset?.();\n isIgnoredReset = false;\n };\n }\n\n input.addEventListener(\"invalid\", onInvalid);\n input.addEventListener(\"change\", onChange);\n form?.addEventListener(\"reset\", onReset);\n\n onCleanup(() => {\n input.removeEventListener(\"invalid\", onInvalid);\n input.removeEventListener(\"change\", onChange);\n form?.removeEventListener(\"reset\", onReset);\n if (form && originalReset) {\n form.reset = originalReset;\n }\n });\n });\n}\n"],"mappings":";;;;;;;;;;;AAwBA,SAAS,YAAY,OAA0C;CAE7D,MAAM,WAAW,MAAM;CACvB,OAAO;EACL,UAAU,SAAS;EACnB,aAAa,SAAS;EACtB,iBAAiB,SAAS;EAC1B,eAAe,SAAS;EACxB,gBAAgB,SAAS;EACzB,cAAc,SAAS;EACvB,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,cAAc,SAAS;EACvB,cAAc,SAAS;EACvB,OAAO,SAAS;CAClB;AACF;AAEA,SAAS,kBAAkB,OAA6C;CACtE,OAAO;EACL,WAAW,CAAC,MAAM,SAAS;EAC3B,mBAAmB,YAAY,KAAK;EACpC,kBAAkB,MAAM,oBAAoB,CAAC,MAAM,iBAAiB,IAAI,CAAC;CAC3E;AACF;AAEA,SAAS,qBAAqB,MAAkD;CAC9E,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;EAC7C,MAAM,UAAU,KAAK,SAAS;EAC9B,IAAI,CAAC,QAAQ,SAAS,OACpB,OAAO;CAEX;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,qBACd,OACA,OACA,KACM;CACN,MAAM,2BAA2B,MAAM,sBAAsB;CAC7D,MAAM,cAAc,MAAM;CAG1B,IAAI,iBAAiB;CAGrB,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAGlB,IACE,mBAAmB,MAAM,YACzB,SACA,uBAAuB,SACvB,CAAC,MAAM,UACP;GACA,MAAM,qBAAqB,MAAM,mBAAmB;GACpD,MAAM,eAAe,mBAAmB,YACpC,mBAAmB,iBAAiB,KAAK,GAAG,KAAK,mBACjD;GACJ,MAAM,kBAAkB,YAAY;GAGpC,IAAI,CAAC,MAAM,aAAa,OAAO,GAC7B,MAAM,QAAQ;GAIhB,IAAI,CAAC,mBAAmB,WACtB,MAAM,iBAAiB,kBAAkB,KAAK,CAAC;EAEnD;CACF,CAAC;CAGD,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAClB,IAAI,CAAC,OACH;EAGF,MAAM,OAAO,MAAM;EAGnB,MAAM,aAAa,MAAa;GAE9B,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,WAC7B,MAAM,iBAAiB;GAIzB,IAAI,CAAC,EAAE,oBAAoB,QAAQ,qBAAqB,IAAI,MAAM,OAAO;IACvE,MAAM,UAAU,MAAM;IACtB,IAAI,SACF,QAAQ;SAER,MAAM,MAAM;IAGd,uBAAuB,UAAU;GACnC;GAGA,EAAE,eAAe;EACnB;EAGA,MAAM,iBAAiB;GACrB,MAAM,iBAAiB;EACzB;EAGA,MAAM,gBAAgB;GACpB,IAAI,CAAC,gBACH,MAAM,gBAAgB;EAE1B;EAGA,IAAI;EACJ,IAAI,MAAM;GACR,gBAAgB,KAAK,MAAM,KAAK,IAAI;GACpC,KAAK,cAAc;IAEjB,iBACE,CAAC,OAAO,SACP,OAAO,MAAM,SAAS,aAAa,OAAO,MAAM,kBAAkB;IACrE,gBAAgB;IAChB,iBAAiB;GACnB;EACF;EAEA,MAAM,iBAAiB,WAAW,SAAS;EAC3C,MAAM,iBAAiB,UAAU,QAAQ;EACzC,MAAM,iBAAiB,SAAS,OAAO;EAEvC,gBAAgB;GACd,MAAM,oBAAoB,WAAW,SAAS;GAC9C,MAAM,oBAAoB,UAAU,QAAQ;GAC5C,MAAM,oBAAoB,SAAS,OAAO;GAC1C,IAAI,QAAQ,eACV,KAAK,QAAQ;EAEjB,CAAC;CACH,CAAC;AACH"}
@@ -0,0 +1,130 @@
1
+ import { i as access, r as isTestEnv } from "./env.js";
2
+ import { s as createGlobalListeners } from "./utils.js";
3
+ import { y as nodeContains } from "./focus.js";
4
+ import { createEffect, createMemo, createSignal, onCleanup } from "solid-js";
5
+ //#region src/interactions/createHover.ts
6
+ /**
7
+ * createHover hook for Solidaria
8
+ *
9
+ * Handles pointer hover interactions for an element. Normalizes behavior
10
+ * across browsers and platforms, and ignores emulated mouse events on touch devices.
11
+ *
12
+ * Port of @react-aria/interactions useHover.
13
+ */
14
+ let globalIgnoreEmulatedMouseEvents = false;
15
+ let hoverCount = 0;
16
+ function setGlobalIgnoreEmulatedMouseEvents() {
17
+ globalIgnoreEmulatedMouseEvents = true;
18
+ setTimeout(() => {
19
+ globalIgnoreEmulatedMouseEvents = false;
20
+ }, 50);
21
+ }
22
+ function handleGlobalPointerEvent(e) {
23
+ if (e.pointerType === "touch") setGlobalIgnoreEmulatedMouseEvents();
24
+ }
25
+ function setupGlobalTouchEvents() {
26
+ if (typeof document === "undefined") return () => {};
27
+ if (hoverCount === 0) {
28
+ if (typeof PointerEvent !== "undefined") document.addEventListener("pointerup", handleGlobalPointerEvent);
29
+ else if (isTestEnv()) document.addEventListener("touchend", setGlobalIgnoreEmulatedMouseEvents);
30
+ }
31
+ hoverCount++;
32
+ return () => {
33
+ hoverCount--;
34
+ if (hoverCount > 0) return;
35
+ if (typeof PointerEvent !== "undefined") document.removeEventListener("pointerup", handleGlobalPointerEvent);
36
+ else if (isTestEnv()) document.removeEventListener("touchend", setGlobalIgnoreEmulatedMouseEvents);
37
+ };
38
+ }
39
+ /**
40
+ * Handles pointer hover interactions for an element.
41
+ */
42
+ function createHover(props = {}) {
43
+ const getProps = () => access(props);
44
+ const [isHovered, setIsHovered] = createSignal(false);
45
+ const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();
46
+ let state = {
47
+ isHovered: false,
48
+ ignoreEmulatedMouseEvents: false,
49
+ pointerType: "",
50
+ target: null
51
+ };
52
+ createEffect(() => {
53
+ onCleanup(setupGlobalTouchEvents());
54
+ });
55
+ createEffect(() => {
56
+ if (getProps().isDisabled && state.isHovered) triggerHoverEnd(state.target, state.pointerType);
57
+ });
58
+ function triggerHoverStart(target, pointerType, eventTarget) {
59
+ const p = getProps();
60
+ state.pointerType = pointerType;
61
+ const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;
62
+ if (p.isDisabled || state.isHovered || !isOverTarget) return;
63
+ state.isHovered = true;
64
+ state.target = target;
65
+ addGlobalListener("pointerover", (event) => {
66
+ if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(event.target, event.pointerType);
67
+ }, { capture: true });
68
+ p.onHoverStart?.({
69
+ type: "hoverstart",
70
+ target,
71
+ pointerType
72
+ });
73
+ p.onHoverChange?.(true);
74
+ setIsHovered(true);
75
+ }
76
+ function triggerHoverEnd(target, pointerType) {
77
+ const p = getProps();
78
+ state.pointerType = "";
79
+ state.target = null;
80
+ if (!state.isHovered || !target) return;
81
+ state.isHovered = false;
82
+ removeAllGlobalListeners();
83
+ p.onHoverEnd?.({
84
+ type: "hoverend",
85
+ target,
86
+ pointerType
87
+ });
88
+ p.onHoverChange?.(false);
89
+ setIsHovered(false);
90
+ }
91
+ return {
92
+ hoverProps: createMemo(() => {
93
+ if (typeof PointerEvent !== "undefined") return {
94
+ onPointerEnter: (e) => {
95
+ if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
96
+ if (e.pointerType === "touch") return;
97
+ triggerHoverStart(e.currentTarget, e.pointerType, e.target);
98
+ },
99
+ onPointerLeave: (e) => {
100
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
101
+ },
102
+ onPointerOver: (e) => {
103
+ if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
104
+ if (e.pointerType === "touch") return;
105
+ triggerHoverStart(e.currentTarget, e.pointerType, e.target);
106
+ },
107
+ onPointerOut: (e) => {
108
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
109
+ }
110
+ };
111
+ return {
112
+ onTouchStart: () => {
113
+ state.ignoreEmulatedMouseEvents = true;
114
+ },
115
+ onMouseEnter: (e) => {
116
+ if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) triggerHoverStart(e.currentTarget, "mouse", e.target);
117
+ state.ignoreEmulatedMouseEvents = false;
118
+ },
119
+ onMouseLeave: (e) => {
120
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, "mouse");
121
+ }
122
+ };
123
+ })(),
124
+ isHovered
125
+ };
126
+ }
127
+ //#endregion
128
+ export { createHover as t };
129
+
130
+ //# sourceMappingURL=createHover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHover.js","names":[],"sources":["../../src/interactions/createHover.ts"],"sourcesContent":["/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport {\n type JSX,\n type Accessor,\n createSignal,\n createEffect,\n onCleanup,\n createMemo,\n} from \"solid-js\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createEffect(() => {\n const cleanup = setupGlobalTouchEvents();\n onCleanup(cleanup);\n });\n\n // Reset hover when disabled\n createEffect(() => {\n const p = getProps();\n if (p.isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n });\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(event.target as Element, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n const hoverProps = createMemo<JSX.HTMLAttributes<HTMLElement>>(() => {\n if (typeof PointerEvent !== \"undefined\") {\n return {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n };\n }\n\n // Fallback for environments without PointerEvent (mainly tests)\n return {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n });\n\n return {\n hoverProps: hoverProps() as HoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { i as access, r as isTestEnv } from "./env.jsx";
2
+ import { s as createGlobalListeners } from "./utils.jsx";
3
+ import { y as nodeContains } from "./focus.jsx";
4
+ import { createEffect, createMemo, createSignal, onCleanup } from "solid-js";
5
+ //#region src/interactions/createHover.ts
6
+ /**
7
+ * createHover hook for Solidaria
8
+ *
9
+ * Handles pointer hover interactions for an element. Normalizes behavior
10
+ * across browsers and platforms, and ignores emulated mouse events on touch devices.
11
+ *
12
+ * Port of @react-aria/interactions useHover.
13
+ */
14
+ let globalIgnoreEmulatedMouseEvents = false;
15
+ let hoverCount = 0;
16
+ function setGlobalIgnoreEmulatedMouseEvents() {
17
+ globalIgnoreEmulatedMouseEvents = true;
18
+ setTimeout(() => {
19
+ globalIgnoreEmulatedMouseEvents = false;
20
+ }, 50);
21
+ }
22
+ function handleGlobalPointerEvent(e) {
23
+ if (e.pointerType === "touch") setGlobalIgnoreEmulatedMouseEvents();
24
+ }
25
+ function setupGlobalTouchEvents() {
26
+ if (typeof document === "undefined") return () => {};
27
+ if (hoverCount === 0) {
28
+ if (typeof PointerEvent !== "undefined") document.addEventListener("pointerup", handleGlobalPointerEvent);
29
+ else if (isTestEnv()) document.addEventListener("touchend", setGlobalIgnoreEmulatedMouseEvents);
30
+ }
31
+ hoverCount++;
32
+ return () => {
33
+ hoverCount--;
34
+ if (hoverCount > 0) return;
35
+ if (typeof PointerEvent !== "undefined") document.removeEventListener("pointerup", handleGlobalPointerEvent);
36
+ else if (isTestEnv()) document.removeEventListener("touchend", setGlobalIgnoreEmulatedMouseEvents);
37
+ };
38
+ }
39
+ /**
40
+ * Handles pointer hover interactions for an element.
41
+ */
42
+ function createHover(props = {}) {
43
+ const getProps = () => access(props);
44
+ const [isHovered, setIsHovered] = createSignal(false);
45
+ const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();
46
+ let state = {
47
+ isHovered: false,
48
+ ignoreEmulatedMouseEvents: false,
49
+ pointerType: "",
50
+ target: null
51
+ };
52
+ createEffect(() => {
53
+ onCleanup(setupGlobalTouchEvents());
54
+ });
55
+ createEffect(() => {
56
+ if (getProps().isDisabled && state.isHovered) triggerHoverEnd(state.target, state.pointerType);
57
+ });
58
+ function triggerHoverStart(target, pointerType, eventTarget) {
59
+ const p = getProps();
60
+ state.pointerType = pointerType;
61
+ const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;
62
+ if (p.isDisabled || state.isHovered || !isOverTarget) return;
63
+ state.isHovered = true;
64
+ state.target = target;
65
+ addGlobalListener("pointerover", (event) => {
66
+ if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(event.target, event.pointerType);
67
+ }, { capture: true });
68
+ p.onHoverStart?.({
69
+ type: "hoverstart",
70
+ target,
71
+ pointerType
72
+ });
73
+ p.onHoverChange?.(true);
74
+ setIsHovered(true);
75
+ }
76
+ function triggerHoverEnd(target, pointerType) {
77
+ const p = getProps();
78
+ state.pointerType = "";
79
+ state.target = null;
80
+ if (!state.isHovered || !target) return;
81
+ state.isHovered = false;
82
+ removeAllGlobalListeners();
83
+ p.onHoverEnd?.({
84
+ type: "hoverend",
85
+ target,
86
+ pointerType
87
+ });
88
+ p.onHoverChange?.(false);
89
+ setIsHovered(false);
90
+ }
91
+ return {
92
+ hoverProps: createMemo(() => {
93
+ if (typeof PointerEvent !== "undefined") return {
94
+ onPointerEnter: (e) => {
95
+ if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
96
+ if (e.pointerType === "touch") return;
97
+ triggerHoverStart(e.currentTarget, e.pointerType, e.target);
98
+ },
99
+ onPointerLeave: (e) => {
100
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
101
+ },
102
+ onPointerOver: (e) => {
103
+ if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
104
+ if (e.pointerType === "touch") return;
105
+ triggerHoverStart(e.currentTarget, e.pointerType, e.target);
106
+ },
107
+ onPointerOut: (e) => {
108
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
109
+ }
110
+ };
111
+ return {
112
+ onTouchStart: () => {
113
+ state.ignoreEmulatedMouseEvents = true;
114
+ },
115
+ onMouseEnter: (e) => {
116
+ if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) triggerHoverStart(e.currentTarget, "mouse", e.target);
117
+ state.ignoreEmulatedMouseEvents = false;
118
+ },
119
+ onMouseLeave: (e) => {
120
+ if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, "mouse");
121
+ }
122
+ };
123
+ })(),
124
+ isHovered
125
+ };
126
+ }
127
+ //#endregion
128
+ export { createHover as t };
129
+
130
+ //# sourceMappingURL=createHover.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHover.jsx","names":[],"sources":["../../src/interactions/createHover.ts"],"sourcesContent":["/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport {\n type JSX,\n type Accessor,\n createSignal,\n createEffect,\n onCleanup,\n createMemo,\n} from \"solid-js\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createEffect(() => {\n const cleanup = setupGlobalTouchEvents();\n onCleanup(cleanup);\n });\n\n // Reset hover when disabled\n createEffect(() => {\n const p = getProps();\n if (p.isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n });\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(event.target as Element, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n const hoverProps = createMemo<JSX.HTMLAttributes<HTMLElement>>(() => {\n if (typeof PointerEvent !== \"undefined\") {\n return {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n };\n }\n\n // Fallback for environments without PointerEvent (mainly tests)\n return {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n });\n\n return {\n hoverProps: hoverProps() as HoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}