@fluentui/react-tree 9.0.0-beta.1 → 9.0.0-beta.2
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 +16 -1
- package/CHANGELOG.md +11 -2
- package/dist/index.d.ts +80 -22
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useFlatTree.js +49 -0
- package/lib/hooks/useFlatTree.js.map +1 -0
- package/lib/hooks/useFlatTreeNavigation.js +6 -6
- package/lib/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/createUnfilteredFlatTree.js +77 -0
- package/lib/utils/createUnfilteredFlatTree.js.map +1 -0
- package/lib/utils/createVisibleFlatTree.js +80 -0
- package/lib/utils/createVisibleFlatTree.js.map +1 -0
- package/lib/utils/flattenTree.js.map +1 -1
- package/lib-commonjs/hooks/index.js +1 -1
- package/lib-commonjs/hooks/index.js.map +1 -1
- package/lib-commonjs/hooks/useFlatTree.js +56 -0
- package/lib-commonjs/hooks/useFlatTree.js.map +1 -0
- package/lib-commonjs/hooks/useFlatTreeNavigation.js +6 -6
- package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +1 -1
- package/lib-commonjs/index.js +3 -3
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utils/createUnfilteredFlatTree.js +84 -0
- package/lib-commonjs/utils/createUnfilteredFlatTree.js.map +1 -0
- package/lib-commonjs/utils/createVisibleFlatTree.js +87 -0
- package/lib-commonjs/utils/createVisibleFlatTree.js.map +1 -0
- package/lib-commonjs/utils/flattenTree.js.map +1 -1
- package/package.json +1 -1
- package/lib/hooks/useFlatTreeItems.js +0 -134
- package/lib/hooks/useFlatTreeItems.js.map +0 -1
- package/lib-commonjs/hooks/useFlatTreeItems.js +0 -141
- package/lib-commonjs/hooks/useFlatTreeItems.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["react_utilities_1","require","React","createUnfilteredFlatTree_1","createVisibleFlatTree_1","useFlatTreeNavigation_1","useOpenItemsState_1","useFlatTree_unstable","items","options","openItems","updateOpenItems","useOpenItemsState","unfilteredFlatTree","useMemo","createUnfilteredFlatTree","navigate","navigationRef","useFlatTreeNavigation","visibleFlatTree","createVisibleFlatTree","handleOpenChange","useEventCallback","event","data","preventDefault","handleNavigation","flatTree","getTreeProps","ref","onOpenChange","onNavigation_unstable","getItem","id","_a","itemsPerId","get","exports"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTree.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport {\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport { TreeItemProps } from '../TreeItem';\nimport { createUnfilteredFlatTree } from '../utils/createUnfilteredFlatTree';\nimport { createVisibleFlatTree } from '../utils/createVisibleFlatTree';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\n\nexport type FlatTreeItemProps = Required<Pick<TreeItemProps, 'id'>> &\n TreeItemProps & {\n parentId?: string;\n };\n\nexport type FlatTreeItem = {\n getTreeItemProps(): Required<Pick<TreeItemProps, 'id' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'leaf'>> &\n TreeItemProps;\n parentId?: string;\n childrenSize: number;\n index: number;\n id: string;\n level: number;\n};\n\nexport type FlatTreeProps = Required<\n Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'> & { ref: React.Ref<HTMLDivElement> }\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 = {\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 && !targetDocument.getElementById(nextItem.id)) {\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 getNextNavigableItem(data: TreeNavigationData_unstable): FlatTreeItem | null;\n /**\n * returns a single flat tree item by id without iterating over the whole collection\n */\n getItem(id: string): FlatTreeItem | null;\n /**\n * returns an iterable containing all visually available flat tree items\n */\n items(): Iterable<FlatTreeItem>;\n};\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 items - a list of tree items\n * @param options - in case control over the internal openItems is required\n */\nexport function useFlatTree_unstable(\n items: FlatTreeItemProps[],\n options: Pick<TreeProps, 'openItems' | 'defaultOpenItems'> = {},\n): FlatTree {\n const [openItems, updateOpenItems] = useOpenItemsState(options);\n const unfilteredFlatTree = React.useMemo(() => createUnfilteredFlatTree(items), [items]);\n const [navigate, navigationRef] = useFlatTreeNavigation(unfilteredFlatTree);\n const visibleFlatTree = React.useMemo(\n () => createVisibleFlatTree(unfilteredFlatTree, openItems),\n [unfilteredFlatTree, openItems],\n );\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n event.preventDefault();\n updateOpenItems(data);\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n event.preventDefault();\n navigate(data);\n },\n );\n\n const flatTree: FlatTree = {\n ...visibleFlatTree,\n getTreeProps: () => ({\n ref: navigationRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n }),\n navigate,\n getItem: id => unfilteredFlatTree.itemsPerId.get(id) ?? null,\n };\n return flatTree;\n}\n"],"mappings":";;;;;;AAAA,MAAAA,iBAAA,gBAAAC,OAAA;AACA,MAAAC,KAAA,gBAAAD,OAAA;AASA,MAAAE,0BAAA,gBAAAF,OAAA;AACA,MAAAG,uBAAA,gBAAAH,OAAA;AACA,MAAAI,uBAAA,gBAAAJ,OAAA;AACA,MAAAK,mBAAA,gBAAAL,OAAA;AA8EA;;;;;;;;;;;;AAYA,SAAgBM,oBAAoBA,CAClCC,KAA0B,EAC1BC,OAAA,GAA6D,EAAE;EAE/D,MAAM,CAACC,SAAS,EAAEC,eAAe,CAAC,GAAGL,mBAAA,CAAAM,iBAAiB,CAACH,OAAO,CAAC;EAC/D,MAAMI,kBAAkB,GAAGX,KAAK,CAACY,OAAO,CAAC,MAAMX,0BAAA,CAAAY,wBAAwB,CAACP,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EACxF,MAAM,CAACQ,QAAQ,EAAEC,aAAa,CAAC,GAAGZ,uBAAA,CAAAa,qBAAqB,CAACL,kBAAkB,CAAC;EAC3E,MAAMM,eAAe,GAAGjB,KAAK,CAACY,OAAO,CACnC,MAAMV,uBAAA,CAAAgB,qBAAqB,CAACP,kBAAkB,EAAEH,SAAS,CAAC,EAC1D,CAACG,kBAAkB,EAAEH,SAAS,CAAC,CAChC;EAED,MAAMW,gBAAgB,GAAGrB,iBAAA,CAAAsB,gBAAgB,CAAC,CAACC,KAA0B,EAAEC,IAAwB,KAAI;IACjGD,KAAK,CAACE,cAAc,EAAE;IACtBd,eAAe,CAACa,IAAI,CAAC;EACvB,CAAC,CAAC;EAEF,MAAME,gBAAgB,GAAG1B,iBAAA,CAAAsB,gBAAgB,CACvC,CAACC,KAAmC,EAAEC,IAAiC,KAAI;IACzED,KAAK,CAACE,cAAc,EAAE;IACtBT,QAAQ,CAACQ,IAAI,CAAC;EAChB,CAAC,CACF;EAED,MAAMG,QAAQ,GAAa;IACzB,GAAGR,eAAe;IAClBS,YAAY,EAAEA,CAAA,MAAO;MACnBC,GAAG,EAAEZ,aAA0C;MAC/CP,SAAS;MACToB,YAAY,EAAET,gBAAgB;MAC9B;MACAU,qBAAqB,EAAEL;KACxB,CAAC;IACFV,QAAQ;IACRgB,OAAO,EAAEC,EAAE,IAAG;MAAA,IAAAC,EAAA;MAAC,QAAAA,EAAA,GAAArB,kBAAkB,CAACsB,UAAU,CAACC,GAAG,CAACH,EAAE,CAAC,cAAAC,EAAA,cAAAA,EAAA,GAAI,IAAI;IAAA;GAC7D;EACD,OAAOP,QAAQ;AACjB;AArCAU,OAAA,CAAA9B,oBAAA,GAAAA,oBAAA"}
|
|
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useFlatTreeNavigation = void 0;
|
|
7
7
|
const react_shared_contexts_1 = /*#__PURE__*/require("@fluentui/react-shared-contexts");
|
|
8
|
+
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
|
8
9
|
const nextTypeAheadElement_1 = /*#__PURE__*/require("../utils/nextTypeAheadElement");
|
|
9
|
-
const useHTMLElementWalker_1 = /*#__PURE__*/require("./useHTMLElementWalker");
|
|
10
10
|
const tokens_1 = /*#__PURE__*/require("../utils/tokens");
|
|
11
11
|
const treeItemFilter_1 = /*#__PURE__*/require("../utils/treeItemFilter");
|
|
12
|
+
const useHTMLElementWalker_1 = /*#__PURE__*/require("./useHTMLElementWalker");
|
|
12
13
|
const useRovingTabIndexes_1 = /*#__PURE__*/require("./useRovingTabIndexes");
|
|
13
|
-
const react_utilities_1 = /*#__PURE__*/require("@fluentui/react-utilities");
|
|
14
14
|
function useFlatTreeNavigation(flatTree) {
|
|
15
15
|
const {
|
|
16
16
|
targetDocument
|
|
@@ -71,10 +71,10 @@ function firstChild(target, treeWalker) {
|
|
|
71
71
|
}
|
|
72
72
|
return null;
|
|
73
73
|
}
|
|
74
|
-
function parentElement(flatTree, target,
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
77
|
-
return
|
|
74
|
+
function parentElement(flatTree, target, document) {
|
|
75
|
+
const flatTreeItem = flatTree.itemsPerId.get(target.id);
|
|
76
|
+
if (flatTreeItem && flatTreeItem.parentId) {
|
|
77
|
+
return document.getElementById(flatTreeItem.parentId);
|
|
78
78
|
}
|
|
79
79
|
return null;
|
|
80
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["react_shared_contexts_1","require","
|
|
1
|
+
{"version":3,"names":["react_shared_contexts_1","require","react_utilities_1","nextTypeAheadElement_1","tokens_1","treeItemFilter_1","useHTMLElementWalker_1","useRovingTabIndexes_1","useFlatTreeNavigation","flatTree","targetDocument","useFluent_unstable","treeItemWalkerRef","treeItemWalkerRootRef","useHTMLElementWalkerRef","treeItemFilter","rove","rovingRootRef","useRovingTabIndex","getNextElement","data","current","treeItemWalker","type","treeDataTypes","click","target","typeAhead","currentElement","nextTypeAheadElement","event","key","arrowLeft","parentElement","arrowRight","firstChild","end","root","lastChild","home","arrowDown","nextElement","arrowUp","previousElement","navigate","useMergedRefs","exports","treeWalker","nextElementAriaPosInSet","getAttribute","nextElementAriaLevel","targetAriaLevel","Number","document","flatTreeItem","itemsPerId","get","id","parentId","getElementById"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTreeNavigation.ts"],"sourcesContent":["import { useFluent_unstable } from '@fluentui/react-shared-contexts';\nimport { useMergedRefs } from '@fluentui/react-utilities';\nimport { TreeNavigationData_unstable } from '../Tree';\nimport { UnfilteredFlatTree } from '../utils/createUnfilteredFlatTree';\nimport { nextTypeAheadElement } from '../utils/nextTypeAheadElement';\nimport { treeDataTypes } from '../utils/tokens';\nimport { treeItemFilter } from '../utils/treeItemFilter';\nimport { HTMLElementWalker, useHTMLElementWalkerRef } from './useHTMLElementWalker';\nimport { useRovingTabIndex } from './useRovingTabIndexes';\n\nexport function useFlatTreeNavigation(flatTree: UnfilteredFlatTree) {\n const { targetDocument } = useFluent_unstable();\n const [treeItemWalkerRef, treeItemWalkerRootRef] = useHTMLElementWalkerRef(treeItemFilter);\n const [{ rove }, rovingRootRef] = useRovingTabIndex(treeItemFilter);\n\n function getNextElement(data: TreeNavigationData_unstable) {\n if (!targetDocument || !treeItemWalkerRef.current) {\n return null;\n }\n const treeItemWalker = treeItemWalkerRef.current;\n switch (data.type) {\n case treeDataTypes.click:\n return data.target;\n case treeDataTypes.typeAhead:\n treeItemWalker.currentElement = data.target;\n return nextTypeAheadElement(treeItemWalker, data.event.key);\n case treeDataTypes.arrowLeft:\n return parentElement(flatTree, data.target, targetDocument);\n case treeDataTypes.arrowRight:\n treeItemWalker.currentElement = data.target;\n return firstChild(data.target, treeItemWalker);\n case treeDataTypes.end:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.lastChild();\n case treeDataTypes.home:\n treeItemWalker.currentElement = treeItemWalker.root;\n return treeItemWalker.firstChild();\n case treeDataTypes.arrowDown:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.nextElement();\n case treeDataTypes.arrowUp:\n treeItemWalker.currentElement = data.target;\n return treeItemWalker.previousElement();\n }\n }\n function navigate(data: TreeNavigationData_unstable) {\n const nextElement = getNextElement(data);\n if (nextElement) {\n rove(nextElement);\n }\n }\n return [navigate, useMergedRefs(treeItemWalkerRootRef, rovingRootRef)] 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(flatTree: UnfilteredFlatTree, target: HTMLElement, document: Document) {\n const flatTreeItem = flatTree.itemsPerId.get(target.id);\n if (flatTreeItem && flatTreeItem.parentId) {\n return document.getElementById(flatTreeItem.parentId);\n }\n return null;\n}\n"],"mappings":"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"}
|
package/lib-commonjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.flattenTree_unstable = exports.
|
|
6
|
+
exports.flattenTree_unstable = exports.useFlatTree_unstable = exports.useTreeItemPersonaLayout_unstable = exports.useTreeItemPersonaLayoutStyles_unstable = exports.renderTreeItemPersonaLayout_unstable = exports.treeItemPersonaLayoutClassNames = exports.TreeItemPersonaLayout = exports.useTreeItemLayout_unstable = exports.useTreeItemLayoutStyles_unstable = exports.renderTreeItemLayout_unstable = exports.treeItemLayoutClassNames = exports.TreeItemLayout = exports.useTreeItem_unstable = exports.useTreeItemStyles_unstable = exports.renderTreeItem_unstable = exports.treeItemClassNames = exports.TreeItem = exports.treeItemLevelToken = exports.TreeItemProvider = exports.useTreeItemContext_unstable = exports.useTreeContext_unstable = exports.TreeProvider = exports.useTreeContextValues_unstable = exports.useTree_unstable = exports.useTreeStyles_unstable = exports.renderTree_unstable = exports.treeClassNames = exports.Tree = void 0;
|
|
7
7
|
var Tree_1 = /*#__PURE__*/require("./Tree");
|
|
8
8
|
Object.defineProperty(exports, "Tree", {
|
|
9
9
|
enumerable: true,
|
|
@@ -167,10 +167,10 @@ Object.defineProperty(exports, "useTreeItemPersonaLayout_unstable", {
|
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
var index_1 = /*#__PURE__*/require("./hooks/index");
|
|
170
|
-
Object.defineProperty(exports, "
|
|
170
|
+
Object.defineProperty(exports, "useFlatTree_unstable", {
|
|
171
171
|
enumerable: true,
|
|
172
172
|
get: function () {
|
|
173
|
-
return index_1.
|
|
173
|
+
return index_1.useFlatTree_unstable;
|
|
174
174
|
}
|
|
175
175
|
});
|
|
176
176
|
var flattenTree_1 = /*#__PURE__*/require("./utils/flattenTree");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tree_1","require","Object","defineProperty","exports","enumerable","get","Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","contexts_1","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","tokens_1","treeItemLevelToken","TreeItem_1","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","TreeItemLayout_1","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout_1","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","index_1","
|
|
1
|
+
{"version":3,"names":["Tree_1","require","Object","defineProperty","exports","enumerable","get","Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","contexts_1","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","tokens_1","treeItemLevelToken","TreeItem_1","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItem_unstable","TreeItemLayout_1","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout_1","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","index_1","useFlatTree_unstable","flattenTree_1","flattenTree_unstable"],"sources":["../src/packages/react-components/react-tree/src/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 TreeItemId,\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 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"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.flatTreeRootParentId = exports.createUnfilteredFlatTree = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* creates a list of flat tree items
|
|
9
|
+
* and provides a map to access each item by id
|
|
10
|
+
*/
|
|
11
|
+
function createUnfilteredFlatTree(flatTreeItemProps) {
|
|
12
|
+
var _a;
|
|
13
|
+
const root = createRootFlatTreeItem();
|
|
14
|
+
const itemsPerId = new Map([[root.id, root]]);
|
|
15
|
+
const items = [];
|
|
16
|
+
for (let index = 0; index < flatTreeItemProps.length; index++) {
|
|
17
|
+
const {
|
|
18
|
+
parentId = exports.flatTreeRootParentId,
|
|
19
|
+
...treeItemProps
|
|
20
|
+
} = flatTreeItemProps[index];
|
|
21
|
+
const nextItemProps = flatTreeItemProps[index + 1];
|
|
22
|
+
const currentParent = itemsPerId.get(parentId);
|
|
23
|
+
if (!currentParent) {
|
|
24
|
+
if (process.env.NODE_ENV === 'development') {
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.error(`useFlatTree: item ${flatTreeItemProps[index].id} not properly initialized, make sure provided items are organized`);
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
const isLeaf = (nextItemProps === null || nextItemProps === void 0 ? void 0 : nextItemProps.parentId) !== treeItemProps.id;
|
|
31
|
+
const currentLevel = ((_a = currentParent.level) !== null && _a !== void 0 ? _a : 0) + 1;
|
|
32
|
+
const currentChildrenSize = ++currentParent.childrenSize;
|
|
33
|
+
const flatTreeItem = {
|
|
34
|
+
id: treeItemProps.id,
|
|
35
|
+
getTreeItemProps: () => ({
|
|
36
|
+
...treeItemProps,
|
|
37
|
+
'aria-level': currentLevel,
|
|
38
|
+
'aria-posinset': currentChildrenSize,
|
|
39
|
+
'aria-setsize': currentParent.childrenSize,
|
|
40
|
+
leaf: isLeaf
|
|
41
|
+
}),
|
|
42
|
+
level: currentLevel,
|
|
43
|
+
parentId,
|
|
44
|
+
childrenSize: 0,
|
|
45
|
+
index: -1
|
|
46
|
+
};
|
|
47
|
+
itemsPerId.set(flatTreeItem.id, flatTreeItem);
|
|
48
|
+
items.push(flatTreeItem);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
items,
|
|
52
|
+
itemsPerId
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
exports.createUnfilteredFlatTree = createUnfilteredFlatTree;
|
|
56
|
+
exports.flatTreeRootParentId = '__fuiFlatTreeRoot';
|
|
57
|
+
function createRootFlatTreeItem() {
|
|
58
|
+
return {
|
|
59
|
+
id: exports.flatTreeRootParentId,
|
|
60
|
+
getTreeItemProps: () => {
|
|
61
|
+
if (process.env.NODE_ENV === 'development') {
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
id: exports.flatTreeRootParentId,
|
|
67
|
+
'aria-setsize': -1,
|
|
68
|
+
'aria-level': -1,
|
|
69
|
+
'aria-posinset': -1,
|
|
70
|
+
leaf: true
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
childrenSize: 0,
|
|
74
|
+
get index() {
|
|
75
|
+
if (process.env.NODE_ENV === 'development') {
|
|
76
|
+
// eslint-disable-next-line no-console
|
|
77
|
+
console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
|
|
78
|
+
}
|
|
79
|
+
return -1;
|
|
80
|
+
},
|
|
81
|
+
level: 0
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=createUnfilteredFlatTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createUnfilteredFlatTree","flatTreeItemProps","root","createRootFlatTreeItem","itemsPerId","Map","id","items","index","length","parentId","exports","flatTreeRootParentId","treeItemProps","nextItemProps","currentParent","get","process","env","NODE_ENV","console","error","isLeaf","currentLevel","_a","level","currentChildrenSize","childrenSize","flatTreeItem","getTreeItemProps","leaf","set","push"],"sources":["../src/packages/react-components/react-tree/src/utils/createUnfilteredFlatTree.ts"],"sourcesContent":["import { FlatTreeItem, FlatTreeItemProps } from '../hooks/useFlatTree';\n\n/**\n * @internal\n */\nexport type UnfilteredFlatTree = {\n items: FlatTreeItem[];\n itemsPerId: Map<string, FlatTreeItem>;\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 createUnfilteredFlatTree(flatTreeItemProps: FlatTreeItemProps[]): UnfilteredFlatTree {\n const root = createRootFlatTreeItem();\n const itemsPerId = new Map<string, FlatTreeItem>([[root.id, root]]);\n const items: FlatTreeItem[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentId = flatTreeRootParentId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextItemProps = flatTreeItemProps[index + 1] as FlatTreeItemProps | undefined;\n const currentParent = itemsPerId.get(parentId);\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].id} not properly initialized, make sure provided items are organized`,\n );\n }\n break;\n }\n const isLeaf = nextItemProps?.parentId !== treeItemProps.id;\n const currentLevel = (currentParent.level ?? 0) + 1;\n const currentChildrenSize = ++currentParent.childrenSize;\n\n const flatTreeItem: FlatTreeItem = {\n id: treeItemProps.id,\n getTreeItemProps: () => ({\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentChildrenSize,\n 'aria-setsize': currentParent.childrenSize,\n leaf: isLeaf,\n }),\n level: currentLevel,\n parentId,\n childrenSize: 0,\n index: -1,\n };\n itemsPerId.set(flatTreeItem.id, flatTreeItem);\n items.push(flatTreeItem);\n }\n\n return { items, itemsPerId };\n}\n\nexport const flatTreeRootParentId = '__fuiFlatTreeRoot';\n\nfunction createRootFlatTreeItem(): FlatTreeItem {\n return {\n id: flatTreeRootParentId,\n getTreeItemProps: () => {\n if (process.env.NODE_ENV === 'development') {\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 { id: flatTreeRootParentId, 'aria-setsize': -1, 'aria-level': -1, 'aria-posinset': -1, leaf: true };\n },\n childrenSize: 0,\n get index() {\n if (process.env.NODE_ENV === 'development') {\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"],"mappings":";;;;;;AAUA;;;;AAIA,SAAgBA,wBAAwBA,CAACC,iBAAsC;;EAC7E,MAAMC,IAAI,GAAGC,sBAAsB,EAAE;EACrC,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAAuB,CAAC,CAACH,IAAI,CAACI,EAAE,EAAEJ,IAAI,CAAC,CAAC,CAAC;EACnE,MAAMK,KAAK,GAAmB,EAAE;EAEhC,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGP,iBAAiB,CAACQ,MAAM,EAAED,KAAK,EAAE,EAAE;IAC7D,MAAM;MAAEE,QAAQ,GAAGC,OAAA,CAAAC,oBAAoB;MAAE,GAAGC;IAAa,CAAE,GAAGZ,iBAAiB,CAACO,KAAK,CAAC;IAEtF,MAAMM,aAAa,GAAGb,iBAAiB,CAACO,KAAK,GAAG,CAAC,CAAkC;IACnF,MAAMO,aAAa,GAAGX,UAAU,CAACY,GAAG,CAACN,QAAQ,CAAC;IAC9C,IAAI,CAACK,aAAa,EAAE;MAClB,IAAIE,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;QAC1C;QACAC,OAAO,CAACC,KAAK,CACX,qBAAqBpB,iBAAiB,CAACO,KAAK,CAAC,CAACF,EAAE,mEAAmE,CACpH;;MAEH;;IAEF,MAAMgB,MAAM,GAAG,CAAAR,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEJ,QAAQ,MAAKG,aAAa,CAACP,EAAE;IAC3D,MAAMiB,YAAY,GAAG,CAAC,CAAAC,EAAA,GAAAT,aAAa,CAACU,KAAK,cAAAD,EAAA,cAAAA,EAAA,GAAI,CAAC,IAAI,CAAC;IACnD,MAAME,mBAAmB,GAAG,EAAEX,aAAa,CAACY,YAAY;IAExD,MAAMC,YAAY,GAAiB;MACjCtB,EAAE,EAAEO,aAAa,CAACP,EAAE;MACpBuB,gBAAgB,EAAEA,CAAA,MAAO;QACvB,GAAGhB,aAAa;QAChB,YAAY,EAAEU,YAAY;QAC1B,eAAe,EAAEG,mBAAmB;QACpC,cAAc,EAAEX,aAAa,CAACY,YAAY;QAC1CG,IAAI,EAAER;OACP,CAAC;MACFG,KAAK,EAAEF,YAAY;MACnBb,QAAQ;MACRiB,YAAY,EAAE,CAAC;MACfnB,KAAK,EAAE,CAAC;KACT;IACDJ,UAAU,CAAC2B,GAAG,CAACH,YAAY,CAACtB,EAAE,EAAEsB,YAAY,CAAC;IAC7CrB,KAAK,CAACyB,IAAI,CAACJ,YAAY,CAAC;;EAG1B,OAAO;IAAErB,KAAK;IAAEH;EAAU,CAAE;AAC9B;AA1CAO,OAAA,CAAAX,wBAAA,GAAAA,wBAAA;AA4CaW,OAAA,CAAAC,oBAAoB,GAAG,mBAAmB;AAEvD,SAAST,sBAAsBA,CAAA;EAC7B,OAAO;IACLG,EAAE,EAAEK,OAAA,CAAAC,oBAAoB;IACxBiB,gBAAgB,EAAEA,CAAA,KAAK;MACrB,IAAIZ,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;QAC1C;QACAC,OAAO,CAACC,KAAK,CAAC,wFAAwF,CAAC;;MAEzG,OAAO;QAAEf,EAAE,EAAEK,OAAA,CAAAC,oBAAoB;QAAE,cAAc,EAAE,CAAC,CAAC;QAAE,YAAY,EAAE,CAAC,CAAC;QAAE,eAAe,EAAE,CAAC,CAAC;QAAEkB,IAAI,EAAE;MAAI,CAAE;IAC5G,CAAC;IACDH,YAAY,EAAE,CAAC;IACf,IAAInB,KAAKA,CAAA;MACP,IAAIS,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;QAC1C;QACAC,OAAO,CAACC,KAAK,CAAC,wFAAwF,CAAC;;MAEzG,OAAO,CAAC,CAAC;IACX,CAAC;IACDI,KAAK,EAAE;GACR;AACH"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createVisibleFlatTree = void 0;
|
|
7
|
+
const createUnfilteredFlatTree_1 = /*#__PURE__*/require("./createUnfilteredFlatTree");
|
|
8
|
+
const tokens_1 = /*#__PURE__*/require("./tokens");
|
|
9
|
+
/**
|
|
10
|
+
* creates methods that depend on the unfilteredFlatTree and the current available openItems
|
|
11
|
+
*/
|
|
12
|
+
function createVisibleFlatTree(unfilteredFlatTree, openItems) {
|
|
13
|
+
let visibleItems = null;
|
|
14
|
+
const getNextNavigableItem = data => {
|
|
15
|
+
var _a, _b, _c, _d;
|
|
16
|
+
const item = unfilteredFlatTree.itemsPerId.get(data.target.id);
|
|
17
|
+
if (!item || !visibleItems) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
switch (data.type) {
|
|
21
|
+
case tokens_1.treeDataTypes.arrowLeft:
|
|
22
|
+
return item.parentId ? (_a = unfilteredFlatTree.itemsPerId.get(item.parentId)) !== null && _a !== void 0 ? _a : null : null;
|
|
23
|
+
case tokens_1.treeDataTypes.arrowRight:
|
|
24
|
+
return (_b = visibleItems[item.index + 1]) !== null && _b !== void 0 ? _b : null;
|
|
25
|
+
case tokens_1.treeDataTypes.end:
|
|
26
|
+
return visibleItems[visibleItems.length - 1];
|
|
27
|
+
case tokens_1.treeDataTypes.home:
|
|
28
|
+
return visibleItems[0];
|
|
29
|
+
case tokens_1.treeDataTypes.arrowDown:
|
|
30
|
+
return (_c = visibleItems[item.index + 1]) !== null && _c !== void 0 ? _c : null;
|
|
31
|
+
case tokens_1.treeDataTypes.arrowUp:
|
|
32
|
+
return (_d = visibleItems[item.index - 1]) !== null && _d !== void 0 ? _d : null;
|
|
33
|
+
default:
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
function* makeVisibleItemsGenerator() {
|
|
38
|
+
var _a;
|
|
39
|
+
visibleItems = [];
|
|
40
|
+
for (let index = 0, visibleIndex = 0; index < unfilteredFlatTree.items.length; index++) {
|
|
41
|
+
const item = unfilteredFlatTree.items[index];
|
|
42
|
+
const parent = unfilteredFlatTree.itemsPerId.get((_a = item.parentId) !== null && _a !== void 0 ? _a : createUnfilteredFlatTree_1.flatTreeRootParentId);
|
|
43
|
+
if (!parent) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
if (isFlatTreeItemVisible(item, {
|
|
47
|
+
openItems,
|
|
48
|
+
unfilteredFlatTree
|
|
49
|
+
})) {
|
|
50
|
+
item.index = visibleIndex++;
|
|
51
|
+
visibleItems.push({
|
|
52
|
+
...item
|
|
53
|
+
});
|
|
54
|
+
yield item;
|
|
55
|
+
} else {
|
|
56
|
+
index += parent.childrenSize - 1 + item.childrenSize;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
getNextNavigableItem,
|
|
62
|
+
items: () => {
|
|
63
|
+
return visibleItems || makeVisibleItemsGenerator();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
exports.createVisibleFlatTree = createVisibleFlatTree;
|
|
68
|
+
function isFlatTreeItemVisible(item, {
|
|
69
|
+
openItems,
|
|
70
|
+
unfilteredFlatTree: flatTree
|
|
71
|
+
}) {
|
|
72
|
+
if (item.level === 1) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
while (item.parentId && item.parentId !== createUnfilteredFlatTree_1.flatTreeRootParentId) {
|
|
76
|
+
if (!openItems.has(item.parentId)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const parent = flatTree.itemsPerId.get(item.parentId);
|
|
80
|
+
if (!parent) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
item = parent;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=createVisibleFlatTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createUnfilteredFlatTree_1","require","tokens_1","createVisibleFlatTree","unfilteredFlatTree","openItems","visibleItems","getNextNavigableItem","data","item","itemsPerId","get","target","id","type","treeDataTypes","arrowLeft","parentId","_a","arrowRight","_b","index","end","length","home","arrowDown","_c","arrowUp","_d","makeVisibleItemsGenerator","visibleIndex","items","parent","flatTreeRootParentId","isFlatTreeItemVisible","push","childrenSize","exports","flatTree","level","has"],"sources":["../src/packages/react-components/react-tree/src/utils/createVisibleFlatTree.ts"],"sourcesContent":["import { FlatTree, FlatTreeItem } from '../hooks/useFlatTree';\nimport { TreeItemId, TreeNavigationData_unstable } from '../Tree';\nimport { flatTreeRootParentId, UnfilteredFlatTree } from './createUnfilteredFlatTree';\nimport { ImmutableSet } from './ImmutableSet';\nimport { treeDataTypes } from './tokens';\n\n/**\n * creates methods that depend on the unfilteredFlatTree and the current available openItems\n */\nexport function createVisibleFlatTree(\n unfilteredFlatTree: UnfilteredFlatTree,\n openItems: ImmutableSet<TreeItemId>,\n): Pick<FlatTree, 'items' | 'getNextNavigableItem'> {\n let visibleItems: FlatTreeItem[] | null = null;\n\n const getNextNavigableItem = (data: TreeNavigationData_unstable): FlatTreeItem | null => {\n const item = unfilteredFlatTree.itemsPerId.get(data.target.id);\n if (!item || !visibleItems) {\n return null;\n }\n switch (data.type) {\n case treeDataTypes.arrowLeft:\n return item.parentId ? unfilteredFlatTree.itemsPerId.get(item.parentId) ?? null : null;\n case treeDataTypes.arrowRight:\n return visibleItems[item.index + 1] ?? null;\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] ?? null;\n case treeDataTypes.arrowUp:\n return visibleItems[item.index - 1] ?? null;\n default:\n return null;\n }\n };\n\n function* makeVisibleItemsGenerator() {\n visibleItems = [];\n for (let index = 0, visibleIndex = 0; index < unfilteredFlatTree.items.length; index++) {\n const item = unfilteredFlatTree.items[index];\n const parent = unfilteredFlatTree.itemsPerId.get(item.parentId ?? flatTreeRootParentId);\n if (!parent) {\n break;\n }\n if (isFlatTreeItemVisible(item, { openItems, unfilteredFlatTree })) {\n item.index = visibleIndex++;\n visibleItems.push({ ...item });\n yield item;\n } else {\n index += parent.childrenSize - 1 + item.childrenSize;\n }\n }\n }\n\n return {\n getNextNavigableItem,\n items: () => {\n return visibleItems || makeVisibleItemsGenerator();\n },\n };\n}\n\nfunction isFlatTreeItemVisible(\n item: FlatTreeItem,\n {\n openItems,\n unfilteredFlatTree: flatTree,\n }: {\n openItems: ImmutableSet<TreeItemId>;\n unfilteredFlatTree: UnfilteredFlatTree;\n },\n) {\n if (item.level === 1) {\n return true;\n }\n while (item.parentId && item.parentId !== flatTreeRootParentId) {\n if (!openItems.has(item.parentId)) {\n return false;\n }\n const parent = flatTree.itemsPerId.get(item.parentId);\n if (!parent) {\n return false;\n }\n item = parent;\n }\n\n return true;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["count","flattenTreeRecursive_unstable","items","parent","level","flatTreeItems","index","length","subtree","item","flatTreeItem","parentId","id","_a","leaf","undefined","push","exports","flattenTree_unstable"],"sources":["../src/packages/react-components/react-tree/src/utils/flattenTree.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"names":["count","flattenTreeRecursive_unstable","items","parent","level","flatTreeItems","index","length","subtree","item","flatTreeItem","parentId","id","_a","leaf","undefined","push","exports","flattenTree_unstable"],"sources":["../src/packages/react-components/react-tree/src/utils/flattenTree.ts"],"sourcesContent":["import { FlatTreeItemProps } from '../hooks/useFlatTree';\nimport { TreeItemProps } from '../TreeItem';\n\nexport type NestedTreeItem = Omit<TreeItemProps, 'subtree'> & {\n subtree?: NestedTreeItem[];\n};\n\nlet count = 1;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction flattenTreeRecursive_unstable(\n items: NestedTreeItem[],\n parent?: FlatTreeItemProps,\n level = 1,\n): FlatTreeItemProps[] {\n const flatTreeItems: FlatTreeItemProps[] = [];\n for (let index = 0; index < items.length; index++) {\n const { subtree, ...item } = items[index];\n const flatTreeItem: FlatTreeItemProps = {\n 'aria-level': level,\n 'aria-posinset': index + 1,\n 'aria-setsize': items.length,\n parentId: parent?.id,\n id: item.id ?? `fui-FlatTreeItem-${count++}`,\n leaf: subtree === undefined,\n ...item,\n };\n flatTreeItems.push(flatTreeItem);\n if (subtree !== undefined) {\n flatTreeItems.push(...flattenTreeRecursive_unstable(subtree, flatTreeItem, level + 1));\n }\n }\n return flatTreeItems;\n}\n\n/**\n * Converts a nested structure to a flat one which can be consumed by `useFlatTreeItems`\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const flattenTree_unstable: (items: NestedTreeItem[]) => FlatTreeItemProps[] = flattenTreeRecursive_unstable;\n"],"mappings":";;;;;;AAOA,IAAIA,KAAK,GAAG,CAAC;AAEb;AACA,SAASC,6BAA6BA,CACpCC,KAAuB,EACvBC,MAA0B,EAC1BC,KAAK,GAAG,CAAC;;EAET,MAAMC,aAAa,GAAwB,EAAE;EAC7C,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGJ,KAAK,CAACK,MAAM,EAAED,KAAK,EAAE,EAAE;IACjD,MAAM;MAAEE,OAAO;MAAE,GAAGC;IAAI,CAAE,GAAGP,KAAK,CAACI,KAAK,CAAC;IACzC,MAAMI,YAAY,GAAsB;MACtC,YAAY,EAAEN,KAAK;MACnB,eAAe,EAAEE,KAAK,GAAG,CAAC;MAC1B,cAAc,EAAEJ,KAAK,CAACK,MAAM;MAC5BI,QAAQ,EAAER,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAES,EAAE;MACpBA,EAAE,EAAE,CAAAC,EAAA,GAAAJ,IAAI,CAACG,EAAE,cAAAC,EAAA,cAAAA,EAAA,GAAI,oBAAoBb,KAAK,EAAE,EAAE;MAC5Cc,IAAI,EAAEN,OAAO,KAAKO,SAAS;MAC3B,GAAGN;KACJ;IACDJ,aAAa,CAACW,IAAI,CAACN,YAAY,CAAC;IAChC,IAAIF,OAAO,KAAKO,SAAS,EAAE;MACzBV,aAAa,CAACW,IAAI,CAAC,GAAGf,6BAA6B,CAACO,OAAO,EAAEE,YAAY,EAAEN,KAAK,GAAG,CAAC,CAAC,CAAC;;;EAG1F,OAAOC,aAAa;AACtB;AAEA;;;AAGA;AACaY,OAAA,CAAAC,oBAAoB,GAAqDjB,6BAA6B"}
|
package/package.json
CHANGED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { useEventCallback } from '@fluentui/react-utilities';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { useFlatTreeNavigation } from './useFlatTreeNavigation';
|
|
4
|
-
import { useOpenItemsState } from './useOpenItemsState';
|
|
5
|
-
export function useFlatTreeItems_unstable(items, options) {
|
|
6
|
-
const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);
|
|
7
|
-
const [openItems, updateOpenItems] = useOpenItemsState(options !== null && options !== void 0 ? options : {});
|
|
8
|
-
const [navigate, treeRef] = useFlatTreeNavigation(references);
|
|
9
|
-
const handleOpenChange = useEventCallback((event, data) => {
|
|
10
|
-
event.preventDefault();
|
|
11
|
-
updateOpenItems(data);
|
|
12
|
-
});
|
|
13
|
-
const handleNavigation = useEventCallback((event, data) => {
|
|
14
|
-
event.preventDefault();
|
|
15
|
-
navigate(data);
|
|
16
|
-
});
|
|
17
|
-
const lazyFlatTreeItems = React.useMemo(() => createLazyFlatTreeItems(references, {
|
|
18
|
-
filter: item => isTreeItemVisible(item, {
|
|
19
|
-
openItems,
|
|
20
|
-
references
|
|
21
|
-
})
|
|
22
|
-
}), [references, openItems]);
|
|
23
|
-
return [{
|
|
24
|
-
ref: treeRef,
|
|
25
|
-
openItems,
|
|
26
|
-
onOpenChange: handleOpenChange,
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
28
|
-
onNavigation_unstable: handleNavigation
|
|
29
|
-
}, lazyFlatTreeItems];
|
|
30
|
-
}
|
|
31
|
-
function isTreeItemVisible(itemRef, {
|
|
32
|
-
openItems,
|
|
33
|
-
references
|
|
34
|
-
}) {
|
|
35
|
-
if (itemRef.props['aria-level'] === 1) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
while (itemRef.parentId !== undefined) {
|
|
39
|
-
if (!openItems.has(itemRef.parentId)) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
const parent = references.getParent(itemRef);
|
|
43
|
-
if (!parent) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
itemRef = parent;
|
|
47
|
-
}
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
function createTreeItemPropsRefs(flatTreeItemProps) {
|
|
51
|
-
var _a, _b;
|
|
52
|
-
const root = {
|
|
53
|
-
props: {
|
|
54
|
-
id: 'root',
|
|
55
|
-
leaf: false,
|
|
56
|
-
'aria-level': 0,
|
|
57
|
-
'aria-posinset': 0
|
|
58
|
-
},
|
|
59
|
-
childrenSize: 0,
|
|
60
|
-
index: -1
|
|
61
|
-
};
|
|
62
|
-
const treeItemPropsRefsPerId = new Map();
|
|
63
|
-
const refs = [];
|
|
64
|
-
for (let index = 0; index < flatTreeItemProps.length; index++) {
|
|
65
|
-
const {
|
|
66
|
-
parentId,
|
|
67
|
-
...treeItemProps
|
|
68
|
-
} = flatTreeItemProps[index];
|
|
69
|
-
const nextPartialItem = flatTreeItemProps[index + 1];
|
|
70
|
-
const currentParentRef = parentId ? (_a = treeItemPropsRefsPerId.get(parentId)) !== null && _a !== void 0 ? _a : root : root;
|
|
71
|
-
const isLeaf = (nextPartialItem === null || nextPartialItem === void 0 ? void 0 : nextPartialItem.parentId) !== treeItemProps.id;
|
|
72
|
-
const currentLevel = ((_b = currentParentRef.props['aria-level']) !== null && _b !== void 0 ? _b : 0) + 1;
|
|
73
|
-
currentParentRef.childrenSize++;
|
|
74
|
-
const treeItemPropsRef = {
|
|
75
|
-
props: {
|
|
76
|
-
...treeItemProps,
|
|
77
|
-
'aria-level': currentLevel,
|
|
78
|
-
'aria-posinset': currentParentRef.childrenSize,
|
|
79
|
-
leaf: isLeaf
|
|
80
|
-
},
|
|
81
|
-
parentId,
|
|
82
|
-
childrenSize: 0,
|
|
83
|
-
index: -1
|
|
84
|
-
};
|
|
85
|
-
treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);
|
|
86
|
-
refs.push(treeItemPropsRef);
|
|
87
|
-
}
|
|
88
|
-
function getParent(itemRef) {
|
|
89
|
-
const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;
|
|
90
|
-
return parentRef !== null && parentRef !== void 0 ? parentRef : null;
|
|
91
|
-
}
|
|
92
|
-
function get(id) {
|
|
93
|
-
var _a;
|
|
94
|
-
return (_a = treeItemPropsRefsPerId.get(id)) !== null && _a !== void 0 ? _a : null;
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
refs,
|
|
98
|
-
getParent,
|
|
99
|
-
get
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function createLazyFlatTreeItems(treeItemPropsRefs, {
|
|
103
|
-
filter = () => true
|
|
104
|
-
}) {
|
|
105
|
-
const flatTreeItems = {
|
|
106
|
-
get: treeItemPropsRefs.get,
|
|
107
|
-
toArray: () => flatTreeItems.map(identity),
|
|
108
|
-
map: fn => {
|
|
109
|
-
const items = [];
|
|
110
|
-
for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {
|
|
111
|
-
const currentItemRef = treeItemPropsRefs.refs[index];
|
|
112
|
-
const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);
|
|
113
|
-
if (!currentParentRef) {
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
if (filter(currentItemRef)) {
|
|
117
|
-
currentItemRef.index = index;
|
|
118
|
-
items.push(fn({
|
|
119
|
-
...currentItemRef.props,
|
|
120
|
-
'aria-setsize': currentParentRef.childrenSize
|
|
121
|
-
}));
|
|
122
|
-
} else {
|
|
123
|
-
index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return items;
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
return flatTreeItems;
|
|
130
|
-
}
|
|
131
|
-
function identity(item) {
|
|
132
|
-
return item;
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=useFlatTreeItems.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useEventCallback","React","useFlatTreeNavigation","useOpenItemsState","useFlatTreeItems_unstable","items","options","references","useMemo","createTreeItemPropsRefs","openItems","updateOpenItems","navigate","treeRef","handleOpenChange","event","data","preventDefault","handleNavigation","lazyFlatTreeItems","createLazyFlatTreeItems","filter","item","isTreeItemVisible","ref","onOpenChange","onNavigation_unstable","itemRef","props","parentId","undefined","has","parent","getParent","flatTreeItemProps","root","id","leaf","childrenSize","index","treeItemPropsRefsPerId","Map","refs","length","treeItemProps","nextPartialItem","currentParentRef","_a","get","isLeaf","currentLevel","_b","treeItemPropsRef","set","push","parentRef","treeItemPropsRefs","flatTreeItems","toArray","map","identity","fn","currentItemRef"],"sources":["../src/packages/react-components/react-tree/src/hooks/useFlatTreeItems.ts"],"sourcesContent":["import { useEventCallback } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport {\n TreeItemId,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeProps,\n} from '../Tree';\nimport { TreeItemProps } from '../TreeItem';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { useOpenItemsState } from './useOpenItemsState';\n\nexport type FlatTreeItem = Required<Pick<TreeItemProps, 'id'>> &\n TreeItemProps & {\n parentId?: string;\n };\n\nexport type FlatTreeItemProps = Required<\n Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf' | 'aria-setsize'>\n> &\n TreeItemProps;\n\ntype TreeItemPropsReference = {\n props: Required<Pick<TreeItemProps, 'id' | 'aria-level' | 'aria-posinset' | 'leaf'>> & TreeItemProps;\n parentId?: string;\n childrenSize: number;\n index: number;\n};\n\nexport type TreeItemPropsReferences = {\n refs: TreeItemPropsReference[];\n getParent(ref: TreeItemPropsReference): TreeItemPropsReference | null;\n get(id: string): TreeItemPropsReference | null;\n};\n\ntype LazyArray<Value> = {\n map<NextValue>(fn: (child: Value) => NextValue): NextValue[];\n toArray(): Value[];\n};\n\nexport type FlatTreeProps = Required<\n Pick<TreeProps, 'openItems' | 'onOpenChange' | 'onNavigation_unstable'> & { ref: React.Ref<HTMLDivElement> }\n>;\nexport type LazyFlatTreeItems = LazyArray<FlatTreeItemProps> & {\n get(id: string): TreeItemPropsReference | null;\n};\n\nexport type UseFlatTreeItemsOptions = Pick<TreeProps, 'openItems' | 'defaultOpenItems'>;\n\nexport function useFlatTreeItems_unstable(\n items: FlatTreeItem[],\n options?: UseFlatTreeItemsOptions,\n): readonly [FlatTreeProps, LazyFlatTreeItems] {\n const references = React.useMemo(() => createTreeItemPropsRefs(items), [items]);\n const [openItems, updateOpenItems] = useOpenItemsState(options ?? {});\n const [navigate, treeRef] = useFlatTreeNavigation(references);\n\n const handleOpenChange = useEventCallback((event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\n event.preventDefault();\n updateOpenItems(data);\n });\n\n const handleNavigation = useEventCallback(\n (event: TreeNavigationEvent_unstable, data: TreeNavigationData_unstable) => {\n event.preventDefault();\n navigate(data);\n },\n );\n\n const lazyFlatTreeItems = React.useMemo(\n () =>\n createLazyFlatTreeItems(references, {\n filter: item => isTreeItemVisible(item, { openItems, references }),\n }),\n [references, openItems],\n );\n\n return [\n {\n ref: treeRef as React.Ref<HTMLDivElement>,\n openItems,\n onOpenChange: handleOpenChange,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n onNavigation_unstable: handleNavigation,\n },\n lazyFlatTreeItems,\n ];\n}\n\nfunction isTreeItemVisible(\n itemRef: TreeItemPropsReference,\n {\n openItems,\n references,\n }: {\n openItems: ImmutableSet<TreeItemId>;\n references: TreeItemPropsReferences;\n },\n) {\n if (itemRef.props['aria-level'] === 1) {\n return true;\n }\n while (itemRef.parentId !== undefined) {\n if (!openItems.has(itemRef.parentId)) {\n return false;\n }\n const parent = references.getParent(itemRef);\n if (!parent) {\n return false;\n }\n itemRef = parent;\n }\n return true;\n}\n\nfunction createTreeItemPropsRefs(flatTreeItemProps: FlatTreeItem[]): TreeItemPropsReferences {\n const root: TreeItemPropsReference = {\n props: { id: 'root', leaf: false, 'aria-level': 0, 'aria-posinset': 0 },\n childrenSize: 0,\n index: -1,\n };\n const treeItemPropsRefsPerId = new Map<string, TreeItemPropsReference>();\n const refs: TreeItemPropsReference[] = [];\n\n for (let index = 0; index < flatTreeItemProps.length; index++) {\n const { parentId, ...treeItemProps } = flatTreeItemProps[index];\n\n const nextPartialItem = flatTreeItemProps[index + 1] as FlatTreeItem | undefined;\n const currentParentRef = parentId ? treeItemPropsRefsPerId.get(parentId) ?? root : root;\n const isLeaf = nextPartialItem?.parentId !== treeItemProps.id;\n const currentLevel = (currentParentRef.props['aria-level'] ?? 0) + 1;\n currentParentRef.childrenSize++;\n\n const treeItemPropsRef: TreeItemPropsReference = {\n props: {\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentParentRef.childrenSize,\n leaf: isLeaf,\n },\n parentId,\n childrenSize: 0,\n index: -1,\n };\n treeItemPropsRefsPerId.set(treeItemPropsRef.props.id, treeItemPropsRef);\n refs.push(treeItemPropsRef);\n }\n\n function getParent(itemRef: TreeItemPropsReference): TreeItemPropsReference | null {\n const parentRef = itemRef.parentId ? treeItemPropsRefsPerId.get(itemRef.parentId) : root;\n return parentRef ?? null;\n }\n function get(id: string): TreeItemPropsReference | null {\n return treeItemPropsRefsPerId.get(id) ?? null;\n }\n\n return { refs, getParent, get };\n}\n\nfunction createLazyFlatTreeItems(\n treeItemPropsRefs: TreeItemPropsReferences,\n { filter = () => true }: { filter: (item: TreeItemPropsReference) => boolean },\n): LazyFlatTreeItems {\n const flatTreeItems: LazyFlatTreeItems = {\n get: treeItemPropsRefs.get,\n toArray: () => flatTreeItems.map(identity),\n map: fn => {\n const items: ReturnType<typeof fn>[] = [];\n for (let index = 0; index < treeItemPropsRefs.refs.length; index++) {\n const currentItemRef = treeItemPropsRefs.refs[index];\n const currentParentRef = treeItemPropsRefs.getParent(currentItemRef);\n if (!currentParentRef) {\n break;\n }\n if (filter(currentItemRef)) {\n currentItemRef.index = index;\n items.push(fn({ ...currentItemRef.props, 'aria-setsize': currentParentRef.childrenSize }));\n } else {\n index += currentParentRef.childrenSize - 1 + currentItemRef.childrenSize;\n }\n }\n return items;\n },\n };\n return flatTreeItems;\n}\n\nfunction identity<T>(item: T) {\n return item;\n}\n"],"mappings":"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"}
|