@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
package/src/ssr/index.tsx CHANGED
@@ -1,370 +1,331 @@
1
- /**
2
- * SSR utilities for Solidaria
3
- *
4
- * SolidJS has built-in SSR support with `isServer` and `createUniqueId()`.
5
- * These utilities provide a consistent API matching React-Aria's patterns
6
- * with additional features for hydration management.
7
- */
8
-
9
- import {
10
- type Accessor,
11
- type JSX,
12
- type ParentProps,
13
- createContext,
14
- createEffect,
15
- createMemo,
16
- createSignal,
17
- onCleanup,
18
- onMount,
19
- useContext,
20
- createUniqueId,
21
- } from 'solid-js';
22
- import { isServer } from 'solid-js/web';
23
-
24
- // ============================================
25
- // TYPES
26
- // ============================================
27
-
28
- export interface SSRProviderProps extends ParentProps {}
29
-
30
- export interface SSRContextValue {
31
- /** Whether currently rendering on the server. */
32
- isSSR: boolean;
33
- /** Prefix for generated IDs, allowing nested providers. */
34
- prefix: string;
35
- }
36
-
37
- // ============================================
38
- // CONTEXT
39
- // ============================================
40
-
41
- const SSRContext = createContext<SSRContextValue>({
42
- isSSR: isServer,
43
- prefix: '',
44
- });
45
-
46
- // ============================================
47
- // BASIC UTILITIES
48
- // ============================================
49
-
50
- /**
51
- * Returns whether the component is currently being server side rendered.
52
- * Can be used to delay browser-specific rendering until after hydration.
53
- *
54
- * Note: This returns a static boolean. For reactive hydration detection,
55
- * use `createHydrationState()`.
56
- */
57
- export function createIsSSR(): boolean {
58
- return isServer;
59
- }
60
-
61
- /**
62
- * Check if we can use DOM APIs.
63
- * This is useful for code that needs to run only in the browser.
64
- */
65
- export const canUseDOM = !isServer;
66
-
67
- /**
68
- * Generate a unique ID that is stable across server and client.
69
- * Uses SolidJS's built-in createUniqueId which handles SSR correctly.
70
- *
71
- * @param defaultId - Optional default ID to use instead of generating one.
72
- *
73
- * @example
74
- * ```tsx
75
- * function TextField(props) {
76
- * const inputId = createId(props.id);
77
- * return (
78
- * <>
79
- * <label for={inputId}>{props.label}</label>
80
- * <input id={inputId} />
81
- * </>
82
- * );
83
- * }
84
- * ```
85
- */
86
- export function createId(defaultId?: string): string {
87
- if (defaultId) {
88
- return defaultId;
89
- }
90
- const ctx = useContext(SSRContext);
91
- const uniqueId = createUniqueId();
92
- return ctx.prefix ? `solidaria-${ctx.prefix}-${uniqueId}` : `solidaria-${uniqueId}`;
93
- }
94
-
95
- // ============================================
96
- // SSR PROVIDER
97
- // ============================================
98
-
99
- /**
100
- * Provides SSR context to the component tree.
101
- *
102
- * While SolidJS handles most SSR scenarios automatically, this provider
103
- * can be useful for:
104
- * - Nested ID prefixes to avoid collisions in micro-frontends
105
- * - Explicit hydration boundary markers
106
- * - Testing SSR behavior
107
- *
108
- * @example
109
- * ```tsx
110
- * // Root of your app
111
- * <SSRProvider>
112
- * <App />
113
- * </SSRProvider>
114
- *
115
- * // With custom prefix for micro-frontend
116
- * <SSRProvider prefix="widget">
117
- * <Widget />
118
- * </SSRProvider>
119
- * ```
120
- */
121
- export function SSRProvider(props: SSRProviderProps & { prefix?: string }): JSX.Element {
122
- const parentContext = useContext(SSRContext);
123
-
124
- const value = createMemo<SSRContextValue>(() => ({
125
- isSSR: isServer,
126
- prefix: props.prefix
127
- ? parentContext.prefix
128
- ? `${parentContext.prefix}-${props.prefix}`
129
- : props.prefix
130
- : parentContext.prefix,
131
- }));
132
-
133
- return (
134
- <SSRContext.Provider value={value()}>
135
- {props.children}
136
- </SSRContext.Provider>
137
- );
138
- }
139
-
140
- // ============================================
141
- // HYDRATION STATE
142
- // ============================================
143
-
144
- /**
145
- * Tracks whether the component is currently hydrating.
146
- *
147
- * During server-side rendering, this returns `true`. After hydration
148
- * completes on the client, it switches to `false`. This is useful for
149
- * components that need to show different content during hydration.
150
- *
151
- * @example
152
- * ```tsx
153
- * function ClientOnlyComponent() {
154
- * const isHydrating = createHydrationState();
155
- *
156
- * return (
157
- * <Show when={!isHydrating()} fallback={<LoadingPlaceholder />}>
158
- * <InteractiveWidget />
159
- * </Show>
160
- * );
161
- * }
162
- * ```
163
- */
164
- export function createHydrationState(): Accessor<boolean> {
165
- // On the server, always return true
166
- if (isServer) {
167
- return () => true;
168
- }
169
-
170
- // On the client, track hydration state
171
- const [isHydrating, setIsHydrating] = createSignal(true);
172
-
173
- onMount(() => {
174
- setIsHydrating(false);
175
- });
176
-
177
- return isHydrating;
178
- }
179
-
180
- /**
181
- * Hook that returns `true` during SSR and initial hydration.
182
- * Use this to delay browser-specific code until hydration is complete.
183
- *
184
- * Unlike `createIsSSR()` which is static, this updates reactively
185
- * after hydration completes.
186
- *
187
- * @example
188
- * ```tsx
189
- * function BrowserOnlyFeature() {
190
- * const isSSR = useIsSSR();
191
- *
192
- * createEffect(() => {
193
- * if (!isSSR()) {
194
- * // Safe to access browser APIs here
195
- * window.localStorage.getItem('key');
196
- * }
197
- * });
198
- *
199
- * return <Show when={!isSSR()}>...</Show>;
200
- * }
201
- * ```
202
- */
203
- export function useIsSSR(): Accessor<boolean> {
204
- return createHydrationState();
205
- }
206
-
207
- // ============================================
208
- // SAFE BROWSER EFFECTS
209
- // ============================================
210
-
211
- /**
212
- * Creates an effect that only runs on the client after hydration.
213
- * This is a convenience wrapper that ensures browser-specific code
214
- * doesn't run during SSR.
215
- *
216
- * @param fn - The effect function to run
217
- *
218
- * @example
219
- * ```tsx
220
- * function Analytics() {
221
- * createBrowserEffect(() => {
222
- * // Safe to access window, document, localStorage, etc.
223
- * window.analytics.track('page_view');
224
- * });
225
- *
226
- * return null;
227
- * }
228
- * ```
229
- */
230
- export function createBrowserEffect(fn: () => void | (() => void)): void {
231
- if (isServer) {
232
- return;
233
- }
234
-
235
- createEffect(() => {
236
- const cleanup = fn();
237
- if (typeof cleanup === 'function') {
238
- onCleanup(cleanup);
239
- }
240
- });
241
- }
242
-
243
- /**
244
- * Creates a value that is computed only on the client.
245
- * On the server, returns the fallback value.
246
- *
247
- * @param fn - Function to compute the value on the client
248
- * @param fallback - Value to return during SSR
249
- *
250
- * @example
251
- * ```tsx
252
- * function WindowSize() {
253
- * const width = createBrowserValue(
254
- * () => window.innerWidth,
255
- * 0
256
- * );
257
- *
258
- * return <span>Width: {width()}</span>;
259
- * }
260
- * ```
261
- */
262
- export function createBrowserValue<T>(
263
- fn: () => T,
264
- fallback: T
265
- ): Accessor<T> {
266
- if (isServer) {
267
- return () => fallback;
268
- }
269
-
270
- const [value, setValue] = createSignal<T>(fallback);
271
-
272
- onMount(() => {
273
- setValue(() => fn());
274
- });
275
-
276
- return value;
277
- }
278
-
279
- // ============================================
280
- // WINDOW/DOCUMENT SAFE ACCESS
281
- // ============================================
282
-
283
- /**
284
- * Returns the window object if available, or undefined during SSR.
285
- * Useful for accessing browser globals safely.
286
- *
287
- * @example
288
- * ```tsx
289
- * const win = getWindow();
290
- * if (win) {
291
- * win.addEventListener('resize', handler);
292
- * }
293
- * ```
294
- */
295
- export function getWindow(): Window | undefined {
296
- if (typeof window !== 'undefined') {
297
- return window;
298
- }
299
- return undefined;
300
- }
301
-
302
- /**
303
- * Returns the document object if available, or undefined during SSR.
304
- * Useful for accessing document safely.
305
- *
306
- * @example
307
- * ```tsx
308
- * const doc = getDocument();
309
- * if (doc) {
310
- * doc.addEventListener('keydown', handler);
311
- * }
312
- * ```
313
- */
314
- export function getDocument(): Document | undefined {
315
- if (typeof document !== 'undefined') {
316
- return document;
317
- }
318
- return undefined;
319
- }
320
-
321
- /**
322
- * Returns the owner document of an element, with SSR safety.
323
- *
324
- * @param el - The element to get the owner document from
325
- */
326
- export function getOwnerDocument(el: Element | null | undefined): Document | undefined {
327
- return el?.ownerDocument ?? getDocument();
328
- }
329
-
330
- /**
331
- * Returns the owner window of an element, with SSR safety.
332
- *
333
- * @param el - The element to get the owner window from
334
- */
335
- export function getOwnerWindow(el: Element | null | undefined): Window | undefined {
336
- return getOwnerDocument(el)?.defaultView ?? getWindow();
337
- }
338
-
339
- // ============================================
340
- // PORTAL HELPERS
341
- // ============================================
342
-
343
- /**
344
- * Gets the appropriate container for portals, with SSR safety.
345
- * Returns the specified container, or document.body on the client,
346
- * or undefined during SSR.
347
- *
348
- * @param container - Optional custom container element
349
- *
350
- * @example
351
- * ```tsx
352
- * function Modal(props) {
353
- * const container = getPortalContainer(props.container);
354
- *
355
- * return (
356
- * <Show when={container}>
357
- * <Portal mount={container}>
358
- * {props.children}
359
- * </Portal>
360
- * </Show>
361
- * );
362
- * }
363
- * ```
364
- */
365
- export function getPortalContainer(container?: Element): Element | undefined {
366
- if (container) {
367
- return container;
368
- }
369
- return getDocument()?.body;
370
- }
1
+ /**
2
+ * SSR utilities for Solidaria
3
+ *
4
+ * SolidJS has built-in SSR support with `isServer` and `createUniqueId()`.
5
+ * These utilities provide a consistent API matching React-Aria's patterns
6
+ * with additional features for hydration management.
7
+ */
8
+
9
+ import {
10
+ type Accessor,
11
+ type JSX,
12
+ type ParentProps,
13
+ createContext,
14
+ createEffect,
15
+ createMemo,
16
+ createSignal,
17
+ onCleanup,
18
+ onMount,
19
+ useContext,
20
+ createUniqueId,
21
+ } from "solid-js";
22
+ import { isServer } from "solid-js/web";
23
+
24
+ export interface SSRProviderProps extends ParentProps {}
25
+
26
+ export interface SSRContextValue {
27
+ /** Whether currently rendering on the server. */
28
+ isSSR: boolean;
29
+ /** Prefix for generated IDs, allowing nested providers. */
30
+ prefix: string;
31
+ }
32
+
33
+ const SSRContext = createContext<SSRContextValue>({
34
+ isSSR: isServer,
35
+ prefix: "",
36
+ });
37
+
38
+ /**
39
+ * Returns whether the component is currently being server side rendered.
40
+ * Can be used to delay browser-specific rendering until after hydration.
41
+ *
42
+ * Note: This returns a static boolean. For reactive hydration detection,
43
+ * use `createHydrationState()`.
44
+ */
45
+ export function createIsSSR(): boolean {
46
+ return isServer;
47
+ }
48
+
49
+ /**
50
+ * Check if we can use DOM APIs.
51
+ * This is useful for code that needs to run only in the browser.
52
+ */
53
+ export const canUseDOM = !isServer;
54
+
55
+ /**
56
+ * Generate a unique ID that is stable across server and client.
57
+ * Uses SolidJS's built-in createUniqueId which handles SSR correctly.
58
+ *
59
+ * @param defaultId - Optional default ID to use instead of generating one.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * function TextField(props) {
64
+ * const inputId = createId(props.id);
65
+ * return (
66
+ * <>
67
+ * <label for={inputId}>{props.label}</label>
68
+ * <input id={inputId} />
69
+ * </>
70
+ * );
71
+ * }
72
+ * ```
73
+ */
74
+ export function createId(defaultId?: string): string {
75
+ if (defaultId) {
76
+ return defaultId;
77
+ }
78
+ const ctx = useContext(SSRContext);
79
+ const uniqueId = createUniqueId();
80
+ return ctx.prefix ? `solidaria-${ctx.prefix}-${uniqueId}` : `solidaria-${uniqueId}`;
81
+ }
82
+
83
+ /**
84
+ * Provides SSR context to the component tree.
85
+ *
86
+ * While SolidJS handles most SSR scenarios automatically, this provider
87
+ * can be useful for:
88
+ * - Nested ID prefixes to avoid collisions in micro-frontends
89
+ * - Explicit hydration boundary markers
90
+ * - Testing SSR behavior
91
+ *
92
+ * @example
93
+ * ```tsx
94
+ * // Root of your app
95
+ * <SSRProvider>
96
+ * <App />
97
+ * </SSRProvider>
98
+ *
99
+ * // With custom prefix for micro-frontend
100
+ * <SSRProvider prefix="widget">
101
+ * <Widget />
102
+ * </SSRProvider>
103
+ * ```
104
+ */
105
+ export function SSRProvider(props: SSRProviderProps & { prefix?: string }): JSX.Element {
106
+ const parentContext = useContext(SSRContext);
107
+
108
+ const value = createMemo<SSRContextValue>(() => ({
109
+ isSSR: isServer,
110
+ prefix: props.prefix
111
+ ? parentContext.prefix
112
+ ? `${parentContext.prefix}-${props.prefix}`
113
+ : props.prefix
114
+ : parentContext.prefix,
115
+ }));
116
+
117
+ return <SSRContext.Provider value={value()}>{props.children}</SSRContext.Provider>;
118
+ }
119
+
120
+ /**
121
+ * Tracks whether the component is currently hydrating.
122
+ *
123
+ * During server-side rendering, this returns `true`. After hydration
124
+ * completes on the client, it switches to `false`. This is useful for
125
+ * components that need to show different content during hydration.
126
+ *
127
+ * @example
128
+ * ```tsx
129
+ * function ClientOnlyComponent() {
130
+ * const isHydrating = createHydrationState();
131
+ *
132
+ * return (
133
+ * <Show when={!isHydrating()} fallback={<LoadingPlaceholder />}>
134
+ * <InteractiveWidget />
135
+ * </Show>
136
+ * );
137
+ * }
138
+ * ```
139
+ */
140
+ export function createHydrationState(): Accessor<boolean> {
141
+ // On the server, always return true
142
+ if (isServer) {
143
+ return () => true;
144
+ }
145
+
146
+ // On the client, track hydration state
147
+ const [isHydrating, setIsHydrating] = createSignal(true);
148
+
149
+ onMount(() => {
150
+ setIsHydrating(false);
151
+ });
152
+
153
+ return isHydrating;
154
+ }
155
+
156
+ /**
157
+ * Hook that returns `true` during SSR and initial hydration.
158
+ * Use this to delay browser-specific code until hydration is complete.
159
+ *
160
+ * Unlike `createIsSSR()` which is static, this updates reactively
161
+ * after hydration completes.
162
+ *
163
+ * @example
164
+ * ```tsx
165
+ * function BrowserOnlyFeature() {
166
+ * const isSSR = useIsSSR();
167
+ *
168
+ * createEffect(() => {
169
+ * if (!isSSR()) {
170
+ * // Safe to access browser APIs here
171
+ * window.localStorage.getItem('key');
172
+ * }
173
+ * });
174
+ *
175
+ * return <Show when={!isSSR()}>...</Show>;
176
+ * }
177
+ * ```
178
+ */
179
+ export function useIsSSR(): Accessor<boolean> {
180
+ return createHydrationState();
181
+ }
182
+
183
+ /**
184
+ * Creates an effect that only runs on the client after hydration.
185
+ * This is a convenience wrapper that ensures browser-specific code
186
+ * doesn't run during SSR.
187
+ *
188
+ * @param fn - The effect function to run
189
+ *
190
+ * @example
191
+ * ```tsx
192
+ * function Analytics() {
193
+ * createBrowserEffect(() => {
194
+ * // Safe to access window, document, localStorage, etc.
195
+ * window.analytics.track('page_view');
196
+ * });
197
+ *
198
+ * return null;
199
+ * }
200
+ * ```
201
+ */
202
+ export function createBrowserEffect(fn: () => void | (() => void)): void {
203
+ if (isServer) {
204
+ return;
205
+ }
206
+
207
+ createEffect(() => {
208
+ const cleanup = fn();
209
+ if (typeof cleanup === "function") {
210
+ onCleanup(cleanup);
211
+ }
212
+ });
213
+ }
214
+
215
+ /**
216
+ * Creates a value that is computed only on the client.
217
+ * On the server, returns the fallback value.
218
+ *
219
+ * @param fn - Function to compute the value on the client
220
+ * @param fallback - Value to return during SSR
221
+ *
222
+ * @example
223
+ * ```tsx
224
+ * function WindowSize() {
225
+ * const width = createBrowserValue(
226
+ * () => window.innerWidth,
227
+ * 0
228
+ * );
229
+ *
230
+ * return <span>Width: {width()}</span>;
231
+ * }
232
+ * ```
233
+ */
234
+ export function createBrowserValue<T>(fn: () => T, fallback: T): Accessor<T> {
235
+ if (isServer) {
236
+ return () => fallback;
237
+ }
238
+
239
+ const [value, setValue] = createSignal<T>(fallback);
240
+
241
+ onMount(() => {
242
+ setValue(() => fn());
243
+ });
244
+
245
+ return value;
246
+ }
247
+
248
+ /**
249
+ * Returns the window object if available, or undefined during SSR.
250
+ * Useful for accessing browser globals safely.
251
+ *
252
+ * @example
253
+ * ```tsx
254
+ * const win = getWindow();
255
+ * if (win) {
256
+ * win.addEventListener('resize', handler);
257
+ * }
258
+ * ```
259
+ */
260
+ export function getWindow(): Window | undefined {
261
+ if (typeof window !== "undefined") {
262
+ return window;
263
+ }
264
+ return undefined;
265
+ }
266
+
267
+ /**
268
+ * Returns the document object if available, or undefined during SSR.
269
+ * Useful for accessing document safely.
270
+ *
271
+ * @example
272
+ * ```tsx
273
+ * const doc = getDocument();
274
+ * if (doc) {
275
+ * doc.addEventListener('keydown', handler);
276
+ * }
277
+ * ```
278
+ */
279
+ export function getDocument(): Document | undefined {
280
+ if (typeof document !== "undefined") {
281
+ return document;
282
+ }
283
+ return undefined;
284
+ }
285
+
286
+ /**
287
+ * Returns the owner document of an element, with SSR safety.
288
+ *
289
+ * @param el - The element to get the owner document from
290
+ */
291
+ export function getOwnerDocument(el: Element | null | undefined): Document | undefined {
292
+ return el?.ownerDocument ?? getDocument();
293
+ }
294
+
295
+ /**
296
+ * Returns the owner window of an element, with SSR safety.
297
+ *
298
+ * @param el - The element to get the owner window from
299
+ */
300
+ export function getOwnerWindow(el: Element | null | undefined): Window | undefined {
301
+ return getOwnerDocument(el)?.defaultView ?? getWindow();
302
+ }
303
+
304
+ /**
305
+ * Gets the appropriate container for portals, with SSR safety.
306
+ * Returns the specified container, or document.body on the client,
307
+ * or undefined during SSR.
308
+ *
309
+ * @param container - Optional custom container element
310
+ *
311
+ * @example
312
+ * ```tsx
313
+ * function Modal(props) {
314
+ * const container = getPortalContainer(props.container);
315
+ *
316
+ * return (
317
+ * <Show when={container}>
318
+ * <Portal mount={container}>
319
+ * {props.children}
320
+ * </Portal>
321
+ * </Show>
322
+ * );
323
+ * }
324
+ * ```
325
+ */
326
+ export function getPortalContainer(container?: Element): Element | undefined {
327
+ if (container) {
328
+ return container;
329
+ }
330
+ return getDocument()?.body;
331
+ }