@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,349 +1,333 @@
1
- /**
2
- * Provides the behavior and accessibility implementation for a slider component.
3
- * A slider allows users to select a value from a range.
4
- * Based on @react-aria/slider useSlider.
5
- */
6
-
7
- import { type JSX, onCleanup, onMount } from 'solid-js';
8
- import { createLabel } from '../label/createLabel';
9
- import { createFocusRing } from '../interactions/createFocusRing';
10
- import { filterDOMProps } from '../utils/filterDOMProps';
11
- import { mergeProps } from '../utils/mergeProps';
12
- import { createId } from '../ssr';
13
- import { access, type MaybeAccessor } from '../utils/reactivity';
14
- import type { SliderState, SliderOrientation } from '@proyecto-viviana/solid-stately';
15
-
16
- export interface AriaSliderProps {
17
- /** An ID for the slider. */
18
- id?: string;
19
- /** Whether the slider is disabled. */
20
- isDisabled?: boolean;
21
- /** The label for the slider. */
22
- label?: JSX.Element;
23
- /** An accessible label for the slider when no visible label is provided. */
24
- 'aria-label'?: string;
25
- /** The ID of an element that labels the slider. */
26
- 'aria-labelledby'?: string;
27
- /** The ID of an element that describes the slider. */
28
- 'aria-describedby'?: string;
29
- /** The orientation of the slider. */
30
- orientation?: SliderOrientation;
31
- }
32
-
33
- export interface SliderAria {
34
- /** Props for the label element. */
35
- labelProps: JSX.HTMLAttributes<HTMLElement>;
36
- /** Props for the root group element. */
37
- groupProps: JSX.HTMLAttributes<HTMLElement>;
38
- /** Props for the track element. */
39
- trackProps: JSX.HTMLAttributes<HTMLElement>;
40
- /** Props for the thumb element. */
41
- thumbProps: JSX.HTMLAttributes<HTMLElement>;
42
- /** Props for the hidden input element. */
43
- inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
44
- /** Props for the output element (showing current value). */
45
- outputProps: JSX.HTMLAttributes<HTMLElement>;
46
- }
47
-
48
- /**
49
- * Provides the behavior and accessibility implementation for a slider.
50
- */
51
- export function createSlider(
52
- props: MaybeAccessor<AriaSliderProps>,
53
- state: SliderState,
54
- trackRef?: () => HTMLElement | null
55
- ): SliderAria {
56
- const getProps = () => access(props);
57
- const id = createId(getProps().id);
58
-
59
- // Generate IDs for associated elements
60
- const inputId = `${id}-input`;
61
- const outputId = `${id}-output`;
62
-
63
- // Filter DOM props
64
- const domProps = () =>
65
- filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
66
-
67
- // Label handling
68
- const { labelProps, fieldProps } = createLabel({
69
- get id() {
70
- return inputId;
71
- },
72
- get label() {
73
- return getProps().label;
74
- },
75
- get 'aria-label'() {
76
- return getProps()['aria-label'];
77
- },
78
- get 'aria-labelledby'() {
79
- return getProps()['aria-labelledby'];
80
- },
81
- labelElementType: 'span',
82
- });
83
-
84
- // Focus ring for keyboard focus styling
85
- const { isFocusVisible, focusProps } = createFocusRing({
86
- within: true,
87
- });
88
-
89
- // Track pointer state for drag handling
90
- let currentPointerId: number | null = null;
91
-
92
- // Calculate position from pointer event
93
- const getPositionFromPointer = (clientX: number, clientY: number): number => {
94
- const track = trackRef?.();
95
- if (!track) return 0;
96
-
97
- const rect = track.getBoundingClientRect();
98
- const isVertical = state.orientation === 'vertical';
99
-
100
- let position: number;
101
- if (isVertical) {
102
- position = (rect.bottom - clientY) / rect.height;
103
- } else {
104
- position = (clientX - rect.left) / rect.width;
105
- }
106
-
107
- return Math.max(0, Math.min(1, position));
108
- };
109
-
110
- // Handle pointer down on track
111
- const onTrackPointerDown = (e: PointerEvent) => {
112
- if (state.isDisabled || e.button !== 0) return;
113
-
114
- e.preventDefault();
115
- currentPointerId = e.pointerId;
116
-
117
- const track = trackRef?.();
118
- if (track) {
119
- track.setPointerCapture(e.pointerId);
120
- }
121
-
122
- const percent = getPositionFromPointer(e.clientX, e.clientY);
123
- state.setValuePercent(percent);
124
- state.setDragging(true);
125
- };
126
-
127
- // Handle pointer move for dragging
128
- const onTrackPointerMove = (e: PointerEvent) => {
129
- if (!state.isDragging() || e.pointerId !== currentPointerId) return;
130
-
131
- const percent = getPositionFromPointer(e.clientX, e.clientY);
132
- state.setValuePercent(percent);
133
- };
134
-
135
- // Handle pointer up to end drag
136
- const onTrackPointerUp = (e: PointerEvent) => {
137
- if (e.pointerId !== currentPointerId) return;
138
-
139
- const track = trackRef?.();
140
- if (track) {
141
- track.releasePointerCapture(e.pointerId);
142
- }
143
-
144
- currentPointerId = null;
145
- state.setDragging(false);
146
- };
147
-
148
- // Keyboard navigation for thumb
149
- const onThumbKeyDown = (e: KeyboardEvent) => {
150
- if (state.isDisabled) return;
151
-
152
- const isVertical = state.orientation === 'vertical';
153
-
154
- switch (e.key) {
155
- case 'ArrowRight':
156
- case 'ArrowUp':
157
- e.preventDefault();
158
- if ((e.key === 'ArrowRight' && !isVertical) || (e.key === 'ArrowUp' && isVertical)) {
159
- state.increment();
160
- } else {
161
- state.decrement();
162
- }
163
- break;
164
- case 'ArrowLeft':
165
- case 'ArrowDown':
166
- e.preventDefault();
167
- if ((e.key === 'ArrowLeft' && !isVertical) || (e.key === 'ArrowDown' && isVertical)) {
168
- state.decrement();
169
- } else {
170
- state.increment();
171
- }
172
- break;
173
- case 'PageUp':
174
- e.preventDefault();
175
- state.increment(state.pageStep / state.step);
176
- break;
177
- case 'PageDown':
178
- e.preventDefault();
179
- state.decrement(state.pageStep / state.step);
180
- break;
181
- case 'Home':
182
- e.preventDefault();
183
- state.setValue(state.minValue);
184
- break;
185
- case 'End':
186
- e.preventDefault();
187
- state.setValue(state.maxValue);
188
- break;
189
- }
190
- };
191
-
192
- // Handle focus events
193
- const onFocus = () => {
194
- state.setFocused(true);
195
- };
196
-
197
- const onBlur = () => {
198
- state.setFocused(false);
199
- };
200
-
201
- // Handle pointer down on thumb (for direct thumb dragging)
202
- const onThumbPointerDown = (e: PointerEvent) => {
203
- if (state.isDisabled || e.button !== 0) return;
204
-
205
- e.preventDefault();
206
- e.stopPropagation(); // Prevent track from also handling
207
- currentPointerId = e.pointerId;
208
-
209
- // Capture pointer on document for smooth dragging
210
- document.body.setPointerCapture(e.pointerId);
211
- state.setDragging(true);
212
- };
213
-
214
- // Global pointer move handler for thumb dragging
215
- const onDocumentPointerMove = (e: PointerEvent) => {
216
- if (!state.isDragging() || e.pointerId !== currentPointerId) return;
217
-
218
- const percent = getPositionFromPointer(e.clientX, e.clientY);
219
- state.setValuePercent(percent);
220
- };
221
-
222
- // Global pointer up handler
223
- const onDocumentPointerUp = (e: PointerEvent) => {
224
- if (e.pointerId !== currentPointerId) return;
225
-
226
- try {
227
- document.body.releasePointerCapture(e.pointerId);
228
- } catch {
229
- // Ignore if capture was already released
230
- }
231
-
232
- currentPointerId = null;
233
- state.setDragging(false);
234
- };
235
-
236
- // Set up global listeners on mount (client-side only)
237
- onMount(() => {
238
- if (typeof document === 'undefined') return;
239
-
240
- document.addEventListener('pointermove', onDocumentPointerMove);
241
- document.addEventListener('pointerup', onDocumentPointerUp);
242
- document.addEventListener('pointercancel', onDocumentPointerUp);
243
-
244
- // Cleanup when component unmounts
245
- onCleanup(() => {
246
- document.removeEventListener('pointermove', onDocumentPointerMove);
247
- document.removeEventListener('pointerup', onDocumentPointerUp);
248
- document.removeEventListener('pointercancel', onDocumentPointerUp);
249
- });
250
- });
251
-
252
- return {
253
- get labelProps() {
254
- return labelProps as JSX.HTMLAttributes<HTMLElement>;
255
- },
256
- get groupProps() {
257
- return mergeProps(
258
- domProps(),
259
- fieldProps as Record<string, unknown>,
260
- {
261
- role: 'group',
262
- 'data-disabled': state.isDisabled || undefined,
263
- 'data-orientation': state.orientation,
264
- } as Record<string, unknown>
265
- ) as JSX.HTMLAttributes<HTMLElement>;
266
- },
267
- get trackProps() {
268
- return {
269
- onPointerDown: onTrackPointerDown,
270
- onPointerMove: onTrackPointerMove,
271
- onPointerUp: onTrackPointerUp,
272
- onPointerCancel: onTrackPointerUp,
273
- style: {
274
- position: 'relative',
275
- 'touch-action': 'none',
276
- },
277
- 'data-disabled': state.isDisabled || undefined,
278
- 'data-orientation': state.orientation,
279
- 'data-dragging': state.isDragging() || undefined,
280
- } as JSX.HTMLAttributes<HTMLElement>;
281
- },
282
- get thumbProps() {
283
- const percent = state.getValuePercent();
284
- const isVertical = state.orientation === 'vertical';
285
-
286
- return mergeProps(
287
- focusProps as Record<string, unknown>,
288
- {
289
- role: 'slider',
290
- tabIndex: state.isDisabled ? undefined : 0,
291
- 'aria-valuemin': state.minValue,
292
- 'aria-valuemax': state.maxValue,
293
- 'aria-valuenow': state.value(),
294
- 'aria-valuetext': state.getFormattedValue(),
295
- 'aria-orientation': state.orientation,
296
- 'aria-disabled': state.isDisabled || undefined,
297
- 'aria-labelledby': (labelProps as { id?: string }).id,
298
- onPointerDown: onThumbPointerDown,
299
- onKeyDown: onThumbKeyDown,
300
- onFocus,
301
- onBlur,
302
- style: {
303
- position: 'absolute',
304
- [isVertical ? 'bottom' : 'left']: `${percent * 100}%`,
305
- transform: isVertical ? 'translateY(50%)' : 'translateX(-50%)',
306
- },
307
- 'data-disabled': state.isDisabled || undefined,
308
- 'data-dragging': state.isDragging() || undefined,
309
- 'data-focus-visible': isFocusVisible() || undefined,
310
- } as Record<string, unknown>
311
- ) as JSX.HTMLAttributes<HTMLElement>;
312
- },
313
- get inputProps() {
314
- return {
315
- type: 'range',
316
- id: inputId,
317
- min: state.minValue,
318
- max: state.maxValue,
319
- step: state.step,
320
- value: state.value(),
321
- disabled: state.isDisabled,
322
- 'aria-hidden': true,
323
- tabIndex: -1,
324
- style: {
325
- position: 'absolute',
326
- width: '1px',
327
- height: '1px',
328
- padding: '0',
329
- margin: '-1px',
330
- overflow: 'hidden',
331
- clip: 'rect(0, 0, 0, 0)',
332
- 'white-space': 'nowrap',
333
- border: '0',
334
- },
335
- onChange: (e: Event) => {
336
- const target = e.target as HTMLInputElement;
337
- state.setValue(parseFloat(target.value));
338
- },
339
- } as JSX.InputHTMLAttributes<HTMLInputElement>;
340
- },
341
- get outputProps() {
342
- return {
343
- id: outputId,
344
- 'for': inputId,
345
- 'aria-live': 'off',
346
- } as JSX.HTMLAttributes<HTMLElement>;
347
- },
348
- };
349
- }
1
+ /**
2
+ * Provides the behavior and accessibility implementation for a slider component.
3
+ * A slider allows users to select a value from a range.
4
+ * Based on @react-aria/slider useSlider.
5
+ */
6
+
7
+ import { type JSX, onCleanup, onMount } from "solid-js";
8
+ import { createLabel } from "../label/createLabel";
9
+ import { createFocusRing } from "../interactions/createFocusRing";
10
+ import { filterDOMProps } from "../utils/filterDOMProps";
11
+ import { focusWithoutScrolling } from "../utils/focus";
12
+ import { mergeProps } from "../utils/mergeProps";
13
+ import { createId } from "../ssr";
14
+ import { access, type MaybeAccessor } from "../utils/reactivity";
15
+ import type { SliderState, SliderOrientation } from "@proyecto-viviana/solid-stately";
16
+
17
+ export interface AriaSliderProps {
18
+ /** An ID for the slider. */
19
+ id?: string;
20
+ /** Whether the slider is disabled. */
21
+ isDisabled?: boolean;
22
+ /** The label for the slider. */
23
+ label?: JSX.Element;
24
+ /** An accessible label for the slider when no visible label is provided. */
25
+ "aria-label"?: string;
26
+ /** The ID of an element that labels the slider. */
27
+ "aria-labelledby"?: string;
28
+ /** The ID of an element that describes the slider. */
29
+ "aria-describedby"?: string;
30
+ /** The orientation of the slider. */
31
+ orientation?: SliderOrientation;
32
+ /** The name for the form input. */
33
+ name?: string;
34
+ /** The form element this input belongs to. */
35
+ form?: string;
36
+ }
37
+
38
+ export interface SliderAria {
39
+ /** Props for the label element. */
40
+ labelProps: JSX.HTMLAttributes<HTMLElement>;
41
+ /** Props for the root group element. */
42
+ groupProps: JSX.HTMLAttributes<HTMLElement>;
43
+ /** Props for the track element. */
44
+ trackProps: JSX.HTMLAttributes<HTMLElement>;
45
+ /** Props for the thumb element. */
46
+ thumbProps: JSX.HTMLAttributes<HTMLElement>;
47
+ /** Props for the hidden input element. */
48
+ inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;
49
+ /** Props for the output element (showing current value). */
50
+ outputProps: JSX.HTMLAttributes<HTMLElement>;
51
+ }
52
+
53
+ /**
54
+ * Provides the behavior and accessibility implementation for a slider.
55
+ */
56
+ export function createSlider(
57
+ props: MaybeAccessor<AriaSliderProps>,
58
+ state: SliderState,
59
+ trackRef?: () => HTMLElement | null,
60
+ inputRef?: () => HTMLInputElement | null,
61
+ ): SliderAria {
62
+ const getProps = () => access(props);
63
+ const id = createId(getProps().id);
64
+
65
+ // Generate IDs for associated elements
66
+ const inputId = `${id}-input`;
67
+ const outputId = `${id}-output`;
68
+
69
+ // Filter DOM props
70
+ const domProps = () =>
71
+ filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
72
+
73
+ // Label handling
74
+ const { labelProps, fieldProps } = createLabel({
75
+ get id() {
76
+ return inputId;
77
+ },
78
+ get label() {
79
+ return getProps().label;
80
+ },
81
+ get "aria-label"() {
82
+ return getProps()["aria-label"];
83
+ },
84
+ get "aria-labelledby"() {
85
+ return getProps()["aria-labelledby"];
86
+ },
87
+ labelElementType: "span",
88
+ });
89
+
90
+ // Focus ring for keyboard focus styling
91
+ const { isFocusVisible, focusProps } = createFocusRing({
92
+ within: true,
93
+ });
94
+
95
+ // Track pointer state for drag handling
96
+ let currentPointerId: number | null = null;
97
+
98
+ // Calculate position from pointer event
99
+ const getPositionFromPointer = (clientX: number, clientY: number): number => {
100
+ const track = trackRef?.();
101
+ if (!track) return 0;
102
+
103
+ const rect = track.getBoundingClientRect();
104
+ const isVertical = state.orientation === "vertical";
105
+
106
+ let position: number;
107
+ if (isVertical) {
108
+ position = (rect.bottom - clientY) / rect.height;
109
+ } else {
110
+ position = (clientX - rect.left) / rect.width;
111
+ }
112
+
113
+ return Math.max(0, Math.min(1, position));
114
+ };
115
+
116
+ // Handle pointer down on track
117
+ const onTrackPointerDown = (e: PointerEvent) => {
118
+ if (state.isDisabled || e.button !== 0) return;
119
+
120
+ e.preventDefault();
121
+ currentPointerId = e.pointerId;
122
+
123
+ const track = trackRef?.();
124
+ if (track) {
125
+ track.setPointerCapture(e.pointerId);
126
+ }
127
+
128
+ const percent = getPositionFromPointer(e.clientX, e.clientY);
129
+ state.setValuePercent(percent);
130
+ focusWithoutScrolling(inputRef?.() ?? null);
131
+ state.setDragging(true);
132
+ };
133
+
134
+ // Handle pointer move for dragging
135
+ const onTrackPointerMove = (e: PointerEvent) => {
136
+ if (!state.isDragging() || e.pointerId !== currentPointerId) return;
137
+
138
+ const percent = getPositionFromPointer(e.clientX, e.clientY);
139
+ state.setValuePercent(percent);
140
+ };
141
+
142
+ // Handle pointer up to end drag
143
+ const onTrackPointerUp = (e: PointerEvent) => {
144
+ if (e.pointerId !== currentPointerId) return;
145
+
146
+ const track = trackRef?.();
147
+ if (track) {
148
+ track.releasePointerCapture(e.pointerId);
149
+ }
150
+
151
+ currentPointerId = null;
152
+ focusWithoutScrolling(inputRef?.() ?? null);
153
+ state.setDragging(false);
154
+ };
155
+
156
+ // Keyboard navigation that is not consistently handled by the native range input.
157
+ const onThumbKeyDown = (e: KeyboardEvent) => {
158
+ if (state.isDisabled) return;
159
+
160
+ switch (e.key) {
161
+ case "PageUp":
162
+ e.preventDefault();
163
+ state.increment(state.pageStep / state.step);
164
+ break;
165
+ case "PageDown":
166
+ e.preventDefault();
167
+ state.decrement(state.pageStep / state.step);
168
+ break;
169
+ case "Home":
170
+ e.preventDefault();
171
+ state.setValue(state.minValue);
172
+ break;
173
+ case "End":
174
+ e.preventDefault();
175
+ state.setValue(state.maxValue);
176
+ break;
177
+ }
178
+ };
179
+
180
+ // Handle focus events
181
+ const onFocus = () => {
182
+ state.setFocused(true);
183
+ };
184
+
185
+ const onBlur = () => {
186
+ state.setFocused(false);
187
+ };
188
+
189
+ // Handle pointer down on thumb (for direct thumb dragging)
190
+ const onThumbPointerDown = (e: PointerEvent) => {
191
+ if (state.isDisabled || e.button !== 0) return;
192
+
193
+ e.preventDefault();
194
+ e.stopPropagation(); // Prevent track from also handling
195
+ currentPointerId = e.pointerId;
196
+ focusWithoutScrolling(inputRef?.() ?? null);
197
+
198
+ // Capture pointer on document for smooth dragging
199
+ document.body.setPointerCapture(e.pointerId);
200
+ state.setDragging(true);
201
+ };
202
+
203
+ // Global pointer move handler for thumb dragging
204
+ const onDocumentPointerMove = (e: PointerEvent) => {
205
+ if (!state.isDragging() || e.pointerId !== currentPointerId) return;
206
+
207
+ const percent = getPositionFromPointer(e.clientX, e.clientY);
208
+ state.setValuePercent(percent);
209
+ };
210
+
211
+ // Global pointer up handler
212
+ const onDocumentPointerUp = (e: PointerEvent) => {
213
+ if (e.pointerId !== currentPointerId) return;
214
+
215
+ try {
216
+ document.body.releasePointerCapture(e.pointerId);
217
+ } catch {
218
+ // Ignore if capture was already released
219
+ }
220
+
221
+ currentPointerId = null;
222
+ focusWithoutScrolling(inputRef?.() ?? null);
223
+ state.setDragging(false);
224
+ };
225
+
226
+ // Set up global listeners on mount (client-side only)
227
+ onMount(() => {
228
+ if (typeof document === "undefined") return;
229
+
230
+ document.addEventListener("pointermove", onDocumentPointerMove);
231
+ document.addEventListener("pointerup", onDocumentPointerUp);
232
+ document.addEventListener("pointercancel", onDocumentPointerUp);
233
+
234
+ // Cleanup when component unmounts
235
+ onCleanup(() => {
236
+ document.removeEventListener("pointermove", onDocumentPointerMove);
237
+ document.removeEventListener("pointerup", onDocumentPointerUp);
238
+ document.removeEventListener("pointercancel", onDocumentPointerUp);
239
+ });
240
+ });
241
+
242
+ const labelledBy = () => (fieldProps as { "aria-labelledby"?: string })["aria-labelledby"];
243
+ const ariaLabel = () => (fieldProps as { "aria-label"?: string })["aria-label"];
244
+
245
+ return {
246
+ get labelProps() {
247
+ return labelProps as JSX.HTMLAttributes<HTMLElement>;
248
+ },
249
+ get groupProps() {
250
+ return mergeProps(
251
+ domProps(),
252
+ fieldProps as Record<string, unknown>,
253
+ {
254
+ role: "group",
255
+ "data-disabled": state.isDisabled || undefined,
256
+ "data-orientation": state.orientation,
257
+ } as Record<string, unknown>,
258
+ ) as JSX.HTMLAttributes<HTMLElement>;
259
+ },
260
+ get trackProps() {
261
+ return {
262
+ onPointerDown: onTrackPointerDown,
263
+ onPointerMove: onTrackPointerMove,
264
+ onPointerUp: onTrackPointerUp,
265
+ onPointerCancel: onTrackPointerUp,
266
+ style: {
267
+ position: "relative",
268
+ "touch-action": "none",
269
+ },
270
+ "data-disabled": state.isDisabled || undefined,
271
+ "data-orientation": state.orientation,
272
+ "data-dragging": state.isDragging() || undefined,
273
+ } as JSX.HTMLAttributes<HTMLElement>;
274
+ },
275
+ get thumbProps() {
276
+ const percent = state.getValuePercent();
277
+ const isVertical = state.orientation === "vertical";
278
+
279
+ return {
280
+ onPointerDown: onThumbPointerDown,
281
+ onKeyDown: onThumbKeyDown,
282
+ style: {
283
+ position: "absolute",
284
+ [isVertical ? "bottom" : "left"]: `${percent * 100}%`,
285
+ transform: isVertical ? "translateY(50%)" : "translateX(-50%)",
286
+ "touch-action": "none",
287
+ },
288
+ "data-disabled": state.isDisabled || undefined,
289
+ "data-dragging": state.isDragging() || undefined,
290
+ } as JSX.HTMLAttributes<HTMLElement>;
291
+ },
292
+ get inputProps() {
293
+ const p = getProps();
294
+
295
+ return mergeProps(
296
+ focusProps as Record<string, unknown>,
297
+ {
298
+ type: "range",
299
+ id: inputId,
300
+ min: state.minValue,
301
+ max: state.maxValue,
302
+ step: state.step,
303
+ value: state.value(),
304
+ name: p.name,
305
+ form: p.form,
306
+ disabled: state.isDisabled,
307
+ "aria-orientation": state.orientation,
308
+ "aria-valuetext": state.getFormattedValue(),
309
+ "aria-labelledby": labelledBy(),
310
+ "aria-label": labelledBy() ? undefined : ariaLabel(),
311
+ tabIndex: state.isDisabled ? undefined : 0,
312
+ onInput: (e: Event) => {
313
+ const target = e.target as HTMLInputElement;
314
+ state.setValue(parseFloat(target.value));
315
+ },
316
+ onChange: (e: Event) => {
317
+ const target = e.target as HTMLInputElement;
318
+ state.setValue(parseFloat(target.value));
319
+ },
320
+ onFocus,
321
+ onBlur,
322
+ } as Record<string, unknown>,
323
+ ) as JSX.InputHTMLAttributes<HTMLInputElement>;
324
+ },
325
+ get outputProps() {
326
+ return {
327
+ id: outputId,
328
+ for: inputId,
329
+ "aria-live": "off",
330
+ } as JSX.HTMLAttributes<HTMLElement>;
331
+ },
332
+ };
333
+ }