@proyecto-viviana/solidaria-components 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/dist/ActionBar.js +184 -0
  2. package/dist/ActionBar.js.map +1 -0
  3. package/dist/ActionBar.jsx +128 -0
  4. package/dist/ActionBar.jsx.map +1 -0
  5. package/dist/ActionGroup.js +179 -0
  6. package/dist/ActionGroup.js.map +1 -0
  7. package/dist/ActionGroup.jsx +129 -0
  8. package/dist/ActionGroup.jsx.map +1 -0
  9. package/dist/Alert.js +111 -0
  10. package/dist/Alert.js.map +1 -0
  11. package/dist/Alert.jsx +82 -0
  12. package/dist/Alert.jsx.map +1 -0
  13. package/dist/Autocomplete.js +130 -0
  14. package/dist/Autocomplete.js.map +1 -0
  15. package/dist/Autocomplete.jsx +116 -0
  16. package/dist/Autocomplete.jsx.map +1 -0
  17. package/dist/Breadcrumbs.d.ts.map +1 -1
  18. package/dist/Breadcrumbs.js +334 -0
  19. package/dist/Breadcrumbs.js.map +1 -0
  20. package/dist/Breadcrumbs.jsx +266 -0
  21. package/dist/Breadcrumbs.jsx.map +1 -0
  22. package/dist/Button.d.ts.map +1 -1
  23. package/dist/Button.js +348 -0
  24. package/dist/Button.js.map +1 -0
  25. package/dist/Button.jsx +314 -0
  26. package/dist/Button.jsx.map +1 -0
  27. package/dist/Calendar.d.ts +4 -4
  28. package/dist/Calendar.d.ts.map +1 -1
  29. package/dist/Calendar.js +538 -0
  30. package/dist/Calendar.js.map +1 -0
  31. package/dist/Calendar.jsx +333 -0
  32. package/dist/Calendar.jsx.map +1 -0
  33. package/dist/CalendarPicker.d.ts +33 -0
  34. package/dist/CalendarPicker.d.ts.map +1 -0
  35. package/dist/CalendarPicker.js +44 -0
  36. package/dist/CalendarPicker.js.map +1 -0
  37. package/dist/CalendarPicker.jsx +44 -0
  38. package/dist/CalendarPicker.jsx.map +1 -0
  39. package/dist/Checkbox.d.ts +83 -4
  40. package/dist/Checkbox.d.ts.map +1 -1
  41. package/dist/Checkbox.js +923 -0
  42. package/dist/Checkbox.js.map +1 -0
  43. package/dist/Checkbox.jsx +707 -0
  44. package/dist/Checkbox.jsx.map +1 -0
  45. package/dist/Collection.d.ts.map +1 -1
  46. package/dist/Collection.js +202 -0
  47. package/dist/Collection.js.map +1 -0
  48. package/dist/Collection.jsx +152 -0
  49. package/dist/Collection.jsx.map +1 -0
  50. package/dist/Color.d.ts.map +1 -1
  51. package/dist/Color.js +1720 -0
  52. package/dist/Color.js.map +1 -0
  53. package/dist/Color.jsx +1344 -0
  54. package/dist/Color.jsx.map +1 -0
  55. package/dist/ColorEditor.js +208 -0
  56. package/dist/ColorEditor.js.map +1 -0
  57. package/dist/ColorEditor.jsx +120 -0
  58. package/dist/ColorEditor.jsx.map +1 -0
  59. package/dist/ComboBox.d.ts +4 -4
  60. package/dist/ComboBox.d.ts.map +1 -1
  61. package/dist/ComboBox.js +992 -0
  62. package/dist/ComboBox.js.map +1 -0
  63. package/dist/ComboBox.jsx +714 -0
  64. package/dist/ComboBox.jsx.map +1 -0
  65. package/dist/ContextualHelpTrigger.js +146 -0
  66. package/dist/ContextualHelpTrigger.js.map +1 -0
  67. package/dist/ContextualHelpTrigger.jsx +109 -0
  68. package/dist/ContextualHelpTrigger.jsx.map +1 -0
  69. package/dist/DateField.d.ts +3 -3
  70. package/dist/DateField.d.ts.map +1 -1
  71. package/dist/DateField.js +4 -0
  72. package/dist/DateField.jsx +4 -0
  73. package/dist/DateField2.js +499 -0
  74. package/dist/DateField2.js.map +1 -0
  75. package/dist/DateField2.jsx +317 -0
  76. package/dist/DateField2.jsx.map +1 -0
  77. package/dist/DatePicker.d.ts +4 -4
  78. package/dist/DatePicker.d.ts.map +1 -1
  79. package/dist/DatePicker.js +991 -0
  80. package/dist/DatePicker.js.map +1 -0
  81. package/dist/DatePicker.jsx +682 -0
  82. package/dist/DatePicker.jsx.map +1 -0
  83. package/dist/Dialog.d.ts.map +1 -1
  84. package/dist/Dialog.js +337 -0
  85. package/dist/Dialog.js.map +1 -0
  86. package/dist/Dialog.jsx +192 -0
  87. package/dist/Dialog.jsx.map +1 -0
  88. package/dist/Disclosure.d.ts.map +1 -1
  89. package/dist/Disclosure.js +328 -0
  90. package/dist/Disclosure.js.map +1 -0
  91. package/dist/Disclosure.jsx +230 -0
  92. package/dist/Disclosure.jsx.map +1 -0
  93. package/dist/DragAndDrop.d.ts.map +1 -1
  94. package/dist/DragAndDrop.js +176 -0
  95. package/dist/DragAndDrop.js.map +1 -0
  96. package/dist/DragAndDrop.jsx +160 -0
  97. package/dist/DragAndDrop.jsx.map +1 -0
  98. package/dist/DropZone.d.ts.map +1 -1
  99. package/dist/DropZone.js +189 -0
  100. package/dist/DropZone.js.map +1 -0
  101. package/dist/DropZone.jsx +144 -0
  102. package/dist/DropZone.jsx.map +1 -0
  103. package/dist/FieldError.js +66 -0
  104. package/dist/FieldError.js.map +1 -0
  105. package/dist/FieldError.jsx +47 -0
  106. package/dist/FieldError.jsx.map +1 -0
  107. package/dist/FileTrigger.js +79 -0
  108. package/dist/FileTrigger.js.map +1 -0
  109. package/dist/FileTrigger.jsx +49 -0
  110. package/dist/FileTrigger.jsx.map +1 -0
  111. package/dist/Focusable.js +70 -0
  112. package/dist/Focusable.js.map +1 -0
  113. package/dist/Focusable.jsx +69 -0
  114. package/dist/Focusable.jsx.map +1 -0
  115. package/dist/Form.js +99 -0
  116. package/dist/Form.js.map +1 -0
  117. package/dist/Form.jsx +73 -0
  118. package/dist/Form.jsx.map +1 -0
  119. package/dist/GridList.d.ts +34 -2
  120. package/dist/GridList.d.ts.map +1 -1
  121. package/dist/GridList.js +723 -0
  122. package/dist/GridList.js.map +1 -0
  123. package/dist/GridList.jsx +552 -0
  124. package/dist/GridList.jsx.map +1 -0
  125. package/dist/HiddenTimeInput.js +104 -0
  126. package/dist/HiddenTimeInput.js.map +1 -0
  127. package/dist/HiddenTimeInput.jsx +69 -0
  128. package/dist/HiddenTimeInput.jsx.map +1 -0
  129. package/dist/Icon.d.ts.map +1 -1
  130. package/dist/Icon.js +127 -0
  131. package/dist/Icon.js.map +1 -0
  132. package/dist/Icon.jsx +72 -0
  133. package/dist/Icon.jsx.map +1 -0
  134. package/dist/Keyboard.js +30 -0
  135. package/dist/Keyboard.js.map +1 -0
  136. package/dist/Keyboard.jsx +24 -0
  137. package/dist/Keyboard.jsx.map +1 -0
  138. package/dist/Landmark.js +134 -0
  139. package/dist/Landmark.js.map +1 -0
  140. package/dist/Landmark.jsx +118 -0
  141. package/dist/Landmark.jsx.map +1 -0
  142. package/dist/Link.d.ts.map +1 -1
  143. package/dist/Link.js +219 -0
  144. package/dist/Link.js.map +1 -0
  145. package/dist/Link.jsx +189 -0
  146. package/dist/Link.jsx.map +1 -0
  147. package/dist/ListBox.d.ts.map +1 -1
  148. package/dist/ListBox.js +670 -0
  149. package/dist/ListBox.js.map +1 -0
  150. package/dist/ListBox.jsx +508 -0
  151. package/dist/ListBox.jsx.map +1 -0
  152. package/dist/Menu.d.ts +27 -9
  153. package/dist/Menu.d.ts.map +1 -1
  154. package/dist/Menu.js +1254 -0
  155. package/dist/Menu.js.map +1 -0
  156. package/dist/Menu.jsx +1042 -0
  157. package/dist/Menu.jsx.map +1 -0
  158. package/dist/Meter.d.ts.map +1 -1
  159. package/dist/Meter.js +123 -0
  160. package/dist/Meter.js.map +1 -0
  161. package/dist/Meter.jsx +107 -0
  162. package/dist/Meter.jsx.map +1 -0
  163. package/dist/Modal.d.ts.map +1 -1
  164. package/dist/Modal.js +380 -0
  165. package/dist/Modal.js.map +1 -0
  166. package/dist/Modal.jsx +314 -0
  167. package/dist/Modal.jsx.map +1 -0
  168. package/dist/NumberField.d.ts +3 -3
  169. package/dist/NumberField.d.ts.map +1 -1
  170. package/dist/NumberField.js +573 -0
  171. package/dist/NumberField.js.map +1 -0
  172. package/dist/NumberField.jsx +443 -0
  173. package/dist/NumberField.jsx.map +1 -0
  174. package/dist/Popover.d.ts +10 -2
  175. package/dist/Popover.d.ts.map +1 -1
  176. package/dist/Popover.js +464 -0
  177. package/dist/Popover.js.map +1 -0
  178. package/dist/Popover.jsx +333 -0
  179. package/dist/Popover.jsx.map +1 -0
  180. package/dist/Pressable.js +69 -0
  181. package/dist/Pressable.js.map +1 -0
  182. package/dist/Pressable.jsx +68 -0
  183. package/dist/Pressable.jsx.map +1 -0
  184. package/dist/ProgressBar.d.ts.map +1 -1
  185. package/dist/ProgressBar.js +130 -0
  186. package/dist/ProgressBar.js.map +1 -0
  187. package/dist/ProgressBar.jsx +114 -0
  188. package/dist/ProgressBar.jsx.map +1 -0
  189. package/dist/RadioGroup.d.ts +82 -4
  190. package/dist/RadioGroup.d.ts.map +1 -1
  191. package/dist/RadioGroup.js +931 -0
  192. package/dist/RadioGroup.js.map +1 -0
  193. package/dist/RadioGroup.jsx +681 -0
  194. package/dist/RadioGroup.jsx.map +1 -0
  195. package/dist/RangeCalendar.d.ts.map +1 -1
  196. package/dist/RangeCalendar.js +410 -0
  197. package/dist/RangeCalendar.js.map +1 -0
  198. package/dist/RangeCalendar.jsx +253 -0
  199. package/dist/RangeCalendar.jsx.map +1 -0
  200. package/dist/RouterProvider.js +118 -0
  201. package/dist/RouterProvider.js.map +1 -0
  202. package/dist/RouterProvider.jsx +112 -0
  203. package/dist/RouterProvider.jsx.map +1 -0
  204. package/dist/SearchField.d.ts +2 -2
  205. package/dist/SearchField.d.ts.map +1 -1
  206. package/dist/SearchField.js +643 -0
  207. package/dist/SearchField.js.map +1 -0
  208. package/dist/SearchField.jsx +526 -0
  209. package/dist/SearchField.jsx.map +1 -0
  210. package/dist/Select.d.ts.map +1 -1
  211. package/dist/Select.js +1031 -0
  212. package/dist/Select.js.map +1 -0
  213. package/dist/Select.jsx +744 -0
  214. package/dist/Select.jsx.map +1 -0
  215. package/dist/SelectionIndicator.d.ts.map +1 -1
  216. package/dist/SelectionIndicator.js +86 -0
  217. package/dist/SelectionIndicator.js.map +1 -0
  218. package/dist/SelectionIndicator.jsx +50 -0
  219. package/dist/SelectionIndicator.jsx.map +1 -0
  220. package/dist/Separator.js +97 -0
  221. package/dist/Separator.js.map +1 -0
  222. package/dist/Separator.jsx +85 -0
  223. package/dist/Separator.jsx.map +1 -0
  224. package/dist/SharedElementTransition.d.ts.map +1 -1
  225. package/dist/SharedElementTransition.js +165 -0
  226. package/dist/SharedElementTransition.js.map +1 -0
  227. package/dist/SharedElementTransition.jsx +138 -0
  228. package/dist/SharedElementTransition.jsx.map +1 -0
  229. package/dist/Slider.d.ts +33 -1
  230. package/dist/Slider.d.ts.map +1 -1
  231. package/dist/Slider.js +515 -0
  232. package/dist/Slider.js.map +1 -0
  233. package/dist/Slider.jsx +403 -0
  234. package/dist/Slider.jsx.map +1 -0
  235. package/dist/StepList.js +198 -0
  236. package/dist/StepList.js.map +1 -0
  237. package/dist/StepList.jsx +141 -0
  238. package/dist/StepList.jsx.map +1 -0
  239. package/dist/Switch.d.ts +65 -2
  240. package/dist/Switch.d.ts.map +1 -1
  241. package/dist/Switch.js +534 -0
  242. package/dist/Switch.js.map +1 -0
  243. package/dist/Switch.jsx +393 -0
  244. package/dist/Switch.jsx.map +1 -0
  245. package/dist/Table.d.ts +48 -0
  246. package/dist/Table.d.ts.map +1 -1
  247. package/dist/Table.js +1759 -0
  248. package/dist/Table.js.map +1 -0
  249. package/dist/Table.jsx +1348 -0
  250. package/dist/Table.jsx.map +1 -0
  251. package/dist/Tabs.d.ts +0 -4
  252. package/dist/Tabs.d.ts.map +1 -1
  253. package/dist/Tabs.js +595 -0
  254. package/dist/Tabs.js.map +1 -0
  255. package/dist/Tabs.jsx +367 -0
  256. package/dist/Tabs.jsx.map +1 -0
  257. package/dist/TagGroup.d.ts.map +1 -1
  258. package/dist/TagGroup.js +378 -0
  259. package/dist/TagGroup.js.map +1 -0
  260. package/dist/TagGroup.jsx +270 -0
  261. package/dist/TagGroup.jsx.map +1 -0
  262. package/dist/Text.d.ts +18 -6
  263. package/dist/Text.d.ts.map +1 -1
  264. package/dist/Text.js +42 -0
  265. package/dist/Text.js.map +1 -0
  266. package/dist/Text.jsx +35 -0
  267. package/dist/Text.jsx.map +1 -0
  268. package/dist/TextField.d.ts +6 -6
  269. package/dist/TextField.d.ts.map +1 -1
  270. package/dist/TextField.js +436 -0
  271. package/dist/TextField.js.map +1 -0
  272. package/dist/TextField.jsx +403 -0
  273. package/dist/TextField.jsx.map +1 -0
  274. package/dist/TimeField.d.ts +3 -3
  275. package/dist/TimeField.d.ts.map +1 -1
  276. package/dist/TimeField.js +372 -0
  277. package/dist/TimeField.js.map +1 -0
  278. package/dist/TimeField.jsx +224 -0
  279. package/dist/TimeField.jsx.map +1 -0
  280. package/dist/Toast.d.ts +14 -0
  281. package/dist/Toast.d.ts.map +1 -1
  282. package/dist/Toast.js +551 -0
  283. package/dist/Toast.js.map +1 -0
  284. package/dist/Toast.jsx +361 -0
  285. package/dist/Toast.jsx.map +1 -0
  286. package/dist/ToggleButton.d.ts.map +1 -1
  287. package/dist/ToggleButton.js +123 -0
  288. package/dist/ToggleButton.js.map +1 -0
  289. package/dist/ToggleButton.jsx +88 -0
  290. package/dist/ToggleButton.jsx.map +1 -0
  291. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  292. package/dist/ToggleButtonGroup.js +114 -0
  293. package/dist/ToggleButtonGroup.js.map +1 -0
  294. package/dist/ToggleButtonGroup.jsx +85 -0
  295. package/dist/ToggleButtonGroup.jsx.map +1 -0
  296. package/dist/Toolbar.js +112 -0
  297. package/dist/Toolbar.js.map +1 -0
  298. package/dist/Toolbar.jsx +92 -0
  299. package/dist/Toolbar.jsx.map +1 -0
  300. package/dist/Tooltip.d.ts.map +1 -1
  301. package/dist/Tooltip.js +539 -0
  302. package/dist/Tooltip.js.map +1 -0
  303. package/dist/Tooltip.jsx +465 -0
  304. package/dist/Tooltip.jsx.map +1 -0
  305. package/dist/Tree.d.ts +14 -2
  306. package/dist/Tree.d.ts.map +1 -1
  307. package/dist/Tree.js +1424 -0
  308. package/dist/Tree.js.map +1 -0
  309. package/dist/Tree.jsx +1172 -0
  310. package/dist/Tree.jsx.map +1 -0
  311. package/dist/Virtualizer.d.ts +16 -2
  312. package/dist/Virtualizer.d.ts.map +1 -1
  313. package/dist/Virtualizer.js +2 -0
  314. package/dist/Virtualizer.jsx +2 -0
  315. package/dist/Virtualizer2.js +751 -0
  316. package/dist/Virtualizer2.js.map +1 -0
  317. package/dist/Virtualizer2.jsx +730 -0
  318. package/dist/Virtualizer2.jsx.map +1 -0
  319. package/dist/VirtualizerLayouts.d.ts +18 -0
  320. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  321. package/dist/VisuallyHidden.js +42 -0
  322. package/dist/VisuallyHidden.js.map +1 -0
  323. package/dist/VisuallyHidden.jsx +35 -0
  324. package/dist/VisuallyHidden.jsx.map +1 -0
  325. package/dist/contexts.js +33 -0
  326. package/dist/contexts.js.map +1 -0
  327. package/dist/contexts.jsx +33 -0
  328. package/dist/contexts.jsx.map +1 -0
  329. package/dist/index.d.ts +7 -6
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +70 -23932
  332. package/dist/index.jsx +70 -18337
  333. package/dist/useDragAndDrop.js +2 -0
  334. package/dist/useDragAndDrop.jsx +2 -0
  335. package/dist/useDragAndDrop2.js +395 -0
  336. package/dist/useDragAndDrop2.js.map +1 -0
  337. package/dist/useDragAndDrop2.jsx +395 -0
  338. package/dist/useDragAndDrop2.jsx.map +1 -0
  339. package/dist/utils.d.ts +83 -11
  340. package/dist/utils.d.ts.map +1 -1
  341. package/dist/utils.js +285 -0
  342. package/dist/utils.js.map +1 -0
  343. package/dist/utils.jsx +277 -0
  344. package/dist/utils.jsx.map +1 -0
  345. package/dist/virtualizer/Layout.js +144 -0
  346. package/dist/virtualizer/Layout.js.map +1 -0
  347. package/dist/virtualizer/Layout.jsx +144 -0
  348. package/dist/virtualizer/Layout.jsx.map +1 -0
  349. package/package.json +401 -4
  350. package/src/Breadcrumbs.tsx +3 -1
  351. package/src/Button.tsx +22 -2
  352. package/src/Calendar.tsx +27 -10
  353. package/src/CalendarPicker.tsx +73 -0
  354. package/src/Checkbox.tsx +539 -3
  355. package/src/Collection.tsx +9 -3
  356. package/src/Color.tsx +42 -14
  357. package/src/ComboBox.tsx +50 -6
  358. package/src/DateField.tsx +20 -2
  359. package/src/DatePicker.tsx +57 -5
  360. package/src/Dialog.tsx +13 -5
  361. package/src/Disclosure.tsx +3 -1
  362. package/src/DragAndDrop.tsx +3 -1
  363. package/src/DropZone.tsx +3 -1
  364. package/src/GridList.tsx +125 -24
  365. package/src/Icon.tsx +3 -1
  366. package/src/Link.tsx +3 -1
  367. package/src/ListBox.tsx +31 -4
  368. package/src/Menu.tsx +252 -128
  369. package/src/Meter.tsx +3 -1
  370. package/src/Modal.tsx +100 -52
  371. package/src/NumberField.tsx +51 -8
  372. package/src/Popover.tsx +40 -10
  373. package/src/ProgressBar.tsx +3 -1
  374. package/src/RadioGroup.tsx +468 -4
  375. package/src/RangeCalendar.tsx +3 -1
  376. package/src/SearchField.tsx +27 -3
  377. package/src/Select.tsx +22 -7
  378. package/src/SelectionIndicator.tsx +3 -1
  379. package/src/SharedElementTransition.tsx +3 -1
  380. package/src/Slider.tsx +159 -13
  381. package/src/Switch.tsx +395 -2
  382. package/src/Table.tsx +409 -95
  383. package/src/Tabs.tsx +16 -45
  384. package/src/TagGroup.tsx +3 -1
  385. package/src/Text.tsx +31 -10
  386. package/src/TextField.tsx +43 -5
  387. package/src/TimeField.tsx +20 -2
  388. package/src/Toast.tsx +79 -14
  389. package/src/ToggleButton.tsx +3 -1
  390. package/src/ToggleButtonGroup.tsx +3 -1
  391. package/src/Tooltip.tsx +3 -1
  392. package/src/Tree.tsx +77 -9
  393. package/src/Virtualizer.tsx +180 -31
  394. package/src/VirtualizerLayouts.ts +45 -10
  395. package/src/index.ts +50 -0
  396. package/src/utils.tsx +243 -27
  397. package/dist/index.js.map +0 -1
  398. package/dist/index.jsx.map +0 -1
@@ -0,0 +1,403 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.jsx";
2
+ import { VisuallyHidden } from "./VisuallyHidden.jsx";
3
+ import { Show, createContext, createMemo, splitProps, useContext } from "solid-js";
4
+ import { createFocusRing, createHover, createSlider, mergeProps as mergeProps$1 } from "@proyecto-viviana/solidaria";
5
+ import { createSliderState } from "@proyecto-viviana/solid-stately";
6
+ //#region src/Slider.tsx
7
+ /**
8
+ * Slider component for solidaria-components
9
+ *
10
+ * A pre-wired headless slider that combines state + aria hooks.
11
+ * Port of react-aria-components/src/Slider.tsx
12
+ */
13
+ const SliderContext = createContext(null);
14
+ const SliderStateContext = SliderContext;
15
+ const SliderTrackContext = SliderContext;
16
+ const SliderFillContext = SliderContext;
17
+ const SliderOutputContext = SliderContext;
18
+ /**
19
+ * A slider allows users to select a value from a range.
20
+ */
21
+ function Slider(props) {
22
+ const [local, stateProps, ariaProps, rest] = splitProps(props, [
23
+ "class",
24
+ "style",
25
+ "slot",
26
+ "ref"
27
+ ], [
28
+ "value",
29
+ "defaultValue",
30
+ "onChange",
31
+ "onChangeEnd",
32
+ "minValue",
33
+ "maxValue",
34
+ "step",
35
+ "orientation",
36
+ "locale",
37
+ "formatOptions"
38
+ ], [
39
+ "label",
40
+ "aria-label",
41
+ "aria-labelledby",
42
+ "aria-describedby",
43
+ "isDisabled",
44
+ "id",
45
+ "name",
46
+ "form"
47
+ ]);
48
+ const state = createSliderState({
49
+ get value() {
50
+ return stateProps.value;
51
+ },
52
+ get defaultValue() {
53
+ return stateProps.defaultValue;
54
+ },
55
+ get onChange() {
56
+ return stateProps.onChange;
57
+ },
58
+ get onChangeEnd() {
59
+ return stateProps.onChangeEnd;
60
+ },
61
+ get minValue() {
62
+ return stateProps.minValue;
63
+ },
64
+ get maxValue() {
65
+ return stateProps.maxValue;
66
+ },
67
+ get step() {
68
+ return stateProps.step;
69
+ },
70
+ get orientation() {
71
+ return stateProps.orientation;
72
+ },
73
+ get locale() {
74
+ return stateProps.locale;
75
+ },
76
+ get formatOptions() {
77
+ return stateProps.formatOptions;
78
+ },
79
+ get isDisabled() {
80
+ return ariaProps.isDisabled;
81
+ }
82
+ });
83
+ let trackRef;
84
+ const setTrackRef = (el) => {
85
+ trackRef = el;
86
+ };
87
+ let inputRef;
88
+ const setInputRef = (el) => {
89
+ inputRef = el;
90
+ };
91
+ const sliderAria = createSlider(ariaProps, state, () => trackRef ?? null, () => inputRef ?? null);
92
+ const renderValues = createMemo(() => ({
93
+ isDisabled: state.isDisabled,
94
+ isDragging: state.isDragging(),
95
+ isFocused: state.isFocused(),
96
+ value: state.value(),
97
+ valuePercent: state.getValuePercent(),
98
+ orientation: state.orientation
99
+ }));
100
+ const renderProps = useRenderProps({
101
+ get children() {
102
+ return props.children;
103
+ },
104
+ class: local.class,
105
+ style: local.style,
106
+ defaultClassName: "solidaria-Slider"
107
+ }, renderValues);
108
+ const childRenderValues = {
109
+ get isDisabled() {
110
+ return state.isDisabled;
111
+ },
112
+ get isDragging() {
113
+ return state.isDragging();
114
+ },
115
+ get isFocused() {
116
+ return state.isFocused();
117
+ },
118
+ get value() {
119
+ return state.value();
120
+ },
121
+ get valuePercent() {
122
+ return state.getValuePercent();
123
+ },
124
+ get orientation() {
125
+ return state.orientation;
126
+ }
127
+ };
128
+ const sliderChildren = () => {
129
+ const children = props.children;
130
+ return typeof children === "function" ? children(childRenderValues) : children;
131
+ };
132
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
133
+ const cleanGroupProps = () => {
134
+ const { ref: _ref, ...rest } = sliderAria.groupProps;
135
+ return rest;
136
+ };
137
+ return <SliderContext.Provider value={{
138
+ state,
139
+ get trackProps() {
140
+ return sliderAria.trackProps;
141
+ },
142
+ get thumbProps() {
143
+ return sliderAria.thumbProps;
144
+ },
145
+ get outputProps() {
146
+ return sliderAria.outputProps;
147
+ },
148
+ get inputProps() {
149
+ return sliderAria.inputProps;
150
+ },
151
+ get trackRef() {
152
+ return trackRef;
153
+ },
154
+ setTrackRef,
155
+ get inputRef() {
156
+ return inputRef;
157
+ },
158
+ setInputRef
159
+ }}>
160
+ <div {...domProps()} {...cleanGroupProps()} ref={local.ref} class={renderProps.class()} style={renderProps.style()} data-disabled={state.isDisabled || void 0} data-orientation={state.orientation} data-dragging={state.isDragging() || void 0}>
161
+ <Show when={ariaProps.label}>
162
+ <span {...sliderAria.labelProps}>{ariaProps.label}</span>
163
+ </Show>
164
+
165
+ {sliderChildren()}
166
+ </div>
167
+ </SliderContext.Provider>;
168
+ }
169
+ /**
170
+ * The track element of a slider.
171
+ */
172
+ function SliderTrack(props) {
173
+ const [local, domProps] = splitProps(props, [
174
+ "class",
175
+ "style",
176
+ "slot",
177
+ "children"
178
+ ]);
179
+ const context = useContext(SliderContext);
180
+ if (!context) throw new Error("SliderTrack must be used within a Slider");
181
+ const { state, setTrackRef } = context;
182
+ const renderValues = createMemo(() => ({
183
+ isDisabled: state.isDisabled,
184
+ isDragging: state.isDragging(),
185
+ valuePercent: state.getValuePercent(),
186
+ orientation: state.orientation
187
+ }));
188
+ const renderProps = useRenderProps({
189
+ get children() {
190
+ return props.children;
191
+ },
192
+ class: local.class,
193
+ style: local.style,
194
+ defaultClassName: "solidaria-Slider-track"
195
+ }, renderValues);
196
+ const cleanTrackProps = () => {
197
+ const { ref: _ref, style: trackStyle, ...rest } = context.trackProps;
198
+ return rest;
199
+ };
200
+ const mergedStyle = () => {
201
+ const trackStyle = context.trackProps.style || {};
202
+ const renderStyle = renderProps.style() || {};
203
+ return {
204
+ ...trackStyle,
205
+ ...renderStyle
206
+ };
207
+ };
208
+ return <div {...domProps} ref={setTrackRef} {...cleanTrackProps()} class={renderProps.class()} style={mergedStyle()} data-disabled={state.isDisabled || void 0} data-orientation={state.orientation} data-dragging={state.isDragging() || void 0}>
209
+ {renderProps.renderChildren()}
210
+ </div>;
211
+ }
212
+ /**
213
+ * The thumb element of a slider.
214
+ */
215
+ function SliderThumb(props) {
216
+ const [local, domProps] = splitProps(props, [
217
+ "class",
218
+ "style",
219
+ "slot",
220
+ "children"
221
+ ]);
222
+ const context = useContext(SliderContext);
223
+ if (!context) throw new Error("SliderThumb must be used within a Slider");
224
+ const { state, setInputRef } = context;
225
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
226
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
227
+ return state.isDisabled;
228
+ } });
229
+ const renderValues = createMemo(() => ({
230
+ isDisabled: state.isDisabled,
231
+ isDragging: state.isDragging(),
232
+ isFocused: isFocused() || state.isFocused(),
233
+ isFocusVisible: isFocusVisible(),
234
+ isHovered: isHovered(),
235
+ value: state.value(),
236
+ valuePercent: state.getValuePercent()
237
+ }));
238
+ const renderProps = useRenderProps({
239
+ get children() {
240
+ return props.children;
241
+ },
242
+ class: local.class,
243
+ style: local.style,
244
+ defaultClassName: "solidaria-Slider-thumb"
245
+ }, renderValues);
246
+ const cleanThumbProps = () => {
247
+ const { ref: _ref, style: thumbStyle, ...rest } = context.thumbProps;
248
+ return rest;
249
+ };
250
+ const cleanFocusProps = () => {
251
+ const { ref: _ref, ...rest } = focusProps;
252
+ return rest;
253
+ };
254
+ const cleanHoverProps = () => {
255
+ const { ref: _ref, ...rest } = hoverProps;
256
+ return rest;
257
+ };
258
+ const mergedStyle = () => {
259
+ const thumbStyle = context.thumbProps.style || {};
260
+ const renderStyle = renderProps.style() || {};
261
+ return {
262
+ ...thumbStyle,
263
+ ...renderStyle
264
+ };
265
+ };
266
+ const cleanInputProps = () => {
267
+ const { ref: _ref, ...rest } = context.inputProps;
268
+ return rest;
269
+ };
270
+ const mergedInputProps = () => mergeProps$1(cleanInputProps(), cleanFocusProps());
271
+ return <>
272
+ <VisuallyHidden>
273
+ <input ref={setInputRef} {...mergedInputProps()} />
274
+ </VisuallyHidden>
275
+ <div {...domProps} {...cleanThumbProps()} {...cleanHoverProps()} class={renderProps.class()} style={mergedStyle()} data-disabled={state.isDisabled || void 0} data-dragging={state.isDragging() || void 0} data-focused={isFocused() || state.isFocused() || void 0} data-focus-visible={isFocusVisible() || void 0} data-hovered={isHovered() || void 0}>
276
+ {renderProps.renderChildren()}
277
+ </div>
278
+ </>;
279
+ }
280
+ /** Clamp a value between min and max (mirror of upstream's number/clamp). */
281
+ function clampFill(value, min, max) {
282
+ return Math.min(Math.max(value, min), max);
283
+ }
284
+ /**
285
+ * The fill element of a slider, displaying the selected range.
286
+ *
287
+ * Port of react-aria-components `SliderFill` (RAC 1.18). Upstream reads the
288
+ * array-based `SliderState` (`values`/`getThumbPercent`); our `SliderState` is
289
+ * single-value, so this fills from `offset` (default the slider's minValue, i.e.
290
+ * 0%) to the current value — the single-thumb branch of upstream's math, using
291
+ * the same `(v - min) / (max - min)` percent formula the state itself uses.
292
+ */
293
+ function SliderFill(props) {
294
+ const [local, domProps] = splitProps(props, [
295
+ "class",
296
+ "style",
297
+ "slot",
298
+ "offset",
299
+ "children",
300
+ "onHoverStart",
301
+ "onHoverEnd",
302
+ "onHoverChange"
303
+ ]);
304
+ const context = useContext(SliderContext);
305
+ if (!context) throw new Error("SliderFill must be used within a Slider");
306
+ const { state } = context;
307
+ const { isHovered, hoverProps } = createHover(() => ({
308
+ onHoverStart: local.onHoverStart,
309
+ onHoverEnd: local.onHoverEnd,
310
+ onHoverChange: local.onHoverChange
311
+ }));
312
+ const percentOf = (value) => {
313
+ const range = state.maxValue - state.minValue;
314
+ return range === 0 ? 0 : (value - state.minValue) / range * 100;
315
+ };
316
+ const offset = () => local.offset != null ? clampFill(local.offset, state.minValue, state.maxValue) : state.minValue;
317
+ const start = () => percentOf(offset());
318
+ const end = () => state.getValuePercent() * 100;
319
+ const startPercent = () => Math.min(start(), end());
320
+ const sizePercent = () => Math.max(0, Math.max(start(), end()) - startPercent());
321
+ const renderValues = createMemo(() => ({
322
+ isDisabled: state.isDisabled,
323
+ isHovered: isHovered(),
324
+ valuePercent: state.getValuePercent(),
325
+ orientation: state.orientation
326
+ }));
327
+ const renderProps = useRenderProps({
328
+ get children() {
329
+ return props.children;
330
+ },
331
+ class: local.class,
332
+ style: local.style,
333
+ defaultClassName: "solidaria-Slider-fill"
334
+ }, renderValues);
335
+ const mergedStyle = () => {
336
+ return {
337
+ ...state.orientation === "vertical" ? {
338
+ position: "absolute",
339
+ bottom: `${startPercent()}%`,
340
+ height: `${sizePercent()}%`,
341
+ width: "100%"
342
+ } : {
343
+ position: "absolute",
344
+ "inset-inline-start": `${startPercent()}%`,
345
+ width: `${sizePercent()}%`,
346
+ height: "100%"
347
+ },
348
+ ...renderProps.style() || {}
349
+ };
350
+ };
351
+ return <div {...domProps} {...hoverProps} class={renderProps.class()} style={mergedStyle()} data-hovered={isHovered() || void 0} data-disabled={state.isDisabled || void 0} data-orientation={state.orientation}>
352
+ {renderProps.renderChildren()}
353
+ </div>;
354
+ }
355
+ /**
356
+ * The output element of a slider, displaying the current value.
357
+ */
358
+ function SliderOutput(props) {
359
+ const [local, domProps] = splitProps(props, [
360
+ "class",
361
+ "style",
362
+ "slot",
363
+ "children"
364
+ ]);
365
+ const context = useContext(SliderContext);
366
+ if (!context) throw new Error("SliderOutput must be used within a Slider");
367
+ const { state } = context;
368
+ const renderValues = createMemo(() => ({
369
+ value: state.value(),
370
+ formattedValue: state.getFormattedValue()
371
+ }));
372
+ const renderProps = useRenderProps({
373
+ get children() {
374
+ return props.children;
375
+ },
376
+ class: local.class,
377
+ style: local.style,
378
+ defaultClassName: "solidaria-Slider-output"
379
+ }, renderValues);
380
+ const cleanDomProps = () => {
381
+ const { ref: _ref, ...rest } = domProps;
382
+ return rest;
383
+ };
384
+ const cleanOutputProps = () => {
385
+ const { ref: _ref, ...rest } = context.outputProps;
386
+ return rest;
387
+ };
388
+ const renderedChildren = () => {
389
+ if (renderProps.children === void 0 || renderProps.children === null) return state.getFormattedValue();
390
+ return renderProps.renderChildren();
391
+ };
392
+ return <output {...cleanDomProps()} {...cleanOutputProps()} class={renderProps.class()} style={renderProps.style()}>
393
+ {renderedChildren()}
394
+ </output>;
395
+ }
396
+ Slider.Track = SliderTrack;
397
+ Slider.Thumb = SliderThumb;
398
+ Slider.Fill = SliderFill;
399
+ Slider.Output = SliderOutput;
400
+ //#endregion
401
+ export { Slider, SliderContext, SliderFill, SliderFillContext, SliderOutput, SliderOutputContext, SliderStateContext, SliderThumb, SliderTrack, SliderTrackContext };
402
+
403
+ //# sourceMappingURL=Slider.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.jsx","names":["mergeProps"],"sources":["../src/Slider.tsx"],"sourcesContent":["/**\n * Slider component for solidaria-components\n *\n * A pre-wired headless slider that combines state + aria hooks.\n * Port of react-aria-components/src/Slider.tsx\n */\n\nimport { type JSX, createContext, createMemo, splitProps, useContext, Show } from \"solid-js\";\nimport {\n createSlider,\n createFocusRing,\n createHover,\n mergeProps,\n type AriaSliderProps,\n type HoverEvents,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createSliderState,\n type SliderState,\n type SliderOrientation,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\n\nexport interface SliderRenderProps {\n /** Whether the slider is disabled. */\n isDisabled: boolean;\n /** Whether the slider is being dragged. */\n isDragging: boolean;\n /** Whether the slider is focused. */\n isFocused: boolean;\n /** The current value. */\n value: number;\n /** The value as a percent (0-1). */\n valuePercent: number;\n /** The orientation. */\n orientation: SliderOrientation;\n}\n\nexport interface SliderProps extends Omit<AriaSliderProps, \"label\">, SlotProps {\n /** The current value (controlled). */\n value?: number;\n /** The default value (uncontrolled). */\n defaultValue?: number;\n /** Handler called when the value changes. */\n onChange?: (value: number) => void;\n /** Handler called when dragging ends. */\n onChangeEnd?: (value: number) => void;\n /** The minimum value. */\n minValue?: number;\n /** The maximum value. */\n maxValue?: number;\n /** The step value. */\n step?: number;\n /** The orientation of the slider. */\n orientation?: SliderOrientation;\n /** The locale for number formatting. */\n locale?: string;\n /** Number format options. */\n formatOptions?: Intl.NumberFormatOptions;\n /** A visible label for the slider. */\n label?: JSX.Element;\n /** The children of the component. */\n children?: RenderChildren<SliderRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<SliderRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<SliderRenderProps>;\n /** Ref for the slider root element. */\n ref?: (el: HTMLDivElement) => void;\n}\n\nexport interface SliderTrackRenderProps {\n /** Whether the slider is disabled. */\n isDisabled: boolean;\n /** Whether the slider is being dragged. */\n isDragging: boolean;\n /** The value as a percent (0-1). */\n valuePercent: number;\n /** The orientation. */\n orientation: SliderOrientation;\n}\n\nexport interface SliderTrackProps\n extends SlotProps, Omit<JSX.HTMLAttributes<HTMLDivElement>, \"class\" | \"style\" | \"children\"> {\n /** The children of the track. */\n children?: RenderChildren<SliderTrackRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<SliderTrackRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<SliderTrackRenderProps>;\n}\n\nexport interface SliderThumbRenderProps {\n /** Whether the slider is disabled. */\n isDisabled: boolean;\n /** Whether the thumb is being dragged. */\n isDragging: boolean;\n /** Whether the thumb is focused. */\n isFocused: boolean;\n /** Whether the thumb has keyboard focus. */\n isFocusVisible: boolean;\n /** Whether the thumb is hovered. */\n isHovered: boolean;\n /** The current value. */\n value: number;\n /** The value as a percent (0-1). */\n valuePercent: number;\n}\n\nexport interface SliderThumbProps\n extends SlotProps, Omit<JSX.HTMLAttributes<HTMLDivElement>, \"class\" | \"style\" | \"children\"> {\n /** The children of the thumb. */\n children?: RenderChildren<SliderThumbRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<SliderThumbRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<SliderThumbRenderProps>;\n}\n\nexport interface SliderFillRenderProps {\n /** Whether the slider is disabled. */\n isDisabled: boolean;\n /** Whether the slider fill is currently hovered with a mouse. */\n isHovered: boolean;\n /** The value as a percent (0-1). */\n valuePercent: number;\n /** The orientation. */\n orientation: SliderOrientation;\n}\n\nexport interface SliderFillProps\n extends\n SlotProps,\n HoverEvents,\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"class\" | \"style\" | \"children\"> {\n /** The offset from which to start the fill. Defaults to the slider's minValue. */\n offset?: number;\n /** The children of the fill. */\n children?: RenderChildren<SliderFillRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<SliderFillRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<SliderFillRenderProps>;\n}\n\nexport interface SliderOutputRenderProps {\n /** The current value. */\n value: number;\n /** The formatted value string. */\n formattedValue: string;\n}\n\nexport interface SliderOutputProps\n extends SlotProps, Omit<JSX.HTMLAttributes<HTMLElement>, \"class\" | \"style\" | \"children\"> {\n /** The children of the output. */\n children?: RenderChildren<SliderOutputRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<SliderOutputRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<SliderOutputRenderProps>;\n}\n\ninterface SliderContextValue {\n state: SliderState;\n trackProps: JSX.HTMLAttributes<HTMLElement>;\n thumbProps: JSX.HTMLAttributes<HTMLElement>;\n outputProps: JSX.HTMLAttributes<HTMLElement>;\n inputProps: JSX.InputHTMLAttributes<HTMLInputElement>;\n trackRef: HTMLElement | undefined;\n setTrackRef: (el: HTMLElement) => void;\n inputRef: HTMLInputElement | undefined;\n setInputRef: (el: HTMLInputElement) => void;\n}\n\nexport const SliderContext = createContext<SliderContextValue | null>(null);\nexport const SliderStateContext = SliderContext;\nexport const SliderTrackContext = SliderContext;\nexport const SliderFillContext = SliderContext;\nexport const SliderOutputContext = SliderContext;\n\n/**\n * A slider allows users to select a value from a range.\n */\nexport function Slider(props: SliderProps): JSX.Element {\n const [local, stateProps, ariaProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"ref\"],\n [\n \"value\",\n \"defaultValue\",\n \"onChange\",\n \"onChangeEnd\",\n \"minValue\",\n \"maxValue\",\n \"step\",\n \"orientation\",\n \"locale\",\n \"formatOptions\",\n ],\n [\n \"label\",\n \"aria-label\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"isDisabled\",\n \"id\",\n \"name\",\n \"form\",\n ],\n );\n\n const state = createSliderState({\n get value() {\n return stateProps.value;\n },\n get defaultValue() {\n return stateProps.defaultValue;\n },\n get onChange() {\n return stateProps.onChange;\n },\n get onChangeEnd() {\n return stateProps.onChangeEnd;\n },\n get minValue() {\n return stateProps.minValue;\n },\n get maxValue() {\n return stateProps.maxValue;\n },\n get step() {\n return stateProps.step;\n },\n get orientation() {\n return stateProps.orientation;\n },\n get locale() {\n return stateProps.locale;\n },\n get formatOptions() {\n return stateProps.formatOptions;\n },\n get isDisabled() {\n return ariaProps.isDisabled;\n },\n });\n\n let trackRef: HTMLElement | undefined;\n const setTrackRef = (el: HTMLElement) => {\n trackRef = el;\n };\n let inputRef: HTMLInputElement | undefined;\n const setInputRef = (el: HTMLInputElement) => {\n inputRef = el;\n };\n\n const sliderAria = createSlider(\n ariaProps,\n state,\n () => trackRef ?? null,\n () => inputRef ?? null,\n );\n\n const renderValues = createMemo<SliderRenderProps>(() => ({\n isDisabled: state.isDisabled,\n isDragging: state.isDragging(),\n isFocused: state.isFocused(),\n value: state.value(),\n valuePercent: state.getValuePercent(),\n orientation: state.orientation,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Slider\",\n },\n renderValues,\n );\n\n const childRenderValues: SliderRenderProps = {\n get isDisabled() {\n return state.isDisabled;\n },\n get isDragging() {\n return state.isDragging();\n },\n get isFocused() {\n return state.isFocused();\n },\n get value() {\n return state.value();\n },\n get valuePercent() {\n return state.getValuePercent();\n },\n get orientation() {\n return state.orientation;\n },\n };\n\n const sliderChildren = () => {\n const children = props.children;\n return typeof children === \"function\" ? children(childRenderValues) : children;\n };\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const cleanGroupProps = () => {\n const { ref: _ref, ...rest } = sliderAria.groupProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <SliderContext.Provider\n value={{\n state,\n get trackProps() {\n return sliderAria.trackProps;\n },\n get thumbProps() {\n return sliderAria.thumbProps;\n },\n get outputProps() {\n return sliderAria.outputProps;\n },\n get inputProps() {\n return sliderAria.inputProps;\n },\n get trackRef() {\n return trackRef;\n },\n setTrackRef,\n get inputRef() {\n return inputRef;\n },\n setInputRef,\n }}\n >\n <div\n {...domProps()}\n {...cleanGroupProps()}\n ref={local.ref}\n class={renderProps.class()}\n style={renderProps.style()}\n data-disabled={state.isDisabled || undefined}\n data-orientation={state.orientation}\n data-dragging={state.isDragging() || undefined}\n >\n <Show when={ariaProps.label}>\n <span {...sliderAria.labelProps}>{ariaProps.label}</span>\n </Show>\n\n {sliderChildren()}\n </div>\n </SliderContext.Provider>\n );\n}\n\n/**\n * The track element of a slider.\n */\nexport function SliderTrack(props: SliderTrackProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n\n const context = useContext(SliderContext);\n if (!context) {\n throw new Error(\"SliderTrack must be used within a Slider\");\n }\n\n const { state, setTrackRef } = context;\n\n const renderValues = createMemo<SliderTrackRenderProps>(() => ({\n isDisabled: state.isDisabled,\n isDragging: state.isDragging(),\n valuePercent: state.getValuePercent(),\n orientation: state.orientation,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Slider-track\",\n },\n renderValues,\n );\n\n const cleanTrackProps = () => {\n const { ref: _ref, style: trackStyle, ...rest } = context.trackProps as Record<string, unknown>;\n return rest;\n };\n\n const mergedStyle = () => {\n const trackStyle = (context.trackProps as { style?: Record<string, string> }).style || {};\n const renderStyle = renderProps.style() || {};\n return { ...trackStyle, ...renderStyle };\n };\n\n return (\n <div\n {...domProps}\n ref={setTrackRef}\n {...cleanTrackProps()}\n class={renderProps.class()}\n style={mergedStyle()}\n data-disabled={state.isDisabled || undefined}\n data-orientation={state.orientation}\n data-dragging={state.isDragging() || undefined}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\n/**\n * The thumb element of a slider.\n */\nexport function SliderThumb(props: SliderThumbProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n\n const context = useContext(SliderContext);\n if (!context) {\n throw new Error(\"SliderThumb must be used within a Slider\");\n }\n\n const { state, setInputRef } = context;\n\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return state.isDisabled;\n },\n });\n\n const renderValues = createMemo<SliderThumbRenderProps>(() => ({\n isDisabled: state.isDisabled,\n isDragging: state.isDragging(),\n isFocused: isFocused() || state.isFocused(),\n isFocusVisible: isFocusVisible(),\n isHovered: isHovered(),\n value: state.value(),\n valuePercent: state.getValuePercent(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Slider-thumb\",\n },\n renderValues,\n );\n\n const cleanThumbProps = () => {\n const { ref: _ref, style: thumbStyle, ...rest } = context.thumbProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n\n const mergedStyle = () => {\n const thumbStyle = (context.thumbProps as { style?: Record<string, string> }).style || {};\n const renderStyle = renderProps.style() || {};\n return { ...thumbStyle, ...renderStyle };\n };\n const cleanInputProps = () => {\n const { ref: _ref, ...rest } = context.inputProps as Record<string, unknown>;\n return rest;\n };\n const mergedInputProps = () =>\n mergeProps(\n cleanInputProps() as Record<string, unknown>,\n cleanFocusProps() as Record<string, unknown>,\n ) as JSX.InputHTMLAttributes<HTMLInputElement>;\n\n return (\n <>\n <VisuallyHidden>\n <input ref={setInputRef} {...mergedInputProps()} />\n </VisuallyHidden>\n <div\n {...domProps}\n {...cleanThumbProps()}\n {...cleanHoverProps()}\n class={renderProps.class()}\n style={mergedStyle()}\n data-disabled={state.isDisabled || undefined}\n data-dragging={state.isDragging() || undefined}\n data-focused={isFocused() || state.isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-hovered={isHovered() || undefined}\n >\n {renderProps.renderChildren()}\n </div>\n </>\n );\n}\n\n/** Clamp a value between min and max (mirror of upstream's number/clamp). */\nfunction clampFill(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * The fill element of a slider, displaying the selected range.\n *\n * Port of react-aria-components `SliderFill` (RAC 1.18). Upstream reads the\n * array-based `SliderState` (`values`/`getThumbPercent`); our `SliderState` is\n * single-value, so this fills from `offset` (default the slider's minValue, i.e.\n * 0%) to the current value — the single-thumb branch of upstream's math, using\n * the same `(v - min) / (max - min)` percent formula the state itself uses.\n */\nexport function SliderFill(props: SliderFillProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\n \"class\",\n \"style\",\n \"slot\",\n \"offset\",\n \"children\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onHoverChange\",\n ]);\n\n const context = useContext(SliderContext);\n if (!context) {\n throw new Error(\"SliderFill must be used within a Slider\");\n }\n\n const { state } = context;\n\n const { isHovered, hoverProps } = createHover(() => ({\n onHoverStart: local.onHoverStart,\n onHoverEnd: local.onHoverEnd,\n onHoverChange: local.onHoverChange,\n }));\n\n // Percent (0-100) of an arbitrary value within the track — mirrors\n // SliderState.getValuePercent's formula for a value other than the current one.\n const percentOf = (value: number) => {\n const range = state.maxValue - state.minValue;\n return range === 0 ? 0 : ((value - state.minValue) / range) * 100;\n };\n\n const offset = () =>\n local.offset != null ? clampFill(local.offset, state.minValue, state.maxValue) : state.minValue;\n const start = () => percentOf(offset());\n const end = () => state.getValuePercent() * 100;\n const startPercent = () => Math.min(start(), end());\n const sizePercent = () => Math.max(0, Math.max(start(), end()) - startPercent());\n\n const renderValues = createMemo<SliderFillRenderProps>(() => ({\n isDisabled: state.isDisabled,\n isHovered: isHovered(),\n valuePercent: state.getValuePercent(),\n orientation: state.orientation,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Slider-fill\",\n },\n renderValues,\n );\n\n // useRenderProps has no defaultStyle; merge the positioning style with the\n // user's, mirroring upstream SliderFill's defaultStyle (and SliderTrack here).\n const mergedStyle = (): JSX.CSSProperties => {\n const fillStyle: JSX.CSSProperties =\n state.orientation === \"vertical\"\n ? {\n position: \"absolute\",\n bottom: `${startPercent()}%`,\n height: `${sizePercent()}%`,\n width: \"100%\",\n }\n : {\n position: \"absolute\",\n \"inset-inline-start\": `${startPercent()}%`,\n width: `${sizePercent()}%`,\n height: \"100%\",\n };\n return { ...fillStyle, ...(renderProps.style() || {}) };\n };\n\n return (\n <div\n {...domProps}\n {...hoverProps}\n class={renderProps.class()}\n style={mergedStyle()}\n data-hovered={isHovered() || undefined}\n data-disabled={state.isDisabled || undefined}\n data-orientation={state.orientation}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\n/**\n * The output element of a slider, displaying the current value.\n */\nexport function SliderOutput(props: SliderOutputProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n\n const context = useContext(SliderContext);\n if (!context) {\n throw new Error(\"SliderOutput must be used within a Slider\");\n }\n\n const { state } = context;\n\n const renderValues = createMemo<SliderOutputRenderProps>(() => ({\n value: state.value(),\n formattedValue: state.getFormattedValue(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Slider-output\",\n },\n renderValues,\n );\n\n const cleanDomProps = () => {\n const { ref: _ref, ...rest } = domProps as Record<string, unknown>;\n return rest;\n };\n const cleanOutputProps = () => {\n const { ref: _ref, ...rest } = context.outputProps as Record<string, unknown>;\n return rest;\n };\n\n const renderedChildren = () => {\n // Check if raw children prop exists before calling renderChildren\n if (renderProps.children === undefined || renderProps.children === null) {\n return state.getFormattedValue();\n }\n return renderProps.renderChildren();\n };\n\n return (\n <output\n {...cleanDomProps()}\n {...cleanOutputProps()}\n class={renderProps.class()}\n style={renderProps.style()}\n >\n {renderedChildren()}\n </output>\n );\n}\n\nSlider.Track = SliderTrack;\nSlider.Thumb = SliderThumb;\nSlider.Fill = SliderFill;\nSlider.Output = SliderOutput;\n"],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { addEventListener, createComponent, delegateEvents, effect, getNextElement, insert, mergeProps, runHydrationEvents, setAttribute, spread, template } from "solid-js/web";
3
+ import { For, createContext, createMemo, splitProps, useContext } from "solid-js";
4
+ import { createStepList } from "@proyecto-viviana/solidaria";
5
+ import { createStepListState } from "@proyecto-viviana/solid-stately";
6
+ //#region src/StepList.tsx
7
+ /**
8
+ * StepList component for solidaria-components
9
+ *
10
+ * A pre-wired headless step list component that combines state + aria hooks.
11
+ * Renders an ordered list of steps with completion tracking.
12
+ */
13
+ var _tmpl$ = /*#__PURE__*/ template(`<ol>`), _tmpl$2 = /*#__PURE__*/ template(`<li><a role=link>`);
14
+ const StepListStateContext = createContext(null);
15
+ const StepListContext = createContext(null);
16
+ function useStepListState() {
17
+ const ctx = useContext(StepListStateContext);
18
+ if (!ctx) throw new Error("useStepListState must be used within a StepList");
19
+ return ctx;
20
+ }
21
+ /**
22
+ * StepList displays a sequence of steps with completion tracking and selection.
23
+ */
24
+ function StepList(props) {
25
+ const [local, ariaProps, domRest] = splitProps(props, [
26
+ "items",
27
+ "selectedKey",
28
+ "defaultSelectedKey",
29
+ "onSelectionChange",
30
+ "lastCompletedStep",
31
+ "defaultLastCompletedStep",
32
+ "onLastCompletedStepChange",
33
+ "isDisabled",
34
+ "isReadOnly",
35
+ "disabledKeys",
36
+ "children",
37
+ "class",
38
+ "style"
39
+ ], ["aria-label", "aria-labelledby"]);
40
+ const state = createStepListState(createMemo(() => ({
41
+ items: local.items,
42
+ selectedKey: local.selectedKey,
43
+ defaultSelectedKey: local.defaultSelectedKey,
44
+ onSelectionChange: local.onSelectionChange,
45
+ lastCompletedStep: local.lastCompletedStep,
46
+ defaultLastCompletedStep: local.defaultLastCompletedStep,
47
+ onLastCompletedStepChange: local.onLastCompletedStepChange,
48
+ isDisabled: local.isDisabled,
49
+ isReadOnly: local.isReadOnly,
50
+ disabledKeys: local.disabledKeys
51
+ }))());
52
+ const { stepListProps } = createStepList({
53
+ get "aria-label"() {
54
+ return ariaProps["aria-label"];
55
+ },
56
+ get "aria-labelledby"() {
57
+ return ariaProps["aria-labelledby"];
58
+ }
59
+ }, state);
60
+ const renderValues = createMemo(() => ({ isDisabled: state.isDisabled() }));
61
+ const renderProps = useRenderProps({
62
+ class: local.class,
63
+ style: local.style,
64
+ defaultClassName: "solidaria-StepList"
65
+ }, renderValues);
66
+ const domProps = createMemo(() => filterDOMProps(domRest, { global: true }));
67
+ return createComponent(StepListStateContext.Provider, {
68
+ value: state,
69
+ get children() {
70
+ var _el$ = getNextElement(_tmpl$);
71
+ spread(_el$, mergeProps(stepListProps, domProps, {
72
+ get ["class"]() {
73
+ return renderProps.class();
74
+ },
75
+ get style() {
76
+ return renderProps.style();
77
+ },
78
+ get ["data-disabled"]() {
79
+ return state.isDisabled() || void 0;
80
+ }
81
+ }), false, true);
82
+ insert(_el$, createComponent(For, {
83
+ get each() {
84
+ return local.items;
85
+ },
86
+ children: (item, index) => {
87
+ const stepNumber = () => index() + 1;
88
+ return local.children(item, {
89
+ get isSelected() {
90
+ return state.selectedKey() === item.key;
91
+ },
92
+ get isCompleted() {
93
+ return state.isCompleted(item.key);
94
+ },
95
+ get isDisabled() {
96
+ return state.isDisabled() || !state.isSelectable(item.key);
97
+ },
98
+ get isSelectable() {
99
+ return state.isSelectable(item.key);
100
+ },
101
+ get stepNumber() {
102
+ return stepNumber();
103
+ },
104
+ get stepStateText() {
105
+ if (state.selectedKey() === item.key) return "Current";
106
+ if (state.isCompleted(item.key)) return "Completed";
107
+ return "Not completed";
108
+ }
109
+ });
110
+ }
111
+ }));
112
+ runHydrationEvents();
113
+ return _el$;
114
+ }
115
+ });
116
+ }
117
+ /**
118
+ * Step represents an individual step within a StepList.
119
+ * Renders as an `<li>` wrapping an `<a>` with accessible step props.
120
+ */
121
+ function Step(props) {
122
+ const [local, domProps] = splitProps(props, [
123
+ "item",
124
+ "stepNumber",
125
+ "children",
126
+ "class",
127
+ "style"
128
+ ]);
129
+ const state = useStepListState();
130
+ const isSelected = () => state.selectedKey() === local.item.key;
131
+ const isCompleted = () => state.isCompleted(local.item.key);
132
+ const selectable = () => state.isSelectable(local.item.key);
133
+ const handleClick = (e) => {
134
+ e.preventDefault();
135
+ if (selectable()) state.setSelectedKey(local.item.key);
136
+ };
137
+ const handleKeyDown = (e) => {
138
+ if (e.key === "ArrowUp" || e.key === "ArrowDown") {
139
+ e.preventDefault();
140
+ return;
141
+ }
142
+ if (e.key === "Enter" || e.key === " ") {
143
+ e.preventDefault();
144
+ if (selectable()) state.setSelectedKey(local.item.key);
145
+ }
146
+ };
147
+ const stepStateText = () => {
148
+ if (isSelected()) return "Current";
149
+ if (isCompleted()) return "Completed";
150
+ return "Not completed";
151
+ };
152
+ return (() => {
153
+ var _el$2 = getNextElement(_tmpl$2), _el$3 = _el$2.firstChild;
154
+ spread(_el$2, mergeProps(domProps, {
155
+ get ["class"]() {
156
+ return local.class;
157
+ },
158
+ get style() {
159
+ return local.style;
160
+ },
161
+ get ["data-selected"]() {
162
+ return isSelected() || void 0;
163
+ },
164
+ get ["data-completed"]() {
165
+ return isCompleted() || void 0;
166
+ },
167
+ get ["data-disabled"]() {
168
+ return !selectable() || void 0;
169
+ },
170
+ get ["data-selectable"]() {
171
+ return selectable() || void 0;
172
+ }
173
+ }), false, true);
174
+ addEventListener(_el$3, "keydown", handleKeyDown);
175
+ _el$3.$$click = handleClick;
176
+ insert(_el$3, () => local.children);
177
+ effect((_p$) => {
178
+ var _v$ = isSelected() ? "step" : void 0, _v$2 = !selectable() ? true : void 0, _v$3 = selectable() ? 0 : void 0, _v$4 = `Step ${local.stepNumber}: ${local.item.label}, ${stepStateText()}`;
179
+ _v$ !== _p$.e && setAttribute(_el$3, "aria-current", _p$.e = _v$);
180
+ _v$2 !== _p$.t && setAttribute(_el$3, "aria-disabled", _p$.t = _v$2);
181
+ _v$3 !== _p$.a && setAttribute(_el$3, "tabindex", _p$.a = _v$3);
182
+ _v$4 !== _p$.o && setAttribute(_el$3, "aria-label", _p$.o = _v$4);
183
+ return _p$;
184
+ }, {
185
+ e: void 0,
186
+ t: void 0,
187
+ a: void 0,
188
+ o: void 0
189
+ });
190
+ runHydrationEvents();
191
+ return _el$2;
192
+ })();
193
+ }
194
+ delegateEvents(["click"]);
195
+ //#endregion
196
+ export { Step, StepList, StepListContext, StepListStateContext, useStepListState };
197
+
198
+ //# sourceMappingURL=StepList.js.map