@salt-ds/lab 1.0.0-alpha.93 → 1.0.0-alpha.95

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 (226) hide show
  1. package/CHANGELOG.md +214 -0
  2. package/css/salt-lab.css +190 -143
  3. package/dist-cjs/index.js +12 -58
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/mega-menu/MegaMenuGroup.js +2 -5
  6. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
  7. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +6 -0
  8. package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +1 -0
  9. package/dist-cjs/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +8 -8
  10. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -0
  11. package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -1
  12. package/dist-cjs/mega-menu/MegaMenuHeader.js.map +1 -1
  13. package/dist-cjs/mega-menu/MegaMenuItem.css.js +1 -1
  14. package/dist-cjs/mega-menu/MegaMenuItem.js +6 -5
  15. package/dist-cjs/mega-menu/MegaMenuItem.js.map +1 -1
  16. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js +6 -0
  17. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
  18. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js +31 -0
  19. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js.map +1 -0
  20. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js +6 -0
  21. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
  22. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js +31 -0
  23. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js.map +1 -0
  24. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +2 -2
  25. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +1 -1
  26. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +6 -0
  27. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  28. package/dist-cjs/toolbar-next/ToolbarContentNext.js +32 -0
  29. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +1 -0
  30. package/dist-cjs/toolbar-next/ToolbarNext.css.js +6 -0
  31. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +1 -0
  32. package/dist-cjs/toolbar-next/ToolbarNext.js +394 -0
  33. package/dist-cjs/toolbar-next/ToolbarNext.js.map +1 -0
  34. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +6 -0
  35. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  36. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +706 -0
  37. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  38. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +165 -0
  39. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  40. package/dist-cjs/toolbar-next/TooltrayNext.css.js +6 -0
  41. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +1 -0
  42. package/dist-cjs/toolbar-next/TooltrayNext.js +55 -0
  43. package/dist-cjs/toolbar-next/TooltrayNext.js.map +1 -0
  44. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +409 -0
  45. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  46. package/dist-cjs/toolbar-next/toolbarNextUtils.js +215 -0
  47. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +1 -0
  48. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +312 -0
  49. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  50. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +743 -0
  51. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  52. package/dist-es/index.js +6 -12
  53. package/dist-es/index.js.map +1 -1
  54. package/dist-es/mega-menu/MegaMenuGroup.js +2 -5
  55. package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
  56. package/dist-es/mega-menu/MegaMenuGroups.css.js +4 -0
  57. package/dist-es/mega-menu/MegaMenuGroups.css.js.map +1 -0
  58. package/dist-es/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +7 -7
  59. package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -0
  60. package/dist-es/mega-menu/MegaMenuHeader.js +0 -1
  61. package/dist-es/mega-menu/MegaMenuHeader.js.map +1 -1
  62. package/dist-es/mega-menu/MegaMenuItem.css.js +1 -1
  63. package/dist-es/mega-menu/MegaMenuItem.js +7 -6
  64. package/dist-es/mega-menu/MegaMenuItem.js.map +1 -1
  65. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js +4 -0
  66. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
  67. package/dist-es/mega-menu/MegaMenuSupportingActions.js +29 -0
  68. package/dist-es/mega-menu/MegaMenuSupportingActions.js.map +1 -0
  69. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js +4 -0
  70. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
  71. package/dist-es/mega-menu/MegaMenuSupportingContent.js +29 -0
  72. package/dist-es/mega-menu/MegaMenuSupportingContent.js.map +1 -0
  73. package/dist-es/mega-menu/useMegaMenuKeyboard.js +2 -2
  74. package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +1 -1
  75. package/dist-es/toolbar-next/ToolbarContentNext.css.js +4 -0
  76. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  77. package/dist-es/toolbar-next/ToolbarContentNext.js +30 -0
  78. package/dist-es/toolbar-next/ToolbarContentNext.js.map +1 -0
  79. package/dist-es/toolbar-next/ToolbarNext.css.js +4 -0
  80. package/dist-es/toolbar-next/ToolbarNext.css.js.map +1 -0
  81. package/dist-es/toolbar-next/ToolbarNext.js +392 -0
  82. package/dist-es/toolbar-next/ToolbarNext.js.map +1 -0
  83. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +4 -0
  84. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  85. package/dist-es/toolbar-next/ToolbarNextOverflow.js +701 -0
  86. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  87. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +159 -0
  88. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  89. package/dist-es/toolbar-next/TooltrayNext.css.js +4 -0
  90. package/dist-es/toolbar-next/TooltrayNext.css.js.map +1 -0
  91. package/dist-es/toolbar-next/TooltrayNext.js +53 -0
  92. package/dist-es/toolbar-next/TooltrayNext.js.map +1 -0
  93. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +390 -0
  94. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  95. package/dist-es/toolbar-next/toolbarNextUtils.js +211 -0
  96. package/dist-es/toolbar-next/toolbarNextUtils.js.map +1 -0
  97. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +310 -0
  98. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  99. package/dist-es/toolbar-next/useToolbarNextOverflow.js +741 -0
  100. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  101. package/dist-types/index.d.ts +1 -5
  102. package/dist-types/mega-menu/MegaMenuGroups.d.ts +8 -0
  103. package/dist-types/mega-menu/MegaMenuItem.d.ts +3 -2
  104. package/dist-types/mega-menu/MegaMenuSupportingActions.d.ts +8 -0
  105. package/dist-types/mega-menu/MegaMenuSupportingContent.d.ts +8 -0
  106. package/dist-types/mega-menu/index.d.ts +3 -3
  107. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +11 -0
  108. package/dist-types/toolbar-next/ToolbarNext.d.ts +12 -0
  109. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +34 -0
  110. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +16 -0
  111. package/dist-types/toolbar-next/TooltrayNext.d.ts +37 -0
  112. package/dist-types/toolbar-next/index.d.ts +3 -0
  113. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +39 -0
  114. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +42 -0
  115. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +42 -0
  116. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +37 -0
  117. package/package.json +2 -4
  118. package/dist-cjs/calendar/index.js +0 -61
  119. package/dist-cjs/calendar/index.js.map +0 -1
  120. package/dist-cjs/date-input/index.js +0 -23
  121. package/dist-cjs/date-input/index.js.map +0 -1
  122. package/dist-cjs/date-picker/index.js +0 -106
  123. package/dist-cjs/date-picker/index.js.map +0 -1
  124. package/dist-cjs/localization-provider/index.js +0 -26
  125. package/dist-cjs/localization-provider/index.js.map +0 -1
  126. package/dist-cjs/mega-menu/MegaMenuContent.css.js +0 -6
  127. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +0 -1
  128. package/dist-cjs/mega-menu/MegaMenuContent.js +0 -33
  129. package/dist-cjs/mega-menu/MegaMenuContent.js.map +0 -1
  130. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +0 -6
  131. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  132. package/dist-cjs/mega-menu/MegaMenuItemContent.js +0 -23
  133. package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +0 -1
  134. package/dist-cjs/mega-menu/MegaMenuSection.css.js +0 -6
  135. package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +0 -1
  136. package/dist-cjs/mega-menu/MegaMenuSection.js.map +0 -1
  137. package/dist-cjs/tree/Tree.css.js +0 -6
  138. package/dist-cjs/tree/Tree.css.js.map +0 -1
  139. package/dist-cjs/tree/Tree.js +0 -303
  140. package/dist-cjs/tree/Tree.js.map +0 -1
  141. package/dist-cjs/tree/TreeContext.js +0 -31
  142. package/dist-cjs/tree/TreeContext.js.map +0 -1
  143. package/dist-cjs/tree/TreeNode.css.js +0 -6
  144. package/dist-cjs/tree/TreeNode.css.js.map +0 -1
  145. package/dist-cjs/tree/TreeNode.js +0 -103
  146. package/dist-cjs/tree/TreeNode.js.map +0 -1
  147. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js +0 -6
  148. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  149. package/dist-cjs/tree/TreeNodeExpansionIcon.js +0 -62
  150. package/dist-cjs/tree/TreeNodeExpansionIcon.js.map +0 -1
  151. package/dist-cjs/tree/TreeNodeLabel.css.js +0 -6
  152. package/dist-cjs/tree/TreeNodeLabel.css.js.map +0 -1
  153. package/dist-cjs/tree/TreeNodeLabel.js +0 -26
  154. package/dist-cjs/tree/TreeNodeLabel.js.map +0 -1
  155. package/dist-cjs/tree/TreeNodeTrigger.css.js +0 -6
  156. package/dist-cjs/tree/TreeNodeTrigger.css.js.map +0 -1
  157. package/dist-cjs/tree/TreeNodeTrigger.js +0 -153
  158. package/dist-cjs/tree/TreeNodeTrigger.js.map +0 -1
  159. package/dist-cjs/tree/treeModel.js +0 -61
  160. package/dist-cjs/tree/treeModel.js.map +0 -1
  161. package/dist-cjs/tree/useTree.js +0 -337
  162. package/dist-cjs/tree/useTree.js.map +0 -1
  163. package/dist-cjs/utils/deprecatedExport.js +0 -30
  164. package/dist-cjs/utils/deprecatedExport.js.map +0 -1
  165. package/dist-es/calendar/index.js +0 -50
  166. package/dist-es/calendar/index.js.map +0 -1
  167. package/dist-es/date-input/index.js +0 -20
  168. package/dist-es/date-input/index.js.map +0 -1
  169. package/dist-es/date-picker/index.js +0 -85
  170. package/dist-es/date-picker/index.js.map +0 -1
  171. package/dist-es/localization-provider/index.js +0 -20
  172. package/dist-es/localization-provider/index.js.map +0 -1
  173. package/dist-es/mega-menu/MegaMenuContent.css.js +0 -4
  174. package/dist-es/mega-menu/MegaMenuContent.css.js.map +0 -1
  175. package/dist-es/mega-menu/MegaMenuContent.js +0 -31
  176. package/dist-es/mega-menu/MegaMenuContent.js.map +0 -1
  177. package/dist-es/mega-menu/MegaMenuItemContent.css.js +0 -4
  178. package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  179. package/dist-es/mega-menu/MegaMenuItemContent.js +0 -21
  180. package/dist-es/mega-menu/MegaMenuItemContent.js.map +0 -1
  181. package/dist-es/mega-menu/MegaMenuSection.css.js +0 -4
  182. package/dist-es/mega-menu/MegaMenuSection.css.js.map +0 -1
  183. package/dist-es/mega-menu/MegaMenuSection.js.map +0 -1
  184. package/dist-es/tree/Tree.css.js +0 -4
  185. package/dist-es/tree/Tree.css.js.map +0 -1
  186. package/dist-es/tree/Tree.js +0 -301
  187. package/dist-es/tree/Tree.js.map +0 -1
  188. package/dist-es/tree/TreeContext.js +0 -26
  189. package/dist-es/tree/TreeContext.js.map +0 -1
  190. package/dist-es/tree/TreeNode.css.js +0 -4
  191. package/dist-es/tree/TreeNode.css.js.map +0 -1
  192. package/dist-es/tree/TreeNode.js +0 -101
  193. package/dist-es/tree/TreeNode.js.map +0 -1
  194. package/dist-es/tree/TreeNodeExpansionIcon.css.js +0 -4
  195. package/dist-es/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  196. package/dist-es/tree/TreeNodeExpansionIcon.js +0 -60
  197. package/dist-es/tree/TreeNodeExpansionIcon.js.map +0 -1
  198. package/dist-es/tree/TreeNodeLabel.css.js +0 -4
  199. package/dist-es/tree/TreeNodeLabel.css.js.map +0 -1
  200. package/dist-es/tree/TreeNodeLabel.js +0 -24
  201. package/dist-es/tree/TreeNodeLabel.js.map +0 -1
  202. package/dist-es/tree/TreeNodeTrigger.css.js +0 -4
  203. package/dist-es/tree/TreeNodeTrigger.css.js.map +0 -1
  204. package/dist-es/tree/TreeNodeTrigger.js +0 -151
  205. package/dist-es/tree/TreeNodeTrigger.js.map +0 -1
  206. package/dist-es/tree/treeModel.js +0 -57
  207. package/dist-es/tree/treeModel.js.map +0 -1
  208. package/dist-es/tree/useTree.js +0 -335
  209. package/dist-es/tree/useTree.js.map +0 -1
  210. package/dist-es/utils/deprecatedExport.js +0 -27
  211. package/dist-es/utils/deprecatedExport.js.map +0 -1
  212. package/dist-types/calendar/index.d.ts +0 -13
  213. package/dist-types/date-input/index.d.ts +0 -3
  214. package/dist-types/localization-provider/index.d.ts +0 -9
  215. package/dist-types/mega-menu/MegaMenuContent.d.ts +0 -8
  216. package/dist-types/mega-menu/MegaMenuItemContent.d.ts +0 -8
  217. package/dist-types/mega-menu/MegaMenuSection.d.ts +0 -8
  218. package/dist-types/tree/Tree.d.ts +0 -36
  219. package/dist-types/tree/TreeContext.d.ts +0 -77
  220. package/dist-types/tree/TreeNode.d.ts +0 -25
  221. package/dist-types/tree/TreeNodeExpansionIcon.d.ts +0 -4
  222. package/dist-types/tree/TreeNodeLabel.d.ts +0 -4
  223. package/dist-types/tree/TreeNodeTrigger.d.ts +0 -8
  224. package/dist-types/tree/index.d.ts +0 -4
  225. package/dist-types/tree/treeModel.d.ts +0 -24
  226. package/dist-types/tree/useTree.d.ts +0 -68
@@ -1,60 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { makePrefixer, useIcon } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { clsx } from 'clsx';
6
- import { forwardRef } from 'react';
7
- import { useTreeNodeContext, useTreeContext } from './TreeContext.js';
8
- import css_248z from './TreeNodeExpansionIcon.css.js';
9
-
10
- const withBaseName = makePrefixer("saltTreeNodeExpansionIcon");
11
- const TreeNodeExpansionIcon = forwardRef(function TreeNodeExpansionIcon2(props, ref) {
12
- const { className, onClick, ...rest } = props;
13
- const targetWindow = useWindow();
14
- useComponentCssInjection({
15
- testId: "salt-tree-node-expansion-icon",
16
- css: css_248z,
17
- window: targetWindow
18
- });
19
- const nodeContext = useTreeNodeContext();
20
- if (!nodeContext) {
21
- throw new Error("TreeNodeExpansionIcon must be used within a TreeNode");
22
- }
23
- const { value, hasChildren, expanded, disabled } = nodeContext;
24
- const { toggleExpanded } = useTreeContext();
25
- const { ExpandGroupIcon, CollapseGroupIcon } = useIcon();
26
- const handleClick = (event) => {
27
- onClick == null ? void 0 : onClick(event);
28
- if (disabled || !hasChildren) return;
29
- toggleExpanded(event, value);
30
- };
31
- if (!hasChildren) {
32
- return /* @__PURE__ */ jsx(
33
- "span",
34
- {
35
- ref,
36
- className: clsx(withBaseName(), withBaseName("placeholder"), className),
37
- "aria-hidden": true,
38
- ...rest
39
- }
40
- );
41
- }
42
- const Icon = expanded ? CollapseGroupIcon : ExpandGroupIcon;
43
- return (
44
- // biome-ignore lint/a11y/useKeyWithClickEvents: keyboard handled at tree level, same as W3C
45
- /* @__PURE__ */ jsx(
46
- "span",
47
- {
48
- ref,
49
- className: clsx(withBaseName(), className),
50
- onClick: handleClick,
51
- "aria-hidden": true,
52
- ...rest,
53
- children: /* @__PURE__ */ jsx(Icon, { className: withBaseName("icon") })
54
- }
55
- )
56
- );
57
- });
58
-
59
- export { TreeNodeExpansionIcon };
60
- //# sourceMappingURL=TreeNodeExpansionIcon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodeExpansionIcon.js","sources":["../src/tree/TreeNodeExpansionIcon.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEvent,\n} from \"react\";\nimport { useTreeContext, useTreeNodeContext } from \"./TreeContext\";\nimport treeNodeExpansionIconCss from \"./TreeNodeExpansionIcon.css\";\n\nexport interface TreeNodeExpansionIconProps\n extends ComponentPropsWithoutRef<\"span\"> {}\n\nconst withBaseName = makePrefixer(\"saltTreeNodeExpansionIcon\");\n\nexport const TreeNodeExpansionIcon = forwardRef<\n HTMLSpanElement,\n TreeNodeExpansionIconProps\n>(function TreeNodeExpansionIcon(props, ref) {\n const { className, onClick, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tree-node-expansion-icon\",\n css: treeNodeExpansionIconCss,\n window: targetWindow,\n });\n\n const nodeContext = useTreeNodeContext();\n if (!nodeContext) {\n throw new Error(\"TreeNodeExpansionIcon must be used within a TreeNode\");\n }\n\n const { value, hasChildren, expanded, disabled } = nodeContext;\n const { toggleExpanded } = useTreeContext();\n const { ExpandGroupIcon, CollapseGroupIcon } = useIcon();\n\n const handleClick = (event: MouseEvent<HTMLSpanElement>) => {\n onClick?.(event);\n if (disabled || !hasChildren) return;\n toggleExpanded(event, value);\n };\n\n if (!hasChildren) {\n return (\n <span\n ref={ref}\n className={clsx(withBaseName(), withBaseName(\"placeholder\"), className)}\n aria-hidden\n {...rest}\n />\n );\n }\n\n const Icon = expanded ? CollapseGroupIcon : ExpandGroupIcon;\n\n return (\n // biome-ignore lint/a11y/useKeyWithClickEvents: keyboard handled at tree level, same as W3C\n <span\n ref={ref}\n className={clsx(withBaseName(), className)}\n onClick={handleClick}\n aria-hidden\n {...rest}\n >\n <Icon className={withBaseName(\"icon\")} />\n </span>\n );\n});\n"],"names":["TreeNodeExpansionIcon","treeNodeExpansionIconCss"],"mappings":";;;;;;;;;AAeA,MAAM,YAAA,GAAe,aAAa,2BAA2B,CAAA;AAEtD,MAAM,qBAAA,GAAwB,UAAA,CAGnC,SAASA,sBAAAA,CAAsB,OAAO,GAAA,EAAK;AAC3C,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,GAAG,MAAK,GAAI,KAAA;AAExC,EAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,EAAA,wBAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,+BAAA;AAAA,IACR,GAAA,EAAKC,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,cAAc,kBAAA,EAAmB;AACvC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,UAAS,GAAI,WAAA;AACnD,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,cAAA,EAAe;AAC1C,EAAA,MAAM,EAAE,eAAA,EAAiB,iBAAA,EAAkB,GAAI,OAAA,EAAQ;AAEvD,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAuC;AAC1D,IAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AACV,IAAA,IAAI,QAAA,IAAY,CAAC,WAAA,EAAa;AAC9B,IAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAW,IAAA,CAAK,YAAA,IAAgB,YAAA,CAAa,aAAa,GAAG,SAAS,CAAA;AAAA,QACtE,aAAA,EAAW,IAAA;AAAA,QACV,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAEA,EAAA,MAAM,IAAA,GAAO,WAAW,iBAAA,GAAoB,eAAA;AAE5C,EAAA;AAAA;AAAA,oBAEE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,OAAA,EAAS,WAAA;AAAA,QACT,aAAA,EAAW,IAAA;AAAA,QACV,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,MAAM,CAAA,EAAG;AAAA;AAAA;AACzC;AAEJ,CAAC;;;;"}
@@ -1,4 +0,0 @@
1
- var css_248z = ".saltTreeNodeLabel {\n flex: 1;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n word-break: break-word;\n}\n";
2
-
3
- export { css_248z as default };
4
- //# sourceMappingURL=TreeNodeLabel.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodeLabel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,24 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { makePrefixer } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { clsx } from 'clsx';
6
- import { forwardRef } from 'react';
7
- import css_248z from './TreeNodeLabel.css.js';
8
-
9
- const withBaseName = makePrefixer("saltTreeNodeLabel");
10
- const TreeNodeLabel = forwardRef(
11
- function TreeNodeLabel2(props, ref) {
12
- const { children, className, ...rest } = props;
13
- const targetWindow = useWindow();
14
- useComponentCssInjection({
15
- testId: "salt-tree-node-label",
16
- css: css_248z,
17
- window: targetWindow
18
- });
19
- return /* @__PURE__ */ jsx("span", { ref, className: clsx(withBaseName(), className), ...rest, children });
20
- }
21
- );
22
-
23
- export { TreeNodeLabel };
24
- //# sourceMappingURL=TreeNodeLabel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodeLabel.js","sources":["../src/tree/TreeNodeLabel.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport treeNodeLabelCss from \"./TreeNodeLabel.css\";\n\nexport interface TreeNodeLabelProps extends ComponentPropsWithoutRef<\"span\"> {}\n\nconst withBaseName = makePrefixer(\"saltTreeNodeLabel\");\n\nexport const TreeNodeLabel = forwardRef<HTMLSpanElement, TreeNodeLabelProps>(\n function TreeNodeLabel(props, ref) {\n const { children, className, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tree-node-label\",\n css: treeNodeLabelCss,\n window: targetWindow,\n });\n\n return (\n <span ref={ref} className={clsx(withBaseName(), className)} {...rest}>\n {children}\n </span>\n );\n },\n);\n"],"names":["TreeNodeLabel","treeNodeLabelCss"],"mappings":";;;;;;;;AASA,MAAM,YAAA,GAAe,aAAa,mBAAmB,CAAA;AAE9C,MAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,SAASA,cAAAA,CAAc,KAAA,EAAO,GAAA,EAAK;AACjC,IAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AAEzC,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,sBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA,EAAI,GAAG,IAAA,EAC7D,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -1,4 +0,0 @@
1
- var css_248z = ".saltTreeNodeTrigger {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--salt-spacing-100);\n width: 100%;\n\n padding-top: calc(var(--salt-spacing-75) + var(--salt-spacing-50));\n padding-bottom: calc(var(--salt-spacing-75) + var(--salt-spacing-50));\n padding-right: var(--salt-spacing-100);\n /* Keep a fixed spacing-100 outer left padding for all nodes, then add one\n indent step per additional level. Each indent step = (icon column width +\n inter-item gap).\n Level-1 nodes get no extra indent; level-2 gets 1 step, level-3 gets 2, etc.\n */\n --saltTreeNodeTrigger-iconSize: max(var(--salt-size-icon), 12px);\n --saltTreeNodeTrigger-indentStep: calc(var(--saltTreeNodeTrigger-iconSize) + var(--salt-spacing-100));\n --saltTreeNodeTrigger-iconOffsetY: calc((var(--salt-text-lineHeight) - var(--saltTreeNodeTrigger-iconSize)) / 2);\n --saltTreeNodeTrigger-checkboxOffsetY: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2);\n padding-left: calc(var(--salt-spacing-100) + (var(--saltTreeNodeTrigger-indentStep) * (var(--saltTreeNode-level, 1) - 1)));\n background: var(--salt-selectable-background);\n color: var(--salt-content-primary-foreground);\n}\n\n/* Account for selectable and icon token size differences */\n.saltTree-multiselect .saltTreeNodeTrigger {\n --saltTreeNodeTrigger-indentStep: calc(((var(--saltTreeNodeTrigger-iconSize) + var(--salt-size-selectable)) / 2) + var(--salt-spacing-100));\n}\n\n.saltTreeNodeTrigger:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltTreeNode:focus-visible > .saltTreeNodeTrigger,\n.saltTreeNode-focusVisible > .saltTreeNodeTrigger {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltTreeNode-selected > .saltTreeNodeTrigger {\n background: var(--salt-selectable-background-selected);\n box-shadow:\n 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected),\n 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);\n position: relative;\n z-index: var(--salt-zIndex-default);\n}\n\n.saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,\n.saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {\n background: var(--salt-selectable-background-selected);\n}\n\n.saltTreeNode-disabled > .saltTreeNodeTrigger,\n.saltTreeNode-disabled:hover > .saltTreeNodeTrigger {\n opacity: 0.4;\n cursor: var(--salt-cursor-disabled);\n\n background: var(--salt-selectable-background);\n color: var(--salt-content-primary-foreground);\n}\n\n.saltTreeNodeTrigger > .saltTreeNode-checkbox {\n margin-top: var(--saltTreeNodeTrigger-checkboxOffsetY);\n margin-bottom: 0;\n}\n\n.saltTreeNodeTrigger > .saltTreeNodeExpansionIcon,\n.saltTreeNodeTrigger > .saltTreeNode-icon {\n margin-top: var(--saltTreeNodeTrigger-iconOffsetY);\n}\n\n.saltTreeNodeTrigger > .saltIcon {\n margin-top: var(--saltTreeNodeTrigger-iconOffsetY);\n flex-shrink: 0;\n color: var(--salt-content-primary-foreground);\n}\n";
2
-
3
- export { css_248z as default };
4
- //# sourceMappingURL=TreeNodeTrigger.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodeTrigger.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,151 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { makePrefixer, useForkRef, CheckboxIcon } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { clsx } from 'clsx';
6
- import { forwardRef, useRef, useState, useEffect } from 'react';
7
- import { useTreeNodeContext, useTreeContext } from './TreeContext.js';
8
- import { TreeNodeExpansionIcon } from './TreeNodeExpansionIcon.js';
9
- import css_248z from './TreeNodeTrigger.css.js';
10
-
11
- const withBaseName = makePrefixer("saltTreeNodeTrigger");
12
- const withNodeBaseName = makePrefixer("saltTreeNode");
13
- const TreeNodeTrigger = forwardRef(function TreeNodeTrigger2(props, ref) {
14
- const {
15
- className,
16
- children,
17
- style,
18
- onClick,
19
- onFocus,
20
- onBlur,
21
- onMouseDown,
22
- onKeyDown,
23
- ...rest
24
- } = props;
25
- const targetWindow = useWindow();
26
- useComponentCssInjection({
27
- testId: "salt-tree-node-trigger",
28
- css: css_248z,
29
- window: targetWindow
30
- });
31
- const nodeContext = useTreeNodeContext();
32
- if (!nodeContext) {
33
- throw new Error("TreeNodeTrigger must be used within a TreeNode");
34
- }
35
- const {
36
- value,
37
- level,
38
- hasChildren,
39
- expanded,
40
- disabled,
41
- id,
42
- nodeRef,
43
- setNodeRef,
44
- selected,
45
- indeterminate,
46
- nodeChildren
47
- } = nodeContext;
48
- const {
49
- multiselect,
50
- activeNode,
51
- setActiveNode,
52
- select,
53
- tabbableNodeId,
54
- registerElement
55
- } = useTreeContext();
56
- const triggerContentRef = useForkRef(useRef(null), ref);
57
- const wasMouseDownRef = useRef(false);
58
- const [focusVisible, setFocusVisible] = useState(false);
59
- const isActive = activeNode === value;
60
- const isTabbable = tabbableNodeId === value;
61
- useEffect(() => {
62
- if (nodeRef.current) {
63
- return registerElement(value, nodeRef.current);
64
- }
65
- }, [value, registerElement, nodeRef]);
66
- const handleClick = (event) => {
67
- onClick == null ? void 0 : onClick(event);
68
- if (disabled) return;
69
- const target = event.target;
70
- if (target.closest(".saltTreeNodeExpansionIcon")) return;
71
- const nestedTreeItem = target.closest('[role="treeitem"]');
72
- if (nestedTreeItem && nestedTreeItem !== nodeRef.current) {
73
- return;
74
- }
75
- setActiveNode(value);
76
- select(event, value);
77
- };
78
- const handleFocus = (event) => {
79
- if (event.target !== event.currentTarget) return;
80
- onFocus == null ? void 0 : onFocus(event);
81
- if (!wasMouseDownRef.current) {
82
- setFocusVisible(true);
83
- }
84
- wasMouseDownRef.current = false;
85
- setActiveNode(value);
86
- };
87
- const handleBlur = (event) => {
88
- if (event.target !== event.currentTarget) return;
89
- onBlur == null ? void 0 : onBlur(event);
90
- setFocusVisible(false);
91
- };
92
- const handleMouseDown = (event) => {
93
- wasMouseDownRef.current = true;
94
- onMouseDown == null ? void 0 : onMouseDown(event);
95
- };
96
- return /* @__PURE__ */ jsxs(
97
- "li",
98
- {
99
- ref: setNodeRef,
100
- id,
101
- role: "treeitem",
102
- "aria-expanded": hasChildren ? expanded : void 0,
103
- "aria-selected": multiselect ? void 0 : selected,
104
- "aria-checked": multiselect ? indeterminate ? "mixed" : selected : void 0,
105
- "aria-level": level,
106
- "aria-disabled": disabled || void 0,
107
- tabIndex: isTabbable ? 0 : -1,
108
- className: clsx(
109
- withNodeBaseName(),
110
- {
111
- [withNodeBaseName("expanded")]: expanded,
112
- [withNodeBaseName("selected")]: selected && !multiselect,
113
- [withNodeBaseName("active")]: isActive,
114
- [withNodeBaseName("disabled")]: disabled,
115
- [withNodeBaseName("hasChildren")]: hasChildren,
116
- [withNodeBaseName("focusVisible")]: focusVisible
117
- },
118
- className
119
- ),
120
- style: {
121
- "--saltTreeNode-level": level,
122
- ...style
123
- },
124
- onClick: handleClick,
125
- onFocus: handleFocus,
126
- onBlur: handleBlur,
127
- onMouseDown: handleMouseDown,
128
- onKeyDown,
129
- ...rest,
130
- children: [
131
- /* @__PURE__ */ jsxs("span", { ref: triggerContentRef, className: withBaseName(), children: [
132
- /* @__PURE__ */ jsx(TreeNodeExpansionIcon, {}),
133
- multiselect && /* @__PURE__ */ jsx(
134
- CheckboxIcon,
135
- {
136
- checked: selected,
137
- indeterminate,
138
- disabled,
139
- className: withNodeBaseName("checkbox")
140
- }
141
- ),
142
- children
143
- ] }),
144
- hasChildren && expanded && /* @__PURE__ */ jsx("ul", { role: "group", className: withNodeBaseName("group"), children: nodeChildren })
145
- ]
146
- }
147
- );
148
- });
149
-
150
- export { TreeNodeTrigger };
151
- //# sourceMappingURL=TreeNodeTrigger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodeTrigger.js","sources":["../src/tree/TreeNodeTrigger.tsx"],"sourcesContent":["import { CheckboxIcon, makePrefixer, useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FocusEvent,\n forwardRef,\n type MouseEvent,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useTreeContext, useTreeNodeContext } from \"./TreeContext\";\nimport { TreeNodeExpansionIcon } from \"./TreeNodeExpansionIcon\";\nimport treeNodeTriggerCss from \"./TreeNodeTrigger.css\";\n\nexport interface TreeNodeTriggerProps extends ComponentPropsWithoutRef<\"li\"> {}\n\nconst withBaseName = makePrefixer(\"saltTreeNodeTrigger\");\nconst withNodeBaseName = makePrefixer(\"saltTreeNode\");\n\n/**\n * The forwarded ref points to the inner trigger content span (for tooltip positioning),\n * while the <li> handles focus, ARIA, and event handling.\n */\nexport const TreeNodeTrigger = forwardRef<\n HTMLSpanElement,\n TreeNodeTriggerProps\n>(function TreeNodeTrigger(props, ref) {\n const {\n className,\n children,\n style,\n onClick,\n onFocus,\n onBlur,\n onMouseDown,\n onKeyDown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tree-node-trigger\",\n css: treeNodeTriggerCss,\n window: targetWindow,\n });\n\n const nodeContext = useTreeNodeContext();\n if (!nodeContext) {\n throw new Error(\"TreeNodeTrigger must be used within a TreeNode\");\n }\n\n const {\n value,\n level,\n hasChildren,\n expanded,\n disabled,\n id,\n nodeRef,\n setNodeRef,\n selected,\n indeterminate,\n nodeChildren,\n } = nodeContext;\n\n const {\n multiselect,\n activeNode,\n setActiveNode,\n select,\n tabbableNodeId,\n registerElement,\n } = useTreeContext();\n\n const triggerContentRef = useForkRef(useRef<HTMLSpanElement>(null), ref);\n const wasMouseDownRef = useRef(false);\n const [focusVisible, setFocusVisible] = useState(false);\n\n const isActive = activeNode === value;\n\n const isTabbable = tabbableNodeId === value;\n\n useEffect(() => {\n if (nodeRef.current) {\n return registerElement(value, nodeRef.current);\n }\n }, [value, registerElement, nodeRef]);\n\n const handleClick = (event: MouseEvent<HTMLLIElement>) => {\n onClick?.(event);\n if (disabled) return;\n const target = event.target as HTMLElement;\n if (target.closest(\".saltTreeNodeExpansionIcon\")) return;\n const nestedTreeItem = target.closest('[role=\"treeitem\"]');\n if (nestedTreeItem && nestedTreeItem !== nodeRef.current) {\n return;\n }\n setActiveNode(value);\n select(event, value);\n };\n\n const handleFocus = (event: FocusEvent<HTMLLIElement>) => {\n if (event.target !== event.currentTarget) return;\n onFocus?.(event);\n if (!wasMouseDownRef.current) {\n setFocusVisible(true);\n }\n wasMouseDownRef.current = false;\n setActiveNode(value);\n };\n\n const handleBlur = (event: FocusEvent<HTMLLIElement>) => {\n if (event.target !== event.currentTarget) return;\n onBlur?.(event);\n setFocusVisible(false);\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLLIElement>) => {\n wasMouseDownRef.current = true;\n onMouseDown?.(event);\n };\n\n return (\n <li\n ref={setNodeRef}\n id={id}\n role=\"treeitem\"\n aria-expanded={hasChildren ? expanded : undefined}\n aria-selected={multiselect ? undefined : selected}\n aria-checked={\n multiselect ? (indeterminate ? \"mixed\" : selected) : undefined\n }\n aria-level={level}\n aria-disabled={disabled || undefined}\n tabIndex={isTabbable ? 0 : -1}\n className={clsx(\n withNodeBaseName(),\n {\n [withNodeBaseName(\"expanded\")]: expanded,\n [withNodeBaseName(\"selected\")]: selected && !multiselect,\n [withNodeBaseName(\"active\")]: isActive,\n [withNodeBaseName(\"disabled\")]: disabled,\n [withNodeBaseName(\"hasChildren\")]: hasChildren,\n [withNodeBaseName(\"focusVisible\")]: focusVisible,\n },\n className,\n )}\n style={\n {\n \"--saltTreeNode-level\": level,\n ...style,\n } as CSSProperties\n }\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseDown={handleMouseDown}\n onKeyDown={onKeyDown}\n {...rest}\n >\n <span ref={triggerContentRef} className={withBaseName()}>\n <TreeNodeExpansionIcon />\n {multiselect && (\n <CheckboxIcon\n checked={selected}\n indeterminate={indeterminate}\n disabled={disabled}\n className={withNodeBaseName(\"checkbox\")}\n />\n )}\n {children}\n </span>\n\n {hasChildren && expanded && (\n <ul role=\"group\" className={withNodeBaseName(\"group\")}>\n {nodeChildren}\n </ul>\n )}\n </li>\n );\n});\n"],"names":["TreeNodeTrigger","treeNodeTriggerCss"],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import { Children, isValidElement, Fragment } from 'react';
2
-
3
- function isFragmentElement(child) {
4
- return isValidElement(child) && child.type === Fragment;
5
- }
6
- function isTreeNodeElement(child) {
7
- return isValidElement(child) && typeof child.props.value === "string";
8
- }
9
- function flattenTreeNodeChildren(children) {
10
- const flattenedChildren = [];
11
- Children.forEach(children, (child) => {
12
- if (isFragmentElement(child)) {
13
- flattenedChildren.push(...flattenTreeNodeChildren(child.props.children));
14
- } else if (child !== null && child !== void 0 && typeof child !== "boolean") {
15
- flattenedChildren.push(child);
16
- }
17
- });
18
- return flattenedChildren;
19
- }
20
- function getTreeNodeElements(children) {
21
- return flattenTreeNodeChildren(children).filter(isTreeNodeElement);
22
- }
23
- function buildTreeModel(children) {
24
- const nodes = /* @__PURE__ */ new Map();
25
- const rootValues = [];
26
- const childrenOf = /* @__PURE__ */ new Map();
27
- function traverse(reactChildren, parentValue, parentDisabled = false) {
28
- const treeNodeChildren = getTreeNodeElements(reactChildren);
29
- const siblingValues = [];
30
- for (const child of treeNodeChildren) {
31
- const value = child.props.value;
32
- const childTreeNodes = getTreeNodeElements(child.props.children);
33
- const hasChildren = childTreeNodes.length > 0;
34
- const disabled = parentDisabled || Boolean(child.props.disabled);
35
- nodes.set(value, {
36
- value,
37
- parentValue,
38
- hasChildren,
39
- disabled
40
- });
41
- siblingValues.push(value);
42
- if (hasChildren) {
43
- traverse(child.props.children, value, disabled);
44
- }
45
- }
46
- if (parentValue !== void 0) {
47
- childrenOf.set(parentValue, siblingValues);
48
- } else {
49
- rootValues.push(...siblingValues);
50
- }
51
- }
52
- traverse(children);
53
- return { nodes, rootValues, childrenOf };
54
- }
55
-
56
- export { buildTreeModel, flattenTreeNodeChildren, isTreeNodeElement };
57
- //# sourceMappingURL=treeModel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"treeModel.js","sources":["../src/tree/treeModel.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from \"react\";\n\nexport interface TreeNodeMeta {\n value: string;\n parentValue: string | undefined;\n hasChildren: boolean;\n disabled: boolean;\n}\n\nexport interface TreeModel {\n /** All nodes indexed by value */\n nodes: Map<string, TreeNodeMeta>;\n /** Ordered list of root node values */\n rootValues: string[];\n /** Maps parent value to ordered list of child values */\n childrenOf: Map<string, string[]>;\n}\n\ninterface TreeNodeElementProps {\n value: string;\n disabled?: boolean;\n children?: ReactNode;\n}\n\nfunction isFragmentElement(\n child: ReactNode,\n): child is ReactElement<{ children?: ReactNode }> {\n return (\n isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment\n );\n}\n\nexport function isTreeNodeElement(\n child: ReactNode,\n): child is ReactElement<TreeNodeElementProps> {\n return (\n isValidElement<TreeNodeElementProps>(child) &&\n typeof child.props.value === \"string\"\n );\n}\n\nexport function flattenTreeNodeChildren(children: ReactNode): ReactNode[] {\n const flattenedChildren: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (isFragmentElement(child)) {\n flattenedChildren.push(...flattenTreeNodeChildren(child.props.children));\n } else if (\n child !== null &&\n child !== undefined &&\n typeof child !== \"boolean\"\n ) {\n flattenedChildren.push(child);\n }\n });\n\n return flattenedChildren;\n}\n\nfunction getTreeNodeElements(\n children: ReactNode,\n): ReactElement<TreeNodeElementProps>[] {\n return flattenTreeNodeChildren(children).filter(isTreeNodeElement);\n}\n\nexport function buildTreeModel(children: ReactNode): TreeModel {\n const nodes = new Map<string, TreeNodeMeta>();\n const rootValues: string[] = [];\n const childrenOf = new Map<string, string[]>();\n\n function traverse(\n reactChildren: ReactNode,\n parentValue?: string,\n parentDisabled = false,\n ): void {\n const treeNodeChildren = getTreeNodeElements(reactChildren);\n const siblingValues: string[] = [];\n\n for (const child of treeNodeChildren) {\n const value = child.props.value;\n const childTreeNodes = getTreeNodeElements(child.props.children);\n const hasChildren = childTreeNodes.length > 0;\n const disabled = parentDisabled || Boolean(child.props.disabled);\n\n nodes.set(value, {\n value,\n parentValue,\n hasChildren,\n disabled,\n });\n\n siblingValues.push(value);\n\n if (hasChildren) {\n traverse(child.props.children, value, disabled);\n }\n }\n\n if (parentValue !== undefined) {\n childrenOf.set(parentValue, siblingValues);\n } else {\n rootValues.push(...siblingValues);\n }\n }\n\n traverse(children);\n\n return { nodes, rootValues, childrenOf };\n}\n"],"names":[],"mappings":";;AA8BA,SAAS,kBACP,KAAA,EACiD;AACjD,EAAA,OACE,cAAA,CAAyC,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,KAAS,QAAA;AAEtE;AAEO,SAAS,kBACd,KAAA,EAC6C;AAC7C,EAAA,OACE,eAAqC,KAAK,CAAA,IAC1C,OAAO,KAAA,CAAM,MAAM,KAAA,KAAU,QAAA;AAEjC;AAEO,SAAS,wBAAwB,QAAA,EAAkC;AACxE,EAAA,MAAM,oBAAiC,EAAC;AAExC,EAAA,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAA,KAAU;AACpC,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,iBAAA,CAAkB,KAAK,GAAG,uBAAA,CAAwB,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,IACzE,WACE,KAAA,KAAU,IAAA,IACV,UAAU,MAAA,IACV,OAAO,UAAU,SAAA,EACjB;AACA,MAAA,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,iBAAA;AACT;AAEA,SAAS,oBACP,QAAA,EACsC;AACtC,EAAA,OAAO,uBAAA,CAAwB,QAAQ,CAAA,CAAE,MAAA,CAAO,iBAAiB,CAAA;AACnE;AAEO,SAAS,eAAe,QAAA,EAAgC;AAC7D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA0B;AAC5C,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAsB;AAE7C,EAAA,SAAS,QAAA,CACP,aAAA,EACA,WAAA,EACA,cAAA,GAAiB,KAAA,EACX;AACN,IAAA,MAAM,gBAAA,GAAmB,oBAAoB,aAAa,CAAA;AAC1D,IAAA,MAAM,gBAA0B,EAAC;AAEjC,IAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,KAAA;AAC1B,MAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAC/D,MAAA,MAAM,WAAA,GAAc,eAAe,MAAA,GAAS,CAAA;AAC5C,MAAA,MAAM,QAAA,GAAW,cAAA,IAAkB,OAAA,CAAQ,KAAA,CAAM,MAAM,QAAQ,CAAA;AAE/D,MAAA,KAAA,CAAM,IAAI,KAAA,EAAO;AAAA,QACf,KAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAExB,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO,QAAQ,CAAA;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,UAAA,CAAW,GAAA,CAAI,aAAa,aAAa,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,QAAA,CAAS,QAAQ,CAAA;AAEjB,EAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAW;AACzC;;;;"}