@fluentui/react-tree 9.0.0-beta.24 → 9.0.0-beta.25
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.json +46 -1
- package/CHANGELOG.md +16 -2
- package/dist/index.d.ts +75 -49
- package/lib/components/Tree/Tree.types.js +1 -1
- package/lib/components/Tree/Tree.types.js.map +1 -1
- package/lib/components/Tree/useRootTree.js +55 -73
- package/lib/components/Tree/useRootTree.js.map +1 -1
- package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
- package/lib/components/TreeItem/renderTreeItem.js +4 -2
- package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItem.js +58 -16
- package/lib/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib/components/TreeItem/useTreeItemContextValues.js +13 -6
- package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
- package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemLayout/useTreeItemLayout.js +7 -28
- package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
- package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
- package/lib/contexts/index.js +1 -0
- package/lib/contexts/index.js.map +1 -1
- package/lib/contexts/treeContext.js +2 -2
- package/lib/contexts/treeContext.js.map +1 -1
- package/lib/contexts/treeItemContext.js +0 -4
- package/lib/contexts/treeItemContext.js.map +1 -1
- package/lib/contexts/treeItemSlotsContext.js +9 -0
- package/lib/contexts/treeItemSlotsContext.js.map +1 -0
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useControllableOpenItems.js +25 -0
- package/lib/hooks/useControllableOpenItems.js.map +1 -0
- package/lib/hooks/useFlatTree.js +3 -3
- package/lib/hooks/useFlatTree.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/ImmutableSet.js +16 -9
- package/lib/utils/ImmutableSet.js.map +1 -1
- package/lib/utils/createFlatTreeItems.js.map +1 -1
- package/lib/utils/flattenTree.js +0 -5
- package/lib/utils/flattenTree.js.map +1 -1
- package/lib-commonjs/components/Tree/Tree.types.js +0 -2
- package/lib-commonjs/components/Tree/Tree.types.js.map +1 -1
- package/lib-commonjs/components/Tree/useRootTree.js +54 -72
- package/lib-commonjs/components/Tree/useRootTree.js.map +1 -1
- package/lib-commonjs/components/TreeItem/renderTreeItem.js +3 -1
- package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItem.js +57 -15
- package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
- package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +14 -6
- package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +6 -26
- package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
- package/lib-commonjs/contexts/index.js +1 -0
- package/lib-commonjs/contexts/index.js.map +1 -1
- package/lib-commonjs/contexts/treeContext.js +1 -1
- package/lib-commonjs/contexts/treeContext.js.map +1 -1
- package/lib-commonjs/contexts/treeItemContext.js +0 -4
- package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
- package/lib-commonjs/contexts/treeItemSlotsContext.js +25 -0
- package/lib-commonjs/contexts/treeItemSlotsContext.js.map +1 -0
- package/lib-commonjs/hooks/index.js +1 -1
- package/lib-commonjs/hooks/index.js.map +1 -1
- package/lib-commonjs/hooks/{useOpenItemsState.js → useControllableOpenItems.js} +15 -14
- package/lib-commonjs/hooks/useControllableOpenItems.js.map +1 -0
- package/lib-commonjs/hooks/useFlatTree.js +3 -3
- package/lib-commonjs/hooks/useFlatTree.js.map +1 -1
- package/lib-commonjs/utils/ImmutableSet.js +21 -16
- package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
- package/lib-commonjs/utils/flattenTree.js +0 -5
- package/lib-commonjs/utils/flattenTree.js.map +1 -1
- package/package.json +5 -5
- package/lib/hooks/useOpenItemsState.js +0 -28
- package/lib/hooks/useOpenItemsState.js.map +0 -1
- package/lib-commonjs/hooks/useOpenItemsState.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useFlatTree.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createFlatTreeItems, VisibleFlatTreeItemGenerator } from '../utils/createFlatTreeItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\nimport type {\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport type { TreeItemProps, TreeItemValue } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { dataTreeItemValueAttrName } from '../utils/getTreeItemValueFromElement';\n\nexport type FlatTreeItemProps = Omit<TreeItemProps, 'itemType'> &\n Partial<Pick<TreeItemProps, 'itemType'>> & {\n value: TreeItemValue;\n parentValue?: TreeItemValue;\n };\n\n/**\n * The item that is returned by `useFlatTree`, it represents a wrapper around the properties provided to\n * `useFlatTree` but with extra information that might be useful on flat tree scenarios\n */\nexport type FlatTreeItem<Props extends FlatTreeItemProps = FlatTreeItemProps> = {\n index: number;\n level: number;\n childrenSize: number;\n value: TreeItemValue;\n parentValue: TreeItemValue | undefined;\n getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> &\n Omit<Props, 'parentId'>;\n};\n\nexport type FlatTreeProps = Required<Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'>> & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<string>;\n};\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type FlatTree<Props extends FlatTreeItemProps = FlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): FlatTreeProps;\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && tree.getElementFromItem(nextItem)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: FlatTreeItem<Props>[],\n data: TreeNavigationData_unstable,\n ): FlatTreeItem<Props> | undefined;\n /**\n * similar to getElementById but for FlatTreeItems\n */\n getElementFromItem(item: FlatTreeItem<Props>): HTMLElement | null;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<FlatTreeItem<Props>>;\n};\n\ntype FlatTreeOptions = Pick<TreeProps, 'openItems' | 'defaultOpenItems' | 'onOpenChange' | 'onNavigation_unstable'>;\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param flatTreeItemProps - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useFlatTree_unstable<Props extends FlatTreeItemProps = FlatTreeItemProps>(\n flatTreeItemProps: Props[],\n options: FlatTreeOptions = {},\n): FlatTree<Props> {\n const [openItems, updateOpenItems] = useOpenItemsState(options);\n const flatTreeItems = React.useMemo(() => createFlatTreeItems(flatTreeItemProps), [flatTreeItemProps]);\n const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);\n const treeRef = React.useRef<HTMLDivElement>(null);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n options.onOpenChange?.(event, data);\n if (!event.isDefaultPrevented()) {\n updateOpenItems(data);\n }\n event.preventDefault();\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n options.onNavigation_unstable?.(event, data);\n if (!event.isDefaultPrevented()) {\n navigate(data);\n }\n event.preventDefault();\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: FlatTreeItem<Props>[], data: TreeNavigationData_unstable) => {\n const item = flatTreeItems.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return flatTreeItems.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getElementFromItem = React.useCallback((item: FlatTreeItem<Props>) => {\n return treeRef.current?.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`) as HTMLElement | null;\n }, []);\n\n const ref = useMergedRefs(treeRef, navigationRef as React.Ref<HTMLDivElement>);\n\n const getTreeProps = React.useCallback(\n () => ({\n ref,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems],\n );\n\n const items = React.useCallback(\n () => VisibleFlatTreeItemGenerator(openItems, flatTreeItems),\n [openItems, flatTreeItems],\n );\n\n return React.useMemo(\n () => ({ navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items }),\n [navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items],\n );\n}\n"],"names":["useEventCallback","useMergedRefs","React","createFlatTreeItems","VisibleFlatTreeItemGenerator","treeDataTypes","useFlatTreeNavigation","useOpenItemsState","dataTreeItemValueAttrName","useFlatTree_unstable","flatTreeItemProps","options","openItems","updateOpenItems","flatTreeItems","useMemo","navigate","navigationRef","treeRef","useRef","handleOpenChange","event","data","onOpenChange","isDefaultPrevented","preventDefault","handleNavigation","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","useCallback","current","querySelector","ref","getTreeProps","items"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["useFlatTree.ts"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createFlatTreeItems, VisibleFlatTreeItemGenerator } from '../utils/createFlatTreeItems';\nimport { treeDataTypes } from '../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useControllableOpenItems } from './useControllableOpenItems';\nimport type {\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport type { TreeItemProps, TreeItemValue } from '../TreeItem';\nimport { dataTreeItemValueAttrName } from '../utils/getTreeItemValueFromElement';\nimport { ImmutableSet } from '../utils/ImmutableSet';\n\nexport type FlatTreeItemProps = Omit<TreeItemProps, 'itemType' | 'value'> &\n Partial<Pick<TreeItemProps, 'itemType'>> & {\n value: TreeItemValue;\n parentValue?: TreeItemValue;\n };\n\n/**\n * The item that is returned by `useFlatTree`, it represents a wrapper around the properties provided to\n * `useFlatTree` but with extra information that might be useful on flat tree scenarios\n */\nexport type FlatTreeItem<Props extends FlatTreeItemProps = FlatTreeItemProps> = {\n index: number;\n level: number;\n childrenSize: number;\n value: TreeItemValue;\n parentValue: TreeItemValue | undefined;\n getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> &\n Omit<Props, 'parentId'>;\n};\n\nexport type FlatTreeProps = Required<Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'>> & {\n ref: React.Ref<HTMLDivElement>;\n openItems: ImmutableSet<TreeItemValue>;\n};\n\n/**\n * FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n *\n * On simple scenarios it is advised to simply use a nested structure instead.\n */\nexport type FlatTree<Props extends FlatTreeItemProps = FlatTreeItemProps> = {\n /**\n * returns the properties required for the Tree component to work properly.\n * That includes:\n * `openItems`, `onOpenChange`, `onNavigation_unstable` and `ref`\n */\n getTreeProps(): FlatTreeProps;\n /**\n * internal method used to react to an `onNavigation` event.\n * This method ensures proper navigation on keyboard and mouse interaction.\n * In case of virtualization it might be required to cancel default provided `onNavigation`\n * event and then call this method manually.\n *\n * @example\n * ```ts\n * // react-window\n * const handleNavigation = (event, data) => {\n * event.preventDefault();\n * const nextItem = tree.getNextNavigableItem(data);\n * // scroll to item using virtualization scroll mechanism\n * if (nextItem && tree.getElementFromItem(nextItem)) {\n * listRef.current.scrollToItem(nextItem.index);\n * }\n * // wait for scrolling to happen and then invoke navigate method\n * requestAnimationFrame(() => {\n * tree.navigate(data);\n * });\n * };\n *```\n */\n navigate(data: TreeNavigationData_unstable): void;\n /**\n * returns next item to be focused on a navigation.\n * This method is provided to decouple the element that needs to be focused from\n * the action of focusing it itself.\n *\n * On the case of TypeAhead navigation this method returns the current item.\n */\n getNextNavigableItem(\n visibleItems: FlatTreeItem<Props>[],\n data: TreeNavigationData_unstable,\n ): FlatTreeItem<Props> | undefined;\n /**\n * similar to getElementById but for FlatTreeItems\n */\n getElementFromItem(item: FlatTreeItem<Props>): HTMLElement | null;\n /**\n * an iterable containing all visually available flat tree items\n */\n items(): IterableIterator<FlatTreeItem<Props>>;\n};\n\ntype FlatTreeOptions = Pick<TreeProps, 'openItems' | 'defaultOpenItems' | 'onOpenChange' | 'onNavigation_unstable'>;\n\n/**\n * this hook provides FlatTree API to manage all required mechanisms to convert a list of items into renderable TreeItems\n * in multiple scenarios including virtualization.\n *\n * !!A flat tree is an unofficial spec for tree!!\n *\n * It should be used on cases where more complex interactions with a Tree is required.\n * On simple scenarios it is advised to simply use a nested structure instead.\n *\n * @param flatTreeItemProps - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useFlatTree_unstable<Props extends FlatTreeItemProps = FlatTreeItemProps>(\n flatTreeItemProps: Props[],\n options: FlatTreeOptions = {},\n): FlatTree<Props> {\n const flatTreeItems = React.useMemo(() => createFlatTreeItems(flatTreeItemProps), [flatTreeItemProps]);\n const [openItems, setOpenItems] = useControllableOpenItems(options);\n const [navigate, navigationRef] = useFlatTreeNavigation(flatTreeItems);\n const treeRef = React.useRef<HTMLDivElement>(null);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n options.onOpenChange?.(event, data);\n if (!event.isDefaultPrevented()) {\n setOpenItems(data.openItems);\n }\n event.preventDefault();\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n options.onNavigation_unstable?.(event, data);\n if (!event.isDefaultPrevented()) {\n navigate(data);\n }\n event.preventDefault();\n },\n );\n\n const getNextNavigableItem = useEventCallback(\n (visibleItems: FlatTreeItem<Props>[], data: TreeNavigationData_unstable) => {\n const item = flatTreeItems.get(data.value);\n if (item) {\n switch (data.type) {\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return flatTreeItems.get(item.parentValue!);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n },\n );\n\n const getElementFromItem = React.useCallback((item: FlatTreeItem<Props>) => {\n return treeRef.current?.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`) as HTMLElement | null;\n }, []);\n\n const ref = useMergedRefs(treeRef, navigationRef as React.Ref<HTMLDivElement>);\n\n const getTreeProps = React.useCallback(\n () => ({\n ref,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [openItems],\n );\n\n const items = React.useCallback(\n () => VisibleFlatTreeItemGenerator(openItems, flatTreeItems),\n [openItems, flatTreeItems],\n );\n\n return React.useMemo(\n () => ({ navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items }),\n [navigate, getTreeProps, getNextNavigableItem, getElementFromItem, items],\n );\n}\n"],"names":["useEventCallback","useMergedRefs","React","createFlatTreeItems","VisibleFlatTreeItemGenerator","treeDataTypes","useFlatTreeNavigation","useControllableOpenItems","dataTreeItemValueAttrName","useFlatTree_unstable","flatTreeItemProps","options","flatTreeItems","useMemo","openItems","setOpenItems","navigate","navigationRef","treeRef","useRef","handleOpenChange","event","data","onOpenChange","isDefaultPrevented","preventDefault","handleNavigation","onNavigation_unstable","getNextNavigableItem","visibleItems","item","get","value","type","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","useCallback","current","querySelector","ref","getTreeProps","items"],"mappings":"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"}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n renderTree_unstable,\n useTreeStyles_unstable,\n useTree_unstable,\n useTreeContextValues_unstable,\n} from './Tree';\nexport type {\n TreeProps,\n TreeState,\n TreeSlots,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeNavigationEvent_unstable,\n TreeNavigationData_unstable,\n} from './Tree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots } from './TreeItem';\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 { useFlatTree_unstable } from './hooks/index';\nexport type { FlatTreeItem, FlatTreeItemProps, FlatTreeProps, FlatTree } from './hooks/index';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { NestedTreeItem } from './utils/flattenTree';\n"],"names":["Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItemContextValues_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useFlatTree_unstable","flattenTree_unstable"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,mBAAmB,EACnBC,sBAAsB,EACtBC,gBAAgB,EAChBC,6BAA6B,QACxB,SAAS;AAWhB,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,aAAa;AAGlH,SAASC,kBAAkB,QAAQ,iBAAiB;AAEpD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,iCAAiC,EACjCC,oBAAoB,QACf,aAAa;AAGpB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,mBAAmB;AAG1B,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,0BAA0B;AAOjC,SAASC,oBAAoB,QAAQ,gBAAgB;AAGrD,SAASC,oBAAoB,QAAQ,sBAAsB"}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n renderTree_unstable,\n useTreeStyles_unstable,\n useTree_unstable,\n useTreeContextValues_unstable,\n} from './Tree';\nexport type {\n TreeProps,\n TreeState,\n TreeSlots,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeNavigationEvent_unstable,\n TreeNavigationData_unstable,\n} from './Tree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots, TreeItemValue } from './TreeItem';\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 { useFlatTree_unstable } from './hooks/index';\nexport type { FlatTreeItem, FlatTreeItemProps, FlatTreeProps, FlatTree } from './hooks/index';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { NestedTreeItem } from './utils/flattenTree';\n"],"names":["Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItemContextValues_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useFlatTree_unstable","flattenTree_unstable"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,mBAAmB,EACnBC,sBAAsB,EACtBC,gBAAgB,EAChBC,6BAA6B,QACxB,SAAS;AAWhB,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,aAAa;AAGlH,SAASC,kBAAkB,QAAQ,iBAAiB;AAEpD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,iCAAiC,EACjCC,oBAAoB,QACf,aAAa;AAGpB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,mBAAmB;AAG1B,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,0BAA0B;AAOjC,SAASC,oBAAoB,QAAQ,gBAAgB;AAGrD,SAASC,oBAAoB,QAAQ,sBAAsB"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* properly creates an ImmutableSet instance from an iterable
|
|
4
|
-
*/ export function createImmutableSet(iterable) {
|
|
5
|
-
const internalSet = new Set(iterable);
|
|
6
|
-
return dangerouslyCreateImmutableSet(internalSet);
|
|
7
|
-
}
|
|
1
|
+
const emptyImmutableSet = createImmutableSet();
|
|
8
2
|
/**
|
|
9
3
|
* Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,
|
|
10
4
|
* @param internalSet - a set that is used internally to store values.
|
|
11
|
-
*/
|
|
5
|
+
*/ function dangerouslyCreateImmutableSet(internalSet) {
|
|
12
6
|
return {
|
|
13
7
|
size: internalSet.size,
|
|
14
8
|
add (value) {
|
|
@@ -29,6 +23,19 @@ export const emptyImmutableSet = createImmutableSet();
|
|
|
29
23
|
},
|
|
30
24
|
[Symbol.iterator] () {
|
|
31
25
|
return internalSet[Symbol.iterator]();
|
|
32
|
-
}
|
|
26
|
+
},
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
28
|
+
dangerousGetInternalSet_unstable: ()=>internalSet
|
|
33
29
|
};
|
|
34
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* properly creates an ImmutableSet instance from an iterable
|
|
33
|
+
*/ function createImmutableSet(iterable) {
|
|
34
|
+
const internalSet = new Set(iterable);
|
|
35
|
+
return dangerouslyCreateImmutableSet(internalSet);
|
|
36
|
+
}
|
|
37
|
+
export const ImmutableSet = {
|
|
38
|
+
empty: emptyImmutableSet,
|
|
39
|
+
create: createImmutableSet,
|
|
40
|
+
dangerouslyCreate: dangerouslyCreateImmutableSet
|
|
41
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n
|
|
1
|
+
{"version":3,"sources":["ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n /**\n * @internal\n * Exposes the internal set used to store values.\n * This is an internal API and should not be used directly.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerousGetInternalSet_unstable(): Set<Value>;\n}\n\nconst emptyImmutableSet = createImmutableSet<never>();\n\n/**\n * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,\n * @param internalSet - a set that is used internally to store values.\n */\nfunction dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value> {\n return {\n size: internalSet.size,\n add(value) {\n const nextSet = new Set(internalSet);\n nextSet.add(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n clear() {\n return emptyImmutableSet;\n },\n delete(value) {\n const nextSet = new Set(internalSet);\n nextSet.delete(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n has(value) {\n return internalSet.has(value);\n },\n [Symbol.iterator]() {\n return internalSet[Symbol.iterator]();\n },\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerousGetInternalSet_unstable: () => internalSet,\n };\n}\n\n/**\n * properly creates an ImmutableSet instance from an iterable\n */\nfunction createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value> {\n const internalSet = new Set(iterable);\n return dangerouslyCreateImmutableSet(internalSet);\n}\n\nexport const ImmutableSet = {\n empty: emptyImmutableSet,\n create: createImmutableSet,\n dangerouslyCreate: dangerouslyCreateImmutableSet,\n};\n"],"names":["emptyImmutableSet","createImmutableSet","dangerouslyCreateImmutableSet","internalSet","size","add","value","nextSet","Set","clear","delete","has","Symbol","iterator","dangerousGetInternalSet_unstable","iterable","ImmutableSet","empty","create","dangerouslyCreate"],"mappings":"AAiCA,MAAMA,oBAAoBC;AAE1B;;;CAGC,GACD,SAASC,8BAAqCC,WAAuB,EAAuB;IAC1F,OAAO;QACLC,MAAMD,YAAYC,IAAI;QACtBC,KAAIC,KAAK,EAAE;YACT,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQF,GAAG,CAACC;YACZ,OAAOJ,8BAA8BK;QACvC;QACAE,SAAQ;YACN,OAAOT;QACT;QACAU,QAAOJ,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQG,MAAM,CAACJ;YACf,OAAOJ,8BAA8BK;QACvC;QACAI,KAAIL,KAAK,EAAE;YACT,OAAOH,YAAYQ,GAAG,CAACL;QACzB;QACA,CAACM,OAAOC,QAAQ,CAAC,IAAG;YAClB,OAAOV,WAAW,CAACS,OAAOC,QAAQ,CAAC;QACrC;QACA,gEAAgE;QAChEC,kCAAkC,IAAMX;IAC1C;AACF;AAEA;;CAEC,GACD,SAASF,mBAA0Bc,QAA0B,EAAuB;IAClF,MAAMZ,cAAc,IAAIK,IAAIO;IAC5B,OAAOb,8BAA8BC;AACvC;AAEA,OAAO,MAAMa,eAAe;IAC1BC,OAAOjB;IACPkB,QAAQjB;IACRkB,mBAAmBjB;AACrB,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["createFlatTreeItems.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["createFlatTreeItems.ts"],"sourcesContent":["import type { FlatTreeItem, FlatTreeItemProps } from '../hooks/useFlatTree';\nimport { TreeItemValue } from '../TreeItem';\nimport { ImmutableSet } from './ImmutableSet';\n\n/**\n * @internal\n */\nexport type FlatTreeItems<Props extends FlatTreeItemProps> = {\n size: number;\n root: FlatTreeItem;\n get(key: TreeItemValue): FlatTreeItem<Props> | undefined;\n set(key: TreeItemValue, value: FlatTreeItem<Props>): void;\n getByIndex(index: number): FlatTreeItem<Props>;\n};\n\n/**\n * creates a list of flat tree items\n * and provides a map to access each item by id\n */\nexport function createFlatTreeItems<Props extends FlatTreeItemProps>(flatTreeItemProps: Props[]): FlatTreeItems<Props> {\n const root = createFlatTreeRootItem();\n const itemsPerValue = new Map<TreeItemValue, FlatTreeItem<FlatTreeItemProps>>([[root.value, root]]);\n const items: FlatTreeItem<FlatTreeItemProps>[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentValue = flatTreeRootId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextItemProps: Props | undefined = flatTreeItemProps[index + 1];\n const currentParent = itemsPerValue.get(parentValue);\n if (!currentParent) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.error(\n `useFlatTree: item ${flatTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`,\n );\n }\n break;\n }\n const itemType =\n treeItemProps.itemType ??\n (treeItemProps.value === undefined || nextItemProps?.parentValue !== treeItemProps.value ? 'leaf' : 'branch');\n const currentLevel = (currentParent.level ?? 0) + 1;\n const currentChildrenSize = ++currentParent.childrenSize;\n\n const flatTreeItem: FlatTreeItem<FlatTreeItemProps> = {\n value: treeItemProps.value,\n getTreeItemProps: () => ({\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentChildrenSize,\n 'aria-setsize': currentParent.childrenSize,\n itemType,\n }),\n level: currentLevel,\n parentValue,\n childrenSize: 0,\n index: -1,\n };\n itemsPerValue.set(flatTreeItem.value, flatTreeItem);\n items.push(flatTreeItem);\n }\n\n const flatTreeItems: FlatTreeItems<FlatTreeItemProps> = {\n root,\n size: items.length,\n getByIndex: index => items[index],\n get: key => itemsPerValue.get(key),\n set: (key, value) => itemsPerValue.set(key, value),\n };\n\n return flatTreeItems as FlatTreeItems<Props>;\n}\n\nexport const flatTreeRootId = '__fuiFlatTreeRoot';\n\nfunction createFlatTreeRootItem(): FlatTreeItem {\n return {\n parentValue: undefined,\n value: flatTreeRootId,\n getTreeItemProps: () => {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');\n }\n return {\n id: flatTreeRootId,\n value: flatTreeRootId,\n 'aria-setsize': -1,\n 'aria-level': -1,\n 'aria-posinset': -1,\n itemType: 'branch',\n };\n },\n childrenSize: 0,\n get index() {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');\n }\n return -1;\n },\n level: 0,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function* VisibleFlatTreeItemGenerator<Props extends FlatTreeItemProps>(\n openItems: ImmutableSet<TreeItemValue>,\n flatTreeItems: FlatTreeItems<Props>,\n) {\n for (let index = 0, visibleIndex = 0; index < flatTreeItems.size; index++) {\n const item = flatTreeItems.getByIndex(index) as FlatTreeItem<Props>;\n if (isItemVisible(item, openItems, flatTreeItems)) {\n item.index = visibleIndex++;\n yield item;\n } else {\n // Jump the amount of children the current item has, since those items will also be hidden\n index += item.childrenSize;\n }\n }\n}\n\nfunction isItemVisible(\n item: FlatTreeItem<FlatTreeItemProps>,\n openItems: ImmutableSet<TreeItemValue>,\n flatTreeItems: FlatTreeItems<FlatTreeItemProps>,\n) {\n if (item.level === 1) {\n return true;\n }\n while (item.parentValue && item.parentValue !== flatTreeItems.root.value) {\n if (!openItems.has(item.parentValue)) {\n return false;\n }\n const parent = flatTreeItems.get(item.parentValue);\n if (!parent) {\n return false;\n }\n item = parent;\n }\n return true;\n}\n"],"names":["createFlatTreeItems","flatTreeItemProps","root","createFlatTreeRootItem","itemsPerValue","Map","value","items","index","length","parentValue","flatTreeRootId","treeItemProps","nextItemProps","currentParent","get","process","env","NODE_ENV","console","error","itemType","undefined","currentLevel","level","currentChildrenSize","childrenSize","flatTreeItem","getTreeItemProps","set","push","flatTreeItems","size","getByIndex","key","id","VisibleFlatTreeItemGenerator","openItems","visibleIndex","item","isItemVisible","has","parent"],"mappings":"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"}
|
package/lib/utils/flattenTree.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
let count = 1;
|
|
2
1
|
function flattenTreeRecursive(items, parent, level = 1) {
|
|
3
2
|
return items.reduce((acc, { subtree , ...item }, index)=>{
|
|
4
|
-
var _item_id;
|
|
5
|
-
const id = (_item_id = item.id) !== null && _item_id !== void 0 ? _item_id : `fui-FlatTreeItem-${count++}`;
|
|
6
|
-
var _item_value;
|
|
7
3
|
const flatTreeItem = {
|
|
8
4
|
'aria-level': level,
|
|
9
5
|
'aria-posinset': index + 1,
|
|
10
6
|
'aria-setsize': items.length,
|
|
11
7
|
parentValue: parent === null || parent === void 0 ? void 0 : parent.value,
|
|
12
|
-
value: (_item_value = item.value) !== null && _item_value !== void 0 ? _item_value : id,
|
|
13
8
|
...item
|
|
14
9
|
};
|
|
15
10
|
acc.push(flatTreeItem);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["flattenTree.ts"],"sourcesContent":["import { FlatTreeItemProps } from '../hooks/useFlatTree';\nimport { TreeItemProps } from '../TreeItem';\n\nexport type NestedTreeItem<Props extends TreeItemProps> = Omit<Props, 'subtree' | 'itemType'> & {\n subtree?: NestedTreeItem<Props>[];\n};\n\nexport type FlattenedTreeItem<Props extends TreeItemProps> = FlatTreeItemProps & Props;\n\
|
|
1
|
+
{"version":3,"sources":["flattenTree.ts"],"sourcesContent":["import { FlatTreeItemProps } from '../hooks/useFlatTree';\nimport { TreeItemProps, TreeItemValue } from '../TreeItem';\n\nexport type NestedTreeItem<Props extends TreeItemProps> = Omit<Props, 'subtree' | 'itemType'> & {\n value: TreeItemValue;\n subtree?: NestedTreeItem<Props>[];\n};\n\nexport type FlattenedTreeItem<Props extends TreeItemProps> = FlatTreeItemProps & Props;\n\nfunction flattenTreeRecursive<Props extends TreeItemProps>(\n items: NestedTreeItem<Props>[],\n parent?: FlatTreeItemProps & Props,\n level = 1,\n): FlattenedTreeItem<Props>[] {\n return items.reduce<FlattenedTreeItem<Props>[]>((acc, { subtree, ...item }, index) => {\n const flatTreeItem = {\n 'aria-level': level,\n 'aria-posinset': index + 1,\n 'aria-setsize': items.length,\n parentValue: parent?.value,\n ...item,\n } as FlattenedTreeItem<Props>;\n acc.push(flatTreeItem);\n if (subtree !== undefined) {\n acc.push(...flattenTreeRecursive<Props>(subtree, flatTreeItem, level + 1));\n }\n return acc;\n }, []);\n}\n\n/**\n * Converts a nested structure to a flat one which can be consumed by `useFlatTreeItems`\n * @example\n * ```tsx\n * const defaultItems = flattenTree_unstable([\n * {\n * children: <TreeItemLayout>level 1, item 1</TreeItemLayout>,\n * subtree: [\n * {\n * children: <TreeItemLayout>level 2, item 1</TreeItemLayout>,\n * },\n * {\n * children: <TreeItemLayout>level 2, item 2</TreeItemLayout>,\n * },\n * {\n * children: <TreeItemLayout>level 2, item 3</TreeItemLayout>,\n * },\n * ],\n * },\n * {\n * children: <TreeItemLayout>level 1, item 2</TreeItemLayout>,\n * subtree: [\n * {\n * children: <TreeItemLayout>level 2, item 1</TreeItemLayout>,\n * subtree: [\n * {\n * children: <TreeItemLayout>level 3, item 1</TreeItemLayout>,\n * subtree: [\n * {\n * children: <TreeItemLayout>level 4, item 1</TreeItemLayout>,\n * },\n * ],\n * },\n * ],\n * },\n * ],\n * },\n * ]);\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const flattenTree_unstable = <Props extends TreeItemProps>(\n items: NestedTreeItem<Props>[],\n): FlattenedTreeItem<Props>[] => flattenTreeRecursive(items);\n"],"names":["flattenTreeRecursive","items","parent","level","reduce","acc","subtree","item","index","flatTreeItem","length","parentValue","value","push","undefined","flattenTree_unstable"],"mappings":"AAUA,SAASA,qBACPC,KAA8B,EAC9BC,MAAkC,EAClCC,QAAQ,CAAC,EACmB;IAC5B,OAAOF,MAAMG,MAAM,CAA6B,CAACC,KAAK,EAAEC,QAAO,EAAE,GAAGC,MAAM,EAAEC,QAAU;QACpF,MAAMC,eAAe;YACnB,cAAcN;YACd,iBAAiBK,QAAQ;YACzB,gBAAgBP,MAAMS,MAAM;YAC5BC,aAAaT,mBAAAA,oBAAAA,KAAAA,IAAAA,OAAQU,KAAK;YAC1B,GAAGL,IAAI;QACT;QACAF,IAAIQ,IAAI,CAACJ;QACT,IAAIH,YAAYQ,WAAW;YACzBT,IAAIQ,IAAI,IAAIb,qBAA4BM,SAASG,cAAcN,QAAQ;QACzE,CAAC;QACD,OAAOE;IACT,GAAG,EAAE;AACP;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCC,GACD,gEAAgE;AAChE,OAAO,MAAMU,uBAAuB,CAClCd,QAC+BD,qBAAqBC,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -15,15 +15,19 @@ const _tokens = require("../../utils/tokens");
|
|
|
15
15
|
function useRootTree(props, ref) {
|
|
16
16
|
warnIfNoProperPropsRootTree(props);
|
|
17
17
|
const { appearance ='subtle' , size ='medium' } = props;
|
|
18
|
-
const [openItems,
|
|
18
|
+
const [openItems, setOpenItems] = (0, _hooks.useControllableOpenItems)(props);
|
|
19
19
|
const [navigate, navigationRef] = (0, _hooks.useNestedTreeNavigation)();
|
|
20
20
|
const requestOpenChange = (data)=>{
|
|
21
21
|
var _props_onOpenChange;
|
|
22
|
-
|
|
22
|
+
const nextOpenItems = (0, _hooks.createNextOpenItems)(data, openItems);
|
|
23
|
+
(_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, data.event, {
|
|
24
|
+
...data,
|
|
25
|
+
openItems: nextOpenItems
|
|
26
|
+
});
|
|
23
27
|
if (data.event.isDefaultPrevented()) {
|
|
24
28
|
return;
|
|
25
29
|
}
|
|
26
|
-
return
|
|
30
|
+
return setOpenItems(nextOpenItems);
|
|
27
31
|
};
|
|
28
32
|
const requestNavigation = (data)=>{
|
|
29
33
|
var _props_onNavigation_unstable;
|
|
@@ -36,91 +40,69 @@ function useRootTree(props, ref) {
|
|
|
36
40
|
data.event.preventDefault();
|
|
37
41
|
}
|
|
38
42
|
};
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
};
|
|
56
|
-
const handleTreeItemKeyDown = ({ event , type , value , itemType })=>{
|
|
57
|
-
const open = openItems.has(value);
|
|
58
|
-
switch(type){
|
|
43
|
+
const requestTreeResponse = (0, _reactUtilities.useEventCallback)((request)=>{
|
|
44
|
+
switch(request.type){
|
|
45
|
+
case _tokens.treeDataTypes.Click:
|
|
46
|
+
case _tokens.treeDataTypes.ExpandIconClick:
|
|
47
|
+
{
|
|
48
|
+
return _reactDom.unstable_batchedUpdates(()=>{
|
|
49
|
+
requestOpenChange({
|
|
50
|
+
...request,
|
|
51
|
+
open: request.itemType === 'branch' && !openItems.has(request.value)
|
|
52
|
+
});
|
|
53
|
+
requestNavigation({
|
|
54
|
+
...request,
|
|
55
|
+
type: _tokens.treeDataTypes.Click
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
59
|
case _tokens.treeDataTypes.ArrowRight:
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
{
|
|
61
|
+
if (request.itemType === 'leaf') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const open = openItems.has(request.value);
|
|
65
|
+
if (!open) {
|
|
66
|
+
return requestOpenChange({
|
|
67
|
+
...request,
|
|
68
|
+
open: true
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return requestNavigation(request);
|
|
62
72
|
}
|
|
63
|
-
|
|
73
|
+
case _tokens.treeDataTypes.Enter:
|
|
74
|
+
{
|
|
75
|
+
const open = openItems.has(request.value);
|
|
64
76
|
return requestOpenChange({
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
open: true,
|
|
68
|
-
type: _tokens.treeDataTypes.ArrowRight,
|
|
69
|
-
target: event.currentTarget
|
|
77
|
+
...request,
|
|
78
|
+
open: request.itemType === 'branch' && !open
|
|
70
79
|
});
|
|
71
80
|
}
|
|
72
|
-
return requestNavigation({
|
|
73
|
-
event,
|
|
74
|
-
value,
|
|
75
|
-
type,
|
|
76
|
-
target: event.currentTarget
|
|
77
|
-
});
|
|
78
|
-
case _tokens.treeDataTypes.Enter:
|
|
79
|
-
return requestOpenChange({
|
|
80
|
-
event,
|
|
81
|
-
value,
|
|
82
|
-
open: itemType === 'branch' && !open,
|
|
83
|
-
type: _tokens.treeDataTypes.Enter,
|
|
84
|
-
target: event.currentTarget
|
|
85
|
-
});
|
|
86
81
|
case _tokens.treeDataTypes.ArrowLeft:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
82
|
+
{
|
|
83
|
+
const open = openItems.has(request.value);
|
|
84
|
+
if (open && request.itemType === 'branch') {
|
|
85
|
+
return requestOpenChange({
|
|
86
|
+
...request,
|
|
87
|
+
open: false,
|
|
88
|
+
type: _tokens.treeDataTypes.ArrowLeft
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return requestNavigation({
|
|
92
|
+
...request,
|
|
93
|
+
type: _tokens.treeDataTypes.ArrowLeft
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
-
return requestNavigation({
|
|
97
|
-
event,
|
|
98
|
-
value,
|
|
99
|
-
target: event.currentTarget,
|
|
100
|
-
type: _tokens.treeDataTypes.ArrowLeft
|
|
101
|
-
});
|
|
102
96
|
case _tokens.treeDataTypes.End:
|
|
103
97
|
case _tokens.treeDataTypes.Home:
|
|
104
98
|
case _tokens.treeDataTypes.ArrowUp:
|
|
105
99
|
case _tokens.treeDataTypes.ArrowDown:
|
|
106
100
|
case _tokens.treeDataTypes.TypeAhead:
|
|
107
101
|
return requestNavigation({
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
type,
|
|
111
|
-
target: event.currentTarget
|
|
102
|
+
...request,
|
|
103
|
+
target: request.event.currentTarget
|
|
112
104
|
});
|
|
113
105
|
}
|
|
114
|
-
};
|
|
115
|
-
const requestTreeResponse = (0, _reactUtilities.useEventCallback)((request)=>{
|
|
116
|
-
switch(request.event.type){
|
|
117
|
-
case 'click':
|
|
118
|
-
// casting is required here as we're narrowing down the event to only click events
|
|
119
|
-
return handleTreeItemClick(request);
|
|
120
|
-
case 'keydown':
|
|
121
|
-
// casting is required here as we're narrowing down the event to only keyboard events
|
|
122
|
-
return handleTreeItemKeyDown(request);
|
|
123
|
-
}
|
|
124
106
|
});
|
|
125
107
|
return {
|
|
126
108
|
components: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useRootTree.js"],"sourcesContent":["import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport {
|
|
1
|
+
{"version":3,"sources":["useRootTree.js"],"sourcesContent":["import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { createNextOpenItems, useControllableOpenItems, useNestedTreeNavigation } from '../../hooks';\nimport { treeDataTypes } from '../../utils/tokens';\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 */ export function useRootTree(props, ref) {\n warnIfNoProperPropsRootTree(props);\n const { appearance ='subtle' , size ='medium' } = props;\n const [openItems, setOpenItems] = useControllableOpenItems(props);\n const [navigate, navigationRef] = useNestedTreeNavigation();\n const requestOpenChange = (data)=>{\n var _props_onOpenChange;\n const nextOpenItems = createNextOpenItems(data, openItems);\n (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, data.event, {\n ...data,\n openItems: nextOpenItems\n });\n if (data.event.isDefaultPrevented()) {\n return;\n }\n return setOpenItems(nextOpenItems);\n };\n const requestNavigation = (data)=>{\n var _props_onNavigation_unstable;\n (_props_onNavigation_unstable = props.onNavigation_unstable) === null || _props_onNavigation_unstable === void 0 ? void 0 : _props_onNavigation_unstable.call(props, data.event, data);\n if (data.event.isDefaultPrevented()) {\n return;\n }\n navigate(data);\n if (data.type === treeDataTypes.ArrowDown || data.type === treeDataTypes.ArrowUp) {\n data.event.preventDefault();\n }\n };\n const requestTreeResponse = useEventCallback((request)=>{\n switch(request.type){\n case treeDataTypes.Click:\n case treeDataTypes.ExpandIconClick:\n {\n return ReactDOM.unstable_batchedUpdates(()=>{\n requestOpenChange({\n ...request,\n open: request.itemType === 'branch' && !openItems.has(request.value)\n });\n requestNavigation({\n ...request,\n type: treeDataTypes.Click\n });\n });\n }\n case treeDataTypes.ArrowRight:\n {\n if (request.itemType === 'leaf') {\n return;\n }\n const open = openItems.has(request.value);\n if (!open) {\n return requestOpenChange({\n ...request,\n open: true\n });\n }\n return requestNavigation(request);\n }\n case treeDataTypes.Enter:\n {\n const open = openItems.has(request.value);\n return requestOpenChange({\n ...request,\n open: request.itemType === 'branch' && !open\n });\n }\n case treeDataTypes.ArrowLeft:\n {\n const open = openItems.has(request.value);\n if (open && request.itemType === 'branch') {\n return requestOpenChange({\n ...request,\n open: false,\n type: treeDataTypes.ArrowLeft\n });\n }\n return requestNavigation({\n ...request,\n type: treeDataTypes.ArrowLeft\n });\n }\n case treeDataTypes.End:\n case treeDataTypes.Home:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.ArrowDown:\n case treeDataTypes.TypeAhead:\n return requestNavigation({\n ...request,\n target: request.event.currentTarget\n });\n }\n });\n return {\n components: {\n root: 'div'\n },\n open: true,\n appearance,\n size,\n level: 1,\n openItems,\n requestTreeResponse,\n root: getNativeElementProps('div', {\n ref: useMergedRefs(navigationRef, ref),\n role: 'tree',\n ...props\n })\n };\n}\nfunction warnIfNoProperPropsRootTree(props) {\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('Tree must have either a `aria-label` or `aria-labelledby` property defined');\n }\n }\n}\n"],"names":["useRootTree","props","ref","warnIfNoProperPropsRootTree","appearance","size","openItems","setOpenItems","useControllableOpenItems","navigate","navigationRef","useNestedTreeNavigation","requestOpenChange","data","_props_onOpenChange","nextOpenItems","createNextOpenItems","onOpenChange","call","event","isDefaultPrevented","requestNavigation","_props_onNavigation_unstable","onNavigation_unstable","type","treeDataTypes","ArrowDown","ArrowUp","preventDefault","requestTreeResponse","useEventCallback","request","Click","ExpandIconClick","ReactDOM","unstable_batchedUpdates","open","itemType","has","value","ArrowRight","Enter","ArrowLeft","End","Home","TypeAhead","target","currentTarget","components","root","level","getNativeElementProps","useMergedRefs","role","process","env","NODE_ENV","console","warn"],"mappings":"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"}
|
|
@@ -13,5 +13,7 @@ const renderTreeItem_unstable = (state, contextValues)=>{
|
|
|
13
13
|
const { slots , slotProps } = (0, _reactUtilities.getSlotsNext)(state);
|
|
14
14
|
return /*#__PURE__*/ (0, _reactJsxRuntime.createElement)(slots.root, slotProps.root, /*#__PURE__*/ (0, _reactJsxRuntime.createElement)(_contexts.TreeItemProvider, {
|
|
15
15
|
value: contextValues.treeItem
|
|
16
|
-
},
|
|
16
|
+
}, /*#__PURE__*/ (0, _reactJsxRuntime.createElement)(_contexts.TreeItemSlotsProvider, {
|
|
17
|
+
value: contextValues.treeItemSlots
|
|
18
|
+
}, slotProps.root.children)));
|
|
17
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["renderTreeItem.js"],"sourcesContent":["/** @jsxRuntime classic */ /** @jsx createElement */ import { createElement } from '@fluentui/react-jsx-runtime';\nimport { getSlotsNext } from '@fluentui/react-utilities';\nimport { TreeItemProvider } from '../../contexts';\n/**\n * Render the final JSX of TreeItem\n */ export const renderTreeItem_unstable = (state, contextValues)=>{\n const { slots , slotProps } = getSlotsNext(state);\n return /*#__PURE__*/ createElement(slots.root, slotProps.root, /*#__PURE__*/ createElement(TreeItemProvider, {\n value: contextValues.treeItem\n }, slotProps.root.children));\n};\n"],"names":["renderTreeItem_unstable","state","contextValues","slots","slotProps","getSlotsNext","createElement","root","TreeItemProvider","value","treeItem","children"],"mappings":"AAAA,wBAAwB,GAAG,uBAAuB;;;;+BAKjCA;;aAAAA;;iCALkE;gCACtD;
|
|
1
|
+
{"version":3,"sources":["renderTreeItem.js"],"sourcesContent":["/** @jsxRuntime classic */ /** @jsx createElement */ import { createElement } from '@fluentui/react-jsx-runtime';\nimport { getSlotsNext } from '@fluentui/react-utilities';\nimport { TreeItemProvider, TreeItemSlotsProvider } from '../../contexts';\n/**\n * Render the final JSX of TreeItem\n */ export const renderTreeItem_unstable = (state, contextValues)=>{\n const { slots , slotProps } = getSlotsNext(state);\n return /*#__PURE__*/ createElement(slots.root, slotProps.root, /*#__PURE__*/ createElement(TreeItemProvider, {\n value: contextValues.treeItem\n }, /*#__PURE__*/ createElement(TreeItemSlotsProvider, {\n value: contextValues.treeItemSlots\n }, slotProps.root.children)));\n};\n"],"names":["renderTreeItem_unstable","state","contextValues","slots","slotProps","getSlotsNext","createElement","root","TreeItemProvider","value","treeItem","TreeItemSlotsProvider","treeItemSlots","children"],"mappings":"AAAA,wBAAwB,GAAG,uBAAuB;;;;+BAKjCA;;aAAAA;;iCALkE;gCACtD;0BAC2B;AAG7C,MAAMA,0BAA0B,CAACC,OAAOC,gBAAgB;IAC/D,MAAM,EAAEC,MAAK,EAAGC,UAAS,EAAG,GAAGC,IAAAA,4BAAY,EAACJ;IAC5C,OAAO,WAAW,GAAGK,IAAAA,8BAAa,EAACH,MAAMI,IAAI,EAAEH,UAAUG,IAAI,EAAE,WAAW,GAAGD,IAAAA,8BAAa,EAACE,0BAAgB,EAAE;QACzGC,OAAOP,cAAcQ,QAAQ;IACjC,GAAG,WAAW,GAAGJ,IAAAA,8BAAa,EAACK,+BAAqB,EAAE;QAClDF,OAAOP,cAAcU,aAAa;IACtC,GAAGR,UAAUG,IAAI,CAACM,QAAQ;AAC9B"}
|
|
@@ -13,22 +13,39 @@ const _reactPortal = require("@fluentui/react-portal");
|
|
|
13
13
|
const _index = require("../../contexts/index");
|
|
14
14
|
const _tokens = require("../../utils/tokens");
|
|
15
15
|
const _getTreeItemValueFromElement = require("../../utils/getTreeItemValueFromElement");
|
|
16
|
+
const _treeItemChevron = require("../TreeItemChevron");
|
|
16
17
|
function useTreeItem_unstable(props, ref) {
|
|
17
18
|
var _props_value;
|
|
18
19
|
const contextLevel = (0, _index.useTreeContext_unstable)((ctx)=>ctx.level);
|
|
19
20
|
const value = (0, _reactUtilities.useId)('fuiTreeItemValue-', (_props_value = props.value) === null || _props_value === void 0 ? void 0 : _props_value.toString());
|
|
20
|
-
const { onClick , onKeyDown , as ='div' , itemType ='leaf' , 'aria-level': level = contextLevel , ...rest } = props;
|
|
21
|
+
const { onClick , onKeyDown , as ='div' , itemType ='leaf' , 'aria-level': level = contextLevel , expandIcon , aside , ...rest } = props;
|
|
21
22
|
const requestTreeResponse = (0, _index.useTreeContext_unstable)((ctx)=>ctx.requestTreeResponse);
|
|
22
|
-
const [
|
|
23
|
+
const [isActionsVisibleExternal, actions] = (0, _reactUtilities.isResolvedShorthand)(props.actions) ? [
|
|
24
|
+
props.actions.visible,
|
|
25
|
+
{
|
|
26
|
+
...props.actions,
|
|
27
|
+
visible: undefined
|
|
28
|
+
}
|
|
29
|
+
] : [
|
|
30
|
+
undefined,
|
|
31
|
+
props.actions
|
|
32
|
+
];
|
|
33
|
+
const [isActionsVisible, setActionsVisible] = (0, _reactUtilities.useControllableState)({
|
|
34
|
+
state: isActionsVisibleExternal,
|
|
35
|
+
defaultState: false,
|
|
36
|
+
initialState: false
|
|
37
|
+
});
|
|
23
38
|
const [isAsideVisible, setAsideVisible] = _react.useState(true);
|
|
24
|
-
const handleActionsRef = (
|
|
25
|
-
setAsideVisible(
|
|
39
|
+
const handleActionsRef = (actionsElement)=>{
|
|
40
|
+
setAsideVisible(actionsElement === null);
|
|
26
41
|
};
|
|
27
42
|
const open = (0, _index.useTreeContext_unstable)((ctx)=>ctx.openItems.has(value));
|
|
28
43
|
const actionsRef = _react.useRef(null);
|
|
29
44
|
const expandIconRef = _react.useRef(null);
|
|
30
45
|
const layoutRef = _react.useRef(null);
|
|
31
46
|
const subtreeRef = _react.useRef(null);
|
|
47
|
+
const actionsRefs = (0, _reactUtilities.useMergedRefs)((0, _reactUtilities.isResolvedShorthand)(actions) ? actions.ref : undefined, handleActionsRef, actionsRef);
|
|
48
|
+
const expandIconRefs = (0, _reactUtilities.useMergedRefs)((0, _reactUtilities.isResolvedShorthand)(expandIcon) ? expandIcon.ref : undefined, expandIconRef);
|
|
32
49
|
const handleClick = (0, _reactUtilities.useEventCallback)((event)=>{
|
|
33
50
|
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
34
51
|
if (event.isDefaultPrevented()) {
|
|
@@ -45,17 +62,16 @@ function useTreeItem_unstable(props, ref) {
|
|
|
45
62
|
const isFromExpandIcon = expandIconRef.current && (0, _reactPortal.elementContains)(expandIconRef.current, event.target);
|
|
46
63
|
requestTreeResponse({
|
|
47
64
|
event,
|
|
48
|
-
itemType,
|
|
49
65
|
value,
|
|
66
|
+
itemType,
|
|
67
|
+
target: event.currentTarget,
|
|
50
68
|
type: isFromExpandIcon ? _tokens.treeDataTypes.ExpandIconClick : _tokens.treeDataTypes.Click
|
|
51
69
|
});
|
|
52
70
|
});
|
|
53
71
|
const handleKeyDown = (0, _reactUtilities.useEventCallback)((event)=>{
|
|
54
72
|
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
if (event.currentTarget !== event.target) {
|
|
73
|
+
// Ignore keyboard events that do not originate from the current tree item.
|
|
74
|
+
if (event.isDefaultPrevented() || event.currentTarget !== event.target) {
|
|
59
75
|
return;
|
|
60
76
|
}
|
|
61
77
|
switch(event.key){
|
|
@@ -68,6 +84,7 @@ function useTreeItem_unstable(props, ref) {
|
|
|
68
84
|
case _tokens.treeDataTypes.ArrowRight:
|
|
69
85
|
return requestTreeResponse({
|
|
70
86
|
event,
|
|
87
|
+
target: event.currentTarget,
|
|
71
88
|
value,
|
|
72
89
|
itemType,
|
|
73
90
|
type: event.key
|
|
@@ -77,6 +94,7 @@ function useTreeItem_unstable(props, ref) {
|
|
|
77
94
|
if (isTypeAheadCharacter) {
|
|
78
95
|
requestTreeResponse({
|
|
79
96
|
event,
|
|
97
|
+
target: event.currentTarget,
|
|
80
98
|
value,
|
|
81
99
|
itemType,
|
|
82
100
|
type: _tokens.treeDataTypes.TypeAhead
|
|
@@ -99,16 +117,37 @@ function useTreeItem_unstable(props, ref) {
|
|
|
99
117
|
return setActionsVisible(false);
|
|
100
118
|
}
|
|
101
119
|
});
|
|
120
|
+
const isBranch = itemType === 'branch';
|
|
121
|
+
const actionsSlot = _react.useMemo(()=>isActionsVisible ? (0, _reactUtilities.resolveShorthand)(actions) : undefined, [
|
|
122
|
+
actions,
|
|
123
|
+
isActionsVisible
|
|
124
|
+
]);
|
|
125
|
+
if (actionsSlot) {
|
|
126
|
+
actionsSlot.ref = actionsRefs;
|
|
127
|
+
}
|
|
128
|
+
const asideSlot = _react.useMemo(()=>isAsideVisible ? (0, _reactUtilities.resolveShorthand)(aside) : undefined, [
|
|
129
|
+
aside,
|
|
130
|
+
isAsideVisible
|
|
131
|
+
]);
|
|
132
|
+
const expandIconSlot = _react.useMemo(()=>(0, _reactUtilities.resolveShorthand)(expandIcon, {
|
|
133
|
+
required: isBranch,
|
|
134
|
+
defaultProps: {
|
|
135
|
+
children: /*#__PURE__*/ _react.createElement(_treeItemChevron.TreeItemChevron, null),
|
|
136
|
+
'aria-hidden': true
|
|
137
|
+
}
|
|
138
|
+
}), [
|
|
139
|
+
expandIcon,
|
|
140
|
+
isBranch
|
|
141
|
+
]);
|
|
142
|
+
if (expandIconSlot) {
|
|
143
|
+
expandIconSlot.ref = expandIconRefs;
|
|
144
|
+
}
|
|
102
145
|
return {
|
|
103
146
|
value,
|
|
104
147
|
open,
|
|
105
148
|
subtreeRef,
|
|
106
|
-
actionsRef: (0, _reactUtilities.useMergedRefs)(actionsRef, handleActionsRef),
|
|
107
|
-
expandIconRef,
|
|
108
149
|
layoutRef,
|
|
109
150
|
itemType,
|
|
110
|
-
isActionsVisible,
|
|
111
|
-
isAsideVisible,
|
|
112
151
|
level,
|
|
113
152
|
components: {
|
|
114
153
|
root: 'div'
|
|
@@ -120,13 +159,16 @@ function useTreeItem_unstable(props, ref) {
|
|
|
120
159
|
role: 'treeitem',
|
|
121
160
|
'aria-level': level,
|
|
122
161
|
[_getTreeItemValueFromElement.dataTreeItemValueAttrName]: value,
|
|
123
|
-
'aria-expanded':
|
|
162
|
+
'aria-expanded': isBranch ? open : undefined,
|
|
124
163
|
onClick: handleClick,
|
|
125
164
|
onKeyDown: handleKeyDown,
|
|
126
165
|
onMouseOver: handleActionsVisible,
|
|
127
166
|
onFocus: handleActionsVisible,
|
|
128
167
|
onMouseOut: handleActionsInvisible,
|
|
129
168
|
onBlur: handleActionsInvisible
|
|
130
|
-
})
|
|
169
|
+
}),
|
|
170
|
+
actions: actionsSlot,
|
|
171
|
+
aside: asideSlot,
|
|
172
|
+
expandIcon: expandIconSlot
|
|
131
173
|
};
|
|
132
174
|
}
|