@proyecto-viviana/solidaria-components 0.5.0 → 0.7.0-rc.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 (561) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/README.md +4 -7
  4. package/dist/ActionBar.d.ts +2 -10
  5. package/dist/ActionBar.d.ts.map +1 -1
  6. package/dist/ActionBar.js +95 -59
  7. package/dist/ActionBar.js.map +1 -1
  8. package/dist/ActionBar.jsx +42 -15
  9. package/dist/ActionBar.jsx.map +1 -1
  10. package/dist/ActionGroup.d.ts +1 -12
  11. package/dist/ActionGroup.d.ts.map +1 -1
  12. package/dist/ActionGroup.js +66 -44
  13. package/dist/ActionGroup.js.map +1 -1
  14. package/dist/ActionGroup.jsx +25 -10
  15. package/dist/ActionGroup.jsx.map +1 -1
  16. package/dist/Alert.d.ts +4 -1
  17. package/dist/Alert.d.ts.map +1 -1
  18. package/dist/Alert.js +25 -17
  19. package/dist/Alert.js.map +1 -1
  20. package/dist/Alert.jsx +9 -5
  21. package/dist/Alert.jsx.map +1 -1
  22. package/dist/Autocomplete.d.ts +2 -9
  23. package/dist/Autocomplete.d.ts.map +1 -1
  24. package/dist/Autocomplete.js +18 -5
  25. package/dist/Autocomplete.js.map +1 -1
  26. package/dist/Autocomplete.jsx +20 -7
  27. package/dist/Autocomplete.jsx.map +1 -1
  28. package/dist/Breadcrumbs.d.ts +2 -7
  29. package/dist/Breadcrumbs.d.ts.map +1 -1
  30. package/dist/Breadcrumbs.js +71 -51
  31. package/dist/Breadcrumbs.js.map +1 -1
  32. package/dist/Breadcrumbs.jsx +25 -12
  33. package/dist/Breadcrumbs.jsx.map +1 -1
  34. package/dist/Button.d.ts +1 -7
  35. package/dist/Button.d.ts.map +1 -1
  36. package/dist/Button.js +125 -72
  37. package/dist/Button.js.map +1 -1
  38. package/dist/Button.jsx +105 -43
  39. package/dist/Button.jsx.map +1 -1
  40. package/dist/Calendar.d.ts +1 -7
  41. package/dist/Calendar.d.ts.map +1 -1
  42. package/dist/Calendar.js +297 -221
  43. package/dist/Calendar.js.map +1 -1
  44. package/dist/Calendar.jsx +52 -32
  45. package/dist/Calendar.jsx.map +1 -1
  46. package/dist/CalendarPicker.d.ts +1 -10
  47. package/dist/CalendarPicker.d.ts.map +1 -1
  48. package/dist/CalendarPicker.js +12 -0
  49. package/dist/CalendarPicker.js.map +1 -1
  50. package/dist/CalendarPicker.jsx +12 -0
  51. package/dist/CalendarPicker.jsx.map +1 -1
  52. package/dist/Checkbox.d.ts +2 -7
  53. package/dist/Checkbox.d.ts.map +1 -1
  54. package/dist/Checkbox.js +332 -270
  55. package/dist/Checkbox.js.map +1 -1
  56. package/dist/Checkbox.jsx +70 -77
  57. package/dist/Checkbox.jsx.map +1 -1
  58. package/dist/Collection.d.ts +33 -7
  59. package/dist/Collection.d.ts.map +1 -1
  60. package/dist/Collection.js +128 -74
  61. package/dist/Collection.js.map +1 -1
  62. package/dist/Collection.jsx +46 -7
  63. package/dist/Collection.jsx.map +1 -1
  64. package/dist/Color.d.ts +15 -20
  65. package/dist/Color.d.ts.map +1 -1
  66. package/dist/Color.js +572 -334
  67. package/dist/Color.js.map +1 -1
  68. package/dist/Color.jsx +205 -85
  69. package/dist/Color.jsx.map +1 -1
  70. package/dist/ColorEditor.d.ts +3 -1
  71. package/dist/ColorEditor.d.ts.map +1 -1
  72. package/dist/ColorEditor.js +147 -124
  73. package/dist/ColorEditor.js.map +1 -1
  74. package/dist/ColorEditor.jsx +4 -1
  75. package/dist/ColorEditor.jsx.map +1 -1
  76. package/dist/ComboBox.d.ts +31 -10
  77. package/dist/ComboBox.d.ts.map +1 -1
  78. package/dist/ComboBox.js +539 -274
  79. package/dist/ComboBox.js.map +1 -1
  80. package/dist/ComboBox.jsx +213 -70
  81. package/dist/ComboBox.jsx.map +1 -1
  82. package/dist/ContextualHelpTrigger.d.ts +1 -7
  83. package/dist/ContextualHelpTrigger.d.ts.map +1 -1
  84. package/dist/ContextualHelpTrigger.js +102 -72
  85. package/dist/ContextualHelpTrigger.js.map +1 -1
  86. package/dist/ContextualHelpTrigger.jsx +36 -16
  87. package/dist/ContextualHelpTrigger.jsx.map +1 -1
  88. package/dist/DateField.d.ts +2 -7
  89. package/dist/DateField.d.ts.map +1 -1
  90. package/dist/DateField.js +0 -2
  91. package/dist/DateField.jsx +0 -2
  92. package/dist/DateField2.js +194 -179
  93. package/dist/DateField2.js.map +1 -1
  94. package/dist/DateField2.jsx +58 -55
  95. package/dist/DateField2.jsx.map +1 -1
  96. package/dist/DatePicker.d.ts +7 -7
  97. package/dist/DatePicker.d.ts.map +1 -1
  98. package/dist/DatePicker.js +2 -2
  99. package/dist/DatePicker.jsx +2 -2
  100. package/dist/DatePicker2.js +357 -435
  101. package/dist/DatePicker2.js.map +1 -1
  102. package/dist/DatePicker2.jsx +109 -178
  103. package/dist/DatePicker2.jsx.map +1 -1
  104. package/dist/DateRangePickerContext.d.ts +7 -0
  105. package/dist/DateRangePickerContext.d.ts.map +1 -1
  106. package/dist/Dialog.d.ts +4 -9
  107. package/dist/Dialog.d.ts.map +1 -1
  108. package/dist/Dialog.js +168 -101
  109. package/dist/Dialog.js.map +1 -1
  110. package/dist/Dialog.jsx +75 -27
  111. package/dist/Dialog.jsx.map +1 -1
  112. package/dist/Disclosure.d.ts +1 -9
  113. package/dist/Disclosure.d.ts.map +1 -1
  114. package/dist/Disclosure.js +121 -79
  115. package/dist/Disclosure.js.map +1 -1
  116. package/dist/Disclosure.jsx +32 -19
  117. package/dist/Disclosure.jsx.map +1 -1
  118. package/dist/DragAndDrop.d.ts +9 -6
  119. package/dist/DragAndDrop.d.ts.map +1 -1
  120. package/dist/DragAndDrop.js +37 -22
  121. package/dist/DragAndDrop.js.map +1 -1
  122. package/dist/DragAndDrop.jsx +20 -4
  123. package/dist/DragAndDrop.jsx.map +1 -1
  124. package/dist/DragPreview.d.ts +1 -1
  125. package/dist/DragPreview.d.ts.map +1 -1
  126. package/dist/DropZone.d.ts +1 -7
  127. package/dist/DropZone.d.ts.map +1 -1
  128. package/dist/DropZone.js +74 -40
  129. package/dist/DropZone.js.map +1 -1
  130. package/dist/DropZone.jsx +24 -8
  131. package/dist/DropZone.jsx.map +1 -1
  132. package/dist/ElementTag.d.ts +9 -20
  133. package/dist/ElementTag.d.ts.map +1 -1
  134. package/dist/ElementTag.js +8 -210
  135. package/dist/ElementTag.js.map +1 -1
  136. package/dist/ElementTag.jsx +8 -57
  137. package/dist/ElementTag.jsx.map +1 -1
  138. package/dist/FieldError.d.ts +8 -7
  139. package/dist/FieldError.d.ts.map +1 -1
  140. package/dist/FieldError.js +33 -13
  141. package/dist/FieldError.js.map +1 -1
  142. package/dist/FieldError.jsx +20 -5
  143. package/dist/FieldError.jsx.map +1 -1
  144. package/dist/FileTrigger.d.ts +1 -7
  145. package/dist/FileTrigger.d.ts.map +1 -1
  146. package/dist/FileTrigger.js +30 -12
  147. package/dist/FileTrigger.js.map +1 -1
  148. package/dist/FileTrigger.jsx +15 -2
  149. package/dist/FileTrigger.jsx.map +1 -1
  150. package/dist/Focusable.d.ts +2 -8
  151. package/dist/Focusable.d.ts.map +1 -1
  152. package/dist/Focusable.js +23 -6
  153. package/dist/Focusable.js.map +1 -1
  154. package/dist/Focusable.jsx +22 -5
  155. package/dist/Focusable.jsx.map +1 -1
  156. package/dist/Form.d.ts +9 -8
  157. package/dist/Form.d.ts.map +1 -1
  158. package/dist/Form.js +66 -43
  159. package/dist/Form.js.map +1 -1
  160. package/dist/Form.jsx +36 -16
  161. package/dist/Form.jsx.map +1 -1
  162. package/dist/GridList.d.ts +5 -10
  163. package/dist/GridList.d.ts.map +1 -1
  164. package/dist/GridList.js +372 -243
  165. package/dist/GridList.js.map +1 -1
  166. package/dist/GridList.jsx +177 -99
  167. package/dist/GridList.jsx.map +1 -1
  168. package/dist/HiddenDateInput.d.ts +1 -7
  169. package/dist/HiddenDateInput.d.ts.map +1 -1
  170. package/dist/Icon.d.ts +4 -1
  171. package/dist/Icon.d.ts.map +1 -1
  172. package/dist/Icon.js +41 -37
  173. package/dist/Icon.js.map +1 -1
  174. package/dist/Icon.jsx +7 -3
  175. package/dist/Icon.jsx.map +1 -1
  176. package/dist/Keyboard.d.ts +1 -7
  177. package/dist/Keyboard.d.ts.map +1 -1
  178. package/dist/Keyboard.js +24 -11
  179. package/dist/Keyboard.js.map +1 -1
  180. package/dist/Keyboard.jsx +15 -2
  181. package/dist/Keyboard.jsx.map +1 -1
  182. package/dist/Label.d.ts +20 -0
  183. package/dist/Label.d.ts.map +1 -0
  184. package/dist/Label.js +60 -0
  185. package/dist/Label.js.map +1 -0
  186. package/dist/Label.jsx +47 -0
  187. package/dist/Label.jsx.map +1 -0
  188. package/dist/Landmark.d.ts +4 -1
  189. package/dist/Landmark.d.ts.map +1 -1
  190. package/dist/Landmark.js +10 -4
  191. package/dist/Landmark.js.map +1 -1
  192. package/dist/Landmark.jsx +5 -1
  193. package/dist/Landmark.jsx.map +1 -1
  194. package/dist/Link.d.ts +2 -7
  195. package/dist/Link.d.ts.map +1 -1
  196. package/dist/Link.js +56 -36
  197. package/dist/Link.js.map +1 -1
  198. package/dist/Link.jsx +52 -10
  199. package/dist/Link.jsx.map +1 -1
  200. package/dist/ListBox.d.ts +17 -13
  201. package/dist/ListBox.d.ts.map +1 -1
  202. package/dist/ListBox.js +647 -348
  203. package/dist/ListBox.js.map +1 -1
  204. package/dist/ListBox.jsx +339 -236
  205. package/dist/ListBox.jsx.map +1 -1
  206. package/dist/ListDropTargetDelegate.d.ts +3 -0
  207. package/dist/ListDropTargetDelegate.d.ts.map +1 -1
  208. package/dist/Menu.d.ts +39 -30
  209. package/dist/Menu.d.ts.map +1 -1
  210. package/dist/Menu.js +547 -368
  211. package/dist/Menu.js.map +1 -1
  212. package/dist/Menu.jsx +328 -230
  213. package/dist/Menu.jsx.map +1 -1
  214. package/dist/Meter.d.ts +6 -13
  215. package/dist/Meter.d.ts.map +1 -1
  216. package/dist/Meter.js +55 -18
  217. package/dist/Meter.js.map +1 -1
  218. package/dist/Meter.jsx +33 -8
  219. package/dist/Meter.jsx.map +1 -1
  220. package/dist/Modal.d.ts +1 -7
  221. package/dist/Modal.d.ts.map +1 -1
  222. package/dist/Modal.js +104 -56
  223. package/dist/Modal.js.map +1 -1
  224. package/dist/Modal.jsx +68 -38
  225. package/dist/Modal.jsx.map +1 -1
  226. package/dist/NumberField.d.ts +4 -7
  227. package/dist/NumberField.d.ts.map +1 -1
  228. package/dist/NumberField.js +243 -124
  229. package/dist/NumberField.js.map +1 -1
  230. package/dist/NumberField.jsx +115 -26
  231. package/dist/NumberField.jsx.map +1 -1
  232. package/dist/Popover.d.ts +15 -7
  233. package/dist/Popover.d.ts.map +1 -1
  234. package/dist/Popover.js +370 -181
  235. package/dist/Popover.js.map +1 -1
  236. package/dist/Popover.jsx +215 -82
  237. package/dist/Popover.jsx.map +1 -1
  238. package/dist/Pressable.d.ts +2 -8
  239. package/dist/Pressable.d.ts.map +1 -1
  240. package/dist/Pressable.js +23 -6
  241. package/dist/Pressable.js.map +1 -1
  242. package/dist/Pressable.jsx +22 -5
  243. package/dist/Pressable.jsx.map +1 -1
  244. package/dist/PreviewTrigger.d.ts +24 -0
  245. package/dist/PreviewTrigger.d.ts.map +1 -0
  246. package/dist/PreviewTrigger.js +128 -0
  247. package/dist/PreviewTrigger.js.map +1 -0
  248. package/dist/PreviewTrigger.jsx +117 -0
  249. package/dist/PreviewTrigger.jsx.map +1 -0
  250. package/dist/ProgressBar.d.ts +1 -7
  251. package/dist/ProgressBar.d.ts.map +1 -1
  252. package/dist/ProgressBar.js +34 -14
  253. package/dist/ProgressBar.js.map +1 -1
  254. package/dist/ProgressBar.jsx +17 -3
  255. package/dist/ProgressBar.jsx.map +1 -1
  256. package/dist/RadioGroup.d.ts +2 -7
  257. package/dist/RadioGroup.d.ts.map +1 -1
  258. package/dist/RadioGroup.js +388 -269
  259. package/dist/RadioGroup.js.map +1 -1
  260. package/dist/RadioGroup.jsx +110 -99
  261. package/dist/RadioGroup.jsx.map +1 -1
  262. package/dist/RangeCalendar.d.ts +3 -7
  263. package/dist/RangeCalendar.d.ts.map +1 -1
  264. package/dist/RangeCalendar.js +271 -202
  265. package/dist/RangeCalendar.js.map +1 -1
  266. package/dist/RangeCalendar.jsx +56 -37
  267. package/dist/RangeCalendar.jsx.map +1 -1
  268. package/dist/RouterProvider.d.ts +3 -9
  269. package/dist/RouterProvider.d.ts.map +1 -1
  270. package/dist/RouterProvider.js +15 -14
  271. package/dist/RouterProvider.js.map +1 -1
  272. package/dist/RouterProvider.jsx +14 -13
  273. package/dist/RouterProvider.jsx.map +1 -1
  274. package/dist/SearchField.d.ts +4 -7
  275. package/dist/SearchField.d.ts.map +1 -1
  276. package/dist/SearchField.js +191 -164
  277. package/dist/SearchField.js.map +1 -1
  278. package/dist/SearchField.jsx +69 -62
  279. package/dist/SearchField.jsx.map +1 -1
  280. package/dist/Select.d.ts +5 -10
  281. package/dist/Select.d.ts.map +1 -1
  282. package/dist/Select.js +565 -359
  283. package/dist/Select.js.map +1 -1
  284. package/dist/Select.jsx +281 -161
  285. package/dist/Select.jsx.map +1 -1
  286. package/dist/SelectionIndicator.d.ts +1 -4
  287. package/dist/SelectionIndicator.d.ts.map +1 -1
  288. package/dist/SelectionIndicator.js +29 -13
  289. package/dist/SelectionIndicator.js.map +1 -1
  290. package/dist/SelectionIndicator.jsx +18 -4
  291. package/dist/SelectionIndicator.jsx.map +1 -1
  292. package/dist/Separator.d.ts +1 -7
  293. package/dist/Separator.d.ts.map +1 -1
  294. package/dist/Separator.js +22 -6
  295. package/dist/Separator.js.map +1 -1
  296. package/dist/Separator.jsx +16 -3
  297. package/dist/Separator.jsx.map +1 -1
  298. package/dist/SharedElementTransition.d.ts +1 -10
  299. package/dist/SharedElementTransition.d.ts.map +1 -1
  300. package/dist/SharedElementTransition.js +68 -40
  301. package/dist/SharedElementTransition.js.map +1 -1
  302. package/dist/SharedElementTransition.jsx +49 -25
  303. package/dist/SharedElementTransition.jsx.map +1 -1
  304. package/dist/Slider.d.ts +2 -8
  305. package/dist/Slider.d.ts.map +1 -1
  306. package/dist/Slider.js +155 -97
  307. package/dist/Slider.js.map +1 -1
  308. package/dist/Slider.jsx +25 -12
  309. package/dist/Slider.jsx.map +1 -1
  310. package/dist/StepList.d.ts +1 -7
  311. package/dist/StepList.d.ts.map +1 -1
  312. package/dist/StepList.js +112 -68
  313. package/dist/StepList.js.map +1 -1
  314. package/dist/StepList.jsx +58 -20
  315. package/dist/StepList.jsx.map +1 -1
  316. package/dist/Switch.d.ts +2 -9
  317. package/dist/Switch.d.ts.map +1 -1
  318. package/dist/Switch.js +164 -114
  319. package/dist/Switch.js.map +1 -1
  320. package/dist/Switch.jsx +26 -13
  321. package/dist/Switch.jsx.map +1 -1
  322. package/dist/Table.d.ts +2 -1
  323. package/dist/Table.d.ts.map +1 -1
  324. package/dist/Table.js +689 -592
  325. package/dist/Table.js.map +1 -1
  326. package/dist/Table.jsx +317 -237
  327. package/dist/Table.jsx.map +1 -1
  328. package/dist/Tabs.d.ts +2 -7
  329. package/dist/Tabs.d.ts.map +1 -1
  330. package/dist/Tabs.js +278 -293
  331. package/dist/Tabs.js.map +1 -1
  332. package/dist/Tabs.jsx +68 -66
  333. package/dist/Tabs.jsx.map +1 -1
  334. package/dist/TagGroup.d.ts +4 -11
  335. package/dist/TagGroup.d.ts.map +1 -1
  336. package/dist/TagGroup.js +153 -115
  337. package/dist/TagGroup.js.map +1 -1
  338. package/dist/TagGroup.jsx +37 -24
  339. package/dist/TagGroup.jsx.map +1 -1
  340. package/dist/Text.d.ts +3 -3
  341. package/dist/Text.d.ts.map +1 -1
  342. package/dist/Text.js +24 -7
  343. package/dist/Text.js.map +1 -1
  344. package/dist/Text.jsx +17 -5
  345. package/dist/Text.jsx.map +1 -1
  346. package/dist/TextField.d.ts +3 -16
  347. package/dist/TextField.d.ts.map +1 -1
  348. package/dist/TextField.js +104 -129
  349. package/dist/TextField.js.map +1 -1
  350. package/dist/TextField.jsx +76 -102
  351. package/dist/TextField.jsx.map +1 -1
  352. package/dist/TimeField.d.ts +2 -15
  353. package/dist/TimeField.d.ts.map +1 -1
  354. package/dist/TimeField.js +86 -102
  355. package/dist/TimeField.js.map +1 -1
  356. package/dist/TimeField.jsx +32 -49
  357. package/dist/TimeField.jsx.map +1 -1
  358. package/dist/Toast.d.ts +10 -13
  359. package/dist/Toast.d.ts.map +1 -1
  360. package/dist/Toast.js +209 -108
  361. package/dist/Toast.js.map +1 -1
  362. package/dist/Toast.jsx +127 -22
  363. package/dist/Toast.jsx.map +1 -1
  364. package/dist/ToggleButton.d.ts +1 -7
  365. package/dist/ToggleButton.d.ts.map +1 -1
  366. package/dist/ToggleButton.js +57 -35
  367. package/dist/ToggleButton.js.map +1 -1
  368. package/dist/ToggleButton.jsx +26 -12
  369. package/dist/ToggleButton.jsx.map +1 -1
  370. package/dist/ToggleButtonGroup.d.ts +1 -7
  371. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  372. package/dist/ToggleButtonGroup.js +59 -44
  373. package/dist/ToggleButtonGroup.js.map +1 -1
  374. package/dist/ToggleButtonGroup.jsx +25 -12
  375. package/dist/ToggleButtonGroup.jsx.map +1 -1
  376. package/dist/TokenField.d.ts +52 -0
  377. package/dist/TokenField.d.ts.map +1 -0
  378. package/dist/TokenField.js +301 -0
  379. package/dist/TokenField.js.map +1 -0
  380. package/dist/TokenField.jsx +197 -0
  381. package/dist/TokenField.jsx.map +1 -0
  382. package/dist/Toolbar.d.ts +2 -7
  383. package/dist/Toolbar.d.ts.map +1 -1
  384. package/dist/Toolbar.js +35 -16
  385. package/dist/Toolbar.js.map +1 -1
  386. package/dist/Toolbar.jsx +15 -2
  387. package/dist/Toolbar.jsx.map +1 -1
  388. package/dist/Tooltip.d.ts +2 -7
  389. package/dist/Tooltip.d.ts.map +1 -1
  390. package/dist/Tooltip.js +105 -68
  391. package/dist/Tooltip.js.map +1 -1
  392. package/dist/Tooltip.jsx +60 -36
  393. package/dist/Tooltip.jsx.map +1 -1
  394. package/dist/Tree.d.ts +8 -11
  395. package/dist/Tree.d.ts.map +1 -1
  396. package/dist/Tree.js +486 -339
  397. package/dist/Tree.js.map +1 -1
  398. package/dist/Tree.jsx +155 -107
  399. package/dist/Tree.jsx.map +1 -1
  400. package/dist/Virtualizer.d.ts +39 -9
  401. package/dist/Virtualizer.d.ts.map +1 -1
  402. package/dist/Virtualizer.js +2 -2
  403. package/dist/Virtualizer.jsx +2 -2
  404. package/dist/Virtualizer2.js +491 -136
  405. package/dist/Virtualizer2.js.map +1 -1
  406. package/dist/Virtualizer2.jsx +455 -122
  407. package/dist/Virtualizer2.jsx.map +1 -1
  408. package/dist/VirtualizerLayouts.d.ts +55 -2
  409. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  410. package/dist/VisuallyHidden.d.ts +4 -3
  411. package/dist/VisuallyHidden.d.ts.map +1 -1
  412. package/dist/VisuallyHidden.js +18 -11
  413. package/dist/VisuallyHidden.js.map +1 -1
  414. package/dist/VisuallyHidden.jsx +15 -9
  415. package/dist/VisuallyHidden.jsx.map +1 -1
  416. package/dist/contexts.d.ts +25 -0
  417. package/dist/contexts.d.ts.map +1 -1
  418. package/dist/contexts.js +3 -0
  419. package/dist/contexts.js.map +1 -1
  420. package/dist/contexts.jsx +3 -0
  421. package/dist/contexts.jsx.map +1 -1
  422. package/dist/index.d.ts +11 -9
  423. package/dist/index.d.ts.map +1 -1
  424. package/dist/index.js +14 -11
  425. package/dist/index.jsx +14 -11
  426. package/dist/intl/index.d.ts +16 -0
  427. package/dist/intl/index.d.ts.map +1 -0
  428. package/dist/intl.js +212 -0
  429. package/dist/intl.js.map +1 -0
  430. package/dist/intl.jsx +212 -0
  431. package/dist/intl.jsx.map +1 -0
  432. package/dist/useDragAndDrop.d.ts +4 -2
  433. package/dist/useDragAndDrop.d.ts.map +1 -1
  434. package/dist/useDragAndDrop2.js +39 -21
  435. package/dist/useDragAndDrop2.js.map +1 -1
  436. package/dist/useDragAndDrop2.jsx +39 -21
  437. package/dist/useDragAndDrop2.jsx.map +1 -1
  438. package/dist/utils.d.ts +28 -9
  439. package/dist/utils.d.ts.map +1 -1
  440. package/dist/utils.js +96 -24
  441. package/dist/utils.js.map +1 -1
  442. package/dist/utils.jsx +81 -24
  443. package/dist/utils.jsx.map +1 -1
  444. package/dist/virtualizer/Layout.d.ts +9 -0
  445. package/dist/virtualizer/Layout.d.ts.map +1 -1
  446. package/dist/virtualizer/Layout.js +23 -2
  447. package/dist/virtualizer/Layout.js.map +1 -1
  448. package/dist/virtualizer/Layout.jsx +23 -2
  449. package/dist/virtualizer/Layout.jsx.map +1 -1
  450. package/package.json +29 -10
  451. package/src/ActionBar.tsx +50 -24
  452. package/src/ActionGroup.tsx +31 -19
  453. package/src/Alert.tsx +10 -4
  454. package/src/Autocomplete.tsx +24 -15
  455. package/src/Breadcrumbs.tsx +32 -16
  456. package/src/Button.tsx +182 -67
  457. package/src/Calendar.tsx +65 -47
  458. package/src/CalendarPicker.tsx +16 -1
  459. package/src/Checkbox.tsx +84 -116
  460. package/src/Collection.tsx +84 -3
  461. package/src/Color.tsx +282 -104
  462. package/src/ColorEditor.tsx +5 -1
  463. package/src/ComboBox.tsx +384 -109
  464. package/src/ContextualHelpTrigger.tsx +47 -41
  465. package/src/DateField.tsx +74 -106
  466. package/src/DatePicker.tsx +156 -352
  467. package/src/DateRangePickerContext.tsx +8 -0
  468. package/src/Dialog.tsx +105 -38
  469. package/src/Disclosure.tsx +29 -19
  470. package/src/DragAndDrop.tsx +43 -8
  471. package/src/DragPreview.tsx +20 -1
  472. package/src/DropZone.tsx +32 -18
  473. package/src/ElementTag.tsx +14 -104
  474. package/src/FieldError.tsx +39 -7
  475. package/src/FileTrigger.tsx +18 -3
  476. package/src/Focusable.tsx +27 -6
  477. package/src/Form.tsx +57 -11
  478. package/src/GridList.tsx +233 -141
  479. package/src/HiddenDateInput.tsx +19 -3
  480. package/src/Icon.tsx +8 -2
  481. package/src/Keyboard.tsx +18 -2
  482. package/src/Label.tsx +77 -0
  483. package/src/Landmark.tsx +6 -1
  484. package/src/Link.tsx +65 -19
  485. package/src/ListBox.tsx +645 -468
  486. package/src/ListDropTargetDelegate.ts +4 -0
  487. package/src/Menu.tsx +512 -349
  488. package/src/Meter.tsx +42 -8
  489. package/src/Modal.tsx +85 -42
  490. package/src/NumberField.tsx +161 -48
  491. package/src/Popover.tsx +424 -148
  492. package/src/Pressable.tsx +27 -6
  493. package/src/PreviewTrigger.tsx +171 -0
  494. package/src/ProgressBar.tsx +25 -3
  495. package/src/RadioGroup.tsx +230 -161
  496. package/src/RangeCalendar.tsx +75 -63
  497. package/src/RouterProvider.tsx +24 -14
  498. package/src/SearchField.tsx +118 -121
  499. package/src/Select.tsx +454 -274
  500. package/src/SelectionIndicator.tsx +21 -3
  501. package/src/Separator.tsx +17 -1
  502. package/src/SharedElementTransition.tsx +115 -97
  503. package/src/Slider.tsx +35 -17
  504. package/src/StepList.tsx +71 -32
  505. package/src/Switch.tsx +45 -29
  506. package/src/Table.tsx +446 -380
  507. package/src/Tabs.tsx +132 -155
  508. package/src/TagGroup.tsx +53 -40
  509. package/src/Text.tsx +23 -6
  510. package/src/TextField.tsx +118 -159
  511. package/src/TimeField.tsx +34 -95
  512. package/src/Toast.tsx +141 -67
  513. package/src/ToggleButton.tsx +33 -15
  514. package/src/ToggleButtonGroup.tsx +27 -9
  515. package/src/TokenField.tsx +379 -0
  516. package/src/Toolbar.tsx +19 -9
  517. package/src/Tooltip.tsx +126 -84
  518. package/src/Tree.tsx +233 -173
  519. package/src/Virtualizer.tsx +400 -138
  520. package/src/VirtualizerLayouts.ts +211 -26
  521. package/src/VisuallyHidden.tsx +22 -8
  522. package/src/contexts.ts +13 -0
  523. package/src/index.ts +32 -11
  524. package/src/intl/ar-AE.json +6 -0
  525. package/src/intl/bg-BG.json +6 -0
  526. package/src/intl/cs-CZ.json +6 -0
  527. package/src/intl/da-DK.json +6 -0
  528. package/src/intl/de-DE.json +6 -0
  529. package/src/intl/el-GR.json +6 -0
  530. package/src/intl/en-US.json +6 -0
  531. package/src/intl/es-ES.json +6 -0
  532. package/src/intl/et-EE.json +6 -0
  533. package/src/intl/fi-FI.json +6 -0
  534. package/src/intl/fr-FR.json +6 -0
  535. package/src/intl/he-IL.json +6 -0
  536. package/src/intl/hr-HR.json +6 -0
  537. package/src/intl/hu-HU.json +6 -0
  538. package/src/intl/index.ts +125 -0
  539. package/src/intl/it-IT.json +6 -0
  540. package/src/intl/ja-JP.json +6 -0
  541. package/src/intl/ko-KR.json +6 -0
  542. package/src/intl/lt-LT.json +6 -0
  543. package/src/intl/lv-LV.json +6 -0
  544. package/src/intl/nb-NO.json +6 -0
  545. package/src/intl/nl-NL.json +6 -0
  546. package/src/intl/pl-PL.json +6 -0
  547. package/src/intl/pt-BR.json +6 -0
  548. package/src/intl/pt-PT.json +6 -0
  549. package/src/intl/ro-RO.json +6 -0
  550. package/src/intl/ru-RU.json +6 -0
  551. package/src/intl/sk-SK.json +6 -0
  552. package/src/intl/sl-SI.json +6 -0
  553. package/src/intl/sr-SP.json +6 -0
  554. package/src/intl/sv-SE.json +6 -0
  555. package/src/intl/tr-TR.json +6 -0
  556. package/src/intl/uk-UA.json +6 -0
  557. package/src/intl/zh-CN.json +6 -0
  558. package/src/intl/zh-TW.json +6 -0
  559. package/src/useDragAndDrop.ts +30 -32
  560. package/src/utils.tsx +124 -68
  561. package/src/virtualizer/Layout.ts +29 -0
package/src/Tree.tsx CHANGED
@@ -1,3 +1,17 @@
1
+ /*
2
+ * Copyright 2024 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tree.tsx
14
+
1
15
  /**
2
16
  * Tree component for solidaria-components
3
17
  *
@@ -9,17 +23,17 @@
9
23
  */
10
24
 
11
25
  import {
12
- type JSX,
13
26
  onCleanup,
14
27
  createContext,
15
28
  createEffect,
16
29
  createMemo,
17
30
  createSignal,
18
- splitProps,
19
31
  useContext,
20
32
  For,
21
33
  Show,
34
+ createTrackedEffect,
22
35
  } from "solid-js";
36
+ import type { JSX } from "@solidjs/web";
23
37
  import {
24
38
  createTree,
25
39
  createTreeItem,
@@ -29,6 +43,7 @@ import {
29
43
  createHover,
30
44
  mergeProps,
31
45
  type AriaTreeProps,
46
+ useLocale,
32
47
  } from "@proyecto-viviana/solidaria";
33
48
  import {
34
49
  createTreeState,
@@ -49,11 +64,13 @@ import {
49
64
  type SlotProps,
50
65
  useRenderProps,
51
66
  filterDOMProps,
67
+ dataAttr,
52
68
  } from "./utils";
53
69
  import { SharedElementTransition } from "./SharedElementTransition";
54
70
  import { type DragAndDropHooks } from "./useDragAndDrop";
55
71
  import {
56
72
  getNormalizedDropTargetKey,
73
+ indexesOutsideRange,
57
74
  mergePersistedKeysIntoVirtualRange,
58
75
  useDndPersistedKeys,
59
76
  useRenderDropIndicator,
@@ -66,6 +83,7 @@ import {
66
83
  type CollectionRendererContextValue,
67
84
  type SectionProps,
68
85
  useCollectionRenderer,
86
+ useCollectionRoot,
69
87
  } from "./Collection";
70
88
  import {
71
89
  GridListHeader,
@@ -73,7 +91,8 @@ import {
73
91
  GridListHeaderInnerContext,
74
92
  type GridListHeaderProps,
75
93
  } from "./GridList";
76
- import { useVirtualizerContext } from "./Virtualizer";
94
+ import { useVirtualizerContext, PersistedVirtualItem } from "./Virtualizer";
95
+ import { splitProps } from "@proyecto-viviana/solidaria/utils";
77
96
  import {
78
97
  handleLinkClick,
79
98
  type LinkDOMProps,
@@ -297,24 +316,7 @@ const EXPANSION_KEYS = {
297
316
  collapse: { ltr: "ArrowLeft", rtl: "ArrowRight" },
298
317
  } as const;
299
318
 
300
- function resolveTreeDirection(element: HTMLElement | null): "ltr" | "rtl" {
301
- if (element) {
302
- const dir = element.closest("[dir]")?.getAttribute("dir");
303
- if (dir === "rtl") return "rtl";
304
- if (dir === "ltr") return "ltr";
305
- if (typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
306
- const computedDirection = window.getComputedStyle(element).direction;
307
- if (computedDirection === "rtl") return "rtl";
308
- if (computedDirection === "ltr") return "ltr";
309
- }
310
- }
311
- if (typeof document !== "undefined") {
312
- return document.dir === "rtl" ? "rtl" : "ltr";
313
- }
314
- return "ltr";
315
- }
316
-
317
- function createTreeDropTargetDelegate<T extends object>(
319
+ export function createTreeDropTargetDelegate<T extends object>(
318
320
  delegate: TreeDropTargetDelegate,
319
321
  state: TreeState<T, TreeCollection<T>>,
320
322
  direction: "ltr" | "rtl",
@@ -396,14 +398,19 @@ function createTreeDropTargetDelegate<T extends object>(
396
398
  const isLastChildAtLevel = !nextItem || nextItem.parentKey !== parentKey;
397
399
 
398
400
  if (isLastChildAtLevel) {
399
- const afterParentTarget: ItemDropTarget = {
400
- type: "item",
401
- key: parentKey,
402
- dropPosition: "after",
403
- };
401
+ // Only items can be drop targets. Ancestors such as a Table's <TableBody> or a
402
+ // <TreeSection> are part of the collection, but their keys are generated rather than
403
+ // provided by the user, so dropping "after" them is not something the user can handle.
404
+ if (parentItem?.type === "item") {
405
+ const afterParentTarget: ItemDropTarget = {
406
+ type: "item",
407
+ key: parentKey,
408
+ dropPosition: "after",
409
+ };
404
410
 
405
- if (isValidDropTarget(afterParentTarget)) {
406
- ancestorTargets.push(afterParentTarget);
411
+ if (isValidDropTarget(afterParentTarget)) {
412
+ ancestorTargets.push(afterParentTarget);
413
+ }
407
414
  }
408
415
  if (nextItem) break;
409
416
  }
@@ -848,7 +855,9 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
848
855
  ],
849
856
  );
850
857
 
858
+ const locale = useLocale();
851
859
  const [ref, setRef] = createSignal<HTMLDivElement | null>(null);
860
+ const parentCollectionRenderer = useCollectionRenderer<unknown>();
852
861
  const flatItems = createMemo<TreeItemData<T>[]>(() =>
853
862
  flattenCollectionEntries(stateProps.items ?? []),
854
863
  );
@@ -874,7 +883,7 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
874
883
  const [lastExpandedKeys, setLastExpandedKeys] = createSignal<Set<Key>>(new Set());
875
884
  const [lastItemsLength, setLastItemsLength] = createSignal(flatItems().length);
876
885
  const [collectionVersion, setCollectionVersion] = createSignal(0);
877
- createEffect(() => {
886
+ createTrackedEffect(() => {
878
887
  const expanded = state.expandedKeys;
879
888
  const items = flatItems();
880
889
  if (!areSetsEqual(lastExpandedKeys(), expanded) || lastItemsLength() !== items.length) {
@@ -885,7 +894,7 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
885
894
  });
886
895
 
887
896
  // Resolve writing direction for keyboard expand/collapse parity
888
- const treeDirection = createMemo(() => ariaProps.direction ?? resolveTreeDirection(ref()));
897
+ const treeDirection = createMemo(() => ariaProps.direction ?? locale().direction);
889
898
 
890
899
  // Keep the aria object (do NOT destructure `treeProps`): its `treeProps` getter
891
900
  // wraps a memo carrying the reactive roving-container `tabIndex`, which rolls to
@@ -899,7 +908,7 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
899
908
  "aria-label": ariaProps["aria-label"],
900
909
  "aria-labelledby": ariaProps["aria-labelledby"],
901
910
  "aria-describedby": ariaProps["aria-describedby"],
902
- isVirtualized: ariaProps.isVirtualized,
911
+ isVirtualized: ariaProps.isVirtualized ?? parentCollectionRenderer?.isVirtualized,
903
912
  onAction: ariaProps.onAction,
904
913
  isDisabled: ariaProps.isDisabled,
905
914
  keyboardNavigationBehavior: ariaProps.keyboardNavigationBehavior,
@@ -948,7 +957,6 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
948
957
  return state.collection.rows;
949
958
  });
950
959
  const virtualizer = useVirtualizerContext();
951
- const parentCollectionRenderer = useCollectionRenderer<TreeItemData<T>>();
952
960
  const getDropTargetByIndex = (
953
961
  index: number,
954
962
  position: "before" | "after" | "on",
@@ -971,53 +979,58 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
971
979
  const hooks = local.dragAndDropHooks;
972
980
  return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
973
981
  });
974
- const dragState = createMemo(() => {
975
- if (!hasDraggableDnd()) return undefined;
976
- return local.dragAndDropHooks?.useDraggableCollectionState?.({
977
- items: visibleRows().map((node) => node.value as T),
978
- });
979
- });
980
- const dropState = createMemo(() => {
981
- if (!hasDroppableDnd()) return undefined;
982
- return local.dragAndDropHooks?.useDroppableCollectionState?.({});
983
- });
984
- createEffect(() => {
985
- const activeDropState = dropState();
986
- if (!activeDropState) return;
987
- const originalGetDropOperation = activeDropState.getDropOperation.bind(activeDropState);
988
-
989
- activeDropState.getDropOperation = (target, types, allowedOperations) => {
990
- const currentDraggingKeys = dragState()?.draggingKeys ?? new Set<string | number>();
991
- if (target.type === "item" && currentDraggingKeys.size > 0) {
992
- if (currentDraggingKeys.has(target.key) && target.dropPosition === "on") {
993
- return "cancel";
994
- }
995
-
996
- let currentKey: Key | null = target.key;
997
- while (currentKey != null) {
998
- const item = state.collection.getItem(currentKey);
999
- const parentKey = item?.parentKey;
1000
- if (parentKey != null && currentDraggingKeys.has(parentKey)) {
982
+ const dragStateValue = hasDraggableDnd()
983
+ ? local.dragAndDropHooks?.useDraggableCollectionState?.({
984
+ items: visibleRows().map((node) => node.value as T),
985
+ collection: state.collection,
986
+ selectedKeys: state.selectedKeys,
987
+ isSelected: (key) => state.isSelected(key),
988
+ })
989
+ : undefined;
990
+ const dragState = () => dragStateValue;
991
+ const dropStateValue = hasDroppableDnd()
992
+ ? local.dragAndDropHooks?.useDroppableCollectionState?.({
993
+ get collection() {
994
+ return state.collection;
995
+ },
996
+ })
997
+ : undefined;
998
+ const dropState = () => dropStateValue;
999
+ createEffect(
1000
+ () => dropState(),
1001
+ (activeDropState) => {
1002
+ if (!activeDropState) return;
1003
+ const originalGetDropOperation = activeDropState.getDropOperation.bind(activeDropState);
1004
+
1005
+ activeDropState.getDropOperation = (target, types, allowedOperations) => {
1006
+ const currentDraggingKeys = dragState()?.draggingKeys ?? new Set<string | number>();
1007
+ if (target.type === "item" && currentDraggingKeys.size > 0) {
1008
+ if (currentDraggingKeys.has(target.key) && target.dropPosition === "on") {
1001
1009
  return "cancel";
1002
1010
  }
1003
- currentKey = parentKey ?? null;
1011
+
1012
+ let currentKey: Key | null = target.key;
1013
+ while (currentKey != null) {
1014
+ const item = state.collection.getItem(currentKey);
1015
+ const parentKey = item?.parentKey;
1016
+ if (parentKey != null && currentDraggingKeys.has(parentKey)) {
1017
+ return "cancel";
1018
+ }
1019
+ currentKey = parentKey ?? null;
1020
+ }
1004
1021
  }
1005
- }
1006
1022
 
1007
- return originalGetDropOperation(target, types, allowedOperations);
1008
- };
1023
+ return originalGetDropOperation(target, types, allowedOperations);
1024
+ };
1009
1025
 
1010
- onCleanup(() => {
1011
- activeDropState.getDropOperation = originalGetDropOperation;
1012
- });
1013
- });
1014
- createEffect(() => {
1015
- if (!hasDraggableDnd()) return;
1016
- const hooks = local.dragAndDropHooks;
1017
- const activeDragState = dragState();
1018
- if (!hooks?.useDraggableCollection || !activeDragState) return;
1019
- hooks.useDraggableCollection({}, activeDragState, () => ref());
1020
- });
1026
+ return () => {
1027
+ activeDropState.getDropOperation = originalGetDropOperation;
1028
+ };
1029
+ },
1030
+ );
1031
+ if (local.dragAndDropHooks?.useDraggableCollection && dragStateValue) {
1032
+ local.dragAndDropHooks.useDraggableCollection({}, dragStateValue, () => ref());
1033
+ }
1021
1034
  const contextValue = createMemo<TreeContextValue<T>>(() => ({
1022
1035
  state,
1023
1036
  collection: state.collection,
@@ -1027,12 +1040,12 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1027
1040
  dragState: dragState(),
1028
1041
  dropState: dropState(),
1029
1042
  }));
1030
- const droppableCollection = createMemo(() => {
1043
+ const droppableCollectionValue = (() => {
1031
1044
  if (!hasDroppableDnd()) return undefined;
1032
1045
  const hooks = local.dragAndDropHooks;
1033
- const activeDropState = dropState();
1046
+ const activeDropState = dropStateValue;
1034
1047
  if (!hooks?.useDroppableCollection || !activeDropState) return undefined;
1035
- const direction = resolveTreeDirection(ref());
1048
+ const direction = locale().direction;
1036
1049
  const baseDropTargetDelegate =
1037
1050
  hooks.dropTargetDelegate ??
1038
1051
  parentCollectionRenderer?.dropTargetDelegate ??
@@ -1092,7 +1105,7 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1092
1105
  if (!target || target.type !== "item" || target.dropPosition !== "on") return;
1093
1106
  const item = state.collection.getItem(target.key);
1094
1107
  if (!item?.hasChildNodes) return;
1095
- const currentDirection = ariaProps.direction ?? resolveTreeDirection(ref());
1108
+ const currentDirection = ariaProps.direction ?? locale().direction;
1096
1109
  const expandKey = EXPANSION_KEYS.expand[currentDirection];
1097
1110
  const collapseKey = EXPANSION_KEYS.collapse[currentDirection];
1098
1111
  if (event.key === expandKey && !state.isExpanded(target.key)) {
@@ -1105,7 +1118,8 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1105
1118
  activeDropState,
1106
1119
  () => ref(),
1107
1120
  );
1108
- });
1121
+ })();
1122
+ const droppableCollection = () => droppableCollectionValue;
1109
1123
  const isRootDropTarget = createMemo(() => {
1110
1124
  return Boolean(dropState()?.target?.type === "root");
1111
1125
  });
@@ -1127,37 +1141,34 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1127
1141
  if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return null;
1128
1142
  const rows = visibleRows();
1129
1143
  const baseRange = virtualizer.getVisibleRange(rows.length);
1130
- const persistedIndexes = Array.from(persistedKeys())
1131
- .map((key) => rows.findIndex((node) => node.key === key))
1132
- .filter((index) => index >= 0);
1133
1144
  const dropTarget = dropState()?.target;
1134
1145
  const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection);
1135
- const focusedKey = state.focusedKey;
1136
- const focusedIndex =
1137
- focusedKey != null ? rows.findIndex((node) => node.key === focusedKey) : -1;
1138
1146
  const forceIncludeIndexes = [
1139
1147
  dropTarget?.type === "item" ? rows.findIndex((node) => node.key === dropTarget.key) : -1,
1140
1148
  normalizedDropKey != null ? rows.findIndex((node) => node.key === normalizedDropKey) : -1,
1141
- dropTarget?.type === "item" ? -1 : focusedIndex,
1142
1149
  ].filter((index) => index >= 0);
1143
- return mergePersistedKeysIntoVirtualRange(
1144
- baseRange,
1145
- persistedIndexes,
1146
- rows.length,
1147
- virtualizer,
1148
- 80,
1149
- {
1150
- forceIncludeIndexes,
1151
- forceIncludeMaxSpan: 320,
1152
- },
1153
- );
1150
+ return mergePersistedKeysIntoVirtualRange(baseRange, [], rows.length, virtualizer, 80, {
1151
+ forceIncludeIndexes,
1152
+ forceIncludeMaxSpan: 320,
1153
+ });
1154
+ });
1155
+ const persistedOutsideIndexes = createMemo(() => {
1156
+ const range = virtualRange();
1157
+ if (!range) return [] as number[];
1158
+ const rows = visibleRows();
1159
+ const persistedIndexes = Array.from(persistedKeys())
1160
+ .map((key) => rows.findIndex((node) => node.key === key))
1161
+ .filter((index) => index >= 0);
1162
+ return indexesOutsideRange(range, persistedIndexes);
1154
1163
  });
1155
1164
  const virtualizedVisibleRows = createMemo(() => {
1156
1165
  const range = virtualRange();
1157
1166
  if (!range) return visibleRows();
1158
1167
  return visibleRows().slice(range.start, range.end);
1159
1168
  });
1160
- createEffect(() => {
1169
+ createTrackedEffect(() => {
1170
+ const _s2Cleanups: Array<() => void> = [];
1171
+
1161
1172
  if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;
1162
1173
  virtualizer.setDropTargetItemCountResolver(() => visibleRows().length);
1163
1174
  virtualizer.setDropTargetIndexResolver((key) => {
@@ -1180,11 +1191,15 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1180
1191
  level: typeof node.level === "number" ? node.level : undefined,
1181
1192
  };
1182
1193
  });
1183
- onCleanup(() => {
1194
+ _s2Cleanups.push(() => {
1184
1195
  virtualizer.setDropTargetIndexResolver(undefined);
1185
1196
  virtualizer.setDropTargetItemCountResolver(undefined);
1186
1197
  virtualizer.setDropTargetResolver(undefined);
1187
1198
  });
1199
+
1200
+ return () => {
1201
+ for (const c of _s2Cleanups) c();
1202
+ };
1188
1203
  });
1189
1204
  const rowIndexByKey = createMemo(() => {
1190
1205
  const map = new Map<Key, number>();
@@ -1227,9 +1242,11 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1227
1242
  // Install tree-aware keyboard navigation override into the Virtualizer (if present).
1228
1243
  // This replaces the generic index-based navigation with collection-level semantics
1229
1244
  // (tree branch traversal, level-aware wrapping — RAC parity item #36).
1230
- createEffect(() => {
1245
+ createTrackedEffect(() => {
1246
+ const _s2Cleanups: Array<() => void> = [];
1247
+
1231
1248
  if (!virtualizer) return;
1232
- const direction = resolveTreeDirection(ref());
1249
+ const direction = locale().direction;
1233
1250
  const parentDelegate: TreeDropTargetDelegate = {
1234
1251
  getDropTargetFromPoint:
1235
1252
  parentCollectionRenderer?.dropTargetDelegate?.getDropTargetFromPoint ??
@@ -1250,9 +1267,13 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1250
1267
  ? (target, dir, isValid) => treeDelegate.getKeyboardNavigationTarget!(target, dir, isValid)
1251
1268
  : undefined,
1252
1269
  );
1253
- onCleanup(() => {
1270
+ _s2Cleanups.push(() => {
1254
1271
  virtualizer.setKeyboardNavigationOverride(undefined);
1255
1272
  });
1273
+
1274
+ return () => {
1275
+ for (const c of _s2Cleanups) c();
1276
+ };
1256
1277
  });
1257
1278
  const collectionRenderer = createMemo<CollectionRendererContextValue<unknown>>(() => ({
1258
1279
  ...parentCollectionRenderer,
@@ -1261,6 +1282,7 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1261
1282
  dndDropIndicator(index, position) ??
1262
1283
  parentCollectionRenderer?.renderDropIndicator?.(index, position),
1263
1284
  }));
1285
+ const CollectionRoot = useCollectionRoot();
1264
1286
  const rootKeyByNodeKey = createMemo(() => {
1265
1287
  const rootMap = new Map<Key, Key>();
1266
1288
  for (const row of visibleRows()) {
@@ -1313,7 +1335,6 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1313
1335
  });
1314
1336
  const renderTreeRow = (node: TreeNode<T>, itemIndex: number) => {
1315
1337
  const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex, "before");
1316
- const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex, "on");
1317
1338
  const afterIndicatorIndexes = () => getAfterIndicatorIndexes(itemIndex, renderRange());
1318
1339
  const itemData = treeItemDataFromNode(node);
1319
1340
  const itemState: TreeRenderItemState = {
@@ -1324,7 +1345,6 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1324
1345
  return (
1325
1346
  <>
1326
1347
  {beforeIndicator()}
1327
- {onIndicator()}
1328
1348
  {props.children(itemData, itemState)}
1329
1349
  <For each={afterIndicatorIndexes()}>
1330
1350
  {(afterIndex) => collectionRenderer().renderDropIndicator?.(afterIndex, "after")}
@@ -1334,11 +1354,9 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1334
1354
  };
1335
1355
 
1336
1356
  return (
1337
- <TreeContext.Provider value={contextValue() as unknown as TreeContextValue<object>}>
1338
- <TreeStateContext.Provider
1339
- value={state as unknown as TreeState<object, TreeCollection<object>>}
1340
- >
1341
- <CollectionRendererContext.Provider value={collectionRenderer()}>
1357
+ <TreeContext value={contextValue() as unknown as TreeContextValue<object>}>
1358
+ <TreeStateContext value={state as unknown as TreeState<object, TreeCollection<object>>}>
1359
+ <CollectionRendererContext value={collectionRenderer()}>
1342
1360
  <div
1343
1361
  ref={(element) => {
1344
1362
  setRef(element);
@@ -1352,15 +1370,15 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1352
1370
  )}
1353
1371
  class={renderProps.class()}
1354
1372
  style={renderProps.style()}
1355
- data-focused={state.isFocused || undefined}
1356
- data-focus-visible={isFocusVisible() || undefined}
1357
- data-disabled={ariaProps.isDisabled || undefined}
1358
- data-empty={isEmpty() || undefined}
1359
- data-drop-target={isRootDropTarget() || undefined}
1373
+ data-focused={dataAttr(state.isFocused)}
1374
+ data-focus-visible={dataAttr(isFocusVisible())}
1375
+ data-disabled={dataAttr(ariaProps.isDisabled)}
1376
+ data-empty={dataAttr(isEmpty())}
1377
+ data-drop-target={dataAttr(isRootDropTarget())}
1360
1378
  data-selection-mode={
1361
1379
  stateProps.selectionMode !== "none" ? stateProps.selectionMode : undefined
1362
1380
  }
1363
- data-allows-dragging={hasDraggableDnd() || undefined}
1381
+ data-allows-dragging={dataAttr(hasDraggableDnd())}
1364
1382
  >
1365
1383
  <SharedElementTransition>
1366
1384
  {isEmpty() && local.renderEmptyState ? (
@@ -1369,16 +1387,57 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1369
1387
  {local.renderEmptyState()}
1370
1388
  </div>
1371
1389
  </div>
1390
+ ) : parentCollectionRenderer?.isVirtualized ? (
1391
+ <CollectionRoot
1392
+ collection={virtualRange() ? visibleRows() : []}
1393
+ scrollRef={() => ref()}
1394
+ persistedKeys={persistedKeys()}
1395
+ >
1396
+ <Show
1397
+ when={hasSections()}
1398
+ fallback={
1399
+ <For each={renderableRows()}>
1400
+ {(row) => renderTreeRow(row.node, row.globalIndex)}
1401
+ </For>
1402
+ }
1403
+ >
1404
+ <For each={sectionedRenderableRows() ?? []}>
1405
+ {(entry) => (
1406
+ <Show when={entry.rows.length > 0}>
1407
+ <Show
1408
+ when={entry.type === "section"}
1409
+ fallback={
1410
+ <For each={entry.rows}>
1411
+ {(row) => renderTreeRow(row.node, row.globalIndex)}
1412
+ </For>
1413
+ }
1414
+ >
1415
+ <TreeSection>
1416
+ {entry.type === "section" && entry.section.title ? (
1417
+ <TreeHeader>{entry.section.title}</TreeHeader>
1418
+ ) : null}
1419
+ <For each={entry.rows}>
1420
+ {(row) => renderTreeRow(row.node, row.globalIndex)}
1421
+ </For>
1422
+ </TreeSection>
1423
+ </Show>
1424
+ </Show>
1425
+ )}
1426
+ </For>
1427
+ </Show>
1428
+ <For each={persistedOutsideIndexes()}>
1429
+ {(index) => {
1430
+ const node = visibleRows()[index];
1431
+ return node ? (
1432
+ <PersistedVirtualItem index={index}>
1433
+ {renderTreeRow(node, index)}
1434
+ </PersistedVirtualItem>
1435
+ ) : null;
1436
+ }}
1437
+ </For>
1438
+ </CollectionRoot>
1372
1439
  ) : (
1373
1440
  <>
1374
- {virtualRange()?.offsetTop ? (
1375
- <div
1376
- role="presentation"
1377
- aria-hidden="true"
1378
- style={{ height: `${virtualRange()!.offsetTop}px` }}
1379
- data-virtualizer-spacer="top"
1380
- />
1381
- ) : null}
1382
1441
  <Show
1383
1442
  when={hasSections()}
1384
1443
  fallback={
@@ -1411,14 +1470,6 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1411
1470
  )}
1412
1471
  </For>
1413
1472
  </Show>
1414
- {virtualRange()?.offsetBottom ? (
1415
- <div
1416
- role="presentation"
1417
- aria-hidden="true"
1418
- style={{ height: `${virtualRange()!.offsetBottom}px` }}
1419
- data-virtualizer-spacer="bottom"
1420
- />
1421
- ) : null}
1422
1473
  </>
1423
1474
  )}
1424
1475
  </SharedElementTransition>
@@ -1439,9 +1490,9 @@ export function Tree<T extends object>(props: TreeProps<T>): JSX.Element {
1439
1490
  </TreeLoadMoreItem>
1440
1491
  )}
1441
1492
  </div>
1442
- </CollectionRendererContext.Provider>
1443
- </TreeStateContext.Provider>
1444
- </TreeContext.Provider>
1493
+ </CollectionRendererContext>
1494
+ </TreeStateContext>
1495
+ </TreeContext>
1445
1496
  );
1446
1497
  }
1447
1498
 
@@ -1493,6 +1544,9 @@ export function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element
1493
1544
  const setItemRef = (element: HTMLElement) => {
1494
1545
  setRef(element);
1495
1546
  assignRef(local.ref, element);
1547
+ const dragRef = (draggableItem()?.dragProps as { ref?: (el: HTMLElement) => void } | undefined)
1548
+ ?.ref;
1549
+ if (typeof dragRef === "function") dragRef(element);
1496
1550
  };
1497
1551
 
1498
1552
  const itemNode = createMemo(() => {
@@ -1619,11 +1673,11 @@ export function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element
1619
1673
  });
1620
1674
 
1621
1675
  const rowContent = () => (
1622
- <TreeItemContentContext.Provider value={renderValues()}>
1676
+ <TreeItemContentContext value={renderValues()}>
1623
1677
  <div {...treeItemAria.gridCellProps} class="solidaria-Tree-item-content">
1624
1678
  {renderProps.renderChildren()}
1625
1679
  </div>
1626
- </TreeItemContentContext.Provider>
1680
+ </TreeItemContentContext>
1627
1681
  );
1628
1682
 
1629
1683
  const mergedRowProps = () =>
@@ -1662,7 +1716,7 @@ export function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element
1662
1716
  : {};
1663
1717
 
1664
1718
  return (
1665
- <TreeItemContext.Provider value={itemContextValue() as unknown as TreeItemContextValue<object>}>
1719
+ <TreeItemContext value={itemContextValue() as unknown as TreeItemContextValue<object>}>
1666
1720
  <div
1667
1721
  ref={setItemRef}
1668
1722
  {...domProps}
@@ -1670,25 +1724,25 @@ export function TreeItem<T extends object>(props: TreeItemProps<T>): JSX.Element
1670
1724
  {...linkedRowDomProps()}
1671
1725
  class={renderProps.class()}
1672
1726
  style={rowStyle()}
1673
- data-selected={isSelected() || undefined}
1674
- data-focused={isFocused() || undefined}
1675
- data-focus-visible={(isFocusVisible() && isFocused()) || undefined}
1676
- data-pressed={isPressed() || undefined}
1677
- data-hovered={isHovered() || undefined}
1678
- data-disabled={isDisabled() || undefined}
1679
- data-expanded={isExpanded() || undefined}
1680
- data-expandable={isExpandable() || undefined}
1681
- data-has-child-items={isExpandable() || undefined}
1727
+ data-selected={dataAttr(isSelected())}
1728
+ data-focused={dataAttr(isFocused())}
1729
+ data-focus-visible={dataAttr(isFocusVisible() && isFocused())}
1730
+ data-pressed={dataAttr(isPressed())}
1731
+ data-hovered={dataAttr(isHovered())}
1732
+ data-disabled={dataAttr(isDisabled())}
1733
+ data-expanded={dataAttr(isExpanded())}
1734
+ data-expandable={dataAttr(isExpandable())}
1735
+ data-has-child-items={dataAttr(isExpandable())}
1682
1736
  data-level={level()}
1683
1737
  data-selection-mode={
1684
1738
  treeContext?.state.selectionMode !== "none" ? treeContext?.state.selectionMode : undefined
1685
1739
  }
1686
- data-dragging={draggableItem()?.isDragging || undefined}
1687
- data-drop-target={droppableItem()?.isDropTarget || undefined}
1740
+ data-dragging={dataAttr(draggableItem()?.isDragging)}
1741
+ data-drop-target={dataAttr(droppableItem()?.isDropTarget)}
1688
1742
  >
1689
1743
  {rowContent()}
1690
1744
  </div>
1691
- </TreeItemContext.Provider>
1745
+ </TreeItemContext>
1692
1746
  );
1693
1747
  }
1694
1748
 
@@ -1744,7 +1798,7 @@ export function TreeExpandButton(props: TreeExpandButtonProps): JSX.Element {
1744
1798
  {...dataProps()}
1745
1799
  class={props.class ?? "solidaria-Tree-expand-button"}
1746
1800
  style={props.style}
1747
- data-expanded={isExpanded() || undefined}
1801
+ data-expanded={dataAttr(isExpanded())}
1748
1802
  >
1749
1803
  {renderChildren()}
1750
1804
  </button>
@@ -1779,15 +1833,16 @@ export function TreeSelectionCheckbox(props: {
1779
1833
  {...treeSelectionCheckboxAria.checkboxProps}
1780
1834
  class={props.class ?? "solidaria-Tree-checkbox"}
1781
1835
  style={props.style}
1782
- tabIndex={props.excludeFromTabOrder ? -1 : 0}
1836
+ tabindex={props.excludeFromTabOrder ? -1 : 0}
1783
1837
  aria-label={props["aria-label"] ?? treeSelectionCheckboxAria.checkboxProps["aria-label"]}
1784
1838
  />
1785
1839
  );
1786
1840
  }
1787
1841
 
1788
1842
  export function TreeLoadMoreItem(props: TreeLoadMoreItemProps): JSX.Element {
1789
- let sentinelRef: HTMLDivElement | undefined;
1843
+ const [sentinel, setSentinel] = createSignal<HTMLDivElement | undefined>();
1790
1844
  const [isPending, setIsPending] = createSignal(false);
1845
+ const scrollOffsetValue = createMemo(() => props.scrollOffset ?? 1);
1791
1846
  const isLoading = () =>
1792
1847
  !!props.isLoading ||
1793
1848
  props.loadingState === "loading" ||
@@ -1804,21 +1859,26 @@ export function TreeLoadMoreItem(props: TreeLoadMoreItemProps): JSX.Element {
1804
1859
  }
1805
1860
  };
1806
1861
 
1807
- createEffect(() => {
1808
- if (!sentinelRef || typeof IntersectionObserver !== "function") return;
1809
- const offset = props.scrollOffset ?? 1;
1810
- const margin = `0px 0px ${100 * offset}% 0px`;
1811
- const observer = new IntersectionObserver(
1812
- (entries) => {
1813
- if (entries[0]?.isIntersecting) {
1814
- void triggerLoadMore();
1815
- }
1816
- },
1817
- { rootMargin: margin },
1818
- );
1819
- observer.observe(sentinelRef);
1820
- return () => observer.disconnect();
1821
- });
1862
+ createEffect(
1863
+ () => ({
1864
+ current: sentinel(),
1865
+ scrollOffset: scrollOffsetValue(),
1866
+ }),
1867
+ ({ current, scrollOffset }) => {
1868
+ if (!current || typeof IntersectionObserver !== "function") return;
1869
+ const margin = `0px 0px ${100 * scrollOffset}% 0px`;
1870
+ const observer = new IntersectionObserver(
1871
+ (entries) => {
1872
+ if (entries[0]?.isIntersecting) {
1873
+ void triggerLoadMore();
1874
+ }
1875
+ },
1876
+ { rootMargin: margin },
1877
+ );
1878
+ observer.observe(current);
1879
+ return () => observer.disconnect();
1880
+ },
1881
+ );
1822
1882
 
1823
1883
  const renderProps = useRenderProps(
1824
1884
  {
@@ -1835,7 +1895,7 @@ export function TreeLoadMoreItem(props: TreeLoadMoreItemProps): JSX.Element {
1835
1895
  return (
1836
1896
  <>
1837
1897
  <div style={{ position: "relative", width: 0, height: 0, overflow: "hidden" }} inert>
1838
- <div ref={sentinelRef} style={{ position: "absolute", height: "1px", width: "1px" }} />
1898
+ <div ref={setSentinel} style={{ position: "absolute", height: "1px", width: "1px" }} />
1839
1899
  </div>
1840
1900
  <div
1841
1901
  role="row"
@@ -1848,7 +1908,7 @@ export function TreeLoadMoreItem(props: TreeLoadMoreItemProps): JSX.Element {
1848
1908
  }}
1849
1909
  class={renderProps.class()}
1850
1910
  style={renderProps.style()}
1851
- data-loading={isLoading() || undefined}
1911
+ data-loading={dataAttr(isLoading())}
1852
1912
  data-level={props.level ?? 1}
1853
1913
  >
1854
1914
  <div
@@ -1930,11 +1990,11 @@ export function TreeSection(props: TreeSectionProps): JSX.Element {
1930
1990
  slot={local.slot}
1931
1991
  data-section
1932
1992
  >
1933
- <GridListHeaderContext.Provider value={section.rowProps}>
1934
- <GridListHeaderInnerContext.Provider value={section.rowHeaderProps}>
1993
+ <GridListHeaderContext value={section.rowProps}>
1994
+ <GridListHeaderInnerContext value={section.rowHeaderProps}>
1935
1995
  {local.children}
1936
- </GridListHeaderInnerContext.Provider>
1937
- </GridListHeaderContext.Provider>
1996
+ </GridListHeaderInnerContext>
1997
+ </GridListHeaderContext>
1938
1998
  </div>
1939
1999
  );
1940
2000
  }