@fluentui/react-tree 9.0.0-beta.11 → 9.0.0-beta.13

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 (190) hide show
  1. package/CHANGELOG.json +195 -1
  2. package/CHANGELOG.md +46 -2
  3. package/dist/index.d.ts +189 -100
  4. package/lib/TreeItemAside.js +2 -0
  5. package/lib/TreeItemAside.js.map +1 -0
  6. package/lib/components/Tree/Tree.js +1 -1
  7. package/lib/components/Tree/Tree.js.map +1 -1
  8. package/lib/components/Tree/Tree.types.js.map +1 -1
  9. package/lib/components/Tree/index.js +1 -1
  10. package/lib/components/Tree/index.js.map +1 -1
  11. package/lib/components/Tree/renderTree.js +1 -1
  12. package/lib/components/Tree/renderTree.js.map +1 -1
  13. package/lib/components/Tree/useRootTree.js +160 -0
  14. package/lib/components/Tree/useRootTree.js.map +1 -0
  15. package/lib/components/Tree/useSubtree.js +40 -0
  16. package/lib/components/Tree/useSubtree.js.map +1 -0
  17. package/lib/components/Tree/useTree.js +2 -95
  18. package/lib/components/Tree/useTree.js.map +1 -1
  19. package/lib/components/Tree/useTreeContextValues.js +2 -4
  20. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  21. package/lib/components/Tree/useTreeStyles.styles.js +30 -0
  22. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -0
  23. package/lib/components/TreeItem/TreeItem.js +2 -2
  24. package/lib/components/TreeItem/TreeItem.js.map +1 -1
  25. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  26. package/lib/components/TreeItem/index.js +1 -1
  27. package/lib/components/TreeItem/index.js.map +1 -1
  28. package/lib/components/TreeItem/renderTreeItem.js +2 -5
  29. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  30. package/lib/components/TreeItem/useTreeItem.js +65 -175
  31. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  32. package/lib/components/TreeItem/useTreeItemContextValues.js +25 -11
  33. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  34. package/lib/components/TreeItem/useTreeItemStyles.styles.js +102 -0
  35. package/lib/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  36. package/lib/components/TreeItemAside/TreeItemAside.js +15 -0
  37. package/lib/components/TreeItemAside/TreeItemAside.js.map +1 -0
  38. package/lib/components/TreeItemAside/TreeItemAside.types.js +2 -0
  39. package/lib/components/TreeItemAside/TreeItemAside.types.js.map +1 -0
  40. package/lib/components/TreeItemAside/index.js +6 -0
  41. package/lib/components/TreeItemAside/index.js.map +1 -0
  42. package/lib/components/TreeItemAside/renderTreeItemAside.js +19 -0
  43. package/lib/components/TreeItemAside/renderTreeItemAside.js.map +1 -0
  44. package/lib/components/TreeItemAside/useTreeItemAside.js +35 -0
  45. package/lib/components/TreeItemAside/useTreeItemAside.js.map +1 -0
  46. package/lib/components/TreeItemAside/useTreeItemAsideStyles.styles.js +47 -0
  47. package/lib/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -0
  48. package/lib/components/TreeItemChevron.js +27 -0
  49. package/lib/components/TreeItemChevron.js.map +1 -0
  50. package/lib/components/TreeItemLayout/TreeItemLayout.js +1 -1
  51. package/lib/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  52. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  53. package/lib/components/TreeItemLayout/index.js +1 -1
  54. package/lib/components/TreeItemLayout/index.js.map +1 -1
  55. package/lib/components/TreeItemLayout/renderTreeItemLayout.js +1 -4
  56. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  57. package/lib/components/TreeItemLayout/useTreeItemLayout.js +16 -11
  58. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  59. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +138 -0
  60. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  61. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +1 -1
  62. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  63. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  64. package/lib/components/TreeItemPersonaLayout/index.js +1 -1
  65. package/lib/components/TreeItemPersonaLayout/index.js.map +1 -1
  66. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +2 -5
  67. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  68. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +16 -20
  69. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  70. package/lib/components/TreeItemPersonaLayout/{useTreeItemPersonaLayoutStyles.js → useTreeItemPersonaLayoutStyles.styles.js} +51 -30
  71. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  72. package/lib/contexts/treeContext.js +1 -2
  73. package/lib/contexts/treeContext.js.map +1 -1
  74. package/lib/contexts/treeItemContext.js +12 -4
  75. package/lib/contexts/treeItemContext.js.map +1 -1
  76. package/lib/hooks/useFlatTree.js +9 -9
  77. package/lib/hooks/useFlatTree.js.map +1 -1
  78. package/lib/hooks/useFlatTreeNavigation.js +15 -13
  79. package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
  80. package/lib/hooks/useNestedTreeNavigation.js +9 -9
  81. package/lib/hooks/useNestedTreeNavigation.js.map +1 -1
  82. package/lib/hooks/useOpenItemsState.js +3 -4
  83. package/lib/hooks/useOpenItemsState.js.map +1 -1
  84. package/lib/index.js +1 -0
  85. package/lib/index.js.map +1 -1
  86. package/lib/utils/createFlatTreeItems.js +32 -21
  87. package/lib/utils/createFlatTreeItems.js.map +1 -1
  88. package/lib/utils/flattenTree.js +4 -29
  89. package/lib/utils/flattenTree.js.map +1 -1
  90. package/lib/utils/tokens.js +11 -11
  91. package/lib/utils/tokens.js.map +1 -1
  92. package/lib-commonjs/TreeItemAside.js +9 -0
  93. package/lib-commonjs/TreeItemAside.js.map +1 -0
  94. package/lib-commonjs/components/Tree/Tree.js +2 -2
  95. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  96. package/lib-commonjs/components/Tree/index.js +1 -1
  97. package/lib-commonjs/components/Tree/index.js.map +1 -1
  98. package/lib-commonjs/components/Tree/renderTree.js +1 -1
  99. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  100. package/lib-commonjs/components/Tree/useRootTree.js +151 -0
  101. package/lib-commonjs/components/Tree/useRootTree.js.map +1 -0
  102. package/lib-commonjs/components/Tree/useSubtree.js +41 -0
  103. package/lib-commonjs/components/Tree/useSubtree.js.map +1 -0
  104. package/lib-commonjs/components/Tree/useTree.js +4 -89
  105. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  106. package/lib-commonjs/components/Tree/useTreeContextValues.js +2 -3
  107. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  108. package/lib-commonjs/components/Tree/{useTreeStyles.js → useTreeStyles.styles.js} +21 -4
  109. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -0
  110. package/lib-commonjs/components/TreeItem/TreeItem.js +2 -2
  111. package/lib-commonjs/components/TreeItem/TreeItem.js.map +1 -1
  112. package/lib-commonjs/components/TreeItem/index.js +1 -1
  113. package/lib-commonjs/components/TreeItem/index.js.map +1 -1
  114. package/lib-commonjs/components/TreeItem/renderTreeItem.js +2 -5
  115. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  116. package/lib-commonjs/components/TreeItem/useTreeItem.js +60 -165
  117. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  118. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +16 -15
  119. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  120. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js +208 -0
  121. package/lib-commonjs/components/TreeItem/useTreeItemStyles.styles.js.map +1 -0
  122. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js +21 -0
  123. package/lib-commonjs/components/TreeItemAside/TreeItemAside.js.map +1 -0
  124. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js +7 -0
  125. package/lib-commonjs/components/TreeItemAside/TreeItemAside.types.js.map +1 -0
  126. package/lib-commonjs/components/TreeItemAside/index.js +13 -0
  127. package/lib-commonjs/components/TreeItemAside/index.js.map +1 -0
  128. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js +22 -0
  129. package/lib-commonjs/components/TreeItemAside/renderTreeItemAside.js.map +1 -0
  130. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js +33 -0
  131. package/lib-commonjs/components/TreeItemAside/useTreeItemAside.js.map +1 -0
  132. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js +92 -0
  133. package/lib-commonjs/components/TreeItemAside/useTreeItemAsideStyles.styles.js.map +1 -0
  134. package/lib-commonjs/components/TreeItemChevron.js +35 -0
  135. package/lib-commonjs/components/TreeItemChevron.js.map +1 -0
  136. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js +2 -2
  137. package/lib-commonjs/components/TreeItemLayout/TreeItemLayout.js.map +1 -1
  138. package/lib-commonjs/components/TreeItemLayout/index.js +1 -1
  139. package/lib-commonjs/components/TreeItemLayout/index.js.map +1 -1
  140. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js +1 -2
  141. package/lib-commonjs/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  142. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +14 -9
  143. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  144. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js +223 -0
  145. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.styles.js.map +1 -0
  146. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js +2 -2
  147. package/lib-commonjs/components/TreeItemPersonaLayout/TreeItemPersonaLayout.js.map +1 -1
  148. package/lib-commonjs/components/TreeItemPersonaLayout/index.js +1 -1
  149. package/lib-commonjs/components/TreeItemPersonaLayout/index.js.map +1 -1
  150. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +2 -3
  151. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  152. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +14 -14
  153. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  154. package/lib-commonjs/components/TreeItemPersonaLayout/{useTreeItemPersonaLayoutStyles.js → useTreeItemPersonaLayoutStyles.styles.js} +91 -45
  155. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -0
  156. package/lib-commonjs/contexts/treeContext.js +1 -2
  157. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  158. package/lib-commonjs/contexts/treeItemContext.js +12 -4
  159. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  160. package/lib-commonjs/hooks/useFlatTree.js +9 -9
  161. package/lib-commonjs/hooks/useFlatTree.js.map +1 -1
  162. package/lib-commonjs/hooks/useFlatTreeNavigation.js +15 -13
  163. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
  164. package/lib-commonjs/hooks/useNestedTreeNavigation.js +9 -9
  165. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +1 -1
  166. package/lib-commonjs/hooks/useOpenItemsState.js +3 -6
  167. package/lib-commonjs/hooks/useOpenItemsState.js.map +1 -1
  168. package/lib-commonjs/index.js +6 -0
  169. package/lib-commonjs/index.js.map +1 -1
  170. package/lib-commonjs/utils/createFlatTreeItems.js +33 -25
  171. package/lib-commonjs/utils/createFlatTreeItems.js.map +1 -1
  172. package/lib-commonjs/utils/flattenTree.js +8 -37
  173. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  174. package/lib-commonjs/utils/tokens.js +10 -10
  175. package/lib-commonjs/utils/tokens.js.map +1 -1
  176. package/package.json +15 -14
  177. package/.swcrc +0 -30
  178. package/lib/components/Tree/useTreeStyles.js +0 -20
  179. package/lib/components/Tree/useTreeStyles.js.map +0 -1
  180. package/lib/components/TreeItem/useTreeItemStyles.js +0 -203
  181. package/lib/components/TreeItem/useTreeItemStyles.js.map +0 -1
  182. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -98
  183. package/lib/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  184. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
  185. package/lib-commonjs/components/Tree/useTreeStyles.js.map +0 -1
  186. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js +0 -375
  187. package/lib-commonjs/components/TreeItem/useTreeItemStyles.js.map +0 -1
  188. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js +0 -143
  189. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayoutStyles.js.map +0 -1
  190. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.js.map +0 -1
@@ -1,11 +1,6 @@
1
1
  import * as React from 'react';
2
- import { getNativeElementProps, isResolvedShorthand, resolveShorthand, useId } from '@fluentui/react-utilities';
3
- import { ChevronRight12Regular } from '@fluentui/react-icons';
4
- import { useFluent_unstable } from '@fluentui/react-shared-contexts';
2
+ import { getNativeElementProps, useId, useMergedRefs } from '@fluentui/react-utilities';
5
3
  import { useEventCallback } from '@fluentui/react-utilities';
6
- import { expandIconInlineStyles } from './useTreeItemStyles';
7
- import { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Home } from '@fluentui/keyboard-keys';
8
- import { useMergedRefs } from '@fluentui/react-utilities';
9
4
  import { elementContains } from '@fluentui/react-portal';
10
5
  import { useTreeContext_unstable } from '../../contexts/index';
11
6
  import { treeDataTypes } from '../../utils/tokens';
@@ -18,78 +13,34 @@ import { treeDataTypes } from '../../utils/tokens';
18
13
  * @param props - props from this instance of TreeItem
19
14
  * @param ref - reference to root HTMLElement of TreeItem
20
15
  */
21
- export const useTreeItem_unstable = (props, ref) => {
22
- const [children, subtreeChildren] = React.Children.toArray(props.children);
16
+ export function useTreeItem_unstable(props, ref) {
23
17
  const contextLevel = useTreeContext_unstable(ctx => ctx.level);
18
+ const id = useId('fui-TreeItem-', props.id);
24
19
  const {
25
- content,
26
- subtree,
27
- expandIcon,
28
- leaf: isLeaf = subtreeChildren === undefined,
29
- actions,
30
- as = 'div',
31
20
  onClick,
32
21
  onKeyDown,
33
- ['aria-level']: level = contextLevel,
22
+ as = 'div',
23
+ value = id,
24
+ itemType = 'leaf',
25
+ 'aria-level': level = contextLevel,
34
26
  ...rest
35
27
  } = props;
36
- const requestOpenChange = useTreeContext_unstable(ctx => ctx.requestOpenChange);
37
- const requestNavigation = useTreeContext_unstable(ctx => ctx.requestNavigation);
38
- const id = useId('fui-TreeItem-', props.id);
39
- const isBranch = !isLeaf;
40
- const open = useTreeContext_unstable(ctx => isBranch && ctx.openItems.has(id));
41
- const {
42
- dir,
43
- targetDocument
44
- } = useFluent_unstable();
45
- const expandIconRotation = open ? 90 : dir !== 'rtl' ? 0 : 180;
28
+ const requestTreeResponse = useTreeContext_unstable(ctx => ctx.requestTreeResponse);
29
+ const [isActionsVisible, setActionsVisible] = React.useState(false);
30
+ const [isAsideVisible, setAsideVisible] = React.useState(true);
31
+ const handleActionsRef = actions => {
32
+ setAsideVisible(actions === null);
33
+ };
34
+ const open = useTreeContext_unstable(ctx => ctx.openItems.has(value));
46
35
  const actionsRef = React.useRef(null);
47
36
  const expandIconRef = React.useRef(null);
37
+ const layoutRef = React.useRef(null);
48
38
  const subtreeRef = React.useRef(null);
49
- const handleArrowRight = event => {
50
- if (!open && isBranch) {
51
- return requestOpenChange({
52
- event,
53
- open: true,
54
- type: treeDataTypes.arrowRight,
55
- target: event.currentTarget
56
- });
57
- }
58
- if (open && isBranch) {
59
- return requestNavigation({
60
- event,
61
- type: treeDataTypes.arrowRight,
62
- target: event.currentTarget
63
- });
64
- }
65
- };
66
- const handleArrowLeft = event => {
67
- if (open && isBranch) {
68
- return requestOpenChange({
69
- event,
70
- open: false,
71
- type: treeDataTypes.arrowLeft,
72
- target: event.currentTarget
73
- });
74
- }
75
- if (!open && level > 1) {
76
- return requestNavigation({
77
- event,
78
- target: event.currentTarget,
79
- type: treeDataTypes.arrowLeft
80
- });
81
- }
82
- };
83
- const handleEnter = event => {
84
- requestOpenChange({
85
- event,
86
- open: isLeaf ? open : !open,
87
- type: treeDataTypes.enter,
88
- target: event.currentTarget
89
- });
90
- };
91
39
  const handleClick = useEventCallback(event => {
92
40
  onClick === null || onClick === void 0 ? void 0 : onClick(event);
41
+ if (event.isDefaultPrevented()) {
42
+ return;
43
+ }
93
44
  const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target);
94
45
  if (isEventFromActions) {
95
46
  return;
@@ -99,152 +50,91 @@ export const useTreeItem_unstable = (props, ref) => {
99
50
  return;
100
51
  }
101
52
  const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target);
102
- requestOpenChange({
103
- event,
104
- open: isLeaf ? open : !open,
105
- type: isFromExpandIcon ? treeDataTypes.expandIconClick : treeDataTypes.click,
106
- target: event.currentTarget
107
- });
108
- requestNavigation({
53
+ requestTreeResponse({
109
54
  event,
110
- target: event.currentTarget,
111
- type: treeDataTypes.click
55
+ itemType,
56
+ value,
57
+ type: isFromExpandIcon ? treeDataTypes.ExpandIconClick : treeDataTypes.Click
112
58
  });
113
59
  });
114
60
  const handleKeyDown = useEventCallback(event => {
115
61
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
116
- if (event.currentTarget !== event.target) {
62
+ if (event.isDefaultPrevented()) {
117
63
  return;
118
64
  }
119
- if (event.isDefaultPrevented()) {
65
+ if (event.currentTarget !== event.target) {
120
66
  return;
121
67
  }
122
68
  switch (event.key) {
123
- case Enter:
124
- return handleEnter(event);
125
- case ArrowRight:
126
- return handleArrowRight(event);
127
- case ArrowLeft:
128
- return handleArrowLeft(event);
129
- case End:
130
- return requestNavigation({
131
- event,
132
- type: treeDataTypes.end,
133
- target: event.currentTarget
134
- });
135
- case Home:
136
- return requestNavigation({
137
- event,
138
- type: treeDataTypes.home,
139
- target: event.currentTarget
140
- });
141
- case ArrowUp:
142
- return requestNavigation({
69
+ case treeDataTypes.End:
70
+ case treeDataTypes.Home:
71
+ case treeDataTypes.Enter:
72
+ case treeDataTypes.ArrowUp:
73
+ case treeDataTypes.ArrowDown:
74
+ case treeDataTypes.ArrowLeft:
75
+ case treeDataTypes.ArrowRight:
76
+ return requestTreeResponse({
143
77
  event,
144
- type: treeDataTypes.arrowUp,
145
- target: event.currentTarget
146
- });
147
- case ArrowDown:
148
- return requestNavigation({
149
- event,
150
- type: treeDataTypes.arrowDown,
151
- target: event.currentTarget
78
+ itemType,
79
+ value,
80
+ type: event.key
152
81
  });
153
82
  }
154
83
  const isTypeAheadCharacter = event.key.length === 1 && event.key.match(/\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;
155
84
  if (isTypeAheadCharacter) {
156
- return requestNavigation({
85
+ requestTreeResponse({
157
86
  event,
158
- target: event.currentTarget,
159
- type: treeDataTypes.typeAhead
87
+ itemType,
88
+ value,
89
+ type: treeDataTypes.TypeAhead
160
90
  });
161
91
  }
162
92
  });
163
- const [isActionsVisible, setActionsVisible] = React.useState(false);
164
- const showActions = useEventCallback(event => {
165
- const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
166
- if (!isEventFromSubtree) {
93
+ const handleActionsVisible = useEventCallback(event => {
94
+ const isTargetFromSubtree = Boolean(subtreeRef.current && elementContains(subtreeRef.current, event.target));
95
+ if (!isTargetFromSubtree) {
167
96
  setActionsVisible(true);
168
97
  }
169
98
  });
170
- const hideActions = useEventCallback(event => {
171
- const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target);
172
- if (!isEventFromSubtree) {
173
- setActionsVisible(false);
99
+ const handleActionsInvisible = useEventCallback(event => {
100
+ const isTargetFromSubtree = Boolean(subtreeRef.current && elementContains(subtreeRef.current, event.target));
101
+ const isRelatedTargetFromActions = Boolean(actionsRef.current && elementContains(actionsRef.current, event.relatedTarget));
102
+ if (isRelatedTargetFromActions) {
103
+ return setActionsVisible(true);
174
104
  }
175
- });
176
- // Listens to focusout event on the document to ensure treeitem actions visibility on portal scenarios
177
- // TODO: find a better way to ensure this behavior
178
- React.useEffect(() => {
179
- if (actionsRef.current) {
180
- const handleFocusOut = event => {
181
- setActionsVisible(elementContains(actionsRef.current, event.relatedTarget));
182
- };
183
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.addEventListener('focusout', handleFocusOut, {
184
- passive: true
185
- });
186
- return () => {
187
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.removeEventListener('focusout', handleFocusOut);
188
- };
105
+ if (!isTargetFromSubtree) {
106
+ return setActionsVisible(false);
189
107
  }
190
- }, [targetDocument]);
108
+ });
191
109
  return {
192
- isLeaf,
110
+ value,
193
111
  open,
112
+ subtreeRef,
113
+ actionsRef: useMergedRefs(actionsRef, handleActionsRef),
114
+ expandIconRef,
115
+ layoutRef,
116
+ itemType,
117
+ isActionsVisible,
118
+ isAsideVisible,
194
119
  level,
195
- buttonSize: 'small',
196
- isActionsVisible: actions ? isActionsVisible : false,
197
120
  components: {
198
- content: 'div',
199
- root: 'div',
200
- expandIcon: 'span',
201
- actions: 'span',
202
- subtree: 'span'
121
+ root: 'div'
203
122
  },
204
- subtree: resolveShorthand(subtree, {
205
- required: Boolean(subtreeChildren),
206
- defaultProps: {
207
- children: subtreeChildren,
208
- ref: useMergedRefs(subtreeRef, isResolvedShorthand(subtree) ? subtree.ref : undefined)
209
- }
210
- }),
211
- content: resolveShorthand(content, {
212
- required: true,
213
- defaultProps: {
214
- children
215
- }
216
- }),
217
123
  root: getNativeElementProps(as, {
218
124
  tabIndex: -1,
219
125
  ...rest,
220
126
  id,
221
127
  ref,
222
- children: null,
223
128
  'aria-level': level,
224
- 'aria-expanded': isBranch ? open : undefined,
129
+ 'aria-expanded': itemType === 'branch' ? open : undefined,
225
130
  role: 'treeitem',
226
131
  onClick: handleClick,
227
132
  onKeyDown: handleKeyDown,
228
- onMouseOver: actions ? showActions : undefined,
229
- onFocus: actions ? showActions : undefined,
230
- onMouseOut: actions ? hideActions : undefined,
231
- onBlur: actions ? hideActions : undefined
232
- }),
233
- expandIcon: resolveShorthand(expandIcon, {
234
- required: isBranch,
235
- defaultProps: {
236
- children: /*#__PURE__*/React.createElement(ChevronRight12Regular, {
237
- style: expandIconInlineStyles[expandIconRotation]
238
- }),
239
- 'aria-hidden': true,
240
- ref: useMergedRefs(isResolvedShorthand(expandIcon) ? expandIcon.ref : undefined, expandIconRef)
241
- }
242
- }),
243
- actions: resolveShorthand(actions, {
244
- defaultProps: {
245
- ref: useMergedRefs(isResolvedShorthand(actions) ? actions.ref : undefined, actionsRef)
246
- }
133
+ onMouseOver: handleActionsVisible,
134
+ onFocus: handleActionsVisible,
135
+ onMouseOut: handleActionsInvisible,
136
+ onBlur: handleActionsInvisible
247
137
  })
248
138
  };
249
- };
139
+ }
250
140
  //# sourceMappingURL=useTreeItem.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","getNativeElementProps","isResolvedShorthand","resolveShorthand","useId","ChevronRight12Regular","useFluent_unstable","useEventCallback","expandIconInlineStyles","ArrowDown","ArrowLeft","ArrowRight","ArrowUp","End","Enter","Home","useMergedRefs","elementContains","useTreeContext_unstable","treeDataTypes","useTreeItem_unstable","props","ref","children","subtreeChildren","Children","toArray","contextLevel","ctx","level","content","subtree","expandIcon","leaf","isLeaf","undefined","actions","as","onClick","onKeyDown","rest","requestOpenChange","requestNavigation","id","isBranch","open","openItems","has","dir","targetDocument","expandIconRotation","actionsRef","useRef","expandIconRef","subtreeRef","handleArrowRight","event","type","arrowRight","target","currentTarget","handleArrowLeft","arrowLeft","handleEnter","enter","handleClick","isEventFromActions","current","isEventFromSubtree","isFromExpandIcon","expandIconClick","click","handleKeyDown","isDefaultPrevented","key","end","home","arrowUp","arrowDown","isTypeAheadCharacter","length","match","altKey","ctrlKey","metaKey","typeAhead","isActionsVisible","setActionsVisible","useState","showActions","hideActions","useEffect","handleFocusOut","relatedTarget","addEventListener","passive","removeEventListener","buttonSize","components","root","required","Boolean","defaultProps","tabIndex","role","onMouseOver","onFocus","onMouseOut","onBlur","createElement","style"],"sources":["../../../src/components/TreeItem/useTreeItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, isResolvedShorthand, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { ChevronRight12Regular } from '@fluentui/react-icons';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { expandIconInlineStyles } from './useTreeItemStyles';\nimport { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Home } from '@fluentui/keyboard-keys';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nimport { elementContains } from '@fluentui/react-portal';\nimport type { TreeItemProps, TreeItemState } from './TreeItem.types';\nimport { useTreeContext_unstable } from '../../contexts/index';\nimport { treeDataTypes } from '../../utils/tokens';\n\n/**\n * Create the state required to render TreeItem.\n *\n * The returned state can be modified with hooks such as useTreeItemStyles_unstable,\n * before being passed to renderTreeItem_unstable.\n *\n * @param props - props from this instance of TreeItem\n * @param ref - reference to root HTMLElement of TreeItem\n */\nexport const useTreeItem_unstable = (props: TreeItemProps, ref: React.Ref<HTMLDivElement>): TreeItemState => {\n const [children, subtreeChildren] = React.Children.toArray(props.children);\n\n const contextLevel = useTreeContext_unstable(ctx => ctx.level);\n const {\n content,\n subtree,\n expandIcon,\n leaf: isLeaf = subtreeChildren === undefined,\n actions,\n as = 'div',\n onClick,\n onKeyDown,\n ['aria-level']: level = contextLevel,\n ...rest\n } = props;\n\n const requestOpenChange = useTreeContext_unstable(ctx => ctx.requestOpenChange);\n const requestNavigation = useTreeContext_unstable(ctx => ctx.requestNavigation);\n\n const id = useId('fui-TreeItem-', props.id);\n\n const isBranch = !isLeaf;\n\n const open = useTreeContext_unstable(ctx => isBranch && ctx.openItems.has(id));\n const { dir, targetDocument } = useFluent_unstable();\n const expandIconRotation = open ? 90 : dir !== 'rtl' ? 0 : 180;\n\n const actionsRef = React.useRef<HTMLElement>(null);\n const expandIconRef = React.useRef<HTMLElement>(null);\n const subtreeRef = React.useRef<HTMLElement>(null);\n\n const handleArrowRight = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!open && isBranch) {\n return requestOpenChange({ event, open: true, type: treeDataTypes.arrowRight, target: event.currentTarget });\n }\n if (open && isBranch) {\n return requestNavigation({ event, type: treeDataTypes.arrowRight, target: event.currentTarget });\n }\n };\n const handleArrowLeft = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (open && isBranch) {\n return requestOpenChange({ event, open: false, type: treeDataTypes.arrowLeft, target: event.currentTarget });\n }\n if (!open && level > 1) {\n return requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.arrowLeft });\n }\n };\n const handleEnter = (event: React.KeyboardEvent<HTMLDivElement>) => {\n requestOpenChange({ event, open: isLeaf ? open : !open, type: treeDataTypes.enter, target: event.currentTarget });\n };\n\n const handleClick = useEventCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n\n const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target as Node);\n if (isEventFromActions) {\n return;\n }\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (isEventFromSubtree) {\n return;\n }\n const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target as Node);\n requestOpenChange({\n event,\n open: isLeaf ? open : !open,\n type: isFromExpandIcon ? treeDataTypes.expandIconClick : treeDataTypes.click,\n target: event.currentTarget,\n });\n requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.click });\n });\n\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.currentTarget !== event.target) {\n return;\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n switch (event.key) {\n case Enter:\n return handleEnter(event);\n case ArrowRight:\n return handleArrowRight(event);\n case ArrowLeft:\n return handleArrowLeft(event);\n case End:\n return requestNavigation({ event, type: treeDataTypes.end, target: event.currentTarget });\n case Home:\n return requestNavigation({ event, type: treeDataTypes.home, target: event.currentTarget });\n case ArrowUp:\n return requestNavigation({ event, type: treeDataTypes.arrowUp, target: event.currentTarget });\n case ArrowDown:\n return requestNavigation({ event, type: treeDataTypes.arrowDown, target: event.currentTarget });\n }\n const isTypeAheadCharacter =\n event.key.length === 1 && event.key.match(/\\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;\n if (isTypeAheadCharacter) {\n return requestNavigation({ event, target: event.currentTarget, type: treeDataTypes.typeAhead });\n }\n });\n\n const [isActionsVisible, setActionsVisible] = React.useState(false);\n const showActions = useEventCallback((event: React.SyntheticEvent) => {\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (!isEventFromSubtree) {\n setActionsVisible(true);\n }\n });\n const hideActions = useEventCallback((event: React.SyntheticEvent) => {\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (!isEventFromSubtree) {\n setActionsVisible(false);\n }\n });\n\n // Listens to focusout event on the document to ensure treeitem actions visibility on portal scenarios\n // TODO: find a better way to ensure this behavior\n React.useEffect(() => {\n if (actionsRef.current) {\n const handleFocusOut = (event: FocusEvent) => {\n setActionsVisible(elementContains(actionsRef.current, event.relatedTarget as Node));\n };\n targetDocument?.addEventListener('focusout', handleFocusOut, { passive: true });\n return () => {\n targetDocument?.removeEventListener('focusout', handleFocusOut);\n };\n }\n }, [targetDocument]);\n\n return {\n isLeaf,\n open,\n level,\n buttonSize: 'small',\n isActionsVisible: actions ? isActionsVisible : false,\n components: {\n content: 'div',\n root: 'div',\n expandIcon: 'span',\n actions: 'span',\n subtree: 'span',\n },\n subtree: resolveShorthand(subtree, {\n required: Boolean(subtreeChildren),\n defaultProps: {\n children: subtreeChildren,\n ref: useMergedRefs(subtreeRef, isResolvedShorthand(subtree) ? subtree.ref : undefined),\n },\n }),\n content: resolveShorthand(content, {\n required: true,\n defaultProps: {\n children,\n },\n }),\n root: getNativeElementProps(as, {\n tabIndex: -1,\n ...rest,\n id,\n ref,\n children: null,\n 'aria-level': level,\n 'aria-expanded': isBranch ? open : undefined,\n role: 'treeitem',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onMouseOver: actions ? showActions : undefined,\n onFocus: actions ? showActions : undefined,\n onMouseOut: actions ? hideActions : undefined,\n onBlur: actions ? hideActions : undefined,\n }),\n expandIcon: resolveShorthand(expandIcon, {\n required: isBranch,\n defaultProps: {\n children: <ChevronRight12Regular style={expandIconInlineStyles[expandIconRotation]} />,\n 'aria-hidden': true,\n ref: useMergedRefs(isResolvedShorthand(expandIcon) ? expandIcon.ref : undefined, expandIconRef),\n },\n }),\n actions: resolveShorthand(actions, {\n defaultProps: {\n ref: useMergedRefs(isResolvedShorthand(actions) ? actions.ref : undefined, actionsRef),\n },\n }),\n };\n};\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,qBAAqB,EAAEC,mBAAmB,EAAEC,gBAAgB,EAAEC,KAAK,QAAQ;AACpF,SAASC,qBAAqB,QAAQ;AACtC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAEC,OAAO,EAAEC,GAAG,EAAEC,KAAK,EAAEC,IAAI,QAAQ;AAC5E,SAASC,aAAa,QAAQ;AAC9B,SAASC,eAAe,QAAQ;AAEhC,SAASC,uBAAuB,QAAQ;AACxC,SAASC,aAAa,QAAQ;AAE9B;;;;;;;;;AASA,OAAO,MAAMC,oBAAA,GAAuBA,CAACC,KAAA,EAAsBC,GAAA,KAAkD;EAC3G,MAAM,CAACC,QAAA,EAAUC,eAAA,CAAgB,GAAGxB,KAAA,CAAMyB,QAAQ,CAACC,OAAO,CAACL,KAAA,CAAME,QAAQ;EAEzE,MAAMI,YAAA,GAAeT,uBAAA,CAAwBU,GAAA,IAAOA,GAAA,CAAIC,KAAK;EAC7D,MAAM;IACJC,OAAA;IACAC,OAAA;IACAC,UAAA;IACAC,IAAA,EAAMC,MAAA,GAASV,eAAA,KAAoBW,SAAS;IAC5CC,OAAA;IACAC,EAAA,GAAK;IACLC,OAAA;IACAC,SAAA;IACA,CAAC,eAAeV,KAAA,GAAQF,YAAY;IACpC,GAAGa;EAAA,CACJ,GAAGnB,KAAA;EAEJ,MAAMoB,iBAAA,GAAoBvB,uBAAA,CAAwBU,GAAA,IAAOA,GAAA,CAAIa,iBAAiB;EAC9E,MAAMC,iBAAA,GAAoBxB,uBAAA,CAAwBU,GAAA,IAAOA,GAAA,CAAIc,iBAAiB;EAE9E,MAAMC,EAAA,GAAKvC,KAAA,CAAM,iBAAiBiB,KAAA,CAAMsB,EAAE;EAE1C,MAAMC,QAAA,GAAW,CAACV,MAAA;EAElB,MAAMW,IAAA,GAAO3B,uBAAA,CAAwBU,GAAA,IAAOgB,QAAA,IAAYhB,GAAA,CAAIkB,SAAS,CAACC,GAAG,CAACJ,EAAA;EAC1E,MAAM;IAAEK,GAAA;IAAKC;EAAc,CAAE,GAAG3C,kBAAA;EAChC,MAAM4C,kBAAA,GAAqBL,IAAA,GAAO,KAAKG,GAAA,KAAQ,QAAQ,IAAI,GAAG;EAE9D,MAAMG,UAAA,GAAanD,KAAA,CAAMoD,MAAM,CAAc,IAAI;EACjD,MAAMC,aAAA,GAAgBrD,KAAA,CAAMoD,MAAM,CAAc,IAAI;EACpD,MAAME,UAAA,GAAatD,KAAA,CAAMoD,MAAM,CAAc,IAAI;EAEjD,MAAMG,gBAAA,GAAoBC,KAAA,IAA+C;IACvE,IAAI,CAACX,IAAA,IAAQD,QAAA,EAAU;MACrB,OAAOH,iBAAA,CAAkB;QAAEe,KAAA;QAAOX,IAAA,EAAM,IAAI;QAAEY,IAAA,EAAMtC,aAAA,CAAcuC,UAAU;QAAEC,MAAA,EAAQH,KAAA,CAAMI;MAAc;IAC5G;IACA,IAAIf,IAAA,IAAQD,QAAA,EAAU;MACpB,OAAOF,iBAAA,CAAkB;QAAEc,KAAA;QAAOC,IAAA,EAAMtC,aAAA,CAAcuC,UAAU;QAAEC,MAAA,EAAQH,KAAA,CAAMI;MAAc;IAChG;EACF;EACA,MAAMC,eAAA,GAAmBL,KAAA,IAA+C;IACtE,IAAIX,IAAA,IAAQD,QAAA,EAAU;MACpB,OAAOH,iBAAA,CAAkB;QAAEe,KAAA;QAAOX,IAAA,EAAM,KAAK;QAAEY,IAAA,EAAMtC,aAAA,CAAc2C,SAAS;QAAEH,MAAA,EAAQH,KAAA,CAAMI;MAAc;IAC5G;IACA,IAAI,CAACf,IAAA,IAAQhB,KAAA,GAAQ,GAAG;MACtB,OAAOa,iBAAA,CAAkB;QAAEc,KAAA;QAAOG,MAAA,EAAQH,KAAA,CAAMI,aAAa;QAAEH,IAAA,EAAMtC,aAAA,CAAc2C;MAAU;IAC/F;EACF;EACA,MAAMC,WAAA,GAAeP,KAAA,IAA+C;IAClEf,iBAAA,CAAkB;MAAEe,KAAA;MAAOX,IAAA,EAAMX,MAAA,GAASW,IAAA,GAAO,CAACA,IAAI;MAAEY,IAAA,EAAMtC,aAAA,CAAc6C,KAAK;MAAEL,MAAA,EAAQH,KAAA,CAAMI;IAAc;EACjH;EAEA,MAAMK,WAAA,GAAc1D,gBAAA,CAAkBiD,KAAA,IAA4C;IAChFlB,OAAA,aAAAA,OAAA,uBAAAA,OAAA,CAAUkB,KAAA;IAEV,MAAMU,kBAAA,GAAqBf,UAAA,CAAWgB,OAAO,IAAIlD,eAAA,CAAgBkC,UAAA,CAAWgB,OAAO,EAAEX,KAAA,CAAMG,MAAM;IACjG,IAAIO,kBAAA,EAAoB;MACtB;IACF;IACA,MAAME,kBAAA,GAAqBd,UAAA,CAAWa,OAAO,IAAIlD,eAAA,CAAgBqC,UAAA,CAAWa,OAAO,EAAEX,KAAA,CAAMG,MAAM;IACjG,IAAIS,kBAAA,EAAoB;MACtB;IACF;IACA,MAAMC,gBAAA,GAAmBhB,aAAA,CAAcc,OAAO,IAAIlD,eAAA,CAAgBoC,aAAA,CAAcc,OAAO,EAAEX,KAAA,CAAMG,MAAM;IACrGlB,iBAAA,CAAkB;MAChBe,KAAA;MACAX,IAAA,EAAMX,MAAA,GAASW,IAAA,GAAO,CAACA,IAAI;MAC3BY,IAAA,EAAMY,gBAAA,GAAmBlD,aAAA,CAAcmD,eAAe,GAAGnD,aAAA,CAAcoD,KAAK;MAC5EZ,MAAA,EAAQH,KAAA,CAAMI;IAChB;IACAlB,iBAAA,CAAkB;MAAEc,KAAA;MAAOG,MAAA,EAAQH,KAAA,CAAMI,aAAa;MAAEH,IAAA,EAAMtC,aAAA,CAAcoD;IAAM;EACpF;EAEA,MAAMC,aAAA,GAAgBjE,gBAAA,CAAkBiD,KAAA,IAA+C;IACrFjB,SAAA,aAAAA,SAAA,uBAAAA,SAAA,CAAYiB,KAAA;IACZ,IAAIA,KAAA,CAAMI,aAAa,KAAKJ,KAAA,CAAMG,MAAM,EAAE;MACxC;IACF;IACA,IAAIH,KAAA,CAAMiB,kBAAkB,IAAI;MAC9B;IACF;IACA,QAAQjB,KAAA,CAAMkB,GAAG;MACf,KAAK5D,KAAA;QACH,OAAOiD,WAAA,CAAYP,KAAA;MACrB,KAAK7C,UAAA;QACH,OAAO4C,gBAAA,CAAiBC,KAAA;MAC1B,KAAK9C,SAAA;QACH,OAAOmD,eAAA,CAAgBL,KAAA;MACzB,KAAK3C,GAAA;QACH,OAAO6B,iBAAA,CAAkB;UAAEc,KAAA;UAAOC,IAAA,EAAMtC,aAAA,CAAcwD,GAAG;UAAEhB,MAAA,EAAQH,KAAA,CAAMI;QAAc;MACzF,KAAK7C,IAAA;QACH,OAAO2B,iBAAA,CAAkB;UAAEc,KAAA;UAAOC,IAAA,EAAMtC,aAAA,CAAcyD,IAAI;UAAEjB,MAAA,EAAQH,KAAA,CAAMI;QAAc;MAC1F,KAAKhD,OAAA;QACH,OAAO8B,iBAAA,CAAkB;UAAEc,KAAA;UAAOC,IAAA,EAAMtC,aAAA,CAAc0D,OAAO;UAAElB,MAAA,EAAQH,KAAA,CAAMI;QAAc;MAC7F,KAAKnD,SAAA;QACH,OAAOiC,iBAAA,CAAkB;UAAEc,KAAA;UAAOC,IAAA,EAAMtC,aAAA,CAAc2D,SAAS;UAAEnB,MAAA,EAAQH,KAAA,CAAMI;QAAc;IAAA;IAEjG,MAAMmB,oBAAA,GACJvB,KAAA,CAAMkB,GAAG,CAACM,MAAM,KAAK,KAAKxB,KAAA,CAAMkB,GAAG,CAACO,KAAK,CAAC,SAAS,CAACzB,KAAA,CAAM0B,MAAM,IAAI,CAAC1B,KAAA,CAAM2B,OAAO,IAAI,CAAC3B,KAAA,CAAM4B,OAAO;IACtG,IAAIL,oBAAA,EAAsB;MACxB,OAAOrC,iBAAA,CAAkB;QAAEc,KAAA;QAAOG,MAAA,EAAQH,KAAA,CAAMI,aAAa;QAAEH,IAAA,EAAMtC,aAAA,CAAckE;MAAU;IAC/F;EACF;EAEA,MAAM,CAACC,gBAAA,EAAkBC,iBAAA,CAAkB,GAAGvF,KAAA,CAAMwF,QAAQ,CAAC,KAAK;EAClE,MAAMC,WAAA,GAAclF,gBAAA,CAAkBiD,KAAA,IAAgC;IACpE,MAAMY,kBAAA,GAAqBd,UAAA,CAAWa,OAAO,IAAIlD,eAAA,CAAgBqC,UAAA,CAAWa,OAAO,EAAEX,KAAA,CAAMG,MAAM;IACjG,IAAI,CAACS,kBAAA,EAAoB;MACvBmB,iBAAA,CAAkB,IAAI;IACxB;EACF;EACA,MAAMG,WAAA,GAAcnF,gBAAA,CAAkBiD,KAAA,IAAgC;IACpE,MAAMY,kBAAA,GAAqBd,UAAA,CAAWa,OAAO,IAAIlD,eAAA,CAAgBqC,UAAA,CAAWa,OAAO,EAAEX,KAAA,CAAMG,MAAM;IACjG,IAAI,CAACS,kBAAA,EAAoB;MACvBmB,iBAAA,CAAkB,KAAK;IACzB;EACF;EAEA;EACA;EACAvF,KAAA,CAAM2F,SAAS,CAAC,MAAM;IACpB,IAAIxC,UAAA,CAAWgB,OAAO,EAAE;MACtB,MAAMyB,cAAA,GAAkBpC,KAAA,IAAsB;QAC5C+B,iBAAA,CAAkBtE,eAAA,CAAgBkC,UAAA,CAAWgB,OAAO,EAAEX,KAAA,CAAMqC,aAAa;MAC3E;MACA5C,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgB6C,gBAAgB,CAAC,YAAYF,cAAA,EAAgB;QAAEG,OAAA,EAAS;MAAK;MAC7E,OAAO,MAAM;QACX9C,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgB+C,mBAAmB,CAAC,YAAYJ,cAAA;MAClD;IACF;EACF,GAAG,CAAC3C,cAAA,CAAe;EAEnB,OAAO;IACLf,MAAA;IACAW,IAAA;IACAhB,KAAA;IACAoE,UAAA,EAAY;IACZX,gBAAA,EAAkBlD,OAAA,GAAUkD,gBAAA,GAAmB,KAAK;IACpDY,UAAA,EAAY;MACVpE,OAAA,EAAS;MACTqE,IAAA,EAAM;MACNnE,UAAA,EAAY;MACZI,OAAA,EAAS;MACTL,OAAA,EAAS;IACX;IACAA,OAAA,EAAS5B,gBAAA,CAAiB4B,OAAA,EAAS;MACjCqE,QAAA,EAAUC,OAAA,CAAQ7E,eAAA;MAClB8E,YAAA,EAAc;QACZ/E,QAAA,EAAUC,eAAA;QACVF,GAAA,EAAKN,aAAA,CAAcsC,UAAA,EAAYpD,mBAAA,CAAoB6B,OAAA,IAAWA,OAAA,CAAQT,GAAG,GAAGa,SAAS;MACvF;IACF;IACAL,OAAA,EAAS3B,gBAAA,CAAiB2B,OAAA,EAAS;MACjCsE,QAAA,EAAU,IAAI;MACdE,YAAA,EAAc;QACZ/E;MACF;IACF;IACA4E,IAAA,EAAMlG,qBAAA,CAAsBoC,EAAA,EAAI;MAC9BkE,QAAA,EAAU,CAAC;MACX,GAAG/D,IAAI;MACPG,EAAA;MACArB,GAAA;MACAC,QAAA,EAAU,IAAI;MACd,cAAcM,KAAA;MACd,iBAAiBe,QAAA,GAAWC,IAAA,GAAOV,SAAS;MAC5CqE,IAAA,EAAM;MACNlE,OAAA,EAAS2B,WAAA;MACT1B,SAAA,EAAWiC,aAAA;MACXiC,WAAA,EAAarE,OAAA,GAAUqD,WAAA,GAActD,SAAS;MAC9CuE,OAAA,EAAStE,OAAA,GAAUqD,WAAA,GAActD,SAAS;MAC1CwE,UAAA,EAAYvE,OAAA,GAAUsD,WAAA,GAAcvD,SAAS;MAC7CyE,MAAA,EAAQxE,OAAA,GAAUsD,WAAA,GAAcvD;IAClC;IACAH,UAAA,EAAY7B,gBAAA,CAAiB6B,UAAA,EAAY;MACvCoE,QAAA,EAAUxD,QAAA;MACV0D,YAAA,EAAc;QACZ/E,QAAA,eAAUvB,KAAA,CAAA6G,aAAA,CAACxG,qBAAA;UAAsByG,KAAA,EAAOtG,sBAAsB,CAAC0C,kBAAA;;QAC/D,eAAe,IAAI;QACnB5B,GAAA,EAAKN,aAAA,CAAcd,mBAAA,CAAoB8B,UAAA,IAAcA,UAAA,CAAWV,GAAG,GAAGa,SAAS,EAAEkB,aAAA;MACnF;IACF;IACAjB,OAAA,EAASjC,gBAAA,CAAiBiC,OAAA,EAAS;MACjCkE,YAAA,EAAc;QACZhF,GAAA,EAAKN,aAAA,CAAcd,mBAAA,CAAoBkC,OAAA,IAAWA,OAAA,CAAQd,GAAG,GAAGa,SAAS,EAAEgB,UAAA;MAC7E;IACF;EACF;AACF"}
1
+ {"version":3,"names":["React","getNativeElementProps","useId","useMergedRefs","useEventCallback","elementContains","useTreeContext_unstable","treeDataTypes","useTreeItem_unstable","props","ref","contextLevel","ctx","level","id","onClick","onKeyDown","as","value","itemType","rest","requestTreeResponse","isActionsVisible","setActionsVisible","useState","isAsideVisible","setAsideVisible","handleActionsRef","actions","open","openItems","has","actionsRef","useRef","expandIconRef","layoutRef","subtreeRef","handleClick","event","isDefaultPrevented","isEventFromActions","current","target","isEventFromSubtree","isFromExpandIcon","type","ExpandIconClick","Click","handleKeyDown","currentTarget","key","End","Home","Enter","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","isTypeAheadCharacter","length","match","altKey","ctrlKey","metaKey","TypeAhead","handleActionsVisible","isTargetFromSubtree","Boolean","handleActionsInvisible","isRelatedTargetFromActions","relatedTarget","components","root","tabIndex","undefined","role","onMouseOver","onFocus","onMouseOut","onBlur"],"sources":["../../../src/components/TreeItem/useTreeItem.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, useId, useMergedRefs } from '@fluentui/react-utilities';\nimport { useEventCallback } from '@fluentui/react-utilities';\nimport { elementContains } from '@fluentui/react-portal';\nimport type { TreeItemProps, TreeItemState } from './TreeItem.types';\nimport { useTreeContext_unstable } from '../../contexts/index';\nimport { treeDataTypes } from '../../utils/tokens';\n\n/**\n * Create the state required to render TreeItem.\n *\n * The returned state can be modified with hooks such as useTreeItemStyles_unstable,\n * before being passed to renderTreeItem_unstable.\n *\n * @param props - props from this instance of TreeItem\n * @param ref - reference to root HTMLElement of TreeItem\n */\nexport function useTreeItem_unstable<Value = string>(\n props: TreeItemProps<Value>,\n ref: React.Ref<HTMLDivElement>,\n): TreeItemState {\n const contextLevel = useTreeContext_unstable(ctx => ctx.level);\n\n const id = useId('fui-TreeItem-', props.id);\n\n const {\n onClick,\n onKeyDown,\n as = 'div',\n value = id,\n itemType = 'leaf',\n 'aria-level': level = contextLevel,\n ...rest\n } = props;\n\n const requestTreeResponse = useTreeContext_unstable(ctx => ctx.requestTreeResponse);\n\n const [isActionsVisible, setActionsVisible] = React.useState(false);\n const [isAsideVisible, setAsideVisible] = React.useState(true);\n\n const handleActionsRef = (actions: HTMLDivElement | null) => {\n setAsideVisible(actions === null);\n };\n\n const open = useTreeContext_unstable(ctx => ctx.openItems.has(value));\n\n const actionsRef = React.useRef<HTMLDivElement>(null);\n const expandIconRef = React.useRef<HTMLDivElement>(null);\n const layoutRef = React.useRef<HTMLDivElement>(null);\n const subtreeRef = React.useRef<HTMLDivElement>(null);\n\n const handleClick = useEventCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n const isEventFromActions = actionsRef.current && elementContains(actionsRef.current, event.target as Node);\n if (isEventFromActions) {\n return;\n }\n const isEventFromSubtree = subtreeRef.current && elementContains(subtreeRef.current, event.target as Node);\n if (isEventFromSubtree) {\n return;\n }\n const isFromExpandIcon = expandIconRef.current && elementContains(expandIconRef.current, event.target as Node);\n requestTreeResponse({\n event,\n itemType,\n value,\n type: isFromExpandIcon ? treeDataTypes.ExpandIconClick : treeDataTypes.Click,\n });\n });\n\n const handleKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n if (event.currentTarget !== event.target) {\n return;\n }\n switch (event.key) {\n case treeDataTypes.End:\n case treeDataTypes.Home:\n case treeDataTypes.Enter:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.ArrowDown:\n case treeDataTypes.ArrowLeft:\n case treeDataTypes.ArrowRight:\n return requestTreeResponse({ event, itemType, value, type: event.key });\n }\n const isTypeAheadCharacter =\n event.key.length === 1 && event.key.match(/\\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;\n if (isTypeAheadCharacter) {\n requestTreeResponse({ event, itemType, value, type: treeDataTypes.TypeAhead });\n }\n });\n\n const handleActionsVisible = useEventCallback((event: React.FocusEvent | React.MouseEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n setActionsVisible(true);\n }\n });\n\n const handleActionsInvisible = useEventCallback((event: React.FocusEvent | React.MouseEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n const isRelatedTargetFromActions = Boolean(\n actionsRef.current && elementContains(actionsRef.current, event.relatedTarget as Node),\n );\n if (isRelatedTargetFromActions) {\n return setActionsVisible(true);\n }\n if (!isTargetFromSubtree) {\n return setActionsVisible(false);\n }\n });\n\n return {\n value,\n open,\n subtreeRef,\n actionsRef: useMergedRefs(actionsRef, handleActionsRef),\n expandIconRef,\n layoutRef,\n itemType,\n isActionsVisible,\n isAsideVisible,\n level,\n components: {\n root: 'div',\n },\n root: getNativeElementProps(as, {\n tabIndex: -1,\n ...rest,\n id,\n ref,\n 'aria-level': level,\n 'aria-expanded': itemType === 'branch' ? open : undefined,\n role: 'treeitem',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onMouseOver: handleActionsVisible,\n onFocus: handleActionsVisible,\n onMouseOut: handleActionsInvisible,\n onBlur: handleActionsInvisible,\n }),\n };\n}\n"],"mappings":"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"}
@@ -1,18 +1,32 @@
1
- import * as React from 'react';
2
1
  export function useTreeItemContextValues_unstable(state) {
3
2
  const {
4
- buttonSize,
5
- isActionsVisible
3
+ value,
4
+ isActionsVisible,
5
+ isAsideVisible,
6
+ actionsRef,
7
+ itemType,
8
+ layoutRef,
9
+ subtreeRef,
10
+ expandIconRef,
11
+ open
6
12
  } = state;
7
- const treeItem = React.useMemo(() => ({
8
- isActionsVisible
9
- }), [isActionsVisible]);
10
- const button = React.useMemo(() => ({
11
- size: buttonSize
12
- }), [buttonSize]);
13
+ /**
14
+ * This context is created with "@fluentui/react-context-selector",
15
+ * there is no sense to memoize it
16
+ */
17
+ const treeItem = {
18
+ isActionsVisible,
19
+ isAsideVisible,
20
+ value,
21
+ actionsRef,
22
+ itemType,
23
+ layoutRef,
24
+ subtreeRef,
25
+ expandIconRef,
26
+ open
27
+ };
13
28
  return {
14
- treeItem,
15
- button
29
+ treeItem
16
30
  };
17
31
  }
18
32
  //# sourceMappingURL=useTreeItemContextValues.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useTreeItemContextValues_unstable","state","buttonSize","isActionsVisible","treeItem","useMemo","button","size"],"sources":["../../../src/components/TreeItem/useTreeItemContextValues.ts"],"sourcesContent":["import * as React from 'react';\nimport type { ButtonContextValue } from '@fluentui/react-button';\nimport type { TreeItemContextValue } from '../../contexts';\nimport type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\n\nexport function useTreeItemContextValues_unstable(\n state: Pick<TreeItemState, 'buttonSize' | 'isActionsVisible'>,\n): TreeItemContextValues {\n const { buttonSize, isActionsVisible } = state;\n\n const treeItem = React.useMemo<TreeItemContextValue>(() => ({ isActionsVisible }), [isActionsVisible]);\n const button = React.useMemo<ButtonContextValue>(() => ({ size: buttonSize }), [buttonSize]);\n\n return { treeItem, button };\n}\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AAKvB,OAAO,SAASC,kCACdC,KAA6D,EACtC;EACvB,MAAM;IAAEC,UAAA;IAAYC;EAAgB,CAAE,GAAGF,KAAA;EAEzC,MAAMG,QAAA,GAAWL,KAAA,CAAMM,OAAO,CAAuB,OAAO;IAAEF;EAAiB,IAAI,CAACA,gBAAA,CAAiB;EACrG,MAAMG,MAAA,GAASP,KAAA,CAAMM,OAAO,CAAqB,OAAO;IAAEE,IAAA,EAAML;EAAW,IAAI,CAACA,UAAA,CAAW;EAE3F,OAAO;IAAEE,QAAA;IAAUE;EAAO;AAC5B"}
1
+ {"version":3,"names":["useTreeItemContextValues_unstable","state","value","isActionsVisible","isAsideVisible","actionsRef","itemType","layoutRef","subtreeRef","expandIconRef","open","treeItem"],"sources":["../../../src/components/TreeItem/useTreeItemContextValues.ts"],"sourcesContent":["import type { TreeItemContextValue } from '../../contexts';\nimport type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\n\nexport function useTreeItemContextValues_unstable(\n state: Pick<TreeItemState, keyof TreeItemContextValue>,\n): TreeItemContextValues {\n const { value, isActionsVisible, isAsideVisible, actionsRef, itemType, layoutRef, subtreeRef, expandIconRef, open } =\n state;\n\n /**\n * This context is created with \"@fluentui/react-context-selector\",\n * there is no sense to memoize it\n */\n const treeItem: TreeItemContextValue = {\n isActionsVisible,\n isAsideVisible,\n value,\n actionsRef,\n itemType,\n layoutRef,\n subtreeRef,\n expandIconRef,\n open,\n };\n\n return { treeItem };\n}\n"],"mappings":"AAGA,OAAO,SAASA,kCACdC,KAAsD,EAC/B;EACvB,MAAM;IAAEC,KAAA;IAAOC,gBAAA;IAAkBC,cAAA;IAAgBC,UAAA;IAAYC,QAAA;IAAUC,SAAA;IAAWC,UAAA;IAAYC,aAAA;IAAeC;EAAI,CAAE,GACjHT,KAAA;EAEF;;;;EAIA,MAAMU,QAAA,GAAiC;IACrCR,gBAAA;IACAC,cAAA;IACAF,KAAA;IACAG,UAAA;IACAC,QAAA;IACAC,SAAA;IACAC,UAAA;IACAC,aAAA;IACAC;EACF;EAEA,OAAO;IAAEC;EAAS;AACpB"}
@@ -0,0 +1,102 @@
1
+ import { __styles, mergeClasses } from '@griffel/react';
2
+ import { tokens } from '@fluentui/react-theme';
3
+ import { createFocusOutlineStyle } from '@fluentui/react-tabster';
4
+ import { treeItemLevelToken } from '../../utils/tokens';
5
+ export const treeItemClassNames = {
6
+ root: 'fui-TreeItem'
7
+ };
8
+ const useRootStyles = /*#__PURE__*/__styles({
9
+ level1: {
10
+ iytv0q: "f10bgyvd"
11
+ },
12
+ level2: {
13
+ iytv0q: "f1h0rod3"
14
+ },
15
+ level3: {
16
+ iytv0q: "fgoqafk"
17
+ },
18
+ level4: {
19
+ iytv0q: "f75dvuh"
20
+ },
21
+ level5: {
22
+ iytv0q: "fqk7yw6"
23
+ },
24
+ level6: {
25
+ iytv0q: "f1r3z17b"
26
+ },
27
+ level7: {
28
+ iytv0q: "f1hrpd1h"
29
+ },
30
+ level8: {
31
+ iytv0q: "f1iy65d0"
32
+ },
33
+ level9: {
34
+ iytv0q: "ftg42e5"
35
+ },
36
+ level10: {
37
+ iytv0q: "fyat3t"
38
+ },
39
+ base: {
40
+ qhf8xq: "f10pi13n",
41
+ Bceei9c: "f1k6fduh",
42
+ mc9l5x: "f13qh94s",
43
+ B7ck84d: "f1ewtqcl",
44
+ wkccdc: "ffh4ag3",
45
+ Budl1dq: "f1y1g942",
46
+ zoa1oz: "faz22wj",
47
+ De3pzq: "fhovq9v",
48
+ sj55zd: "fkfq4zb",
49
+ z189sj: ["flk2ux3", "fkl3uby"]
50
+ },
51
+ focusIndicator: {
52
+ Brovlpu: "ftqa4ok",
53
+ B486eqv: "f2hkw1w",
54
+ B8q5s1w: "f8hki3x",
55
+ Bci5o5g: ["f1d2448m", "ffh67wi"],
56
+ n8qw10: "f1bjia2o",
57
+ Bdrgwmp: ["ffh67wi", "f1d2448m"],
58
+ Bm4h7ae: "f15bsgw9",
59
+ B7ys5i9: "f14e48fq",
60
+ Busjfv9: "f18yb2kv",
61
+ Bhk32uz: "fd6o370",
62
+ Bf4ptjt: "fh1cnn4",
63
+ kclons: ["fy7oxxb", "f184ne2d"],
64
+ Bhdgwq3: "fpukqih",
65
+ Blkhhs4: ["f184ne2d", "fy7oxxb"],
66
+ Bqtpl0w: "frrh606",
67
+ clg4pj: ["f1v5zibi", "fo2hd23"],
68
+ hgwjuy: "ful5kiu",
69
+ Bonggc9: ["fo2hd23", "f1v5zibi"],
70
+ B1tsrr9: ["f1jqcqds", "ftffrms"],
71
+ Dah5zi: ["ftffrms", "f1jqcqds"],
72
+ Bkh64rk: ["f2e7qr6", "fsr1zz6"],
73
+ qqdqy8: ["fsr1zz6", "f2e7qr6"],
74
+ B6dhp37: "f1dvezut",
75
+ i03rao: ["fd0oaoj", "f1cwg4i8"],
76
+ Boxcth7: "fjvm52t",
77
+ Bsom6fd: ["f1cwg4i8", "fd0oaoj"],
78
+ J0r882: "fdiulkx",
79
+ Bjwuhne: "f1yalx80",
80
+ Ghsupd: ["fq22d5a", "f1jw7pan"],
81
+ Bule8hv: ["f1jw7pan", "fq22d5a"]
82
+ }
83
+ }, {
84
+ d: [".f10bgyvd{--fluent-TreeItem--level:1;}", ".f1h0rod3{--fluent-TreeItem--level:2;}", ".fgoqafk{--fluent-TreeItem--level:3;}", ".f75dvuh{--fluent-TreeItem--level:4;}", ".fqk7yw6{--fluent-TreeItem--level:5;}", ".f1r3z17b{--fluent-TreeItem--level:6;}", ".f1hrpd1h{--fluent-TreeItem--level:7;}", ".f1iy65d0{--fluent-TreeItem--level:8;}", ".ftg42e5{--fluent-TreeItem--level:9;}", ".fyat3t{--fluent-TreeItem--level:10;}", ".f10pi13n{position:relative;}", ".f1k6fduh{cursor:pointer;}", ".f13qh94s{display:grid;}", ".f1ewtqcl{box-sizing:border-box;}", ".ffh4ag3{grid-template-rows:auto auto;}", ".f1y1g942{grid-template-columns:minmax(0, 100%) minmax(0px, min-content);}", ".faz22wj{grid-template-areas:\"layout aside\" \"subtree subtree\";}", ".fhovq9v{background-color:var(--colorSubtleBackground);}", ".fkfq4zb{color:var(--colorNeutralForeground2);}", ".flk2ux3{padding-right:var(--spacingHorizontalNone);}", ".fkl3uby{padding-left:var(--spacingHorizontalNone);}", ".f8hki3x[data-fui-focus-visible]{border-top-color:transparent;}", ".f1d2448m[data-fui-focus-visible]{border-right-color:transparent;}", ".ffh67wi[data-fui-focus-visible]{border-left-color:transparent;}", ".f1bjia2o[data-fui-focus-visible]{border-bottom-color:transparent;}", ".f15bsgw9[data-fui-focus-visible]::after{content:\"\";}", ".f14e48fq[data-fui-focus-visible]::after{position:absolute;}", ".f18yb2kv[data-fui-focus-visible]::after{pointer-events:none;}", ".fd6o370[data-fui-focus-visible]::after{z-index:1;}", ".fh1cnn4[data-fui-focus-visible]::after{border-top-style:solid;}", ".fy7oxxb[data-fui-focus-visible]::after{border-right-style:solid;}", ".f184ne2d[data-fui-focus-visible]::after{border-left-style:solid;}", ".fpukqih[data-fui-focus-visible]::after{border-bottom-style:solid;}", ".frrh606[data-fui-focus-visible]::after{border-top-width:2px;}", ".f1v5zibi[data-fui-focus-visible]::after{border-right-width:2px;}", ".fo2hd23[data-fui-focus-visible]::after{border-left-width:2px;}", ".ful5kiu[data-fui-focus-visible]::after{border-bottom-width:2px;}", ".f1jqcqds[data-fui-focus-visible]::after{border-bottom-right-radius:var(--borderRadiusMedium);}", ".ftffrms[data-fui-focus-visible]::after{border-bottom-left-radius:var(--borderRadiusMedium);}", ".f2e7qr6[data-fui-focus-visible]::after{border-top-right-radius:var(--borderRadiusMedium);}", ".fsr1zz6[data-fui-focus-visible]::after{border-top-left-radius:var(--borderRadiusMedium);}", ".f1dvezut[data-fui-focus-visible]::after{border-top-color:var(--colorStrokeFocus2);}", ".fd0oaoj[data-fui-focus-visible]::after{border-right-color:var(--colorStrokeFocus2);}", ".f1cwg4i8[data-fui-focus-visible]::after{border-left-color:var(--colorStrokeFocus2);}", ".fjvm52t[data-fui-focus-visible]::after{border-bottom-color:var(--colorStrokeFocus2);}", ".fdiulkx[data-fui-focus-visible]::after{top:-2px;}", ".f1yalx80[data-fui-focus-visible]::after{bottom:-2px;}", ".fq22d5a[data-fui-focus-visible]::after{left:-2px;}", ".f1jw7pan[data-fui-focus-visible]::after{right:-2px;}"],
85
+ f: [".ftqa4ok:focus{outline-style:none;}"],
86
+ i: [".f2hkw1w:focus-visible{outline-style:none;}"]
87
+ });
88
+ /**
89
+ * Apply styling to the TreeItem slots based on the state
90
+ */
91
+ export const useTreeItemStyles_unstable = state => {
92
+ const rootStyles = useRootStyles();
93
+ const {
94
+ level
95
+ } = state;
96
+ state.root.className = mergeClasses(treeItemClassNames.root, isStaticallyDefinedLevel(level) && rootStyles[`level${level}`], rootStyles.base, rootStyles.focusIndicator, state.root.className);
97
+ return state;
98
+ };
99
+ function isStaticallyDefinedLevel(level) {
100
+ return level >= 1 && level <= 10;
101
+ }
102
+ //# sourceMappingURL=useTreeItemStyles.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__styles","mergeClasses","tokens","createFocusOutlineStyle","treeItemLevelToken","treeItemClassNames","root","useRootStyles","level1","iytv0q","level2","level3","level4","level5","level6","level7","level8","level9","level10","base","qhf8xq","Bceei9c","mc9l5x","B7ck84d","wkccdc","Budl1dq","zoa1oz","De3pzq","sj55zd","z189sj","focusIndicator","Brovlpu","B486eqv","B8q5s1w","Bci5o5g","n8qw10","Bdrgwmp","Bm4h7ae","B7ys5i9","Busjfv9","Bhk32uz","Bf4ptjt","kclons","Bhdgwq3","Blkhhs4","Bqtpl0w","clg4pj","hgwjuy","Bonggc9","B1tsrr9","Dah5zi","Bkh64rk","qqdqy8","B6dhp37","i03rao","Boxcth7","Bsom6fd","J0r882","Bjwuhne","Ghsupd","Bule8hv","d","f","i","useTreeItemStyles_unstable","state","rootStyles","level","className","isStaticallyDefinedLevel"],"sources":["../../../src/components/TreeItem/useTreeItemStyles.styles.ts"],"sourcesContent":["import { GriffelStyle, makeStyles, mergeClasses } from '@griffel/react';\nimport type { TreeItemCSSProperties, TreeItemSlots, TreeItemState } from './TreeItem.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\nimport { tokens } from '@fluentui/react-theme';\nimport { createFocusOutlineStyle } from '@fluentui/react-tabster';\nimport { treeItemLevelToken } from '../../utils/tokens';\n\nexport const treeItemClassNames: SlotClassNames<TreeItemSlots> = {\n root: 'fui-TreeItem',\n};\n\ntype StaticLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;\ntype StaticLevelProperty = `level${StaticLevel}`;\n\nconst useRootStyles = makeStyles({\n ...(Object.fromEntries(\n Array.from<never, [StaticLevelProperty, TreeItemCSSProperties]>({ length: 10 }, (_, index) => [\n `level${(index + 1) as StaticLevel}`,\n { [treeItemLevelToken]: index + 1 },\n ]),\n ) as Record<StaticLevelProperty, GriffelStyle>),\n base: {\n position: 'relative',\n cursor: 'pointer',\n display: 'grid',\n boxSizing: 'border-box',\n gridTemplateRows: 'auto auto',\n gridTemplateColumns: 'minmax(0, 100%) minmax(0px, min-content)',\n gridTemplateAreas: `\n \"layout aside\"\n \"subtree subtree\"\n `,\n backgroundColor: tokens.colorSubtleBackground,\n color: tokens.colorNeutralForeground2,\n paddingRight: tokens.spacingHorizontalNone,\n },\n focusIndicator: createFocusOutlineStyle(),\n});\n\n/**\n * Apply styling to the TreeItem slots based on the state\n */\nexport const useTreeItemStyles_unstable = (state: TreeItemState): TreeItemState => {\n const rootStyles = useRootStyles();\n\n const { level } = state;\n\n state.root.className = mergeClasses(\n treeItemClassNames.root,\n isStaticallyDefinedLevel(level) && rootStyles[`level${level}` as StaticLevelProperty],\n rootStyles.base,\n rootStyles.focusIndicator,\n state.root.className,\n );\n\n return state;\n};\n\nfunction isStaticallyDefinedLevel(level: number): level is StaticLevel {\n return level >= 1 && level <= 10;\n}\n"],"mappings":"AAAA,SAAAA,QAAA,EAAmCC,YAAY,QAAQ;AAGvD,SAASC,MAAM,QAAQ;AACvB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,kBAAkB,QAAQ;AAEnC,OAAO,MAAMC,kBAAA,GAAoD;EAC/DC,IAAA,EAAM;AACR;AAKA,MAAMC,aAAA,gBAAgBP,QAAA;EAAAQ,MAAA;IAAAC,MAAA;EAAA;EAAAC,MAAA;IAAAD,MAAA;EAAA;EAAAE,MAAA;IAAAF,MAAA;EAAA;EAAAG,MAAA;IAAAH,MAAA;EAAA;EAAAI,MAAA;IAAAJ,MAAA;EAAA;EAAAK,MAAA;IAAAL,MAAA;EAAA;EAAAM,MAAA;IAAAN,MAAA;EAAA;EAAAO,MAAA;IAAAP,MAAA;EAAA;EAAAQ,MAAA;IAAAR,MAAA;EAAA;EAAAS,OAAA;IAAAT,MAAA;EAAA;EAAAU,IAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,MAAA;EAAA;EAAAC,cAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;EAAA;AAAA;EAAAC,CAAA;EAAAC,CAAA;EAAAC,CAAA;AAAA,EAuBtB;AAEA;;;AAGA,OAAO,MAAMC,0BAAA,GAA8BC,KAAA,IAAwC;EACjF,MAAMC,UAAA,GAAa3D,aAAA;EAEnB,MAAM;IAAE4D;EAAK,CAAE,GAAGF,KAAA;EAElBA,KAAA,CAAM3D,IAAI,CAAC8D,SAAS,GAAGnE,YAAA,CACrBI,kBAAA,CAAmBC,IAAI,EACvB+D,wBAAA,CAAyBF,KAAA,KAAUD,UAAU,CAAE,QAAOC,KAAM,EAAC,CAAwB,EACrFD,UAAA,CAAW/C,IAAI,EACf+C,UAAA,CAAWpC,cAAc,EACzBmC,KAAA,CAAM3D,IAAI,CAAC8D,SAAS;EAGtB,OAAOH,KAAA;AACT;AAEA,SAASI,yBAAyBF,KAAa,EAAwB;EACrE,OAAOA,KAAA,IAAS,KAAKA,KAAA,IAAS;AAChC"}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { useTreeItemAside_unstable } from './useTreeItemAside';
3
+ import { renderTreeItemAside_unstable } from './renderTreeItemAside';
4
+ import { useTreeItemAsideStyles_unstable } from './useTreeItemAsideStyles.styles';
5
+ /**
6
+ * TreeItemAside component - represents a custom set of actionable elements that will be visible when a certain
7
+ * `TreeItem` is currently "active".
8
+ */
9
+ export const TreeItemAside = /*#__PURE__*/React.forwardRef((props, ref) => {
10
+ const state = useTreeItemAside_unstable(props, ref);
11
+ useTreeItemAsideStyles_unstable(state);
12
+ return renderTreeItemAside_unstable(state);
13
+ });
14
+ TreeItemAside.displayName = 'TreeItemAside';
15
+ //# sourceMappingURL=TreeItemAside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useTreeItemAside_unstable","renderTreeItemAside_unstable","useTreeItemAsideStyles_unstable","TreeItemAside","forwardRef","props","ref","state","displayName"],"sources":["../../../src/components/TreeItemAside/TreeItemAside.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useTreeItemAside_unstable } from './useTreeItemAside';\nimport { renderTreeItemAside_unstable } from './renderTreeItemAside';\nimport { useTreeItemAsideStyles_unstable } from './useTreeItemAsideStyles.styles';\nimport type { TreeItemAsideProps } from './TreeItemAside.types';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\n\n/**\n * TreeItemAside component - represents a custom set of actionable elements that will be visible when a certain\n * `TreeItem` is currently \"active\".\n */\nexport const TreeItemAside: ForwardRefComponent<TreeItemAsideProps> = React.forwardRef((props, ref) => {\n const state = useTreeItemAside_unstable(props, ref);\n\n useTreeItemAsideStyles_unstable(state);\n return renderTreeItemAside_unstable(state);\n});\n\nTreeItemAside.displayName = 'TreeItemAside';\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,4BAA4B,QAAQ;AAC7C,SAASC,+BAA+B,QAAQ;AAIhD;;;;AAIA,OAAO,MAAMC,aAAA,gBAAyDJ,KAAA,CAAMK,UAAU,CAAC,CAACC,KAAA,EAAOC,GAAA,KAAQ;EACrG,MAAMC,KAAA,GAAQP,yBAAA,CAA0BK,KAAA,EAAOC,GAAA;EAE/CJ,+BAAA,CAAgCK,KAAA;EAChC,OAAON,4BAAA,CAA6BM,KAAA;AACtC;AAEAJ,aAAA,CAAcK,WAAW,GAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TreeItemAside.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/components/TreeItemAside/TreeItemAside.types.ts"],"sourcesContent":["import { ButtonContextValue } from '@fluentui/react-button';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\nexport type TreeItemAsideSlots = {\n root: Slot<'div'>;\n};\n\n/**\n * TreeItemAside Props\n */\nexport type TreeItemAsideProps = ComponentProps<TreeItemAsideSlots> & {\n /**\n * boolean indicating if the aside content should behave as \"actions\"\n *\n * actionable elements are normally buttons, menus, or other focusable elements.\n * Those elements are only visibly available if the given tree item is currently active.\n */\n actions?: boolean;\n /**\n * Forces visibility of the aside content, even if they're actions\n */\n visible?: true;\n};\n\n/**\n * State used in rendering TreeItemAside\n */\nexport type TreeItemAsideState = ComponentState<TreeItemAsideSlots> & {\n actions: boolean;\n visible: boolean;\n buttonContextValue: ButtonContextValue;\n};\n"],"mappings":"AAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './TreeItemAside';
2
+ export * from './TreeItemAside.types';
3
+ export * from './renderTreeItemAside';
4
+ export * from './useTreeItemAside';
5
+ export * from './useTreeItemAsideStyles.styles';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/components/TreeItemAside/index.ts"],"sourcesContent":["export * from './TreeItemAside';\nexport * from './TreeItemAside.types';\nexport * from './renderTreeItemAside';\nexport * from './useTreeItemAside';\nexport * from './useTreeItemAsideStyles.styles';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc"}
@@ -0,0 +1,19 @@
1
+ /** @jsxRuntime classic */ /** @jsx createElement */import { createElement } from '@fluentui/react-jsx-runtime';
2
+ import { getSlotsNext } from '@fluentui/react-utilities';
3
+ import { ButtonContextProvider } from '@fluentui/react-button';
4
+ /**
5
+ * Render the final JSX of TreeItemAside
6
+ */
7
+ export const renderTreeItemAside_unstable = state => {
8
+ const {
9
+ slots,
10
+ slotProps
11
+ } = getSlotsNext(state);
12
+ if (!state.visible) {
13
+ return null;
14
+ }
15
+ return /*#__PURE__*/createElement(slots.root, slotProps.root, /*#__PURE__*/createElement(ButtonContextProvider, {
16
+ value: state.buttonContextValue
17
+ }, slotProps.root.children));
18
+ };
19
+ //# sourceMappingURL=renderTreeItemAside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createElement","getSlotsNext","ButtonContextProvider","renderTreeItemAside_unstable","state","slots","slotProps","visible","root","value","buttonContextValue","children"],"sources":["../../../src/components/TreeItemAside/renderTreeItemAside.tsx"],"sourcesContent":["/** @jsxRuntime classic */\n/** @jsx createElement */\n\nimport { createElement } from '@fluentui/react-jsx-runtime';\nimport { getSlotsNext } from '@fluentui/react-utilities';\nimport { ButtonContextProvider } from '@fluentui/react-button';\nimport type { TreeItemAsideState, TreeItemAsideSlots } from './TreeItemAside.types';\n\n/**\n * Render the final JSX of TreeItemAside\n */\nexport const renderTreeItemAside_unstable = (state: TreeItemAsideState) => {\n const { slots, slotProps } = getSlotsNext<TreeItemAsideSlots>(state);\n\n if (!state.visible) {\n return null;\n }\n\n return (\n <slots.root {...slotProps.root}>\n <ButtonContextProvider value={state.buttonContextValue}>{slotProps.root.children}</ButtonContextProvider>\n </slots.root>\n );\n};\n"],"mappings":"AAAA,2BACA,yBAEA,SAASA,aAAa,QAAQ;AAC9B,SAASC,YAAY,QAAQ;AAC7B,SAASC,qBAAqB,QAAQ;AAGtC;;;AAGA,OAAO,MAAMC,4BAAA,GAAgCC,KAAA,IAA8B;EACzE,MAAM;IAAEC,KAAA;IAAOC;EAAS,CAAE,GAAGL,YAAA,CAAiCG,KAAA;EAE9D,IAAI,CAACA,KAAA,CAAMG,OAAO,EAAE;IAClB,OAAO,IAAI;EACb;EAEA,oBACEP,aAlBJ,CAkBKK,KAAA,CAAMG,IAAI,EAAKF,SAAA,CAAUE,IAAI,eAC5BR,aAnBN,CAmBOE,qBAAA;IAAsBO,KAAA,EAAOL,KAAA,CAAMM;KAAqBJ,SAAA,CAAUE,IAAI,CAACG,QAAQ;AAGtF"}