@hitachivantara/uikit-react-core 5.36.2 → 5.36.4
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/dist/cjs/components/Card/Header/Header.cjs +1 -0
- package/dist/cjs/components/Card/Header/Header.cjs.map +1 -1
- package/dist/cjs/components/Card/Header/Header.styles.cjs +6 -10
- package/dist/cjs/components/Card/Header/Header.styles.cjs.map +1 -1
- package/dist/cjs/components/Section/Section.cjs +4 -3
- package/dist/cjs/components/Section/Section.cjs.map +1 -1
- package/dist/cjs/components/Table/hooks/usePagination.cjs +1 -1
- package/dist/cjs/components/Table/hooks/usePagination.cjs.map +1 -1
- package/dist/cjs/components/TreeView/TreeItem/DefaultContent.cjs +24 -8
- package/dist/cjs/components/TreeView/TreeItem/DefaultContent.cjs.map +1 -1
- package/dist/cjs/components/TreeView/TreeItem/TreeItem.cjs +7 -6
- package/dist/cjs/components/TreeView/TreeItem/TreeItem.cjs.map +1 -1
- package/dist/cjs/components/TreeView/TreeItem/useHvTreeItem.cjs +2 -3
- package/dist/cjs/components/TreeView/TreeItem/useHvTreeItem.cjs.map +1 -1
- package/dist/cjs/components/TreeView/TreeView.cjs +4 -4
- package/dist/cjs/components/TreeView/TreeView.cjs.map +1 -1
- package/dist/cjs/components/TreeView/internals/DescendantProvider.cjs +146 -0
- package/dist/cjs/components/TreeView/internals/DescendantProvider.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/TreeViewProvider.cjs +34 -0
- package/dist/cjs/components/TreeView/internals/TreeViewProvider.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/corePlugins.cjs +6 -0
- package/dist/cjs/components/TreeView/internals/corePlugins.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/defaultPlugins.cjs +11 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/defaultPlugins.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewContextValueBuilder.cjs +28 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewContextValueBuilder.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewExpansion.cjs +80 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewExpansion.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewFocus.cjs +105 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewFocus.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewKeyboardNavigation.cjs +237 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewKeyboardNavigation.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewNodes.cjs +82 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewNodes.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewSelection.cjs +232 -0
- package/dist/cjs/components/TreeView/internals/hooks/plugins/useTreeViewSelection.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/useInstanceEventHandler.cjs +93 -0
- package/dist/cjs/components/TreeView/internals/hooks/useInstanceEventHandler.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeView.cjs +87 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeView.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeViewInstanceEvents.cjs +52 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeViewInstanceEvents.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeViewModels.cjs +58 -0
- package/dist/cjs/components/TreeView/internals/hooks/useTreeViewModels.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/hooks/utils.cjs +47 -0
- package/dist/cjs/components/TreeView/internals/hooks/utils.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/utils/EventManager.cjs +62 -0
- package/dist/cjs/components/TreeView/internals/utils/EventManager.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/utils/FinalizationRegistryBasedCleanupTracking.cjs +22 -0
- package/dist/cjs/components/TreeView/internals/utils/FinalizationRegistryBasedCleanupTracking.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/utils/TimerBasedCleanupTracking.cjs +41 -0
- package/dist/cjs/components/TreeView/internals/utils/TimerBasedCleanupTracking.cjs.map +1 -0
- package/dist/cjs/components/TreeView/internals/utils/publishTreeViewEvent.cjs +7 -0
- package/dist/cjs/components/TreeView/internals/utils/publishTreeViewEvent.cjs.map +1 -0
- package/dist/esm/components/Card/Header/Header.js +1 -0
- package/dist/esm/components/Card/Header/Header.js.map +1 -1
- package/dist/esm/components/Card/Header/Header.styles.js +6 -10
- package/dist/esm/components/Card/Header/Header.styles.js.map +1 -1
- package/dist/esm/components/Section/Section.js +4 -3
- package/dist/esm/components/Section/Section.js.map +1 -1
- package/dist/esm/components/Table/hooks/usePagination.js +1 -1
- package/dist/esm/components/Table/hooks/usePagination.js.map +1 -1
- package/dist/esm/components/TreeView/TreeItem/DefaultContent.js +18 -2
- package/dist/esm/components/TreeView/TreeItem/DefaultContent.js.map +1 -1
- package/dist/esm/components/TreeView/TreeItem/TreeItem.js +3 -4
- package/dist/esm/components/TreeView/TreeItem/TreeItem.js.map +1 -1
- package/dist/esm/components/TreeView/TreeItem/useHvTreeItem.js +1 -2
- package/dist/esm/components/TreeView/TreeItem/useHvTreeItem.js.map +1 -1
- package/dist/esm/components/TreeView/TreeView.js +4 -4
- package/dist/esm/components/TreeView/TreeView.js.map +1 -1
- package/dist/esm/components/TreeView/internals/DescendantProvider.js +127 -0
- package/dist/esm/components/TreeView/internals/DescendantProvider.js.map +1 -0
- package/dist/esm/components/TreeView/internals/TreeViewProvider.js +34 -0
- package/dist/esm/components/TreeView/internals/TreeViewProvider.js.map +1 -0
- package/dist/esm/components/TreeView/internals/corePlugins.js +6 -0
- package/dist/esm/components/TreeView/internals/corePlugins.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/defaultPlugins.js +11 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/defaultPlugins.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewContextValueBuilder.js +28 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewContextValueBuilder.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewExpansion.js +61 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewExpansion.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewFocus.js +86 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewFocus.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewKeyboardNavigation.js +218 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewKeyboardNavigation.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewNodes.js +63 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewNodes.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewSelection.js +213 -0
- package/dist/esm/components/TreeView/internals/hooks/plugins/useTreeViewSelection.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/useInstanceEventHandler.js +74 -0
- package/dist/esm/components/TreeView/internals/hooks/useInstanceEventHandler.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeView.js +68 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeView.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeViewInstanceEvents.js +33 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeViewInstanceEvents.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeViewModels.js +39 -0
- package/dist/esm/components/TreeView/internals/hooks/useTreeViewModels.js.map +1 -0
- package/dist/esm/components/TreeView/internals/hooks/utils.js +47 -0
- package/dist/esm/components/TreeView/internals/hooks/utils.js.map +1 -0
- package/dist/esm/components/TreeView/internals/utils/EventManager.js +62 -0
- package/dist/esm/components/TreeView/internals/utils/EventManager.js.map +1 -0
- package/dist/esm/components/TreeView/internals/utils/FinalizationRegistryBasedCleanupTracking.js +22 -0
- package/dist/esm/components/TreeView/internals/utils/FinalizationRegistryBasedCleanupTracking.js.map +1 -0
- package/dist/esm/components/TreeView/internals/utils/TimerBasedCleanupTracking.js +41 -0
- package/dist/esm/components/TreeView/internals/utils/TimerBasedCleanupTracking.js.map +1 -0
- package/dist/esm/components/TreeView/internals/utils/publishTreeViewEvent.js +7 -0
- package/dist/esm/components/TreeView/internals/utils/publishTreeViewEvent.js.map +1 -0
- package/dist/types/index.d.ts +791 -589
- package/package.json +5 -6
- package/dist/cjs/components/TreeView/internals.cjs +0 -30
- package/dist/cjs/components/TreeView/internals.cjs.map +0 -1
- package/dist/esm/components/TreeView/internals.js +0 -15
- package/dist/esm/components/TreeView/internals.js.map +0 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const utils = require("@mui/material/utils");
|
|
5
|
+
const utils$1 = require("../utils.cjs");
|
|
6
|
+
const publishTreeViewEvent = require("../../utils/publishTreeViewEvent.cjs");
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule)
|
|
9
|
+
return e;
|
|
10
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
11
|
+
if (e) {
|
|
12
|
+
for (const k in e) {
|
|
13
|
+
if (k !== "default") {
|
|
14
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: () => e[k]
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
26
|
+
const useTreeViewNodes = ({
|
|
27
|
+
instance,
|
|
28
|
+
params
|
|
29
|
+
}) => {
|
|
30
|
+
const nodeMap = React__namespace.useRef({});
|
|
31
|
+
const getNode = React__namespace.useCallback((nodeId) => nodeMap.current[nodeId], []);
|
|
32
|
+
const insertNode = React__namespace.useCallback((node) => {
|
|
33
|
+
nodeMap.current[node.id] = node;
|
|
34
|
+
}, []);
|
|
35
|
+
const removeNode = React__namespace.useCallback((nodeId) => {
|
|
36
|
+
const newMap = {
|
|
37
|
+
...nodeMap.current
|
|
38
|
+
};
|
|
39
|
+
delete newMap[nodeId];
|
|
40
|
+
nodeMap.current = newMap;
|
|
41
|
+
publishTreeViewEvent.publishTreeViewEvent(instance, "removeNode", {
|
|
42
|
+
id: nodeId
|
|
43
|
+
});
|
|
44
|
+
}, [instance]);
|
|
45
|
+
const isNodeDisabled = React__namespace.useCallback((nodeId) => {
|
|
46
|
+
if (nodeId == null) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
let node = instance.getNode(nodeId);
|
|
50
|
+
if (!node) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (node.disabled) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
while (node.parentId != null) {
|
|
57
|
+
node = instance.getNode(node.parentId);
|
|
58
|
+
if (node.disabled) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}, [instance]);
|
|
64
|
+
const getChildrenIds = utils.useEventCallback((nodeId) => Object.values(nodeMap.current).filter((node) => node.parentId === nodeId).sort((a, b) => a.index - b.index).map((child) => child.id));
|
|
65
|
+
const getNavigableChildrenIds = (nodeId) => {
|
|
66
|
+
let childrenIds = instance.getChildrenIds(nodeId);
|
|
67
|
+
if (!params.disabledItemsFocusable) {
|
|
68
|
+
childrenIds = childrenIds.filter((node) => !instance.isNodeDisabled(node));
|
|
69
|
+
}
|
|
70
|
+
return childrenIds;
|
|
71
|
+
};
|
|
72
|
+
utils$1.populateInstance(instance, {
|
|
73
|
+
getNode,
|
|
74
|
+
updateNode: insertNode,
|
|
75
|
+
removeNode,
|
|
76
|
+
getChildrenIds,
|
|
77
|
+
getNavigableChildrenIds,
|
|
78
|
+
isNodeDisabled
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
exports.useTreeViewNodes = useTreeViewNodes;
|
|
82
|
+
//# sourceMappingURL=useTreeViewNodes.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeViewNodes.cjs","sources":["../../../../../../../src/components/TreeView/internals/hooks/plugins/useTreeViewNodes.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useEventCallback } from \"@mui/material/utils\";\n\nimport {\n DefaultizedProps,\n TreeViewNode,\n TreeViewPlugin,\n TreeViewPluginSignature,\n} from \"../../types\";\nimport { populateInstance } from \"../utils\";\nimport { publishTreeViewEvent } from \"../../utils/publishTreeViewEvent\";\n\nexport interface UseTreeViewNodesInstance {\n getNode: (nodeId: string) => TreeViewNode;\n updateNode: (node: TreeViewNode) => void;\n removeNode: (nodeId: string) => void;\n getChildrenIds: (nodeId: string | null) => string[];\n getNavigableChildrenIds: (nodeId: string | null) => string[];\n isNodeDisabled: (nodeId: string | null) => nodeId is string;\n}\n\nexport interface UseTreeViewNodesParameters {\n /**\n * If `true`, will allow focus on disabled items.\n * @default false\n */\n disabledItemsFocusable?: boolean;\n}\n\nexport type UseTreeViewNodesDefaultizedParameters = DefaultizedProps<\n UseTreeViewNodesParameters,\n \"disabledItemsFocusable\"\n>;\n\ninterface UseTreeViewNodesEventLookup {\n removeNode: {\n params: { id: string };\n };\n}\n\nexport type UseTreeViewNodesSignature = TreeViewPluginSignature<\n UseTreeViewNodesParameters,\n UseTreeViewNodesDefaultizedParameters,\n UseTreeViewNodesInstance,\n UseTreeViewNodesEventLookup,\n {},\n never,\n []\n>;\n\nexport const useTreeViewNodes: TreeViewPlugin<UseTreeViewNodesSignature> = ({\n instance,\n params,\n}) => {\n const nodeMap = React.useRef<{ [nodeId: string]: TreeViewNode }>({});\n\n const getNode = React.useCallback(\n (nodeId: string) => nodeMap.current[nodeId],\n []\n );\n\n const insertNode = React.useCallback((node: TreeViewNode) => {\n nodeMap.current[node.id] = node;\n }, []);\n\n const removeNode = React.useCallback(\n (nodeId: string) => {\n const newMap = { ...nodeMap.current };\n delete newMap[nodeId];\n nodeMap.current = newMap;\n publishTreeViewEvent(instance as any, \"removeNode\", { id: nodeId });\n },\n [instance]\n );\n\n const isNodeDisabled = React.useCallback(\n (nodeId: string | null): nodeId is string => {\n if (nodeId == null) {\n return false;\n }\n\n let node = instance.getNode(nodeId);\n\n // This can be called before the node has been added to the node map.\n if (!node) {\n return false;\n }\n\n if (node.disabled) {\n return true;\n }\n\n while (node.parentId != null) {\n node = instance.getNode(node.parentId);\n if (node.disabled) {\n return true;\n }\n }\n\n return false;\n },\n [instance]\n );\n\n const getChildrenIds = useEventCallback((nodeId: string | null) =>\n Object.values(nodeMap.current)\n .filter((node) => node.parentId === nodeId)\n .sort((a, b) => a.index - b.index)\n .map((child) => child.id)\n );\n\n const getNavigableChildrenIds = (nodeId: string | null) => {\n let childrenIds = instance.getChildrenIds(nodeId);\n\n if (!params.disabledItemsFocusable) {\n childrenIds = childrenIds.filter(\n (node) => !instance.isNodeDisabled(node)\n );\n }\n return childrenIds;\n };\n\n populateInstance<UseTreeViewNodesSignature>(instance, {\n getNode,\n updateNode: insertNode,\n removeNode,\n getChildrenIds,\n getNavigableChildrenIds,\n isNodeDisabled,\n });\n};\n"],"names":["useTreeViewNodes","instance","params","nodeMap","React","useRef","getNode","useCallback","nodeId","current","insertNode","node","id","removeNode","newMap","publishTreeViewEvent","isNodeDisabled","disabled","parentId","getChildrenIds","useEventCallback","Object","values","filter","sort","a","b","index","map","child","getNavigableChildrenIds","childrenIds","disabledItemsFocusable","populateInstance","updateNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkDO,MAAMA,mBAA8DA,CAAC;AAAA,EAC1EC;AAAAA,EACAC;AACF,MAAM;AACJ,QAAMC,UAAUC,iBAAMC,OAA2C,CAAE,CAAA;AAE7DC,QAAAA,UAAUF,iBAAMG,YACpB,CAACC,WAAmBL,QAAQM,QAAQD,MAAM,GAC1C,CAAA,CACF;AAEA,QAAME,aAAaN,iBAAMG,YAAY,CAACI,SAAuB;AACnDF,YAAAA,QAAQE,KAAKC,EAAE,IAAID;AAAAA,EAC7B,GAAG,CAAE,CAAA;AAEL,QAAME,aAAaT,iBAAMG,YACvB,CAACC,WAAmB;AAClB,UAAMM,SAAS;AAAA,MAAE,GAAGX,QAAQM;AAAAA,IAAAA;AAC5B,WAAOK,OAAON,MAAM;AACpBL,YAAQM,UAAUK;AAClBC,yBAAAA,qBAAqBd,UAAiB,cAAc;AAAA,MAAEW,IAAIJ;AAAAA,IAAAA,CAAQ;AAAA,EAAA,GAEpE,CAACP,QAAQ,CACX;AAEA,QAAMe,iBAAiBZ,iBAAMG,YAC3B,CAACC,WAA4C;AAC3C,QAAIA,UAAU,MAAM;AACX,aAAA;AAAA,IACT;AAEIG,QAAAA,OAAOV,SAASK,QAAQE,MAAM;AAGlC,QAAI,CAACG,MAAM;AACF,aAAA;AAAA,IACT;AAEA,QAAIA,KAAKM,UAAU;AACV,aAAA;AAAA,IACT;AAEON,WAAAA,KAAKO,YAAY,MAAM;AACrBjB,aAAAA,SAASK,QAAQK,KAAKO,QAAQ;AACrC,UAAIP,KAAKM,UAAU;AACV,eAAA;AAAA,MACT;AAAA,IACF;AAEO,WAAA;AAAA,EAAA,GAET,CAAChB,QAAQ,CACX;AAEA,QAAMkB,iBAAiBC,MAAAA,iBAAiB,CAACZ,WACvCa,OAAOC,OAAOnB,QAAQM,OAAO,EAC1Bc,OAAQZ,CAASA,SAAAA,KAAKO,aAAaV,MAAM,EACzCgB,KAAK,CAACC,GAAGC,MAAMD,EAAEE,QAAQD,EAAEC,KAAK,EAChCC,IAAKC,CAAAA,UAAUA,MAAMjB,EAAE,CAC5B;AAEMkB,QAAAA,0BAA0BA,CAACtB,WAA0B;AACrDuB,QAAAA,cAAc9B,SAASkB,eAAeX,MAAM;AAE5C,QAAA,CAACN,OAAO8B,wBAAwB;AAClCD,oBAAcA,YAAYR,OACvBZ,CAAAA,SAAS,CAACV,SAASe,eAAeL,IAAI,CACzC;AAAA,IACF;AACOoB,WAAAA;AAAAA,EAAAA;AAGTE,UAAAA,iBAA4ChC,UAAU;AAAA,IACpDK;AAAAA,IACA4B,YAAYxB;AAAAA,IACZG;AAAAA,IACAM;AAAAA,IACAW;AAAAA,IACAd;AAAAA,EAAAA,CACD;AACH;;"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const utils = require("../utils.cjs");
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule)
|
|
7
|
+
return e;
|
|
8
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
+
if (e) {
|
|
10
|
+
for (const k in e) {
|
|
11
|
+
if (k !== "default") {
|
|
12
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: () => e[k]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
24
|
+
const findOrderInTremauxTree = (instance, nodeAId, nodeBId) => {
|
|
25
|
+
if (nodeAId === nodeBId) {
|
|
26
|
+
return [nodeAId, nodeBId];
|
|
27
|
+
}
|
|
28
|
+
const nodeA = instance.getNode(nodeAId);
|
|
29
|
+
const nodeB = instance.getNode(nodeBId);
|
|
30
|
+
if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {
|
|
31
|
+
return nodeB.parentId === nodeA.id ? [nodeA.id, nodeB.id] : [nodeB.id, nodeA.id];
|
|
32
|
+
}
|
|
33
|
+
const aFamily = [nodeA.id];
|
|
34
|
+
const bFamily = [nodeB.id];
|
|
35
|
+
let aAncestor = nodeA.parentId;
|
|
36
|
+
let bAncestor = nodeB.parentId;
|
|
37
|
+
let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
38
|
+
let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
39
|
+
let continueA = true;
|
|
40
|
+
let continueB = true;
|
|
41
|
+
while (!bAncestorIsCommon && !aAncestorIsCommon) {
|
|
42
|
+
if (continueA) {
|
|
43
|
+
aFamily.push(aAncestor);
|
|
44
|
+
aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;
|
|
45
|
+
continueA = aAncestor !== null;
|
|
46
|
+
if (!aAncestorIsCommon && continueA) {
|
|
47
|
+
aAncestor = instance.getNode(aAncestor).parentId;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (continueB && !aAncestorIsCommon) {
|
|
51
|
+
bFamily.push(bAncestor);
|
|
52
|
+
bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;
|
|
53
|
+
continueB = bAncestor !== null;
|
|
54
|
+
if (!bAncestorIsCommon && continueB) {
|
|
55
|
+
bAncestor = instance.getNode(bAncestor).parentId;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;
|
|
60
|
+
const ancestorFamily = instance.getChildrenIds(commonAncestor);
|
|
61
|
+
const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];
|
|
62
|
+
const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];
|
|
63
|
+
return ancestorFamily.indexOf(aSide) < ancestorFamily.indexOf(bSide) ? [nodeAId, nodeBId] : [nodeBId, nodeAId];
|
|
64
|
+
};
|
|
65
|
+
const useTreeViewSelection = ({
|
|
66
|
+
instance,
|
|
67
|
+
params,
|
|
68
|
+
models
|
|
69
|
+
}) => {
|
|
70
|
+
const lastSelectedNode = React__namespace.useRef(null);
|
|
71
|
+
const lastSelectionWasRange = React__namespace.useRef(false);
|
|
72
|
+
const currentRangeSelection = React__namespace.useRef([]);
|
|
73
|
+
const isNodeSelected = (nodeId) => Array.isArray(models.selected.value) ? models.selected.value.indexOf(nodeId) !== -1 : models.selected.value === nodeId;
|
|
74
|
+
const selectNode = (event, nodeId, multiple = false) => {
|
|
75
|
+
if (params.disableSelection) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (multiple) {
|
|
79
|
+
if (Array.isArray(models.selected.value)) {
|
|
80
|
+
let newSelected;
|
|
81
|
+
if (models.selected.value.indexOf(nodeId) !== -1) {
|
|
82
|
+
newSelected = models.selected.value.filter((id) => id !== nodeId);
|
|
83
|
+
} else {
|
|
84
|
+
newSelected = [nodeId].concat(models.selected.value);
|
|
85
|
+
}
|
|
86
|
+
if (params.onNodeSelect) {
|
|
87
|
+
params.onNodeSelect(event, newSelected);
|
|
88
|
+
}
|
|
89
|
+
models.selected.setValue(newSelected);
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
const newSelected = params.multiSelect ? [nodeId] : nodeId;
|
|
93
|
+
if (params.onNodeSelect) {
|
|
94
|
+
params.onNodeSelect(event, newSelected);
|
|
95
|
+
}
|
|
96
|
+
models.selected.setValue(newSelected);
|
|
97
|
+
}
|
|
98
|
+
lastSelectedNode.current = nodeId;
|
|
99
|
+
lastSelectionWasRange.current = false;
|
|
100
|
+
currentRangeSelection.current = [];
|
|
101
|
+
};
|
|
102
|
+
const getNodesInRange = (nodeAId, nodeBId) => {
|
|
103
|
+
const [first, last] = findOrderInTremauxTree(instance, nodeAId, nodeBId);
|
|
104
|
+
const nodes = [first];
|
|
105
|
+
let current = first;
|
|
106
|
+
while (current !== last) {
|
|
107
|
+
current = utils.getNextNode(instance, current);
|
|
108
|
+
nodes.push(current);
|
|
109
|
+
}
|
|
110
|
+
return nodes;
|
|
111
|
+
};
|
|
112
|
+
const handleRangeArrowSelect = (event, nodes) => {
|
|
113
|
+
let base = models.selected.value.slice();
|
|
114
|
+
const {
|
|
115
|
+
start,
|
|
116
|
+
next,
|
|
117
|
+
current
|
|
118
|
+
} = nodes;
|
|
119
|
+
if (!next || !current) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (currentRangeSelection.current.indexOf(current) === -1) {
|
|
123
|
+
currentRangeSelection.current = [];
|
|
124
|
+
}
|
|
125
|
+
if (lastSelectionWasRange.current) {
|
|
126
|
+
if (currentRangeSelection.current.indexOf(next) !== -1) {
|
|
127
|
+
base = base.filter((id) => id === start || id !== current);
|
|
128
|
+
currentRangeSelection.current = currentRangeSelection.current.filter((id) => id === start || id !== current);
|
|
129
|
+
} else {
|
|
130
|
+
base.push(next);
|
|
131
|
+
currentRangeSelection.current.push(next);
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
base.push(next);
|
|
135
|
+
currentRangeSelection.current.push(current, next);
|
|
136
|
+
}
|
|
137
|
+
if (params.onNodeSelect) {
|
|
138
|
+
params.onNodeSelect(event, base);
|
|
139
|
+
}
|
|
140
|
+
models.selected.setValue(base);
|
|
141
|
+
};
|
|
142
|
+
const handleRangeSelect = (event, nodes) => {
|
|
143
|
+
let base = models.selected.value.slice();
|
|
144
|
+
const {
|
|
145
|
+
start,
|
|
146
|
+
end
|
|
147
|
+
} = nodes;
|
|
148
|
+
if (lastSelectionWasRange.current) {
|
|
149
|
+
base = base.filter((id) => currentRangeSelection.current.indexOf(id) === -1);
|
|
150
|
+
}
|
|
151
|
+
let range = getNodesInRange(start, end);
|
|
152
|
+
range = range.filter((node) => !instance.isNodeDisabled(node));
|
|
153
|
+
currentRangeSelection.current = range;
|
|
154
|
+
let newSelected = base.concat(range);
|
|
155
|
+
newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);
|
|
156
|
+
if (params.onNodeSelect) {
|
|
157
|
+
params.onNodeSelect(event, newSelected);
|
|
158
|
+
}
|
|
159
|
+
models.selected.setValue(newSelected);
|
|
160
|
+
};
|
|
161
|
+
const selectRange = (event, nodes, stacked = false) => {
|
|
162
|
+
if (params.disableSelection) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const {
|
|
166
|
+
start = lastSelectedNode.current,
|
|
167
|
+
end,
|
|
168
|
+
current
|
|
169
|
+
} = nodes;
|
|
170
|
+
if (stacked) {
|
|
171
|
+
handleRangeArrowSelect(event, {
|
|
172
|
+
start,
|
|
173
|
+
next: end,
|
|
174
|
+
current
|
|
175
|
+
});
|
|
176
|
+
} else if (start != null && end != null) {
|
|
177
|
+
handleRangeSelect(event, {
|
|
178
|
+
start,
|
|
179
|
+
end
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
lastSelectionWasRange.current = true;
|
|
183
|
+
};
|
|
184
|
+
const rangeSelectToFirst = (event, nodeId) => {
|
|
185
|
+
if (!lastSelectedNode.current) {
|
|
186
|
+
lastSelectedNode.current = nodeId;
|
|
187
|
+
}
|
|
188
|
+
const start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
|
|
189
|
+
instance.selectRange(event, {
|
|
190
|
+
start,
|
|
191
|
+
end: utils.getFirstNode(instance)
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
const rangeSelectToLast = (event, nodeId) => {
|
|
195
|
+
if (!lastSelectedNode.current) {
|
|
196
|
+
lastSelectedNode.current = nodeId;
|
|
197
|
+
}
|
|
198
|
+
const start = lastSelectionWasRange.current ? lastSelectedNode.current : nodeId;
|
|
199
|
+
instance.selectRange(event, {
|
|
200
|
+
start,
|
|
201
|
+
end: utils.getLastNode(instance)
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
utils.populateInstance(instance, {
|
|
205
|
+
isNodeSelected,
|
|
206
|
+
selectNode,
|
|
207
|
+
selectRange,
|
|
208
|
+
rangeSelectToLast,
|
|
209
|
+
rangeSelectToFirst
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
getRootProps: () => ({
|
|
213
|
+
"aria-multiselectable": params.multiSelect
|
|
214
|
+
})
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
useTreeViewSelection.models = {
|
|
218
|
+
selected: {
|
|
219
|
+
controlledProp: "selected",
|
|
220
|
+
defaultProp: "defaultSelected"
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const DEFAULT_SELECTED = [];
|
|
224
|
+
useTreeViewSelection.getDefaultizedParams = (params) => ({
|
|
225
|
+
...params,
|
|
226
|
+
disableSelection: params.disableSelection ?? false,
|
|
227
|
+
multiSelect: params.multiSelect ?? false,
|
|
228
|
+
defaultSelected: params.defaultSelected ?? (params.multiSelect ? DEFAULT_SELECTED : null)
|
|
229
|
+
});
|
|
230
|
+
exports.findOrderInTremauxTree = findOrderInTremauxTree;
|
|
231
|
+
exports.useTreeViewSelection = useTreeViewSelection;
|
|
232
|
+
//# sourceMappingURL=useTreeViewSelection.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeViewSelection.cjs","sources":["../../../../../../../src/components/TreeView/internals/hooks/plugins/useTreeViewSelection.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport type {\n TreeViewPlugin,\n TreeViewItemRange,\n DefaultizedProps,\n TreeViewPluginSignature,\n TreeViewInstance,\n} from \"../../types\";\nimport {\n populateInstance,\n getNextNode,\n getFirstNode,\n getLastNode,\n} from \"../utils\";\nimport type { UseTreeViewNodesSignature } from \"./useTreeViewNodes\";\nimport type { UseTreeViewExpansionSignature } from \"./useTreeViewExpansion\";\n\n/**\n * This is used to determine the start and end of a selection range so\n * we can get the nodes between the two border nodes.\n *\n * It finds the nodes' common ancestor using\n * a naive implementation of a lowest common ancestor algorithm\n * (https://en.wikipedia.org/wiki/Lowest_common_ancestor).\n * Then compares the ancestor's 2 children that are ancestors of nodeA and NodeB\n * so we can compare their indexes to work out which node comes first in a depth first search.\n * (https://en.wikipedia.org/wiki/Depth-first_search)\n *\n * Another way to put it is which node is shallower in a trémaux tree\n * https://en.wikipedia.org/wiki/Tr%C3%A9maux_tree\n */\nexport const findOrderInTremauxTree = (\n instance: TreeViewInstance<[UseTreeViewNodesSignature]>,\n nodeAId: string,\n nodeBId: string\n) => {\n if (nodeAId === nodeBId) {\n return [nodeAId, nodeBId];\n }\n\n const nodeA = instance.getNode(nodeAId);\n const nodeB = instance.getNode(nodeBId);\n\n if (nodeA.parentId === nodeB.id || nodeB.parentId === nodeA.id) {\n return nodeB.parentId === nodeA.id\n ? [nodeA.id, nodeB.id]\n : [nodeB.id, nodeA.id];\n }\n\n const aFamily: (string | null)[] = [nodeA.id];\n const bFamily: (string | null)[] = [nodeB.id];\n\n let aAncestor = nodeA.parentId;\n let bAncestor = nodeB.parentId;\n\n let aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n let bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n\n let continueA = true;\n let continueB = true;\n\n while (!bAncestorIsCommon && !aAncestorIsCommon) {\n if (continueA) {\n aFamily.push(aAncestor);\n aAncestorIsCommon = bFamily.indexOf(aAncestor) !== -1;\n continueA = aAncestor !== null;\n if (!aAncestorIsCommon && continueA) {\n aAncestor = instance.getNode(aAncestor!).parentId;\n }\n }\n\n if (continueB && !aAncestorIsCommon) {\n bFamily.push(bAncestor);\n bAncestorIsCommon = aFamily.indexOf(bAncestor) !== -1;\n continueB = bAncestor !== null;\n if (!bAncestorIsCommon && continueB) {\n bAncestor = instance.getNode(bAncestor!).parentId;\n }\n }\n }\n\n const commonAncestor = aAncestorIsCommon ? aAncestor : bAncestor;\n const ancestorFamily = instance.getChildrenIds(commonAncestor);\n\n const aSide = aFamily[aFamily.indexOf(commonAncestor) - 1];\n const bSide = bFamily[bFamily.indexOf(commonAncestor) - 1];\n\n return ancestorFamily.indexOf(aSide!) < ancestorFamily.indexOf(bSide!)\n ? [nodeAId, nodeBId]\n : [nodeBId, nodeAId];\n};\n\nexport interface UseTreeViewSelectionInstance {\n isNodeSelected: (nodeId: string) => boolean;\n selectNode: (\n event: React.SyntheticEvent,\n nodeId: string,\n multiple?: boolean\n ) => void;\n selectRange: (\n event: React.SyntheticEvent,\n nodes: TreeViewItemRange,\n stacked?: boolean\n ) => void;\n rangeSelectToFirst: (\n event: React.KeyboardEvent<HTMLUListElement>,\n nodeId: string\n ) => void;\n rangeSelectToLast: (\n event: React.KeyboardEvent<HTMLUListElement>,\n nodeId: string\n ) => void;\n}\n\ntype TreeViewSelectionValue<Multiple extends boolean | undefined> =\n Multiple extends true ? string[] : string | null;\n\nexport interface UseTreeViewSelectionParameters<\n Multiple extends boolean | undefined\n> {\n /**\n * If `true` selection is disabled.\n * @default false\n */\n disableSelection?: boolean;\n /**\n * Selected node ids. (Uncontrolled)\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n * @default []\n */\n defaultSelected?: TreeViewSelectionValue<Multiple>;\n /**\n * Selected node ids. (Controlled)\n * When `multiSelect` is true this takes an array of strings; when false (default) a string.\n */\n selected?: TreeViewSelectionValue<Multiple>;\n /**\n * If true `ctrl` and `shift` will trigger multiselect.\n * @default false\n */\n multiSelect?: Multiple;\n /**\n * Callback fired when tree items are selected/unselected.\n * @param {React.SyntheticEvent} event The event source of the callback\n * @param {string[] | string} nodeIds Ids of the selected nodes. When `multiSelect` is true\n * this is an array of strings; when false (default) a string.\n */\n onNodeSelect?: (\n event: React.SyntheticEvent,\n nodeIds: Exclude<TreeViewSelectionValue<Multiple>, null>\n ) => void;\n}\n\nexport type UseTreeViewSelectionDefaultizedParameters<\n Multiple extends boolean\n> = DefaultizedProps<\n UseTreeViewSelectionParameters<Multiple>,\n \"disableSelection\" | \"defaultSelected\" | \"multiSelect\"\n>;\n\nexport type UseTreeViewSelectionSignature<\n Multiple extends boolean | undefined\n> = TreeViewPluginSignature<\n UseTreeViewSelectionParameters<Multiple>,\n UseTreeViewSelectionDefaultizedParameters<\n Multiple extends undefined ? false : Multiple\n >,\n UseTreeViewSelectionInstance,\n {},\n {},\n \"selected\",\n [\n UseTreeViewNodesSignature,\n UseTreeViewExpansionSignature,\n UseTreeViewNodesSignature\n ]\n>;\n\nexport const useTreeViewSelection: TreeViewPlugin<\n UseTreeViewSelectionSignature<any>\n> = ({ instance, params, models }) => {\n const lastSelectedNode = React.useRef<string | null>(null);\n const lastSelectionWasRange = React.useRef(false);\n const currentRangeSelection = React.useRef<string[]>([]);\n\n const isNodeSelected = (nodeId: string) =>\n Array.isArray(models.selected.value)\n ? models.selected.value.indexOf(nodeId) !== -1\n : models.selected.value === nodeId;\n\n const selectNode = (\n event: React.SyntheticEvent,\n nodeId: string,\n multiple = false\n ) => {\n if (params.disableSelection) {\n return;\n }\n\n if (multiple) {\n if (Array.isArray(models.selected.value)) {\n let newSelected: string[];\n if (models.selected.value.indexOf(nodeId) !== -1) {\n newSelected = models.selected.value.filter((id) => id !== nodeId);\n } else {\n newSelected = [nodeId].concat(models.selected.value);\n }\n\n if (params.onNodeSelect) {\n (params.onNodeSelect as UseTreeViewSelectionDefaultizedParameters<true>[\"onNodeSelect\"])!(\n event,\n newSelected\n );\n }\n\n models.selected.setValue(newSelected);\n }\n } else {\n const newSelected = params.multiSelect ? [nodeId] : nodeId;\n\n if (params.onNodeSelect) {\n params.onNodeSelect(event, newSelected as string & string[]);\n }\n\n models.selected.setValue(newSelected);\n }\n lastSelectedNode.current = nodeId;\n lastSelectionWasRange.current = false;\n currentRangeSelection.current = [];\n };\n\n const getNodesInRange = (nodeAId: string, nodeBId: string) => {\n const [first, last] = findOrderInTremauxTree(instance, nodeAId, nodeBId);\n const nodes = [first];\n\n let current = first;\n\n while (current !== last) {\n current = getNextNode(instance, current)!;\n nodes.push(current);\n }\n\n return nodes;\n };\n\n const handleRangeArrowSelect = (\n event: React.SyntheticEvent,\n nodes: TreeViewItemRange\n ) => {\n let base = (models.selected.value as string[]).slice();\n const { start, next, current } = nodes;\n\n if (!next || !current) {\n return;\n }\n\n if (currentRangeSelection.current.indexOf(current) === -1) {\n currentRangeSelection.current = [];\n }\n\n if (lastSelectionWasRange.current) {\n if (currentRangeSelection.current.indexOf(next) !== -1) {\n base = base.filter((id) => id === start || id !== current);\n currentRangeSelection.current = currentRangeSelection.current.filter(\n (id) => id === start || id !== current\n );\n } else {\n base.push(next);\n currentRangeSelection.current.push(next);\n }\n } else {\n base.push(next);\n currentRangeSelection.current.push(current, next);\n }\n\n if (params.onNodeSelect) {\n (params.onNodeSelect as UseTreeViewSelectionDefaultizedParameters<true>[\"onNodeSelect\"])!(\n event,\n base\n );\n }\n\n models.selected.setValue(base);\n };\n\n const handleRangeSelect = (\n event: React.SyntheticEvent,\n nodes: { start: string; end: string }\n ) => {\n let base = (models.selected.value as string[]).slice();\n const { start, end } = nodes;\n // If last selection was a range selection ignore nodes that were selected.\n if (lastSelectionWasRange.current) {\n base = base.filter(\n (id) => currentRangeSelection.current.indexOf(id) === -1\n );\n }\n\n let range = getNodesInRange(start, end);\n range = range.filter((node) => !instance.isNodeDisabled(node));\n currentRangeSelection.current = range;\n let newSelected = base.concat(range);\n newSelected = newSelected.filter((id, i) => newSelected.indexOf(id) === i);\n\n if (params.onNodeSelect) {\n (params.onNodeSelect as UseTreeViewSelectionDefaultizedParameters<true>[\"onNodeSelect\"])!(\n event,\n newSelected\n );\n }\n\n models.selected.setValue(newSelected);\n };\n\n const selectRange = (\n event: React.SyntheticEvent,\n nodes: TreeViewItemRange,\n stacked = false\n ) => {\n if (params.disableSelection) {\n return;\n }\n\n const { start = lastSelectedNode.current, end, current } = nodes;\n if (stacked) {\n handleRangeArrowSelect(event, { start, next: end, current });\n } else if (start != null && end != null) {\n handleRangeSelect(event, { start, end });\n }\n lastSelectionWasRange.current = true;\n };\n\n const rangeSelectToFirst = (\n event: React.KeyboardEvent<HTMLUListElement>,\n nodeId: string\n ) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = nodeId;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : nodeId;\n\n instance.selectRange(event, {\n start,\n end: getFirstNode(instance),\n });\n };\n\n const rangeSelectToLast = (\n event: React.KeyboardEvent<HTMLUListElement>,\n nodeId: string\n ) => {\n if (!lastSelectedNode.current) {\n lastSelectedNode.current = nodeId;\n }\n\n const start = lastSelectionWasRange.current\n ? lastSelectedNode.current\n : nodeId;\n\n instance.selectRange(event, {\n start,\n end: getLastNode(instance),\n });\n };\n\n populateInstance<UseTreeViewSelectionSignature<any>>(instance, {\n isNodeSelected,\n selectNode,\n selectRange,\n rangeSelectToLast,\n rangeSelectToFirst,\n });\n\n return {\n getRootProps: () => ({\n \"aria-multiselectable\": params.multiSelect,\n }),\n };\n};\n\nuseTreeViewSelection.models = {\n selected: { controlledProp: \"selected\", defaultProp: \"defaultSelected\" },\n};\n\nconst DEFAULT_SELECTED: string[] = [];\n\nuseTreeViewSelection.getDefaultizedParams = (params) => ({\n ...params,\n disableSelection: params.disableSelection ?? false,\n multiSelect: params.multiSelect ?? false,\n defaultSelected:\n params.defaultSelected ?? (params.multiSelect ? DEFAULT_SELECTED : null),\n});\n"],"names":["findOrderInTremauxTree","instance","nodeAId","nodeBId","nodeA","getNode","nodeB","parentId","id","aFamily","bFamily","aAncestor","bAncestor","aAncestorIsCommon","indexOf","bAncestorIsCommon","continueA","continueB","push","commonAncestor","ancestorFamily","getChildrenIds","aSide","bSide","useTreeViewSelection","params","models","lastSelectedNode","React","useRef","lastSelectionWasRange","currentRangeSelection","isNodeSelected","nodeId","Array","isArray","selected","value","selectNode","event","multiple","disableSelection","newSelected","filter","concat","onNodeSelect","setValue","multiSelect","current","getNodesInRange","first","last","nodes","getNextNode","handleRangeArrowSelect","base","slice","start","next","handleRangeSelect","end","range","node","isNodeDisabled","i","selectRange","stacked","rangeSelectToFirst","getFirstNode","rangeSelectToLast","getLastNode","populateInstance","getRootProps","controlledProp","defaultProp","DEFAULT_SELECTED","getDefaultizedParams","defaultSelected"],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const TimerBasedCleanupTracking = require("../utils/TimerBasedCleanupTracking.cjs");
|
|
5
|
+
const FinalizationRegistryBasedCleanupTracking = require("../utils/FinalizationRegistryBasedCleanupTracking.cjs");
|
|
6
|
+
function _interopNamespace(e) {
|
|
7
|
+
if (e && e.__esModule)
|
|
8
|
+
return e;
|
|
9
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
10
|
+
if (e) {
|
|
11
|
+
for (const k in e) {
|
|
12
|
+
if (k !== "default") {
|
|
13
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: () => e[k]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
25
|
+
class ObjectToBeRetainedByReact {
|
|
26
|
+
}
|
|
27
|
+
function createUseInstanceEventHandler(registryContainer2) {
|
|
28
|
+
let cleanupTokensCounter = 0;
|
|
29
|
+
return function useInstanceEventHandler2(instance, eventName, handler) {
|
|
30
|
+
if (registryContainer2.registry === null) {
|
|
31
|
+
registryContainer2.registry = typeof FinalizationRegistry !== "undefined" ? new FinalizationRegistryBasedCleanupTracking.FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking.TimerBasedCleanupTracking();
|
|
32
|
+
}
|
|
33
|
+
const [objectRetainedByReact] = React__namespace.useState(new ObjectToBeRetainedByReact());
|
|
34
|
+
const subscription = React__namespace.useRef(null);
|
|
35
|
+
const handlerRef = React__namespace.useRef();
|
|
36
|
+
handlerRef.current = handler;
|
|
37
|
+
const cleanupTokenRef = React__namespace.useRef(null);
|
|
38
|
+
if (!subscription.current && handlerRef.current) {
|
|
39
|
+
const enhancedHandler = (params, event) => {
|
|
40
|
+
if (!event.defaultMuiPrevented) {
|
|
41
|
+
handlerRef.current?.(params, event);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
|
|
45
|
+
cleanupTokensCounter += 1;
|
|
46
|
+
cleanupTokenRef.current = {
|
|
47
|
+
cleanupToken: cleanupTokensCounter
|
|
48
|
+
};
|
|
49
|
+
registryContainer2.registry.register(
|
|
50
|
+
objectRetainedByReact,
|
|
51
|
+
// The callback below will be called once this reference stops being retained
|
|
52
|
+
() => {
|
|
53
|
+
subscription.current?.();
|
|
54
|
+
subscription.current = null;
|
|
55
|
+
cleanupTokenRef.current = null;
|
|
56
|
+
},
|
|
57
|
+
cleanupTokenRef.current
|
|
58
|
+
);
|
|
59
|
+
} else if (!handlerRef.current && subscription.current) {
|
|
60
|
+
subscription.current();
|
|
61
|
+
subscription.current = null;
|
|
62
|
+
if (cleanupTokenRef.current) {
|
|
63
|
+
registryContainer2.registry.unregister(cleanupTokenRef.current);
|
|
64
|
+
cleanupTokenRef.current = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
React__namespace.useEffect(() => {
|
|
68
|
+
if (!subscription.current && handlerRef.current) {
|
|
69
|
+
const enhancedHandler = (params, event) => {
|
|
70
|
+
if (!event.defaultMuiPrevented) {
|
|
71
|
+
handlerRef.current?.(params, event);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
subscription.current = instance.$$subscribeEvent(eventName, enhancedHandler);
|
|
75
|
+
}
|
|
76
|
+
if (cleanupTokenRef.current && registryContainer2.registry) {
|
|
77
|
+
registryContainer2.registry.unregister(cleanupTokenRef.current);
|
|
78
|
+
cleanupTokenRef.current = null;
|
|
79
|
+
}
|
|
80
|
+
return () => {
|
|
81
|
+
subscription.current?.();
|
|
82
|
+
subscription.current = null;
|
|
83
|
+
};
|
|
84
|
+
}, [instance, eventName]);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const registryContainer = {
|
|
88
|
+
registry: null
|
|
89
|
+
};
|
|
90
|
+
const useInstanceEventHandler = createUseInstanceEventHandler(registryContainer);
|
|
91
|
+
exports.createUseInstanceEventHandler = createUseInstanceEventHandler;
|
|
92
|
+
exports.useInstanceEventHandler = useInstanceEventHandler;
|
|
93
|
+
//# sourceMappingURL=useInstanceEventHandler.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInstanceEventHandler.cjs","sources":["../../../../../../src/components/TreeView/internals/hooks/useInstanceEventHandler.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { UnregisterToken, CleanupTracking } from \"../utils/CleanupTracking\";\nimport { TimerBasedCleanupTracking } from \"../utils/TimerBasedCleanupTracking\";\nimport { FinalizationRegistryBasedCleanupTracking } from \"../utils/FinalizationRegistryBasedCleanupTracking\";\nimport { TreeViewAnyPluginSignature, TreeViewUsedEvents } from \"../types\";\nimport { TreeViewEventListener } from \"../types/events\";\nimport { UseTreeViewInstanceEventsInstance } from \"./useTreeViewInstanceEvents.types\";\n\ninterface RegistryContainer {\n registry: CleanupTracking | null;\n}\n\n// We use class to make it easier to detect in heap snapshots by name\nclass ObjectToBeRetainedByReact {}\n\n// Based on https://github.com/Bnaya/use-dispose-uncommitted/blob/main/src/finalization-registry-based-impl.ts\n// Check https://github.com/facebook/react/issues/15317 to get more information\nexport function createUseInstanceEventHandler(\n registryContainer: RegistryContainer\n) {\n let cleanupTokensCounter = 0;\n\n return function useInstanceEventHandler<\n Instance extends UseTreeViewInstanceEventsInstance & {\n $$signature: TreeViewAnyPluginSignature;\n },\n E extends keyof TreeViewUsedEvents<Instance[\"$$signature\"]>\n >(\n instance: Instance,\n eventName: E,\n handler: TreeViewEventListener<\n TreeViewUsedEvents<Instance[\"$$signature\"]>[E]\n >\n ) {\n type Signature = Instance[\"$$signature\"];\n\n if (registryContainer.registry === null) {\n registryContainer.registry =\n typeof FinalizationRegistry !== \"undefined\"\n ? new FinalizationRegistryBasedCleanupTracking()\n : new TimerBasedCleanupTracking();\n }\n\n const [objectRetainedByReact] = React.useState(\n new ObjectToBeRetainedByReact()\n );\n const subscription = React.useRef<(() => void) | null>(null);\n const handlerRef = React.useRef<\n TreeViewEventListener<TreeViewUsedEvents<Signature>[E]> | undefined\n >();\n handlerRef.current = handler;\n const cleanupTokenRef = React.useRef<UnregisterToken | null>(null);\n\n if (!subscription.current && handlerRef.current) {\n const enhancedHandler: TreeViewEventListener<\n TreeViewUsedEvents<Signature>[E]\n > = (params, event) => {\n if (!event.defaultMuiPrevented) {\n handlerRef.current?.(params, event);\n }\n };\n\n subscription.current = instance.$$subscribeEvent(\n eventName as string,\n enhancedHandler\n );\n\n cleanupTokensCounter += 1;\n cleanupTokenRef.current = { cleanupToken: cleanupTokensCounter };\n\n registryContainer.registry.register(\n objectRetainedByReact, // The callback below will be called once this reference stops being retained\n () => {\n subscription.current?.();\n subscription.current = null;\n cleanupTokenRef.current = null;\n },\n cleanupTokenRef.current\n );\n } else if (!handlerRef.current && subscription.current) {\n subscription.current();\n subscription.current = null;\n\n if (cleanupTokenRef.current) {\n registryContainer.registry.unregister(cleanupTokenRef.current);\n cleanupTokenRef.current = null;\n }\n }\n\n React.useEffect(() => {\n if (!subscription.current && handlerRef.current) {\n const enhancedHandler: TreeViewEventListener<\n TreeViewUsedEvents<Signature>[E]\n > = (params, event) => {\n if (!event.defaultMuiPrevented) {\n handlerRef.current?.(params, event);\n }\n };\n\n subscription.current = instance.$$subscribeEvent(\n eventName as string,\n enhancedHandler\n );\n }\n\n if (cleanupTokenRef.current && registryContainer.registry) {\n // If the effect was called, it means that this render was committed\n // so we can trust the cleanup function to remove the listener.\n registryContainer.registry.unregister(cleanupTokenRef.current);\n cleanupTokenRef.current = null;\n }\n\n return () => {\n subscription.current?.();\n subscription.current = null;\n };\n }, [instance, eventName]);\n };\n}\n\nconst registryContainer: RegistryContainer = { registry: null };\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_resetCleanupTracking = () => {\n registryContainer.registry?.reset();\n registryContainer.registry = null;\n};\n\nexport const useInstanceEventHandler =\n createUseInstanceEventHandler(registryContainer);\n"],"names":["ObjectToBeRetainedByReact","createUseInstanceEventHandler","registryContainer","cleanupTokensCounter","useInstanceEventHandler","instance","eventName","handler","registry","FinalizationRegistry","FinalizationRegistryBasedCleanupTracking","TimerBasedCleanupTracking","objectRetainedByReact","React","useState","subscription","useRef","handlerRef","current","cleanupTokenRef","enhancedHandler","params","event","defaultMuiPrevented","$$subscribeEvent","cleanupToken","register","unregister","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAMA,0BAA0B;AAAA;AAIzB,SAASC,8BACdC,oBACA;AACA,MAAIC,uBAAuB;AAE3B,SAAO,SAASC,yBAMdC,UACAC,WACAC,SAGA;AAGIL,QAAAA,mBAAkBM,aAAa,MAAM;AACvCN,yBAAkBM,WAChB,OAAOC,yBAAyB,cAC5B,IAAIC,kFACJ,IAAA,IAAIC,0BAAAA;IACZ;AAEA,UAAM,CAACC,qBAAqB,IAAIC,iBAAMC,SACpC,IAAId,2BACN;AACMe,UAAAA,eAAeF,iBAAMG,OAA4B,IAAI;AACrDC,UAAAA,aAAaJ,iBAAMG;AAGzBC,eAAWC,UAAUX;AACfY,UAAAA,kBAAkBN,iBAAMG,OAA+B,IAAI;AAEjE,QAAI,CAACD,aAAaG,WAAWD,WAAWC,SAAS;AACzCE,YAAAA,kBAEFA,CAACC,QAAQC,UAAU;AACjB,YAAA,CAACA,MAAMC,qBAAqB;AACnBL,qBAAAA,UAAUG,QAAQC,KAAK;AAAA,QACpC;AAAA,MAAA;AAGFP,mBAAaG,UAAUb,SAASmB,iBAC9BlB,WACAc,eACF;AAEwB,8BAAA;AACxBD,sBAAgBD,UAAU;AAAA,QAAEO,cAActB;AAAAA,MAAAA;AAE1CD,yBAAkBM,SAASkB;AAAAA,QACzBd;AAAAA;AAAAA,QACA,MAAM;AACJG,uBAAaG,UAAU;AACvBH,uBAAaG,UAAU;AACvBC,0BAAgBD,UAAU;AAAA,QAC5B;AAAA,QACAC,gBAAgBD;AAAAA,MAAAA;AAAAA,IAET,WAAA,CAACD,WAAWC,WAAWH,aAAaG,SAAS;AACtDH,mBAAaG,QAAQ;AACrBH,mBAAaG,UAAU;AAEvB,UAAIC,gBAAgBD,SAAS;AAC3BhB,2BAAkBM,SAASmB,WAAWR,gBAAgBD,OAAO;AAC7DC,wBAAgBD,UAAU;AAAA,MAC5B;AAAA,IACF;AAEAL,qBAAMe,UAAU,MAAM;AACpB,UAAI,CAACb,aAAaG,WAAWD,WAAWC,SAAS;AACzCE,cAAAA,kBAEFA,CAACC,QAAQC,UAAU;AACjB,cAAA,CAACA,MAAMC,qBAAqB;AACnBL,uBAAAA,UAAUG,QAAQC,KAAK;AAAA,UACpC;AAAA,QAAA;AAGFP,qBAAaG,UAAUb,SAASmB,iBAC9BlB,WACAc,eACF;AAAA,MACF;AAEID,UAAAA,gBAAgBD,WAAWhB,mBAAkBM,UAAU;AAGzDN,2BAAkBM,SAASmB,WAAWR,gBAAgBD,OAAO;AAC7DC,wBAAgBD,UAAU;AAAA,MAC5B;AAEA,aAAO,MAAM;AACXH,qBAAaG,UAAU;AACvBH,qBAAaG,UAAU;AAAA,MAAA;AAAA,IACzB,GACC,CAACb,UAAUC,SAAS,CAAC;AAAA,EAAA;AAE5B;AAEA,MAAMJ,oBAAuC;AAAA,EAAEM,UAAU;AAAK;AAQjDJ,MAAAA,0BACXH,8BAA8BC,iBAAiB;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const utils = require("@mui/material/utils");
|
|
5
|
+
const TreeViewProvider = require("../TreeViewProvider.cjs");
|
|
6
|
+
const corePlugins = require("../corePlugins.cjs");
|
|
7
|
+
const useTreeViewModels = require("./useTreeViewModels.cjs");
|
|
8
|
+
function _interopNamespace(e) {
|
|
9
|
+
if (e && e.__esModule)
|
|
10
|
+
return e;
|
|
11
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
+
if (e) {
|
|
13
|
+
for (const k in e) {
|
|
14
|
+
if (k !== "default") {
|
|
15
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: () => e[k]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
27
|
+
const useTreeView = (inParams) => {
|
|
28
|
+
const plugins = [...corePlugins.TREE_VIEW_CORE_PLUGINS, ...inParams.plugins];
|
|
29
|
+
const params = plugins.reduce((acc, plugin) => {
|
|
30
|
+
if (plugin.getDefaultizedParams) {
|
|
31
|
+
return plugin.getDefaultizedParams(acc);
|
|
32
|
+
}
|
|
33
|
+
return acc;
|
|
34
|
+
}, inParams);
|
|
35
|
+
const models = useTreeViewModels.useTreeViewModels(plugins, params);
|
|
36
|
+
const instanceRef = React__namespace.useRef({});
|
|
37
|
+
const instance = instanceRef.current;
|
|
38
|
+
const innerRootRef = React__namespace.useRef(null);
|
|
39
|
+
const handleRootRef = utils.useForkRef(innerRootRef, inParams.rootRef);
|
|
40
|
+
const [state, setState] = React__namespace.useState(() => {
|
|
41
|
+
const temp = {};
|
|
42
|
+
plugins.forEach((plugin) => {
|
|
43
|
+
if (plugin.getInitialState) {
|
|
44
|
+
Object.assign(temp, plugin.getInitialState(params));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return temp;
|
|
48
|
+
});
|
|
49
|
+
const rootPropsGetters = [];
|
|
50
|
+
let contextValue = TreeViewProvider.DEFAULT_TREE_VIEW_CONTEXT_VALUE;
|
|
51
|
+
const runPlugin = (plugin) => {
|
|
52
|
+
const pluginResponse = plugin({
|
|
53
|
+
instance,
|
|
54
|
+
params,
|
|
55
|
+
state,
|
|
56
|
+
setState,
|
|
57
|
+
rootRef: innerRootRef,
|
|
58
|
+
models
|
|
59
|
+
}) || {};
|
|
60
|
+
if (pluginResponse.getRootProps) {
|
|
61
|
+
rootPropsGetters.push(pluginResponse.getRootProps);
|
|
62
|
+
}
|
|
63
|
+
if (pluginResponse.contextValue) {
|
|
64
|
+
contextValue = pluginResponse.contextValue;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
plugins.forEach(runPlugin);
|
|
68
|
+
const getRootProps = (otherHandlers = {}) => {
|
|
69
|
+
const rootProps = {
|
|
70
|
+
role: "tree",
|
|
71
|
+
tabIndex: 0,
|
|
72
|
+
...otherHandlers,
|
|
73
|
+
ref: handleRootRef
|
|
74
|
+
};
|
|
75
|
+
rootPropsGetters.forEach((rootPropsGetter) => {
|
|
76
|
+
Object.assign(rootProps, rootPropsGetter(otherHandlers));
|
|
77
|
+
});
|
|
78
|
+
return rootProps;
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
getRootProps,
|
|
82
|
+
rootRef: handleRootRef,
|
|
83
|
+
contextValue
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
exports.useTreeView = useTreeView;
|
|
87
|
+
//# sourceMappingURL=useTreeView.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeView.cjs","sources":["../../../../../../src/components/TreeView/internals/hooks/useTreeView.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useForkRef } from \"@mui/material/utils\";\nimport { EventHandlers } from \"@mui/base/utils\";\n\nimport {\n TreeViewAnyPluginSignature,\n TreeViewInstance,\n TreeViewPlugin,\n ConvertPluginsIntoSignatures,\n MergePluginsProperty,\n} from \"../types\";\nimport {\n TreeViewContextValue,\n DEFAULT_TREE_VIEW_CONTEXT_VALUE,\n} from \"../TreeViewProvider\";\nimport { TREE_VIEW_CORE_PLUGINS } from \"../corePlugins\";\nimport { useTreeViewModels } from \"./useTreeViewModels\";\n\nexport type UseTreeViewParameters<\n TPlugins extends readonly TreeViewPlugin<TreeViewAnyPluginSignature>[]\n> = {\n rootRef?: React.Ref<HTMLUListElement> | undefined;\n plugins: TPlugins;\n} & MergePluginsProperty<ConvertPluginsIntoSignatures<TPlugins>, \"params\">;\n\nexport type UseTreeViewDefaultizedParameters<\n TPlugins extends readonly TreeViewPlugin<TreeViewAnyPluginSignature>[]\n> = {\n rootRef?: React.Ref<HTMLUListElement> | undefined;\n plugins: TPlugins;\n} & MergePluginsProperty<\n ConvertPluginsIntoSignatures<TPlugins>,\n \"defaultizedParams\"\n>;\n\nexport interface UseTreeViewRootSlotProps\n extends Pick<\n React.HTMLAttributes<HTMLUListElement>,\n | \"onFocus\"\n | \"onBlur\"\n | \"onKeyDown\"\n | \"id\"\n | \"aria-activedescendant\"\n | \"aria-multiselectable\"\n | \"role\"\n | \"tabIndex\"\n > {\n ref: React.Ref<HTMLUListElement>;\n}\n\nexport interface UseTreeViewReturnValue<\n TPlugins extends readonly TreeViewAnyPluginSignature[]\n> {\n getRootProps: <TOther extends EventHandlers = {}>(\n otherHandlers?: TOther\n ) => UseTreeViewRootSlotProps;\n rootRef: React.RefCallback<HTMLUListElement> | null;\n contextValue: TreeViewContextValue<TPlugins>;\n}\n\nexport const useTreeView = <\n Plugins extends readonly TreeViewPlugin<TreeViewAnyPluginSignature>[]\n>(\n inParams: UseTreeViewParameters<Plugins>\n): UseTreeViewReturnValue<ConvertPluginsIntoSignatures<Plugins>> => {\n const plugins = [...TREE_VIEW_CORE_PLUGINS, ...inParams.plugins];\n type Signatures = ConvertPluginsIntoSignatures<typeof plugins>;\n\n const params = plugins.reduce((acc, plugin) => {\n if (plugin.getDefaultizedParams) {\n return plugin.getDefaultizedParams(acc);\n }\n\n return acc;\n }, inParams) as unknown as UseTreeViewDefaultizedParameters<Plugins>;\n\n const models = useTreeViewModels(\n plugins,\n params as MergePluginsProperty<Signatures, \"defaultizedParams\">\n );\n const instanceRef = React.useRef<TreeViewInstance<Signatures>>(\n {} as TreeViewInstance<Signatures>\n );\n const instance = instanceRef.current;\n const innerRootRef = React.useRef(null);\n const handleRootRef = useForkRef(innerRootRef, inParams.rootRef);\n\n const [state, setState] = React.useState(() => {\n const temp = {} as MergePluginsProperty<Signatures, \"state\">;\n plugins.forEach((plugin) => {\n if (plugin.getInitialState) {\n Object.assign(\n temp,\n plugin.getInitialState(\n params as UseTreeViewDefaultizedParameters<any>\n )\n );\n }\n });\n\n return temp;\n });\n\n const rootPropsGetters: (<TOther extends EventHandlers = {}>(\n otherHandlers: TOther\n ) => React.HTMLAttributes<HTMLUListElement>)[] = [];\n let contextValue: TreeViewContextValue<Signatures> =\n DEFAULT_TREE_VIEW_CONTEXT_VALUE;\n\n const runPlugin = (plugin: TreeViewPlugin<any>) => {\n const pluginResponse =\n plugin({\n instance,\n params,\n state,\n setState,\n rootRef: innerRootRef,\n models,\n }) || {};\n\n if (pluginResponse.getRootProps) {\n rootPropsGetters.push(pluginResponse.getRootProps);\n }\n\n if (pluginResponse.contextValue) {\n contextValue = pluginResponse.contextValue;\n }\n };\n\n plugins.forEach(runPlugin);\n\n const getRootProps = <TOther extends EventHandlers = {}>(\n otherHandlers: TOther = {} as TOther\n ) => {\n const rootProps: UseTreeViewRootSlotProps = {\n role: \"tree\",\n tabIndex: 0,\n ...otherHandlers,\n ref: handleRootRef,\n };\n\n rootPropsGetters.forEach((rootPropsGetter) => {\n Object.assign(rootProps, rootPropsGetter(otherHandlers));\n });\n\n return rootProps;\n };\n\n return { getRootProps, rootRef: handleRootRef, contextValue };\n};\n"],"names":["useTreeView","inParams","plugins","TREE_VIEW_CORE_PLUGINS","params","reduce","acc","plugin","getDefaultizedParams","models","useTreeViewModels","instanceRef","React","useRef","instance","current","innerRootRef","handleRootRef","useForkRef","rootRef","state","setState","useState","temp","forEach","getInitialState","Object","assign","rootPropsGetters","contextValue","DEFAULT_TREE_VIEW_CONTEXT_VALUE","runPlugin","pluginResponse","getRootProps","push","otherHandlers","rootProps","role","tabIndex","ref","rootPropsGetter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA4DaA,MAAAA,cAAc,CAGzBC,aACkE;AAClE,QAAMC,UAAU,CAAC,GAAGC,YAAAA,wBAAwB,GAAGF,SAASC,OAAO;AAG/D,QAAME,SAASF,QAAQG,OAAO,CAACC,KAAKC,WAAW;AAC7C,QAAIA,OAAOC,sBAAsB;AACxBD,aAAAA,OAAOC,qBAAqBF,GAAG;AAAA,IACxC;AAEOA,WAAAA;AAAAA,KACNL,QAAQ;AAELQ,QAAAA,SAASC,kBAAAA,kBACbR,SACAE,MACF;AACA,QAAMO,cAAcC,iBAAMC,OACxB,CACF,CAAA;AACA,QAAMC,WAAWH,YAAYI;AACvBC,QAAAA,eAAeJ,iBAAMC,OAAO,IAAI;AACtC,QAAMI,gBAAgBC,MAAAA,WAAWF,cAAcf,SAASkB,OAAO;AAE/D,QAAM,CAACC,OAAOC,QAAQ,IAAIT,iBAAMU,SAAS,MAAM;AAC7C,UAAMC,OAAO,CAAA;AACbrB,YAAQsB,QAASjB,CAAW,WAAA;AAC1B,UAAIA,OAAOkB,iBAAiB;AAC1BC,eAAOC,OACLJ,MACAhB,OAAOkB,gBACLrB,MACF,CACF;AAAA,MACF;AAAA,IAAA,CACD;AAEMmB,WAAAA;AAAAA,EAAAA,CACR;AAED,QAAMK,mBAE2C,CAAA;AACjD,MAAIC,eACFC,iBAAAA;AAEIC,QAAAA,YAAYA,CAACxB,WAAgC;AACjD,UAAMyB,iBACJzB,OAAO;AAAA,MACLO;AAAAA,MACAV;AAAAA,MACAgB;AAAAA,MACAC;AAAAA,MACAF,SAASH;AAAAA,MACTP;AAAAA,IACD,CAAA,KAAK,CAAA;AAER,QAAIuB,eAAeC,cAAc;AACdC,uBAAAA,KAAKF,eAAeC,YAAY;AAAA,IACnD;AAEA,QAAID,eAAeH,cAAc;AAC/BA,qBAAeG,eAAeH;AAAAA,IAChC;AAAA,EAAA;AAGF3B,UAAQsB,QAAQO,SAAS;AAEzB,QAAME,eAAe,CACnBE,gBAAwB,OACrB;AACH,UAAMC,YAAsC;AAAA,MAC1CC,MAAM;AAAA,MACNC,UAAU;AAAA,MACV,GAAGH;AAAAA,MACHI,KAAKtB;AAAAA,IAAAA;AAGPW,qBAAiBJ,QAASgB,CAAoB,oBAAA;AAC5Cd,aAAOC,OAAOS,WAAWI,gBAAgBL,aAAa,CAAC;AAAA,IAAA,CACxD;AAEMC,WAAAA;AAAAA,EAAAA;AAGF,SAAA;AAAA,IAAEH;AAAAA,IAAcd,SAASF;AAAAA,IAAeY;AAAAA,EAAAA;AACjD;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const EventManager = require("../utils/EventManager.cjs");
|
|
5
|
+
const utils = require("./utils.cjs");
|
|
6
|
+
function _interopNamespace(e) {
|
|
7
|
+
if (e && e.__esModule)
|
|
8
|
+
return e;
|
|
9
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
10
|
+
if (e) {
|
|
11
|
+
for (const k in e) {
|
|
12
|
+
if (k !== "default") {
|
|
13
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: () => e[k]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
25
|
+
const isSyntheticEvent = (event) => {
|
|
26
|
+
return event.isPropagationStopped !== void 0;
|
|
27
|
+
};
|
|
28
|
+
const useTreeViewInstanceEvents = ({
|
|
29
|
+
instance
|
|
30
|
+
}) => {
|
|
31
|
+
const [eventManager] = React__namespace.useState(() => new EventManager.EventManager());
|
|
32
|
+
const publishEvent = React__namespace.useCallback((...args) => {
|
|
33
|
+
const [name, params, event = {}] = args;
|
|
34
|
+
event.defaultMuiPrevented = false;
|
|
35
|
+
if (isSyntheticEvent(event) && event.isPropagationStopped()) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
eventManager.emit(name, params, event);
|
|
39
|
+
}, [eventManager]);
|
|
40
|
+
const subscribeEvent = React__namespace.useCallback((event, handler) => {
|
|
41
|
+
eventManager.on(event, handler);
|
|
42
|
+
return () => {
|
|
43
|
+
eventManager.removeListener(event, handler);
|
|
44
|
+
};
|
|
45
|
+
}, [eventManager]);
|
|
46
|
+
utils.populateInstance(instance, {
|
|
47
|
+
$$publishEvent: publishEvent,
|
|
48
|
+
$$subscribeEvent: subscribeEvent
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
exports.useTreeViewInstanceEvents = useTreeViewInstanceEvents;
|
|
52
|
+
//# sourceMappingURL=useTreeViewInstanceEvents.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeViewInstanceEvents.cjs","sources":["../../../../../../src/components/TreeView/internals/hooks/useTreeViewInstanceEvents.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { EventManager } from \"../utils/EventManager\";\nimport type { TreeViewPlugin } from \"../types\";\nimport type { TreeViewEventListener } from \"../types/events\";\nimport { UseTreeViewInstanceEventsSignature } from \"./useTreeViewInstanceEvents.types\";\nimport { populateInstance } from \"./utils\";\n\nconst isSyntheticEvent = (event: any): event is React.SyntheticEvent => {\n return event.isPropagationStopped !== undefined;\n};\n\n/**\n * Plugin responsible for the registration of the nodes defined as JSX children of the TreeView.\n * When we will have both a SimpleTreeView using JSX children and a TreeView using a data prop,\n * this plugin will only be used by SimpleTreeView.\n */\nexport const useTreeViewInstanceEvents: TreeViewPlugin<\n UseTreeViewInstanceEventsSignature\n> = ({ instance }) => {\n const [eventManager] = React.useState(() => new EventManager());\n\n const publishEvent = React.useCallback(\n (...args: any[]) => {\n const [name, params, event = {}] = args;\n event.defaultMuiPrevented = false;\n\n if (isSyntheticEvent(event) && event.isPropagationStopped()) {\n return;\n }\n\n eventManager.emit(name, params, event);\n },\n [eventManager]\n );\n\n const subscribeEvent = React.useCallback(\n (event: string, handler: TreeViewEventListener<any>) => {\n eventManager.on(event, handler);\n return () => {\n eventManager.removeListener(event, handler);\n };\n },\n [eventManager]\n );\n\n populateInstance<UseTreeViewInstanceEventsSignature>(instance, {\n $$publishEvent: publishEvent,\n $$subscribeEvent: subscribeEvent,\n });\n};\n"],"names":["isSyntheticEvent","event","isPropagationStopped","undefined","useTreeViewInstanceEvents","instance","eventManager","React","useState","EventManager","publishEvent","useCallback","args","name","params","defaultMuiPrevented","emit","subscribeEvent","handler","on","removeListener","populateInstance","$$publishEvent","$$subscribeEvent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAMA,mBAAmBA,CAACC,UAA8C;AACtE,SAAOA,MAAMC,yBAAyBC;AACxC;AAOO,MAAMC,4BAETA,CAAC;AAAA,EAAEC;AAAS,MAAM;AACd,QAAA,CAACC,YAAY,IAAIC,iBAAMC,SAAS,MAAM,IAAIC,2BAAc;AAE9D,QAAMC,eAAeH,iBAAMI,YACzB,IAAIC,SAAgB;AAClB,UAAM,CAACC,MAAMC,QAAQb,QAAQ,CAAE,CAAA,IAAIW;AACnCX,UAAMc,sBAAsB;AAE5B,QAAIf,iBAAiBC,KAAK,KAAKA,MAAMC,wBAAwB;AAC3D;AAAA,IACF;AAEac,iBAAAA,KAAKH,MAAMC,QAAQb,KAAK;AAAA,EAAA,GAEvC,CAACK,YAAY,CACf;AAEA,QAAMW,iBAAiBV,iBAAMI,YAC3B,CAACV,OAAeiB,YAAwC;AACzCC,iBAAAA,GAAGlB,OAAOiB,OAAO;AAC9B,WAAO,MAAM;AACEE,mBAAAA,eAAenB,OAAOiB,OAAO;AAAA,IAAA;AAAA,EAC5C,GAEF,CAACZ,YAAY,CACf;AAEAe,QAAAA,iBAAqDhB,UAAU;AAAA,IAC7DiB,gBAAgBZ;AAAAA,IAChBa,kBAAkBN;AAAAA,EAAAA,CACnB;AACH;;"}
|