@cloud-ru/ds-tree 1.0.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 (231) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +341 -0
  4. package/dist/cjs/components/Tree/Tree.d.ts +4 -0
  5. package/dist/cjs/components/Tree/Tree.js +31 -0
  6. package/dist/cjs/components/Tree/index.d.ts +1 -0
  7. package/dist/cjs/components/Tree/index.js +17 -0
  8. package/dist/cjs/components/Tree/styles.module.css +17 -0
  9. package/dist/cjs/components/Tree/utils.d.ts +4 -0
  10. package/dist/cjs/components/Tree/utils.js +15 -0
  11. package/dist/cjs/components/index.d.ts +1 -0
  12. package/dist/cjs/components/index.js +17 -0
  13. package/dist/cjs/constants.d.ts +26 -0
  14. package/dist/cjs/constants.js +29 -0
  15. package/dist/cjs/contexts/TreeContext.d.ts +30 -0
  16. package/dist/cjs/contexts/TreeContext.js +108 -0
  17. package/dist/cjs/helperComponents/ExpandableTreeNode/ExpandableTreeNode.d.ts +11 -0
  18. package/dist/cjs/helperComponents/ExpandableTreeNode/ExpandableTreeNode.js +87 -0
  19. package/dist/cjs/helperComponents/ExpandableTreeNode/index.d.ts +1 -0
  20. package/dist/cjs/helperComponents/ExpandableTreeNode/index.js +17 -0
  21. package/dist/cjs/helperComponents/ExpandableTreeNode/styles.module.css +37 -0
  22. package/dist/cjs/helperComponents/TreeItem/TreeItem.d.ts +8 -0
  23. package/dist/cjs/helperComponents/TreeItem/TreeItem.js +16 -0
  24. package/dist/cjs/helperComponents/TreeItem/index.d.ts +1 -0
  25. package/dist/cjs/helperComponents/TreeItem/index.js +17 -0
  26. package/dist/cjs/helperComponents/TreeLine/TreeLine.d.ts +10 -0
  27. package/dist/cjs/helperComponents/TreeLine/TreeLine.js +13 -0
  28. package/dist/cjs/helperComponents/TreeLine/index.d.ts +1 -0
  29. package/dist/cjs/helperComponents/TreeLine/index.js +17 -0
  30. package/dist/cjs/helperComponents/TreeLine/styles.module.css +37 -0
  31. package/dist/cjs/helperComponents/TreeNode/TreeNode.d.ts +4 -0
  32. package/dist/cjs/helperComponents/TreeNode/TreeNode.js +187 -0
  33. package/dist/cjs/helperComponents/TreeNode/components/TreeNodeActions.d.ts +15 -0
  34. package/dist/cjs/helperComponents/TreeNode/components/TreeNodeActions.js +76 -0
  35. package/dist/cjs/helperComponents/TreeNode/components/TreeNodeHref.d.ts +7 -0
  36. package/dist/cjs/helperComponents/TreeNode/components/TreeNodeHref.js +12 -0
  37. package/dist/cjs/helperComponents/TreeNode/components/index.d.ts +2 -0
  38. package/dist/cjs/helperComponents/TreeNode/components/index.js +18 -0
  39. package/dist/cjs/helperComponents/TreeNode/constants.d.ts +5 -0
  40. package/dist/cjs/helperComponents/TreeNode/constants.js +10 -0
  41. package/dist/cjs/helperComponents/TreeNode/index.d.ts +1 -0
  42. package/dist/cjs/helperComponents/TreeNode/index.js +17 -0
  43. package/dist/cjs/helperComponents/TreeNode/styles.module.css +474 -0
  44. package/dist/cjs/helperComponents/TreeNode/types.d.ts +9 -0
  45. package/dist/cjs/helperComponents/TreeNode/types.js +2 -0
  46. package/dist/cjs/helperComponents/TreeNode/utils.d.ts +3 -0
  47. package/dist/cjs/helperComponents/TreeNode/utils.js +10 -0
  48. package/dist/cjs/helperComponents/index.d.ts +4 -0
  49. package/dist/cjs/helperComponents/index.js +20 -0
  50. package/dist/cjs/helpers/checkNestedNodesSelection.d.ts +9 -0
  51. package/dist/cjs/helpers/checkNestedNodesSelection.js +15 -0
  52. package/dist/cjs/helpers/collectEmptyNestedNodesInExpanded.d.ts +9 -0
  53. package/dist/cjs/helpers/collectEmptyNestedNodesInExpanded.js +21 -0
  54. package/dist/cjs/helpers/collectHierarchicalAncestors.d.ts +3 -0
  55. package/dist/cjs/helpers/collectHierarchicalAncestors.js +18 -0
  56. package/dist/cjs/helpers/collectIds.d.ts +9 -0
  57. package/dist/cjs/helpers/collectIds.js +16 -0
  58. package/dist/cjs/helpers/extractTreeNodeTitle.d.ts +6 -0
  59. package/dist/cjs/helpers/extractTreeNodeTitle.js +9 -0
  60. package/dist/cjs/helpers/findAllChildNodeIds.d.ts +9 -0
  61. package/dist/cjs/helpers/findAllChildNodeIds.js +24 -0
  62. package/dist/cjs/helpers/findAllExpandedChildNodeIds.d.ts +8 -0
  63. package/dist/cjs/helpers/findAllExpandedChildNodeIds.js +21 -0
  64. package/dist/cjs/helpers/getSearchedTreeItems.d.ts +23 -0
  65. package/dist/cjs/helpers/getSearchedTreeItems.js +41 -0
  66. package/dist/cjs/helpers/getSearchedTreeNodeById.d.ts +19 -0
  67. package/dist/cjs/helpers/getSearchedTreeNodeById.js +35 -0
  68. package/dist/cjs/helpers/index.d.ts +13 -0
  69. package/dist/cjs/helpers/index.js +29 -0
  70. package/dist/cjs/helpers/lookupTreeForSelectedNodes.d.ts +15 -0
  71. package/dist/cjs/helpers/lookupTreeForSelectedNodes.js +21 -0
  72. package/dist/cjs/helpers/sortTreeItemsByTitle.d.ts +13 -0
  73. package/dist/cjs/helpers/sortTreeItemsByTitle.js +14 -0
  74. package/dist/cjs/helpers/traverse.d.ts +11 -0
  75. package/dist/cjs/helpers/traverse.js +25 -0
  76. package/dist/cjs/helpers/traverseWithTarget.d.ts +14 -0
  77. package/dist/cjs/helpers/traverseWithTarget.js +30 -0
  78. package/dist/cjs/helpers/updateTreeNode.d.ts +13 -0
  79. package/dist/cjs/helpers/updateTreeNode.js +34 -0
  80. package/dist/cjs/hooks/index.d.ts +2 -0
  81. package/dist/cjs/hooks/index.js +18 -0
  82. package/dist/cjs/hooks/internalHooks.d.ts +4 -0
  83. package/dist/cjs/hooks/internalHooks.js +29 -0
  84. package/dist/cjs/hooks/useSearchableTree.d.ts +52 -0
  85. package/dist/cjs/hooks/useSearchableTree.js +113 -0
  86. package/dist/cjs/hooks/useTreeMultiSelection.d.ts +33 -0
  87. package/dist/cjs/hooks/useTreeMultiSelection.js +37 -0
  88. package/dist/cjs/index.d.ts +17 -0
  89. package/dist/cjs/index.js +47 -0
  90. package/dist/cjs/package.json +3 -0
  91. package/dist/cjs/style.css +565 -0
  92. package/dist/cjs/types.d.ts +151 -0
  93. package/dist/cjs/types.js +2 -0
  94. package/dist/esm/components/Tree/Tree.d.ts +4 -0
  95. package/dist/esm/components/Tree/Tree.js +25 -0
  96. package/dist/esm/components/Tree/index.d.ts +1 -0
  97. package/dist/esm/components/Tree/index.js +1 -0
  98. package/dist/esm/components/Tree/styles.module.css +17 -0
  99. package/dist/esm/components/Tree/utils.d.ts +4 -0
  100. package/dist/esm/components/Tree/utils.js +12 -0
  101. package/dist/esm/components/index.d.ts +1 -0
  102. package/dist/esm/components/index.js +1 -0
  103. package/dist/esm/constants.d.ts +26 -0
  104. package/dist/esm/constants.js +26 -0
  105. package/dist/esm/contexts/TreeContext.d.ts +30 -0
  106. package/dist/esm/contexts/TreeContext.js +103 -0
  107. package/dist/esm/helperComponents/ExpandableTreeNode/ExpandableTreeNode.d.ts +11 -0
  108. package/dist/esm/helperComponents/ExpandableTreeNode/ExpandableTreeNode.js +81 -0
  109. package/dist/esm/helperComponents/ExpandableTreeNode/index.d.ts +1 -0
  110. package/dist/esm/helperComponents/ExpandableTreeNode/index.js +1 -0
  111. package/dist/esm/helperComponents/ExpandableTreeNode/styles.module.css +37 -0
  112. package/dist/esm/helperComponents/TreeItem/TreeItem.d.ts +8 -0
  113. package/dist/esm/helperComponents/TreeItem/TreeItem.js +13 -0
  114. package/dist/esm/helperComponents/TreeItem/index.d.ts +1 -0
  115. package/dist/esm/helperComponents/TreeItem/index.js +1 -0
  116. package/dist/esm/helperComponents/TreeLine/TreeLine.d.ts +10 -0
  117. package/dist/esm/helperComponents/TreeLine/TreeLine.js +7 -0
  118. package/dist/esm/helperComponents/TreeLine/index.d.ts +1 -0
  119. package/dist/esm/helperComponents/TreeLine/index.js +1 -0
  120. package/dist/esm/helperComponents/TreeLine/styles.module.css +37 -0
  121. package/dist/esm/helperComponents/TreeNode/TreeNode.d.ts +4 -0
  122. package/dist/esm/helperComponents/TreeNode/TreeNode.js +181 -0
  123. package/dist/esm/helperComponents/TreeNode/components/TreeNodeActions.d.ts +15 -0
  124. package/dist/esm/helperComponents/TreeNode/components/TreeNodeActions.js +70 -0
  125. package/dist/esm/helperComponents/TreeNode/components/TreeNodeHref.d.ts +7 -0
  126. package/dist/esm/helperComponents/TreeNode/components/TreeNodeHref.js +6 -0
  127. package/dist/esm/helperComponents/TreeNode/components/index.d.ts +2 -0
  128. package/dist/esm/helperComponents/TreeNode/components/index.js +2 -0
  129. package/dist/esm/helperComponents/TreeNode/constants.d.ts +5 -0
  130. package/dist/esm/helperComponents/TreeNode/constants.js +7 -0
  131. package/dist/esm/helperComponents/TreeNode/index.d.ts +1 -0
  132. package/dist/esm/helperComponents/TreeNode/index.js +1 -0
  133. package/dist/esm/helperComponents/TreeNode/styles.module.css +474 -0
  134. package/dist/esm/helperComponents/TreeNode/types.d.ts +9 -0
  135. package/dist/esm/helperComponents/TreeNode/types.js +1 -0
  136. package/dist/esm/helperComponents/TreeNode/utils.d.ts +3 -0
  137. package/dist/esm/helperComponents/TreeNode/utils.js +6 -0
  138. package/dist/esm/helperComponents/index.d.ts +4 -0
  139. package/dist/esm/helperComponents/index.js +4 -0
  140. package/dist/esm/helpers/checkNestedNodesSelection.d.ts +9 -0
  141. package/dist/esm/helpers/checkNestedNodesSelection.js +12 -0
  142. package/dist/esm/helpers/collectEmptyNestedNodesInExpanded.d.ts +9 -0
  143. package/dist/esm/helpers/collectEmptyNestedNodesInExpanded.js +18 -0
  144. package/dist/esm/helpers/collectHierarchicalAncestors.d.ts +3 -0
  145. package/dist/esm/helpers/collectHierarchicalAncestors.js +15 -0
  146. package/dist/esm/helpers/collectIds.d.ts +9 -0
  147. package/dist/esm/helpers/collectIds.js +13 -0
  148. package/dist/esm/helpers/extractTreeNodeTitle.d.ts +6 -0
  149. package/dist/esm/helpers/extractTreeNodeTitle.js +5 -0
  150. package/dist/esm/helpers/findAllChildNodeIds.d.ts +9 -0
  151. package/dist/esm/helpers/findAllChildNodeIds.js +21 -0
  152. package/dist/esm/helpers/findAllExpandedChildNodeIds.d.ts +8 -0
  153. package/dist/esm/helpers/findAllExpandedChildNodeIds.js +18 -0
  154. package/dist/esm/helpers/getSearchedTreeItems.d.ts +23 -0
  155. package/dist/esm/helpers/getSearchedTreeItems.js +37 -0
  156. package/dist/esm/helpers/getSearchedTreeNodeById.d.ts +19 -0
  157. package/dist/esm/helpers/getSearchedTreeNodeById.js +31 -0
  158. package/dist/esm/helpers/index.d.ts +13 -0
  159. package/dist/esm/helpers/index.js +13 -0
  160. package/dist/esm/helpers/lookupTreeForSelectedNodes.d.ts +15 -0
  161. package/dist/esm/helpers/lookupTreeForSelectedNodes.js +18 -0
  162. package/dist/esm/helpers/sortTreeItemsByTitle.d.ts +13 -0
  163. package/dist/esm/helpers/sortTreeItemsByTitle.js +10 -0
  164. package/dist/esm/helpers/traverse.d.ts +11 -0
  165. package/dist/esm/helpers/traverse.js +21 -0
  166. package/dist/esm/helpers/traverseWithTarget.d.ts +14 -0
  167. package/dist/esm/helpers/traverseWithTarget.js +26 -0
  168. package/dist/esm/helpers/updateTreeNode.d.ts +13 -0
  169. package/dist/esm/helpers/updateTreeNode.js +30 -0
  170. package/dist/esm/hooks/index.d.ts +2 -0
  171. package/dist/esm/hooks/index.js +2 -0
  172. package/dist/esm/hooks/internalHooks.d.ts +4 -0
  173. package/dist/esm/hooks/internalHooks.js +24 -0
  174. package/dist/esm/hooks/useSearchableTree.d.ts +52 -0
  175. package/dist/esm/hooks/useSearchableTree.js +110 -0
  176. package/dist/esm/hooks/useTreeMultiSelection.d.ts +33 -0
  177. package/dist/esm/hooks/useTreeMultiSelection.js +34 -0
  178. package/dist/esm/index.d.ts +17 -0
  179. package/dist/esm/index.js +17 -0
  180. package/dist/esm/style.css +565 -0
  181. package/dist/esm/types.d.ts +151 -0
  182. package/dist/esm/types.js +1 -0
  183. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  184. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  185. package/package.json +51 -0
  186. package/src/components/Tree/Tree.tsx +53 -0
  187. package/src/components/Tree/index.ts +1 -0
  188. package/src/components/Tree/styles.module.scss +22 -0
  189. package/src/components/Tree/utils.ts +16 -0
  190. package/src/components/index.ts +1 -0
  191. package/src/constants.ts +29 -0
  192. package/src/contexts/TreeContext.tsx +189 -0
  193. package/src/helperComponents/ExpandableTreeNode/ExpandableTreeNode.tsx +156 -0
  194. package/src/helperComponents/ExpandableTreeNode/index.ts +1 -0
  195. package/src/helperComponents/ExpandableTreeNode/styles.module.scss +55 -0
  196. package/src/helperComponents/TreeItem/TreeItem.tsx +26 -0
  197. package/src/helperComponents/TreeItem/index.ts +1 -0
  198. package/src/helperComponents/TreeLine/TreeLine.tsx +27 -0
  199. package/src/helperComponents/TreeLine/index.ts +1 -0
  200. package/src/helperComponents/TreeLine/styles.module.scss +58 -0
  201. package/src/helperComponents/TreeNode/TreeNode.tsx +389 -0
  202. package/src/helperComponents/TreeNode/components/TreeNodeActions.tsx +129 -0
  203. package/src/helperComponents/TreeNode/components/TreeNodeHref.tsx +29 -0
  204. package/src/helperComponents/TreeNode/components/index.ts +2 -0
  205. package/src/helperComponents/TreeNode/constants.ts +7 -0
  206. package/src/helperComponents/TreeNode/index.ts +1 -0
  207. package/src/helperComponents/TreeNode/styles.module.scss +300 -0
  208. package/src/helperComponents/TreeNode/types.ts +11 -0
  209. package/src/helperComponents/TreeNode/utils.ts +9 -0
  210. package/src/helperComponents/index.ts +4 -0
  211. package/src/helpers/checkNestedNodesSelection.ts +15 -0
  212. package/src/helpers/collectEmptyNestedNodesInExpanded.ts +23 -0
  213. package/src/helpers/collectHierarchicalAncestors.ts +22 -0
  214. package/src/helpers/collectIds.ts +17 -0
  215. package/src/helpers/extractTreeNodeTitle.ts +8 -0
  216. package/src/helpers/findAllChildNodeIds.ts +27 -0
  217. package/src/helpers/findAllExpandedChildNodeIds.ts +24 -0
  218. package/src/helpers/getSearchedTreeItems.ts +63 -0
  219. package/src/helpers/getSearchedTreeNodeById.ts +54 -0
  220. package/src/helpers/index.ts +13 -0
  221. package/src/helpers/lookupTreeForSelectedNodes.ts +33 -0
  222. package/src/helpers/sortTreeItemsByTitle.ts +26 -0
  223. package/src/helpers/traverse.ts +28 -0
  224. package/src/helpers/traverseWithTarget.ts +41 -0
  225. package/src/helpers/updateTreeNode.ts +46 -0
  226. package/src/hooks/index.ts +2 -0
  227. package/src/hooks/internalHooks.ts +30 -0
  228. package/src/hooks/useSearchableTree.ts +190 -0
  229. package/src/hooks/useTreeMultiSelection.ts +67 -0
  230. package/src/index.ts +17 -0
  231. package/src/types.ts +162 -0
@@ -0,0 +1,34 @@
1
+ import { applySelectionDiff, useValueControl } from '@cloud-ru/ds-utils';
2
+ import { useCallback } from 'react';
3
+ /**
4
+ * Хук мультивыбора для дерева.
5
+ *
6
+ * Выполняет пересчет выбранных id после клика по узлу, поддерживает
7
+ * controlled/uncontrolled режим (`selected` + `onChangeSelected`) и при необходимости
8
+ * подгружает детей узла перед вычислением итогового выбора.
9
+ *
10
+ * @param params Параметры управления выбором и подгрузкой данных.
11
+ * @returns Текущий список выбранных id и обработчик выбора узла.
12
+ */
13
+ export function useTreeMultiSelection({ onDataLoad, onSelect: onSelectProp, selected, onChangeSelected, }) {
14
+ const [selectedIds = [], setSelectedIds] = useValueControl({
15
+ value: selected,
16
+ defaultValue: [],
17
+ onChange: onChangeSelected,
18
+ });
19
+ const onSelect = useCallback(async (selectedKeys, node) => {
20
+ const isSelected = selectedKeys.includes(node.id);
21
+ const clonedNode = { ...node };
22
+ if (node.nested && !node.nested.length) {
23
+ const { preloadedChildren } = await onDataLoad(node);
24
+ clonedNode.nested = preloadedChildren;
25
+ }
26
+ const { added, removed } = onSelectProp({ selectedKeys, node: clonedNode, isSelected });
27
+ const updatedSelectedIds = applySelectionDiff(selectedIds, added, removed);
28
+ setSelectedIds(updatedSelectedIds);
29
+ }, [onDataLoad, onSelectProp, selectedIds, setSelectedIds]);
30
+ return {
31
+ selected: selectedIds,
32
+ onSelect,
33
+ };
34
+ }
@@ -0,0 +1,17 @@
1
+ export * from './components/index.js';
2
+ export * from './constants.js';
3
+ export { checkNestedNodesSelection } from './helpers/checkNestedNodesSelection.js';
4
+ export { collectEmptyNestedNodesInExpanded } from './helpers/collectEmptyNestedNodesInExpanded.js';
5
+ export { collectIds } from './helpers/collectIds.js';
6
+ export { extractTreeNodeTitle } from './helpers/extractTreeNodeTitle.js';
7
+ export { findAllChildNodeIds } from './helpers/findAllChildNodeIds.js';
8
+ export { findAllExpandedChildNodeIds } from './helpers/findAllExpandedChildNodeIds.js';
9
+ export { getSearchedTreeItems } from './helpers/getSearchedTreeItems.js';
10
+ export { getSearchedTreeNodeById } from './helpers/getSearchedTreeNodeById.js';
11
+ export { lookupTreeForSelectedNodes } from './helpers/lookupTreeForSelectedNodes.js';
12
+ export { sortTreeItemsByTitle } from './helpers/sortTreeItemsByTitle.js';
13
+ export { traverse } from './helpers/traverse.js';
14
+ export { traverseWithTarget } from './helpers/traverseWithTarget.js';
15
+ export { updateTreeNode } from './helpers/updateTreeNode.js';
16
+ export * from './hooks/index.js';
17
+ export * from './types.js';
@@ -0,0 +1,17 @@
1
+ export * from './components/index.js';
2
+ export * from './constants.js';
3
+ export { checkNestedNodesSelection } from './helpers/checkNestedNodesSelection.js';
4
+ export { collectEmptyNestedNodesInExpanded } from './helpers/collectEmptyNestedNodesInExpanded.js';
5
+ export { collectIds } from './helpers/collectIds.js';
6
+ export { extractTreeNodeTitle } from './helpers/extractTreeNodeTitle.js';
7
+ export { findAllChildNodeIds } from './helpers/findAllChildNodeIds.js';
8
+ export { findAllExpandedChildNodeIds } from './helpers/findAllExpandedChildNodeIds.js';
9
+ export { getSearchedTreeItems } from './helpers/getSearchedTreeItems.js';
10
+ export { getSearchedTreeNodeById } from './helpers/getSearchedTreeNodeById.js';
11
+ export { lookupTreeForSelectedNodes } from './helpers/lookupTreeForSelectedNodes.js';
12
+ export { sortTreeItemsByTitle } from './helpers/sortTreeItemsByTitle.js';
13
+ export { traverse } from './helpers/traverse.js';
14
+ export { traverseWithTarget } from './helpers/traverseWithTarget.js';
15
+ export { updateTreeNode } from './helpers/updateTreeNode.js';
16
+ export * from './hooks/index.js';
17
+ export * from './types.js';
@@ -0,0 +1,565 @@
1
+ .tree{
2
+ box-sizing:border-box;
3
+ min-width:0;
4
+ height:100%;
5
+ }
6
+ .tree[data-size=s]{
7
+ --tree-line-width:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
8
+ --tree-item-gap:var(--sn-tree-anatomy-size-s-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
9
+ }
10
+ .tree[data-size=m]{
11
+ --tree-line-width:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
12
+ --tree-item-gap:var(--sn-tree-anatomy-size-m-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
13
+ }
14
+ .tree[data-size=l]{
15
+ --tree-line-width:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
16
+ --tree-item-gap:var(--sn-tree-anatomy-size-l-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
17
+ }
18
+ .expandableTreeNode{
19
+ position:relative;
20
+ width:100%;
21
+ }
22
+
23
+ .expandableContent{
24
+ overflow:visible hidden;
25
+ display:flex;
26
+ gap:var(--tree-item-gap);
27
+ box-sizing:border-box;
28
+ min-width:0;
29
+ min-height:0;
30
+ visibility:hidden;
31
+ transition:visibility 200ms;
32
+ }
33
+
34
+ .expandableWrap{
35
+ overflow:visible hidden;
36
+ display:grid;
37
+ grid-template-rows:0fr;
38
+ box-sizing:border-box;
39
+ width:100%;
40
+ transition:grid-template-rows 200ms;
41
+ }
42
+ .expandableWrap[data-expanded=true]{
43
+ overflow:unset;
44
+ grid-template-rows:1fr;
45
+ }
46
+ .expandableWrap[data-expanded=true] .expandableContent{
47
+ overflow:unset;
48
+ visibility:visible;
49
+ }
50
+
51
+ .expandableNested{
52
+ width:100%;
53
+ min-width:0;
54
+ }
55
+ .treeLine{
56
+ pointer-events:none;
57
+ position:relative;
58
+ flex-shrink:0;
59
+ width:var(--tree-line-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
60
+ visibility:hidden;
61
+ }
62
+ .treeLine[data-visible]{
63
+ visibility:visible;
64
+ }
65
+ .treeLine[data-visible]::after{
66
+ content:"";
67
+ position:absolute;
68
+ top:0;
69
+ left:50%;
70
+ transform:translateX(-50%);
71
+ width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
72
+ height:100%;
73
+ background:var(--sn-theme-color-available-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
74
+ }
75
+ .treeLine[data-horizontal]{
76
+ box-sizing:border-box;
77
+ }
78
+ .treeLine[data-horizontal]::after{
79
+ top:50%;
80
+ left:calc(-50% - var(--tree-item-gap, 0px));
81
+ transform:translateY(-50%);
82
+ width:calc(150% + var(--tree-item-gap, 0px));
83
+ height:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
84
+ }
85
+ .treeLine[data-horizontal][data-half-width]{
86
+ width:0;
87
+ }
88
+ .treeLine[data-horizontal][data-half-width]::after{
89
+ left:calc(0px - var(--tree-line-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px))) / 2 - var(--tree-item-gap, 0px));
90
+ width:calc(var(--tree-line-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px))) / 2 + var(--tree-item-gap, 0px));
91
+ }
92
+ @charset "UTF-8";
93
+ .treeNode{
94
+ display:flex;
95
+ align-items:center;
96
+ box-sizing:border-box;
97
+ width:100%;
98
+ }
99
+
100
+ .treeNodeIcon{
101
+ display:flex;
102
+ flex-shrink:0;
103
+ align-items:center;
104
+ justify-content:center;
105
+ box-sizing:border-box;
106
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
107
+ }
108
+
109
+ .treeNodeTitle{
110
+ overflow:hidden;
111
+ display:flex;
112
+ flex-grow:1;
113
+ align-items:center;
114
+ box-sizing:border-box;
115
+ min-width:0;
116
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
117
+ }
118
+
119
+ .treeNodeActions{
120
+ position:absolute;
121
+ inset:0 0 0 auto;
122
+ display:flex;
123
+ visibility:hidden;
124
+ }
125
+ .treeNodeActions > button{
126
+ align-self:stretch;
127
+ height:auto;
128
+ }
129
+ .treeNodeActions:focus-visible, .treeNodeActions[data-focused]{
130
+ visibility:visible;
131
+ }
132
+
133
+ .treeNodeContent{
134
+ cursor:pointer;
135
+ position:relative;
136
+ display:flex;
137
+ align-items:center;
138
+ box-sizing:border-box;
139
+ width:100%;
140
+ min-width:0;
141
+ }
142
+ .treeNodeContent .stateLayer{
143
+ position:absolute;
144
+ inset:0;
145
+ border-radius:inherit;
146
+ }
147
+ .treeNodeContent .stateLayer[data-state=borderOnBackground]{
148
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
149
+ border-style:solid;
150
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
151
+ }
152
+ .treeNodeContent .stateLayer[data-state=emptyNeutralOnBackground]{
153
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
154
+ }
155
+ .treeNodeContent .stateLayer[data-state=activatedOnBackground]{
156
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
157
+ }
158
+ .treeNodeContent .stateLayer[data-state=versionOnColor]{
159
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
160
+ }
161
+ .treeNodeContent .stateLayer[data-state=emptyVersionOnColor]{
162
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
163
+ }
164
+ .treeNodeContent .stateLayer[data-state=inversionOnColor]{
165
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
166
+ }
167
+ .treeNodeContent .stateLayer[data-state=emptyInversionOnColor]{
168
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
169
+ }
170
+ .treeNodeContent .stateLayer[data-state=emptyDarkOnAccent]{
171
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
172
+ }
173
+ @media (hover: hover){
174
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
175
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
176
+ }
177
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
178
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
179
+ }
180
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
181
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
182
+ }
183
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
184
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
185
+ }
186
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
187
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
188
+ }
189
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
190
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
191
+ }
192
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
193
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
194
+ }
195
+ .treeNodeContent:hover:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
196
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
197
+ }
198
+ }
199
+ .treeNodeContent{
200
+ }
201
+ .treeNodeContent[data-loading] .stateLayer[data-state=borderOnBackground], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=borderOnBackground]{
202
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
203
+ }
204
+ .treeNodeContent[data-loading] .stateLayer[data-state=emptyNeutralOnBackground], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyNeutralOnBackground]{
205
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
206
+ }
207
+ .treeNodeContent[data-loading] .stateLayer[data-state=activatedOnBackground], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=activatedOnBackground]{
208
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
209
+ }
210
+ .treeNodeContent[data-loading] .stateLayer[data-state=versionOnColor], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=versionOnColor]{
211
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
212
+ }
213
+ .treeNodeContent[data-loading] .stateLayer[data-state=emptyVersionOnColor], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyVersionOnColor]{
214
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
215
+ }
216
+ .treeNodeContent[data-loading] .stateLayer[data-state=inversionOnColor], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=inversionOnColor]{
217
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
218
+ }
219
+ .treeNodeContent[data-loading] .stateLayer[data-state=emptyInversionOnColor], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyInversionOnColor]{
220
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
221
+ }
222
+ .treeNodeContent[data-loading] .stateLayer[data-state=emptyDarkOnAccent], .treeNodeContent:active:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent], .treeNodeContent[data-pressed=true]:not([data-disabled], [data-loading]) .stateLayer[data-state=emptyDarkOnAccent]{
223
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
224
+ }
225
+ .treeNodeContent:hover .treeNodeActions, .treeNodeContent[data-droplist-active] .treeNodeActions{
226
+ visibility:visible;
227
+ }
228
+ .treeNodeContent[data-droplist-active] .stateLayer[data-state=emptyNeutralOnBackground]{
229
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
230
+ }
231
+ .treeNodeContent[data-droplist-active] .stateLayer[data-state=activatedOnBackground]{
232
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
233
+ }
234
+ .treeNodeContent:focus-visible{
235
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
236
+ outline-offset:calc(-1 * var(--sn-primitive-strokeWeight-strokeSemiBold, 2px));
237
+ }
238
+ .treeNodeContent[aria-selected=true]:focus-visible{
239
+ outline-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
240
+ }
241
+ .treeNodeContent[data-multiselect]{
242
+ cursor:default;
243
+ }
244
+ .treeNodeContent[aria-disabled=true]{
245
+ cursor:not-allowed;
246
+ opacity:var(--sn-theme-effect-opacity-disabled, 0.4);
247
+ }
248
+
249
+ .stateLayer{
250
+ pointer-events:none;
251
+ position:absolute;
252
+ inset:0;
253
+ border-radius:inherit;
254
+ }
255
+
256
+ .treeNodeCheckboxWrap{
257
+ display:flex;
258
+ flex-shrink:0;
259
+ align-items:center;
260
+ justify-content:center;
261
+ box-sizing:border-box;
262
+ }
263
+
264
+ .treeNodeExpandButton{
265
+ cursor:pointer;
266
+ position:relative;
267
+ display:inline-flex;
268
+ flex-shrink:0;
269
+ align-items:center;
270
+ justify-content:center;
271
+ box-sizing:border-box;
272
+ padding:0;
273
+ border:0;
274
+ border-radius:var(--sn-brand-anatomy-radius-button-s, var(--sn-primitive-dimension-2, 2px));
275
+ color:var(--sn-theme-color-neutral-text, var(--sn-brand-color-neutral-45, var(--sn-primitive-color-gray-45, #81869c)));
276
+ background:transparent;
277
+ }
278
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer{
279
+ position:absolute;
280
+ inset:0;
281
+ border-radius:inherit;
282
+ }
283
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=borderOnBackground]{
284
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
285
+ border-style:solid;
286
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
287
+ }
288
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=emptyNeutralOnBackground]{
289
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
290
+ }
291
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=activatedOnBackground]{
292
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
293
+ }
294
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=versionOnColor]{
295
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
296
+ }
297
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=emptyVersionOnColor]{
298
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
299
+ }
300
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=inversionOnColor]{
301
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
302
+ }
303
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=emptyInversionOnColor]{
304
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
305
+ }
306
+ .treeNodeExpandButton .treeNodeExpandButtonStateLayer[data-state=emptyDarkOnAccent]{
307
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
308
+ }
309
+ @media (hover: hover){
310
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=borderOnBackground]{
311
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
312
+ }
313
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyNeutralOnBackground]{
314
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
315
+ }
316
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=activatedOnBackground]{
317
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
318
+ }
319
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=versionOnColor]{
320
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
321
+ }
322
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyVersionOnColor]{
323
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
324
+ }
325
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=inversionOnColor]{
326
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
327
+ }
328
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyInversionOnColor]{
329
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
330
+ }
331
+ .treeNodeExpandButton:hover:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyDarkOnAccent]{
332
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
333
+ }
334
+ }
335
+ .treeNodeExpandButton{
336
+ }
337
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=borderOnBackground], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=borderOnBackground], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=borderOnBackground]{
338
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
339
+ }
340
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=emptyNeutralOnBackground], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyNeutralOnBackground], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyNeutralOnBackground]{
341
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
342
+ }
343
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=activatedOnBackground], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=activatedOnBackground], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=activatedOnBackground]{
344
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
345
+ }
346
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=versionOnColor], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=versionOnColor], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=versionOnColor]{
347
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
348
+ }
349
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=emptyVersionOnColor], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyVersionOnColor], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyVersionOnColor]{
350
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
351
+ }
352
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=inversionOnColor], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=inversionOnColor], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=inversionOnColor]{
353
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
354
+ }
355
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=emptyInversionOnColor], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyInversionOnColor], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyInversionOnColor]{
356
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
357
+ }
358
+ .treeNodeExpandButton[data-loading] .treeNodeExpandButtonStateLayer[data-state=emptyDarkOnAccent], .treeNodeExpandButton:active:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyDarkOnAccent], .treeNodeExpandButton[data-pressed=true]:not([data-disabled], [data-loading]) .treeNodeExpandButtonStateLayer[data-state=emptyDarkOnAccent]{
359
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
360
+ }
361
+ .treeNodeExpandButton svg{
362
+ transition:transform 0.2s ease;
363
+ }
364
+ .treeNodeExpandButton[data-expanded] svg{
365
+ transform:rotate(90deg);
366
+ }
367
+ .treeNodeExpandButton:focus-visible{
368
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
369
+ outline-offset:calc(-1 * var(--sn-primitive-strokeWeight-strokeSemiBold, 2px));
370
+ }
371
+
372
+ .treeNodeExpandButtonStateLayer{
373
+ pointer-events:none;
374
+ position:absolute;
375
+ inset:0;
376
+ border-radius:inherit;
377
+ }
378
+
379
+ .treeNodeExpandButtonSpacer{
380
+ flex-shrink:0;
381
+ }
382
+
383
+ .treeNodeExpandButtonWrapper{
384
+ position:relative;
385
+ overflow:hidden;
386
+ display:flex;
387
+ flex-direction:column;
388
+ flex-shrink:0;
389
+ align-items:center;
390
+ align-self:stretch;
391
+ justify-content:center;
392
+ }
393
+
394
+ .treeNodeExpandButtonWrapper > :last-child:not(.treeNodeExpandButton){
395
+ pointer-events:none;
396
+ position:absolute;
397
+ right:0;
398
+ bottom:0;
399
+ left:0;
400
+ width:100%;
401
+ height:calc(50% - var(--tree-chevron-size, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px))) / 2);
402
+ }
403
+
404
+ .treeNodeLink{
405
+ display:block;
406
+ width:100%;
407
+ color:inherit;
408
+ text-decoration:none;
409
+ }
410
+
411
+ .treeNode[data-size=s]{
412
+ --tree-chevron-size:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
413
+ }
414
+ .treeNode[data-size=s] .treeNodeContent{
415
+ border-radius:var(--sn-tree-anatomy-size-s-treeItem-borderRadius, var(--sn-brand-anatomy-radius-button-s, var(--sn-primitive-dimension-2, 2px)));
416
+ padding-top:var(--sn-tree-anatomy-size-s-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
417
+ padding-bottom:var(--sn-tree-anatomy-size-s-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
418
+ gap:var(--sn-tree-anatomy-size-s-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
419
+ padding-left:var(--sn-tree-anatomy-size-s-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
420
+ padding-right:var(--sn-tree-anatomy-size-s-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px)));
421
+ font-family:var(--sn-regular-body-s-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
422
+ font-weight:var(--sn-regular-body-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-s, var(--sn-brand-font-fontWeight-light-regular-body-s, var(--sn-primitive-font-fontWeightValue-400, 400))));
423
+ line-height:var(--sn-regular-body-s-lineHeight, var(--sn-density-typography-roleBody-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
424
+ font-size:var(--sn-regular-body-s-fontSize, var(--sn-density-typography-roleBody-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
425
+ letter-spacing:var(--sn-regular-body-s-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
426
+ paragraph-spacing:var(--sn-regular-body-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
427
+ }
428
+ .treeNode[data-size=s] .treeNodeCheckboxWrap,
429
+ .treeNode[data-size=s] .treeNodeExpandButtonWrapper{
430
+ width:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
431
+ }
432
+ .treeNode[data-size=s] .treeNodeIcon,
433
+ .treeNode[data-size=s] .treeNodeCheckboxWrap{
434
+ padding-top:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
435
+ padding-bottom:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px)));
436
+ }
437
+ .treeNode[data-size=s] .treeNodeExpandButton{
438
+ width:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
439
+ height:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
440
+ }
441
+ .treeNode[data-size=s] .treeNodeExpandButton > svg{
442
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
443
+ max-width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
444
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
445
+ max-height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
446
+ }
447
+ .treeNode[data-size=s] .treeNodeExpandButtonSpacer{
448
+ width:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
449
+ height:var(--sn-tree-anatomy-size-s-treeItem-centeredWrapper-width, var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px)));
450
+ }
451
+ .treeNode[data-size=s] .treeNodeIcon svg{
452
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
453
+ max-width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
454
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
455
+ max-height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
456
+ }
457
+ .treeNode[data-size=s] .treeNodeActions{
458
+ margin-top:calc(-1 * var(--sn-tree-anatomy-size-s-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px))));
459
+ margin-right:calc(-1 * var(--sn-tree-anatomy-size-s-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-s, var(--sn-primitive-dimension-12, 12px))));
460
+ margin-bottom:calc(-1 * var(--sn-tree-anatomy-size-s-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-s, var(--sn-primitive-dimension-6, 6px))));
461
+ }
462
+
463
+ .treeNode[data-size=m]{
464
+ --tree-chevron-size:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
465
+ }
466
+ .treeNode[data-size=m] .treeNodeContent{
467
+ padding-top:var(--sn-tree-anatomy-size-m-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
468
+ padding-bottom:var(--sn-tree-anatomy-size-m-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
469
+ padding-left:var(--sn-tree-anatomy-size-m-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
470
+ padding-right:var(--sn-tree-anatomy-size-m-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
471
+ gap:var(--sn-tree-anatomy-size-m-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px)));
472
+ border-radius:var(--sn-tree-anatomy-size-m-treeItem-borderRadius, var(--sn-brand-anatomy-radius-button-m, var(--sn-primitive-dimension-2, 2px)));
473
+ font-family:var(--sn-regular-body-m-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
474
+ font-weight:var(--sn-regular-body-m-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-m, var(--sn-brand-font-fontWeight-light-regular-body-m, var(--sn-primitive-font-fontWeightValue-400, 400))));
475
+ line-height:var(--sn-regular-body-m-lineHeight, var(--sn-density-typography-roleBody-lineHeightM, var(--sn-primitive-font-lineHeight-by16, 24px)));
476
+ font-size:var(--sn-regular-body-m-fontSize, var(--sn-density-typography-roleBody-fontSizeM, var(--sn-primitive-font-fontSize-16, 16px)));
477
+ letter-spacing:var(--sn-regular-body-m-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
478
+ paragraph-spacing:var(--sn-regular-body-m-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize14, 7px));
479
+ }
480
+ .treeNode[data-size=m] .treeNodeCheckboxWrap,
481
+ .treeNode[data-size=m] .treeNodeExpandButtonWrapper{
482
+ width:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
483
+ }
484
+ .treeNode[data-size=m] .treeNodeIcon,
485
+ .treeNode[data-size=m] .treeNodeCheckboxWrap{
486
+ padding-top:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
487
+ padding-bottom:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px)));
488
+ }
489
+ .treeNode[data-size=m] .treeNodeExpandButton{
490
+ width:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
491
+ height:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
492
+ }
493
+ .treeNode[data-size=m] .treeNodeExpandButton > svg{
494
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
495
+ max-width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
496
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
497
+ max-height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
498
+ }
499
+ .treeNode[data-size=m] .treeNodeExpandButtonSpacer{
500
+ width:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
501
+ height:var(--sn-tree-anatomy-size-m-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
502
+ }
503
+ .treeNode[data-size=m] .treeNodeIcon svg{
504
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
505
+ max-width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
506
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
507
+ max-height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
508
+ }
509
+ .treeNode[data-size=m] .treeNodeActions{
510
+ margin-top:calc(-1 * var(--sn-tree-anatomy-size-m-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px))));
511
+ margin-right:calc(-1 * var(--sn-tree-anatomy-size-m-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-m, var(--sn-primitive-dimension-16, 16px))));
512
+ margin-bottom:calc(-1 * var(--sn-tree-anatomy-size-m-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-m, var(--sn-primitive-dimension-8, 8px))));
513
+ }
514
+
515
+ .treeNode[data-size=l]{
516
+ --tree-chevron-size:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
517
+ }
518
+ .treeNode[data-size=l] .treeNodeContent{
519
+ gap:var(--sn-tree-anatomy-size-l-treeItem-gap, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
520
+ border-radius:var(--sn-tree-anatomy-size-l-treeItem-borderRadius, var(--sn-brand-anatomy-radius-button-l, var(--sn-primitive-dimension-2, 2px)));
521
+ padding-left:var(--sn-tree-anatomy-size-l-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
522
+ padding-right:var(--sn-tree-anatomy-size-l-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px)));
523
+ padding-top:var(--sn-tree-anatomy-size-l-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
524
+ padding-bottom:var(--sn-tree-anatomy-size-l-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
525
+ font-family:var(--sn-regular-body-l-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
526
+ font-weight:var(--sn-regular-body-l-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-l, var(--sn-brand-font-fontWeight-light-regular-body-l, var(--sn-primitive-font-fontWeightValue-400, 400))));
527
+ line-height:var(--sn-regular-body-l-lineHeight, var(--sn-density-typography-roleBody-lineHeightL, var(--sn-primitive-font-lineHeight-by20, 28px)));
528
+ font-size:var(--sn-regular-body-l-fontSize, var(--sn-density-typography-roleBody-fontSizeL, var(--sn-primitive-font-fontSize-20, 20px)));
529
+ letter-spacing:var(--sn-regular-body-l-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
530
+ paragraph-spacing:var(--sn-regular-body-l-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize16, 8px));
531
+ }
532
+ .treeNode[data-size=l] .treeNodeCheckboxWrap,
533
+ .treeNode[data-size=l] .treeNodeExpandButtonWrapper{
534
+ width:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
535
+ }
536
+ .treeNode[data-size=l] .treeNodeIcon,
537
+ .treeNode[data-size=l] .treeNodeCheckboxWrap{
538
+ padding-top:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
539
+ padding-bottom:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px)));
540
+ }
541
+ .treeNode[data-size=l] .treeNodeExpandButton{
542
+ width:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
543
+ height:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
544
+ }
545
+ .treeNode[data-size=l] .treeNodeExpandButton > svg{
546
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
547
+ max-width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
548
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
549
+ max-height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
550
+ }
551
+ .treeNode[data-size=l] .treeNodeExpandButtonSpacer{
552
+ width:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
553
+ height:var(--sn-tree-anatomy-size-l-treeItem-centeredWrapper-width, var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px)));
554
+ }
555
+ .treeNode[data-size=l] .treeNodeIcon svg{
556
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
557
+ max-width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
558
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
559
+ max-height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
560
+ }
561
+ .treeNode[data-size=l] .treeNodeActions{
562
+ margin-top:calc(-1 * var(--sn-tree-anatomy-size-l-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px))));
563
+ margin-right:calc(-1 * var(--sn-tree-anatomy-size-l-treeItem-paddingHorizontal, var(--sn-density-spacing-control-container-horizontal-l, var(--sn-primitive-dimension-20, 20px))));
564
+ margin-bottom:calc(-1 * var(--sn-tree-anatomy-size-l-treeItem-paddingVertical, var(--sn-density-spacing-control-container-vertical-l, var(--sn-primitive-dimension-10, 10px))));
565
+ }