@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,192 @@
1
+ import { DEFAULT_SLOT, filterDOMProps, useRenderProps } from "./utils.jsx";
2
+ import { a as useOverlayTriggerState, i as useDialogTrigger, t as DialogTriggerContext } from "./contexts.jsx";
3
+ import { ButtonContext } from "./Button.jsx";
4
+ import { Match, Switch, createContext, createEffect, createMemo, createUniqueId, splitProps, useContext } from "solid-js";
5
+ import { createDialog, createOverlayTrigger, focusSafely } from "@proyecto-viviana/solidaria";
6
+ import { createOverlayTriggerState } from "@proyecto-viviana/solid-stately";
7
+ //#region src/Dialog.tsx
8
+ /**
9
+ * Dialog component for solidaria-components
10
+ *
11
+ * A headless dialog component that combines ARIA hooks.
12
+ * Port of react-aria-components Dialog.
13
+ */
14
+ const DialogContext = createContext(null);
15
+ /**
16
+ * A DialogTrigger opens a dialog when a trigger element is pressed.
17
+ * Children should include a trigger element (e.g. Button) and the dialog content.
18
+ */
19
+ function DialogTrigger(props) {
20
+ const [local] = splitProps(props, [
21
+ "isOpen",
22
+ "defaultOpen",
23
+ "onOpenChange"
24
+ ]);
25
+ const state = createOverlayTriggerState({
26
+ get isOpen() {
27
+ return local.isOpen;
28
+ },
29
+ get defaultOpen() {
30
+ return local.defaultOpen;
31
+ },
32
+ onOpenChange: local.onOpenChange
33
+ });
34
+ let triggerRef = null;
35
+ const triggerId = createUniqueId();
36
+ const triggerAria = createOverlayTrigger({ type: "dialog" }, state, () => triggerRef);
37
+ const restoreFocusToTrigger = () => {
38
+ const trigger = triggerRef;
39
+ if (!trigger?.isConnected) return;
40
+ const win = trigger.ownerDocument.defaultView ?? window;
41
+ win.requestAnimationFrame(() => {
42
+ win.requestAnimationFrame(() => {
43
+ if (trigger.isConnected && !state.isOpen()) focusSafely(trigger);
44
+ });
45
+ });
46
+ };
47
+ const stateWithFocusRestore = {
48
+ isOpen: state.isOpen,
49
+ setOpen: (isOpen) => {
50
+ state.setOpen(isOpen);
51
+ if (!isOpen) restoreFocusToTrigger();
52
+ },
53
+ open: state.open,
54
+ close: () => {
55
+ state.close();
56
+ restoreFocusToTrigger();
57
+ },
58
+ toggle: () => {
59
+ const wasOpen = state.isOpen();
60
+ state.toggle();
61
+ if (wasOpen) restoreFocusToTrigger();
62
+ }
63
+ };
64
+ const setTriggerRef = (el) => {
65
+ if (!el) return;
66
+ if (!triggerRef || !triggerRef.isConnected) triggerRef = el;
67
+ };
68
+ const contextValue = createMemo(() => ({
69
+ state: stateWithFocusRestore,
70
+ triggerRef: () => triggerRef,
71
+ setTriggerRef,
72
+ triggerId,
73
+ triggerProps: triggerAria.triggerProps,
74
+ overlayProps: triggerAria.overlayProps
75
+ }));
76
+ return <DialogTriggerContext.Provider value={contextValue()}>
77
+ {props.children}
78
+ </DialogTriggerContext.Provider>;
79
+ }
80
+ /**
81
+ * A dialog is an overlay shown above other content in an application.
82
+ */
83
+ function Dialog(props) {
84
+ const [local, ariaProps, rest] = splitProps(props, [
85
+ "class",
86
+ "style",
87
+ "slot",
88
+ "onClose"
89
+ ], [
90
+ "role",
91
+ "aria-label",
92
+ "aria-labelledby",
93
+ "aria-describedby"
94
+ ]);
95
+ let dialogRef;
96
+ const triggerContext = useContext(DialogTriggerContext);
97
+ const { dialogProps, titleProps } = createDialog({
98
+ get role() {
99
+ return ariaProps.role;
100
+ },
101
+ get "aria-label"() {
102
+ return ariaProps["aria-label"];
103
+ },
104
+ get "aria-labelledby"() {
105
+ return ariaProps["aria-labelledby"];
106
+ },
107
+ get "aria-describedby"() {
108
+ return ariaProps["aria-describedby"];
109
+ }
110
+ }, () => dialogRef);
111
+ const titleId = () => titleProps()?.id;
112
+ const overlayState = useOverlayTriggerState();
113
+ const close = () => {
114
+ local.onClose?.();
115
+ if (overlayState) {
116
+ overlayState.close();
117
+ return;
118
+ }
119
+ triggerContext?.state.close();
120
+ };
121
+ createEffect(() => {});
122
+ const renderValues = createMemo(() => ({ close }));
123
+ const renderProps = useRenderProps({
124
+ get children() {
125
+ return props.children;
126
+ },
127
+ class: local.class,
128
+ style: local.style,
129
+ defaultClassName: "solidaria-Dialog"
130
+ }, renderValues);
131
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
132
+ return <DialogContext.Provider value={{
133
+ close,
134
+ titleId: titleId()
135
+ }}>
136
+ <section {...dialogProps()} {...domProps()} ref={dialogRef} class={renderProps.class()} style={renderProps.style()} slot={local.slot}>
137
+ <ButtonContext.Provider value={{ slots: {
138
+ [DEFAULT_SLOT]: {},
139
+ close: { onPress: () => close() }
140
+ } }}>
141
+ {renderProps.renderChildren()}
142
+ </ButtonContext.Provider>
143
+ </section>
144
+ </DialogContext.Provider>;
145
+ }
146
+ /**
147
+ * Heading element for dialog title.
148
+ * When rendered inside a Dialog, automatically gets the titleProps.
149
+ */
150
+ function Heading(props) {
151
+ const dialogContext = useContext(DialogContext);
152
+ const level = () => props.level ?? 2;
153
+ const id = () => dialogContext?.titleId;
154
+ let headingRef;
155
+ createEffect(() => {});
156
+ return <Switch>
157
+ <Match when={level() === 1}>
158
+ <h1 ref={headingRef} id={id()} class={props.class}>
159
+ {props.children}
160
+ </h1>
161
+ </Match>
162
+ <Match when={level() === 2}>
163
+ <h2 ref={headingRef} id={id()} class={props.class}>
164
+ {props.children}
165
+ </h2>
166
+ </Match>
167
+ <Match when={level() === 3}>
168
+ <h3 ref={headingRef} id={id()} class={props.class}>
169
+ {props.children}
170
+ </h3>
171
+ </Match>
172
+ <Match when={level() === 4}>
173
+ <h4 ref={headingRef} id={id()} class={props.class}>
174
+ {props.children}
175
+ </h4>
176
+ </Match>
177
+ <Match when={level() === 5}>
178
+ <h5 ref={headingRef} id={id()} class={props.class}>
179
+ {props.children}
180
+ </h5>
181
+ </Match>
182
+ <Match when={level() === 6}>
183
+ <h6 ref={headingRef} id={id()} class={props.class}>
184
+ {props.children}
185
+ </h6>
186
+ </Match>
187
+ </Switch>;
188
+ }
189
+ //#endregion
190
+ export { Dialog, DialogContext, Heading as DialogHeading, Heading, DialogTrigger, DialogTriggerContext, useDialogTrigger };
191
+
192
+ //# sourceMappingURL=Dialog.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.jsx","names":[],"sources":["../src/Dialog.tsx"],"sourcesContent":["/**\n * Dialog component for solidaria-components\n *\n * A headless dialog component that combines ARIA hooks.\n * Port of react-aria-components Dialog.\n */\n\nimport {\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createUniqueId,\n splitProps,\n useContext,\n Switch,\n Match,\n} from \"solid-js\";\nimport {\n createDialog,\n createOverlayTrigger,\n focusSafely,\n type AriaDialogProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createOverlayTriggerState,\n type OverlayTriggerState,\n} from \"@proyecto-viviana/solid-stately\";\nimport { DialogTriggerContext, useOverlayTriggerState } from \"./contexts\";\nimport { ButtonContext } from \"./Button\";\nimport {\n DEFAULT_SLOT,\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface DialogRenderProps {\n /** Function to close the dialog */\n close: () => void;\n}\n\nexport interface DialogProps extends Omit<AriaDialogProps, \"class\" | \"style\">, SlotProps {\n /** The children of the component - can be JSX or render function. */\n children?: RenderChildren<DialogRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DialogRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DialogRenderProps>;\n /** Callback when dialog should close */\n onClose?: () => void;\n}\n\nexport interface DialogTriggerProps {\n /** The children - should include a trigger and modal/popover content. */\n children: JSX.Element;\n /** Whether the dialog is open (controlled). */\n isOpen?: boolean;\n /** Whether the dialog is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\ninterface DialogContextValue {\n close: () => void;\n titleId?: string;\n}\n\nexport const DialogContext = createContext<DialogContextValue | null>(null);\n\nexport { DialogTriggerContext, useDialogTrigger } from \"./contexts\";\n\n/**\n * A DialogTrigger opens a dialog when a trigger element is pressed.\n * Children should include a trigger element (e.g. Button) and the dialog content.\n */\nexport function DialogTrigger(props: DialogTriggerProps): JSX.Element {\n const [local] = splitProps(props, [\"isOpen\", \"defaultOpen\", \"onOpenChange\"]);\n\n const state = createOverlayTriggerState({\n get isOpen() {\n return local.isOpen;\n },\n get defaultOpen() {\n return local.defaultOpen;\n },\n onOpenChange: local.onOpenChange,\n });\n\n let triggerRef: HTMLElement | null = null;\n const triggerId = createUniqueId();\n\n // Create overlay trigger props so registered trigger components can expose\n // the same expanded/controls relationship as React Aria DialogTrigger.\n const triggerAria = createOverlayTrigger({ type: \"dialog\" }, state, () => triggerRef);\n\n const restoreFocusToTrigger = () => {\n const trigger = triggerRef;\n if (!trigger?.isConnected) return;\n\n const win = trigger.ownerDocument.defaultView ?? window;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => {\n if (trigger.isConnected && !state.isOpen()) {\n focusSafely(trigger);\n }\n });\n });\n };\n\n const stateWithFocusRestore: OverlayTriggerState = {\n isOpen: state.isOpen,\n setOpen: (isOpen) => {\n state.setOpen(isOpen);\n if (!isOpen) {\n restoreFocusToTrigger();\n }\n },\n open: state.open,\n close: () => {\n state.close();\n restoreFocusToTrigger();\n },\n toggle: () => {\n const wasOpen = state.isOpen();\n state.toggle();\n if (wasOpen) {\n restoreFocusToTrigger();\n }\n },\n };\n\n const setTriggerRef = (el: HTMLElement | null) => {\n if (!el) return;\n if (!triggerRef || !triggerRef.isConnected) {\n triggerRef = el;\n }\n };\n\n // Context value - memoized to avoid unnecessary re-renders\n const contextValue = createMemo(() => ({\n state: stateWithFocusRestore,\n triggerRef: () => triggerRef,\n setTriggerRef,\n triggerId,\n triggerProps: triggerAria.triggerProps,\n overlayProps: triggerAria.overlayProps,\n }));\n\n // In SolidJS, we simply render children directly within the provider\n return (\n <DialogTriggerContext.Provider value={contextValue()}>\n {props.children}\n </DialogTriggerContext.Provider>\n );\n}\n\n/**\n * A dialog is an overlay shown above other content in an application.\n */\nexport function Dialog(props: DialogProps): JSX.Element {\n const [local, ariaProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"onClose\"],\n [\"role\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\"],\n );\n\n let dialogRef!: HTMLElement;\n\n // Get trigger context for aria-labelledby fallback\n const triggerContext = useContext(DialogTriggerContext);\n\n // createDialog returns dialogProps AND titleProps (with the id for the Heading)\n const { dialogProps, titleProps } = createDialog(\n {\n get role() {\n return ariaProps.role;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return ariaProps[\"aria-describedby\"];\n },\n },\n () => dialogRef,\n );\n\n // Get titleId from titleProps - this links Dialog's aria-labelledby to Heading's id\n const titleId = () => titleProps()?.id as string | undefined;\n\n // Get close function from OverlayTriggerState context or onClose prop\n const overlayState = useOverlayTriggerState();\n\n const close = () => {\n local.onClose?.();\n if (overlayState) {\n overlayState.close();\n return;\n }\n triggerContext?.state.close();\n };\n\n createEffect(() => {\n if (!dialogRef || ariaProps[\"aria-label\"] || ariaProps[\"aria-labelledby\"]) return;\n const labelledBy = dialogRef.getAttribute(\"aria-labelledby\");\n if (labelledBy && dialogRef.ownerDocument.getElementById(labelledBy)) return;\n\n const trigger = triggerContext?.triggerRef();\n if (trigger?.id) {\n dialogRef.setAttribute(\"aria-labelledby\", trigger.id);\n }\n });\n\n const renderValues = createMemo<DialogRenderProps>(() => ({\n close,\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-Dialog\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n return (\n <DialogContext.Provider value={{ close, titleId: titleId() }}>\n <section\n {...dialogProps()}\n {...domProps()}\n ref={dialogRef}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n >\n <ButtonContext.Provider\n value={{ slots: { [DEFAULT_SLOT]: {}, close: { onPress: () => close() } } }}\n >\n {renderProps.renderChildren()}\n </ButtonContext.Provider>\n </section>\n </DialogContext.Provider>\n );\n}\n\nexport interface HeadingProps {\n /** The children of the heading. */\n children: JSX.Element;\n /** The CSS className. */\n class?: string;\n /** The heading level (1-6). Defaults to 2. */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** The slot to render into. */\n slot?: string;\n}\n\n/**\n * Heading element for dialog title.\n * When rendered inside a Dialog, automatically gets the titleProps.\n */\nexport function Heading(props: HeadingProps): JSX.Element {\n const dialogContext = useContext(DialogContext);\n const level = () => props.level ?? 2;\n const id = () => dialogContext?.titleId;\n let headingRef: HTMLHeadingElement | undefined;\n\n createEffect(() => {\n const el = headingRef;\n if (!el) return;\n\n const contextId = id();\n if (contextId) {\n el.id = contextId;\n return;\n }\n\n if (!el.id) {\n const dialog = el.closest('[role=\"dialog\"],[role=\"alertdialog\"]');\n const labelledBy = dialog?.getAttribute(\"aria-labelledby\");\n if (labelledBy && !el.ownerDocument.getElementById(labelledBy)) {\n el.id = labelledBy;\n }\n }\n });\n\n return (\n <Switch>\n <Match when={level() === 1}>\n <h1 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h1>\n </Match>\n <Match when={level() === 2}>\n <h2 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h2>\n </Match>\n <Match when={level() === 3}>\n <h3 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h3>\n </Match>\n <Match when={level() === 4}>\n <h4 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h4>\n </Match>\n <Match when={level() === 5}>\n <h5 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h5>\n </Match>\n <Match when={level() === 6}>\n <h6 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h6>\n </Match>\n </Switch>\n );\n}\n\n// Keep backward compatibility\nexport { Heading as DialogHeading };\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Disclosure.d.ts","sourceRoot":"","sources":["../src/Disclosure.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Disclosure.d.ts","sourceRoot":"","sources":["../src/Disclosure.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,328 @@
1
+ import { dataAttr, filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { createComponent, getNextElement, insert, mergeProps, runHydrationEvents, spread, template, use } from "solid-js/web";
3
+ import { createContext, createMemo, createSignal, splitProps, useContext } from "solid-js";
4
+ import { createDisclosure, createDisclosureGroup, createFocusRing, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
5
+ import { createDisclosureGroupState, createDisclosureState } from "@proyecto-viviana/solid-stately";
6
+ //#region src/Disclosure.tsx
7
+ /**
8
+ * Disclosure and Accordion components for solidaria-components
9
+ *
10
+ * Disclosure is a widget that can be toggled to show or hide content.
11
+ * Accordion (DisclosureGroup) manages multiple disclosures with optional single-expand.
12
+ *
13
+ * Port of react-aria-components Disclosure.
14
+ */
15
+ var _tmpl$ = /*#__PURE__*/ template(`<div>`), _tmpl$2 = /*#__PURE__*/ template(`<button>`);
16
+ function assignRef(ref, el) {
17
+ if (!ref) return;
18
+ if (typeof ref === "function") ref(el);
19
+ else if (typeof ref === "object" && "current" in ref) ref.current = el;
20
+ }
21
+ const DisclosureContext = createContext(null);
22
+ const DisclosureStateContext = createContext(null);
23
+ function useDisclosureContext() {
24
+ return useContext(DisclosureContext);
25
+ }
26
+ const DisclosureGroupContext = createContext(null);
27
+ const DisclosureGroupStateContext = createContext(null);
28
+ function useDisclosureGroupContext() {
29
+ return useContext(DisclosureGroupContext);
30
+ }
31
+ /**
32
+ * DisclosureGroup manages a group of Disclosure components.
33
+ * Use this to create an accordion where only one item can be expanded at a time.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <DisclosureGroup>
38
+ * <Disclosure id="item1">
39
+ * <DisclosureTrigger>Item 1</DisclosureTrigger>
40
+ * <DisclosurePanel>Content 1</DisclosurePanel>
41
+ * </Disclosure>
42
+ * <Disclosure id="item2">
43
+ * <DisclosureTrigger>Item 2</DisclosureTrigger>
44
+ * <DisclosurePanel>Content 2</DisclosurePanel>
45
+ * </Disclosure>
46
+ * </DisclosureGroup>
47
+ * ```
48
+ */
49
+ function DisclosureGroup(props) {
50
+ const [local, rest] = splitProps(props, [
51
+ "class",
52
+ "style",
53
+ "allowsMultipleExpanded",
54
+ "isDisabled",
55
+ "expandedKeys",
56
+ "defaultExpandedKeys",
57
+ "onExpandedChange",
58
+ "ref"
59
+ ]);
60
+ const state = createDisclosureGroupState(() => ({
61
+ allowsMultipleExpanded: local.allowsMultipleExpanded,
62
+ isDisabled: local.isDisabled,
63
+ expandedKeys: local.expandedKeys,
64
+ defaultExpandedKeys: local.defaultExpandedKeys,
65
+ onExpandedChange: local.onExpandedChange
66
+ }));
67
+ const { groupProps } = createDisclosureGroup(() => ({ isDisabled: local.isDisabled }), state);
68
+ const renderValues = createMemo(() => ({ isDisabled: state.isDisabled }));
69
+ const renderProps = useRenderProps({
70
+ class: local.class,
71
+ style: local.style,
72
+ defaultClassName: "solidaria-DisclosureGroup"
73
+ }, renderValues);
74
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
75
+ const contextValue = { state };
76
+ const { ref: _ref, ...cleanGroupProps } = groupProps;
77
+ return createComponent(DisclosureGroupStateContext.Provider, {
78
+ value: state,
79
+ get children() {
80
+ return createComponent(DisclosureGroupContext.Provider, {
81
+ value: contextValue,
82
+ get children() {
83
+ var _el$ = getNextElement(_tmpl$);
84
+ use((el) => assignRef(local.ref, el), _el$);
85
+ spread(_el$, mergeProps(domProps, cleanGroupProps, {
86
+ get ["class"]() {
87
+ return renderProps.class();
88
+ },
89
+ get style() {
90
+ return renderProps.style();
91
+ },
92
+ get ["data-disabled"]() {
93
+ return dataAttr(state.isDisabled);
94
+ }
95
+ }), false, true);
96
+ insert(_el$, () => props.children);
97
+ runHydrationEvents();
98
+ return _el$;
99
+ }
100
+ });
101
+ }
102
+ });
103
+ }
104
+ /**
105
+ * Disclosure is a widget that can be toggled to show or hide content.
106
+ *
107
+ * @example
108
+ * ```tsx
109
+ * <Disclosure>
110
+ * <DisclosureTrigger>Show more</DisclosureTrigger>
111
+ * <DisclosurePanel>Hidden content here...</DisclosurePanel>
112
+ * </Disclosure>
113
+ * ```
114
+ */
115
+ function Disclosure(props) {
116
+ const [local, rest] = splitProps(props, [
117
+ "class",
118
+ "style",
119
+ "isDisabled",
120
+ "isExpanded",
121
+ "defaultExpanded",
122
+ "onExpandedChange",
123
+ "id",
124
+ "ref"
125
+ ]);
126
+ const groupContext = useDisclosureGroupContext();
127
+ const state = createDisclosureState(() => {
128
+ const id = local.id;
129
+ if (groupContext && id) return {
130
+ isExpanded: groupContext.state.isExpanded(id),
131
+ onExpandedChange: (expanded) => {
132
+ if (expanded !== groupContext.state.isExpanded(id)) groupContext.state.toggleKey(id);
133
+ local.onExpandedChange?.(expanded);
134
+ }
135
+ };
136
+ return {
137
+ isExpanded: local.isExpanded,
138
+ defaultExpanded: local.defaultExpanded,
139
+ onExpandedChange: local.onExpandedChange
140
+ };
141
+ });
142
+ const [panelRef, setPanelRefSignal] = createSignal(null);
143
+ const isDisabled = () => local.isDisabled || groupContext?.state.isDisabled || false;
144
+ const disclosureAria = createDisclosure(() => ({ isDisabled: isDisabled() }), state, panelRef);
145
+ const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({ within: true });
146
+ const renderValues = createMemo(() => ({
147
+ isExpanded: state.isExpanded(),
148
+ isFocusVisibleWithin: isFocusVisibleWithin(),
149
+ isDisabled: isDisabled(),
150
+ state
151
+ }));
152
+ const renderProps = useRenderProps({
153
+ class: local.class,
154
+ style: local.style,
155
+ defaultClassName: "solidaria-Disclosure"
156
+ }, renderValues);
157
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
158
+ const contextValue = {
159
+ state,
160
+ isDisabled,
161
+ disclosureAria
162
+ };
163
+ const setPanelRef = (el) => {
164
+ setPanelRefSignal(el);
165
+ };
166
+ return createComponent(DisclosureStateContext.Provider, {
167
+ value: state,
168
+ get children() {
169
+ return createComponent(DisclosureContext.Provider, {
170
+ value: contextValue,
171
+ get children() {
172
+ return createComponent(DisclosurePanelRefContext.Provider, {
173
+ value: setPanelRef,
174
+ get children() {
175
+ var _el$2 = getNextElement(_tmpl$);
176
+ use((el) => assignRef(local.ref, el), _el$2);
177
+ spread(_el$2, mergeProps(() => mergeProps$2(domProps(), focusWithinProps), {
178
+ get ["class"]() {
179
+ return renderProps.class();
180
+ },
181
+ get style() {
182
+ return renderProps.style();
183
+ },
184
+ get ["data-expanded"]() {
185
+ return dataAttr(state.isExpanded());
186
+ },
187
+ get ["data-disabled"]() {
188
+ return dataAttr(isDisabled());
189
+ },
190
+ get ["data-focus-visible-within"]() {
191
+ return dataAttr(isFocusVisibleWithin());
192
+ }
193
+ }), false, true);
194
+ insert(_el$2, () => props.children);
195
+ runHydrationEvents();
196
+ return _el$2;
197
+ }
198
+ });
199
+ }
200
+ });
201
+ }
202
+ });
203
+ }
204
+ const DisclosurePanelRefContext = createContext(null);
205
+ /**
206
+ * DisclosureTrigger is the button that toggles the disclosure.
207
+ * Pattern matches SelectTrigger for consistency.
208
+ */
209
+ function DisclosureTrigger(props) {
210
+ const context = useContext(DisclosureContext);
211
+ if (!context) throw new Error("DisclosureTrigger must be used within a Disclosure");
212
+ const { state, disclosureAria, isDisabled } = context;
213
+ const isExpanded = () => state.isExpanded();
214
+ const getButtonProps = () => {
215
+ const { ref: _ref, ...rest } = disclosureAria.buttonProps;
216
+ return rest;
217
+ };
218
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
219
+ const [local, rest] = splitProps(props, [
220
+ "children",
221
+ "class",
222
+ "style",
223
+ "ref"
224
+ ]);
225
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
226
+ const cleanFocusProps = () => {
227
+ const { ref: _ref, ...rest } = focusProps;
228
+ return rest;
229
+ };
230
+ return (() => {
231
+ var _el$3 = getNextElement(_tmpl$2);
232
+ use((el) => assignRef(local.ref, el), _el$3);
233
+ spread(_el$3, mergeProps(() => mergeProps$2(domProps(), getButtonProps(), cleanFocusProps()), {
234
+ "type": "button",
235
+ get ["class"]() {
236
+ return local.class;
237
+ },
238
+ get style() {
239
+ return local.style;
240
+ },
241
+ get ["data-expanded"]() {
242
+ return dataAttr(isExpanded());
243
+ },
244
+ get ["data-disabled"]() {
245
+ return dataAttr(isDisabled());
246
+ },
247
+ get ["data-pressed"]() {
248
+ return dataAttr(disclosureAria.isPressed());
249
+ },
250
+ get ["data-focused"]() {
251
+ return dataAttr(isFocused());
252
+ },
253
+ get ["data-focus-visible"]() {
254
+ return dataAttr(isFocusVisible());
255
+ }
256
+ }), false, true);
257
+ insert(_el$3, () => local.children);
258
+ runHydrationEvents();
259
+ return _el$3;
260
+ })();
261
+ }
262
+ /**
263
+ * DisclosurePanel contains the content that is shown/hidden.
264
+ */
265
+ function DisclosurePanel(props) {
266
+ const context = useContext(DisclosureContext);
267
+ if (!context) throw new Error("DisclosurePanel must be used within a Disclosure");
268
+ const panelRefSetter = useContext(DisclosurePanelRefContext);
269
+ const [local, rest] = splitProps(props, [
270
+ "class",
271
+ "style",
272
+ "role",
273
+ "ref"
274
+ ]);
275
+ const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({ within: true });
276
+ const isExpanded = () => context.state.isExpanded();
277
+ const isDisabled = () => context.isDisabled();
278
+ const renderValues = createMemo(() => ({
279
+ isExpanded: isExpanded(),
280
+ isFocusVisibleWithin: isFocusVisibleWithin(),
281
+ isDisabled: isDisabled(),
282
+ state: context.state
283
+ }));
284
+ const renderProps = useRenderProps({
285
+ get children() {
286
+ return props.children;
287
+ },
288
+ class: local.class,
289
+ style: local.style,
290
+ defaultClassName: "solidaria-DisclosurePanel"
291
+ }, renderValues);
292
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
293
+ const getPanelProps = () => {
294
+ const { ref: _ref, ...rest } = context.disclosureAria.panelProps;
295
+ return rest;
296
+ };
297
+ return (() => {
298
+ var _el$4 = getNextElement(_tmpl$);
299
+ use((el) => {
300
+ panelRefSetter?.(el);
301
+ assignRef(local.ref, el);
302
+ }, _el$4);
303
+ spread(_el$4, mergeProps(() => mergeProps$2(domProps(), focusWithinProps), getPanelProps, {
304
+ get role() {
305
+ return local.role ?? "group";
306
+ },
307
+ get ["class"]() {
308
+ return renderProps.class();
309
+ },
310
+ get style() {
311
+ return renderProps.style();
312
+ },
313
+ get ["data-expanded"]() {
314
+ return dataAttr(isExpanded());
315
+ },
316
+ get ["data-focus-visible-within"]() {
317
+ return dataAttr(isFocusVisibleWithin());
318
+ }
319
+ }), false, true);
320
+ insert(_el$4, () => renderProps.renderChildren());
321
+ runHydrationEvents();
322
+ return _el$4;
323
+ })();
324
+ }
325
+ //#endregion
326
+ export { Disclosure, DisclosureContext, DisclosureGroup, DisclosureGroupContext, DisclosureGroupStateContext, DisclosurePanel, DisclosureStateContext, DisclosureTrigger, useDisclosureContext, useDisclosureGroupContext };
327
+
328
+ //# sourceMappingURL=Disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure.js","names":["JSX","createContext","createMemo","createSignal","splitProps","useContext","createDisclosureState","createDisclosureGroupState","DisclosureState","DisclosureGroupState","DisclosureStateProps","DisclosureGroupStateProps","createDisclosure","createDisclosureGroup","createFocusRing","mergeProps","RenderChildren","ClassNameOrFunction","StyleOrFunction","useRenderProps","filterDOMProps","dataAttr","RefLike","T","el","current","assignRef","ref","DisclosureRenderProps","isExpanded","isFocusVisibleWithin","isDisabled","state","DisclosureGroupRenderProps","DisclosureProps","children","Element","class","style","id","HTMLDivElement","DisclosureGroupProps","DisclosureTriggerProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","CSSProperties","DisclosurePanelProps","HTMLAttributes","HTMLElement","role","DisclosureContextValue","disclosureAria","buttonProps","panelProps","isPressed","DisclosureContext","DisclosureStateContext","useDisclosureContext","DisclosureGroupContextValue","DisclosureGroupContext","DisclosureGroupStateContext","useDisclosureGroupContext","DisclosureGroup","props","local","rest","allowsMultipleExpanded","expandedKeys","defaultExpandedKeys","onExpandedChange","groupProps","renderValues","renderProps","defaultClassName","domProps","Record","global","contextValue","_ref","cleanGroupProps","_$createComponent","Provider","value","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","data-disabled","_$insert","_$runHydrationEvents","Disclosure","groupContext","expanded","toggleKey","defaultExpanded","panelRef","setPanelRefSignal","isFocusVisible","focusProps","focusWithinProps","within","setPanelRef","DisclosurePanelRefContext","_el$2","data-expanded","data-focus-visible-within","DisclosureTrigger","context","Error","getButtonProps","isFocused","cleanFocusProps","_el$3","_tmpl$2","data-pressed","data-focused","data-focus-visible","DisclosurePanel","panelRefSetter","getPanelProps","_el$4","renderChildren"],"sources":["../src/Disclosure.tsx"],"sourcesContent":["/**\n * Disclosure and Accordion components for solidaria-components\n *\n * Disclosure is a widget that can be toggled to show or hide content.\n * Accordion (DisclosureGroup) manages multiple disclosures with optional single-expand.\n *\n * Port of react-aria-components Disclosure.\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDisclosureState,\n createDisclosureGroupState,\n type DisclosureState,\n type DisclosureGroupState,\n type DisclosureStateProps,\n type DisclosureGroupStateProps,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n createDisclosure,\n createDisclosureGroup,\n createFocusRing,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\n\ntype RefLike<T> = T | ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, el: T): void {\n if (!ref) {\n return;\n }\n\n if (typeof ref === \"function\") {\n (ref as (el: T) => void)(el);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = el;\n }\n}\n\nexport interface DisclosureRenderProps {\n /** Whether the disclosure is expanded. */\n isExpanded: boolean;\n /** Whether the disclosure has keyboard focus within. */\n isFocusVisibleWithin: boolean;\n /** Whether the disclosure is disabled. */\n isDisabled: boolean;\n /** The disclosure state. */\n state: DisclosureState;\n}\n\nexport interface DisclosureGroupRenderProps {\n /** Whether all items are disabled. */\n isDisabled: boolean;\n}\n\nexport interface DisclosureProps extends DisclosureStateProps {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureRenderProps>;\n /** Whether the disclosure is disabled. */\n isDisabled?: boolean;\n /** A unique identifier for the disclosure (used in groups). */\n id?: string;\n /** A ref for the disclosure root element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface DisclosureGroupProps extends DisclosureGroupStateProps {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureGroupRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureGroupRenderProps>;\n /** A ref for the disclosure group root element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface DisclosureTriggerProps extends Omit<\n JSX.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"class\" | \"style\" | \"type\" | \"ref\"\n> {\n /** The children of the trigger. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n /** A ref for the trigger button element. */\n ref?: RefLike<HTMLButtonElement>;\n}\n\nexport interface DisclosurePanelProps extends Omit<\n JSX.HTMLAttributes<HTMLElement>,\n \"children\" | \"class\" | \"style\" | \"role\" | \"ref\"\n> {\n /** The children of the panel. */\n children?: RenderChildren<DisclosureRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureRenderProps>;\n /** The accessibility role for the disclosure panel. */\n role?: \"group\" | \"region\";\n /** A ref for the panel element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\ninterface DisclosureContextValue {\n state: DisclosureState;\n isDisabled: () => boolean;\n /** The disclosure ARIA result object - access .buttonProps and .panelProps as getters */\n disclosureAria: {\n readonly buttonProps: JSX.ButtonHTMLAttributes<HTMLButtonElement>;\n readonly panelProps: JSX.HTMLAttributes<HTMLElement>;\n readonly isPressed: () => boolean;\n };\n}\n\nexport const DisclosureContext = createContext<DisclosureContextValue | null>(null);\nexport const DisclosureStateContext = createContext<DisclosureState | null>(null);\n\nexport function useDisclosureContext(): DisclosureContextValue | null {\n return useContext(DisclosureContext);\n}\n\ninterface DisclosureGroupContextValue {\n state: DisclosureGroupState;\n}\n\nexport const DisclosureGroupContext = createContext<DisclosureGroupContextValue | null>(null);\nexport const DisclosureGroupStateContext = createContext<DisclosureGroupState | null>(null);\n\nexport function useDisclosureGroupContext(): DisclosureGroupContextValue | null {\n return useContext(DisclosureGroupContext);\n}\n\n/**\n * DisclosureGroup manages a group of Disclosure components.\n * Use this to create an accordion where only one item can be expanded at a time.\n *\n * @example\n * ```tsx\n * <DisclosureGroup>\n * <Disclosure id=\"item1\">\n * <DisclosureTrigger>Item 1</DisclosureTrigger>\n * <DisclosurePanel>Content 1</DisclosurePanel>\n * </Disclosure>\n * <Disclosure id=\"item2\">\n * <DisclosureTrigger>Item 2</DisclosureTrigger>\n * <DisclosurePanel>Content 2</DisclosurePanel>\n * </Disclosure>\n * </DisclosureGroup>\n * ```\n */\nexport function DisclosureGroup(props: DisclosureGroupProps): JSX.Element {\n // IMPORTANT: Don't destructure or access props.children early!\n // In SolidJS, children are lazily evaluated. Accessing them before\n // the context provider renders causes them to evaluate outside the context.\n // See: https://github.com/solidjs/solid/issues/182\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"allowsMultipleExpanded\",\n \"isDisabled\",\n \"expandedKeys\",\n \"defaultExpandedKeys\",\n \"onExpandedChange\",\n \"ref\",\n ]);\n\n // Create group state\n const state = createDisclosureGroupState(() => ({\n allowsMultipleExpanded: local.allowsMultipleExpanded,\n isDisabled: local.isDisabled,\n expandedKeys: local.expandedKeys,\n defaultExpandedKeys: local.defaultExpandedKeys,\n onExpandedChange: local.onExpandedChange,\n }));\n\n // Create group accessibility props\n const { groupProps } = createDisclosureGroup(() => ({ isDisabled: local.isDisabled }), state);\n\n const renderValues = createMemo<DisclosureGroupRenderProps>(() => ({\n isDisabled: state.isDisabled,\n }));\n\n // Resolve render props - don't pass children, we'll render props.children directly\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DisclosureGroup\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: DisclosureGroupContextValue = { state };\n\n // Extract ref from groupProps to avoid type conflicts\n const { ref: _ref, ...cleanGroupProps } = groupProps as Record<string, unknown>;\n\n return (\n <DisclosureGroupStateContext.Provider value={state}>\n <DisclosureGroupContext.Provider value={contextValue}>\n <div\n ref={(el) => assignRef(local.ref, el)}\n {...domProps()}\n {...cleanGroupProps}\n class={renderProps.class()}\n style={renderProps.style()}\n data-disabled={dataAttr(state.isDisabled)}\n >\n {props.children}\n </div>\n </DisclosureGroupContext.Provider>\n </DisclosureGroupStateContext.Provider>\n );\n}\n\n/**\n * Disclosure is a widget that can be toggled to show or hide content.\n *\n * @example\n * ```tsx\n * <Disclosure>\n * <DisclosureTrigger>Show more</DisclosureTrigger>\n * <DisclosurePanel>Hidden content here...</DisclosurePanel>\n * </Disclosure>\n * ```\n */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n // IMPORTANT: Don't destructure or access props.children early!\n // In SolidJS, children are lazily evaluated. Accessing them before\n // the context provider renders causes them to evaluate outside the context.\n // See: https://github.com/solidjs/solid/issues/182\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"isDisabled\",\n \"isExpanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"id\",\n \"ref\",\n ]);\n\n // Check if we're inside a DisclosureGroup\n const groupContext = useDisclosureGroupContext();\n\n // Create disclosure state\n // If in a group, sync with group state\n const state = createDisclosureState(() => {\n const id = local.id;\n if (groupContext && id) {\n return {\n isExpanded: groupContext.state.isExpanded(id),\n onExpandedChange: (expanded: boolean) => {\n if (expanded !== groupContext.state.isExpanded(id)) {\n groupContext.state.toggleKey(id);\n }\n local.onExpandedChange?.(expanded);\n },\n };\n }\n return {\n isExpanded: local.isExpanded,\n defaultExpanded: local.defaultExpanded,\n onExpandedChange: local.onExpandedChange,\n };\n });\n\n // Panel ref as a signal so the createEffect in createDisclosure can track it\n const [panelRef, setPanelRefSignal] = createSignal<HTMLElement | null>(null);\n\n // Determine if disabled (used in multiple places)\n const isDisabled = () => local.isDisabled || groupContext?.state.isDisabled || false;\n\n // Create disclosure accessibility props\n // Pass props as accessor function for reactivity\n // IMPORTANT: Don't destructure! The getters must be called fresh each render\n const disclosureAria = createDisclosure(\n () => ({ isDisabled: isDisabled() }),\n state,\n panelRef, // Pass the accessor directly\n );\n const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({\n within: true,\n });\n\n const renderValues = createMemo<DisclosureRenderProps>(() => ({\n isExpanded: state.isExpanded(),\n isFocusVisibleWithin: isFocusVisibleWithin(),\n isDisabled: isDisabled(),\n state,\n }));\n\n // Resolve render props - don't pass children, we'll render props.children directly\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Disclosure\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n // Context value - pass the disclosureAria object with getters intact\n const contextValue: DisclosureContextValue = {\n state,\n isDisabled, // Pass the accessor function, not the value\n disclosureAria,\n };\n\n const setPanelRef = (el: HTMLElement | null) => {\n setPanelRefSignal(el);\n };\n\n return (\n <DisclosureStateContext.Provider value={state}>\n <DisclosureContext.Provider value={contextValue}>\n <DisclosurePanelRefContext.Provider value={setPanelRef}>\n <div\n ref={(el) => assignRef(local.ref, el)}\n {...mergeProps(\n domProps() as Record<string, unknown>,\n focusWithinProps as Record<string, unknown>,\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n data-expanded={dataAttr(state.isExpanded())}\n data-disabled={dataAttr(isDisabled())}\n data-focus-visible-within={dataAttr(isFocusVisibleWithin())}\n >\n {props.children}\n </div>\n </DisclosurePanelRefContext.Provider>\n </DisclosureContext.Provider>\n </DisclosureStateContext.Provider>\n );\n}\n\n// Internal context to pass panel ref setter\nconst DisclosurePanelRefContext = createContext<((el: HTMLElement | null) => void) | null>(null);\n\n/**\n * DisclosureTrigger is the button that toggles the disclosure.\n * Pattern matches SelectTrigger for consistency.\n */\nexport function DisclosureTrigger(props: DisclosureTriggerProps): JSX.Element {\n // Get context - now safe because parent uses lazy children evaluation\n const context = useContext(DisclosureContext);\n if (!context) {\n throw new Error(\"DisclosureTrigger must be used within a Disclosure\");\n }\n\n const { state, disclosureAria, isDisabled } = context;\n\n // Reactive accessors\n const isExpanded = () => state.isExpanded();\n\n // Get buttonProps from the getter each time - this ensures reactivity\n // IMPORTANT: Call the getter fresh each render to get updated aria-expanded, etc.\n const getButtonProps = () => {\n const { ref: _ref, ...rest } = disclosureAria.buttonProps as Record<string, unknown>;\n return rest;\n };\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"style\", \"ref\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <button\n {...mergeProps(domProps() as Record<string, unknown>, getButtonProps(), cleanFocusProps())}\n ref={(el) => assignRef(local.ref, el)}\n type=\"button\"\n class={local.class}\n style={local.style}\n data-expanded={dataAttr(isExpanded())}\n data-disabled={dataAttr(isDisabled())}\n data-pressed={dataAttr(disclosureAria.isPressed())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n >\n {local.children}\n </button>\n );\n}\n\n/**\n * DisclosurePanel contains the content that is shown/hidden.\n */\nexport function DisclosurePanel(props: DisclosurePanelProps): JSX.Element {\n // Get context - now safe because parent uses lazy children evaluation\n const context = useContext(DisclosureContext);\n if (!context) {\n throw new Error(\"DisclosurePanel must be used within a Disclosure\");\n }\n const panelRefSetter = useContext(DisclosurePanelRefContext);\n\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"role\", \"ref\"]);\n const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({\n within: true,\n });\n\n // Reactive accessors\n const isExpanded = () => context.state.isExpanded();\n const isDisabled = () => context.isDisabled();\n\n const renderValues = createMemo<DisclosureRenderProps>(() => ({\n isExpanded: isExpanded(),\n isFocusVisibleWithin: isFocusVisibleWithin(),\n isDisabled: isDisabled(),\n state: context.state,\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-DisclosurePanel\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n // Get panelProps from the getter each time - this ensures reactivity\n // IMPORTANT: Call the getter fresh each render to get updated hidden attribute, etc.\n const getPanelProps = () => {\n const { ref: _ref, ...rest } = context.disclosureAria.panelProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <div\n {...mergeProps(\n domProps() as Record<string, unknown>,\n focusWithinProps as Record<string, unknown>,\n )}\n {...getPanelProps()}\n ref={(el) => {\n panelRefSetter?.(el);\n assignRef(local.ref, el);\n }}\n role={local.role ?? \"group\"}\n class={renderProps.class()}\n style={renderProps.style()}\n data-expanded={dataAttr(isExpanded())}\n data-focus-visible-within={dataAttr(isFocusVisibleWithin())}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\nexport type { DisclosureState, DisclosureGroupState };\n"],"mappings":"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"}