@fluentui/react-tree 9.8.6 → 9.8.7
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.
- package/CHANGELOG.md +13 -2
- package/lib/components/TreeItemLayout/useTreeItemLayout.js +10 -2
- package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +10 -2
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
# Change Log - @fluentui/react-tree
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Thu, 28 Nov 2024 09:29:44 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## [9.8.7](https://github.com/microsoft/fluentui/tree/@fluentui/react-tree_v9.8.7)
|
|
8
|
+
|
|
9
|
+
Thu, 28 Nov 2024 09:29:44 GMT
|
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-tree_v9.8.6..@fluentui/react-tree_v9.8.7)
|
|
11
|
+
|
|
12
|
+
### Patches
|
|
13
|
+
|
|
14
|
+
- bugfix: ensure that onActionVisibilityChange is properly invoked ([PR #33320](https://github.com/microsoft/fluentui/pull/33320) by bernardo.sunderhus@gmail.com)
|
|
15
|
+
- Bump @fluentui/react-motion-components-preview to v0.3.1 ([PR #33331](https://github.com/microsoft/fluentui/pull/33331) by beachball)
|
|
16
|
+
- Bump @fluentui/react-motion to v9.6.2 ([PR #33331](https://github.com/microsoft/fluentui/pull/33331) by beachball)
|
|
17
|
+
|
|
7
18
|
## [9.8.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-tree_v9.8.6)
|
|
8
19
|
|
|
9
|
-
Mon, 18 Nov 2024 09:
|
|
20
|
+
Mon, 18 Nov 2024 09:44:40 GMT
|
|
10
21
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-tree_v9.8.5..@fluentui/react-tree_v9.8.6)
|
|
11
22
|
|
|
12
23
|
### Patches
|
|
@@ -49,6 +49,9 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
49
49
|
event,
|
|
50
50
|
type: event.type
|
|
51
51
|
});
|
|
52
|
+
if (event.defaultPrevented) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
52
55
|
setIsActionsVisible(true);
|
|
53
56
|
}
|
|
54
57
|
}, [
|
|
@@ -69,6 +72,9 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
69
72
|
event,
|
|
70
73
|
type: event.type
|
|
71
74
|
});
|
|
75
|
+
if (event.defaultPrevented) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
72
78
|
setIsActionsVisible(true);
|
|
73
79
|
return;
|
|
74
80
|
}
|
|
@@ -80,6 +86,9 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
80
86
|
event,
|
|
81
87
|
type: event.type
|
|
82
88
|
});
|
|
89
|
+
if (event.defaultPrevented) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
83
92
|
setIsActionsVisible(false);
|
|
84
93
|
}, [
|
|
85
94
|
setIsActionsVisible,
|
|
@@ -131,7 +140,7 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
131
140
|
}
|
|
132
141
|
const hasActions = Boolean(props.actions);
|
|
133
142
|
React.useEffect(()=>{
|
|
134
|
-
if (treeItemRef.current && hasActions
|
|
143
|
+
if (treeItemRef.current && hasActions) {
|
|
135
144
|
const treeItemElement = treeItemRef.current;
|
|
136
145
|
const handleMouseOver = setActionsVisibleIfNotFromSubtree;
|
|
137
146
|
const handleMouseOut = setActionsInvisibleIfNotFromSubtree;
|
|
@@ -151,7 +160,6 @@ import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
|
151
160
|
}, [
|
|
152
161
|
hasActions,
|
|
153
162
|
treeItemRef,
|
|
154
|
-
isActionsVisibleFromProps,
|
|
155
163
|
setActionsVisibleIfNotFromSubtree,
|
|
156
164
|
setActionsInvisibleIfNotFromSubtree
|
|
157
165
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeItemLayout/useTreeItemLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n getIntrinsicElementProps,\n isResolvedShorthand,\n useMergedRefs,\n slot,\n useEventCallback,\n elementContains,\n useControllableState,\n} from '@fluentui/react-utilities';\nimport { useTreeItemContext_unstable, useTreeContext_unstable } from '../../contexts';\nimport type {\n TreeItemLayoutActionSlotProps,\n TreeItemLayoutActionVisibilityChangeData,\n TreeItemLayoutProps,\n TreeItemLayoutState,\n} from './TreeItemLayout.types';\nimport { Checkbox, CheckboxProps } from '@fluentui/react-checkbox';\nimport { Radio, RadioProps } from '@fluentui/react-radio';\nimport { TreeItemChevron } from '../TreeItemChevron';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Create the state required to render TreeItemLayout.\n *\n * The returned state can be modified with hooks such as useTreeItemLayoutStyles_unstable,\n * before being passed to renderTreeItemLayout_unstable.\n *\n * @param props - props from this instance of TreeItemLayout\n * @param ref - reference to root HTMLElement of TreeItemLayout\n */\nexport const useTreeItemLayout_unstable = (\n props: TreeItemLayoutProps,\n ref: React.Ref<HTMLElement>,\n): TreeItemLayoutState => {\n 'use no memo';\n\n const { main, iconAfter, iconBefore } = props;\n\n const layoutRef = useTreeItemContext_unstable(ctx => ctx.layoutRef);\n const selectionMode = useTreeContext_unstable(ctx => ctx.selectionMode);\n\n const [isActionsVisibleFromProps, onActionVisibilityChange]: [\n TreeItemLayoutActionSlotProps['visible'],\n TreeItemLayoutActionSlotProps['onVisibilityChange'],\n ] = isResolvedShorthand(props.actions)\n ? // .visible .onVisibilityChange prop should not be propagated to the DOM\n [props.actions.visible, props.actions.onVisibilityChange]\n : [undefined, undefined];\n\n const [isActionsVisible, setIsActionsVisible] = useControllableState({\n state: isActionsVisibleFromProps,\n initialState: false,\n });\n\n const selectionRef = useTreeItemContext_unstable(ctx => ctx.selectionRef);\n const expandIconRef = useTreeItemContext_unstable(ctx => ctx.expandIconRef);\n const actionsRef = useTreeItemContext_unstable(ctx => ctx.actionsRef);\n const actionsRefInternal = React.useRef<HTMLDivElement>(null);\n const treeItemRef = useTreeItemContext_unstable(ctx => ctx.treeItemRef);\n const subtreeRef = useTreeItemContext_unstable(ctx => ctx.subtreeRef);\n const checked = useTreeItemContext_unstable(ctx => ctx.checked);\n const isBranch = useTreeItemContext_unstable(ctx => ctx.itemType === 'branch');\n\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(treeItemRef);\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(subtreeRef);\n\n const setActionsVisibleIfNotFromSubtree = React.useCallback(\n (event: MouseEvent | FocusEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(true);\n }\n },\n [subtreeRef, setIsActionsVisible, onActionVisibilityChange],\n );\n\n const setActionsInvisibleIfNotFromSubtree = React.useCallback(\n (event: FocusEvent | MouseEvent) => {\n const isRelatedTargetFromActions = () =>\n Boolean(actionsRefInternal.current && elementContains(actionsRefInternal.current, event.relatedTarget as Node));\n const isRelatedTargetFromTreeItem = () =>\n Boolean(treeItemRef.current && elementContains(treeItemRef.current, event.relatedTarget as Node));\n const isTargetFromActions = () => Boolean(actionsRefInternal.current?.contains(event.target as Node));\n if (isRelatedTargetFromActions()) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(true);\n return;\n }\n if (isTargetFromActions() && isRelatedTargetFromTreeItem()) {\n return;\n }\n onActionVisibilityChange?.(event, {\n visible: false,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(false);\n },\n [setIsActionsVisible, onActionVisibilityChange, treeItemRef],\n );\n\n const expandIcon = slot.optional(props.expandIcon, {\n renderByDefault: isBranch,\n defaultProps: {\n children: <TreeItemChevron />,\n 'aria-hidden': true,\n },\n elementType: 'div',\n });\n const expandIconRefs = useMergedRefs(expandIcon?.ref, expandIconRef);\n if (expandIcon) {\n expandIcon.ref = expandIconRefs;\n }\n const arrowNavigationProps = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const actions = isActionsVisible\n ? slot.optional(props.actions, {\n defaultProps: { ...arrowNavigationProps, role: 'toolbar' },\n elementType: 'div',\n })\n : undefined;\n delete actions?.visible;\n delete actions?.onVisibilityChange;\n const actionsRefs = useMergedRefs(actions?.ref, actionsRef, actionsRefInternal);\n const handleActionsBlur = useEventCallback((event: React.FocusEvent<HTMLDivElement>) => {\n if (isResolvedShorthand(props.actions)) {\n props.actions.onBlur?.(event);\n }\n const isRelatedTargetFromActions = Boolean(elementContains(event.currentTarget, event.relatedTarget as Node));\n onActionVisibilityChange?.(event, {\n visible: isRelatedTargetFromActions,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(isRelatedTargetFromActions);\n });\n if (actions) {\n actions.ref = actionsRefs;\n actions.onBlur = handleActionsBlur;\n }\n\n const hasActions = Boolean(props.actions);\n\n React.useEffect(() => {\n if (treeItemRef.current && hasActions && isActionsVisibleFromProps === undefined) {\n const treeItemElement = treeItemRef.current;\n\n const handleMouseOver = setActionsVisibleIfNotFromSubtree;\n const handleMouseOut = setActionsInvisibleIfNotFromSubtree;\n const handleFocus = setActionsVisibleIfNotFromSubtree;\n const handleBlur = setActionsInvisibleIfNotFromSubtree;\n\n treeItemElement.addEventListener('mouseover', handleMouseOver);\n treeItemElement.addEventListener('mouseout', handleMouseOut);\n treeItemElement.addEventListener('focus', handleFocus);\n treeItemElement.addEventListener('blur', handleBlur);\n\n return () => {\n treeItemElement.removeEventListener('mouseover', handleMouseOver);\n treeItemElement.removeEventListener('mouseout', handleMouseOut);\n treeItemElement.removeEventListener('focus', handleFocus);\n treeItemElement.removeEventListener('blur', handleBlur);\n };\n }\n }, [\n hasActions,\n treeItemRef,\n isActionsVisibleFromProps,\n setActionsVisibleIfNotFromSubtree,\n setActionsInvisibleIfNotFromSubtree,\n ]);\n\n return {\n components: {\n root: 'div',\n expandIcon: 'div',\n iconBefore: 'div',\n main: 'div',\n iconAfter: 'div',\n actions: 'div',\n aside: 'div',\n // Casting here to a union between checkbox and radio\n selector: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<CheckboxProps | RadioProps>,\n },\n buttonContextValue: { size: 'small' },\n root: slot.always(\n getIntrinsicElementProps('div', {\n ...props,\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: useMergedRefs(ref, layoutRef) as React.Ref<HTMLDivElement>,\n }),\n {\n elementType: 'div',\n },\n ),\n iconBefore: slot.optional(iconBefore, { elementType: 'div' }),\n main: slot.always(main, { elementType: 'div' }),\n iconAfter: slot.optional(iconAfter, { elementType: 'div' }),\n aside: !isActionsVisible ? slot.optional(props.aside, { elementType: 'div' }) : undefined,\n actions,\n expandIcon,\n selector: slot.optional(props.selector, {\n renderByDefault: selectionMode !== 'none',\n defaultProps: {\n checked,\n tabIndex: -1,\n 'aria-hidden': true,\n ref: selectionRef,\n // casting here to a union between checkbox and radio\n // since ref is not present on the selector signature\n // FIXME: look into Slot type to see if we can make this work\n } as CheckboxProps | RadioProps,\n elementType: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<\n CheckboxProps | RadioProps\n >,\n }),\n };\n};\n\nfunction assertIsRefObject<Value>(ref?: React.Ref<Value>): asserts ref is React.RefObject<Value> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof ref !== 'object' || ref === null || !('current' in ref)) {\n throw new Error(`\n @fluentui/react-tree [${useTreeItemLayout_unstable.name}]:\n Internal Error: contextual ref is not a RefObject! Please report this bug immediately, as contextual refs should be RefObjects.\n `);\n }\n }\n}\n"],"names":["React","getIntrinsicElementProps","isResolvedShorthand","useMergedRefs","slot","useEventCallback","elementContains","useControllableState","useTreeItemContext_unstable","useTreeContext_unstable","Checkbox","Radio","TreeItemChevron","useArrowNavigationGroup","useTreeItemLayout_unstable","props","ref","main","iconAfter","iconBefore","layoutRef","ctx","selectionMode","isActionsVisibleFromProps","onActionVisibilityChange","actions","visible","onVisibilityChange","undefined","isActionsVisible","setIsActionsVisible","state","initialState","selectionRef","expandIconRef","actionsRef","actionsRefInternal","useRef","treeItemRef","subtreeRef","checked","isBranch","itemType","assertIsRefObject","setActionsVisibleIfNotFromSubtree","useCallback","event","isTargetFromSubtree","Boolean","current","target","type","setActionsInvisibleIfNotFromSubtree","isRelatedTargetFromActions","relatedTarget","isRelatedTargetFromTreeItem","isTargetFromActions","contains","expandIcon","optional","renderByDefault","defaultProps","children","elementType","expandIconRefs","arrowNavigationProps","circular","axis","role","actionsRefs","handleActionsBlur","onBlur","currentTarget","hasActions","useEffect","treeItemElement","handleMouseOver","handleMouseOut","handleFocus","handleBlur","addEventListener","removeEventListener","components","root","aside","selector","buttonContextValue","size","always","tabIndex","process","env","NODE_ENV","Error","name"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/TreeItemLayout/useTreeItemLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n getIntrinsicElementProps,\n isResolvedShorthand,\n useMergedRefs,\n slot,\n useEventCallback,\n elementContains,\n useControllableState,\n} from '@fluentui/react-utilities';\nimport { useTreeItemContext_unstable, useTreeContext_unstable } from '../../contexts';\nimport type {\n TreeItemLayoutActionSlotProps,\n TreeItemLayoutActionVisibilityChangeData,\n TreeItemLayoutProps,\n TreeItemLayoutState,\n} from './TreeItemLayout.types';\nimport { Checkbox, CheckboxProps } from '@fluentui/react-checkbox';\nimport { Radio, RadioProps } from '@fluentui/react-radio';\nimport { TreeItemChevron } from '../TreeItemChevron';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Create the state required to render TreeItemLayout.\n *\n * The returned state can be modified with hooks such as useTreeItemLayoutStyles_unstable,\n * before being passed to renderTreeItemLayout_unstable.\n *\n * @param props - props from this instance of TreeItemLayout\n * @param ref - reference to root HTMLElement of TreeItemLayout\n */\nexport const useTreeItemLayout_unstable = (\n props: TreeItemLayoutProps,\n ref: React.Ref<HTMLElement>,\n): TreeItemLayoutState => {\n 'use no memo';\n\n const { main, iconAfter, iconBefore } = props;\n\n const layoutRef = useTreeItemContext_unstable(ctx => ctx.layoutRef);\n const selectionMode = useTreeContext_unstable(ctx => ctx.selectionMode);\n\n const [isActionsVisibleFromProps, onActionVisibilityChange]: [\n TreeItemLayoutActionSlotProps['visible'],\n TreeItemLayoutActionSlotProps['onVisibilityChange'],\n ] = isResolvedShorthand(props.actions)\n ? // .visible .onVisibilityChange prop should not be propagated to the DOM\n [props.actions.visible, props.actions.onVisibilityChange]\n : [undefined, undefined];\n\n const [isActionsVisible, setIsActionsVisible] = useControllableState({\n state: isActionsVisibleFromProps,\n initialState: false,\n });\n\n const selectionRef = useTreeItemContext_unstable(ctx => ctx.selectionRef);\n const expandIconRef = useTreeItemContext_unstable(ctx => ctx.expandIconRef);\n const actionsRef = useTreeItemContext_unstable(ctx => ctx.actionsRef);\n const actionsRefInternal = React.useRef<HTMLDivElement>(null);\n const treeItemRef = useTreeItemContext_unstable(ctx => ctx.treeItemRef);\n const subtreeRef = useTreeItemContext_unstable(ctx => ctx.subtreeRef);\n const checked = useTreeItemContext_unstable(ctx => ctx.checked);\n const isBranch = useTreeItemContext_unstable(ctx => ctx.itemType === 'branch');\n\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(treeItemRef);\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(subtreeRef);\n\n const setActionsVisibleIfNotFromSubtree = React.useCallback(\n (event: MouseEvent | FocusEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(true);\n }\n },\n [subtreeRef, setIsActionsVisible, onActionVisibilityChange],\n );\n\n const setActionsInvisibleIfNotFromSubtree = React.useCallback(\n (event: FocusEvent | MouseEvent) => {\n const isRelatedTargetFromActions = () =>\n Boolean(actionsRefInternal.current && elementContains(actionsRefInternal.current, event.relatedTarget as Node));\n const isRelatedTargetFromTreeItem = () =>\n Boolean(treeItemRef.current && elementContains(treeItemRef.current, event.relatedTarget as Node));\n const isTargetFromActions = () => Boolean(actionsRefInternal.current?.contains(event.target as Node));\n if (isRelatedTargetFromActions()) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(true);\n return;\n }\n if (isTargetFromActions() && isRelatedTargetFromTreeItem()) {\n return;\n }\n onActionVisibilityChange?.(event, {\n visible: false,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(false);\n },\n [setIsActionsVisible, onActionVisibilityChange, treeItemRef],\n );\n\n const expandIcon = slot.optional(props.expandIcon, {\n renderByDefault: isBranch,\n defaultProps: {\n children: <TreeItemChevron />,\n 'aria-hidden': true,\n },\n elementType: 'div',\n });\n const expandIconRefs = useMergedRefs(expandIcon?.ref, expandIconRef);\n if (expandIcon) {\n expandIcon.ref = expandIconRefs;\n }\n const arrowNavigationProps = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const actions = isActionsVisible\n ? slot.optional(props.actions, {\n defaultProps: { ...arrowNavigationProps, role: 'toolbar' },\n elementType: 'div',\n })\n : undefined;\n delete actions?.visible;\n delete actions?.onVisibilityChange;\n const actionsRefs = useMergedRefs(actions?.ref, actionsRef, actionsRefInternal);\n const handleActionsBlur = useEventCallback((event: React.FocusEvent<HTMLDivElement>) => {\n if (isResolvedShorthand(props.actions)) {\n props.actions.onBlur?.(event);\n }\n const isRelatedTargetFromActions = Boolean(elementContains(event.currentTarget, event.relatedTarget as Node));\n onActionVisibilityChange?.(event, {\n visible: isRelatedTargetFromActions,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(isRelatedTargetFromActions);\n });\n if (actions) {\n actions.ref = actionsRefs;\n actions.onBlur = handleActionsBlur;\n }\n\n const hasActions = Boolean(props.actions);\n\n React.useEffect(() => {\n if (treeItemRef.current && hasActions) {\n const treeItemElement = treeItemRef.current;\n\n const handleMouseOver = setActionsVisibleIfNotFromSubtree;\n const handleMouseOut = setActionsInvisibleIfNotFromSubtree;\n const handleFocus = setActionsVisibleIfNotFromSubtree;\n const handleBlur = setActionsInvisibleIfNotFromSubtree;\n\n treeItemElement.addEventListener('mouseover', handleMouseOver);\n treeItemElement.addEventListener('mouseout', handleMouseOut);\n treeItemElement.addEventListener('focus', handleFocus);\n treeItemElement.addEventListener('blur', handleBlur);\n\n return () => {\n treeItemElement.removeEventListener('mouseover', handleMouseOver);\n treeItemElement.removeEventListener('mouseout', handleMouseOut);\n treeItemElement.removeEventListener('focus', handleFocus);\n treeItemElement.removeEventListener('blur', handleBlur);\n };\n }\n }, [hasActions, treeItemRef, setActionsVisibleIfNotFromSubtree, setActionsInvisibleIfNotFromSubtree]);\n\n return {\n components: {\n root: 'div',\n expandIcon: 'div',\n iconBefore: 'div',\n main: 'div',\n iconAfter: 'div',\n actions: 'div',\n aside: 'div',\n // Casting here to a union between checkbox and radio\n selector: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<CheckboxProps | RadioProps>,\n },\n buttonContextValue: { size: 'small' },\n root: slot.always(\n getIntrinsicElementProps('div', {\n ...props,\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: useMergedRefs(ref, layoutRef) as React.Ref<HTMLDivElement>,\n }),\n {\n elementType: 'div',\n },\n ),\n iconBefore: slot.optional(iconBefore, { elementType: 'div' }),\n main: slot.always(main, { elementType: 'div' }),\n iconAfter: slot.optional(iconAfter, { elementType: 'div' }),\n aside: !isActionsVisible ? slot.optional(props.aside, { elementType: 'div' }) : undefined,\n actions,\n expandIcon,\n selector: slot.optional(props.selector, {\n renderByDefault: selectionMode !== 'none',\n defaultProps: {\n checked,\n tabIndex: -1,\n 'aria-hidden': true,\n ref: selectionRef,\n // casting here to a union between checkbox and radio\n // since ref is not present on the selector signature\n // FIXME: look into Slot type to see if we can make this work\n } as CheckboxProps | RadioProps,\n elementType: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<\n CheckboxProps | RadioProps\n >,\n }),\n };\n};\n\nfunction assertIsRefObject<Value>(ref?: React.Ref<Value>): asserts ref is React.RefObject<Value> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof ref !== 'object' || ref === null || !('current' in ref)) {\n throw new Error(`\n @fluentui/react-tree [${useTreeItemLayout_unstable.name}]:\n Internal Error: contextual ref is not a RefObject! Please report this bug immediately, as contextual refs should be RefObjects.\n `);\n }\n }\n}\n"],"names":["React","getIntrinsicElementProps","isResolvedShorthand","useMergedRefs","slot","useEventCallback","elementContains","useControllableState","useTreeItemContext_unstable","useTreeContext_unstable","Checkbox","Radio","TreeItemChevron","useArrowNavigationGroup","useTreeItemLayout_unstable","props","ref","main","iconAfter","iconBefore","layoutRef","ctx","selectionMode","isActionsVisibleFromProps","onActionVisibilityChange","actions","visible","onVisibilityChange","undefined","isActionsVisible","setIsActionsVisible","state","initialState","selectionRef","expandIconRef","actionsRef","actionsRefInternal","useRef","treeItemRef","subtreeRef","checked","isBranch","itemType","assertIsRefObject","setActionsVisibleIfNotFromSubtree","useCallback","event","isTargetFromSubtree","Boolean","current","target","type","defaultPrevented","setActionsInvisibleIfNotFromSubtree","isRelatedTargetFromActions","relatedTarget","isRelatedTargetFromTreeItem","isTargetFromActions","contains","expandIcon","optional","renderByDefault","defaultProps","children","elementType","expandIconRefs","arrowNavigationProps","circular","axis","role","actionsRefs","handleActionsBlur","onBlur","currentTarget","hasActions","useEffect","treeItemElement","handleMouseOver","handleMouseOut","handleFocus","handleBlur","addEventListener","removeEventListener","components","root","aside","selector","buttonContextValue","size","always","tabIndex","process","env","NODE_ENV","Error","name"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -52,6 +52,9 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
52
52
|
event,
|
|
53
53
|
type: event.type
|
|
54
54
|
});
|
|
55
|
+
if (event.defaultPrevented) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
55
58
|
setIsActionsVisible(true);
|
|
56
59
|
}
|
|
57
60
|
}, [
|
|
@@ -72,6 +75,9 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
72
75
|
event,
|
|
73
76
|
type: event.type
|
|
74
77
|
});
|
|
78
|
+
if (event.defaultPrevented) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
75
81
|
setIsActionsVisible(true);
|
|
76
82
|
return;
|
|
77
83
|
}
|
|
@@ -83,6 +89,9 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
83
89
|
event,
|
|
84
90
|
type: event.type
|
|
85
91
|
});
|
|
92
|
+
if (event.defaultPrevented) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
86
95
|
setIsActionsVisible(false);
|
|
87
96
|
}, [
|
|
88
97
|
setIsActionsVisible,
|
|
@@ -134,7 +143,7 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
134
143
|
}
|
|
135
144
|
const hasActions = Boolean(props.actions);
|
|
136
145
|
_react.useEffect(()=>{
|
|
137
|
-
if (treeItemRef.current && hasActions
|
|
146
|
+
if (treeItemRef.current && hasActions) {
|
|
138
147
|
const treeItemElement = treeItemRef.current;
|
|
139
148
|
const handleMouseOver = setActionsVisibleIfNotFromSubtree;
|
|
140
149
|
const handleMouseOut = setActionsInvisibleIfNotFromSubtree;
|
|
@@ -154,7 +163,6 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
154
163
|
}, [
|
|
155
164
|
hasActions,
|
|
156
165
|
treeItemRef,
|
|
157
|
-
isActionsVisibleFromProps,
|
|
158
166
|
setActionsVisibleIfNotFromSubtree,
|
|
159
167
|
setActionsInvisibleIfNotFromSubtree
|
|
160
168
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeItemLayout/useTreeItemLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n getIntrinsicElementProps,\n isResolvedShorthand,\n useMergedRefs,\n slot,\n useEventCallback,\n elementContains,\n useControllableState,\n} from '@fluentui/react-utilities';\nimport { useTreeItemContext_unstable, useTreeContext_unstable } from '../../contexts';\nimport type {\n TreeItemLayoutActionSlotProps,\n TreeItemLayoutActionVisibilityChangeData,\n TreeItemLayoutProps,\n TreeItemLayoutState,\n} from './TreeItemLayout.types';\nimport { Checkbox, CheckboxProps } from '@fluentui/react-checkbox';\nimport { Radio, RadioProps } from '@fluentui/react-radio';\nimport { TreeItemChevron } from '../TreeItemChevron';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Create the state required to render TreeItemLayout.\n *\n * The returned state can be modified with hooks such as useTreeItemLayoutStyles_unstable,\n * before being passed to renderTreeItemLayout_unstable.\n *\n * @param props - props from this instance of TreeItemLayout\n * @param ref - reference to root HTMLElement of TreeItemLayout\n */\nexport const useTreeItemLayout_unstable = (\n props: TreeItemLayoutProps,\n ref: React.Ref<HTMLElement>,\n): TreeItemLayoutState => {\n 'use no memo';\n\n const { main, iconAfter, iconBefore } = props;\n\n const layoutRef = useTreeItemContext_unstable(ctx => ctx.layoutRef);\n const selectionMode = useTreeContext_unstable(ctx => ctx.selectionMode);\n\n const [isActionsVisibleFromProps, onActionVisibilityChange]: [\n TreeItemLayoutActionSlotProps['visible'],\n TreeItemLayoutActionSlotProps['onVisibilityChange'],\n ] = isResolvedShorthand(props.actions)\n ? // .visible .onVisibilityChange prop should not be propagated to the DOM\n [props.actions.visible, props.actions.onVisibilityChange]\n : [undefined, undefined];\n\n const [isActionsVisible, setIsActionsVisible] = useControllableState({\n state: isActionsVisibleFromProps,\n initialState: false,\n });\n\n const selectionRef = useTreeItemContext_unstable(ctx => ctx.selectionRef);\n const expandIconRef = useTreeItemContext_unstable(ctx => ctx.expandIconRef);\n const actionsRef = useTreeItemContext_unstable(ctx => ctx.actionsRef);\n const actionsRefInternal = React.useRef<HTMLDivElement>(null);\n const treeItemRef = useTreeItemContext_unstable(ctx => ctx.treeItemRef);\n const subtreeRef = useTreeItemContext_unstable(ctx => ctx.subtreeRef);\n const checked = useTreeItemContext_unstable(ctx => ctx.checked);\n const isBranch = useTreeItemContext_unstable(ctx => ctx.itemType === 'branch');\n\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(treeItemRef);\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(subtreeRef);\n\n const setActionsVisibleIfNotFromSubtree = React.useCallback(\n (event: MouseEvent | FocusEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(true);\n }\n },\n [subtreeRef, setIsActionsVisible, onActionVisibilityChange],\n );\n\n const setActionsInvisibleIfNotFromSubtree = React.useCallback(\n (event: FocusEvent | MouseEvent) => {\n const isRelatedTargetFromActions = () =>\n Boolean(actionsRefInternal.current && elementContains(actionsRefInternal.current, event.relatedTarget as Node));\n const isRelatedTargetFromTreeItem = () =>\n Boolean(treeItemRef.current && elementContains(treeItemRef.current, event.relatedTarget as Node));\n const isTargetFromActions = () => Boolean(actionsRefInternal.current?.contains(event.target as Node));\n if (isRelatedTargetFromActions()) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(true);\n return;\n }\n if (isTargetFromActions() && isRelatedTargetFromTreeItem()) {\n return;\n }\n onActionVisibilityChange?.(event, {\n visible: false,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(false);\n },\n [setIsActionsVisible, onActionVisibilityChange, treeItemRef],\n );\n\n const expandIcon = slot.optional(props.expandIcon, {\n renderByDefault: isBranch,\n defaultProps: {\n children: <TreeItemChevron />,\n 'aria-hidden': true,\n },\n elementType: 'div',\n });\n const expandIconRefs = useMergedRefs(expandIcon?.ref, expandIconRef);\n if (expandIcon) {\n expandIcon.ref = expandIconRefs;\n }\n const arrowNavigationProps = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const actions = isActionsVisible\n ? slot.optional(props.actions, {\n defaultProps: { ...arrowNavigationProps, role: 'toolbar' },\n elementType: 'div',\n })\n : undefined;\n delete actions?.visible;\n delete actions?.onVisibilityChange;\n const actionsRefs = useMergedRefs(actions?.ref, actionsRef, actionsRefInternal);\n const handleActionsBlur = useEventCallback((event: React.FocusEvent<HTMLDivElement>) => {\n if (isResolvedShorthand(props.actions)) {\n props.actions.onBlur?.(event);\n }\n const isRelatedTargetFromActions = Boolean(elementContains(event.currentTarget, event.relatedTarget as Node));\n onActionVisibilityChange?.(event, {\n visible: isRelatedTargetFromActions,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(isRelatedTargetFromActions);\n });\n if (actions) {\n actions.ref = actionsRefs;\n actions.onBlur = handleActionsBlur;\n }\n\n const hasActions = Boolean(props.actions);\n\n React.useEffect(() => {\n if (treeItemRef.current && hasActions && isActionsVisibleFromProps === undefined) {\n const treeItemElement = treeItemRef.current;\n\n const handleMouseOver = setActionsVisibleIfNotFromSubtree;\n const handleMouseOut = setActionsInvisibleIfNotFromSubtree;\n const handleFocus = setActionsVisibleIfNotFromSubtree;\n const handleBlur = setActionsInvisibleIfNotFromSubtree;\n\n treeItemElement.addEventListener('mouseover', handleMouseOver);\n treeItemElement.addEventListener('mouseout', handleMouseOut);\n treeItemElement.addEventListener('focus', handleFocus);\n treeItemElement.addEventListener('blur', handleBlur);\n\n return () => {\n treeItemElement.removeEventListener('mouseover', handleMouseOver);\n treeItemElement.removeEventListener('mouseout', handleMouseOut);\n treeItemElement.removeEventListener('focus', handleFocus);\n treeItemElement.removeEventListener('blur', handleBlur);\n };\n }\n }, [\n hasActions,\n treeItemRef,\n isActionsVisibleFromProps,\n setActionsVisibleIfNotFromSubtree,\n setActionsInvisibleIfNotFromSubtree,\n ]);\n\n return {\n components: {\n root: 'div',\n expandIcon: 'div',\n iconBefore: 'div',\n main: 'div',\n iconAfter: 'div',\n actions: 'div',\n aside: 'div',\n // Casting here to a union between checkbox and radio\n selector: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<CheckboxProps | RadioProps>,\n },\n buttonContextValue: { size: 'small' },\n root: slot.always(\n getIntrinsicElementProps('div', {\n ...props,\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: useMergedRefs(ref, layoutRef) as React.Ref<HTMLDivElement>,\n }),\n {\n elementType: 'div',\n },\n ),\n iconBefore: slot.optional(iconBefore, { elementType: 'div' }),\n main: slot.always(main, { elementType: 'div' }),\n iconAfter: slot.optional(iconAfter, { elementType: 'div' }),\n aside: !isActionsVisible ? slot.optional(props.aside, { elementType: 'div' }) : undefined,\n actions,\n expandIcon,\n selector: slot.optional(props.selector, {\n renderByDefault: selectionMode !== 'none',\n defaultProps: {\n checked,\n tabIndex: -1,\n 'aria-hidden': true,\n ref: selectionRef,\n // casting here to a union between checkbox and radio\n // since ref is not present on the selector signature\n // FIXME: look into Slot type to see if we can make this work\n } as CheckboxProps | RadioProps,\n elementType: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<\n CheckboxProps | RadioProps\n >,\n }),\n };\n};\n\nfunction assertIsRefObject<Value>(ref?: React.Ref<Value>): asserts ref is React.RefObject<Value> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof ref !== 'object' || ref === null || !('current' in ref)) {\n throw new Error(`\n @fluentui/react-tree [${useTreeItemLayout_unstable.name}]:\n Internal Error: contextual ref is not a RefObject! Please report this bug immediately, as contextual refs should be RefObjects.\n `);\n }\n }\n}\n"],"names":["useTreeItemLayout_unstable","props","ref","main","iconAfter","iconBefore","layoutRef","useTreeItemContext_unstable","ctx","selectionMode","useTreeContext_unstable","isActionsVisibleFromProps","onActionVisibilityChange","isResolvedShorthand","actions","visible","onVisibilityChange","undefined","isActionsVisible","setIsActionsVisible","useControllableState","state","initialState","selectionRef","expandIconRef","actionsRef","actionsRefInternal","React","useRef","treeItemRef","subtreeRef","checked","isBranch","itemType","assertIsRefObject","setActionsVisibleIfNotFromSubtree","useCallback","event","isTargetFromSubtree","Boolean","current","elementContains","target","type","setActionsInvisibleIfNotFromSubtree","isRelatedTargetFromActions","relatedTarget","isRelatedTargetFromTreeItem","isTargetFromActions","contains","expandIcon","slot","optional","renderByDefault","defaultProps","children","createElement","TreeItemChevron","elementType","expandIconRefs","useMergedRefs","arrowNavigationProps","useArrowNavigationGroup","circular","axis","role","actionsRefs","handleActionsBlur","useEventCallback","onBlur","currentTarget","hasActions","useEffect","treeItemElement","handleMouseOver","handleMouseOut","handleFocus","handleBlur","addEventListener","removeEventListener","components","root","aside","selector","Checkbox","Radio","buttonContextValue","size","always","getIntrinsicElementProps","tabIndex","process","env","NODE_ENV","Error","name"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/TreeItemLayout/useTreeItemLayout.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n getIntrinsicElementProps,\n isResolvedShorthand,\n useMergedRefs,\n slot,\n useEventCallback,\n elementContains,\n useControllableState,\n} from '@fluentui/react-utilities';\nimport { useTreeItemContext_unstable, useTreeContext_unstable } from '../../contexts';\nimport type {\n TreeItemLayoutActionSlotProps,\n TreeItemLayoutActionVisibilityChangeData,\n TreeItemLayoutProps,\n TreeItemLayoutState,\n} from './TreeItemLayout.types';\nimport { Checkbox, CheckboxProps } from '@fluentui/react-checkbox';\nimport { Radio, RadioProps } from '@fluentui/react-radio';\nimport { TreeItemChevron } from '../TreeItemChevron';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\n\n/**\n * Create the state required to render TreeItemLayout.\n *\n * The returned state can be modified with hooks such as useTreeItemLayoutStyles_unstable,\n * before being passed to renderTreeItemLayout_unstable.\n *\n * @param props - props from this instance of TreeItemLayout\n * @param ref - reference to root HTMLElement of TreeItemLayout\n */\nexport const useTreeItemLayout_unstable = (\n props: TreeItemLayoutProps,\n ref: React.Ref<HTMLElement>,\n): TreeItemLayoutState => {\n 'use no memo';\n\n const { main, iconAfter, iconBefore } = props;\n\n const layoutRef = useTreeItemContext_unstable(ctx => ctx.layoutRef);\n const selectionMode = useTreeContext_unstable(ctx => ctx.selectionMode);\n\n const [isActionsVisibleFromProps, onActionVisibilityChange]: [\n TreeItemLayoutActionSlotProps['visible'],\n TreeItemLayoutActionSlotProps['onVisibilityChange'],\n ] = isResolvedShorthand(props.actions)\n ? // .visible .onVisibilityChange prop should not be propagated to the DOM\n [props.actions.visible, props.actions.onVisibilityChange]\n : [undefined, undefined];\n\n const [isActionsVisible, setIsActionsVisible] = useControllableState({\n state: isActionsVisibleFromProps,\n initialState: false,\n });\n\n const selectionRef = useTreeItemContext_unstable(ctx => ctx.selectionRef);\n const expandIconRef = useTreeItemContext_unstable(ctx => ctx.expandIconRef);\n const actionsRef = useTreeItemContext_unstable(ctx => ctx.actionsRef);\n const actionsRefInternal = React.useRef<HTMLDivElement>(null);\n const treeItemRef = useTreeItemContext_unstable(ctx => ctx.treeItemRef);\n const subtreeRef = useTreeItemContext_unstable(ctx => ctx.subtreeRef);\n const checked = useTreeItemContext_unstable(ctx => ctx.checked);\n const isBranch = useTreeItemContext_unstable(ctx => ctx.itemType === 'branch');\n\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(treeItemRef);\n // FIXME: Asserting is required here, as converting this to RefObject on context type would be a breaking change\n assertIsRefObject(subtreeRef);\n\n const setActionsVisibleIfNotFromSubtree = React.useCallback(\n (event: MouseEvent | FocusEvent) => {\n const isTargetFromSubtree = Boolean(\n subtreeRef.current && elementContains(subtreeRef.current, event.target as Node),\n );\n if (!isTargetFromSubtree) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(true);\n }\n },\n [subtreeRef, setIsActionsVisible, onActionVisibilityChange],\n );\n\n const setActionsInvisibleIfNotFromSubtree = React.useCallback(\n (event: FocusEvent | MouseEvent) => {\n const isRelatedTargetFromActions = () =>\n Boolean(actionsRefInternal.current && elementContains(actionsRefInternal.current, event.relatedTarget as Node));\n const isRelatedTargetFromTreeItem = () =>\n Boolean(treeItemRef.current && elementContains(treeItemRef.current, event.relatedTarget as Node));\n const isTargetFromActions = () => Boolean(actionsRefInternal.current?.contains(event.target as Node));\n if (isRelatedTargetFromActions()) {\n onActionVisibilityChange?.(event, {\n visible: true,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(true);\n return;\n }\n if (isTargetFromActions() && isRelatedTargetFromTreeItem()) {\n return;\n }\n onActionVisibilityChange?.(event, {\n visible: false,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n if (event.defaultPrevented) {\n return;\n }\n setIsActionsVisible(false);\n },\n [setIsActionsVisible, onActionVisibilityChange, treeItemRef],\n );\n\n const expandIcon = slot.optional(props.expandIcon, {\n renderByDefault: isBranch,\n defaultProps: {\n children: <TreeItemChevron />,\n 'aria-hidden': true,\n },\n elementType: 'div',\n });\n const expandIconRefs = useMergedRefs(expandIcon?.ref, expandIconRef);\n if (expandIcon) {\n expandIcon.ref = expandIconRefs;\n }\n const arrowNavigationProps = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const actions = isActionsVisible\n ? slot.optional(props.actions, {\n defaultProps: { ...arrowNavigationProps, role: 'toolbar' },\n elementType: 'div',\n })\n : undefined;\n delete actions?.visible;\n delete actions?.onVisibilityChange;\n const actionsRefs = useMergedRefs(actions?.ref, actionsRef, actionsRefInternal);\n const handleActionsBlur = useEventCallback((event: React.FocusEvent<HTMLDivElement>) => {\n if (isResolvedShorthand(props.actions)) {\n props.actions.onBlur?.(event);\n }\n const isRelatedTargetFromActions = Boolean(elementContains(event.currentTarget, event.relatedTarget as Node));\n onActionVisibilityChange?.(event, {\n visible: isRelatedTargetFromActions,\n event,\n type: event.type,\n } as Extract<TreeItemLayoutActionVisibilityChangeData, { event: typeof event }>);\n setIsActionsVisible(isRelatedTargetFromActions);\n });\n if (actions) {\n actions.ref = actionsRefs;\n actions.onBlur = handleActionsBlur;\n }\n\n const hasActions = Boolean(props.actions);\n\n React.useEffect(() => {\n if (treeItemRef.current && hasActions) {\n const treeItemElement = treeItemRef.current;\n\n const handleMouseOver = setActionsVisibleIfNotFromSubtree;\n const handleMouseOut = setActionsInvisibleIfNotFromSubtree;\n const handleFocus = setActionsVisibleIfNotFromSubtree;\n const handleBlur = setActionsInvisibleIfNotFromSubtree;\n\n treeItemElement.addEventListener('mouseover', handleMouseOver);\n treeItemElement.addEventListener('mouseout', handleMouseOut);\n treeItemElement.addEventListener('focus', handleFocus);\n treeItemElement.addEventListener('blur', handleBlur);\n\n return () => {\n treeItemElement.removeEventListener('mouseover', handleMouseOver);\n treeItemElement.removeEventListener('mouseout', handleMouseOut);\n treeItemElement.removeEventListener('focus', handleFocus);\n treeItemElement.removeEventListener('blur', handleBlur);\n };\n }\n }, [hasActions, treeItemRef, setActionsVisibleIfNotFromSubtree, setActionsInvisibleIfNotFromSubtree]);\n\n return {\n components: {\n root: 'div',\n expandIcon: 'div',\n iconBefore: 'div',\n main: 'div',\n iconAfter: 'div',\n actions: 'div',\n aside: 'div',\n // Casting here to a union between checkbox and radio\n selector: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<CheckboxProps | RadioProps>,\n },\n buttonContextValue: { size: 'small' },\n root: slot.always(\n getIntrinsicElementProps('div', {\n ...props,\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: useMergedRefs(ref, layoutRef) as React.Ref<HTMLDivElement>,\n }),\n {\n elementType: 'div',\n },\n ),\n iconBefore: slot.optional(iconBefore, { elementType: 'div' }),\n main: slot.always(main, { elementType: 'div' }),\n iconAfter: slot.optional(iconAfter, { elementType: 'div' }),\n aside: !isActionsVisible ? slot.optional(props.aside, { elementType: 'div' }) : undefined,\n actions,\n expandIcon,\n selector: slot.optional(props.selector, {\n renderByDefault: selectionMode !== 'none',\n defaultProps: {\n checked,\n tabIndex: -1,\n 'aria-hidden': true,\n ref: selectionRef,\n // casting here to a union between checkbox and radio\n // since ref is not present on the selector signature\n // FIXME: look into Slot type to see if we can make this work\n } as CheckboxProps | RadioProps,\n elementType: (selectionMode === 'multiselect' ? Checkbox : Radio) as React.ElementType<\n CheckboxProps | RadioProps\n >,\n }),\n };\n};\n\nfunction assertIsRefObject<Value>(ref?: React.Ref<Value>): asserts ref is React.RefObject<Value> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof ref !== 'object' || ref === null || !('current' in ref)) {\n throw new Error(`\n @fluentui/react-tree [${useTreeItemLayout_unstable.name}]:\n Internal Error: contextual ref is not a RefObject! Please report this bug immediately, as contextual refs should be RefObjects.\n `);\n }\n }\n}\n"],"names":["useTreeItemLayout_unstable","props","ref","main","iconAfter","iconBefore","layoutRef","useTreeItemContext_unstable","ctx","selectionMode","useTreeContext_unstable","isActionsVisibleFromProps","onActionVisibilityChange","isResolvedShorthand","actions","visible","onVisibilityChange","undefined","isActionsVisible","setIsActionsVisible","useControllableState","state","initialState","selectionRef","expandIconRef","actionsRef","actionsRefInternal","React","useRef","treeItemRef","subtreeRef","checked","isBranch","itemType","assertIsRefObject","setActionsVisibleIfNotFromSubtree","useCallback","event","isTargetFromSubtree","Boolean","current","elementContains","target","type","defaultPrevented","setActionsInvisibleIfNotFromSubtree","isRelatedTargetFromActions","relatedTarget","isRelatedTargetFromTreeItem","isTargetFromActions","contains","expandIcon","slot","optional","renderByDefault","defaultProps","children","createElement","TreeItemChevron","elementType","expandIconRefs","useMergedRefs","arrowNavigationProps","useArrowNavigationGroup","circular","axis","role","actionsRefs","handleActionsBlur","useEventCallback","onBlur","currentTarget","hasActions","useEffect","treeItemElement","handleMouseOver","handleMouseOut","handleFocus","handleBlur","addEventListener","removeEventListener","components","root","aside","selector","Checkbox","Radio","buttonContextValue","size","always","getIntrinsicElementProps","tabIndex","process","env","NODE_ENV","Error","name"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui/react-tree",
|
|
3
|
-
"version": "9.8.
|
|
3
|
+
"version": "9.8.7",
|
|
4
4
|
"description": "Tree component for Fluent UI React",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"@fluentui/react-checkbox": "^9.2.41",
|
|
28
28
|
"@fluentui/react-context-selector": "^9.1.69",
|
|
29
29
|
"@fluentui/react-icons": "^2.0.245",
|
|
30
|
-
"@fluentui/react-motion-components-preview": "^0.3.
|
|
31
|
-
"@fluentui/react-motion": "^9.6.
|
|
30
|
+
"@fluentui/react-motion-components-preview": "^0.3.1",
|
|
31
|
+
"@fluentui/react-motion": "^9.6.2",
|
|
32
32
|
"@fluentui/react-radio": "^9.2.36",
|
|
33
33
|
"@fluentui/react-shared-contexts": "^9.21.0",
|
|
34
34
|
"@fluentui/react-tabster": "^9.23.0",
|