@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
package/dist/Tree.js ADDED
@@ -0,0 +1,1424 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { SharedElementTransition } from "./SharedElementTransition.js";
3
+ import { handleLinkClick, useLinkProps, useRouter } from "./RouterProvider.js";
4
+ import { CollectionRendererContext, flattenCollectionEntries, isCollectionSection, useCollectionRenderer } from "./Collection.js";
5
+ import { r as useVirtualizerContext } from "./Virtualizer2.js";
6
+ import { getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator } from "./DragAndDrop.js";
7
+ import { GridListHeader, GridListHeaderContext, GridListHeaderInnerContext } from "./GridList.js";
8
+ import { className, createComponent, delegateEvents, effect, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, setStyleProperty, spread, style, template, use } from "solid-js/web";
9
+ import { For, Show, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
10
+ import { createFocusRing, createGridListSection, createHover, createTree, createTreeItem, createTreeSelectionCheckbox, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
11
+ import { createTreeCollection, createTreeState } from "@proyecto-viviana/solid-stately";
12
+ //#region src/Tree.tsx
13
+ /**
14
+ * Tree component for solidaria-components
15
+ *
16
+ * A pre-wired headless tree that combines state + aria hooks.
17
+ * Based on react-aria-components/src/Tree.tsx
18
+ *
19
+ * Tree displays hierarchical data with expandable/collapsible nodes,
20
+ * supporting keyboard navigation and selection.
21
+ */
22
+ var _tmpl$ = /*#__PURE__*/ template(`<div><!$><!/><!$><!/>`), _tmpl$2 = /*#__PURE__*/ template(`<div role=row aria-level=1 style=display:contents><div role=gridcell style=display:contents>`), _tmpl$3 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=top>`), _tmpl$4 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=bottom>`), _tmpl$5 = /*#__PURE__*/ template(`<div>`), _tmpl$6 = /*#__PURE__*/ template(`<button>`), _tmpl$7 = /*#__PURE__*/ template(`<input>`), _tmpl$8 = /*#__PURE__*/ template(`<div inert style=position:relative;width:0;height:0;overflow:hidden><div style=position:absolute;height:1px;width:1px>`), _tmpl$9 = /*#__PURE__*/ template(`<div role=row><div role=gridcell>`);
23
+ function assignRef(ref, el) {
24
+ if (!ref) return;
25
+ if (typeof ref === "function") ref(el);
26
+ else ref.current = el;
27
+ }
28
+ const X_SWITCH_THRESHOLD = 10;
29
+ const Y_SWITCH_THRESHOLD = 5;
30
+ const EXPANSION_KEYS = {
31
+ expand: {
32
+ ltr: "ArrowRight",
33
+ rtl: "ArrowLeft"
34
+ },
35
+ collapse: {
36
+ ltr: "ArrowLeft",
37
+ rtl: "ArrowRight"
38
+ }
39
+ };
40
+ function resolveTreeDirection(element) {
41
+ if (element) {
42
+ const dir = element.closest("[dir]")?.getAttribute("dir");
43
+ if (dir === "rtl") return "rtl";
44
+ if (dir === "ltr") return "ltr";
45
+ if (typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
46
+ const computedDirection = window.getComputedStyle(element).direction;
47
+ if (computedDirection === "rtl") return "rtl";
48
+ if (computedDirection === "ltr") return "ltr";
49
+ }
50
+ }
51
+ if (typeof document !== "undefined") return document.dir === "rtl" ? "rtl" : "ltr";
52
+ return "ltr";
53
+ }
54
+ function createTreeDropTargetDelegate(delegate, state, direction, baseKeyboardNav) {
55
+ const pointerTracking = {
56
+ lastY: 0,
57
+ lastX: 0,
58
+ yDirection: null,
59
+ xDirection: null,
60
+ boundaryContext: null
61
+ };
62
+ const getPotentialTargets = (originalTarget, isValidDropTarget) => {
63
+ if (originalTarget.dropPosition === "on") return [originalTarget];
64
+ const collection = state.collection;
65
+ const getNodeNextKey = (node) => {
66
+ if (!node) return null;
67
+ return node.nextKey ?? null;
68
+ };
69
+ const target = { ...originalTarget };
70
+ let currentItem = collection.getItem(target.key);
71
+ while (currentItem && currentItem.type !== "item") {
72
+ const nextKey = getNodeNextKey(currentItem);
73
+ if (nextKey == null) break;
74
+ target.key = nextKey;
75
+ currentItem = collection.getItem(nextKey);
76
+ }
77
+ const potentialTargets = [target];
78
+ if (currentItem && currentItem.hasChildNodes && state.expandedKeys.has(currentItem.key) && target.dropPosition === "after") {
79
+ let firstChildItemNode = null;
80
+ for (const child of collection.getChildren(currentItem.key)) if (child.type === "item") {
81
+ firstChildItemNode = child;
82
+ break;
83
+ }
84
+ if (firstChildItemNode) {
85
+ const beforeFirstChildTarget = {
86
+ type: "item",
87
+ key: firstChildItemNode.key,
88
+ dropPosition: "before"
89
+ };
90
+ if (isValidDropTarget(beforeFirstChildTarget)) return [beforeFirstChildTarget];
91
+ return [];
92
+ }
93
+ }
94
+ if (getNodeNextKey(currentItem) != null) return [originalTarget];
95
+ let parentKey = currentItem?.parentKey ?? null;
96
+ const ancestorTargets = [];
97
+ while (parentKey != null) {
98
+ const parentItem = collection.getItem(parentKey);
99
+ const nextKey = getNodeNextKey(parentItem);
100
+ const nextItem = nextKey != null ? collection.getItem(nextKey) : null;
101
+ if (!nextItem || nextItem.parentKey !== parentKey) {
102
+ const afterParentTarget = {
103
+ type: "item",
104
+ key: parentKey,
105
+ dropPosition: "after"
106
+ };
107
+ if (isValidDropTarget(afterParentTarget)) ancestorTargets.push(afterParentTarget);
108
+ if (nextItem) break;
109
+ }
110
+ parentKey = parentItem?.parentKey ?? null;
111
+ }
112
+ if (ancestorTargets.length > 0) potentialTargets.push(...ancestorTargets);
113
+ if (potentialTargets.length === 1) {
114
+ const nextKey = collection.getKeyAfter(target.key);
115
+ const nextNode = nextKey != null ? collection.getItem(nextKey) : null;
116
+ if (nextKey != null && nextNode && currentItem && nextNode.level != null && currentItem.level != null && nextNode.level > currentItem.level) {
117
+ const beforeTarget = {
118
+ type: "item",
119
+ key: nextKey,
120
+ dropPosition: "before"
121
+ };
122
+ if (isValidDropTarget(beforeTarget)) return [beforeTarget];
123
+ }
124
+ }
125
+ return potentialTargets.filter((candidate) => isValidDropTarget(candidate));
126
+ };
127
+ const selectTarget = (potentialTargets, originalTarget, x, y, currentYMovement, currentXMovement) => {
128
+ if (potentialTargets.length < 2) return potentialTargets[0];
129
+ const parentKey = state.collection.getItem(originalTarget.key)?.parentKey;
130
+ if (parentKey == null) return potentialTargets[0];
131
+ if (!pointerTracking.boundaryContext || pointerTracking.boundaryContext.parentKey !== parentKey) pointerTracking.boundaryContext = {
132
+ parentKey,
133
+ preferredTargetIndex: pointerTracking.yDirection === "up" ? potentialTargets.length - 1 : 0,
134
+ lastSwitchY: y,
135
+ lastSwitchX: x
136
+ };
137
+ const boundaryContext = pointerTracking.boundaryContext;
138
+ const distanceFromLastXSwitch = Math.abs(x - boundaryContext.lastSwitchX);
139
+ if (Math.abs(y - boundaryContext.lastSwitchY) > Y_SWITCH_THRESHOLD && currentYMovement) {
140
+ const currentIndex = boundaryContext.preferredTargetIndex ?? 0;
141
+ if (currentYMovement === "down" && currentIndex === 0) boundaryContext.preferredTargetIndex = potentialTargets.length - 1;
142
+ else if (currentYMovement === "up" && currentIndex === potentialTargets.length - 1) boundaryContext.preferredTargetIndex = 0;
143
+ pointerTracking.xDirection = null;
144
+ }
145
+ if (distanceFromLastXSwitch > X_SWITCH_THRESHOLD && currentXMovement) {
146
+ const currentTargetIndex = boundaryContext.preferredTargetIndex ?? 0;
147
+ if (currentXMovement === "left") {
148
+ if (direction === "ltr") {
149
+ if (currentTargetIndex < potentialTargets.length - 1) {
150
+ boundaryContext.preferredTargetIndex = currentTargetIndex + 1;
151
+ boundaryContext.lastSwitchX = x;
152
+ }
153
+ } else if (currentTargetIndex > 0) {
154
+ boundaryContext.preferredTargetIndex = currentTargetIndex - 1;
155
+ boundaryContext.lastSwitchX = x;
156
+ }
157
+ } else if (currentXMovement === "right") {
158
+ if (direction === "ltr") {
159
+ if (currentTargetIndex > 0) {
160
+ boundaryContext.preferredTargetIndex = currentTargetIndex - 1;
161
+ boundaryContext.lastSwitchX = x;
162
+ }
163
+ } else if (currentTargetIndex < potentialTargets.length - 1) {
164
+ boundaryContext.preferredTargetIndex = currentTargetIndex + 1;
165
+ boundaryContext.lastSwitchX = x;
166
+ }
167
+ }
168
+ pointerTracking.yDirection = null;
169
+ }
170
+ return potentialTargets[Math.max(0, Math.min(boundaryContext.preferredTargetIndex ?? 0, potentialTargets.length - 1))];
171
+ };
172
+ const getKeyboardNavigationTarget = (target, dir, isValidDropTarget) => {
173
+ const collection = state.collection;
174
+ if (target && target.type === "item") {
175
+ const node = collection.getItem(target.key);
176
+ if (!(node != null && node.rowIndex != null)) return baseKeyboardNav?.(target, dir, isValidDropTarget) ?? null;
177
+ }
178
+ const tryValid = (t) => isValidDropTarget(t) ? t : null;
179
+ const getNodeNextKey = (node) => {
180
+ if (!node) return null;
181
+ return node.nextKey ?? null;
182
+ };
183
+ const isExpanded = (key) => {
184
+ const node = collection.getItem(key);
185
+ if (!node || !node.hasChildNodes) return false;
186
+ return state.expandedKeys.has(key);
187
+ };
188
+ const getFirstChildItemKey = (key) => {
189
+ for (const child of collection.getChildren(key)) if (child.type === "item") return child.key;
190
+ return null;
191
+ };
192
+ const getLastChildItemKey = (key) => {
193
+ let lastKey = null;
194
+ for (const child of collection.getChildren(key)) if (child.type === "item") lastKey = child.key;
195
+ return lastKey;
196
+ };
197
+ const getDeepestLastChild = (key) => {
198
+ let current = key;
199
+ while (isExpanded(current)) {
200
+ const lastChild = getLastChildItemKey(current);
201
+ if (lastChild == null) break;
202
+ current = lastChild;
203
+ }
204
+ return current;
205
+ };
206
+ if (dir === "next") {
207
+ if (!target) return tryValid({ type: "root" });
208
+ if (target.type === "root") {
209
+ const firstKey = collection.getFirstKey();
210
+ if (firstKey != null) return tryValid({
211
+ type: "item",
212
+ key: firstKey,
213
+ dropPosition: "before"
214
+ });
215
+ return null;
216
+ }
217
+ if (target.type === "item") switch (target.dropPosition) {
218
+ case "before": return tryValid({
219
+ type: "item",
220
+ key: target.key,
221
+ dropPosition: "on"
222
+ }) ?? tryValid({
223
+ type: "item",
224
+ key: target.key,
225
+ dropPosition: "after"
226
+ });
227
+ case "on": {
228
+ if (isExpanded(target.key)) {
229
+ const firstChild = getFirstChildItemKey(target.key);
230
+ if (firstChild != null) return tryValid({
231
+ type: "item",
232
+ key: firstChild,
233
+ dropPosition: "before"
234
+ }) ?? tryValid({
235
+ type: "item",
236
+ key: firstChild,
237
+ dropPosition: "on"
238
+ });
239
+ }
240
+ const nextKey = collection.getKeyAfter(target.key);
241
+ const targetNode = collection.getItem(target.key);
242
+ const nextNode = nextKey != null ? collection.getItem(nextKey) : null;
243
+ if (targetNode && nextNode && nextNode.level != null && targetNode.level != null && nextNode.level >= targetNode.level) return tryValid({
244
+ type: "item",
245
+ key: nextNode.key,
246
+ dropPosition: "before"
247
+ }) ?? tryValid({
248
+ type: "item",
249
+ key: target.key,
250
+ dropPosition: "after"
251
+ });
252
+ return tryValid({
253
+ type: "item",
254
+ key: target.key,
255
+ dropPosition: "after"
256
+ });
257
+ }
258
+ case "after": {
259
+ if (isExpanded(target.key)) {
260
+ const firstChild = getFirstChildItemKey(target.key);
261
+ if (firstChild != null) return tryValid({
262
+ type: "item",
263
+ key: firstChild,
264
+ dropPosition: "before"
265
+ }) ?? tryValid({
266
+ type: "item",
267
+ key: firstChild,
268
+ dropPosition: "on"
269
+ });
270
+ }
271
+ const targetNode = collection.getItem(target.key);
272
+ const nextSiblingKey = getNodeNextKey(targetNode);
273
+ if (nextSiblingKey != null) {
274
+ const nextSibling = collection.getItem(nextSiblingKey);
275
+ if (nextSibling?.type === "item") return tryValid({
276
+ type: "item",
277
+ key: nextSibling.key,
278
+ dropPosition: "before"
279
+ }) ?? tryValid({
280
+ type: "item",
281
+ key: nextSibling.key,
282
+ dropPosition: "on"
283
+ });
284
+ }
285
+ if (targetNode?.parentKey != null) {
286
+ const parentNode = collection.getItem(targetNode.parentKey);
287
+ const parentNextKey = getNodeNextKey(parentNode);
288
+ const parentNextNode = parentNextKey != null ? collection.getItem(parentNextKey) : null;
289
+ if (parentNextNode?.type === "item") return tryValid({
290
+ type: "item",
291
+ key: parentNextNode.key,
292
+ dropPosition: "before"
293
+ });
294
+ if (parentNode?.type === "item") return tryValid({
295
+ type: "item",
296
+ key: parentNode.key,
297
+ dropPosition: "after"
298
+ });
299
+ }
300
+ const nextKey = collection.getKeyAfter(target.key);
301
+ if (nextKey != null) return tryValid({
302
+ type: "item",
303
+ key: nextKey,
304
+ dropPosition: "before"
305
+ }) ?? tryValid({
306
+ type: "item",
307
+ key: nextKey,
308
+ dropPosition: "on"
309
+ });
310
+ return tryValid({ type: "root" });
311
+ }
312
+ }
313
+ return null;
314
+ }
315
+ if (!target || target.type === "root") {
316
+ const lastKey = collection.getLastKey();
317
+ if (lastKey != null) {
318
+ let rootKey = lastKey;
319
+ let node = collection.getItem(lastKey);
320
+ while (node?.parentKey != null) {
321
+ rootKey = node.parentKey;
322
+ node = collection.getItem(rootKey);
323
+ }
324
+ return tryValid({
325
+ type: "item",
326
+ key: rootKey,
327
+ dropPosition: "after"
328
+ });
329
+ }
330
+ return null;
331
+ }
332
+ if (target.type === "item") switch (target.dropPosition) {
333
+ case "after": {
334
+ const deepest = getDeepestLastChild(target.key);
335
+ if (deepest !== target.key) return tryValid({
336
+ type: "item",
337
+ key: deepest,
338
+ dropPosition: "after"
339
+ }) ?? tryValid({
340
+ type: "item",
341
+ key: target.key,
342
+ dropPosition: "on"
343
+ });
344
+ return tryValid({
345
+ type: "item",
346
+ key: target.key,
347
+ dropPosition: "on"
348
+ });
349
+ }
350
+ case "on": return tryValid({
351
+ type: "item",
352
+ key: target.key,
353
+ dropPosition: "before"
354
+ });
355
+ case "before": {
356
+ const prevKey = collection.getKeyBefore(target.key);
357
+ if (prevKey != null) return tryValid({
358
+ type: "item",
359
+ key: getDeepestLastChild(prevKey),
360
+ dropPosition: "after"
361
+ }) ?? tryValid({
362
+ type: "item",
363
+ key: prevKey,
364
+ dropPosition: "on"
365
+ });
366
+ return tryValid({ type: "root" });
367
+ }
368
+ }
369
+ return null;
370
+ };
371
+ return {
372
+ getDropTargetFromPoint(x, y, isValidDropTarget) {
373
+ const baseTarget = delegate.getDropTargetFromPoint(x, y, isValidDropTarget);
374
+ if (!baseTarget || baseTarget.type === "root") return baseTarget;
375
+ const deltaY = y - pointerTracking.lastY;
376
+ const deltaX = x - pointerTracking.lastX;
377
+ let currentYMovement = pointerTracking.yDirection;
378
+ let currentXMovement = pointerTracking.xDirection;
379
+ if (Math.abs(deltaY) > Y_SWITCH_THRESHOLD) {
380
+ currentYMovement = deltaY > 0 ? "down" : "up";
381
+ pointerTracking.yDirection = currentYMovement;
382
+ pointerTracking.lastY = y;
383
+ }
384
+ if (Math.abs(deltaX) > X_SWITCH_THRESHOLD) {
385
+ currentXMovement = deltaX > 0 ? "right" : "left";
386
+ pointerTracking.xDirection = currentXMovement;
387
+ pointerTracking.lastX = x;
388
+ }
389
+ let target = baseTarget;
390
+ if (target.dropPosition === "before") {
391
+ const keyBefore = state.collection.getKeyBefore(target.key);
392
+ if (keyBefore != null) {
393
+ const normalized = {
394
+ type: "item",
395
+ key: keyBefore,
396
+ dropPosition: "after"
397
+ };
398
+ if (isValidDropTarget(normalized)) target = normalized;
399
+ }
400
+ }
401
+ const potentialTargets = getPotentialTargets(target, isValidDropTarget);
402
+ if (potentialTargets.length === 0) return { type: "root" };
403
+ if (potentialTargets.length > 1) return selectTarget(potentialTargets, target, x, y, currentYMovement, currentXMovement);
404
+ pointerTracking.boundaryContext = null;
405
+ return potentialTargets[0];
406
+ },
407
+ getKeyboardNavigationTarget,
408
+ getKeyboardPageNavigationTarget: delegate.getKeyboardPageNavigationTarget?.bind(delegate)
409
+ };
410
+ }
411
+ const TreeContext = createContext(null);
412
+ const TreeStateContext = createContext(null);
413
+ const TreeItemContext = createContext(null);
414
+ const TreeItemContentContext = createContext(null);
415
+ function isTreeItemRecord(value) {
416
+ return typeof value === "object" && value !== null;
417
+ }
418
+ function treeItemDataFromNode(node) {
419
+ const value = node.value;
420
+ const item = isTreeItemRecord(value) ? value : {};
421
+ return {
422
+ ...item,
423
+ key: node.key,
424
+ id: item.id ?? node.key,
425
+ value: value ?? void 0,
426
+ textValue: node.textValue,
427
+ isDisabled: node.isDisabled,
428
+ hasChildItems: node.hasChildNodes,
429
+ children: node.childNodes.length > 0 ? node.childNodes.map((child) => treeItemDataFromNode(child)) : void 0
430
+ };
431
+ }
432
+ /**
433
+ * A tree displays hierarchical data with expandable/collapsible nodes,
434
+ * supporting keyboard navigation and selection.
435
+ */
436
+ function Tree(props) {
437
+ const [local, stateProps, ariaProps] = splitProps(props, [
438
+ "class",
439
+ "style",
440
+ "slot",
441
+ "renderEmptyState",
442
+ "hasMore",
443
+ "isLoading",
444
+ "loadingState",
445
+ "onLoadMore",
446
+ "renderLoadMoreItem",
447
+ "loadMoreClass",
448
+ "loadMoreStyle",
449
+ "dragAndDropHooks",
450
+ "ref"
451
+ ], [
452
+ "items",
453
+ "disabledKeys",
454
+ "disabledBehavior",
455
+ "selectionMode",
456
+ "selectionBehavior",
457
+ "selectedKeys",
458
+ "defaultSelectedKeys",
459
+ "onSelectionChange",
460
+ "expandedKeys",
461
+ "defaultExpandedKeys",
462
+ "onExpandedChange"
463
+ ]);
464
+ const [ref, setRef] = createSignal(null);
465
+ const flatItems = createMemo(() => flattenCollectionEntries(stateProps.items ?? []));
466
+ const hasSections = createMemo(() => (stateProps.items ?? []).some((entry) => isCollectionSection(entry)));
467
+ const state = createTreeState(() => ({
468
+ collectionFactory: (expandedKeys) => createTreeCollection(flatItems(), expandedKeys),
469
+ disabledKeys: stateProps.disabledKeys,
470
+ disabledBehavior: stateProps.disabledBehavior,
471
+ selectionMode: stateProps.selectionMode,
472
+ selectionBehavior: stateProps.selectionBehavior,
473
+ selectedKeys: stateProps.selectedKeys,
474
+ defaultSelectedKeys: stateProps.defaultSelectedKeys,
475
+ onSelectionChange: stateProps.onSelectionChange,
476
+ expandedKeys: stateProps.expandedKeys,
477
+ defaultExpandedKeys: stateProps.defaultExpandedKeys,
478
+ onExpandedChange: stateProps.onExpandedChange
479
+ }));
480
+ const [lastExpandedKeys, setLastExpandedKeys] = createSignal(/* @__PURE__ */ new Set());
481
+ const [lastItemsLength, setLastItemsLength] = createSignal(flatItems().length);
482
+ const [collectionVersion, setCollectionVersion] = createSignal(0);
483
+ createEffect(() => {
484
+ const expanded = state.expandedKeys;
485
+ const items = flatItems();
486
+ if (!areSetsEqual(lastExpandedKeys(), expanded) || lastItemsLength() !== items.length) {
487
+ setLastExpandedKeys(new Set(expanded));
488
+ setLastItemsLength(items.length);
489
+ setCollectionVersion((v) => v + 1);
490
+ }
491
+ });
492
+ const treeDirection = createMemo(() => ariaProps.direction ?? resolveTreeDirection(ref()));
493
+ const { treeProps } = createTree(() => ({
494
+ id: ariaProps.id,
495
+ "aria-label": ariaProps["aria-label"],
496
+ "aria-labelledby": ariaProps["aria-labelledby"],
497
+ "aria-describedby": ariaProps["aria-describedby"],
498
+ isVirtualized: ariaProps.isVirtualized,
499
+ onAction: ariaProps.onAction,
500
+ isDisabled: ariaProps.isDisabled,
501
+ keyboardNavigationBehavior: ariaProps.keyboardNavigationBehavior,
502
+ direction: treeDirection()
503
+ }), () => state, ref);
504
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
505
+ const renderValues = createMemo(() => ({
506
+ isFocused: state.isFocused || isFocused(),
507
+ isFocusVisible: isFocusVisible(),
508
+ isDisabled: ariaProps.isDisabled ?? false,
509
+ isEmpty: flatItems().length === 0
510
+ }));
511
+ const renderProps = useRenderProps({
512
+ class: local.class,
513
+ style: local.style,
514
+ defaultClassName: "solidaria-Tree"
515
+ }, renderValues);
516
+ const domProps = createMemo(() => {
517
+ return filterDOMProps(ariaProps, { global: true });
518
+ });
519
+ const cleanTreeProps = () => {
520
+ const { ref: _ref1, ...rest } = treeProps;
521
+ return rest;
522
+ };
523
+ const cleanFocusProps = () => {
524
+ const { ref: _ref2, ...rest } = focusProps;
525
+ return rest;
526
+ };
527
+ const isEmpty = () => flatItems().length === 0;
528
+ const visibleRows = createMemo(() => {
529
+ collectionVersion();
530
+ return state.collection.rows;
531
+ });
532
+ const virtualizer = useVirtualizerContext();
533
+ const parentCollectionRenderer = useCollectionRenderer();
534
+ const getDropTargetByIndex = (index, position) => {
535
+ const node = visibleRows()[index];
536
+ if (!node) return null;
537
+ return {
538
+ type: "item",
539
+ key: node.key,
540
+ dropPosition: position
541
+ };
542
+ };
543
+ const hasDroppableDnd = createMemo(() => {
544
+ const hooks = local.dragAndDropHooks;
545
+ return Boolean(hooks?.useDroppableCollectionState && hooks.useDroppableCollection && (hooks.dropTargetDelegate || parentCollectionRenderer?.dropTargetDelegate || hooks.ListDropTargetDelegate));
546
+ });
547
+ const hasDraggableDnd = createMemo(() => {
548
+ const hooks = local.dragAndDropHooks;
549
+ return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
550
+ });
551
+ const dragState = createMemo(() => {
552
+ if (!hasDraggableDnd()) return void 0;
553
+ return local.dragAndDropHooks?.useDraggableCollectionState?.({ items: visibleRows().map((node) => node.value) });
554
+ });
555
+ const dropState = createMemo(() => {
556
+ if (!hasDroppableDnd()) return void 0;
557
+ return local.dragAndDropHooks?.useDroppableCollectionState?.({});
558
+ });
559
+ createEffect(() => {
560
+ const activeDropState = dropState();
561
+ if (!activeDropState) return;
562
+ const originalGetDropOperation = activeDropState.getDropOperation.bind(activeDropState);
563
+ activeDropState.getDropOperation = (target, types, allowedOperations) => {
564
+ const currentDraggingKeys = dragState()?.draggingKeys ?? /* @__PURE__ */ new Set();
565
+ if (target.type === "item" && currentDraggingKeys.size > 0) {
566
+ if (currentDraggingKeys.has(target.key) && target.dropPosition === "on") return "cancel";
567
+ let currentKey = target.key;
568
+ while (currentKey != null) {
569
+ const parentKey = state.collection.getItem(currentKey)?.parentKey;
570
+ if (parentKey != null && currentDraggingKeys.has(parentKey)) return "cancel";
571
+ currentKey = parentKey ?? null;
572
+ }
573
+ }
574
+ return originalGetDropOperation(target, types, allowedOperations);
575
+ };
576
+ onCleanup(() => {
577
+ activeDropState.getDropOperation = originalGetDropOperation;
578
+ });
579
+ });
580
+ createEffect(() => {
581
+ if (!hasDraggableDnd()) return;
582
+ const hooks = local.dragAndDropHooks;
583
+ const activeDragState = dragState();
584
+ if (!hooks?.useDraggableCollection || !activeDragState) return;
585
+ hooks.useDraggableCollection({}, activeDragState, () => ref());
586
+ });
587
+ const contextValue = createMemo(() => ({
588
+ state,
589
+ collection: state.collection,
590
+ isDisabled: ariaProps.isDisabled ?? false,
591
+ renderItem: props.children,
592
+ dragAndDropHooks: local.dragAndDropHooks,
593
+ dragState: dragState(),
594
+ dropState: dropState()
595
+ }));
596
+ const droppableCollection = createMemo(() => {
597
+ if (!hasDroppableDnd()) return void 0;
598
+ const hooks = local.dragAndDropHooks;
599
+ const activeDropState = dropState();
600
+ if (!hooks?.useDroppableCollection || !activeDropState) return void 0;
601
+ const direction = resolveTreeDirection(ref());
602
+ const baseDropTargetDelegate = hooks.dropTargetDelegate ?? parentCollectionRenderer?.dropTargetDelegate ?? (hooks.ListDropTargetDelegate ? new hooks.ListDropTargetDelegate(() => state.collection, () => ref(), {
603
+ layout: "stack",
604
+ orientation: "vertical",
605
+ direction
606
+ }) : void 0);
607
+ if (!baseDropTargetDelegate) return void 0;
608
+ const dropTargetDelegate = createTreeDropTargetDelegate(baseDropTargetDelegate, state, direction, virtualizer?.getBaseKeyboardNavigationTarget);
609
+ return hooks.useDroppableCollection({
610
+ dropTargetDelegate,
611
+ keyboardDelegate: {
612
+ getFirstKey: () => state.collection.getFirstKey(),
613
+ getLastKey: () => state.collection.getLastKey(),
614
+ getKeyBelow: (key) => state.collection.getKeyAfter(key),
615
+ getKeyAbove: (key) => state.collection.getKeyBefore(key),
616
+ getKeyPageBelow: (key) => state.collection.getKeyAfter(key),
617
+ getKeyPageAbove: (key) => state.collection.getKeyBefore(key)
618
+ },
619
+ get collection() {
620
+ return state.collection;
621
+ },
622
+ get selectedKeys() {
623
+ return state.selectedKeys;
624
+ },
625
+ setSelectedKeys: (keys) => {
626
+ if (state.selectionMode === "none") return;
627
+ state.clearSelection();
628
+ for (const key of keys) state.toggleSelection(key);
629
+ },
630
+ setFocusedKey: (key) => state.setFocusedKey(key),
631
+ onDropActivate: (event) => {
632
+ if (event.target.type !== "item") return;
633
+ const key = event.target.key;
634
+ const item = state.collection.getItem(key);
635
+ const isExpanded = state.isExpanded(key);
636
+ if (item?.hasChildNodes && (!isExpanded || hooks.isVirtualDragging?.())) state.toggleKey(key);
637
+ },
638
+ onKeyDown: (event) => {
639
+ const target = activeDropState.target;
640
+ if (!target || target.type !== "item" || target.dropPosition !== "on") return;
641
+ if (!state.collection.getItem(target.key)?.hasChildNodes) return;
642
+ const currentDirection = ariaProps.direction ?? resolveTreeDirection(ref());
643
+ const expandKey = EXPANSION_KEYS.expand[currentDirection];
644
+ const collapseKey = EXPANSION_KEYS.collapse[currentDirection];
645
+ if (event.key === expandKey && !state.isExpanded(target.key)) state.toggleKey(target.key);
646
+ else if (event.key === collapseKey && state.isExpanded(target.key)) state.toggleKey(target.key);
647
+ }
648
+ }, activeDropState, () => ref());
649
+ });
650
+ const isRootDropTarget = createMemo(() => {
651
+ return Boolean(dropState()?.target?.type === "root");
652
+ });
653
+ const dndRenderDropIndicator = createMemo(() => useRenderDropIndicator(local.dragAndDropHooks, dropState()));
654
+ const dndDropIndicator = (index, position) => {
655
+ const target = getDropTargetByIndex(index, position);
656
+ if (!target || target.type !== "item") return void 0;
657
+ return dndRenderDropIndicator()?.(target);
658
+ };
659
+ const persistedKeys = useDndPersistedKeys({ focusedKey: () => state.focusedKey }, local.dragAndDropHooks, dropState(), state.collection);
660
+ const virtualRange = createMemo(() => {
661
+ if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return null;
662
+ const rows = visibleRows();
663
+ const baseRange = virtualizer.getVisibleRange(rows.length);
664
+ const persistedIndexes = Array.from(persistedKeys()).map((key) => rows.findIndex((node) => node.key === key)).filter((index) => index >= 0);
665
+ const dropTarget = dropState()?.target;
666
+ const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection);
667
+ const focusedKey = state.focusedKey;
668
+ const focusedIndex = focusedKey != null ? rows.findIndex((node) => node.key === focusedKey) : -1;
669
+ const forceIncludeIndexes = [
670
+ dropTarget?.type === "item" ? rows.findIndex((node) => node.key === dropTarget.key) : -1,
671
+ normalizedDropKey != null ? rows.findIndex((node) => node.key === normalizedDropKey) : -1,
672
+ dropTarget?.type === "item" ? -1 : focusedIndex
673
+ ].filter((index) => index >= 0);
674
+ return mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, rows.length, virtualizer, 80, {
675
+ forceIncludeIndexes,
676
+ forceIncludeMaxSpan: 320
677
+ });
678
+ });
679
+ const virtualizedVisibleRows = createMemo(() => {
680
+ const range = virtualRange();
681
+ if (!range) return visibleRows();
682
+ return visibleRows().slice(range.start, range.end);
683
+ });
684
+ createEffect(() => {
685
+ if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;
686
+ virtualizer.setDropTargetItemCountResolver(() => visibleRows().length);
687
+ virtualizer.setDropTargetIndexResolver((key) => {
688
+ const index = visibleRows().findIndex((node) => node.key === key);
689
+ return index >= 0 ? index : null;
690
+ });
691
+ virtualizer.setDropTargetResolver((target) => {
692
+ const node = visibleRows()[target.index];
693
+ if (!node) return target;
694
+ return {
695
+ ...target,
696
+ key: typeof node.key === "string" || typeof node.key === "number" ? node.key : void 0,
697
+ parentKey: typeof node.parentKey === "string" || typeof node.parentKey === "number" ? node.parentKey : node.parentKey == null ? null : void 0,
698
+ level: typeof node.level === "number" ? node.level : void 0
699
+ };
700
+ });
701
+ onCleanup(() => {
702
+ virtualizer.setDropTargetIndexResolver(void 0);
703
+ virtualizer.setDropTargetItemCountResolver(void 0);
704
+ virtualizer.setDropTargetResolver(void 0);
705
+ });
706
+ });
707
+ const rowIndexByKey = createMemo(() => {
708
+ const map = /* @__PURE__ */ new Map();
709
+ const rows = visibleRows();
710
+ for (let i = 0; i < rows.length; i += 1) map.set(rows[i].key, i);
711
+ return map;
712
+ });
713
+ const getAfterIndicatorIndexes = (absoluteIndex, renderRange) => {
714
+ const rows = visibleRows();
715
+ const current = rows[absoluteIndex];
716
+ if (!current) return [];
717
+ const next = rows[absoluteIndex + 1];
718
+ if (next && next.level >= current.level) return [];
719
+ const result = [];
720
+ let cursorIndex = absoluteIndex;
721
+ while (cursorIndex != null) {
722
+ const cursor = rows[cursorIndex];
723
+ if (!cursor) break;
724
+ if (!(!next || cursor.parentKey !== next.parentKey && next.level < cursor.level)) break;
725
+ result.push(cursorIndex);
726
+ if (cursor.parentKey == null) break;
727
+ cursorIndex = rowIndexByKey().get(cursor.parentKey) ?? null;
728
+ }
729
+ if (!renderRange) return result;
730
+ return result.filter((index) => index >= renderRange.start && index < renderRange.end);
731
+ };
732
+ createEffect(() => {
733
+ if (!virtualizer) return;
734
+ const direction = resolveTreeDirection(ref());
735
+ const treeDelegate = createTreeDropTargetDelegate({
736
+ getDropTargetFromPoint: parentCollectionRenderer?.dropTargetDelegate?.getDropTargetFromPoint ?? ((_x, _y, _v) => null),
737
+ getKeyboardNavigationTarget: parentCollectionRenderer?.dropTargetDelegate?.getKeyboardNavigationTarget,
738
+ getKeyboardPageNavigationTarget: parentCollectionRenderer?.dropTargetDelegate?.getKeyboardPageNavigationTarget
739
+ }, state, direction, virtualizer.getBaseKeyboardNavigationTarget);
740
+ virtualizer.setKeyboardNavigationOverride(treeDelegate.getKeyboardNavigationTarget ? (target, dir, isValid) => treeDelegate.getKeyboardNavigationTarget(target, dir, isValid) : void 0);
741
+ onCleanup(() => {
742
+ virtualizer.setKeyboardNavigationOverride(void 0);
743
+ });
744
+ });
745
+ const collectionRenderer = createMemo(() => ({
746
+ ...parentCollectionRenderer,
747
+ renderItem: (item) => item,
748
+ renderDropIndicator: (index, position) => dndDropIndicator(index, position) ?? parentCollectionRenderer?.renderDropIndicator?.(index, position)
749
+ }));
750
+ const rootKeyByNodeKey = createMemo(() => {
751
+ const rootMap = /* @__PURE__ */ new Map();
752
+ for (const row of visibleRows()) {
753
+ let rootKey = row.key;
754
+ let parentKey = row.parentKey;
755
+ while (parentKey != null) {
756
+ rootKey = parentKey;
757
+ parentKey = state.collection.getParentKey(parentKey);
758
+ }
759
+ rootMap.set(row.key, rootKey);
760
+ }
761
+ return rootMap;
762
+ });
763
+ const renderRange = createMemo(() => {
764
+ const range = virtualRange();
765
+ if (!range) return null;
766
+ return {
767
+ start: range.start,
768
+ end: range.end
769
+ };
770
+ });
771
+ const renderableRows = createMemo(() => {
772
+ const offset = renderRange()?.start ?? 0;
773
+ return virtualizedVisibleRows().map((node, index) => ({
774
+ node,
775
+ globalIndex: offset + index
776
+ }));
777
+ });
778
+ const sectionedRenderableRows = createMemo(() => {
779
+ if (!hasSections()) return null;
780
+ const rootMap = rootKeyByNodeKey();
781
+ const rows = renderableRows();
782
+ return (stateProps.items ?? []).map((entry) => {
783
+ if (!isCollectionSection(entry)) return {
784
+ type: "single",
785
+ item: entry,
786
+ rows: rows.filter((row) => rootMap.get(row.node.key) === entry.key)
787
+ };
788
+ const sectionRootKeys = new Set(entry.items.map((item) => item.key));
789
+ return {
790
+ type: "section",
791
+ section: entry,
792
+ rows: rows.filter((row) => {
793
+ const rootKey = rootMap.get(row.node.key);
794
+ return rootKey != null && sectionRootKeys.has(rootKey);
795
+ })
796
+ };
797
+ });
798
+ });
799
+ const renderTreeRow = (node, itemIndex) => {
800
+ const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex, "before");
801
+ const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex, "on");
802
+ const afterIndicatorIndexes = () => getAfterIndicatorIndexes(itemIndex, renderRange());
803
+ const itemData = treeItemDataFromNode(node);
804
+ const itemState = {
805
+ isExpanded: node.isExpanded ?? false,
806
+ isExpandable: node.isExpandable ?? false,
807
+ level: node.level
808
+ };
809
+ return [
810
+ memo(beforeIndicator),
811
+ memo(onIndicator),
812
+ memo(() => props.children(itemData, itemState)),
813
+ createComponent(For, {
814
+ get each() {
815
+ return afterIndicatorIndexes();
816
+ },
817
+ children: (afterIndex) => collectionRenderer().renderDropIndicator?.(afterIndex, "after")
818
+ })
819
+ ];
820
+ };
821
+ return createComponent(TreeContext.Provider, {
822
+ get value() {
823
+ return contextValue();
824
+ },
825
+ get children() {
826
+ return createComponent(TreeStateContext.Provider, {
827
+ value: state,
828
+ get children() {
829
+ return createComponent(CollectionRendererContext.Provider, {
830
+ get value() {
831
+ return collectionRenderer();
832
+ },
833
+ get children() {
834
+ var _el$ = getNextElement(_tmpl$), _el$2 = _el$.firstChild, [_el$3, _co$] = getNextMarker(_el$2.nextSibling), _el$4 = _el$3.nextSibling, [_el$5, _co$2] = getNextMarker(_el$4.nextSibling);
835
+ use((element) => {
836
+ setRef(element);
837
+ assignRef(local.ref, element);
838
+ }, _el$);
839
+ spread(_el$, mergeProps(() => mergeProps$2(domProps(), cleanTreeProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {}), {
840
+ get ["class"]() {
841
+ return renderProps.class();
842
+ },
843
+ get style() {
844
+ return renderProps.style();
845
+ },
846
+ get ["data-focused"]() {
847
+ return state.isFocused || void 0;
848
+ },
849
+ get ["data-focus-visible"]() {
850
+ return isFocusVisible() || void 0;
851
+ },
852
+ get ["data-disabled"]() {
853
+ return ariaProps.isDisabled || void 0;
854
+ },
855
+ get ["data-empty"]() {
856
+ return isEmpty() || void 0;
857
+ },
858
+ get ["data-drop-target"]() {
859
+ return isRootDropTarget() || void 0;
860
+ },
861
+ get ["data-selection-mode"]() {
862
+ return memo(() => stateProps.selectionMode !== "none")() ? stateProps.selectionMode : void 0;
863
+ },
864
+ get ["data-allows-dragging"]() {
865
+ return hasDraggableDnd() || void 0;
866
+ }
867
+ }), false, true);
868
+ insert(_el$, createComponent(SharedElementTransition, { get children() {
869
+ return memo(() => !!(isEmpty() && local.renderEmptyState))() ? (() => {
870
+ var _el$6 = getNextElement(_tmpl$2), _el$7 = _el$6.firstChild;
871
+ insert(_el$7, () => local.renderEmptyState());
872
+ return _el$6;
873
+ })() : [
874
+ memo(() => memo(() => !!virtualRange()?.offsetTop)() ? (() => {
875
+ var _el$8 = getNextElement(_tmpl$3);
876
+ effect((_$p) => setStyleProperty(_el$8, "height", `${virtualRange().offsetTop}px`));
877
+ return _el$8;
878
+ })() : null),
879
+ createComponent(Show, {
880
+ get when() {
881
+ return hasSections();
882
+ },
883
+ get fallback() {
884
+ return createComponent(For, {
885
+ get each() {
886
+ return renderableRows();
887
+ },
888
+ children: (row) => renderTreeRow(row.node, row.globalIndex)
889
+ });
890
+ },
891
+ get children() {
892
+ return createComponent(For, {
893
+ get each() {
894
+ return sectionedRenderableRows() ?? [];
895
+ },
896
+ children: (entry) => createComponent(Show, {
897
+ get when() {
898
+ return entry.rows.length > 0;
899
+ },
900
+ get children() {
901
+ return createComponent(Show, {
902
+ get when() {
903
+ return entry.type === "section";
904
+ },
905
+ get fallback() {
906
+ return createComponent(For, {
907
+ get each() {
908
+ return entry.rows;
909
+ },
910
+ children: (row) => renderTreeRow(row.node, row.globalIndex)
911
+ });
912
+ },
913
+ get children() {
914
+ return createComponent(TreeSection, { get children() {
915
+ return [memo(() => memo(() => !!(entry.type === "section" && entry.section.title))() ? createComponent(TreeHeader, { get children() {
916
+ return entry.section.title;
917
+ } }) : null), createComponent(For, {
918
+ get each() {
919
+ return entry.rows;
920
+ },
921
+ children: (row) => renderTreeRow(row.node, row.globalIndex)
922
+ })];
923
+ } });
924
+ }
925
+ });
926
+ }
927
+ })
928
+ });
929
+ }
930
+ }),
931
+ memo(() => memo(() => !!virtualRange()?.offsetBottom)() ? (() => {
932
+ var _el$9 = getNextElement(_tmpl$4);
933
+ effect((_$p) => setStyleProperty(_el$9, "height", `${virtualRange().offsetBottom}px`));
934
+ return _el$9;
935
+ })() : null)
936
+ ];
937
+ } }), _el$3, _co$);
938
+ insert(_el$, (() => {
939
+ var _c$ = memo(() => !!(local.hasMore && local.onLoadMore));
940
+ return () => _c$() && createComponent(TreeLoadMoreItem, {
941
+ get onLoadMore() {
942
+ return local.onLoadMore;
943
+ },
944
+ get isLoading() {
945
+ return local.isLoading;
946
+ },
947
+ get loadingState() {
948
+ return local.loadingState;
949
+ },
950
+ get ["class"]() {
951
+ return local.loadMoreClass;
952
+ },
953
+ get style() {
954
+ return local.loadMoreStyle;
955
+ },
956
+ get children() {
957
+ return local.renderLoadMoreItem?.({ isLoading: !!local.isLoading || local.loadingState === "loading" || local.loadingState === "loadingMore" });
958
+ }
959
+ });
960
+ })(), _el$5, _co$2);
961
+ runHydrationEvents();
962
+ return _el$;
963
+ }
964
+ });
965
+ }
966
+ });
967
+ }
968
+ });
969
+ }
970
+ /**
971
+ * An item in a tree.
972
+ */
973
+ function TreeItem(props) {
974
+ const [local, domProps] = splitProps(props, [
975
+ "class",
976
+ "style",
977
+ "slot",
978
+ "id",
979
+ "item",
980
+ "textValue",
981
+ "onAction",
982
+ "hasChildItems",
983
+ "isDisabled",
984
+ "href",
985
+ "target",
986
+ "download",
987
+ "rel",
988
+ "hrefLang",
989
+ "ping",
990
+ "referrerPolicy",
991
+ "routerOptions",
992
+ "ref",
993
+ "children"
994
+ ]);
995
+ const context = useContext(TreeStateContext);
996
+ if (!context) throw new Error("TreeItem must be used within a Tree");
997
+ const state = context;
998
+ const treeContext = useContext(TreeContext);
999
+ const router = useRouter();
1000
+ const linkProps = createMemo(() => useLinkProps({
1001
+ href: local.href,
1002
+ target: local.target,
1003
+ rel: local.rel,
1004
+ download: local.download,
1005
+ ping: local.ping,
1006
+ referrerPolicy: local.referrerPolicy
1007
+ }));
1008
+ const [ref, setRef] = createSignal(null);
1009
+ const setItemRef = (element) => {
1010
+ setRef(element);
1011
+ assignRef(local.ref, element);
1012
+ };
1013
+ const itemNode = createMemo(() => {
1014
+ const node = state.collection.getItem(local.id);
1015
+ if (!node) return {
1016
+ type: "item",
1017
+ key: local.id,
1018
+ value: local.item?.value ?? null,
1019
+ textValue: local.textValue ?? String(local.id),
1020
+ level: 0,
1021
+ index: 0,
1022
+ hasChildNodes: !!local.hasChildItems,
1023
+ childNodes: [],
1024
+ isDisabled: local.isDisabled,
1025
+ isExpandable: !!local.hasChildItems,
1026
+ isExpanded: false
1027
+ };
1028
+ return node;
1029
+ });
1030
+ const treeItemAria = createTreeItem(() => ({
1031
+ node: itemNode(),
1032
+ selectionBehavior: state.selectionBehavior,
1033
+ onAction: local.onAction,
1034
+ isDisabled: local.isDisabled,
1035
+ textValue: local.textValue
1036
+ }), () => state, ref);
1037
+ const isSelected = () => treeItemAria.isSelected;
1038
+ const isDisabled = () => treeItemAria.isDisabled;
1039
+ const isPressed = () => treeItemAria.isPressed;
1040
+ const isExpanded = () => treeItemAria.isExpanded;
1041
+ const isExpandable = () => treeItemAria.isExpandable;
1042
+ const level = () => treeItemAria.level;
1043
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
1044
+ return isDisabled();
1045
+ } });
1046
+ const { isFocusVisible, focusProps } = createFocusRing();
1047
+ const isFocused = createMemo(() => state.focusedKey === local.id);
1048
+ const draggableItem = createMemo(() => {
1049
+ if (!treeContext?.dragAndDropHooks?.useDraggableItem || !treeContext.dragState) return void 0;
1050
+ return treeContext.dragAndDropHooks.useDraggableItem({ key: local.id }, treeContext.dragState);
1051
+ });
1052
+ const droppableItem = createMemo(() => {
1053
+ if (!treeContext?.dragAndDropHooks?.useDroppableItem || !treeContext.dropState) return void 0;
1054
+ return treeContext.dragAndDropHooks.useDroppableItem({ key: local.id }, treeContext.dropState, () => ref());
1055
+ });
1056
+ const renderValues = createMemo(() => ({
1057
+ isSelected: isSelected(),
1058
+ isFocused: isFocused(),
1059
+ isFocusVisible: isFocusVisible() && isFocused(),
1060
+ isPressed: isPressed(),
1061
+ isHovered: isHovered(),
1062
+ isDisabled: isDisabled(),
1063
+ isExpanded: isExpanded(),
1064
+ isExpandable: isExpandable(),
1065
+ level: level(),
1066
+ selectionMode: state.selectionMode,
1067
+ selectionBehavior: state.selectionBehavior
1068
+ }));
1069
+ const renderProps = useRenderProps({
1070
+ get children() {
1071
+ return props.children;
1072
+ },
1073
+ class: local.class,
1074
+ style: local.style,
1075
+ defaultClassName: "solidaria-Tree-item"
1076
+ }, renderValues);
1077
+ const cleanRowProps = () => {
1078
+ const { ref: _ref1, ...rest } = treeItemAria.rowProps;
1079
+ return rest;
1080
+ };
1081
+ const cleanHoverProps = () => {
1082
+ const { ref: _ref2, ...rest } = hoverProps;
1083
+ return rest;
1084
+ };
1085
+ const cleanFocusProps = () => {
1086
+ const { ref: _ref3, ...rest } = focusProps;
1087
+ return rest;
1088
+ };
1089
+ const itemContextValue = createMemo(() => ({
1090
+ node: itemNode(),
1091
+ isExpanded: isExpanded(),
1092
+ isExpandable: isExpandable(),
1093
+ level: level()
1094
+ }));
1095
+ const rowStyle = () => ({
1096
+ "--tree-item-level": String(level()),
1097
+ ...typeof renderProps.style() === "object" ? renderProps.style() : {}
1098
+ });
1099
+ const rowContent = () => createComponent(TreeItemContentContext.Provider, {
1100
+ get value() {
1101
+ return renderValues();
1102
+ },
1103
+ get children() {
1104
+ var _el$0 = getNextElement(_tmpl$5);
1105
+ spread(_el$0, mergeProps(() => treeItemAria.gridCellProps, { "class": "solidaria-Tree-item-content" }), false, true);
1106
+ insert(_el$0, () => renderProps.renderChildren());
1107
+ runHydrationEvents();
1108
+ return _el$0;
1109
+ }
1110
+ });
1111
+ const mergedRowProps = () => mergeProps$2(cleanRowProps(), cleanHoverProps(), cleanFocusProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {});
1112
+ const onLinkedRowClick = (event) => {
1113
+ const onClick = mergedRowProps().onClick;
1114
+ onClick?.(event);
1115
+ handleLinkClick(event, router, local.href, local.routerOptions);
1116
+ };
1117
+ const downloadAttr = () => {
1118
+ const download = linkProps().download;
1119
+ return typeof download === "boolean" ? download ? "" : void 0 : download;
1120
+ };
1121
+ const referrerPolicyAttr = () => linkProps().referrerPolicy || void 0;
1122
+ const linkedRowDomProps = () => local.href ? {
1123
+ onClick: onLinkedRowClick,
1124
+ "data-href": linkProps().href,
1125
+ "data-target": linkProps().target,
1126
+ "data-download": downloadAttr(),
1127
+ "data-rel": linkProps().rel,
1128
+ "data-hreflang": local.hrefLang,
1129
+ "data-ping": linkProps().ping,
1130
+ "data-referrer-policy": referrerPolicyAttr()
1131
+ } : {};
1132
+ return createComponent(TreeItemContext.Provider, {
1133
+ get value() {
1134
+ return itemContextValue();
1135
+ },
1136
+ get children() {
1137
+ var _el$1 = getNextElement(_tmpl$5);
1138
+ use(setItemRef, _el$1);
1139
+ spread(_el$1, mergeProps(domProps, mergedRowProps, linkedRowDomProps, {
1140
+ get ["class"]() {
1141
+ return renderProps.class();
1142
+ },
1143
+ get style() {
1144
+ return rowStyle();
1145
+ },
1146
+ get ["data-selected"]() {
1147
+ return isSelected() || void 0;
1148
+ },
1149
+ get ["data-focused"]() {
1150
+ return isFocused() || void 0;
1151
+ },
1152
+ get ["data-focus-visible"]() {
1153
+ return memo(() => !!isFocusVisible())() && isFocused() || void 0;
1154
+ },
1155
+ get ["data-pressed"]() {
1156
+ return isPressed() || void 0;
1157
+ },
1158
+ get ["data-hovered"]() {
1159
+ return isHovered() || void 0;
1160
+ },
1161
+ get ["data-disabled"]() {
1162
+ return isDisabled() || void 0;
1163
+ },
1164
+ get ["data-expanded"]() {
1165
+ return isExpanded() || void 0;
1166
+ },
1167
+ get ["data-expandable"]() {
1168
+ return isExpandable() || void 0;
1169
+ },
1170
+ get ["data-has-child-items"]() {
1171
+ return isExpandable() || void 0;
1172
+ },
1173
+ get ["data-level"]() {
1174
+ return level();
1175
+ },
1176
+ get ["data-selection-mode"]() {
1177
+ return memo(() => treeContext?.state.selectionMode !== "none")() ? treeContext?.state.selectionMode : void 0;
1178
+ },
1179
+ get ["data-dragging"]() {
1180
+ return draggableItem()?.isDragging || void 0;
1181
+ },
1182
+ get ["data-drop-target"]() {
1183
+ return droppableItem()?.isDropTarget || void 0;
1184
+ }
1185
+ }), false, true);
1186
+ insert(_el$1, rowContent);
1187
+ runHydrationEvents();
1188
+ return _el$1;
1189
+ }
1190
+ });
1191
+ }
1192
+ /**
1193
+ * A button to expand/collapse a tree item.
1194
+ */
1195
+ function TreeExpandButton(props) {
1196
+ const itemContext = useContext(TreeItemContext);
1197
+ if (!itemContext) throw new Error("TreeExpandButton must be used within a Tree");
1198
+ const stateContext = useContext(TreeStateContext);
1199
+ if (!stateContext) throw new Error("TreeExpandButton must be used within a Tree");
1200
+ const state = stateContext;
1201
+ const treeItemAria = createTreeItem(() => ({ node: itemContext.node }), () => state, () => null);
1202
+ const cleanExpandProps = () => {
1203
+ const { ref: _ref, ...rest } = treeItemAria.expandButtonProps;
1204
+ return rest;
1205
+ };
1206
+ const dataProps = () => {
1207
+ const result = {};
1208
+ for (const key in props) if (key.startsWith("data-")) result[key] = props[key];
1209
+ return result;
1210
+ };
1211
+ const isExpanded = createMemo(() => state.isExpanded(itemContext.node.key));
1212
+ const renderChildren = () => {
1213
+ if (typeof props.children === "function") return props.children({ isExpanded: isExpanded() });
1214
+ return props.children;
1215
+ };
1216
+ return createComponent(Show, {
1217
+ get when() {
1218
+ return itemContext.isExpandable;
1219
+ },
1220
+ get children() {
1221
+ var _el$10 = getNextElement(_tmpl$6);
1222
+ spread(_el$10, mergeProps(cleanExpandProps, dataProps, {
1223
+ get ["class"]() {
1224
+ return props.class ?? "solidaria-Tree-expand-button";
1225
+ },
1226
+ get style() {
1227
+ return props.style;
1228
+ },
1229
+ get ["data-expanded"]() {
1230
+ return isExpanded() || void 0;
1231
+ }
1232
+ }), false, true);
1233
+ insert(_el$10, renderChildren);
1234
+ runHydrationEvents();
1235
+ return _el$10;
1236
+ }
1237
+ });
1238
+ }
1239
+ /**
1240
+ * A checkbox for item selection in a tree.
1241
+ */
1242
+ function TreeSelectionCheckbox(props) {
1243
+ const context = useContext(TreeStateContext);
1244
+ if (!context) throw new Error("TreeSelectionCheckbox must be used within a Tree");
1245
+ const state = context;
1246
+ const treeSelectionCheckboxAria = createTreeSelectionCheckbox(() => ({ key: props.itemKey }), () => state);
1247
+ return (() => {
1248
+ var _el$11 = getNextElement(_tmpl$7);
1249
+ spread(_el$11, mergeProps(() => treeSelectionCheckboxAria.checkboxProps, {
1250
+ get ["class"]() {
1251
+ return props.class ?? "solidaria-Tree-checkbox";
1252
+ },
1253
+ get style() {
1254
+ return props.style;
1255
+ },
1256
+ get tabIndex() {
1257
+ return props.excludeFromTabOrder ? -1 : void 0;
1258
+ },
1259
+ get ["aria-label"]() {
1260
+ return props["aria-label"] ?? treeSelectionCheckboxAria.checkboxProps["aria-label"];
1261
+ }
1262
+ }), false, false);
1263
+ runHydrationEvents();
1264
+ return _el$11;
1265
+ })();
1266
+ }
1267
+ function TreeLoadMoreItem(props) {
1268
+ let sentinelRef;
1269
+ const [isPending, setIsPending] = createSignal(false);
1270
+ const isLoading = () => !!props.isLoading || props.loadingState === "loading" || props.loadingState === "loadingMore" || isPending();
1271
+ const triggerLoadMore = async () => {
1272
+ if (isLoading()) return;
1273
+ setIsPending(true);
1274
+ try {
1275
+ await props.onLoadMore();
1276
+ } finally {
1277
+ setIsPending(false);
1278
+ }
1279
+ };
1280
+ createEffect(() => {
1281
+ if (!sentinelRef || typeof IntersectionObserver !== "function") return;
1282
+ const margin = `0px 0px ${100 * (props.scrollOffset ?? 1)}% 0px`;
1283
+ const observer = new IntersectionObserver((entries) => {
1284
+ if (entries[0]?.isIntersecting) triggerLoadMore();
1285
+ }, { rootMargin: margin });
1286
+ observer.observe(sentinelRef);
1287
+ return () => observer.disconnect();
1288
+ });
1289
+ const renderProps = useRenderProps({
1290
+ get children() {
1291
+ return props.children ?? (() => isLoading() ? "Loading more..." : "Load more");
1292
+ },
1293
+ class: props.class,
1294
+ style: props.style,
1295
+ defaultClassName: "solidaria-Tree-loadMore"
1296
+ }, () => ({ isLoading: isLoading() }));
1297
+ return [(() => {
1298
+ var _el$12 = getNextElement(_tmpl$8), _el$13 = _el$12.firstChild;
1299
+ var _ref$ = sentinelRef;
1300
+ typeof _ref$ === "function" ? use(_ref$, _el$13) : sentinelRef = _el$13;
1301
+ return _el$12;
1302
+ })(), (() => {
1303
+ var _el$14 = getNextElement(_tmpl$9), _el$15 = _el$14.firstChild;
1304
+ _el$14.$$focusin = () => {
1305
+ triggerLoadMore();
1306
+ };
1307
+ _el$14.addEventListener("focus", () => {
1308
+ triggerLoadMore();
1309
+ });
1310
+ _el$15.addEventListener("focus", () => {
1311
+ triggerLoadMore();
1312
+ });
1313
+ insert(_el$15, () => renderProps.renderChildren());
1314
+ effect((_p$) => {
1315
+ var _v$ = props.level ?? 1, _v$2 = renderProps.class(), _v$3 = renderProps.style(), _v$4 = isLoading() || void 0, _v$5 = props.level ?? 1;
1316
+ _v$ !== _p$.e && setAttribute(_el$14, "aria-level", _p$.e = _v$);
1317
+ _v$2 !== _p$.t && className(_el$14, _p$.t = _v$2);
1318
+ _p$.a = style(_el$14, _v$3, _p$.a);
1319
+ _v$4 !== _p$.o && setAttribute(_el$14, "data-loading", _p$.o = _v$4);
1320
+ _v$5 !== _p$.i && setAttribute(_el$14, "data-level", _p$.i = _v$5);
1321
+ return _p$;
1322
+ }, {
1323
+ e: void 0,
1324
+ t: void 0,
1325
+ a: void 0,
1326
+ o: void 0,
1327
+ i: void 0
1328
+ });
1329
+ runHydrationEvents();
1330
+ return _el$14;
1331
+ })()];
1332
+ }
1333
+ function TreeItemContent(props) {
1334
+ const context = useContext(TreeItemContentContext);
1335
+ if (!context) throw new Error("TreeItemContent must be used within a TreeItem");
1336
+ const renderProps = useRenderProps({ get children() {
1337
+ return props.children;
1338
+ } }, () => context);
1339
+ return memo(() => renderProps.renderChildren());
1340
+ }
1341
+ /**
1342
+ * A section within a Tree. Renders as `role="rowgroup"` and supplies its
1343
+ * optional {@link TreeHeader} with the row/rowheader props that wire up the
1344
+ * section's `aria-labelledby` (mirrors upstream `TreeSection`, which reuses
1345
+ * `useGridListSection`).
1346
+ */
1347
+ function TreeSection(props) {
1348
+ const [local, domProps] = splitProps(props, [
1349
+ "children",
1350
+ "class",
1351
+ "style",
1352
+ "slot",
1353
+ "ref"
1354
+ ]);
1355
+ const section = createGridListSection({ get "aria-label"() {
1356
+ return domProps["aria-label"];
1357
+ } });
1358
+ const renderProps = useRenderProps({
1359
+ children: void 0,
1360
+ class: local.class,
1361
+ style: local.style,
1362
+ defaultClassName: "solidaria-TreeSection"
1363
+ }, () => ({ hasChildren: true }));
1364
+ const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));
1365
+ return (() => {
1366
+ var _el$16 = getNextElement(_tmpl$5);
1367
+ use((el) => assignRef(local.ref, el), _el$16);
1368
+ spread(_el$16, mergeProps(filteredDomProps, () => section.rowGroupProps, {
1369
+ get ["class"]() {
1370
+ return renderProps.class();
1371
+ },
1372
+ get style() {
1373
+ return renderProps.style();
1374
+ },
1375
+ get slot() {
1376
+ return local.slot;
1377
+ },
1378
+ "data-section": ""
1379
+ }), false, true);
1380
+ insert(_el$16, createComponent(GridListHeaderContext.Provider, {
1381
+ get value() {
1382
+ return section.rowProps;
1383
+ },
1384
+ get children() {
1385
+ return createComponent(GridListHeaderInnerContext.Provider, {
1386
+ get value() {
1387
+ return section.rowHeaderProps;
1388
+ },
1389
+ get children() {
1390
+ return local.children;
1391
+ }
1392
+ });
1393
+ }
1394
+ }));
1395
+ runHydrationEvents();
1396
+ return _el$16;
1397
+ })();
1398
+ }
1399
+ /**
1400
+ * The header of a {@link TreeSection}. Mirrors upstream `TreeHeader`, which is a
1401
+ * thin wrapper over `GridListHeader` with a Tree-specific class. The row and
1402
+ * rowheader semantics come from the enclosing section through context.
1403
+ */
1404
+ function TreeHeader(props) {
1405
+ return createComponent(GridListHeader, mergeProps({ "class": "solidaria-TreeHeader" }, props, { get children() {
1406
+ return props.children;
1407
+ } }));
1408
+ }
1409
+ Tree.Item = TreeItem;
1410
+ Tree.ExpandButton = TreeExpandButton;
1411
+ Tree.SelectionCheckbox = TreeSelectionCheckbox;
1412
+ Tree.LoadMoreItem = TreeLoadMoreItem;
1413
+ Tree.Section = TreeSection;
1414
+ Tree.Header = TreeHeader;
1415
+ function areSetsEqual(a, b) {
1416
+ if (a.size !== b.size) return false;
1417
+ for (const entry of a) if (!b.has(entry)) return false;
1418
+ return true;
1419
+ }
1420
+ delegateEvents(["focusin"]);
1421
+ //#endregion
1422
+ export { Tree, TreeContext, TreeExpandButton, TreeHeader, TreeItem, TreeItemContent, TreeItemContext, TreeLoadMoreItem, TreeSection, TreeSelectionCheckbox, TreeStateContext };
1423
+
1424
+ //# sourceMappingURL=Tree.js.map