@fluentui/react-tree 9.8.12 → 9.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -2
- package/dist/index.d.ts +23 -0
- package/lib/Tree.js.map +1 -1
- package/lib/components/FlatTree/FlatTree.types.js.map +1 -1
- package/lib/components/FlatTree/useFlatTree.js +1 -1
- package/lib/components/FlatTree/useFlatTree.js.map +1 -1
- package/lib/components/FlatTree/useFlatTreeContextValues.js +2 -1
- package/lib/components/FlatTree/useFlatTreeContextValues.js.map +1 -1
- package/lib/components/Tree/Tree.types.js.map +1 -1
- package/lib/components/Tree/index.js.map +1 -1
- package/lib/components/Tree/useTree.js +1 -1
- package/lib/components/Tree/useTree.js.map +1 -1
- package/lib/components/Tree/useTreeContextValues.js +2 -1
- package/lib/components/Tree/useTreeContextValues.js.map +1 -1
- package/lib/components/TreeItem/useTreeItem.js +90 -35
- package/lib/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItemContextValues.js +2 -2
- package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayout.js +5 -1
- package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib/components/TreeProvider.js +3 -0
- package/lib/components/TreeProvider.js.map +1 -1
- package/lib/contexts/treeContext.js +2 -1
- package/lib/contexts/treeContext.js.map +1 -1
- package/lib/hooks/useFlatTreeNavigation.js +17 -1
- package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib/hooks/useRootTree.js +2 -0
- package/lib/hooks/useRootTree.js.map +1 -1
- package/lib/hooks/useRovingTabIndexes.js +12 -2
- package/lib/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib/hooks/useTreeNavigation.js +21 -3
- package/lib/hooks/useTreeNavigation.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib-commonjs/Tree.js.map +1 -1
- package/lib-commonjs/components/FlatTree/FlatTree.types.js.map +1 -1
- package/lib-commonjs/components/FlatTree/useFlatTree.js +1 -1
- package/lib-commonjs/components/FlatTree/useFlatTree.js.map +1 -1
- package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js +2 -1
- package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js.map +1 -1
- package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
- package/lib-commonjs/components/Tree/index.js.map +1 -1
- package/lib-commonjs/components/Tree/useTree.js +1 -1
- package/lib-commonjs/components/Tree/useTree.js.map +1 -1
- package/lib-commonjs/components/Tree/useTreeContextValues.js +2 -1
- package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItem.js +89 -34
- package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +5 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib-commonjs/components/TreeProvider.js +14 -3
- package/lib-commonjs/components/TreeProvider.js.map +1 -1
- package/lib-commonjs/contexts/treeContext.js +2 -1
- package/lib-commonjs/contexts/treeContext.js.map +1 -1
- package/lib-commonjs/hooks/useFlatTreeNavigation.js +17 -1
- package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib-commonjs/hooks/useRootTree.js +2 -0
- package/lib-commonjs/hooks/useRootTree.js.map +1 -1
- package/lib-commonjs/hooks/useRovingTabIndexes.js +12 -2
- package/lib-commonjs/hooks/useRovingTabIndexes.js.map +1 -1
- package/lib-commonjs/hooks/useTreeNavigation.js +21 -3
- package/lib-commonjs/hooks/useTreeNavigation.js.map +1 -1
- package/lib-commonjs/index.js +3 -0
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeItem/useTreeItemContextValues.ts"],"sourcesContent":["import type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\nimport type { TreeItemContextValue } from '../../contexts';\n\nexport function useTreeItemContextValues_unstable(state: TreeItemState): TreeItemContextValues {\n const {\n value,\n itemType,\n layoutRef,\n subtreeRef,\n open,\n expandIconRef,\n actionsRef,\n treeItemRef,\n // eslint-disable-next-line
|
|
1
|
+
{"version":3,"sources":["../src/components/TreeItem/useTreeItemContextValues.ts"],"sourcesContent":["import type { TreeItemContextValues, TreeItemState } from './TreeItem.types';\nimport type { TreeItemContextValue } from '../../contexts';\n\nexport function useTreeItemContextValues_unstable(state: TreeItemState): TreeItemContextValues {\n const {\n value,\n itemType,\n layoutRef,\n subtreeRef,\n open,\n expandIconRef,\n actionsRef,\n treeItemRef,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n isActionsVisible,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n isAsideVisible,\n selectionRef,\n checked,\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 value,\n checked,\n itemType,\n layoutRef,\n subtreeRef,\n open,\n selectionRef,\n isActionsVisible,\n isAsideVisible,\n actionsRef,\n treeItemRef,\n expandIconRef,\n };\n\n return { treeItem };\n}\n"],"names":["useTreeItemContextValues_unstable","state","value","itemType","layoutRef","subtreeRef","open","expandIconRef","actionsRef","treeItemRef","isActionsVisible","isAsideVisible","selectionRef","checked","treeItem"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAGgBA;;;eAAAA;;;AAAT,SAASA,kCAAkCC,KAAoB;IACpE,MAAM,EACJC,KAAK,EACLC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,EACJC,aAAa,EACbC,UAAU,EACVC,WAAW,EAEXC,gBAAgB,EAEhBC,cAAc,EACdC,YAAY,EACZC,OAAO,EACR,GAAGZ;IAEJ;;;GAGC,GACD,MAAMa,WAAiC;QACrCZ;QACAW;QACAV;QACAC;QACAC;QACAC;QACAM;QACAF;QACAC;QACAH;QACAC;QACAF;IACF;IAEA,OAAO;QAAEO;IAAS;AACpB"}
|
|
@@ -21,6 +21,10 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
21
21
|
const { main, iconAfter, iconBefore } = props;
|
|
22
22
|
const layoutRef = (0, _contexts.useTreeItemContext_unstable)((ctx)=>ctx.layoutRef);
|
|
23
23
|
const selectionMode = (0, _contexts.useTreeContext_unstable)((ctx)=>ctx.selectionMode);
|
|
24
|
+
const navigationMode = (0, _contexts.useTreeContext_unstable)((ctx)=>{
|
|
25
|
+
var _ctx_navigationMode;
|
|
26
|
+
return (_ctx_navigationMode = ctx.navigationMode) !== null && _ctx_navigationMode !== void 0 ? _ctx_navigationMode : 'tree';
|
|
27
|
+
});
|
|
24
28
|
const [isActionsVisibleFromProps, onActionVisibilityChange] = (0, _reactutilities.isResolvedShorthand)(props.actions) ? [
|
|
25
29
|
props.actions.visible,
|
|
26
30
|
props.actions.onVisibilityChange
|
|
@@ -111,7 +115,7 @@ const useTreeItemLayout_unstable = (props, ref)=>{
|
|
|
111
115
|
expandIcon.ref = expandIconRefs;
|
|
112
116
|
}
|
|
113
117
|
const arrowNavigationProps = (0, _reacttabster.useArrowNavigationGroup)({
|
|
114
|
-
circular:
|
|
118
|
+
circular: navigationMode === 'tree',
|
|
115
119
|
axis: 'horizontal'
|
|
116
120
|
});
|
|
117
121
|
const actions = isActionsVisible ? _reactutilities.slot.optional(props.actions, {
|
|
@@ -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 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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"}
|
|
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 const navigationMode = useTreeContext_unstable(ctx => ctx.navigationMode ?? 'tree');\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: navigationMode === 'tree', 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\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","navigationMode","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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"}
|
|
@@ -2,10 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
TreeProvider: function() {
|
|
8
13
|
return TreeProvider;
|
|
14
|
+
},
|
|
15
|
+
TreeRootReset: function() {
|
|
16
|
+
return TreeRootReset;
|
|
9
17
|
}
|
|
10
18
|
});
|
|
11
19
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
@@ -30,3 +38,6 @@ const TreeProvider = (props)=>{
|
|
|
30
38
|
}, props.children));
|
|
31
39
|
};
|
|
32
40
|
TreeProvider.displayName = 'TreeProvider';
|
|
41
|
+
const TreeRootReset = (props)=>/*#__PURE__*/ _react.createElement(_contexts.SubtreeContext.Provider, {
|
|
42
|
+
value: undefined
|
|
43
|
+
}, props.children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TreeProvider.tsx"],"sourcesContent":["import * as React from 'react';\nimport { SubtreeContext, SubtreeContextValue, TreeContextValue, TreeContext } from '../contexts';\n\n/**\n * @internal\n */\nconst rootSubtreeContextValue: SubtreeContextValue = {\n level: 1,\n contextType: 'subtree',\n};\n\nexport const TreeProvider = (props: React.ProviderProps<TreeContextValue | SubtreeContextValue>) => {\n if (props.value.contextType === 'subtree') {\n return <SubtreeContext.Provider value={props.value}>{props.children}</SubtreeContext.Provider>;\n }\n return (\n <TreeContext.Provider value={props.value}>\n <SubtreeContext.Provider value={rootSubtreeContextValue}>{props.children}</SubtreeContext.Provider>\n </TreeContext.Provider>\n );\n};\n\nTreeProvider.displayName = 'TreeProvider';\n"],"names":["TreeProvider","rootSubtreeContextValue","level","contextType","props","value","React","createElement","SubtreeContext","Provider","children","TreeContext","displayName"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../src/components/TreeProvider.tsx"],"sourcesContent":["import * as React from 'react';\nimport { SubtreeContext, SubtreeContextValue, TreeContextValue, TreeContext } from '../contexts';\n\n/**\n * @internal\n */\nconst rootSubtreeContextValue: SubtreeContextValue = {\n level: 1,\n contextType: 'subtree',\n};\n\nexport const TreeProvider = (props: React.ProviderProps<TreeContextValue | SubtreeContextValue>) => {\n if (props.value.contextType === 'subtree') {\n return <SubtreeContext.Provider value={props.value}>{props.children}</SubtreeContext.Provider>;\n }\n return (\n <TreeContext.Provider value={props.value}>\n <SubtreeContext.Provider value={rootSubtreeContextValue}>{props.children}</SubtreeContext.Provider>\n </TreeContext.Provider>\n );\n};\n\nTreeProvider.displayName = 'TreeProvider';\n\nexport type TreeRootResetProps = {\n children?: React.ReactNode;\n};\n\nexport const TreeRootReset = (props: TreeRootResetProps) => (\n <SubtreeContext.Provider value={undefined as unknown as SubtreeContextValue}>\n {props.children}\n </SubtreeContext.Provider>\n);\n"],"names":["TreeProvider","TreeRootReset","rootSubtreeContextValue","level","contextType","props","value","React","createElement","SubtreeContext","Provider","children","TreeContext","displayName","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAWaA,YAAAA;eAAAA;;IAiBAC,aAAAA;eAAAA;;;;iEA5BU;0BAC4D;AAEnF;;CAEC,GACD,MAAMC,0BAA+C;IACnDC,OAAO;IACPC,aAAa;AACf;AAEO,MAAMJ,eAAe,CAACK;IAC3B,IAAIA,MAAMC,KAAK,CAACF,WAAW,KAAK,WAAW;QACzC,OAAA,WAAA,GAAOG,OAAAC,aAAA,CAACC,wBAAAA,CAAeC,QAAQ,EAAA;YAACJ,OAAOD,MAAMC,KAAK;WAAGD,MAAMM,QAAQ;IACrE;IACA,OAAA,WAAA,GACEJ,OAAAC,aAAA,CAACI,qBAAAA,CAAYF,QAAQ,EAAA;QAACJ,OAAOD,MAAMC,KAAK;qBACtCC,OAAAC,aAAA,CAACC,wBAAAA,CAAeC,QAAQ,EAAA;QAACJ,OAAOJ;OAA0BG,MAAMM,QAAQ;AAG9E;AAEAX,aAAaa,WAAW,GAAG;AAMpB,MAAMZ,gBAAgB,CAACI,QAAAA,WAAAA,GAC5BE,OAAAC,aAAA,CAACC,wBAAAA,CAAeC,QAAQ,EAAA;QAACJ,OAAOQ;OAC7BT,MAAMM,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contexts/treeContext.ts"],"sourcesContent":["import { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport { TreeItemType, TreeItemValue } from '../TreeItem';\nimport type { SelectionMode, DistributiveOmit } from '@fluentui/react-utilities';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\nimport { TreeCheckedChangeData, TreeNavigationData_unstable, TreeOpenChangeData } from '../Tree';\n\nexport type TreeContextValue = {\n contextType?: 'root';\n level: number;\n treeType: 'nested' | 'flat';\n selectionMode: 'none' | SelectionMode;\n appearance: 'subtle' | 'subtle-alpha' | 'transparent';\n size: 'small' | 'medium';\n openItems: ImmutableSet<TreeItemValue>;\n checkedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>;\n /**\n * requests root Tree component to respond to some tree item event,\n */\n requestTreeResponse(request: TreeItemRequest): void;\n // FIXME: this is only marked as optional to avoid breaking changes\n // it should always be provided internally\n forceUpdateRovingTabIndex?(): void;\n};\n\nexport type TreeItemRequest = { itemType: TreeItemType } & (\n | (DistributiveOmit<TreeOpenChangeData, 'openItems'> & { requestType: 'open' })\n | (TreeNavigationData_unstable & { requestType: 'navigate' })\n | (DistributiveOmit<TreeCheckedChangeData, 'selectionMode' | 'checkedItems'> & { requestType: 'selection' })\n);\n\n/**\n * @internal\n */\nconst defaultTreeContextValue: TreeContextValue = {\n level: 0,\n contextType: 'root',\n treeType: 'nested',\n selectionMode: 'none',\n openItems: ImmutableSet.empty,\n checkedItems: ImmutableMap.empty,\n requestTreeResponse: noop,\n forceUpdateRovingTabIndex: noop,\n appearance: 'subtle',\n size: 'medium',\n};\n\nfunction noop() {\n /* noop */\n}\n\n/**\n * @internal\n */\nexport const TreeContext: Context<TreeContextValue> = createContext<TreeContextValue | undefined>(\n undefined,\n) as Context<TreeContextValue>;\n\nexport const useTreeContext_unstable = <T>(selector: ContextSelector<TreeContextValue, T>): T =>\n useContextSelector(TreeContext, (ctx = defaultTreeContextValue) => selector(ctx));\n"],"names":["TreeContext","useTreeContext_unstable","defaultTreeContextValue","level","contextType","treeType","selectionMode","openItems","ImmutableSet","empty","checkedItems","ImmutableMap","requestTreeResponse","noop","forceUpdateRovingTabIndex","appearance","size","createContext","undefined","selector","useContextSelector","ctx"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../src/contexts/treeContext.ts"],"sourcesContent":["import { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport { TreeItemType, TreeItemValue } from '../TreeItem';\nimport type { SelectionMode, DistributiveOmit } from '@fluentui/react-utilities';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\nimport { TreeCheckedChangeData, TreeNavigationData_unstable, TreeOpenChangeData } from '../Tree';\n\nexport type TreeContextValue = {\n contextType?: 'root';\n level: number;\n treeType: 'nested' | 'flat';\n selectionMode: 'none' | SelectionMode;\n appearance: 'subtle' | 'subtle-alpha' | 'transparent';\n size: 'small' | 'medium';\n openItems: ImmutableSet<TreeItemValue>;\n checkedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>;\n /**\n * requests root Tree component to respond to some tree item event,\n */\n requestTreeResponse(request: TreeItemRequest): void;\n // FIXME: this is only marked as optional to avoid breaking changes\n // it should always be provided internally\n forceUpdateRovingTabIndex?(): void;\n // FIXME: this is only marked as optional to avoid breaking changes\n // it should always be provided internally\n navigationMode?: 'tree' | 'treegrid';\n};\n\nexport type TreeItemRequest = { itemType: TreeItemType } & (\n | (DistributiveOmit<TreeOpenChangeData, 'openItems'> & { requestType: 'open' })\n | (TreeNavigationData_unstable & { requestType: 'navigate' })\n | (DistributiveOmit<TreeCheckedChangeData, 'selectionMode' | 'checkedItems'> & { requestType: 'selection' })\n);\n\n/**\n * @internal\n */\nconst defaultTreeContextValue: TreeContextValue = {\n level: 0,\n contextType: 'root',\n treeType: 'nested',\n selectionMode: 'none',\n openItems: ImmutableSet.empty,\n checkedItems: ImmutableMap.empty,\n requestTreeResponse: noop,\n forceUpdateRovingTabIndex: noop,\n appearance: 'subtle',\n size: 'medium',\n navigationMode: 'tree',\n};\n\nfunction noop() {\n /* noop */\n}\n\n/**\n * @internal\n */\nexport const TreeContext: Context<TreeContextValue> = createContext<TreeContextValue | undefined>(\n undefined,\n) as Context<TreeContextValue>;\n\nexport const useTreeContext_unstable = <T>(selector: ContextSelector<TreeContextValue, T>): T =>\n useContextSelector(TreeContext, (ctx = defaultTreeContextValue) => selector(ctx));\n"],"names":["TreeContext","useTreeContext_unstable","defaultTreeContextValue","level","contextType","treeType","selectionMode","openItems","ImmutableSet","empty","checkedItems","ImmutableMap","requestTreeResponse","noop","forceUpdateRovingTabIndex","appearance","size","navigationMode","createContext","undefined","selector","useContextSelector","ctx"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IA0DaA,WAAAA;eAAAA;;IAIAC,uBAAAA;eAAAA;;;sCA9D+D;8BAG/C;8BACA;AA8B7B;;CAEC,GACD,MAAMC,0BAA4C;IAChDC,OAAO;IACPC,aAAa;IACbC,UAAU;IACVC,eAAe;IACfC,WAAWC,0BAAAA,CAAaC,KAAK;IAC7BC,cAAcC,0BAAAA,CAAaF,KAAK;IAChCG,qBAAqBC;IACrBC,2BAA2BD;IAC3BE,YAAY;IACZC,MAAM;IACNC,gBAAgB;AAClB;AAEA,SAASJ;AACP,QAAQ,GACV;AAKO,MAAMb,cAAyCkB,IAAAA,mCAAAA,EACpDC;AAGK,MAAMlB,0BAA0B,CAAImB,WACzCC,IAAAA,wCAAAA,EAAmBrB,aAAa,CAACsB,MAAMpB,uBAAuB,GAAKkB,SAASE"}
|
|
@@ -16,10 +16,13 @@ const _useRovingTabIndexes = require("./useRovingTabIndexes");
|
|
|
16
16
|
const _getTreeItemValueFromElement = require("../utils/getTreeItemValueFromElement");
|
|
17
17
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
18
18
|
const _useHTMLElementWalkerRef = require("./useHTMLElementWalkerRef");
|
|
19
|
-
|
|
19
|
+
const _reacttabster = require("@fluentui/react-tabster");
|
|
20
|
+
const _TreeItemLayout = require("../TreeItemLayout");
|
|
21
|
+
function useFlatTreeNavigation(navigationMode = 'tree') {
|
|
20
22
|
'use no memo';
|
|
21
23
|
const { walkerRef, rootRef: walkerRootRef } = (0, _useHTMLElementWalkerRef.useHTMLElementWalkerRef)();
|
|
22
24
|
const { rove, forceUpdate: forceUpdateRovingTabIndex, initialize: initializeRovingTabIndex } = (0, _useRovingTabIndexes.useRovingTabIndex)();
|
|
25
|
+
const { findFirstFocusable } = (0, _reacttabster.useFocusFinders)();
|
|
23
26
|
const rootRefCallback = _react.useCallback((root)=>{
|
|
24
27
|
if (walkerRef.current && root) {
|
|
25
28
|
initializeRovingTabIndex(walkerRef.current);
|
|
@@ -40,6 +43,10 @@ function useFlatTreeNavigation() {
|
|
|
40
43
|
return (0, _nextTypeAheadElement.nextTypeAheadElement)(walkerRef.current, data.event.key);
|
|
41
44
|
case _tokens.treeDataTypes.ArrowLeft:
|
|
42
45
|
{
|
|
46
|
+
const actions = queryActions(data.target);
|
|
47
|
+
if (navigationMode === 'treegrid' && (actions === null || actions === void 0 ? void 0 : actions.contains(data.target.ownerDocument.activeElement))) {
|
|
48
|
+
return data.target;
|
|
49
|
+
}
|
|
43
50
|
const nextElement = parentElement(data.parentValue, walkerRef.current);
|
|
44
51
|
if (!nextElement && process.env.NODE_ENV !== 'production') {
|
|
45
52
|
// eslint-disable-next-line no-console
|
|
@@ -51,6 +58,14 @@ No parent element found for the current element:`, data.target);
|
|
|
51
58
|
}
|
|
52
59
|
case _tokens.treeDataTypes.ArrowRight:
|
|
53
60
|
{
|
|
61
|
+
if (navigationMode === 'treegrid') {
|
|
62
|
+
const actions = queryActions(data.target);
|
|
63
|
+
if (actions) {
|
|
64
|
+
var _findFirstFocusable;
|
|
65
|
+
(_findFirstFocusable = findFirstFocusable(actions)) === null || _findFirstFocusable === void 0 ? void 0 : _findFirstFocusable.focus();
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
54
69
|
walkerRef.current.currentElement = data.target;
|
|
55
70
|
const nextElement = firstChild(data.target, walkerRef.current);
|
|
56
71
|
if (!nextElement && process.env.NODE_ENV !== 'production') {
|
|
@@ -108,3 +123,4 @@ function parentElement(parentValue, treeWalker) {
|
|
|
108
123
|
}
|
|
109
124
|
return treeWalker.root.querySelector(`[${_getTreeItemValueFromElement.dataTreeItemValueAttrName}="${parentValue}"]`);
|
|
110
125
|
}
|
|
126
|
+
const queryActions = (target)=>target.querySelector(`:scope > .${_TreeItemLayout.treeItemLayoutClassNames.root} > .${_TreeItemLayout.treeItemLayoutClassNames.actions}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useFlatTreeNavigation.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport { TreeItemValue } from '../TreeItem';\nimport { dataTreeItemValueAttrName } from '../utils/getTreeItemValueFromElement';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\n\nexport function useFlatTreeNavigation() {\n 'use no memo';\n\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n const { rove, forceUpdate: forceUpdateRovingTabIndex, initialize: initializeRovingTabIndex } = useRovingTabIndex();\n\n const rootRefCallback: React.RefCallback<HTMLElement> = React.useCallback(\n root => {\n if (walkerRef.current && root) {\n initializeRovingTabIndex(walkerRef.current);\n }\n },\n [initializeRovingTabIndex, walkerRef],\n );\n\n function getNextElement(data: TreeNavigationData_unstable) {\n if (!walkerRef.current) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft: {\n const nextElement = parentElement(data.parentValue, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowLeft\\' navigation was not possible.\n No parent element found for the current element:\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.ArrowRight: {\n walkerRef.current.currentElement = data.target;\n const nextElement = firstChild(data.target, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n const ariaLevel = Number(data.target.getAttribute('aria-level'));\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowRight\\' navigation was not possible.\n No element with \"aria-posinset=1\" and \"aria-level=${ariaLevel + 1}\"\n was found after the current element!\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.End:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.lastChild();\n case treeDataTypes.Home:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.firstChild();\n case treeDataTypes.ArrowDown:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.nextElement();\n case treeDataTypes.ArrowUp:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.previousElement();\n }\n }\n const navigate = useEventCallback((data: TreeNavigationData_unstable) => {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return {\n navigate,\n rootRef: useMergedRefs<HTMLDivElement>(walkerRootRef, rootRefCallback),\n forceUpdateRovingTabIndex,\n } as const;\n}\n\nfunction firstChild(target: HTMLElement, treeWalker: HTMLElementWalker): HTMLElement | null {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\n\nfunction parentElement(parentValue: TreeItemValue | undefined, treeWalker: HTMLElementWalker) {\n if (parentValue === undefined) {\n return null;\n }\n return treeWalker.root.querySelector<HTMLElement>(`[${dataTreeItemValueAttrName}=\"${parentValue}\"]`);\n}\n"],"names":["useFlatTreeNavigation","walkerRef","rootRef","walkerRootRef","useHTMLElementWalkerRef","rove","forceUpdate","forceUpdateRovingTabIndex","initialize","initializeRovingTabIndex","useRovingTabIndex","rootRefCallback","React","useCallback","root","current","getNextElement","data","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","nextElement","parentElement","parentValue","process","env","NODE_ENV","console","warn","ArrowRight","firstChild","ariaLevel","Number","getAttribute","End","lastChild","Home","ArrowDown","ArrowUp","previousElement","navigate","useEventCallback","useMergedRefs","treeWalker","nextElementAriaPosInSet","nextElementAriaLevel","targetAriaLevel","undefined","querySelector","dataTreeItemValueAttrName"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useFlatTreeNavigation.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport { TreeItemValue } from '../TreeItem';\nimport { dataTreeItemValueAttrName } from '../utils/getTreeItemValueFromElement';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\nimport { TreeNavigationMode } from '../components/Tree/Tree.types';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { treeItemLayoutClassNames } from '../TreeItemLayout';\n\nexport function useFlatTreeNavigation(navigationMode: TreeNavigationMode = 'tree') {\n 'use no memo';\n\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n const { rove, forceUpdate: forceUpdateRovingTabIndex, initialize: initializeRovingTabIndex } = useRovingTabIndex();\n const { findFirstFocusable } = useFocusFinders();\n\n const rootRefCallback: React.RefCallback<HTMLElement> = React.useCallback(\n root => {\n if (walkerRef.current && root) {\n initializeRovingTabIndex(walkerRef.current);\n }\n },\n [initializeRovingTabIndex, walkerRef],\n );\n\n function getNextElement(data: TreeNavigationData_unstable) {\n if (!walkerRef.current) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft: {\n const actions = queryActions(data.target);\n if (navigationMode === 'treegrid' && actions?.contains(data.target.ownerDocument.activeElement)) {\n return data.target;\n }\n const nextElement = parentElement(data.parentValue, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowLeft\\' navigation was not possible.\n No parent element found for the current element:\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.ArrowRight: {\n if (navigationMode === 'treegrid') {\n const actions = queryActions(data.target);\n if (actions) {\n findFirstFocusable(actions)?.focus();\n }\n return null;\n }\n walkerRef.current.currentElement = data.target;\n const nextElement = firstChild(data.target, walkerRef.current);\n if (!nextElement && process.env.NODE_ENV !== 'production') {\n const ariaLevel = Number(data.target.getAttribute('aria-level'));\n // eslint-disable-next-line no-console\n console.warn(\n /* #__DE-INDENT__ */ `\n @fluentui/react-tree [useFlatTreeNavigation]:\n \\'ArrowRight\\' navigation was not possible.\n No element with \"aria-posinset=1\" and \"aria-level=${ariaLevel + 1}\"\n was found after the current element!\n `,\n data.target,\n );\n }\n return nextElement;\n }\n case treeDataTypes.End:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.lastChild();\n case treeDataTypes.Home:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.firstChild();\n case treeDataTypes.ArrowDown:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.nextElement();\n case treeDataTypes.ArrowUp:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.previousElement();\n }\n }\n const navigate = useEventCallback((data: TreeNavigationData_unstable) => {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n });\n return {\n navigate,\n rootRef: useMergedRefs<HTMLDivElement>(walkerRootRef, rootRefCallback),\n forceUpdateRovingTabIndex,\n } as const;\n}\n\nfunction firstChild(target: HTMLElement, treeWalker: HTMLElementWalker): HTMLElement | null {\n const nextElement = treeWalker.nextElement();\n if (!nextElement) {\n return null;\n }\n const nextElementAriaPosInSet = nextElement.getAttribute('aria-posinset');\n const nextElementAriaLevel = nextElement.getAttribute('aria-level');\n const targetAriaLevel = target.getAttribute('aria-level');\n if (nextElementAriaPosInSet === '1' && Number(nextElementAriaLevel) === Number(targetAriaLevel) + 1) {\n return nextElement;\n }\n return null;\n}\n\nfunction parentElement(parentValue: TreeItemValue | undefined, treeWalker: HTMLElementWalker) {\n if (parentValue === undefined) {\n return null;\n }\n return treeWalker.root.querySelector<HTMLElement>(`[${dataTreeItemValueAttrName}=\"${parentValue}\"]`);\n}\n\nconst queryActions = (target: HTMLElement) =>\n target.querySelector<HTMLElement>(\n `:scope > .${treeItemLayoutClassNames.root} > .${treeItemLayoutClassNames.actions}`,\n );\n"],"names":["useFlatTreeNavigation","navigationMode","walkerRef","rootRef","walkerRootRef","useHTMLElementWalkerRef","rove","forceUpdate","forceUpdateRovingTabIndex","initialize","initializeRovingTabIndex","useRovingTabIndex","findFirstFocusable","useFocusFinders","rootRefCallback","React","useCallback","root","current","getNextElement","data","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","actions","queryActions","contains","ownerDocument","activeElement","nextElement","parentElement","parentValue","process","env","NODE_ENV","console","warn","ArrowRight","focus","firstChild","ariaLevel","Number","getAttribute","End","lastChild","Home","ArrowDown","ArrowUp","previousElement","navigate","useEventCallback","useMergedRefs","treeWalker","nextElementAriaPosInSet","nextElementAriaLevel","targetAriaLevel","undefined","querySelector","dataTreeItemValueAttrName","treeItemLayoutClassNames"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -74,6 +74,7 @@ function useRootTree(props, ref) {
|
|
|
74
74
|
return requestCheckedChange(request);
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
|
+
var _props_navigationMode;
|
|
77
78
|
return {
|
|
78
79
|
components: {
|
|
79
80
|
root: 'div',
|
|
@@ -85,6 +86,7 @@ function useRootTree(props, ref) {
|
|
|
85
86
|
},
|
|
86
87
|
contextType: 'root',
|
|
87
88
|
selectionMode,
|
|
89
|
+
navigationMode: (_props_navigationMode = props.navigationMode) !== null && _props_navigationMode !== void 0 ? _props_navigationMode : 'tree',
|
|
88
90
|
open: true,
|
|
89
91
|
appearance,
|
|
90
92
|
size,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useRootTree.ts"],"sourcesContent":["import { getIntrinsicElementProps, useEventCallback, slot } from '@fluentui/react-utilities';\nimport type { TreeCheckedChangeData, TreeProps, TreeState } from '../Tree';\nimport * as React from 'react';\nimport { Collapse } from '@fluentui/react-motion-components-preview';\nimport { PresenceMotionSlotProps } from '@fluentui/react-motion';\nimport { TreeContextValue, TreeItemRequest } from '../contexts/treeContext';\nimport { createCheckedItems } from '../utils/createCheckedItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { createNextOpenItems } from './useControllableOpenItems';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\n\n/**\n * Create the state required to render the root level tree.\n *\n * @param props - props from this instance of tree\n * @param ref - reference to root HTMLElement of tree\n */\nexport function useRootTree(\n props: TreeProps,\n ref: React.Ref<HTMLElement>,\n): Omit<TreeState & TreeContextValue, 'treeType'> {\n warnIfNoProperPropsRootTree(props);\n\n const { appearance = 'subtle', size = 'medium', selectionMode = 'none' } = props;\n\n const openItems = React.useMemo(() => ImmutableSet.from(props.openItems), [props.openItems]);\n const checkedItems = React.useMemo(() => createCheckedItems(props.checkedItems), [props.checkedItems]);\n\n const requestOpenChange = (request: Extract<TreeItemRequest, { requestType: 'open' }>) => {\n props.onOpenChange?.(request.event, {\n ...request,\n openItems: ImmutableSet.dangerouslyGetInternalSet(createNextOpenItems(request, openItems)),\n });\n };\n\n const requestCheckedChange = (request: Extract<TreeItemRequest, { requestType: 'selection' }>) => {\n if (selectionMode === 'none') {\n return;\n }\n props.onCheckedChange?.(request.event, {\n ...request,\n selectionMode,\n checkedItems: ImmutableMap.dangerouslyGetInternalMap(checkedItems),\n // Casting is required here due to selection | multiselection spreading the union problem\n } as TreeCheckedChangeData);\n };\n\n const requestNavigation = (request: Extract<TreeItemRequest, { requestType: 'navigate' }>) => {\n let isScrollPrevented = false;\n props.onNavigation?.(request.event, {\n ...request,\n preventScroll: () => {\n isScrollPrevented = true;\n },\n isScrollPrevented: () => isScrollPrevented,\n });\n switch (request.type) {\n case treeDataTypes.ArrowDown:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.Home:\n case treeDataTypes.End:\n // stop the default behavior of the event\n // which is to scroll the page\n request.event.preventDefault();\n }\n };\n\n const requestTreeResponse = useEventCallback((request: TreeItemRequest) => {\n switch (request.requestType) {\n case 'navigate':\n return requestNavigation(request);\n case 'open':\n return requestOpenChange(request);\n case 'selection':\n return requestCheckedChange(request);\n }\n });\n\n return {\n components: {\n root: 'div',\n // TODO: remove once React v18 slot API is modified\n // This is a problem at the moment due to UnknownSlotProps assumption\n // that `children` property is `ReactNode`, which in this case is not valid\n // as PresenceComponentProps['children'] is `ReactElement`\n collapseMotion: Collapse as React.FC<PresenceMotionSlotProps>,\n },\n contextType: 'root',\n selectionMode,\n open: true,\n appearance,\n size,\n level: 1,\n openItems,\n checkedItems,\n requestTreeResponse,\n forceUpdateRovingTabIndex: () => {\n // noop\n },\n root: slot.always(\n getIntrinsicElementProps('div', {\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: ref as React.Ref<HTMLDivElement>,\n role: 'tree',\n 'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined,\n ...props,\n }),\n { elementType: 'div' },\n ),\n collapseMotion: undefined,\n };\n}\n\nfunction warnIfNoProperPropsRootTree(props: Pick<TreeProps, 'aria-label' | 'aria-labelledby'>) {\n if (process.env.NODE_ENV === 'development') {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n // eslint-disable-next-line no-console\n console.warn(/* #__DE-INDENT__ */ `\n @fluentui/react-tree [useRootTree]:\n Tree must have either a \\`aria-label\\` or \\`aria-labelledby\\` property defined\n `);\n }\n }\n}\n"],"names":["useRootTree","props","ref","warnIfNoProperPropsRootTree","appearance","size","selectionMode","openItems","React","useMemo","ImmutableSet","from","checkedItems","createCheckedItems","requestOpenChange","request","onOpenChange","event","dangerouslyGetInternalSet","createNextOpenItems","requestCheckedChange","onCheckedChange","ImmutableMap","dangerouslyGetInternalMap","requestNavigation","isScrollPrevented","onNavigation","preventScroll","type","treeDataTypes","ArrowDown","ArrowUp","Home","End","preventDefault","requestTreeResponse","useEventCallback","requestType","components","root","collapseMotion","Collapse","contextType","open","level","forceUpdateRovingTabIndex","slot","always","getIntrinsicElementProps","role","undefined","elementType","process","env","NODE_ENV","console","warn"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useRootTree.ts"],"sourcesContent":["import { getIntrinsicElementProps, useEventCallback, slot } from '@fluentui/react-utilities';\nimport type { TreeCheckedChangeData, TreeProps, TreeState } from '../Tree';\nimport * as React from 'react';\nimport { Collapse } from '@fluentui/react-motion-components-preview';\nimport { PresenceMotionSlotProps } from '@fluentui/react-motion';\nimport { TreeContextValue, TreeItemRequest } from '../contexts/treeContext';\nimport { createCheckedItems } from '../utils/createCheckedItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { createNextOpenItems } from './useControllableOpenItems';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\n\n/**\n * Create the state required to render the root level tree.\n *\n * @param props - props from this instance of tree\n * @param ref - reference to root HTMLElement of tree\n */\nexport function useRootTree(\n props: TreeProps,\n ref: React.Ref<HTMLElement>,\n): Omit<TreeState & TreeContextValue, 'treeType'> {\n warnIfNoProperPropsRootTree(props);\n\n const { appearance = 'subtle', size = 'medium', selectionMode = 'none' } = props;\n\n const openItems = React.useMemo(() => ImmutableSet.from(props.openItems), [props.openItems]);\n const checkedItems = React.useMemo(() => createCheckedItems(props.checkedItems), [props.checkedItems]);\n\n const requestOpenChange = (request: Extract<TreeItemRequest, { requestType: 'open' }>) => {\n props.onOpenChange?.(request.event, {\n ...request,\n openItems: ImmutableSet.dangerouslyGetInternalSet(createNextOpenItems(request, openItems)),\n });\n };\n\n const requestCheckedChange = (request: Extract<TreeItemRequest, { requestType: 'selection' }>) => {\n if (selectionMode === 'none') {\n return;\n }\n props.onCheckedChange?.(request.event, {\n ...request,\n selectionMode,\n checkedItems: ImmutableMap.dangerouslyGetInternalMap(checkedItems),\n // Casting is required here due to selection | multiselection spreading the union problem\n } as TreeCheckedChangeData);\n };\n\n const requestNavigation = (request: Extract<TreeItemRequest, { requestType: 'navigate' }>) => {\n let isScrollPrevented = false;\n props.onNavigation?.(request.event, {\n ...request,\n preventScroll: () => {\n isScrollPrevented = true;\n },\n isScrollPrevented: () => isScrollPrevented,\n });\n switch (request.type) {\n case treeDataTypes.ArrowDown:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.Home:\n case treeDataTypes.End:\n // stop the default behavior of the event\n // which is to scroll the page\n request.event.preventDefault();\n }\n };\n\n const requestTreeResponse = useEventCallback((request: TreeItemRequest) => {\n switch (request.requestType) {\n case 'navigate':\n return requestNavigation(request);\n case 'open':\n return requestOpenChange(request);\n case 'selection':\n return requestCheckedChange(request);\n }\n });\n\n return {\n components: {\n root: 'div',\n // TODO: remove once React v18 slot API is modified\n // This is a problem at the moment due to UnknownSlotProps assumption\n // that `children` property is `ReactNode`, which in this case is not valid\n // as PresenceComponentProps['children'] is `ReactElement`\n collapseMotion: Collapse as React.FC<PresenceMotionSlotProps>,\n },\n contextType: 'root',\n selectionMode,\n navigationMode: props.navigationMode ?? 'tree',\n open: true,\n appearance,\n size,\n level: 1,\n openItems,\n checkedItems,\n requestTreeResponse,\n forceUpdateRovingTabIndex: () => {\n // noop\n },\n root: slot.always(\n getIntrinsicElementProps('div', {\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: ref as React.Ref<HTMLDivElement>,\n role: 'tree',\n 'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined,\n ...props,\n }),\n { elementType: 'div' },\n ),\n collapseMotion: undefined,\n };\n}\n\nfunction warnIfNoProperPropsRootTree(props: Pick<TreeProps, 'aria-label' | 'aria-labelledby'>) {\n if (process.env.NODE_ENV === 'development') {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n // eslint-disable-next-line no-console\n console.warn(/* #__DE-INDENT__ */ `\n @fluentui/react-tree [useRootTree]:\n Tree must have either a \\`aria-label\\` or \\`aria-labelledby\\` property defined\n `);\n }\n }\n}\n"],"names":["useRootTree","props","ref","warnIfNoProperPropsRootTree","appearance","size","selectionMode","openItems","React","useMemo","ImmutableSet","from","checkedItems","createCheckedItems","requestOpenChange","request","onOpenChange","event","dangerouslyGetInternalSet","createNextOpenItems","requestCheckedChange","onCheckedChange","ImmutableMap","dangerouslyGetInternalMap","requestNavigation","isScrollPrevented","onNavigation","preventScroll","type","treeDataTypes","ArrowDown","ArrowUp","Home","End","preventDefault","requestTreeResponse","useEventCallback","requestType","components","root","collapseMotion","Collapse","contextType","navigationMode","open","level","forceUpdateRovingTabIndex","slot","always","getIntrinsicElementProps","role","undefined","elementType","process","env","NODE_ENV","console","warn"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -12,13 +12,23 @@ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildc
|
|
|
12
12
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
13
13
|
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
|
|
14
14
|
const _reacttabster = require("@fluentui/react-tabster");
|
|
15
|
-
const
|
|
15
|
+
const findTreeItemRoot = (element)=>{
|
|
16
|
+
let parent = element.parentElement;
|
|
17
|
+
while(parent && parent.getAttribute('role') !== 'tree'){
|
|
18
|
+
parent = parent.parentElement;
|
|
19
|
+
}
|
|
20
|
+
return parent;
|
|
21
|
+
};
|
|
16
22
|
function useRovingTabIndex() {
|
|
17
23
|
const currentElementRef = _react.useRef(null);
|
|
18
24
|
const walkerRef = _react.useRef(null);
|
|
19
25
|
const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
|
|
20
26
|
(0, _reacttabster.useFocusedElementChange)((element)=>{
|
|
21
|
-
if ((element === null || element === void 0 ? void 0 : element.getAttribute('role')) === 'treeitem' && walkerRef.current &&
|
|
27
|
+
if ((element === null || element === void 0 ? void 0 : element.getAttribute('role')) === 'treeitem' && walkerRef.current && walkerRef.current.root.contains(element)) {
|
|
28
|
+
const treeitemRoot = findTreeItemRoot(element);
|
|
29
|
+
if (walkerRef.current.root !== treeitemRoot) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
22
32
|
rove(element);
|
|
23
33
|
}
|
|
24
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useRovingTabIndexes.ts"],"sourcesContent":["import * as React from 'react';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport { useFocusedElementChange } from '@fluentui/react-tabster';\
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useRovingTabIndexes.ts"],"sourcesContent":["import * as React from 'react';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport { useFocusedElementChange } from '@fluentui/react-tabster';\n\nconst findTreeItemRoot = (element: HTMLElement) => {\n let parent = element.parentElement;\n while (parent && parent.getAttribute('role') !== 'tree') {\n parent = parent.parentElement;\n }\n return parent;\n};\n\n/**\n * @internal\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n */\nexport function useRovingTabIndex() {\n const currentElementRef = React.useRef<HTMLElement | null>(null);\n const walkerRef = React.useRef<HTMLElementWalker | null>(null);\n const { targetDocument } = useFluent();\n\n useFocusedElementChange(element => {\n if (element?.getAttribute('role') === 'treeitem' && walkerRef.current && walkerRef.current.root.contains(element)) {\n const treeitemRoot = findTreeItemRoot(element);\n if (walkerRef.current.root !== treeitemRoot) {\n return;\n }\n rove(element);\n }\n });\n\n const initialize = React.useCallback((walker: HTMLElementWalker) => {\n walkerRef.current = walker;\n walker.currentElement = walker.root;\n let tabbableChild = walker.firstChild(element =>\n element.tabIndex === 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP,\n );\n walker.currentElement = walker.root;\n tabbableChild ??= walker.firstChild();\n if (!tabbableChild) {\n return;\n }\n tabbableChild.tabIndex = 0;\n currentElementRef.current = tabbableChild;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.nextElement()) && nextElement !== tabbableChild) {\n nextElement.tabIndex = -1;\n }\n }, []);\n const rove = React.useCallback((nextElement: HTMLElement, focusOptions?: FocusOptions) => {\n if (!currentElementRef.current) {\n return;\n }\n currentElementRef.current.tabIndex = -1;\n nextElement.tabIndex = 0;\n nextElement.focus(focusOptions);\n currentElementRef.current = nextElement;\n }, []);\n\n const forceUpdate = React.useCallback(() => {\n if (\n (currentElementRef.current === null || !targetDocument?.body.contains(currentElementRef.current)) &&\n walkerRef.current\n ) {\n initialize(walkerRef.current);\n }\n }, [targetDocument, initialize]);\n\n return {\n rove,\n initialize,\n forceUpdate,\n };\n}\n"],"names":["useRovingTabIndex","findTreeItemRoot","element","parent","parentElement","getAttribute","currentElementRef","React","useRef","walkerRef","targetDocument","useFluent","useFocusedElementChange","current","root","contains","treeitemRoot","rove","initialize","useCallback","walker","currentElement","tabbableChild","firstChild","tabIndex","NodeFilter","FILTER_ACCEPT","FILTER_SKIP","nextElement","focusOptions","focus","forceUpdate","body"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAiBgBA;;;eAAAA;;;;iEAjBO;qCACyB;8BAER;AAExC,MAAMC,mBAAmB,CAACC;IACxB,IAAIC,SAASD,QAAQE,aAAa;IAClC,MAAOD,UAAUA,OAAOE,YAAY,CAAC,YAAY,OAAQ;QACvDF,SAASA,OAAOC,aAAa;IAC/B;IACA,OAAOD;AACT;AAMO,SAASH;IACd,MAAMM,oBAAoBC,OAAMC,MAAM,CAAqB;IAC3D,MAAMC,YAAYF,OAAMC,MAAM,CAA2B;IACzD,MAAM,EAAEE,cAAc,EAAE,GAAGC,IAAAA,uCAAAA;IAE3BC,IAAAA,qCAAAA,EAAwBV,CAAAA;QACtB,IAAIA,CAAAA,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASG,YAAY,CAAC,OAAA,MAAY,cAAcI,UAAUI,OAAO,IAAIJ,UAAUI,OAAO,CAACC,IAAI,CAACC,QAAQ,CAACb,UAAU;YACjH,MAAMc,eAAef,iBAAiBC;YACtC,IAAIO,UAAUI,OAAO,CAACC,IAAI,KAAKE,cAAc;gBAC3C;YACF;YACAC,KAAKf;QACP;IACF;IAEA,MAAMgB,aAAaX,OAAMY,WAAW,CAAC,CAACC;QACpCX,UAAUI,OAAO,GAAGO;QACpBA,OAAOC,cAAc,GAAGD,OAAON,IAAI;QACnC,IAAIQ,gBAAgBF,OAAOG,UAAU,CAACrB,CAAAA,UACpCA,QAAQsB,QAAQ,KAAK,IAAIC,WAAWC,aAAa,GAAGD,WAAWE,WAAW;QAE5EP,OAAOC,cAAc,GAAGD,OAAON,IAAI;QACnCQ,kBAAAA,QAAAA,kBAAAA,KAAAA,IAAAA,gBAAAA,gBAAkBF,OAAOG,UAAU;QACnC,IAAI,CAACD,eAAe;YAClB;QACF;QACAA,cAAcE,QAAQ,GAAG;QACzBlB,kBAAkBO,OAAO,GAAGS;QAC5B,IAAIM,cAAkC;QACtC,MAAO,AAACA,CAAAA,cAAcR,OAAOQ,WAAW,EAAA,KAAOA,gBAAgBN,cAAe;YAC5EM,YAAYJ,QAAQ,GAAG,CAAC;QAC1B;IACF,GAAG,EAAE;IACL,MAAMP,OAAOV,OAAMY,WAAW,CAAC,CAACS,aAA0BC;QACxD,IAAI,CAACvB,kBAAkBO,OAAO,EAAE;YAC9B;QACF;QACAP,kBAAkBO,OAAO,CAACW,QAAQ,GAAG,CAAC;QACtCI,YAAYJ,QAAQ,GAAG;QACvBI,YAAYE,KAAK,CAACD;QAClBvB,kBAAkBO,OAAO,GAAGe;IAC9B,GAAG,EAAE;IAEL,MAAMG,cAAcxB,OAAMY,WAAW,CAAC;QACpC,IACE,AAACb,CAAAA,kBAAkBO,OAAO,KAAK,QAAQ,CAACH,CAAAA,mBAAAA,QAAAA,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAgBsB,IAAI,CAACjB,QAAQ,CAACT,kBAAkBO,OAAO,CAAA,CAAA,KAC/FJ,UAAUI,OAAO,EACjB;YACAK,WAAWT,UAAUI,OAAO;QAC9B;IACF,GAAG;QAACH;QAAgBQ;KAAW;IAE/B,OAAO;QACLD;QACAC;QACAa;IACF;AACF"}
|
|
@@ -15,9 +15,12 @@ const _useRovingTabIndexes = require("./useRovingTabIndexes");
|
|
|
15
15
|
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
16
16
|
const _useHTMLElementWalkerRef = require("./useHTMLElementWalkerRef");
|
|
17
17
|
const _reactutilities = require("@fluentui/react-utilities");
|
|
18
|
-
|
|
18
|
+
const _TreeItemLayout = require("../TreeItemLayout");
|
|
19
|
+
const _reacttabster = require("@fluentui/react-tabster");
|
|
20
|
+
function useTreeNavigation(navigationMode = 'tree') {
|
|
19
21
|
'use no memo';
|
|
20
22
|
const { rove, initialize: initializeRovingTabIndex, forceUpdate: forceUpdateRovingTabIndex } = (0, _useRovingTabIndexes.useRovingTabIndex)();
|
|
23
|
+
const { findFirstFocusable } = (0, _reacttabster.useFocusFinders)();
|
|
21
24
|
const { walkerRef, rootRef: walkerRootRef } = (0, _useHTMLElementWalkerRef.useHTMLElementWalkerRef)();
|
|
22
25
|
const rootRefCallback = _react.useCallback((root)=>{
|
|
23
26
|
if (root && walkerRef.current) {
|
|
@@ -38,9 +41,23 @@ function useTreeNavigation() {
|
|
|
38
41
|
walkerRef.current.currentElement = data.target;
|
|
39
42
|
return (0, _nextTypeAheadElement.nextTypeAheadElement)(walkerRef.current, data.event.key);
|
|
40
43
|
case _tokens.treeDataTypes.ArrowLeft:
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
{
|
|
45
|
+
const actions = queryActions(data.target);
|
|
46
|
+
if (navigationMode === 'treegrid' && (actions === null || actions === void 0 ? void 0 : actions.contains(data.target.ownerDocument.activeElement))) {
|
|
47
|
+
return data.target;
|
|
48
|
+
}
|
|
49
|
+
walkerRef.current.currentElement = data.target;
|
|
50
|
+
return walkerRef.current.parentElement();
|
|
51
|
+
}
|
|
43
52
|
case _tokens.treeDataTypes.ArrowRight:
|
|
53
|
+
if (navigationMode === 'treegrid') {
|
|
54
|
+
const actions = queryActions(data.target);
|
|
55
|
+
if (actions) {
|
|
56
|
+
var _findFirstFocusable;
|
|
57
|
+
(_findFirstFocusable = findFirstFocusable(actions)) === null || _findFirstFocusable === void 0 ? void 0 : _findFirstFocusable.focus();
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
44
61
|
walkerRef.current.currentElement = data.target;
|
|
45
62
|
return walkerRef.current.firstChild();
|
|
46
63
|
case _tokens.treeDataTypes.End:
|
|
@@ -77,3 +94,4 @@ function lastChildRecursive(walker) {
|
|
|
77
94
|
}
|
|
78
95
|
return lastElement;
|
|
79
96
|
}
|
|
97
|
+
const queryActions = (target)=>target.querySelector(`:scope > .${_TreeItemLayout.treeItemLayoutClassNames.root} > .${_TreeItemLayout.treeItemLayoutClassNames.actions}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useTreeNavigation.ts"],"sourcesContent":["import { TreeNavigationData_unstable } from '../components/Tree/Tree.types';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\nimport { useMergedRefs } from '@fluentui/react-utilities';\n\n/**\n * @internal\n */\nexport function useTreeNavigation() {\n 'use no memo';\n\n const { rove, initialize: initializeRovingTabIndex, forceUpdate: forceUpdateRovingTabIndex } = useRovingTabIndex();\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n\n const rootRefCallback: React.RefCallback<HTMLElement> = React.useCallback(\n root => {\n if (root && walkerRef.current) {\n initializeRovingTabIndex(walkerRef.current);\n }\n },\n [walkerRef, initializeRovingTabIndex],\n );\n\n const getNextElement = (data: TreeNavigationData_unstable) => {\n if (!walkerRef.current) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useTreeNavigation.ts"],"sourcesContent":["import { TreeNavigationData_unstable, TreeNavigationMode } from '../components/Tree/Tree.types';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\nimport { HTMLElementWalker } from '../utils/createHTMLElementWalker';\nimport * as React from 'react';\nimport { useHTMLElementWalkerRef } from './useHTMLElementWalkerRef';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nimport { treeItemLayoutClassNames } from '../TreeItemLayout';\nimport { useFocusFinders } from '@fluentui/react-tabster';\n\n/**\n * @internal\n */\nexport function useTreeNavigation(navigationMode: TreeNavigationMode = 'tree') {\n 'use no memo';\n\n const { rove, initialize: initializeRovingTabIndex, forceUpdate: forceUpdateRovingTabIndex } = useRovingTabIndex();\n const { findFirstFocusable } = useFocusFinders();\n const { walkerRef, rootRef: walkerRootRef } = useHTMLElementWalkerRef();\n\n const rootRefCallback: React.RefCallback<HTMLElement> = React.useCallback(\n root => {\n if (root && walkerRef.current) {\n initializeRovingTabIndex(walkerRef.current);\n }\n },\n [walkerRef, initializeRovingTabIndex],\n );\n\n const getNextElement = (data: TreeNavigationData_unstable) => {\n if (!walkerRef.current) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.Click:\n return data.target;\n case treeDataTypes.TypeAhead:\n walkerRef.current.currentElement = data.target;\n return nextTypeAheadElement(walkerRef.current, data.event.key);\n case treeDataTypes.ArrowLeft: {\n const actions = queryActions(data.target);\n if (navigationMode === 'treegrid' && actions?.contains(data.target.ownerDocument.activeElement)) {\n return data.target;\n }\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.parentElement();\n }\n case treeDataTypes.ArrowRight:\n if (navigationMode === 'treegrid') {\n const actions = queryActions(data.target);\n if (actions) {\n findFirstFocusable(actions)?.focus();\n }\n return null;\n }\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.firstChild();\n case treeDataTypes.End:\n walkerRef.current.currentElement = walkerRef.current.root;\n return lastChildRecursive(walkerRef.current);\n case treeDataTypes.Home:\n walkerRef.current.currentElement = walkerRef.current.root;\n return walkerRef.current.firstChild();\n case treeDataTypes.ArrowDown:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.nextElement();\n case treeDataTypes.ArrowUp:\n walkerRef.current.currentElement = data.target;\n return walkerRef.current.previousElement();\n }\n };\n function navigate(data: TreeNavigationData_unstable, focusOptions?: FocusOptions) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement, focusOptions);\n }\n }\n return {\n navigate,\n treeRef: useMergedRefs(walkerRootRef, rootRefCallback) as React.RefCallback<HTMLElement>,\n forceUpdateRovingTabIndex,\n } as const;\n}\n\nfunction lastChildRecursive(walker: HTMLElementWalker) {\n let lastElement: HTMLElement | null = null;\n let nextElement: HTMLElement | null = null;\n while ((nextElement = walker.lastChild())) {\n lastElement = nextElement;\n }\n return lastElement;\n}\n\nconst queryActions = (target: HTMLElement) =>\n target.querySelector<HTMLElement>(\n `:scope > .${treeItemLayoutClassNames.root} > .${treeItemLayoutClassNames.actions}`,\n );\n"],"names":["useTreeNavigation","navigationMode","rove","initialize","initializeRovingTabIndex","forceUpdate","forceUpdateRovingTabIndex","useRovingTabIndex","findFirstFocusable","useFocusFinders","walkerRef","rootRef","walkerRootRef","useHTMLElementWalkerRef","rootRefCallback","React","useCallback","root","current","getNextElement","data","type","treeDataTypes","Click","target","TypeAhead","currentElement","nextTypeAheadElement","event","key","ArrowLeft","actions","queryActions","contains","ownerDocument","activeElement","parentElement","ArrowRight","focus","firstChild","End","lastChildRecursive","Home","ArrowDown","nextElement","ArrowUp","previousElement","navigate","focusOptions","treeRef","useMergedRefs","walker","lastElement","lastChild","querySelector","treeItemLayoutClassNames"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib-commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n useTree_unstable,\n useTreeStyles_unstable,\n useTreeContextValues_unstable,\n renderTree_unstable,\n} from './Tree';\n\nexport type {\n TreeSlots,\n TreeProps,\n TreeState,\n TreeContextValues,\n TreeOpenChangeData,\n TreeSelectionValue,\n TreeOpenChangeEvent,\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n} from './Tree';\n\nexport {\n FlatTree,\n flatTreeClassNames,\n useFlatTree_unstable,\n useFlatTreeStyles_unstable,\n useFlatTreeContextValues_unstable,\n renderFlatTree_unstable,\n} from './FlatTree';\n\nexport type { FlatTreeSlots, FlatTreeProps, FlatTreeState } from './FlatTree';\n\nexport { TreeProvider } from './components/TreeProvider';\n\nexport {\n useTreeContext_unstable,\n useTreeItemContext_unstable,\n useSubtreeContext_unstable,\n TreeItemProvider,\n} from './contexts';\nexport type { TreeContextValue, SubtreeContextValue, TreeItemContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport { useHeadlessFlatTree_unstable } from './components/FlatTree/useHeadlessFlatTree';\nexport type {\n HeadlessFlatTree,\n HeadlessFlatTreeItem,\n HeadlessFlatTreeItemProps,\n HeadlessFlatTreeOptions,\n} from './components/FlatTree/useHeadlessFlatTree';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type {\n TreeItemProps,\n TreeItemState,\n TreeItemSlots,\n TreeItemType,\n TreeItemValue,\n TreeItemOpenChangeData,\n TreeItemOpenChangeEvent,\n} from './TreeItem';\n\nexport { FlatTreeItem } from './FlatTreeItem';\nexport type { FlatTreeItemProps } from './FlatTreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { FlattenTreeItem } from './utils/flattenTree';\n"],"names":["FlatTree","FlatTreeItem","Tree","TreeItem","TreeItemLayout","TreeItemPersonaLayout","TreeItemProvider","TreeProvider","flatTreeClassNames","flattenTree_unstable","renderFlatTree_unstable","renderTreeItemLayout_unstable","renderTreeItemPersonaLayout_unstable","renderTreeItem_unstable","renderTree_unstable","treeClassNames","treeItemClassNames","treeItemLayoutClassNames","treeItemLevelToken","treeItemPersonaLayoutClassNames","useFlatTreeContextValues_unstable","useFlatTreeStyles_unstable","useFlatTree_unstable","useHeadlessFlatTree_unstable","useSubtreeContext_unstable","useTreeContextValues_unstable","useTreeContext_unstable","useTreeItemContextValues_unstable","useTreeItemContext_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","useTreeStyles_unstable","useTree_unstable"],"rangeMappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n useTree_unstable,\n useTreeStyles_unstable,\n useTreeContextValues_unstable,\n renderTree_unstable,\n} from './Tree';\n\nexport type {\n TreeSlots,\n TreeProps,\n TreeState,\n TreeContextValues,\n TreeOpenChangeData,\n TreeSelectionValue,\n TreeOpenChangeEvent,\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeNavigationMode,\n} from './Tree';\n\nexport {\n FlatTree,\n flatTreeClassNames,\n useFlatTree_unstable,\n useFlatTreeStyles_unstable,\n useFlatTreeContextValues_unstable,\n renderFlatTree_unstable,\n} from './FlatTree';\n\nexport type { FlatTreeSlots, FlatTreeProps, FlatTreeState } from './FlatTree';\n\nexport { TreeProvider, TreeRootReset } from './components/TreeProvider';\n\nexport {\n useTreeContext_unstable,\n useTreeItemContext_unstable,\n useSubtreeContext_unstable,\n TreeItemProvider,\n} from './contexts';\nexport type { TreeContextValue, SubtreeContextValue, TreeItemContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport { useHeadlessFlatTree_unstable } from './components/FlatTree/useHeadlessFlatTree';\nexport type {\n HeadlessFlatTree,\n HeadlessFlatTreeItem,\n HeadlessFlatTreeItemProps,\n HeadlessFlatTreeOptions,\n} from './components/FlatTree/useHeadlessFlatTree';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type {\n TreeItemProps,\n TreeItemState,\n TreeItemSlots,\n TreeItemType,\n TreeItemValue,\n TreeItemOpenChangeData,\n TreeItemOpenChangeEvent,\n} from './TreeItem';\n\nexport { FlatTreeItem } from './FlatTreeItem';\nexport type { FlatTreeItemProps } from './FlatTreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { FlattenTreeItem } from './utils/flattenTree';\n"],"names":["FlatTree","FlatTreeItem","Tree","TreeItem","TreeItemLayout","TreeItemPersonaLayout","TreeItemProvider","TreeProvider","TreeRootReset","flatTreeClassNames","flattenTree_unstable","renderFlatTree_unstable","renderTreeItemLayout_unstable","renderTreeItemPersonaLayout_unstable","renderTreeItem_unstable","renderTree_unstable","treeClassNames","treeItemClassNames","treeItemLayoutClassNames","treeItemLevelToken","treeItemPersonaLayoutClassNames","useFlatTreeContextValues_unstable","useFlatTreeStyles_unstable","useFlatTree_unstable","useHeadlessFlatTree_unstable","useSubtreeContext_unstable","useTreeContextValues_unstable","useTreeContext_unstable","useTreeItemContextValues_unstable","useTreeItemContext_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","useTreeStyles_unstable","useTree_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAyBEA,QAAQ;eAARA,kBAAQ;;IAgDDC,YAAY;eAAZA,0BAAY;;IAxEnBC,IAAI;eAAJA,UAAI;;IAuDJC,QAAQ;eAARA,kBAAQ;;IAqBRC,cAAc;eAAdA,8BAAc;;IASdC,qBAAqB;eAArBA,4CAAqB;;IA7CrBC,gBAAgB;eAAhBA,0BAAgB;;IANTC,YAAY;eAAZA,0BAAY;;IAAEC,aAAa;eAAbA,2BAAa;;IATlCC,kBAAkB;eAAlBA,4BAAkB;;IAwEXC,oBAAoB;eAApBA,iCAAoB;;IApE3BC,uBAAuB;eAAvBA,iCAAuB;;IAiDvBC,6BAA6B;eAA7BA,6CAA6B;;IAS7BC,oCAAoC;eAApCA,2DAAoC;;IA9BpCC,uBAAuB;eAAvBA,iCAAuB;;IApDvBC,mBAAmB;eAAnBA,yBAAmB;;IAJnBC,cAAc;eAAdA,oBAAc;;IAuDdC,kBAAkB;eAAlBA,4BAAkB;;IAqBlBC,wBAAwB;eAAxBA,wCAAwB;;IAjCjBC,kBAAkB;eAAlBA,0BAAkB;;IA0CzBC,+BAA+B;eAA/BA,sDAA+B;;IA1D/BC,iCAAiC;eAAjCA,2CAAiC;;IADjCC,0BAA0B;eAA1BA,oCAA0B;;IAD1BC,oBAAoB;eAApBA,8BAAoB;;IAoBbC,4BAA4B;eAA5BA,iDAA4B;;IAPnCC,0BAA0B;eAA1BA,oCAA0B;;IAnC1BC,6BAA6B;eAA7BA,mCAA6B;;IAiC7BC,uBAAuB;eAAvBA,iCAAuB;;IAsBvBC,iCAAiC;eAAjCA,2CAAiC;;IArBjCC,2BAA2B;eAA3BA,qCAA2B;;IAyC3BC,gCAAgC;eAAhCA,gDAAgC;;IAChCC,0BAA0B;eAA1BA,0CAA0B;;IAQ1BC,uCAAuC;eAAvCA,8DAAuC;;IACvCC,iCAAiC;eAAjCA,wDAAiC;;IA/BjCC,0BAA0B;eAA1BA,oCAA0B;;IAE1BC,oBAAoB;eAApBA,8BAAoB;;IAzDpBC,sBAAsB;eAAtBA,4BAAsB;;IADtBC,gBAAgB;eAAhBA,sBAAgB;;;sBAIX;0BAwBA;8BAIqC;0BAOrC;wBAG4B;qCAEU;0BAetC;8BAWsB;gCAStB;uCASA;6BAO8B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui/react-tree",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.9.0",
|
|
4
4
|
"description": "Tree component for Fluent UI React",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -21,20 +21,20 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@fluentui/keyboard-keys": "^9.0.8",
|
|
24
|
-
"@fluentui/react-aria": "^9.13.
|
|
25
|
-
"@fluentui/react-avatar": "^9.6.
|
|
26
|
-
"@fluentui/react-button": "^9.3.
|
|
27
|
-
"@fluentui/react-checkbox": "^9.2.
|
|
28
|
-
"@fluentui/react-context-selector": "^9.1.
|
|
24
|
+
"@fluentui/react-aria": "^9.13.14",
|
|
25
|
+
"@fluentui/react-avatar": "^9.6.49",
|
|
26
|
+
"@fluentui/react-button": "^9.3.100",
|
|
27
|
+
"@fluentui/react-checkbox": "^9.2.46",
|
|
28
|
+
"@fluentui/react-context-selector": "^9.1.72",
|
|
29
29
|
"@fluentui/react-icons": "^2.0.245",
|
|
30
|
-
"@fluentui/react-motion-components-preview": "^0.4.
|
|
31
|
-
"@fluentui/react-motion": "^9.6.
|
|
32
|
-
"@fluentui/react-radio": "^9.2.
|
|
30
|
+
"@fluentui/react-motion-components-preview": "^0.4.3",
|
|
31
|
+
"@fluentui/react-motion": "^9.6.7",
|
|
32
|
+
"@fluentui/react-radio": "^9.2.41",
|
|
33
33
|
"@fluentui/react-shared-contexts": "^9.21.2",
|
|
34
|
-
"@fluentui/react-tabster": "^9.23.
|
|
34
|
+
"@fluentui/react-tabster": "^9.23.3",
|
|
35
35
|
"@fluentui/react-theme": "^9.1.24",
|
|
36
|
-
"@fluentui/react-utilities": "^9.18.
|
|
37
|
-
"@fluentui/react-jsx-runtime": "^9.0.
|
|
36
|
+
"@fluentui/react-utilities": "^9.18.20",
|
|
37
|
+
"@fluentui/react-jsx-runtime": "^9.0.50",
|
|
38
38
|
"@griffel/react": "^1.5.22",
|
|
39
39
|
"@swc/helpers": "^0.5.1"
|
|
40
40
|
},
|