@accelint/design-system 0.8.1 → 0.10.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 (329) hide show
  1. package/dist/components/aria/index.d.ts +32 -3
  2. package/dist/components/aria/index.js +36 -1
  3. package/dist/components/aria/index.js.map +1 -1
  4. package/dist/components/button/button.css.js.map +1 -1
  5. package/dist/components/button/index.d.ts +45 -6
  6. package/dist/components/button/index.js +105 -3
  7. package/dist/components/button/index.js.map +1 -1
  8. package/dist/components/checkbox/checkbox.css.js.map +1 -1
  9. package/dist/components/checkbox/index.d.ts +28 -7
  10. package/dist/components/checkbox/index.js +124 -3
  11. package/dist/components/checkbox/index.js.map +1 -1
  12. package/dist/components/chip/chip.css.js.map +1 -1
  13. package/dist/components/chip/index.d.ts +36 -6
  14. package/dist/components/chip/index.js +171 -3
  15. package/dist/components/chip/index.js.map +1 -1
  16. package/dist/components/collection/index.d.ts +16 -5
  17. package/dist/components/collection/index.js +19 -1
  18. package/dist/components/collection/index.js.map +1 -1
  19. package/dist/components/combo-box/combo-box.css.js.map +1 -1
  20. package/dist/components/combo-box/index.d.ts +13 -5
  21. package/dist/components/combo-box/index.js +116 -3
  22. package/dist/components/combo-box/index.js.map +1 -1
  23. package/dist/components/date-field/date-field.css.js.map +1 -1
  24. package/dist/components/date-field/index.d.ts +13 -5
  25. package/dist/components/date-field/index.js +106 -2
  26. package/dist/components/date-field/index.js.map +1 -1
  27. package/dist/components/date-input/date-input.css.js.map +1 -1
  28. package/dist/components/date-input/index.d.ts +19 -7
  29. package/dist/components/date-input/index.js +144 -2
  30. package/dist/components/date-input/index.js.map +1 -1
  31. package/dist/components/dialog/dialog.css.js.map +1 -1
  32. package/dist/components/dialog/index.d.ts +24 -6
  33. package/dist/components/dialog/index.js +187 -3
  34. package/dist/components/dialog/index.js.map +1 -1
  35. package/dist/components/dialog/types.d.ts +1 -1
  36. package/dist/components/drawer/drawer.css.js.map +1 -1
  37. package/dist/components/drawer/index.d.ts +19 -7
  38. package/dist/components/drawer/index.js +306 -3
  39. package/dist/components/drawer/index.js.map +1 -1
  40. package/dist/components/element/index.d.ts +15 -4
  41. package/dist/components/element/index.js +21 -2
  42. package/dist/components/element/index.js.map +1 -1
  43. package/dist/components/element/types.d.ts +3 -3
  44. package/dist/components/group/group.css.js.map +1 -1
  45. package/dist/components/group/index.d.ts +15 -5
  46. package/dist/components/group/index.js +60 -3
  47. package/dist/components/group/index.js.map +1 -1
  48. package/dist/components/icon/icon.css.js.map +1 -1
  49. package/dist/components/icon/index.d.ts +17 -5
  50. package/dist/components/icon/index.js +39 -3
  51. package/dist/components/icon/index.js.map +1 -1
  52. package/dist/components/index.d.ts +35 -35
  53. package/dist/components/index.js +58 -28
  54. package/dist/components/input/index.d.ts +12 -5
  55. package/dist/components/input/index.js +141 -3
  56. package/dist/components/input/index.js.map +1 -1
  57. package/dist/components/input/input.css.js.map +1 -1
  58. package/dist/components/menu/index.d.ts +29 -5
  59. package/dist/components/menu/index.js +254 -3
  60. package/dist/components/menu/index.js.map +1 -1
  61. package/dist/components/menu/menu.css.js.map +1 -1
  62. package/dist/components/merge-provider/index.d.ts +18 -3
  63. package/dist/components/merge-provider/index.js +43 -2
  64. package/dist/components/merge-provider/index.js.map +1 -1
  65. package/dist/components/number-field/index.d.ts +14 -6
  66. package/dist/components/number-field/index.js +127 -2
  67. package/dist/components/number-field/index.js.map +1 -1
  68. package/dist/components/number-field/number-field.css.d.ts +1 -1
  69. package/dist/components/number-field/number-field.css.js.map +1 -1
  70. package/dist/components/number-field/types.d.ts +1 -1
  71. package/dist/components/options/index.d.ts +25 -5
  72. package/dist/components/options/index.js +255 -3
  73. package/dist/components/options/index.js.map +1 -1
  74. package/dist/components/options/options.css.js.map +1 -1
  75. package/dist/components/picker/index.d.ts +23 -5
  76. package/dist/components/picker/index.js +113 -3
  77. package/dist/components/picker/index.js.map +1 -1
  78. package/dist/components/picker/picker.css.js.map +1 -1
  79. package/dist/components/picker/picker.stories.css.js.map +1 -1
  80. package/dist/components/popover/index.d.ts +14 -6
  81. package/dist/components/popover/index.js +140 -3
  82. package/dist/components/popover/index.js.map +1 -1
  83. package/dist/components/popover/popover.css.js.map +1 -1
  84. package/dist/components/popover/types.d.ts +1 -1
  85. package/dist/components/query-builder/action-element.js.map +1 -1
  86. package/dist/components/query-builder/constants.js.map +1 -1
  87. package/dist/components/query-builder/dataset-sample.js.map +1 -1
  88. package/dist/components/query-builder/group.js +1 -1
  89. package/dist/components/query-builder/group.js.map +1 -1
  90. package/dist/components/query-builder/index.d.ts +7 -7
  91. package/dist/components/query-builder/index.js +198 -5
  92. package/dist/components/query-builder/index.js.map +1 -1
  93. package/dist/components/query-builder/query-builder.css.js.map +1 -1
  94. package/dist/components/query-builder/rule.js +1 -1
  95. package/dist/components/query-builder/rule.js.map +1 -1
  96. package/dist/components/query-builder/utils.js.map +1 -1
  97. package/dist/components/query-builder/value-editor.js.map +1 -1
  98. package/dist/components/query-builder/value-selector.js +1 -1
  99. package/dist/components/query-builder/value-selector.js.map +1 -1
  100. package/dist/components/radio/index.d.ts +22 -6
  101. package/dist/components/radio/index.js +114 -3
  102. package/dist/components/radio/index.js.map +1 -1
  103. package/dist/components/radio/radio.css.js.map +1 -1
  104. package/dist/components/search-field/index.d.ts +15 -6
  105. package/dist/components/search-field/index.js +92 -3
  106. package/dist/components/search-field/index.js.map +1 -1
  107. package/dist/components/search-field/search-field.css.js.map +1 -1
  108. package/dist/components/select/index.d.ts +13 -5
  109. package/dist/components/select/index.js +109 -3
  110. package/dist/components/select/index.js.map +1 -1
  111. package/dist/components/select/select.css.js.map +1 -1
  112. package/dist/components/slider/index.d.ts +41 -7
  113. package/dist/components/slider/index.js +235 -3
  114. package/dist/components/slider/index.js.map +1 -1
  115. package/dist/components/slider/slider.css.d.ts +1 -1
  116. package/dist/components/slider/slider.css.js.map +1 -1
  117. package/dist/components/slider/types.d.ts +1 -1
  118. package/dist/components/switch/index.d.ts +9 -5
  119. package/dist/components/switch/index.js +60 -3
  120. package/dist/components/switch/index.js.map +1 -1
  121. package/dist/components/switch/switch.css.js.map +1 -1
  122. package/dist/components/tabs/index.d.ts +74 -7
  123. package/dist/components/tabs/index.js +259 -3
  124. package/dist/components/tabs/index.js.map +1 -1
  125. package/dist/components/tabs/tabs.css.js.map +1 -1
  126. package/dist/components/text-field/index.d.ts +61 -6
  127. package/dist/components/text-field/index.js +93 -2
  128. package/dist/components/text-field/index.js.map +1 -1
  129. package/dist/components/text-field/text-field.css.js.map +1 -1
  130. package/dist/components/textarea/index.d.ts +18 -5
  131. package/dist/components/textarea/index.js +134 -3
  132. package/dist/components/textarea/index.js.map +1 -1
  133. package/dist/components/textarea/textarea.css.js.map +1 -1
  134. package/dist/components/time-field/index.d.ts +14 -6
  135. package/dist/components/time-field/index.js +103 -2
  136. package/dist/components/time-field/index.js.map +1 -1
  137. package/dist/components/time-field/time-field.css.js.map +1 -1
  138. package/dist/components/tooltip/index.d.ts +29 -6
  139. package/dist/components/tooltip/index.js +112 -3
  140. package/dist/components/tooltip/index.js.map +1 -1
  141. package/dist/components/tooltip/tooltip.css.js.map +1 -1
  142. package/dist/components/tree/index.d.ts +17 -5
  143. package/dist/components/tree/index.js +491 -3
  144. package/dist/components/tree/index.js.map +1 -1
  145. package/dist/components/tree/tree.css.js.map +1 -1
  146. package/dist/components/tree/utils.js.map +1 -1
  147. package/dist/hooks/index.d.ts +12 -12
  148. package/dist/hooks/use-collection-render/index.d.ts +11 -3
  149. package/dist/hooks/use-collection-render/index.js +25 -1
  150. package/dist/hooks/use-collection-render/index.js.map +1 -1
  151. package/dist/hooks/use-context-props/index.d.ts +10 -3
  152. package/dist/hooks/use-context-props/index.js +15 -1
  153. package/dist/hooks/use-context-props/index.js.map +1 -1
  154. package/dist/hooks/use-defaults/index.d.ts +99 -31
  155. package/dist/hooks/use-defaults/index.js +33 -2
  156. package/dist/hooks/use-defaults/index.js.map +1 -1
  157. package/dist/hooks/use-defaults/types.d.ts +6 -6
  158. package/dist/hooks/use-propagating-press/index.d.ts +13 -2
  159. package/dist/hooks/use-propagating-press/index.js +19 -1
  160. package/dist/hooks/use-propagating-press/index.js.map +1 -1
  161. package/dist/hooks/use-slot/index.d.ts +16 -2
  162. package/dist/hooks/use-slot/index.js +18 -1
  163. package/dist/hooks/use-slot/index.js.map +1 -1
  164. package/dist/hooks/use-theme/index.d.ts +37 -8
  165. package/dist/hooks/use-theme/index.js +105 -2
  166. package/dist/hooks/use-theme/index.js.map +1 -1
  167. package/dist/hooks/use-theme/types.d.ts +2 -2
  168. package/dist/hooks/use-theme/use-theme.css.js.map +1 -1
  169. package/dist/hooks/use-tree/index.d.ts +5 -2
  170. package/dist/hooks/use-tree/index.js +262 -1
  171. package/dist/hooks/use-tree/index.js.map +1 -1
  172. package/dist/hooks/use-tree/utils.js.map +1 -1
  173. package/dist/hooks/use-update-effect/index.d.ts +3 -1
  174. package/dist/hooks/use-update-effect/index.js +20 -1
  175. package/dist/hooks/use-update-effect/index.js.map +1 -1
  176. package/dist/index.css +119 -119
  177. package/dist/index.d.ts +47 -47
  178. package/dist/ladle/actions.js.map +1 -1
  179. package/dist/styles/layers.css.d.ts +3 -3
  180. package/dist/styles/layers.css.js.map +1 -1
  181. package/dist/styles/surfaces.css.d.ts +1 -1
  182. package/dist/styles/surfaces.css.js.map +1 -1
  183. package/dist/styles/theme.css.js.map +1 -1
  184. package/dist/styles/typography.css.js.map +1 -1
  185. package/dist/test/setup.js +78 -8
  186. package/dist/test/setup.js.map +1 -1
  187. package/dist/types/use-tree.d.ts +1 -1
  188. package/dist/utils/{css.d.ts → css/index.d.ts} +2 -2
  189. package/dist/utils/{css.js → css/index.js} +5 -5
  190. package/dist/utils/css/index.js.map +1 -0
  191. package/dist/utils/events/index.js +10 -0
  192. package/dist/utils/events/index.js.map +1 -0
  193. package/dist/utils/index.d.ts +4 -4
  194. package/dist/utils/index.js +4 -4
  195. package/dist/utils/{props.d.ts → props/index.d.ts} +2 -2
  196. package/dist/utils/{props.js → props/index.js} +3 -3
  197. package/dist/utils/props/index.js.map +1 -0
  198. package/dist/utils/{validators.d.ts → validators/index.d.ts} +1 -1
  199. package/dist/utils/{validators.js → validators/index.js} +3 -3
  200. package/dist/utils/validators/index.js.map +1 -0
  201. package/dist/vanilla.d.ts +1 -1
  202. package/dist/vanilla.js +1 -1
  203. package/package.json +25 -26
  204. package/dist/components/aria/aria.d.ts +0 -32
  205. package/dist/components/aria/aria.js +0 -39
  206. package/dist/components/aria/aria.js.map +0 -1
  207. package/dist/components/button/button.d.ts +0 -47
  208. package/dist/components/button/button.js +0 -104
  209. package/dist/components/button/button.js.map +0 -1
  210. package/dist/components/checkbox/checkbox.d.ts +0 -30
  211. package/dist/components/checkbox/checkbox.js +0 -123
  212. package/dist/components/checkbox/checkbox.js.map +0 -1
  213. package/dist/components/chip/chip.d.ts +0 -41
  214. package/dist/components/chip/chip.js +0 -171
  215. package/dist/components/chip/chip.js.map +0 -1
  216. package/dist/components/collection/collection.d.ts +0 -17
  217. package/dist/components/collection/collection.js +0 -22
  218. package/dist/components/collection/collection.js.map +0 -1
  219. package/dist/components/combo-box/combo-box.d.ts +0 -21
  220. package/dist/components/combo-box/combo-box.js +0 -116
  221. package/dist/components/combo-box/combo-box.js.map +0 -1
  222. package/dist/components/date-field/date-field.d.ts +0 -20
  223. package/dist/components/date-field/date-field.js +0 -106
  224. package/dist/components/date-field/date-field.js.map +0 -1
  225. package/dist/components/date-input/date-input.d.ts +0 -42
  226. package/dist/components/date-input/date-input.js +0 -128
  227. package/dist/components/date-input/date-input.js.map +0 -1
  228. package/dist/components/dialog/dialog.d.ts +0 -29
  229. package/dist/components/dialog/dialog.js +0 -186
  230. package/dist/components/dialog/dialog.js.map +0 -1
  231. package/dist/components/drawer/drawer.d.ts +0 -28
  232. package/dist/components/drawer/drawer.js +0 -305
  233. package/dist/components/drawer/drawer.js.map +0 -1
  234. package/dist/components/element/element.d.ts +0 -16
  235. package/dist/components/element/element.js +0 -24
  236. package/dist/components/element/element.js.map +0 -1
  237. package/dist/components/group/group.d.ts +0 -16
  238. package/dist/components/group/group.js +0 -61
  239. package/dist/components/group/group.js.map +0 -1
  240. package/dist/components/icon/icon.d.ts +0 -17
  241. package/dist/components/icon/icon.js +0 -39
  242. package/dist/components/icon/icon.js.map +0 -1
  243. package/dist/components/input/input.d.ts +0 -13
  244. package/dist/components/input/input.js +0 -141
  245. package/dist/components/input/input.js.map +0 -1
  246. package/dist/components/menu/menu.d.ts +0 -32
  247. package/dist/components/menu/menu.js +0 -252
  248. package/dist/components/menu/menu.js.map +0 -1
  249. package/dist/components/merge-provider/merge-provider.d.ts +0 -20
  250. package/dist/components/merge-provider/merge-provider.js +0 -46
  251. package/dist/components/merge-provider/merge-provider.js.map +0 -1
  252. package/dist/components/number-field/number-field.d.ts +0 -20
  253. package/dist/components/number-field/number-field.js +0 -125
  254. package/dist/components/number-field/number-field.js.map +0 -1
  255. package/dist/components/options/options.d.ts +0 -28
  256. package/dist/components/options/options.js +0 -253
  257. package/dist/components/options/options.js.map +0 -1
  258. package/dist/components/picker/picker.d.ts +0 -24
  259. package/dist/components/picker/picker.js +0 -113
  260. package/dist/components/picker/picker.js.map +0 -1
  261. package/dist/components/popover/popover.d.ts +0 -22
  262. package/dist/components/popover/popover.js +0 -139
  263. package/dist/components/popover/popover.js.map +0 -1
  264. package/dist/components/query-builder/query-builder.d.ts +0 -23
  265. package/dist/components/query-builder/query-builder.js +0 -200
  266. package/dist/components/query-builder/query-builder.js.map +0 -1
  267. package/dist/components/radio/radio.d.ts +0 -23
  268. package/dist/components/radio/radio.js +0 -114
  269. package/dist/components/radio/radio.js.map +0 -1
  270. package/dist/components/search-field/search-field.d.ts +0 -21
  271. package/dist/components/search-field/search-field.js +0 -92
  272. package/dist/components/search-field/search-field.js.map +0 -1
  273. package/dist/components/select/select.d.ts +0 -20
  274. package/dist/components/select/select.js +0 -109
  275. package/dist/components/select/select.js.map +0 -1
  276. package/dist/components/slider/slider.d.ts +0 -49
  277. package/dist/components/slider/slider.js +0 -230
  278. package/dist/components/slider/slider.js.map +0 -1
  279. package/dist/components/switch/switch.d.ts +0 -10
  280. package/dist/components/switch/switch.js +0 -60
  281. package/dist/components/switch/switch.js.map +0 -1
  282. package/dist/components/tabs/tabs.d.ts +0 -75
  283. package/dist/components/tabs/tabs.js +0 -258
  284. package/dist/components/tabs/tabs.js.map +0 -1
  285. package/dist/components/text-field/text-field.d.ts +0 -64
  286. package/dist/components/text-field/text-field.js +0 -92
  287. package/dist/components/text-field/text-field.js.map +0 -1
  288. package/dist/components/textarea/textarea.d.ts +0 -19
  289. package/dist/components/textarea/textarea.js +0 -134
  290. package/dist/components/textarea/textarea.js.map +0 -1
  291. package/dist/components/time-field/time-field.d.ts +0 -21
  292. package/dist/components/time-field/time-field.js +0 -106
  293. package/dist/components/time-field/time-field.js.map +0 -1
  294. package/dist/components/tooltip/tooltip.d.ts +0 -30
  295. package/dist/components/tooltip/tooltip.js +0 -112
  296. package/dist/components/tooltip/tooltip.js.map +0 -1
  297. package/dist/components/tree/tree.d.ts +0 -29
  298. package/dist/components/tree/tree.js +0 -491
  299. package/dist/components/tree/tree.js.map +0 -1
  300. package/dist/hooks/use-collection-render/use-collection-render.d.ts +0 -11
  301. package/dist/hooks/use-collection-render/use-collection-render.js +0 -28
  302. package/dist/hooks/use-collection-render/use-collection-render.js.map +0 -1
  303. package/dist/hooks/use-context-props/use-context-props.d.ts +0 -10
  304. package/dist/hooks/use-context-props/use-context-props.js +0 -18
  305. package/dist/hooks/use-context-props/use-context-props.js.map +0 -1
  306. package/dist/hooks/use-defaults/use-defaults.d.ts +0 -110
  307. package/dist/hooks/use-defaults/use-defaults.js +0 -36
  308. package/dist/hooks/use-defaults/use-defaults.js.map +0 -1
  309. package/dist/hooks/use-propagating-press/use-propagating-press.d.ts +0 -13
  310. package/dist/hooks/use-propagating-press/use-propagating-press.js +0 -21
  311. package/dist/hooks/use-propagating-press/use-propagating-press.js.map +0 -1
  312. package/dist/hooks/use-slot/use-slot.d.ts +0 -16
  313. package/dist/hooks/use-slot/use-slot.js +0 -21
  314. package/dist/hooks/use-slot/use-slot.js.map +0 -1
  315. package/dist/hooks/use-theme/use-theme.d.ts +0 -77
  316. package/dist/hooks/use-theme/use-theme.js +0 -108
  317. package/dist/hooks/use-theme/use-theme.js.map +0 -1
  318. package/dist/hooks/use-tree/use-tree.d.ts +0 -7
  319. package/dist/hooks/use-tree/use-tree.js +0 -262
  320. package/dist/hooks/use-tree/use-tree.js.map +0 -1
  321. package/dist/hooks/use-update-effect/use-update-effect.d.ts +0 -3
  322. package/dist/hooks/use-update-effect/use-update-effect.js +0 -23
  323. package/dist/hooks/use-update-effect/use-update-effect.js.map +0 -1
  324. package/dist/utils/css.js.map +0 -1
  325. package/dist/utils/events.js +0 -10
  326. package/dist/utils/events.js.map +0 -1
  327. package/dist/utils/props.js.map +0 -1
  328. package/dist/utils/validators.js.map +0 -1
  329. /package/dist/utils/{events.d.ts → events/index.d.ts} +0 -0
@@ -1,5 +1,108 @@
1
1
  import '../../chunk-PZ5AY32C.js';
2
- import './types.js';
3
- export { ThemeProvider, useTheme } from './use-theme.js';
2
+ import { useLayoutEffect } from '@react-aria/utils';
3
+ import { clsx } from 'clsx';
4
+ import { createContext, useContext, useMemo, useRef, useState } from 'react';
5
+ import { defaultGenericColors, defaultSemanticColors, defaultElevations, defaultFocus, defaultRadius, defaultSizes, defaultSpace, defaultTypography, defaultZIndex } from '../../styles/theme.css.js';
6
+ import { computeContract } from '../../utils/css/index.js';
7
+ import { root } from './use-theme.css.js';
8
+ import { jsx } from 'react/jsx-runtime';
9
+
10
+ var defaultTheme = {};
11
+ var themeContext = createContext(defaultTheme);
12
+ var themeCssContext = createContext(null);
13
+ function useTheme(contract) {
14
+ const theme = useContext(themeContext);
15
+ const css = useContext(themeCssContext);
16
+ return useMemo(
17
+ () => ({
18
+ ...theme,
19
+ ...!!contract && !!css ? {
20
+ contract: computeContract(contract, css)
21
+ } : {}
22
+ }),
23
+ [theme, contract, css]
24
+ );
25
+ }
26
+ function localInheritOrDefault(localClass, inherit, defaultClass) {
27
+ return localClass ?? (!inherit && defaultClass);
28
+ }
29
+ function ThemeProvider({
30
+ children,
31
+ className: classNameProp,
32
+ inherit,
33
+ style: styleProp,
34
+ theme: themeProp = defaultTheme,
35
+ vars
36
+ }) {
37
+ const ref = useRef(null);
38
+ const [css, setCss] = useState(null);
39
+ const parent = useTheme();
40
+ const className = useMemo(
41
+ () => clsx(
42
+ root,
43
+ classNameProp,
44
+ inherit && parent.className,
45
+ themeProp.className,
46
+ localInheritOrDefault(
47
+ vars?.colors?.generic,
48
+ inherit,
49
+ defaultGenericColors
50
+ ),
51
+ localInheritOrDefault(
52
+ vars?.colors?.semantic,
53
+ inherit,
54
+ defaultSemanticColors
55
+ ),
56
+ localInheritOrDefault(vars?.elevation, inherit, defaultElevations),
57
+ localInheritOrDefault(vars?.focus, inherit, defaultFocus),
58
+ localInheritOrDefault(vars?.radius, inherit, defaultRadius),
59
+ localInheritOrDefault(vars?.sizes, inherit, defaultSizes),
60
+ localInheritOrDefault(vars?.space, inherit, defaultSpace),
61
+ localInheritOrDefault(vars?.typography, inherit, defaultTypography),
62
+ localInheritOrDefault(vars?.zIndex, inherit, defaultZIndex)
63
+ ),
64
+ [
65
+ classNameProp,
66
+ inherit,
67
+ parent.className,
68
+ themeProp.className,
69
+ vars?.colors?.generic,
70
+ vars?.colors?.semantic,
71
+ vars?.elevation,
72
+ vars?.focus,
73
+ vars?.radius,
74
+ vars?.sizes,
75
+ vars?.space,
76
+ vars?.typography,
77
+ vars?.zIndex
78
+ ]
79
+ );
80
+ const style = useMemo(
81
+ () => ({
82
+ ...inherit ? parent.style : {},
83
+ ...themeProp.style,
84
+ ...styleProp
85
+ }),
86
+ [inherit, parent.style, themeProp.style, styleProp]
87
+ );
88
+ const theme = useMemo(
89
+ () => ({
90
+ ...inherit ? parent : themeProp,
91
+ className,
92
+ style
93
+ }),
94
+ [inherit, parent, themeProp, className, style]
95
+ );
96
+ useLayoutEffect(() => {
97
+ if (ref.current) {
98
+ setCss(window.getComputedStyle(ref.current));
99
+ }
100
+ }, [className, style]);
101
+ const { Provider: ClassesProvider } = themeContext;
102
+ const { Provider: CssProvider } = themeCssContext;
103
+ return /* @__PURE__ */ jsx("div", { ref, className, style, children: /* @__PURE__ */ jsx(ClassesProvider, { value: theme, children: /* @__PURE__ */ jsx(CssProvider, { value: css, children }) }) });
104
+ }
105
+
106
+ export { ThemeProvider, useTheme };
4
107
  //# sourceMappingURL=index.js.map
5
108
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/hooks/use-theme/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useLayoutEffect } from '@react-aria/utils';\nimport { clsx } from 'clsx';\nimport { createContext, useContext, useMemo, useRef, useState } from 'react';\nimport {\n defaultElevations,\n defaultFocus,\n defaultGenericColors,\n defaultRadius,\n defaultSemanticColors,\n defaultSizes,\n defaultSpace,\n defaultTypography,\n defaultZIndex,\n} from '../../styles/theme.css';\nimport type { Contract } from '../../types/vanilla-extract';\nimport { computeContract } from '../../utils/css';\nimport type { ThemeContext, ThemeProviderProps } from './types';\nimport { root } from './use-theme.css';\n\nconst defaultTheme: ThemeContext = {};\nconst themeContext = createContext<ThemeContext>(defaultTheme);\nconst themeCssContext = createContext<CSSStyleDeclaration | null>(null);\n\n/**\n * Computes CSS values into DeckGL compatible formats using the optionally provided contract\n *\n * This function allows for the reuse of CSS contract tokens within React context for non-CSS\n * use cases. This ensures synchronized theming across the entire rendering stack\n *\n * @example\n * ```\n * import { genericColorVars, useTheme, type RGBA } from '@accelint/design-system';\n *\n * const theme = useTheme({\n * colors: {\n * generic: genericColorVars,\n * },\n * });\n *\n * new ArrowPathLayer({\n * id: 'layer-id',\n * // ...\n * getColor: theme.contract?.colors.generic.neutral.v01 as RGBA,\n * }),\n * ```\n */\nexport function useTheme<T extends Contract>(\n contract?: T,\n): ThemeContext & {\n contract?: ReturnType<typeof computeContract<T>>;\n} {\n const theme = useContext(themeContext);\n const css = useContext(themeCssContext);\n\n return useMemo(\n () => ({\n ...theme,\n ...(!!contract && !!css\n ? {\n contract: computeContract(contract, css),\n }\n : {}),\n }),\n [theme, contract, css],\n );\n}\n\nfunction localInheritOrDefault(\n localClass?: string,\n inherit?: boolean,\n defaultClass?: string,\n) {\n return localClass ?? (!inherit && defaultClass);\n}\n\nexport function ThemeProvider({\n children,\n className: classNameProp,\n inherit,\n style: styleProp,\n theme: themeProp = defaultTheme,\n vars,\n}: ThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [css, setCss] = useState<CSSStyleDeclaration | null>(null);\n const parent = useTheme();\n\n const className = useMemo(\n () =>\n clsx(\n root,\n classNameProp,\n inherit && parent.className,\n themeProp.className,\n localInheritOrDefault(\n vars?.colors?.generic,\n inherit,\n defaultGenericColors,\n ),\n localInheritOrDefault(\n vars?.colors?.semantic,\n inherit,\n defaultSemanticColors,\n ),\n localInheritOrDefault(vars?.elevation, inherit, defaultElevations),\n localInheritOrDefault(vars?.focus, inherit, defaultFocus),\n localInheritOrDefault(vars?.radius, inherit, defaultRadius),\n localInheritOrDefault(vars?.sizes, inherit, defaultSizes),\n localInheritOrDefault(vars?.space, inherit, defaultSpace),\n localInheritOrDefault(vars?.typography, inherit, defaultTypography),\n localInheritOrDefault(vars?.zIndex, inherit, defaultZIndex),\n ),\n [\n classNameProp,\n inherit,\n parent.className,\n themeProp.className,\n vars?.colors?.generic,\n vars?.colors?.semantic,\n vars?.elevation,\n vars?.focus,\n vars?.radius,\n vars?.sizes,\n vars?.space,\n vars?.typography,\n vars?.zIndex,\n ],\n );\n\n const style = useMemo(\n () => ({\n ...(inherit ? parent.style : {}),\n ...themeProp.style,\n ...styleProp,\n }),\n [inherit, parent.style, themeProp.style, styleProp],\n );\n\n const theme = useMemo(\n () => ({\n ...(inherit ? parent : themeProp),\n className,\n style,\n }),\n [inherit, parent, themeProp, className, style],\n );\n\n useLayoutEffect(() => {\n if (ref.current) {\n setCss(window.getComputedStyle(ref.current));\n }\n }, [className, style]);\n\n const { Provider: ClassesProvider } = themeContext;\n const { Provider: CssProvider } = themeCssContext;\n\n return (\n <div ref={ref} className={className} style={style}>\n <ClassesProvider value={theme}>\n <CssProvider value={css}>{children}</CssProvider>\n </ClassesProvider>\n </div>\n );\n}\n"]}
@@ -19,14 +19,14 @@ import { QueryBuilderClassNames } from '../../components/query-builder/types.js'
19
19
  import { RadioClassNames } from '../../components/radio/types.js';
20
20
  import { SearchFieldClassNames } from '../../components/search-field/types.js';
21
21
  import { SelectClassNames } from '../../components/select/types.js';
22
+ import { SliderClassNames } from '../../components/slider/types.js';
22
23
  import { SwitchClassNames } from '../../components/switch/types.js';
23
24
  import { TabsClassNames } from '../../components/tabs/types.js';
24
- import { TextAreaClassNames } from '../../components/textarea/types.js';
25
25
  import { TextFieldClassNames } from '../../components/text-field/types.js';
26
+ import { TextAreaClassNames } from '../../components/textarea/types.js';
26
27
  import { TimeFieldClassNames } from '../../components/time-field/types.js';
27
28
  import { TooltipClassNames } from '../../components/tooltip/types.js';
28
29
  import { TreeClassNames } from '../../components/tree/types.js';
29
- import { SliderClassNames } from '../../components/slider/types.js';
30
30
  import 'react-aria-components';
31
31
  import '../../types/props.js';
32
32
  import '../../types/react-aria.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/use-theme/use-theme.css.ts"],"names":[],"mappings":";;;AAAO,IAAI,IAAO,GAAA","file":"use-theme.css.js","sourcesContent":["export var root = 'use-theme_root__5ipw7a0';"]}
1
+ {"version":3,"sources":["../../../src/hooks/use-theme/use-theme.css.ts"],"names":[],"mappings":";;;AAAO,IAAI,IAAA,GAAO","file":"use-theme.css.js","sourcesContent":["export var root = 'use-theme_root__5ipw7a0';"]}
@@ -1,4 +1,7 @@
1
- export { useTree } from './use-tree.js';
2
- import '../../types/use-tree.js';
1
+ import { UseTreeOptions, UseTreeResult } from '../../types/use-tree.js';
3
2
  import '@react-stately/data';
4
3
  import '@react-types/shared';
4
+
5
+ declare function useTree<T>({ allowsExpansion, allowsVisibility, nodes, selectionMode, onSelectionChange, onUpdate, }: UseTreeOptions<T>): UseTreeResult<T>;
6
+
7
+ export { useTree };
@@ -1,4 +1,265 @@
1
1
  import '../../chunk-PZ5AY32C.js';
2
- export { useTree } from './use-tree.js';
2
+ import { useTreeData } from '@react-stately/data';
3
+ import isEqual from 'lodash/isEqual';
4
+ import { useId, useMemo, useRef, useCallback } from 'react';
5
+ import { useUpdateEffect } from '../use-update-effect/index.js';
6
+ import { getKey, getChildren, mapTree, toggleVisibility } from './utils.js';
7
+
8
+ function useTree({
9
+ allowsExpansion = true,
10
+ allowsVisibility = false,
11
+ nodes,
12
+ selectionMode = "none",
13
+ onSelectionChange,
14
+ onUpdate
15
+ }) {
16
+ const rootKey = useId();
17
+ const list = useTreeData({
18
+ initialItems: nodes,
19
+ getChildren,
20
+ getKey
21
+ });
22
+ useUpdateEffect(() => {
23
+ if (selectionMode === "none" && list.selectedKeys.size) {
24
+ list.setSelectedKeys(/* @__PURE__ */ new Set());
25
+ }
26
+ }, [selectionMode, list.selectedKeys.size]);
27
+ const { lookup, tree, getItem, update } = useMemo(() => {
28
+ const lookup2 = {};
29
+ let tree2 = mapTree(
30
+ {
31
+ key: rootKey,
32
+ children: list.items
33
+ },
34
+ (node) => {
35
+ if (node.key === rootKey) {
36
+ return;
37
+ }
38
+ node = lookup2[node.key] = getItem2(node.key);
39
+ return node;
40
+ }
41
+ );
42
+ if (allowsVisibility) {
43
+ tree2 = mapTree(
44
+ {
45
+ key: rootKey,
46
+ children: toggleVisibility(tree2.children)
47
+ },
48
+ (node) => {
49
+ if (node.key === rootKey) {
50
+ return;
51
+ }
52
+ lookup2[node.key] = node;
53
+ return node;
54
+ }
55
+ );
56
+ }
57
+ function getItem2(key) {
58
+ let node = lookup2[key];
59
+ if (node) {
60
+ return node;
61
+ }
62
+ node = list.getItem(key);
63
+ if (!node) {
64
+ throw new Error(`Key of ${key} does not exist in tree`);
65
+ }
66
+ if ("nodes" in node.value) {
67
+ return {
68
+ ...node,
69
+ value: {
70
+ ...node.value,
71
+ nodes: node.children.flatMap((child) => {
72
+ const value = lookup2[child.key]?.value;
73
+ if (value) {
74
+ return [value];
75
+ }
76
+ return [];
77
+ })
78
+ }
79
+ };
80
+ }
81
+ return node;
82
+ }
83
+ function update2(key, patch) {
84
+ const node = getItem2(key);
85
+ let value;
86
+ if ("nodes" in node.value) {
87
+ value = {
88
+ ...node.value,
89
+ ...patch,
90
+ // Disallow a parent update to change child values
91
+ nodes: node.children.flatMap((child) => {
92
+ const value2 = lookup2[child.key]?.value;
93
+ if (value2) {
94
+ return [value2];
95
+ }
96
+ return [];
97
+ })
98
+ };
99
+ } else {
100
+ value = {
101
+ ...node.value,
102
+ ...patch
103
+ };
104
+ }
105
+ lookup2[key] = {
106
+ ...node,
107
+ value
108
+ };
109
+ list.update(key, value);
110
+ }
111
+ return { lookup: lookup2, tree: tree2, getItem: getItem2, update: update2 };
112
+ }, [rootKey, list, allowsVisibility]);
113
+ const treeRef = useRef(tree);
114
+ useUpdateEffect(() => {
115
+ if (isEqual(treeRef.current, tree)) {
116
+ return;
117
+ }
118
+ treeRef.current = tree;
119
+ onUpdate?.(tree.children.map(({ value }) => value));
120
+ }, [tree]);
121
+ const previousExpansionValuesRef = useRef([]);
122
+ const revertIsExpanded = useCallback(() => {
123
+ if (!previousExpansionValuesRef.current.length) {
124
+ return;
125
+ }
126
+ for (const { key, patch } of previousExpansionValuesRef.current) {
127
+ update(key, patch);
128
+ }
129
+ previousExpansionValuesRef.current = [];
130
+ }, [update]);
131
+ const toggleIsExpanded = useCallback(
132
+ (selection = "all", isExpanded = void 0, isRevertable = false) => {
133
+ if (!(allowsExpansion || isRevertable)) {
134
+ return;
135
+ }
136
+ if (!isRevertable) {
137
+ previousExpansionValuesRef.current = [];
138
+ }
139
+ function toggle({ key, value }) {
140
+ if (key === rootKey || !("nodes" in value)) {
141
+ return;
142
+ }
143
+ if (isRevertable) {
144
+ previousExpansionValuesRef.current.push({
145
+ key,
146
+ patch: { isExpanded: value.isExpanded }
147
+ });
148
+ }
149
+ update(key, { isExpanded: isExpanded ?? !value.isExpanded });
150
+ }
151
+ if (selection === "all") {
152
+ return mapTree(tree, toggle);
153
+ }
154
+ mapTree(tree, (node) => {
155
+ if (!selection.has(node.key)) {
156
+ return;
157
+ }
158
+ toggle(node);
159
+ });
160
+ },
161
+ [allowsExpansion, tree, rootKey, update]
162
+ );
163
+ const toggleIsSelected = useCallback(
164
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: refactor
165
+ (selection = "all", isSelected = void 0) => {
166
+ if (selectionMode === "none" || selectionMode === "single" && (selection === "all" || selection.size > 1)) {
167
+ return;
168
+ }
169
+ const all = Object.values(lookup);
170
+ let keys = selection === "all" ? new Set(all.map(({ key }) => key)) : selection;
171
+ if (isSelected != null) {
172
+ keys = isSelected ? keys : /* @__PURE__ */ new Set();
173
+ list.setSelectedKeys(keys);
174
+ return onSelectionChange?.(
175
+ (selection === "all" || keys.size === all.length) && isSelected ? "all" : keys
176
+ );
177
+ }
178
+ keys = /* @__PURE__ */ new Set([
179
+ ...selectionMode === "multiple" ? [...list.selectedKeys].filter(
180
+ (key) => !selection.has(key)
181
+ ) : [],
182
+ ...[...keys].filter((key) => !list.selectedKeys.has(key))
183
+ ]);
184
+ list.setSelectedKeys(keys);
185
+ onSelectionChange?.(
186
+ selection === "all" && keys.size === all.length ? "all" : keys
187
+ );
188
+ },
189
+ [selectionMode, lookup, list, onSelectionChange]
190
+ );
191
+ const toggleIsViewable = useCallback(
192
+ (selection = "all", isViewable = void 0) => {
193
+ if (!allowsVisibility) {
194
+ return;
195
+ }
196
+ if (selection === "all") {
197
+ return mapTree(tree, ({ key, value }) => {
198
+ if (key === rootKey) {
199
+ return;
200
+ }
201
+ if (!value.isReadOnly) {
202
+ update(key, {
203
+ isViewable: isViewable ?? !value.isViewable
204
+ });
205
+ }
206
+ });
207
+ }
208
+ mapTree(
209
+ {
210
+ key: rootKey,
211
+ children: Array.from(selection).reduce(
212
+ (acc, key) => toggleVisibility(acc, key, isViewable),
213
+ tree.children
214
+ )
215
+ },
216
+ ({ key, value }) => {
217
+ if (key === rootKey) {
218
+ return;
219
+ }
220
+ if (!value.isReadOnly) {
221
+ update(key, { isViewable: value.isViewable });
222
+ }
223
+ }
224
+ );
225
+ },
226
+ [allowsVisibility, tree, rootKey, update]
227
+ );
228
+ return useMemo(() => {
229
+ const { items: _, selectedKeys, ...rest } = list;
230
+ return {
231
+ actions: {
232
+ ...rest,
233
+ getItem,
234
+ revertIsExpanded,
235
+ toggleIsExpanded,
236
+ toggleIsSelected,
237
+ toggleIsViewable,
238
+ update
239
+ },
240
+ allowsExpansion,
241
+ allowsVisibility,
242
+ lookup,
243
+ selectedKeys,
244
+ selectionMode,
245
+ tree
246
+ };
247
+ }, [
248
+ list,
249
+ allowsExpansion,
250
+ allowsVisibility,
251
+ lookup,
252
+ selectionMode,
253
+ tree,
254
+ getItem,
255
+ revertIsExpanded,
256
+ toggleIsExpanded,
257
+ toggleIsSelected,
258
+ toggleIsViewable,
259
+ update
260
+ ]);
261
+ }
262
+
263
+ export { useTree };
3
264
  //# sourceMappingURL=index.js.map
4
265
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/hooks/use-tree/index.ts"],"names":["lookup","tree","getItem","update","value"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useTreeData } from '@react-stately/data';\nimport type { Key } from '@react-types/shared';\nimport isEqual from 'lodash/isEqual';\nimport { useCallback, useId, useMemo, useRef } from 'react';\nimport type {\n TreeActions,\n TreeNode,\n TreeNodes,\n UseTreeOptions,\n UseTreeResult,\n} from '../../types/use-tree';\nimport { useUpdateEffect } from '../use-update-effect';\nimport { getChildren, getKey, mapTree, toggleVisibility } from './utils';\n\nexport function useTree<T>({\n allowsExpansion = true,\n allowsVisibility = false,\n nodes,\n selectionMode = 'none',\n onSelectionChange,\n onUpdate,\n}: UseTreeOptions<T>): UseTreeResult<T> {\n const rootKey = useId();\n\n const list = useTreeData({\n initialItems: nodes,\n getChildren,\n getKey,\n });\n\n useUpdateEffect(() => {\n if (selectionMode === 'none' && list.selectedKeys.size) {\n list.setSelectedKeys(new Set());\n }\n }, [selectionMode, list.selectedKeys.size]);\n\n /**\n * useTreeData doesn't update the state of TreeNode.value when updates\n * are made to children.\n *\n * Given the structure:\n * Foo\n * - Bar\n * - Cat\n *\n * There will be TreeNodes for each item, with a value that represents\n * the original node passed in. If an update occurs to one of the child\n * nodes (Bar, Cat), then Foo node's value is NOT updated to reflect that\n * change. This means that each node is the source of truth only for itself\n * and not any of its children.\n *\n * To provide a completely accurate tree, we need to override the getItem\n * and update methods, as well as replace the list.items with a tree that\n * is completely accurate at all times. This requires storing (depth first)\n * each node in a lookup, so that parent node's values can be updated to\n * reflect the current state of their children.\n */\n const { lookup, tree, getItem, update } = useMemo(() => {\n const lookup: Record<Key, TreeNode<T>> = {};\n\n let tree = mapTree(\n {\n key: rootKey,\n children: list.items,\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n node = lookup[node.key] = getItem(node.key);\n\n return node;\n },\n );\n\n if (allowsVisibility) {\n tree = mapTree(\n {\n key: rootKey,\n children: toggleVisibility(tree.children),\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n lookup[node.key] = node;\n\n return node;\n },\n );\n }\n\n function getItem(key: Key): TreeNode<T> {\n let node = lookup[key];\n\n if (node) {\n return node;\n }\n\n node = list.getItem(key) as TreeNode<T>;\n\n if (!node) {\n throw new Error(`Key of ${key} does not exist in tree`);\n }\n\n if ('nodes' in node.value) {\n return {\n ...node,\n value: {\n ...node.value,\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n },\n };\n }\n\n return node;\n }\n\n function update(key: Key, patch: Partial<TreeNodes<T>>) {\n const node = getItem(key);\n\n let value: TreeNode<T>['value'];\n\n if ('nodes' in node.value) {\n value = {\n ...node.value,\n ...patch,\n // Disallow a parent update to change child values\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n };\n } else {\n value = {\n ...node.value,\n ...patch,\n };\n }\n\n /**\n * We must immediately update the state of the lookup due to the\n * possibility of a queue of state changes and we can't allow for\n * a parent to update and wipe out a previous child update\n */\n lookup[key] = {\n ...node,\n value,\n };\n\n list.update(key, value);\n }\n\n return { lookup, tree, getItem, update };\n }, [rootKey, list, allowsVisibility]);\n\n const treeRef = useRef(tree);\n\n /**\n * Because tree is a computed value and there are so many methods\n * that update list.items, it's far simpler to fire the onUpdate\n * during the render cycle. However, this means that onUpdate can\n * only be used for side effect purposes and should not trigger\n * state updates\n */\n useUpdateEffect(() => {\n if (isEqual(treeRef.current, tree)) {\n return;\n }\n\n treeRef.current = tree;\n\n onUpdate?.(tree.children.map(({ value }) => value));\n }, [tree]);\n\n const previousExpansionValuesRef = useRef<\n {\n key: Key;\n patch: { isExpanded?: boolean };\n }[]\n >([]);\n\n const revertIsExpanded = useCallback(() => {\n if (!previousExpansionValuesRef.current.length) {\n return;\n }\n\n for (const { key, patch } of previousExpansionValuesRef.current) {\n update(key, patch);\n }\n\n previousExpansionValuesRef.current = [];\n }, [update]);\n\n const toggleIsExpanded = useCallback<TreeActions<T>['toggleIsExpanded']>(\n (selection = 'all', isExpanded = undefined, isRevertable = false) => {\n if (!(allowsExpansion || isRevertable)) {\n return;\n }\n\n if (!isRevertable) {\n previousExpansionValuesRef.current = [];\n }\n\n function toggle({ key, value }: TreeNode<T>) {\n if (key === rootKey || !('nodes' in value)) {\n return;\n }\n\n if (isRevertable) {\n previousExpansionValuesRef.current.push({\n key,\n patch: { isExpanded: value.isExpanded },\n });\n }\n\n update(key, { isExpanded: isExpanded ?? !value.isExpanded });\n }\n\n if (selection === 'all') {\n return mapTree(tree, toggle);\n }\n\n mapTree(tree, (node) => {\n if (!selection.has(node.key)) {\n return;\n }\n\n toggle(node);\n });\n },\n [allowsExpansion, tree, rootKey, update],\n );\n\n const toggleIsSelected = useCallback<TreeActions<T>['toggleIsSelected']>(\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: refactor\n (selection = 'all', isSelected = undefined) => {\n if (\n selectionMode === 'none' ||\n (selectionMode === 'single' &&\n (selection === 'all' || selection.size > 1))\n ) {\n return;\n }\n\n const all = Object.values(lookup);\n\n let keys =\n selection === 'all' ? new Set(all.map(({ key }) => key)) : selection;\n\n if (isSelected != null) {\n keys = isSelected ? keys : new Set();\n\n list.setSelectedKeys(keys);\n\n return onSelectionChange?.(\n (selection === 'all' || keys.size === all.length) && isSelected\n ? 'all'\n : keys,\n );\n }\n\n keys = new Set([\n ...(selectionMode === 'multiple'\n ? [...list.selectedKeys].filter(\n (key) => !(selection as Set<Key>).has(key),\n )\n : []),\n ...[...keys].filter((key) => !list.selectedKeys.has(key)),\n ]);\n\n list.setSelectedKeys(keys);\n\n onSelectionChange?.(\n selection === 'all' && keys.size === all.length ? 'all' : keys,\n );\n },\n [selectionMode, lookup, list, onSelectionChange],\n );\n\n const toggleIsViewable = useCallback<TreeActions<T>['toggleIsViewable']>(\n (selection = 'all', isViewable = undefined) => {\n if (!allowsVisibility) {\n return;\n }\n\n if (selection === 'all') {\n return mapTree(tree, ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, {\n isViewable: isViewable ?? !value.isViewable,\n });\n }\n });\n }\n\n mapTree(\n {\n key: rootKey,\n children: Array.from(selection).reduce(\n (acc, key) => toggleVisibility(acc, key, isViewable),\n tree.children,\n ),\n } as TreeNode<T>,\n ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, { isViewable: value.isViewable });\n }\n },\n );\n },\n [allowsVisibility, tree, rootKey, update],\n );\n\n return useMemo(() => {\n const { items: _, selectedKeys, ...rest } = list;\n\n return {\n actions: {\n ...rest,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n },\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectedKeys,\n selectionMode,\n tree,\n };\n }, [\n list,\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectionMode,\n tree,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n ]);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/use-tree/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type { Key } from '@react-types/shared';\nimport type { TreeNode, TreeNodes } from '../../types';\n\nexport function getChildren<T>(node: TreeNodes<T>) {\n return 'nodes' in node ? node.nodes : [];\n}\n\nexport function getKey<T>(node: TreeNodes<T>) {\n return node.id;\n}\n\nexport function mapTree<T>(\n node: TreeNode<T>,\n // biome-ignore lint/suspicious/noConfusingVoidType: void is being used in a return type here. seems like a biome issue\n callback: (node: TreeNode<T>) => void | TreeNode<T> | undefined,\n): TreeNode<T> {\n let changed = false;\n\n const children = node.children.map((child) => {\n const update = mapTree(child, callback);\n\n if (update !== child) {\n changed = true;\n }\n\n return update;\n });\n\n if (changed) {\n node = {\n ...node,\n children,\n };\n }\n\n return callback(node) ?? node;\n}\n\ntype VisibilityUpdateContext = {\n forceIsViewable: boolean;\n parent: {\n isViewable: boolean;\n isVisible: boolean;\n };\n toggle: Key[];\n};\n\nexport function toggleVisibility<T>(\n nodes: TreeNode<T>[],\n target: Key = '',\n isViewable?: boolean,\n): TreeNode<T>[] {\n const toggle: Key[] = [];\n\n let result = toggleVisibilityInternal(nodes, target, isViewable, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n\n // biome-ignore lint/suspicious/noAssignInExpressions: intentional\n while ((target = toggle.shift() ?? '')) {\n result = toggleVisibilityInternal(result, target, undefined, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n }\n\n return result;\n}\n\nfunction toggleVisibilityInternal<T>(\n nodes: TreeNode<T>[],\n target: Key,\n state: boolean | undefined,\n { forceIsViewable, parent, toggle }: VisibilityUpdateContext,\n): TreeNode<T>[] {\n return nodes.map((node) => {\n const isViewable =\n forceIsViewable ||\n (target === node.key\n ? (state ?? !node.value.isViewable)\n : node.value.isViewable);\n\n const isVisible = parent.isVisible && isViewable;\n const willUpdateIsViewable = node.value.isViewable !== isViewable;\n\n // Toggle on parent if child of inactive parent is toggled on\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n isViewable &&\n !parent.isVisible\n ) {\n toggle.push(node.parentKey);\n }\n\n // Toggle off parent if last active child is toggled off\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n !isViewable &&\n parent.isVisible &&\n areSiblingsUnviewable(nodes, node)\n ) {\n toggle.push(node.parentKey);\n }\n\n return {\n ...node,\n children: toggleVisibilityInternal(node.children, target, state, {\n // Toggle all children on if all are inactive and parent is toggled on\n forceIsViewable:\n forceIsViewable ||\n (willUpdateIsViewable &&\n !!isViewable &&\n areUnviewable(node.children)),\n parent: {\n isViewable: !!isViewable,\n isVisible: !!isVisible,\n },\n toggle,\n }),\n value: {\n ...node.value,\n isViewable,\n isVisible,\n },\n };\n });\n}\n\nfunction areUnviewable<T>(nodes: TreeNode<T>[]): boolean {\n return nodes.every(\n ({ children, value }) =>\n !value.isViewable && (!children.length || areUnviewable<T>(children)),\n );\n}\n\nfunction areSiblingsUnviewable<T>(nodes: TreeNode<T>[], node: TreeNode<T>) {\n return areUnviewable(nodes.filter((n) => n !== node));\n}\n"]}
1
+ {"version":3,"sources":["../../../src/hooks/use-tree/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type { Key } from '@react-types/shared';\nimport type { TreeNode, TreeNodes } from '../../types/use-tree';\n\nexport function getChildren<T>(node: TreeNodes<T>) {\n return 'nodes' in node ? node.nodes : [];\n}\n\nexport function getKey<T>(node: TreeNodes<T>) {\n return node.id;\n}\n\nexport function mapTree<T>(\n node: TreeNode<T>,\n // biome-ignore lint/suspicious/noConfusingVoidType: void is being used in a return type here. seems like a biome issue\n callback: (node: TreeNode<T>) => void | TreeNode<T> | undefined,\n): TreeNode<T> {\n let changed = false;\n\n const children = node.children.map((child) => {\n const update = mapTree(child, callback);\n\n if (update !== child) {\n changed = true;\n }\n\n return update;\n });\n\n if (changed) {\n node = {\n ...node,\n children,\n };\n }\n\n return callback(node) ?? node;\n}\n\ntype VisibilityUpdateContext = {\n forceIsViewable: boolean;\n parent: {\n isViewable: boolean;\n isVisible: boolean;\n };\n toggle: Key[];\n};\n\nexport function toggleVisibility<T>(\n nodes: TreeNode<T>[],\n target: Key = '',\n isViewable?: boolean,\n): TreeNode<T>[] {\n const toggle: Key[] = [];\n\n let result = toggleVisibilityInternal(nodes, target, isViewable, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n\n // biome-ignore lint/suspicious/noAssignInExpressions: intentional\n while ((target = toggle.shift() ?? '')) {\n result = toggleVisibilityInternal(result, target, undefined, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n }\n\n return result;\n}\n\nfunction toggleVisibilityInternal<T>(\n nodes: TreeNode<T>[],\n target: Key,\n state: boolean | undefined,\n { forceIsViewable, parent, toggle }: VisibilityUpdateContext,\n): TreeNode<T>[] {\n return nodes.map((node) => {\n const isViewable =\n forceIsViewable ||\n (target === node.key\n ? (state ?? !node.value.isViewable)\n : node.value.isViewable);\n\n const isVisible = parent.isVisible && isViewable;\n const willUpdateIsViewable = node.value.isViewable !== isViewable;\n\n // Toggle on parent if child of inactive parent is toggled on\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n isViewable &&\n !parent.isVisible\n ) {\n toggle.push(node.parentKey);\n }\n\n // Toggle off parent if last active child is toggled off\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n !isViewable &&\n parent.isVisible &&\n areSiblingsUnviewable(nodes, node)\n ) {\n toggle.push(node.parentKey);\n }\n\n return {\n ...node,\n children: toggleVisibilityInternal(node.children, target, state, {\n // Toggle all children on if all are inactive and parent is toggled on\n forceIsViewable:\n forceIsViewable ||\n (willUpdateIsViewable &&\n !!isViewable &&\n areUnviewable(node.children)),\n parent: {\n isViewable: !!isViewable,\n isVisible: !!isVisible,\n },\n toggle,\n }),\n value: {\n ...node.value,\n isViewable,\n isVisible,\n },\n };\n });\n}\n\nfunction areUnviewable<T>(nodes: TreeNode<T>[]): boolean {\n return nodes.every(\n ({ children, value }) =>\n !value.isViewable && (!children.length || areUnviewable<T>(children)),\n );\n}\n\nfunction areSiblingsUnviewable<T>(nodes: TreeNode<T>[], node: TreeNode<T>) {\n return areUnviewable(nodes.filter((n) => n !== node));\n}\n"]}
@@ -1 +1,3 @@
1
- export { useUpdateEffect } from './use-update-effect.js';
1
+ declare function useUpdateEffect(effect: () => void, deps: any): void;
2
+
3
+ export { useUpdateEffect };
@@ -1,4 +1,23 @@
1
1
  import '../../chunk-PZ5AY32C.js';
2
- export { useUpdateEffect } from './use-update-effect.js';
2
+ import { useEffect, useRef } from 'react';
3
+
4
+ function useIsFirstMount() {
5
+ const isFirst = useRef(true);
6
+ if (isFirst.current) {
7
+ isFirst.current = false;
8
+ return true;
9
+ }
10
+ return isFirst.current;
11
+ }
12
+ function useUpdateEffect(effect, deps) {
13
+ const isFirstMount = useIsFirstMount();
14
+ useEffect(() => {
15
+ if (!isFirstMount) {
16
+ return effect();
17
+ }
18
+ }, deps);
19
+ }
20
+
21
+ export { useUpdateEffect };
3
22
  //# sourceMappingURL=index.js.map
4
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/hooks/use-update-effect/index.ts"],"names":[],"mappings":";;;AAcA,SAAS,eAAA,GAA2B;AAClC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAE3B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAElB,IAAA,OAAO,IAAA;AAAA;AAGT,EAAA,OAAO,OAAA,CAAQ,OAAA;AACjB;AAEO,SAAS,eAAA,CAAgB,QAAoB,IAAA,EAAW;AAC7D,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,MAAA,EAAO;AAAA;AAChB,KACC,IAAI,CAAA;AACT","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useEffect, useRef } from 'react';\n\nfunction useIsFirstMount(): boolean {\n const isFirst = useRef(true);\n\n if (isFirst.current) {\n isFirst.current = false;\n\n return true;\n }\n\n return isFirst.current;\n}\n\nexport function useUpdateEffect(effect: () => void, deps: any) {\n const isFirstMount = useIsFirstMount();\n\n useEffect(() => {\n if (!isFirstMount) {\n return effect();\n }\n }, deps);\n}\n"]}