@proyecto-viviana/solidaria 0.2.5 → 0.3.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 (555) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -236
  3. package/dist/actiongroup/createActionGroup.d.ts +29 -0
  4. package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
  5. package/dist/actiongroup/index.d.ts +2 -0
  6. package/dist/actiongroup/index.d.ts.map +1 -0
  7. package/dist/autocomplete/createAutocomplete.d.ts +16 -12
  8. package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
  9. package/dist/autocomplete/index.d.ts +1 -1
  10. package/dist/autocomplete/index.d.ts.map +1 -1
  11. package/dist/breadcrumbs/createBreadcrumbs.d.ts +11 -7
  12. package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
  13. package/dist/breadcrumbs/index.d.ts +1 -1
  14. package/dist/button/createButton.d.ts +1 -1
  15. package/dist/button/createButton.d.ts.map +1 -1
  16. package/dist/button/createToggleButton.d.ts +3 -3
  17. package/dist/button/createToggleButtonGroup.d.ts +32 -0
  18. package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
  19. package/dist/button/index.d.ts +6 -4
  20. package/dist/button/index.d.ts.map +1 -1
  21. package/dist/button/types.d.ts +18 -12
  22. package/dist/button/types.d.ts.map +1 -1
  23. package/dist/calendar/createCalendar.d.ts +15 -5
  24. package/dist/calendar/createCalendar.d.ts.map +1 -1
  25. package/dist/calendar/createCalendarCell.d.ts +8 -2
  26. package/dist/calendar/createCalendarCell.d.ts.map +1 -1
  27. package/dist/calendar/createCalendarGrid.d.ts +4 -4
  28. package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
  29. package/dist/calendar/createRangeCalendar.d.ts +15 -5
  30. package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
  31. package/dist/calendar/createRangeCalendarCell.d.ts +7 -3
  32. package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
  33. package/dist/calendar/index.d.ts +5 -5
  34. package/dist/calendar/index.d.ts.map +1 -1
  35. package/dist/calendar/intl/index.d.ts +12 -0
  36. package/dist/calendar/intl/index.d.ts.map +1 -0
  37. package/dist/calendar/utils.d.ts +12 -0
  38. package/dist/calendar/utils.d.ts.map +1 -0
  39. package/dist/checkbox/createCheckbox.d.ts +6 -6
  40. package/dist/checkbox/createCheckbox.d.ts.map +1 -1
  41. package/dist/checkbox/createCheckboxGroup.d.ts +11 -7
  42. package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
  43. package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
  44. package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
  45. package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
  46. package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
  47. package/dist/checkbox/index.d.ts +8 -8
  48. package/dist/checkbox/index.d.ts.map +1 -1
  49. package/dist/collections/index.d.ts +56 -0
  50. package/dist/collections/index.d.ts.map +1 -0
  51. package/dist/color/createColorArea.d.ts +3 -3
  52. package/dist/color/createColorArea.d.ts.map +1 -1
  53. package/dist/color/createColorField.d.ts +4 -4
  54. package/dist/color/createColorField.d.ts.map +1 -1
  55. package/dist/color/createColorSlider.d.ts +4 -4
  56. package/dist/color/createColorSlider.d.ts.map +1 -1
  57. package/dist/color/createColorSwatch.d.ts +2 -2
  58. package/dist/color/createColorSwatch.d.ts.map +1 -1
  59. package/dist/color/createColorWheel.d.ts +3 -3
  60. package/dist/color/createColorWheel.d.ts.map +1 -1
  61. package/dist/color/index.d.ts +6 -6
  62. package/dist/color/types.d.ts +98 -16
  63. package/dist/color/types.d.ts.map +1 -1
  64. package/dist/combobox/createComboBox.d.ts +16 -7
  65. package/dist/combobox/createComboBox.d.ts.map +1 -1
  66. package/dist/combobox/index.d.ts +1 -1
  67. package/dist/combobox/intl/index.d.ts +1 -1
  68. package/dist/datepicker/createDateField.d.ts +18 -6
  69. package/dist/datepicker/createDateField.d.ts.map +1 -1
  70. package/dist/datepicker/createDatePicker.d.ts +57 -5
  71. package/dist/datepicker/createDatePicker.d.ts.map +1 -1
  72. package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
  73. package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
  74. package/dist/datepicker/createDateRangePicker.d.ts +42 -0
  75. package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
  76. package/dist/datepicker/createDateSegment.d.ts +11 -3
  77. package/dist/datepicker/createDateSegment.d.ts.map +1 -1
  78. package/dist/datepicker/createTimeField.d.ts +11 -5
  79. package/dist/datepicker/createTimeField.d.ts.map +1 -1
  80. package/dist/datepicker/createTimeSegment.d.ts +29 -0
  81. package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
  82. package/dist/datepicker/index.d.ts +7 -4
  83. package/dist/datepicker/index.d.ts.map +1 -1
  84. package/dist/dialog/createDialog.d.ts +5 -5
  85. package/dist/dialog/createDialog.d.ts.map +1 -1
  86. package/dist/dialog/index.d.ts +2 -2
  87. package/dist/dialog/index.d.ts.map +1 -1
  88. package/dist/dialog/types.d.ts +4 -4
  89. package/dist/disclosure/createDisclosure.d.ts +5 -2
  90. package/dist/disclosure/createDisclosure.d.ts.map +1 -1
  91. package/dist/disclosure/createDisclosureGroup.d.ts +4 -3
  92. package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
  93. package/dist/disclosure/index.d.ts +2 -2
  94. package/dist/dnd/createDrag.d.ts +2 -2
  95. package/dist/dnd/createDrag.d.ts.map +1 -1
  96. package/dist/dnd/createDraggableCollection.d.ts +6 -2
  97. package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
  98. package/dist/dnd/createDraggableItem.d.ts +3 -3
  99. package/dist/dnd/createDraggableItem.d.ts.map +1 -1
  100. package/dist/dnd/createDrop.d.ts +2 -2
  101. package/dist/dnd/createDrop.d.ts.map +1 -1
  102. package/dist/dnd/createDroppableCollection.d.ts +55 -4
  103. package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
  104. package/dist/dnd/createDroppableItem.d.ts +3 -3
  105. package/dist/dnd/createDroppableItem.d.ts.map +1 -1
  106. package/dist/dnd/index.d.ts +12 -12
  107. package/dist/dnd/index.d.ts.map +1 -1
  108. package/dist/dnd/types.d.ts +2 -2
  109. package/dist/dnd/types.d.ts.map +1 -1
  110. package/dist/dnd/utils.d.ts +1 -1
  111. package/dist/dnd/utils.d.ts.map +1 -1
  112. package/dist/focus/FocusScope.d.ts +1 -1
  113. package/dist/focus/FocusScope.d.ts.map +1 -1
  114. package/dist/focus/createAutoFocus.d.ts.map +1 -1
  115. package/dist/focus/createFocusRestore.d.ts.map +1 -1
  116. package/dist/focus/createVirtualFocus.d.ts +4 -4
  117. package/dist/focus/createVirtualFocus.d.ts.map +1 -1
  118. package/dist/focus/index.d.ts +4 -4
  119. package/dist/focus/index.d.ts.map +1 -1
  120. package/dist/form/createFormReset.d.ts +1 -1
  121. package/dist/form/createFormValidation.d.ts +3 -3
  122. package/dist/form/createFormValidation.d.ts.map +1 -1
  123. package/dist/form/index.d.ts +2 -2
  124. package/dist/form/index.d.ts.map +1 -1
  125. package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
  126. package/dist/grid/createGrid.d.ts +3 -3
  127. package/dist/grid/createGrid.d.ts.map +1 -1
  128. package/dist/grid/createGridCell.d.ts +3 -3
  129. package/dist/grid/createGridRow.d.ts +3 -3
  130. package/dist/grid/index.d.ts +5 -5
  131. package/dist/grid/types.d.ts +8 -8
  132. package/dist/gridlist/createGridList.d.ts +6 -4
  133. package/dist/gridlist/createGridList.d.ts.map +1 -1
  134. package/dist/gridlist/createGridListItem.d.ts +4 -4
  135. package/dist/gridlist/createGridListItem.d.ts.map +1 -1
  136. package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
  137. package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
  138. package/dist/gridlist/index.d.ts +4 -4
  139. package/dist/gridlist/types.d.ts +11 -7
  140. package/dist/gridlist/types.d.ts.map +1 -1
  141. package/dist/i18n/createCollator.d.ts.map +1 -1
  142. package/dist/i18n/createDateFormatter.d.ts.map +1 -1
  143. package/dist/i18n/createFilter.d.ts.map +1 -1
  144. package/dist/i18n/createNumberFormatter.d.ts +1 -1
  145. package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
  146. package/dist/i18n/createStringFormatter.d.ts +2 -2
  147. package/dist/i18n/createStringFormatter.d.ts.map +1 -1
  148. package/dist/i18n/index.d.ts +8 -8
  149. package/dist/i18n/index.d.ts.map +1 -1
  150. package/dist/i18n/locale.d.ts +2 -2
  151. package/dist/i18n/locale.d.ts.map +1 -1
  152. package/dist/i18n/utils.d.ts.map +1 -1
  153. package/dist/index.d.ts +52 -49
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +18089 -15690
  156. package/dist/index.js.map +1 -7
  157. package/dist/index.jsx +18242 -0
  158. package/dist/index.jsx.map +1 -0
  159. package/dist/interactions/FocusableProvider.d.ts +2 -2
  160. package/dist/interactions/FocusableProvider.d.ts.map +1 -1
  161. package/dist/interactions/PressEvent.d.ts +2 -2
  162. package/dist/interactions/createFocus.d.ts +1 -1
  163. package/dist/interactions/createFocus.d.ts.map +1 -1
  164. package/dist/interactions/createFocusRing.d.ts +1 -1
  165. package/dist/interactions/createFocusRing.d.ts.map +1 -1
  166. package/dist/interactions/createFocusWithin.d.ts +1 -1
  167. package/dist/interactions/createFocusWithin.d.ts.map +1 -1
  168. package/dist/interactions/createFocusable.d.ts +3 -3
  169. package/dist/interactions/createFocusable.d.ts.map +1 -1
  170. package/dist/interactions/createHover.d.ts +5 -5
  171. package/dist/interactions/createHover.d.ts.map +1 -1
  172. package/dist/interactions/createInteractionModality.d.ts +3 -3
  173. package/dist/interactions/createInteractionModality.d.ts.map +1 -1
  174. package/dist/interactions/createKeyboard.d.ts +1 -1
  175. package/dist/interactions/createLongPress.d.ts +5 -5
  176. package/dist/interactions/createMove.d.ts +5 -5
  177. package/dist/interactions/createMove.d.ts.map +1 -1
  178. package/dist/interactions/createPress.d.ts +4 -4
  179. package/dist/interactions/createPress.d.ts.map +1 -1
  180. package/dist/interactions/index.d.ts +12 -12
  181. package/dist/interactions/index.d.ts.map +1 -1
  182. package/dist/label/createField.d.ts +4 -4
  183. package/dist/label/createField.d.ts.map +1 -1
  184. package/dist/label/createLabel.d.ts +7 -7
  185. package/dist/label/createLabel.d.ts.map +1 -1
  186. package/dist/label/createLabels.d.ts +1 -1
  187. package/dist/label/createLabels.d.ts.map +1 -1
  188. package/dist/label/index.d.ts +5 -5
  189. package/dist/landmark/createLandmark.d.ts +5 -5
  190. package/dist/landmark/createLandmark.d.ts.map +1 -1
  191. package/dist/landmark/index.d.ts +1 -1
  192. package/dist/link/createLink.d.ts +23 -7
  193. package/dist/link/createLink.d.ts.map +1 -1
  194. package/dist/link/index.d.ts +1 -1
  195. package/dist/listbox/createListBox.d.ts +12 -6
  196. package/dist/listbox/createListBox.d.ts.map +1 -1
  197. package/dist/listbox/createOption.d.ts +21 -4
  198. package/dist/listbox/createOption.d.ts.map +1 -1
  199. package/dist/listbox/index.d.ts +2 -2
  200. package/dist/listbox/index.d.ts.map +1 -1
  201. package/dist/live-announcer/announce.d.ts +2 -2
  202. package/dist/live-announcer/announce.d.ts.map +1 -1
  203. package/dist/live-announcer/index.d.ts +1 -1
  204. package/dist/menu/createMenu.d.ts +8 -7
  205. package/dist/menu/createMenu.d.ts.map +1 -1
  206. package/dist/menu/createMenuItem.d.ts +16 -4
  207. package/dist/menu/createMenuItem.d.ts.map +1 -1
  208. package/dist/menu/createMenuTrigger.d.ts +4 -4
  209. package/dist/menu/index.d.ts +3 -3
  210. package/dist/menu/index.d.ts.map +1 -1
  211. package/dist/meter/createMeter.d.ts +6 -6
  212. package/dist/meter/createMeter.d.ts.map +1 -1
  213. package/dist/meter/index.d.ts +1 -1
  214. package/dist/numberfield/createNumberField.d.ts +27 -8
  215. package/dist/numberfield/createNumberField.d.ts.map +1 -1
  216. package/dist/numberfield/index.d.ts +1 -1
  217. package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
  218. package/dist/overlays/createModal.d.ts +19 -3
  219. package/dist/overlays/createModal.d.ts.map +1 -1
  220. package/dist/overlays/createOverlay.d.ts +1 -1
  221. package/dist/overlays/createOverlay.d.ts.map +1 -1
  222. package/dist/overlays/createOverlayTrigger.d.ts +6 -6
  223. package/dist/overlays/index.d.ts +6 -6
  224. package/dist/overlays/index.d.ts.map +1 -1
  225. package/dist/popover/calculatePosition.d.ts +4 -4
  226. package/dist/popover/calculatePosition.d.ts.map +1 -1
  227. package/dist/popover/createOverlayPosition.d.ts +3 -3
  228. package/dist/popover/createOverlayPosition.d.ts.map +1 -1
  229. package/dist/popover/createPopover.d.ts +4 -4
  230. package/dist/popover/createPopover.d.ts.map +1 -1
  231. package/dist/popover/index.d.ts +3 -3
  232. package/dist/progress/createProgressBar.d.ts +7 -5
  233. package/dist/progress/createProgressBar.d.ts.map +1 -1
  234. package/dist/progress/index.d.ts +1 -1
  235. package/dist/radio/createRadio.d.ts +7 -7
  236. package/dist/radio/createRadio.d.ts.map +1 -1
  237. package/dist/radio/createRadioGroup.d.ts +11 -11
  238. package/dist/radio/createRadioGroup.d.ts.map +1 -1
  239. package/dist/radio/createRadioGroupState.d.ts +3 -3
  240. package/dist/radio/createRadioGroupState.d.ts.map +1 -1
  241. package/dist/radio/index.d.ts +3 -3
  242. package/dist/radio/index.d.ts.map +1 -1
  243. package/dist/searchfield/createSearchField.d.ts +7 -7
  244. package/dist/searchfield/createSearchField.d.ts.map +1 -1
  245. package/dist/searchfield/index.d.ts +2 -2
  246. package/dist/select/createHiddenSelect.d.ts +4 -4
  247. package/dist/select/createHiddenSelect.d.ts.map +1 -1
  248. package/dist/select/createSelect.d.ts +14 -6
  249. package/dist/select/createSelect.d.ts.map +1 -1
  250. package/dist/select/index.d.ts +2 -2
  251. package/dist/select/index.d.ts.map +1 -1
  252. package/dist/selection/createTypeSelect.d.ts +2 -2
  253. package/dist/selection/index.d.ts +1 -1
  254. package/dist/separator/createSeparator.d.ts +9 -5
  255. package/dist/separator/createSeparator.d.ts.map +1 -1
  256. package/dist/separator/index.d.ts +1 -1
  257. package/dist/slider/createSlider.d.ts +11 -7
  258. package/dist/slider/createSlider.d.ts.map +1 -1
  259. package/dist/slider/index.d.ts +2 -2
  260. package/dist/ssr/index.d.ts +1 -1
  261. package/dist/ssr/index.d.ts.map +1 -1
  262. package/dist/steplist/createStepList.d.ts +36 -0
  263. package/dist/steplist/createStepList.d.ts.map +1 -0
  264. package/dist/steplist/index.d.ts +2 -0
  265. package/dist/steplist/index.d.ts.map +1 -0
  266. package/dist/switch/createSwitch.d.ts +6 -4
  267. package/dist/switch/createSwitch.d.ts.map +1 -1
  268. package/dist/switch/index.d.ts +1 -1
  269. package/dist/table/createTable.d.ts +3 -3
  270. package/dist/table/createTable.d.ts.map +1 -1
  271. package/dist/table/createTableCell.d.ts +3 -3
  272. package/dist/table/createTableCell.d.ts.map +1 -1
  273. package/dist/table/createTableColumnHeader.d.ts +3 -3
  274. package/dist/table/createTableColumnHeader.d.ts.map +1 -1
  275. package/dist/table/createTableColumnResize.d.ts +41 -0
  276. package/dist/table/createTableColumnResize.d.ts.map +1 -0
  277. package/dist/table/createTableHeaderRow.d.ts +3 -3
  278. package/dist/table/createTableRow.d.ts +3 -3
  279. package/dist/table/createTableRow.d.ts.map +1 -1
  280. package/dist/table/createTableRowGroup.d.ts +2 -2
  281. package/dist/table/createTableRowGroup.d.ts.map +1 -1
  282. package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
  283. package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
  284. package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
  285. package/dist/table/index.d.ts +11 -9
  286. package/dist/table/index.d.ts.map +1 -1
  287. package/dist/table/types.d.ts +15 -7
  288. package/dist/table/types.d.ts.map +1 -1
  289. package/dist/tabs/createTabs.d.ts +28 -25
  290. package/dist/tabs/createTabs.d.ts.map +1 -1
  291. package/dist/tabs/index.d.ts +1 -1
  292. package/dist/tag/createTag.d.ts +2 -2
  293. package/dist/tag/createTag.d.ts.map +1 -1
  294. package/dist/tag/createTagGroup.d.ts +5 -5
  295. package/dist/tag/createTagGroup.d.ts.map +1 -1
  296. package/dist/tag/index.d.ts +2 -2
  297. package/dist/tag/index.d.ts.map +1 -1
  298. package/dist/textfield/createTextField.d.ts +17 -11
  299. package/dist/textfield/createTextField.d.ts.map +1 -1
  300. package/dist/textfield/index.d.ts +1 -1
  301. package/dist/textfield/index.d.ts.map +1 -1
  302. package/dist/toast/createToast.d.ts +6 -2
  303. package/dist/toast/createToast.d.ts.map +1 -1
  304. package/dist/toast/createToastRegion.d.ts +5 -3
  305. package/dist/toast/createToastRegion.d.ts.map +1 -1
  306. package/dist/toast/index.d.ts +2 -2
  307. package/dist/toast/index.d.ts.map +1 -1
  308. package/dist/toggle/createToggle.d.ts +9 -9
  309. package/dist/toggle/createToggle.d.ts.map +1 -1
  310. package/dist/toggle/createToggleState.d.ts +2 -2
  311. package/dist/toggle/createToggleState.d.ts.map +1 -1
  312. package/dist/toggle/index.d.ts +4 -4
  313. package/dist/toggle/index.d.ts.map +1 -1
  314. package/dist/toolbar/createToolbar.d.ts +9 -9
  315. package/dist/toolbar/createToolbar.d.ts.map +1 -1
  316. package/dist/toolbar/index.d.ts +1 -1
  317. package/dist/toolbar/index.d.ts.map +1 -1
  318. package/dist/tooltip/createTooltip.d.ts +5 -5
  319. package/dist/tooltip/createTooltip.d.ts.map +1 -1
  320. package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
  321. package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
  322. package/dist/tooltip/index.d.ts +2 -2
  323. package/dist/tree/createTree.d.ts +3 -3
  324. package/dist/tree/createTree.d.ts.map +1 -1
  325. package/dist/tree/createTreeItem.d.ts +4 -4
  326. package/dist/tree/createTreeItem.d.ts.map +1 -1
  327. package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
  328. package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
  329. package/dist/tree/index.d.ts +4 -4
  330. package/dist/tree/types.d.ts +13 -5
  331. package/dist/tree/types.d.ts.map +1 -1
  332. package/dist/utils/createDescription.d.ts +2 -2
  333. package/dist/utils/createDescription.d.ts.map +1 -1
  334. package/dist/utils/dom.d.ts.map +1 -1
  335. package/dist/utils/env.d.ts +1 -1
  336. package/dist/utils/env.d.ts.map +1 -1
  337. package/dist/utils/focus.d.ts +1 -1
  338. package/dist/utils/focus.d.ts.map +1 -1
  339. package/dist/utils/geometry.d.ts.map +1 -1
  340. package/dist/utils/index.d.ts +12 -12
  341. package/dist/utils/index.d.ts.map +1 -1
  342. package/dist/utils/mergeProps.d.ts.map +1 -1
  343. package/dist/utils/platform.d.ts.map +1 -1
  344. package/dist/utils/reactivity.d.ts +1 -1
  345. package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
  346. package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
  347. package/dist/visually-hidden/index.d.ts +1 -1
  348. package/package.json +34 -32
  349. package/src/actiongroup/createActionGroup.ts +334 -0
  350. package/src/actiongroup/index.ts +8 -0
  351. package/src/autocomplete/createAutocomplete.ts +137 -131
  352. package/src/autocomplete/index.ts +1 -1
  353. package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
  354. package/src/breadcrumbs/index.ts +1 -1
  355. package/src/button/createButton.ts +102 -73
  356. package/src/button/createToggleButton.ts +10 -10
  357. package/src/button/createToggleButtonGroup.ts +121 -0
  358. package/src/button/index.ts +10 -4
  359. package/src/button/types.ts +18 -12
  360. package/src/calendar/createCalendar.ts +62 -29
  361. package/src/calendar/createCalendarCell.ts +102 -48
  362. package/src/calendar/createCalendarGrid.ts +78 -47
  363. package/src/calendar/createRangeCalendar.ts +66 -31
  364. package/src/calendar/createRangeCalendarCell.ts +115 -37
  365. package/src/calendar/index.ts +5 -9
  366. package/src/calendar/intl/index.ts +210 -0
  367. package/src/calendar/utils.ts +227 -0
  368. package/src/checkbox/createCheckbox.ts +13 -21
  369. package/src/checkbox/createCheckboxGroup.ts +86 -45
  370. package/src/checkbox/createCheckboxGroupItem.ts +16 -27
  371. package/src/checkbox/createCheckboxGroupState.ts +3 -22
  372. package/src/checkbox/index.ts +8 -10
  373. package/src/collections/index.ts +246 -0
  374. package/src/color/createColorArea.ts +458 -314
  375. package/src/color/createColorField.ts +186 -137
  376. package/src/color/createColorSlider.ts +444 -197
  377. package/src/color/createColorSwatch.ts +65 -40
  378. package/src/color/createColorWheel.ts +343 -208
  379. package/src/color/index.ts +24 -24
  380. package/src/color/types.ts +198 -116
  381. package/src/combobox/createComboBox.ts +727 -647
  382. package/src/combobox/index.ts +6 -6
  383. package/src/combobox/intl/index.ts +5 -5
  384. package/src/datepicker/createDateField.ts +192 -39
  385. package/src/datepicker/createDatePicker.ts +294 -63
  386. package/src/datepicker/createDatePickerGroup.ts +149 -0
  387. package/src/datepicker/createDateRangePicker.ts +294 -0
  388. package/src/datepicker/createDateSegment.ts +316 -75
  389. package/src/datepicker/createTimeField.ts +38 -34
  390. package/src/datepicker/createTimeSegment.ts +352 -0
  391. package/src/datepicker/index.ts +24 -11
  392. package/src/dialog/createDialog.ts +127 -120
  393. package/src/dialog/index.ts +2 -2
  394. package/src/dialog/types.ts +19 -19
  395. package/src/disclosure/createDisclosure.ts +138 -33
  396. package/src/disclosure/createDisclosureGroup.ts +8 -18
  397. package/src/disclosure/index.ts +2 -2
  398. package/src/dnd/createDrag.ts +218 -209
  399. package/src/dnd/createDraggableCollection.ts +96 -63
  400. package/src/dnd/createDraggableItem.ts +260 -243
  401. package/src/dnd/createDrop.ts +313 -321
  402. package/src/dnd/createDroppableCollection.ts +799 -293
  403. package/src/dnd/createDroppableItem.ts +215 -213
  404. package/src/dnd/index.ts +66 -47
  405. package/src/dnd/types.ts +86 -89
  406. package/src/dnd/utils.ts +281 -294
  407. package/src/focus/FocusScope.tsx +155 -164
  408. package/src/focus/createAutoFocus.ts +305 -321
  409. package/src/focus/createFocusRestore.ts +300 -313
  410. package/src/focus/createVirtualFocus.ts +380 -396
  411. package/src/focus/index.ts +4 -8
  412. package/src/form/createFormReset.ts +4 -4
  413. package/src/form/createFormValidation.ts +201 -224
  414. package/src/form/index.ts +8 -11
  415. package/src/grid/GridKeyboardDelegate.ts +30 -30
  416. package/src/grid/createGrid.ts +38 -36
  417. package/src/grid/createGridCell.ts +18 -18
  418. package/src/grid/createGridRow.ts +14 -14
  419. package/src/grid/index.ts +5 -5
  420. package/src/grid/types.ts +8 -8
  421. package/src/gridlist/createGridList.ts +45 -24
  422. package/src/gridlist/createGridListItem.ts +68 -23
  423. package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
  424. package/src/gridlist/index.ts +4 -4
  425. package/src/gridlist/types.ts +11 -7
  426. package/src/i18n/createCollator.ts +66 -79
  427. package/src/i18n/createDateFormatter.ts +75 -83
  428. package/src/i18n/createFilter.ts +118 -131
  429. package/src/i18n/createNumberFormatter.ts +50 -52
  430. package/src/i18n/createStringFormatter.ts +19 -15
  431. package/src/i18n/index.ts +37 -40
  432. package/src/i18n/locale.tsx +163 -188
  433. package/src/i18n/utils.ts +95 -99
  434. package/src/index.ts +114 -164
  435. package/src/interactions/FocusableProvider.tsx +3 -7
  436. package/src/interactions/PressEvent.ts +4 -4
  437. package/src/interactions/createFocus.ts +16 -11
  438. package/src/interactions/createFocusRing.ts +21 -19
  439. package/src/interactions/createFocusWithin.ts +24 -16
  440. package/src/interactions/createFocusable.ts +15 -16
  441. package/src/interactions/createHover.ts +70 -55
  442. package/src/interactions/createInteractionModality.ts +75 -82
  443. package/src/interactions/createKeyboard.ts +2 -2
  444. package/src/interactions/createLongPress.ts +174 -174
  445. package/src/interactions/createMove.ts +299 -289
  446. package/src/interactions/createPress.ts +168 -91
  447. package/src/interactions/index.ts +24 -16
  448. package/src/label/createField.ts +18 -19
  449. package/src/label/createLabel.ts +18 -30
  450. package/src/label/createLabels.ts +8 -12
  451. package/src/label/index.ts +5 -5
  452. package/src/landmark/createLandmark.ts +356 -377
  453. package/src/landmark/index.ts +8 -8
  454. package/src/link/createLink.ts +96 -54
  455. package/src/link/index.ts +1 -1
  456. package/src/listbox/createListBox.ts +319 -269
  457. package/src/listbox/createOption.ts +208 -151
  458. package/src/listbox/index.ts +8 -12
  459. package/src/live-announcer/announce.ts +295 -322
  460. package/src/live-announcer/index.ts +9 -9
  461. package/src/menu/createMenu.ts +434 -396
  462. package/src/menu/createMenuItem.ts +201 -149
  463. package/src/menu/createMenuTrigger.ts +88 -88
  464. package/src/menu/index.ts +9 -18
  465. package/src/meter/createMeter.ts +7 -20
  466. package/src/meter/index.ts +1 -1
  467. package/src/numberfield/createNumberField.ts +368 -268
  468. package/src/numberfield/index.ts +5 -5
  469. package/src/overlays/ariaHideOutside.ts +223 -219
  470. package/src/overlays/createInteractOutside.ts +152 -149
  471. package/src/overlays/createModal.tsx +238 -202
  472. package/src/overlays/createOverlay.ts +195 -155
  473. package/src/overlays/createOverlayTrigger.ts +85 -85
  474. package/src/overlays/createPreventScroll.ts +288 -266
  475. package/src/overlays/index.ts +37 -44
  476. package/src/popover/calculatePosition.ts +117 -119
  477. package/src/popover/createOverlayPosition.ts +52 -43
  478. package/src/popover/createPopover.ts +63 -24
  479. package/src/popover/index.ts +3 -3
  480. package/src/progress/createProgressBar.ts +36 -32
  481. package/src/progress/index.ts +1 -1
  482. package/src/radio/createRadio.ts +95 -73
  483. package/src/radio/createRadioGroup.ts +142 -62
  484. package/src/radio/createRadioGroupState.ts +7 -31
  485. package/src/radio/index.ts +3 -8
  486. package/src/searchfield/createSearchField.ts +269 -186
  487. package/src/searchfield/index.ts +2 -2
  488. package/src/select/createHiddenSelect.tsx +276 -236
  489. package/src/select/createSelect.ts +430 -395
  490. package/src/select/index.ts +9 -14
  491. package/src/selection/createTypeSelect.ts +11 -11
  492. package/src/selection/index.ts +1 -1
  493. package/src/separator/createSeparator.ts +20 -25
  494. package/src/separator/index.ts +1 -1
  495. package/src/slider/createSlider.ts +333 -349
  496. package/src/slider/index.ts +2 -2
  497. package/src/ssr/index.tsx +331 -370
  498. package/src/steplist/createStepList.ts +106 -0
  499. package/src/steplist/index.ts +8 -0
  500. package/src/switch/createSwitch.ts +9 -14
  501. package/src/switch/index.ts +1 -1
  502. package/src/table/createTable.ts +155 -86
  503. package/src/table/createTableCell.ts +17 -16
  504. package/src/table/createTableColumnHeader.ts +67 -20
  505. package/src/table/createTableColumnResize.ts +256 -0
  506. package/src/table/createTableHeaderRow.ts +7 -7
  507. package/src/table/createTableRow.ts +149 -29
  508. package/src/table/createTableRowGroup.ts +5 -7
  509. package/src/table/createTableSelectAllCheckbox.ts +12 -11
  510. package/src/table/createTableSelectionCheckbox.ts +8 -8
  511. package/src/table/index.ts +14 -9
  512. package/src/table/types.ts +15 -7
  513. package/src/tabs/createTabs.ts +138 -127
  514. package/src/tabs/index.ts +1 -1
  515. package/src/tag/createTag.ts +171 -40
  516. package/src/tag/createTagGroup.ts +50 -39
  517. package/src/tag/index.ts +2 -6
  518. package/src/textfield/createTextField.ts +67 -35
  519. package/src/textfield/index.ts +1 -5
  520. package/src/toast/createToast.ts +34 -26
  521. package/src/toast/createToastRegion.ts +169 -27
  522. package/src/toast/index.ts +2 -6
  523. package/src/toggle/createToggle.ts +95 -53
  524. package/src/toggle/createToggleState.ts +2 -10
  525. package/src/toggle/index.ts +4 -5
  526. package/src/toolbar/createToolbar.ts +226 -169
  527. package/src/toolbar/index.ts +1 -1
  528. package/src/tooltip/createTooltip.ts +66 -79
  529. package/src/tooltip/createTooltipTrigger.ts +238 -222
  530. package/src/tooltip/index.ts +6 -6
  531. package/src/tree/createTree.ts +259 -246
  532. package/src/tree/createTreeItem.ts +282 -233
  533. package/src/tree/createTreeSelectionCheckbox.ts +71 -68
  534. package/src/tree/index.ts +16 -16
  535. package/src/tree/types.ts +95 -87
  536. package/src/utils/createDescription.ts +6 -23
  537. package/src/utils/dom.ts +61 -54
  538. package/src/utils/env.ts +53 -54
  539. package/src/utils/events.ts +7 -7
  540. package/src/utils/filterDOMProps.ts +49 -49
  541. package/src/utils/focus.ts +60 -68
  542. package/src/utils/geometry.ts +1 -4
  543. package/src/utils/globalListeners.ts +9 -9
  544. package/src/utils/index.ts +12 -22
  545. package/src/utils/mergeProps.ts +42 -15
  546. package/src/utils/platform.ts +16 -6
  547. package/src/utils/reactivity.ts +3 -3
  548. package/src/utils/textSelection.ts +16 -16
  549. package/src/visually-hidden/createVisuallyHidden.ts +127 -124
  550. package/src/visually-hidden/index.ts +6 -6
  551. package/dist/i18n/NumberFormatter.d.ts +0 -43
  552. package/dist/i18n/NumberFormatter.d.ts.map +0 -1
  553. package/dist/index.ssr.js +0 -15875
  554. package/dist/index.ssr.js.map +0 -7
  555. package/src/i18n/NumberFormatter.ts +0 -266
@@ -1,322 +1,295 @@
1
- /**
2
- * Live announcer for solidaria
3
- *
4
- * Provides functions to make announcements to screen readers using
5
- * ARIA live regions. Useful for announcing dynamic content changes.
6
- *
7
- * Port of react-aria's @react-aria/live-announcer.
8
- *
9
- * SSR Safety: All functions are safe to call during SSR. The announcer
10
- * will only be created when running in the browser.
11
- */
12
-
13
- import { onCleanup, createEffect } from 'solid-js';
14
- import { isServer } from 'solid-js/web';
15
-
16
- // ============================================
17
- // TYPES
18
- // ============================================
19
-
20
- export type Assertiveness = 'assertive' | 'polite';
21
-
22
- export type Message = string | { 'aria-labelledby': string };
23
-
24
- // ============================================
25
- // CONSTANTS
26
- // ============================================
27
-
28
- const LIVEREGION_TIMEOUT_DELAY = 7000;
29
-
30
- // ============================================
31
- // LIVE ANNOUNCER CLASS
32
- // ============================================
33
-
34
- /**
35
- * Singleton class that manages live region announcements.
36
- * Implemented using vanilla DOM for simplicity and framework independence.
37
- */
38
- class LiveAnnouncer {
39
- node: HTMLElement | null = null;
40
- assertiveLog: HTMLElement | null = null;
41
- politeLog: HTMLElement | null = null;
42
-
43
- constructor() {
44
- if (typeof document !== 'undefined') {
45
- this.node = document.createElement('div');
46
- this.node.dataset.liveAnnouncer = 'true';
47
- // Visually hidden styles
48
- Object.assign(this.node.style, {
49
- border: '0',
50
- clip: 'rect(0 0 0 0)',
51
- clipPath: 'inset(50%)',
52
- height: '1px',
53
- margin: '-1px',
54
- overflow: 'hidden',
55
- padding: '0',
56
- position: 'absolute',
57
- width: '1px',
58
- whiteSpace: 'nowrap',
59
- });
60
-
61
- this.assertiveLog = this.createLog('assertive');
62
- this.node.appendChild(this.assertiveLog);
63
-
64
- this.politeLog = this.createLog('polite');
65
- this.node.appendChild(this.politeLog);
66
-
67
- document.body.prepend(this.node);
68
- }
69
- }
70
-
71
- isAttached(): boolean {
72
- return this.node?.isConnected ?? false;
73
- }
74
-
75
- createLog(ariaLive: string): HTMLElement {
76
- const node = document.createElement('div');
77
- node.setAttribute('role', 'log');
78
- node.setAttribute('aria-live', ariaLive);
79
- node.setAttribute('aria-relevant', 'additions');
80
- return node;
81
- }
82
-
83
- destroy(): void {
84
- if (!this.node) {
85
- return;
86
- }
87
-
88
- document.body.removeChild(this.node);
89
- this.node = null;
90
- }
91
-
92
- announce(
93
- message: Message,
94
- assertiveness: Assertiveness = 'assertive',
95
- timeout: number = LIVEREGION_TIMEOUT_DELAY
96
- ): void {
97
- if (!this.node) {
98
- return;
99
- }
100
-
101
- const node = document.createElement('div');
102
- if (typeof message === 'object') {
103
- // To read an aria-labelledby, the element must have an appropriate role, such as img.
104
- node.setAttribute('role', 'img');
105
- node.setAttribute('aria-labelledby', message['aria-labelledby']);
106
- } else {
107
- node.textContent = message;
108
- }
109
-
110
- if (assertiveness === 'assertive') {
111
- this.assertiveLog?.appendChild(node);
112
- } else {
113
- this.politeLog?.appendChild(node);
114
- }
115
-
116
- if (message !== '') {
117
- setTimeout(() => {
118
- node.remove();
119
- }, timeout);
120
- }
121
- }
122
-
123
- clear(assertiveness?: Assertiveness): void {
124
- if (!this.node) {
125
- return;
126
- }
127
-
128
- if ((!assertiveness || assertiveness === 'assertive') && this.assertiveLog) {
129
- this.assertiveLog.innerHTML = '';
130
- }
131
-
132
- if ((!assertiveness || assertiveness === 'polite') && this.politeLog) {
133
- this.politeLog.innerHTML = '';
134
- }
135
- }
136
- }
137
-
138
- // ============================================
139
- // SINGLETON INSTANCE
140
- // ============================================
141
-
142
- let liveAnnouncer: LiveAnnouncer | null = null;
143
-
144
- // ============================================
145
- // PUBLIC API
146
- // ============================================
147
-
148
- /**
149
- * Announces a message to screen readers using ARIA live regions.
150
- *
151
- * @param message - The message to announce, or an object with aria-labelledby
152
- * @param assertiveness - 'assertive' interrupts, 'polite' waits for a pause
153
- * @param timeout - How long to keep the message in the DOM (default 7000ms)
154
- *
155
- * @example
156
- * ```tsx
157
- * // Simple announcement
158
- * announce('Item added to cart');
159
- *
160
- * // Polite announcement (won't interrupt)
161
- * announce('3 results found', 'polite');
162
- *
163
- * // Using aria-labelledby for complex content
164
- * announce({ 'aria-labelledby': 'my-element-id' });
165
- * ```
166
- */
167
- export function announce(
168
- message: Message,
169
- assertiveness: Assertiveness = 'assertive',
170
- timeout: number = LIVEREGION_TIMEOUT_DELAY
171
- ): void {
172
- if (!liveAnnouncer) {
173
- liveAnnouncer = new LiveAnnouncer();
174
- // Wait for the live announcer regions to be added to the DOM, then announce.
175
- // Otherwise Safari won't announce the message if it's added too quickly.
176
- // Found most times less than 100ms were not consistent when announcing with Safari.
177
-
178
- // Check for test environment
179
- const isTestEnv = typeof (globalThis as Record<string, unknown>).IS_SOLIDARIA_TEST === 'boolean'
180
- ? (globalThis as Record<string, unknown>).IS_SOLIDARIA_TEST
181
- : typeof (globalThis as Record<string, unknown>).vitest !== 'undefined';
182
-
183
- if (!isTestEnv) {
184
- setTimeout(() => {
185
- if (liveAnnouncer?.isAttached()) {
186
- liveAnnouncer?.announce(message, assertiveness, timeout);
187
- }
188
- }, 100);
189
- } else {
190
- liveAnnouncer.announce(message, assertiveness, timeout);
191
- }
192
- } else {
193
- liveAnnouncer.announce(message, assertiveness, timeout);
194
- }
195
- }
196
-
197
- /**
198
- * Clears all queued announcements for the given assertiveness level.
199
- *
200
- * @param assertiveness - Which log to clear ('assertive' or 'polite')
201
- *
202
- * @example
203
- * ```tsx
204
- * // Clear assertive announcements
205
- * clearAnnouncer('assertive');
206
- *
207
- * // Clear polite announcements
208
- * clearAnnouncer('polite');
209
- * ```
210
- */
211
- export function clearAnnouncer(assertiveness?: Assertiveness): void {
212
- if (liveAnnouncer) {
213
- liveAnnouncer.clear(assertiveness);
214
- }
215
- }
216
-
217
- /**
218
- * Removes the live announcer from the DOM entirely.
219
- * Call this when unmounting your app or when announcements are no longer needed.
220
- *
221
- * @example
222
- * ```tsx
223
- * // Clean up on app unmount
224
- * onCleanup(() => {
225
- * destroyAnnouncer();
226
- * });
227
- * ```
228
- */
229
- export function destroyAnnouncer(): void {
230
- if (liveAnnouncer) {
231
- liveAnnouncer.destroy();
232
- liveAnnouncer = null;
233
- }
234
- }
235
-
236
- // ============================================
237
- // HOOK-BASED API
238
- // ============================================
239
-
240
- export interface UseAnnouncerResult {
241
- /** Announce a message to screen readers. */
242
- announce: (
243
- message: Message,
244
- assertiveness?: Assertiveness,
245
- timeout?: number
246
- ) => void;
247
- /** Clear announcements for the given assertiveness level. */
248
- clear: (assertiveness?: Assertiveness) => void;
249
- }
250
-
251
- /**
252
- * Hook that provides access to the live announcer with automatic cleanup.
253
- *
254
- * This is the recommended way to use the announcer in SolidJS components.
255
- * It ensures the announcer is created only on the client and provides
256
- * type-safe methods for announcing and clearing messages.
257
- *
258
- * SSR Safety: Returns no-op functions during SSR. The announcer is only
259
- * created when the component mounts on the client.
260
- *
261
- * @example
262
- * ```tsx
263
- * function SearchResults(props) {
264
- * const announcer = useAnnouncer();
265
- *
266
- * createEffect(() => {
267
- * const count = props.results.length;
268
- * announcer.announce(`${count} results found`, 'polite');
269
- * });
270
- *
271
- * return <ul>...</ul>;
272
- * }
273
- * ```
274
- *
275
- * @example
276
- * ```tsx
277
- * function Form() {
278
- * const announcer = useAnnouncer();
279
- *
280
- * const onSubmit = async () => {
281
- * try {
282
- * await submitForm();
283
- * announcer.announce('Form submitted successfully');
284
- * } catch (error) {
285
- * announcer.announce('Error submitting form', 'assertive');
286
- * }
287
- * };
288
- *
289
- * return <form onSubmit={onSubmit}>...</form>;
290
- * }
291
- * ```
292
- */
293
- export function useAnnouncer(): UseAnnouncerResult {
294
- // During SSR, return no-op functions
295
- if (isServer) {
296
- return {
297
- announce: () => {},
298
- clear: () => {},
299
- };
300
- }
301
-
302
- // Ensure the announcer is initialized
303
- createEffect(() => {
304
- // Initialize on first use
305
- if (!liveAnnouncer) {
306
- liveAnnouncer = new LiveAnnouncer();
307
- }
308
- });
309
-
310
- return {
311
- announce: (
312
- message: Message,
313
- assertiveness: Assertiveness = 'assertive',
314
- timeout: number = LIVEREGION_TIMEOUT_DELAY
315
- ) => {
316
- announce(message, assertiveness, timeout);
317
- },
318
- clear: (assertiveness?: Assertiveness) => {
319
- clearAnnouncer(assertiveness);
320
- },
321
- };
322
- }
1
+ /**
2
+ * Live announcer for solidaria
3
+ *
4
+ * Provides functions to make announcements to screen readers using
5
+ * ARIA live regions. Useful for announcing dynamic content changes.
6
+ *
7
+ * Port of react-aria's @react-aria/live-announcer.
8
+ *
9
+ * SSR Safety: All functions are safe to call during SSR. The announcer
10
+ * will only be created when running in the browser.
11
+ */
12
+
13
+ import { onCleanup, createEffect } from "solid-js";
14
+ import { isServer } from "solid-js/web";
15
+
16
+ export type Assertiveness = "assertive" | "polite";
17
+
18
+ export type Message = string | { "aria-labelledby": string };
19
+
20
+ const LIVEREGION_TIMEOUT_DELAY = 7000;
21
+
22
+ /**
23
+ * Singleton class that manages live region announcements.
24
+ * Implemented using vanilla DOM for simplicity and framework independence.
25
+ */
26
+ class LiveAnnouncer {
27
+ node: HTMLElement | null = null;
28
+ assertiveLog: HTMLElement | null = null;
29
+ politeLog: HTMLElement | null = null;
30
+
31
+ constructor() {
32
+ if (typeof document !== "undefined") {
33
+ this.node = document.createElement("div");
34
+ this.node.dataset.liveAnnouncer = "true";
35
+ // Visually hidden styles
36
+ Object.assign(this.node.style, {
37
+ border: "0",
38
+ clip: "rect(0 0 0 0)",
39
+ clipPath: "inset(50%)",
40
+ height: "1px",
41
+ margin: "-1px",
42
+ overflow: "hidden",
43
+ padding: "0",
44
+ position: "absolute",
45
+ width: "1px",
46
+ whiteSpace: "nowrap",
47
+ });
48
+
49
+ this.assertiveLog = this.createLog("assertive");
50
+ this.node.appendChild(this.assertiveLog);
51
+
52
+ this.politeLog = this.createLog("polite");
53
+ this.node.appendChild(this.politeLog);
54
+
55
+ document.body.prepend(this.node);
56
+ }
57
+ }
58
+
59
+ isAttached(): boolean {
60
+ return this.node?.isConnected ?? false;
61
+ }
62
+
63
+ createLog(ariaLive: string): HTMLElement {
64
+ const node = document.createElement("div");
65
+ node.setAttribute("role", "log");
66
+ node.setAttribute("aria-live", ariaLive);
67
+ node.setAttribute("aria-relevant", "additions");
68
+ return node;
69
+ }
70
+
71
+ destroy(): void {
72
+ if (!this.node) {
73
+ return;
74
+ }
75
+
76
+ document.body.removeChild(this.node);
77
+ this.node = null;
78
+ }
79
+
80
+ announce(
81
+ message: Message,
82
+ assertiveness: Assertiveness = "assertive",
83
+ timeout: number = LIVEREGION_TIMEOUT_DELAY,
84
+ ): void {
85
+ if (!this.node) {
86
+ return;
87
+ }
88
+
89
+ const node = document.createElement("div");
90
+ if (typeof message === "object") {
91
+ // To read an aria-labelledby, the element must have an appropriate role, such as img.
92
+ node.setAttribute("role", "img");
93
+ node.setAttribute("aria-labelledby", message["aria-labelledby"]);
94
+ } else {
95
+ node.textContent = message;
96
+ }
97
+
98
+ if (assertiveness === "assertive") {
99
+ this.assertiveLog?.appendChild(node);
100
+ } else {
101
+ this.politeLog?.appendChild(node);
102
+ }
103
+
104
+ if (message !== "") {
105
+ setTimeout(() => {
106
+ node.remove();
107
+ }, timeout);
108
+ }
109
+ }
110
+
111
+ clear(assertiveness?: Assertiveness): void {
112
+ if (!this.node) {
113
+ return;
114
+ }
115
+
116
+ if ((!assertiveness || assertiveness === "assertive") && this.assertiveLog) {
117
+ this.assertiveLog.innerHTML = "";
118
+ }
119
+
120
+ if ((!assertiveness || assertiveness === "polite") && this.politeLog) {
121
+ this.politeLog.innerHTML = "";
122
+ }
123
+ }
124
+ }
125
+
126
+ let liveAnnouncer: LiveAnnouncer | null = null;
127
+
128
+ /**
129
+ * Announces a message to screen readers using ARIA live regions.
130
+ *
131
+ * @param message - The message to announce, or an object with aria-labelledby
132
+ * @param assertiveness - 'assertive' interrupts, 'polite' waits for a pause
133
+ * @param timeout - How long to keep the message in the DOM (default 7000ms)
134
+ *
135
+ * @example
136
+ * ```tsx
137
+ * // Simple announcement
138
+ * announce('Item added to cart');
139
+ *
140
+ * // Polite announcement (won't interrupt)
141
+ * announce('3 results found', 'polite');
142
+ *
143
+ * // Using aria-labelledby for complex content
144
+ * announce({ 'aria-labelledby': 'my-element-id' });
145
+ * ```
146
+ */
147
+ export function announce(
148
+ message: Message,
149
+ assertiveness: Assertiveness = "assertive",
150
+ timeout: number = LIVEREGION_TIMEOUT_DELAY,
151
+ ): void {
152
+ if (!liveAnnouncer) {
153
+ liveAnnouncer = new LiveAnnouncer();
154
+ // Wait for the live announcer regions to be added to the DOM, then announce.
155
+ // Otherwise Safari won't announce the message if it's added too quickly.
156
+ // Found most times less than 100ms were not consistent when announcing with Safari.
157
+
158
+ // Check for test environment
159
+ const isTestEnv =
160
+ typeof (globalThis as Record<string, unknown>).IS_SOLIDARIA_TEST === "boolean"
161
+ ? (globalThis as Record<string, unknown>).IS_SOLIDARIA_TEST
162
+ : typeof (globalThis as Record<string, unknown>).vitest !== "undefined";
163
+
164
+ if (!isTestEnv) {
165
+ setTimeout(() => {
166
+ if (liveAnnouncer?.isAttached()) {
167
+ liveAnnouncer?.announce(message, assertiveness, timeout);
168
+ }
169
+ }, 100);
170
+ } else {
171
+ liveAnnouncer.announce(message, assertiveness, timeout);
172
+ }
173
+ } else {
174
+ liveAnnouncer.announce(message, assertiveness, timeout);
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Clears all queued announcements for the given assertiveness level.
180
+ *
181
+ * @param assertiveness - Which log to clear ('assertive' or 'polite')
182
+ *
183
+ * @example
184
+ * ```tsx
185
+ * // Clear assertive announcements
186
+ * clearAnnouncer('assertive');
187
+ *
188
+ * // Clear polite announcements
189
+ * clearAnnouncer('polite');
190
+ * ```
191
+ */
192
+ export function clearAnnouncer(assertiveness?: Assertiveness): void {
193
+ if (liveAnnouncer) {
194
+ liveAnnouncer.clear(assertiveness);
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Removes the live announcer from the DOM entirely.
200
+ * Call this when unmounting your app or when announcements are no longer needed.
201
+ *
202
+ * @example
203
+ * ```tsx
204
+ * // Clean up on app unmount
205
+ * onCleanup(() => {
206
+ * destroyAnnouncer();
207
+ * });
208
+ * ```
209
+ */
210
+ export function destroyAnnouncer(): void {
211
+ if (liveAnnouncer) {
212
+ liveAnnouncer.destroy();
213
+ liveAnnouncer = null;
214
+ }
215
+ }
216
+
217
+ export interface UseAnnouncerResult {
218
+ /** Announce a message to screen readers. */
219
+ announce: (message: Message, assertiveness?: Assertiveness, timeout?: number) => void;
220
+ /** Clear announcements for the given assertiveness level. */
221
+ clear: (assertiveness?: Assertiveness) => void;
222
+ }
223
+
224
+ /**
225
+ * Hook that provides access to the live announcer with automatic cleanup.
226
+ *
227
+ * This is the recommended way to use the announcer in SolidJS components.
228
+ * It ensures the announcer is created only on the client and provides
229
+ * type-safe methods for announcing and clearing messages.
230
+ *
231
+ * SSR Safety: Returns no-op functions during SSR. The announcer is only
232
+ * created when the component mounts on the client.
233
+ *
234
+ * @example
235
+ * ```tsx
236
+ * function SearchResults(props) {
237
+ * const announcer = useAnnouncer();
238
+ *
239
+ * createEffect(() => {
240
+ * const count = props.results.length;
241
+ * announcer.announce(`${count} results found`, 'polite');
242
+ * });
243
+ *
244
+ * return <ul>...</ul>;
245
+ * }
246
+ * ```
247
+ *
248
+ * @example
249
+ * ```tsx
250
+ * function Form() {
251
+ * const announcer = useAnnouncer();
252
+ *
253
+ * const onSubmit = async () => {
254
+ * try {
255
+ * await submitForm();
256
+ * announcer.announce('Form submitted successfully');
257
+ * } catch (error) {
258
+ * announcer.announce('Error submitting form', 'assertive');
259
+ * }
260
+ * };
261
+ *
262
+ * return <form onSubmit={onSubmit}>...</form>;
263
+ * }
264
+ * ```
265
+ */
266
+ export function useAnnouncer(): UseAnnouncerResult {
267
+ // During SSR, return no-op functions
268
+ if (isServer) {
269
+ return {
270
+ announce: () => {},
271
+ clear: () => {},
272
+ };
273
+ }
274
+
275
+ // Ensure the announcer is initialized
276
+ createEffect(() => {
277
+ // Initialize on first use
278
+ if (!liveAnnouncer) {
279
+ liveAnnouncer = new LiveAnnouncer();
280
+ }
281
+ });
282
+
283
+ return {
284
+ announce: (
285
+ message: Message,
286
+ assertiveness: Assertiveness = "assertive",
287
+ timeout: number = LIVEREGION_TIMEOUT_DELAY,
288
+ ) => {
289
+ announce(message, assertiveness, timeout);
290
+ },
291
+ clear: (assertiveness?: Assertiveness) => {
292
+ clearAnnouncer(assertiveness);
293
+ },
294
+ };
295
+ }
@@ -1,9 +1,9 @@
1
- export {
2
- announce,
3
- clearAnnouncer,
4
- destroyAnnouncer,
5
- useAnnouncer,
6
- type Assertiveness,
7
- type Message,
8
- type UseAnnouncerResult,
9
- } from './announce';
1
+ export {
2
+ announce,
3
+ clearAnnouncer,
4
+ destroyAnnouncer,
5
+ useAnnouncer,
6
+ type Assertiveness,
7
+ type Message,
8
+ type UseAnnouncerResult,
9
+ } from "./announce";