@fluentui/react-tree 9.2.1 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.json +258 -1
  2. package/CHANGELOG.md +67 -2
  3. package/dist/index.d.ts +49 -20
  4. package/lib/components/FlatTree/FlatTree.types.js.map +1 -1
  5. package/lib/components/FlatTree/renderFlatTree.js.map +1 -1
  6. package/lib/components/FlatTree/useFlatTree.js +71 -2
  7. package/lib/components/FlatTree/useFlatTree.js.map +1 -1
  8. package/lib/components/FlatTree/useFlatTreeContextValues.js +20 -2
  9. package/lib/components/FlatTree/useFlatTreeContextValues.js.map +1 -1
  10. package/lib/components/FlatTree/useFlatTreeNavigation.js +28 -14
  11. package/lib/components/FlatTree/useFlatTreeNavigation.js.map +1 -1
  12. package/lib/components/FlatTree/useHeadlessFlatTree.js +16 -16
  13. package/lib/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
  14. package/lib/components/Tree/Tree.types.js.map +1 -1
  15. package/lib/components/Tree/renderTree.js +1 -1
  16. package/lib/components/Tree/renderTree.js.map +1 -1
  17. package/lib/components/Tree/useTree.js +11 -14
  18. package/lib/components/Tree/useTree.js.map +1 -1
  19. package/lib/components/Tree/useTreeContextValues.js +29 -15
  20. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  21. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  22. package/lib/components/TreeItem/useTreeItem.js +52 -26
  23. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  24. package/lib/components/TreeItemLayout/useTreeItemLayout.js +2 -3
  25. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  26. package/lib/components/TreeProvider.js +21 -0
  27. package/lib/components/TreeProvider.js.map +1 -0
  28. package/lib/contexts/index.js +1 -0
  29. package/lib/contexts/index.js.map +1 -1
  30. package/lib/contexts/subtreeContext.js +14 -0
  31. package/lib/contexts/subtreeContext.js.map +1 -0
  32. package/lib/contexts/treeContext.js +9 -5
  33. package/lib/contexts/treeContext.js.map +1 -1
  34. package/lib/hooks/useRootTree.js +25 -78
  35. package/lib/hooks/useRootTree.js.map +1 -1
  36. package/lib/hooks/useSubtree.js +2 -14
  37. package/lib/hooks/useSubtree.js.map +1 -1
  38. package/lib/index.js +2 -1
  39. package/lib/index.js.map +1 -1
  40. package/lib/utils/createHTMLElementWalker.js +2 -3
  41. package/lib/utils/createHTMLElementWalker.js.map +1 -1
  42. package/lib/utils/createHeadlessTree.js +5 -3
  43. package/lib/utils/createHeadlessTree.js.map +1 -1
  44. package/lib/utils/flattenTree.js +1 -2
  45. package/lib/utils/flattenTree.js.map +1 -1
  46. package/lib/utils/normalizeOpenItems.js +1 -2
  47. package/lib/utils/normalizeOpenItems.js.map +1 -1
  48. package/lib-commonjs/components/FlatTree/useFlatTree.js +71 -2
  49. package/lib-commonjs/components/FlatTree/useFlatTree.js.map +1 -1
  50. package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js +20 -2
  51. package/lib-commonjs/components/FlatTree/useFlatTreeContextValues.js.map +1 -1
  52. package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js +27 -13
  53. package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js.map +1 -1
  54. package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js +16 -16
  55. package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js.map +1 -1
  56. package/lib-commonjs/components/Tree/renderTree.js +2 -2
  57. package/lib-commonjs/components/Tree/renderTree.js.map +1 -1
  58. package/lib-commonjs/components/Tree/useTree.js +11 -14
  59. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  60. package/lib-commonjs/components/Tree/useTreeContextValues.js +30 -15
  61. package/lib-commonjs/components/Tree/useTreeContextValues.js.map +1 -1
  62. package/lib-commonjs/components/TreeItem/useTreeItem.js +55 -29
  63. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  64. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +2 -3
  65. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  66. package/lib-commonjs/components/TreeProvider.js +32 -0
  67. package/lib-commonjs/components/TreeProvider.js.map +1 -0
  68. package/lib-commonjs/contexts/index.js +1 -0
  69. package/lib-commonjs/contexts/index.js.map +1 -1
  70. package/lib-commonjs/contexts/subtreeContext.js +31 -0
  71. package/lib-commonjs/contexts/subtreeContext.js.map +1 -0
  72. package/lib-commonjs/contexts/treeContext.js +6 -7
  73. package/lib-commonjs/contexts/treeContext.js.map +1 -1
  74. package/lib-commonjs/hooks/useRootTree.js +25 -78
  75. package/lib-commonjs/hooks/useRootTree.js.map +1 -1
  76. package/lib-commonjs/hooks/useSubtree.js +2 -14
  77. package/lib-commonjs/hooks/useSubtree.js.map +1 -1
  78. package/lib-commonjs/index.js +7 -3
  79. package/lib-commonjs/index.js.map +1 -1
  80. package/lib-commonjs/utils/createHTMLElementWalker.js +2 -3
  81. package/lib-commonjs/utils/createHTMLElementWalker.js.map +1 -1
  82. package/lib-commonjs/utils/createHeadlessTree.js +5 -3
  83. package/lib-commonjs/utils/createHeadlessTree.js.map +1 -1
  84. package/lib-commonjs/utils/flattenTree.js +1 -2
  85. package/lib-commonjs/utils/flattenTree.js.map +1 -1
  86. package/lib-commonjs/utils/normalizeOpenItems.js +1 -2
  87. package/lib-commonjs/utils/normalizeOpenItems.js.map +1 -1
  88. package/package.json +15 -15
@@ -26,7 +26,7 @@ function useHeadlessFlatTree_unstable(props, options = {}) {
26
26
  ]);
27
27
  const [openItems, setOpenItems] = (0, _useControllableOpenItems.useControllableOpenItems)(options);
28
28
  const [checkedItems, setCheckedItems] = (0, _useFlatControllableCheckedItems.useFlatControllableCheckedItems)(options, headlessTree);
29
- const { initialize, navigate } = (0, _useFlatTreeNavigation.useFlatTreeNavigation)(headlessTree);
29
+ const { initialize, navigate } = (0, _useFlatTreeNavigation.useFlatTreeNavigation)();
30
30
  const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
31
31
  const walkerRef = _react.useRef();
32
32
  const initializeWalker = _react.useCallback((root)=>{
@@ -40,30 +40,23 @@ function useHeadlessFlatTree_unstable(props, options = {}) {
40
40
  ]);
41
41
  const treeRef = _react.useRef(null);
42
42
  const handleOpenChange = (0, _reactutilities.useEventCallback)((event, data)=>{
43
- var _options_onOpenChange, _options;
43
+ var _options_onOpenChange;
44
44
  const nextOpenItems = (0, _useControllableOpenItems.createNextOpenItems)(data, openItems);
45
- (_options_onOpenChange = (_options = options).onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(_options, event, {
45
+ (_options_onOpenChange = options.onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(options, event, {
46
46
  ...data,
47
47
  openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()
48
48
  });
49
49
  setOpenItems(nextOpenItems);
50
50
  });
51
51
  const handleCheckedChange = (0, _reactutilities.useEventCallback)((event, data)=>{
52
- var _options_onCheckedChange, _options;
52
+ var _options_onCheckedChange;
53
53
  const nextCheckedItems = (0, _useFlatControllableCheckedItems.createNextFlatCheckedItems)(data, checkedItems, headlessTree);
54
- (_options_onCheckedChange = (_options = options).onCheckedChange) === null || _options_onCheckedChange === void 0 ? void 0 : _options_onCheckedChange.call(_options, event, {
54
+ (_options_onCheckedChange = options.onCheckedChange) === null || _options_onCheckedChange === void 0 ? void 0 : _options_onCheckedChange.call(options, event, {
55
55
  ...data,
56
56
  checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()
57
57
  });
58
58
  setCheckedItems(nextCheckedItems);
59
59
  });
60
- const handleNavigation = (0, _reactutilities.useEventCallback)((event, data)=>{
61
- var _options_onNavigation, _options;
62
- (_options_onNavigation = (_options = options).onNavigation) === null || _options_onNavigation === void 0 ? void 0 : _options_onNavigation.call(_options, event, data);
63
- if (walkerRef.current) {
64
- navigate(data, walkerRef.current);
65
- }
66
- });
67
60
  const getNextNavigableItem = (0, _reactutilities.useEventCallback)((visibleItems, data)=>{
68
61
  const item = headlessTree.get(data.value);
69
62
  if (item) {
@@ -90,17 +83,22 @@ function useHeadlessFlatTree_unstable(props, options = {}) {
90
83
  return (_treeRef_current = treeRef.current) === null || _treeRef_current === void 0 ? void 0 : _treeRef_current.querySelector(`[${_getTreeItemValueFromElement.dataTreeItemValueAttrName}="${item.value}"]`);
91
84
  }, []);
92
85
  const ref = (0, _reactutilities.useMergedRefs)(treeRef, initializeWalker);
93
- const getTreeProps = _react.useCallback(()=>({
86
+ const getTreeProps = _react.useCallback(()=>{
87
+ var _options_onNavigation;
88
+ return {
94
89
  ref,
95
90
  openItems,
96
91
  selectionMode: options.selectionMode,
97
92
  checkedItems,
98
93
  onOpenChange: handleOpenChange,
99
94
  onCheckedChange: handleCheckedChange,
100
- onNavigation: handleNavigation
101
- }), [
95
+ onNavigation: (_options_onNavigation = options.onNavigation) !== null && _options_onNavigation !== void 0 ? _options_onNavigation : noop
96
+ };
97
+ }, [
102
98
  openItems,
103
- checkedItems
99
+ checkedItems,
100
+ options.selectionMode,
101
+ options.onNavigation
104
102
  ]);
105
103
  const items = _react.useCallback(()=>headlessTree.visibleItems(openItems), [
106
104
  openItems,
@@ -124,3 +122,5 @@ function useHeadlessFlatTree_unstable(props, options = {}) {
124
122
  items
125
123
  ]);
126
124
  }
125
+ function noop() {
126
+ /* noop */ }
@@ -1 +1 @@
1
- {"version":3,"sources":["useHeadlessFlatTree.js"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createHeadlessTree } from '../../utils/createHeadlessTree';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\nimport { createNextFlatCheckedItems, useFlatControllableCheckedItems } from './useFlatControllableCheckedItems';\nimport { createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\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 props - a list of tree items\n * @param options - in case control over the internal openItems is required\n */ export function useHeadlessFlatTree_unstable(props, options = {}) {\n const headlessTree = React.useMemo(()=>createHeadlessTree(props), [\n props\n ]);\n const [openItems, setOpenItems] = useControllableOpenItems(options);\n const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options, headlessTree);\n const { initialize, navigate } = useFlatTreeNavigation(headlessTree);\n const { targetDocument } = useFluent_unstable();\n const walkerRef = React.useRef();\n const initializeWalker = React.useCallback((root)=>{\n if (root && targetDocument) {\n walkerRef.current = createHTMLElementWalker(root, targetDocument, treeItemFilter);\n initialize(walkerRef.current);\n }\n }, [\n initialize,\n targetDocument\n ]);\n const treeRef = React.useRef(null);\n const handleOpenChange = useEventCallback((event, data)=>{\n var _options_onOpenChange, _options;\n const nextOpenItems = createNextOpenItems(data, openItems);\n (_options_onOpenChange = (_options = options).onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(_options, event, {\n ...data,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()\n });\n setOpenItems(nextOpenItems);\n });\n const handleCheckedChange = useEventCallback((event, data)=>{\n var _options_onCheckedChange, _options;\n const nextCheckedItems = createNextFlatCheckedItems(data, checkedItems, headlessTree);\n (_options_onCheckedChange = (_options = options).onCheckedChange) === null || _options_onCheckedChange === void 0 ? void 0 : _options_onCheckedChange.call(_options, event, {\n ...data,\n checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()\n });\n setCheckedItems(nextCheckedItems);\n });\n const handleNavigation = useEventCallback((event, data)=>{\n var _options_onNavigation, _options;\n (_options_onNavigation = (_options = options).onNavigation) === null || _options_onNavigation === void 0 ? void 0 : _options_onNavigation.call(_options, event, data);\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n });\n const getNextNavigableItem = useEventCallback((visibleItems, data)=>{\n const item = headlessTree.get(data.value);\n if (item) {\n switch(data.type){\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return headlessTree.get(item.parentValue);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n });\n const getElementFromItem = React.useCallback((item)=>{\n var _treeRef_current;\n return (_treeRef_current = treeRef.current) === null || _treeRef_current === void 0 ? void 0 : _treeRef_current.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`);\n }, []);\n const ref = useMergedRefs(treeRef, initializeWalker);\n const getTreeProps = React.useCallback(()=>({\n ref,\n openItems,\n selectionMode: options.selectionMode,\n checkedItems,\n onOpenChange: handleOpenChange,\n onCheckedChange: handleCheckedChange,\n onNavigation: handleNavigation\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n openItems,\n checkedItems\n ]);\n const items = React.useCallback(()=>headlessTree.visibleItems(openItems), [\n openItems,\n headlessTree\n ]);\n return React.useMemo(()=>({\n navigate: (data)=>{\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items\n }), [\n navigate,\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items\n ]);\n}\n"],"names":["useHeadlessFlatTree_unstable","props","options","headlessTree","React","useMemo","createHeadlessTree","openItems","setOpenItems","useControllableOpenItems","checkedItems","setCheckedItems","useFlatControllableCheckedItems","initialize","navigate","useFlatTreeNavigation","targetDocument","useFluent_unstable","walkerRef","useRef","initializeWalker","useCallback","root","current","createHTMLElementWalker","treeItemFilter","treeRef","handleOpenChange","useEventCallback","event","data","_options_onOpenChange","_options","nextOpenItems","createNextOpenItems","onOpenChange","call","dangerouslyGetInternalSet_unstable","handleCheckedChange","_options_onCheckedChange","nextCheckedItems","createNextFlatCheckedItems","onCheckedChange","dangerouslyGetInternalMap_unstable","handleNavigation","_options_onNavigation","onNavigation","getNextNavigableItem","visibleItems","item","get","value","type","treeDataTypes","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","_treeRef_current","querySelector","dataTreeItemValueAttrName","ref","useMergedRefs","getTreeProps","selectionMode","items"],"mappings":";;;;+BAsBoBA;;;eAAAA;;;;gCAtB4B;iEACzB;oCACY;wBACL;uCACQ;0CACwB;6CACpB;iDACkC;yCACpC;gCACT;qCACI;AAYxB,SAASA,6BAA6BC,KAAK,EAAEC,UAAU,CAAC,CAAC;IAChE,MAAMC,eAAeC,OAAMC,OAAO,CAAC,IAAIC,IAAAA,sCAAkB,EAACL,QAAQ;QAC9DA;KACH;IACD,MAAM,CAACM,WAAWC,aAAa,GAAGC,IAAAA,kDAAwB,EAACP;IAC3D,MAAM,CAACQ,cAAcC,gBAAgB,GAAGC,IAAAA,gEAA+B,EAACV,SAASC;IACjF,MAAM,EAAEU,UAAU,EAAEC,QAAQ,EAAE,GAAGC,IAAAA,4CAAqB,EAACZ;IACvD,MAAM,EAAEa,cAAc,EAAE,GAAGC,IAAAA,uCAAkB;IAC7C,MAAMC,YAAYd,OAAMe,MAAM;IAC9B,MAAMC,mBAAmBhB,OAAMiB,WAAW,CAAC,CAACC;QACxC,IAAIA,QAAQN,gBAAgB;YACxBE,UAAUK,OAAO,GAAGC,IAAAA,gDAAuB,EAACF,MAAMN,gBAAgBS,8BAAc;YAChFZ,WAAWK,UAAUK,OAAO;QAChC;IACJ,GAAG;QACCV;QACAG;KACH;IACD,MAAMU,UAAUtB,OAAMe,MAAM,CAAC;IAC7B,MAAMQ,mBAAmBC,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIC,uBAAuBC;QAC3B,MAAMC,gBAAgBC,IAAAA,6CAAmB,EAACJ,MAAMvB;QAC/CwB,CAAAA,wBAAwB,AAACC,CAAAA,WAAW9B,OAAM,EAAGiC,YAAY,AAAD,MAAO,QAAQJ,0BAA0B,KAAK,IAAI,KAAK,IAAIA,sBAAsBK,IAAI,CAACJ,UAAUH,OAAO;YAC5J,GAAGC,IAAI;YACPvB,WAAW0B,cAAcI,kCAAkC;QAC/D;QACA7B,aAAayB;IACjB;IACA,MAAMK,sBAAsBV,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QACjD,IAAIS,0BAA0BP;QAC9B,MAAMQ,mBAAmBC,IAAAA,2DAA0B,EAACX,MAAMpB,cAAcP;QACvEoC,CAAAA,2BAA2B,AAACP,CAAAA,WAAW9B,OAAM,EAAGwC,eAAe,AAAD,MAAO,QAAQH,6BAA6B,KAAK,IAAI,KAAK,IAAIA,yBAAyBH,IAAI,CAACJ,UAAUH,OAAO;YACxK,GAAGC,IAAI;YACPpB,cAAc8B,iBAAiBG,kCAAkC;QACrE;QACAhC,gBAAgB6B;IACpB;IACA,MAAMI,mBAAmBhB,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIe,uBAAuBb;QAC1Ba,CAAAA,wBAAwB,AAACb,CAAAA,WAAW9B,OAAM,EAAG4C,YAAY,AAAD,MAAO,QAAQD,0BAA0B,KAAK,IAAI,KAAK,IAAIA,sBAAsBT,IAAI,CAACJ,UAAUH,OAAOC;QAChK,IAAIZ,UAAUK,OAAO,EAAE;YACnBT,SAASgB,MAAMZ,UAAUK,OAAO;QACpC;IACJ;IACA,MAAMwB,uBAAuBnB,IAAAA,gCAAgB,EAAC,CAACoB,cAAclB;QACzD,MAAMmB,OAAO9C,aAAa+C,GAAG,CAACpB,KAAKqB,KAAK;QACxC,IAAIF,MAAM;YACN,OAAOnB,KAAKsB,IAAI;gBACZ,KAAKC,qBAAa,CAACC,SAAS;oBACxB,OAAOL;gBACX,KAAKI,qBAAa,CAACE,SAAS;oBACxB,OAAOpD,aAAa+C,GAAG,CAACD,KAAKO,WAAW;gBAC5C,KAAKH,qBAAa,CAACI,UAAU;oBACzB,OAAOT,YAAY,CAACC,KAAKS,KAAK,GAAG,EAAE;gBACvC,KAAKL,qBAAa,CAACM,GAAG;oBAClB,OAAOX,YAAY,CAACA,aAAaY,MAAM,GAAG,EAAE;gBAChD,KAAKP,qBAAa,CAACQ,IAAI;oBACnB,OAAOb,YAAY,CAAC,EAAE;gBAC1B,KAAKK,qBAAa,CAACS,SAAS;oBACxB,OAAOd,YAAY,CAACC,KAAKS,KAAK,GAAG,EAAE;gBACvC,KAAKL,qBAAa,CAACU,OAAO;oBACtB,OAAOf,YAAY,CAACC,KAAKS,KAAK,GAAG,EAAE;YAC3C;QACJ;IACJ;IACA,MAAMM,qBAAqB5D,OAAMiB,WAAW,CAAC,CAAC4B;QAC1C,IAAIgB;QACJ,OAAO,AAACA,CAAAA,mBAAmBvC,QAAQH,OAAO,AAAD,MAAO,QAAQ0C,qBAAqB,KAAK,IAAI,KAAK,IAAIA,iBAAiBC,aAAa,CAAC,CAAC,CAAC,EAAEC,sDAAyB,CAAC,EAAE,EAAElB,KAAKE,KAAK,CAAC,EAAE,CAAC;IAClL,GAAG,EAAE;IACL,MAAMiB,MAAMC,IAAAA,6BAAa,EAAC3C,SAASN;IACnC,MAAMkD,eAAelE,OAAMiB,WAAW,CAAC,IAAK,CAAA;YACpC+C;YACA7D;YACAgE,eAAerE,QAAQqE,aAAa;YACpC7D;YACAyB,cAAcR;YACde,iBAAiBJ;YACjBQ,cAAcF;QAClB,CAAA,GACJ;QACIrC;QACAG;KACH;IACD,MAAM8D,QAAQpE,OAAMiB,WAAW,CAAC,IAAIlB,aAAa6C,YAAY,CAACzC,YAAY;QACtEA;QACAJ;KACH;IACD,OAAOC,OAAMC,OAAO,CAAC,IAAK,CAAA;YAClBS,UAAU,CAACgB;gBACP,IAAIZ,UAAUK,OAAO,EAAE;oBACnBT,SAASgB,MAAMZ,UAAUK,OAAO;gBACpC;YACJ;YACA+C;YACAvB;YACAiB;YACAQ;QACJ,CAAA,GAAI;QACJ1D;QACAwD;QACAvB;QACAiB;QACAQ;KACH;AACL"}
1
+ {"version":3,"sources":["useHeadlessFlatTree.js"],"sourcesContent":["import { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { createHeadlessTree } from '../../utils/createHeadlessTree';\nimport { treeDataTypes } from '../../utils/tokens';\nimport { useFlatTreeNavigation } from './useFlatTreeNavigation';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport { dataTreeItemValueAttrName } from '../../utils/getTreeItemValueFromElement';\nimport { createNextFlatCheckedItems, useFlatControllableCheckedItems } from './useFlatControllableCheckedItems';\nimport { createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\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 props - a list of tree items\n * @param options - in case control over the internal openItems is required\n */ export function useHeadlessFlatTree_unstable(props, options = {}) {\n const headlessTree = React.useMemo(()=>createHeadlessTree(props), [\n props\n ]);\n const [openItems, setOpenItems] = useControllableOpenItems(options);\n const [checkedItems, setCheckedItems] = useFlatControllableCheckedItems(options, headlessTree);\n const { initialize, navigate } = useFlatTreeNavigation();\n const { targetDocument } = useFluent_unstable();\n const walkerRef = React.useRef();\n const initializeWalker = React.useCallback((root)=>{\n if (root && targetDocument) {\n walkerRef.current = createHTMLElementWalker(root, targetDocument, treeItemFilter);\n initialize(walkerRef.current);\n }\n }, [\n initialize,\n targetDocument\n ]);\n const treeRef = React.useRef(null);\n const handleOpenChange = useEventCallback((event, data)=>{\n var _options_onOpenChange;\n const nextOpenItems = createNextOpenItems(data, openItems);\n (_options_onOpenChange = options.onOpenChange) === null || _options_onOpenChange === void 0 ? void 0 : _options_onOpenChange.call(options, event, {\n ...data,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()\n });\n setOpenItems(nextOpenItems);\n });\n const handleCheckedChange = useEventCallback((event, data)=>{\n var _options_onCheckedChange;\n const nextCheckedItems = createNextFlatCheckedItems(data, checkedItems, headlessTree);\n (_options_onCheckedChange = options.onCheckedChange) === null || _options_onCheckedChange === void 0 ? void 0 : _options_onCheckedChange.call(options, event, {\n ...data,\n checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()\n });\n setCheckedItems(nextCheckedItems);\n });\n const getNextNavigableItem = useEventCallback((visibleItems, data)=>{\n const item = headlessTree.get(data.value);\n if (item) {\n switch(data.type){\n case treeDataTypes.TypeAhead:\n return item;\n case treeDataTypes.ArrowLeft:\n return headlessTree.get(item.parentValue);\n case treeDataTypes.ArrowRight:\n return visibleItems[item.index + 1];\n case treeDataTypes.End:\n return visibleItems[visibleItems.length - 1];\n case treeDataTypes.Home:\n return visibleItems[0];\n case treeDataTypes.ArrowDown:\n return visibleItems[item.index + 1];\n case treeDataTypes.ArrowUp:\n return visibleItems[item.index - 1];\n }\n }\n });\n const getElementFromItem = React.useCallback((item)=>{\n var _treeRef_current;\n return (_treeRef_current = treeRef.current) === null || _treeRef_current === void 0 ? void 0 : _treeRef_current.querySelector(`[${dataTreeItemValueAttrName}=\"${item.value}\"]`);\n }, []);\n const ref = useMergedRefs(treeRef, initializeWalker);\n const getTreeProps = React.useCallback(()=>{\n var _options_onNavigation;\n return {\n ref,\n openItems,\n selectionMode: options.selectionMode,\n checkedItems,\n onOpenChange: handleOpenChange,\n onCheckedChange: handleCheckedChange,\n onNavigation: (_options_onNavigation = options.onNavigation) !== null && _options_onNavigation !== void 0 ? _options_onNavigation : noop\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n openItems,\n checkedItems,\n options.selectionMode,\n options.onNavigation\n ]);\n const items = React.useCallback(()=>headlessTree.visibleItems(openItems), [\n openItems,\n headlessTree\n ]);\n return React.useMemo(()=>({\n navigate: (data)=>{\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n },\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items\n }), [\n navigate,\n getTreeProps,\n getNextNavigableItem,\n getElementFromItem,\n items\n ]);\n}\nfunction noop() {\n/* noop */ }\n"],"names":["useHeadlessFlatTree_unstable","props","options","headlessTree","React","useMemo","createHeadlessTree","openItems","setOpenItems","useControllableOpenItems","checkedItems","setCheckedItems","useFlatControllableCheckedItems","initialize","navigate","useFlatTreeNavigation","targetDocument","useFluent_unstable","walkerRef","useRef","initializeWalker","useCallback","root","current","createHTMLElementWalker","treeItemFilter","treeRef","handleOpenChange","useEventCallback","event","data","_options_onOpenChange","nextOpenItems","createNextOpenItems","onOpenChange","call","dangerouslyGetInternalSet_unstable","handleCheckedChange","_options_onCheckedChange","nextCheckedItems","createNextFlatCheckedItems","onCheckedChange","dangerouslyGetInternalMap_unstable","getNextNavigableItem","visibleItems","item","get","value","type","treeDataTypes","TypeAhead","ArrowLeft","parentValue","ArrowRight","index","End","length","Home","ArrowDown","ArrowUp","getElementFromItem","_treeRef_current","querySelector","dataTreeItemValueAttrName","ref","useMergedRefs","getTreeProps","_options_onNavigation","selectionMode","onNavigation","noop","items"],"mappings":"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"}
@@ -10,10 +10,10 @@ Object.defineProperty(exports, "renderTree_unstable", {
10
10
  });
11
11
  const _jsxruntime = require("@fluentui/react-jsx-runtime/jsx-runtime");
12
12
  const _reactutilities = require("@fluentui/react-utilities");
13
- const _contexts = require("../../contexts");
13
+ const _TreeProvider = require("../TreeProvider");
14
14
  const renderTree_unstable = (state, contextValues)=>{
15
15
  (0, _reactutilities.assertSlots)(state);
16
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_contexts.TreeProvider, {
16
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_TreeProvider.TreeProvider, {
17
17
  value: contextValues.tree,
18
18
  children: state.open && /*#__PURE__*/ (0, _jsxruntime.jsx)(state.root, {
19
19
  children: state.root.children
@@ -1 +1 @@
1
- {"version":3,"sources":["renderTree.js"],"sourcesContent":[" import { jsx as _jsx } from \"@fluentui/react-jsx-runtime/jsx-runtime\";\nimport { assertSlots } from '@fluentui/react-utilities';\nimport { TreeProvider } from '../../contexts';\nexport const renderTree_unstable = (state, contextValues)=>{\n assertSlots(state);\n return /*#__PURE__*/ _jsx(TreeProvider, {\n value: contextValues.tree,\n children: state.open && /*#__PURE__*/ _jsx(state.root, {\n children: state.root.children\n })\n });\n};\n"],"names":["renderTree_unstable","state","contextValues","assertSlots","_jsx","TreeProvider","value","tree","children","open","root"],"mappings":";;;;+BAGaA;;;eAAAA;;;4BAHiB;gCACF;0BACC;AACtB,MAAMA,sBAAsB,CAACC,OAAOC;IACvCC,IAAAA,2BAAW,EAACF;IACZ,OAAO,WAAW,GAAGG,IAAAA,eAAI,EAACC,sBAAY,EAAE;QACpCC,OAAOJ,cAAcK,IAAI;QACzBC,UAAUP,MAAMQ,IAAI,IAAI,WAAW,GAAGL,IAAAA,eAAI,EAACH,MAAMS,IAAI,EAAE;YACnDF,UAAUP,MAAMS,IAAI,CAACF,QAAQ;QACjC;IACJ;AACJ"}
1
+ {"version":3,"sources":["renderTree.js"],"sourcesContent":[" import { jsx as _jsx } from \"@fluentui/react-jsx-runtime/jsx-runtime\";\nimport { assertSlots } from '@fluentui/react-utilities';\nimport { TreeProvider } from '../TreeProvider';\nexport const renderTree_unstable = (state, contextValues)=>{\n assertSlots(state);\n return /*#__PURE__*/ _jsx(TreeProvider, {\n value: contextValues.tree,\n children: state.open && /*#__PURE__*/ _jsx(state.root, {\n children: state.root.children\n })\n });\n};\n"],"names":["renderTree_unstable","state","contextValues","assertSlots","_jsx","TreeProvider","value","tree","children","open","root"],"mappings":";;;;+BAGaA;;;eAAAA;;;4BAHiB;gCACF;8BACC;AACtB,MAAMA,sBAAsB,CAACC,OAAOC;IACvCC,IAAAA,2BAAW,EAACF;IACZ,OAAO,WAAW,GAAGG,IAAAA,eAAI,EAACC,0BAAY,EAAE;QACpCC,OAAOJ,cAAcK,IAAI;QACzBC,UAAUP,MAAMQ,IAAI,IAAI,WAAW,GAAGL,IAAAA,eAAI,EAACH,MAAMS,IAAI,EAAE;YACnDF,UAAUP,MAAMS,IAAI,CAACF,QAAQ;QACjC;IACJ;AACJ"}
@@ -13,7 +13,7 @@ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
13
13
  const _reactutilities = require("@fluentui/react-utilities");
14
14
  const _useControllableOpenItems = require("../../hooks/useControllableOpenItems");
15
15
  const _useNestedControllableCheckedItems = require("./useNestedControllableCheckedItems");
16
- const _treeContext = require("../../contexts/treeContext");
16
+ const _subtreeContext = require("../../contexts/subtreeContext");
17
17
  const _useRootTree = require("../../hooks/useRootTree");
18
18
  const _useSubtree = require("../../hooks/useSubtree");
19
19
  const _createHTMLElementWalker = require("../../utils/createHTMLElementWalker");
@@ -21,14 +21,11 @@ const _treeItemFilter = require("../../utils/treeItemFilter");
21
21
  const _useTreeNavigation = require("./useTreeNavigation");
22
22
  const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
23
23
  const useTree_unstable = (props, ref)=>{
24
- const isSubtree = (0, _treeContext.useTreeContext_unstable)((ctx)=>ctx.level > 0);
25
- // as isSubTree is static, this doesn't break rule of hooks
24
+ const { level } = (0, _subtreeContext.useSubtreeContext_unstable)();
25
+ // as level is static, this doesn't break rule of hooks
26
26
  // and if this becomes an issue later on, this can be easily converted
27
27
  // eslint-disable-next-line react-hooks/rules-of-hooks
28
- return isSubtree ? {
29
- ...(0, _useSubtree.useSubtree)(props, ref),
30
- treeType: 'nested'
31
- } : useNestedRootTree(props, ref);
28
+ return level > 0 ? (0, _useSubtree.useSubtree)(props, ref) : useNestedRootTree(props, ref);
32
29
  };
33
30
  function useNestedRootTree(props, ref) {
34
31
  const [openItems, setOpenItems] = (0, _useControllableOpenItems.useControllableOpenItems)(props);
@@ -46,9 +43,9 @@ function useNestedRootTree(props, ref) {
46
43
  targetDocument
47
44
  ]);
48
45
  const handleOpenChange = (0, _reactutilities.useEventCallback)((event, data)=>{
49
- var _props_onOpenChange, _props;
46
+ var _props_onOpenChange;
50
47
  const nextOpenItems = (0, _useControllableOpenItems.createNextOpenItems)(data, openItems);
51
- (_props_onOpenChange = (_props = props).onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(_props, event, {
48
+ (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, event, {
52
49
  ...data,
53
50
  openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()
54
51
  });
@@ -56,18 +53,18 @@ function useNestedRootTree(props, ref) {
56
53
  });
57
54
  const handleCheckedChange = (0, _reactutilities.useEventCallback)((event, data)=>{
58
55
  if (walkerRef.current) {
59
- var _props_onCheckedChange, _props;
56
+ var _props_onCheckedChange;
60
57
  const nextCheckedItems = (0, _useNestedControllableCheckedItems.createNextNestedCheckedItems)(data, checkedItems);
61
- (_props_onCheckedChange = (_props = props).onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(_props, event, {
58
+ (_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, event, {
62
59
  ...data,
63
60
  checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()
64
61
  });
65
62
  }
66
63
  });
67
64
  const handleNavigation = (0, _reactutilities.useEventCallback)((event, data)=>{
68
- var _props_onNavigation, _props;
69
- (_props_onNavigation = (_props = props).onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(_props, event, data);
70
- if (walkerRef.current) {
65
+ var _props_onNavigation;
66
+ (_props_onNavigation = props.onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(props, event, data);
67
+ if (walkerRef.current && !event.isDefaultPrevented()) {
71
68
  navigate(data, walkerRef.current);
72
69
  }
73
70
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["useTree.js"],"sourcesContent":["import * as React from 'react';\nimport { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport { createNextNestedCheckedItems, useNestedCheckedItems } from './useNestedControllableCheckedItems';\nimport { useTreeContext_unstable } from '../../contexts/treeContext';\nimport { useRootTree } from '../../hooks/useRootTree';\nimport { useSubtree } from '../../hooks/useSubtree';\nimport { createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useTreeNavigation } from './useTreeNavigation';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nexport const useTree_unstable = (props, ref)=>{\n const isSubtree = useTreeContext_unstable((ctx)=>ctx.level > 0);\n // as isSubTree is static, this doesn't break rule of hooks\n // and if this becomes an issue later on, this can be easily converted\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isSubtree ? {\n ...useSubtree(props, ref),\n treeType: 'nested'\n } : useNestedRootTree(props, ref);\n};\nfunction useNestedRootTree(props, ref) {\n const [openItems, setOpenItems] = useControllableOpenItems(props);\n const checkedItems = useNestedCheckedItems(props);\n const { navigate, initialize } = useTreeNavigation();\n const walkerRef = React.useRef();\n const { targetDocument } = useFluent_unstable();\n const initializeWalker = React.useCallback((root)=>{\n if (root && targetDocument) {\n walkerRef.current = createHTMLElementWalker(root, targetDocument, treeItemFilter);\n initialize(walkerRef.current);\n }\n }, [\n initialize,\n targetDocument\n ]);\n const handleOpenChange = useEventCallback((event, data)=>{\n var _props_onOpenChange, _props;\n const nextOpenItems = createNextOpenItems(data, openItems);\n (_props_onOpenChange = (_props = props).onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(_props, event, {\n ...data,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()\n });\n setOpenItems(nextOpenItems);\n });\n const handleCheckedChange = useEventCallback((event, data)=>{\n if (walkerRef.current) {\n var _props_onCheckedChange, _props;\n const nextCheckedItems = createNextNestedCheckedItems(data, checkedItems);\n (_props_onCheckedChange = (_props = props).onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(_props, event, {\n ...data,\n checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()\n });\n }\n });\n const handleNavigation = useEventCallback((event, data)=>{\n var _props_onNavigation, _props;\n (_props_onNavigation = (_props = props).onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(_props, event, data);\n if (walkerRef.current) {\n navigate(data, walkerRef.current);\n }\n });\n return {\n treeType: 'nested',\n ...useRootTree({\n ...props,\n openItems,\n checkedItems,\n onOpenChange: handleOpenChange,\n onNavigation: handleNavigation,\n onCheckedChange: handleCheckedChange\n }, useMergedRefs(ref, initializeWalker))\n };\n}\n"],"names":["useTree_unstable","props","ref","isSubtree","useTreeContext_unstable","ctx","level","useSubtree","treeType","useNestedRootTree","openItems","setOpenItems","useControllableOpenItems","checkedItems","useNestedCheckedItems","navigate","initialize","useTreeNavigation","walkerRef","React","useRef","targetDocument","useFluent_unstable","initializeWalker","useCallback","root","current","createHTMLElementWalker","treeItemFilter","handleOpenChange","useEventCallback","event","data","_props_onOpenChange","_props","nextOpenItems","createNextOpenItems","onOpenChange","call","dangerouslyGetInternalSet_unstable","handleCheckedChange","_props_onCheckedChange","nextCheckedItems","createNextNestedCheckedItems","onCheckedChange","dangerouslyGetInternalMap_unstable","handleNavigation","_props_onNavigation","onNavigation","useRootTree","useMergedRefs"],"mappings":";;;;+BAWaA;;;eAAAA;;;;iEAXU;gCACyB;0CACc;mDACM;6BAC5B;6BACZ;4BACD;yCACa;gCACT;mCACG;qCACC;AAC5B,MAAMA,mBAAmB,CAACC,OAAOC;IACpC,MAAMC,YAAYC,IAAAA,oCAAuB,EAAC,CAACC,MAAMA,IAAIC,KAAK,GAAG;IAC7D,2DAA2D;IAC3D,sEAAsE;IACtE,sDAAsD;IACtD,OAAOH,YAAY;QACf,GAAGI,IAAAA,sBAAU,EAACN,OAAOC,IAAI;QACzBM,UAAU;IACd,IAAIC,kBAAkBR,OAAOC;AACjC;AACA,SAASO,kBAAkBR,KAAK,EAAEC,GAAG;IACjC,MAAM,CAACQ,WAAWC,aAAa,GAAGC,IAAAA,kDAAwB,EAACX;IAC3D,MAAMY,eAAeC,IAAAA,wDAAqB,EAACb;IAC3C,MAAM,EAAEc,QAAQ,EAAEC,UAAU,EAAE,GAAGC,IAAAA,oCAAiB;IAClD,MAAMC,YAAYC,OAAMC,MAAM;IAC9B,MAAM,EAAEC,cAAc,EAAE,GAAGC,IAAAA,uCAAkB;IAC7C,MAAMC,mBAAmBJ,OAAMK,WAAW,CAAC,CAACC;QACxC,IAAIA,QAAQJ,gBAAgB;YACxBH,UAAUQ,OAAO,GAAGC,IAAAA,gDAAuB,EAACF,MAAMJ,gBAAgBO,8BAAc;YAChFZ,WAAWE,UAAUQ,OAAO;QAChC;IACJ,GAAG;QACCV;QACAK;KACH;IACD,MAAMQ,mBAAmBC,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIC,qBAAqBC;QACzB,MAAMC,gBAAgBC,IAAAA,6CAAmB,EAACJ,MAAMtB;QAC/CuB,CAAAA,sBAAsB,AAACC,CAAAA,SAASjC,KAAI,EAAGoC,YAAY,AAAD,MAAO,QAAQJ,wBAAwB,KAAK,IAAI,KAAK,IAAIA,oBAAoBK,IAAI,CAACJ,QAAQH,OAAO;YAChJ,GAAGC,IAAI;YACPtB,WAAWyB,cAAcI,kCAAkC;QAC/D;QACA5B,aAAawB;IACjB;IACA,MAAMK,sBAAsBV,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QACjD,IAAId,UAAUQ,OAAO,EAAE;YACnB,IAAIe,wBAAwBP;YAC5B,MAAMQ,mBAAmBC,IAAAA,+DAA4B,EAACX,MAAMnB;YAC3D4B,CAAAA,yBAAyB,AAACP,CAAAA,SAASjC,KAAI,EAAG2C,eAAe,AAAD,MAAO,QAAQH,2BAA2B,KAAK,IAAI,KAAK,IAAIA,uBAAuBH,IAAI,CAACJ,QAAQH,OAAO;gBAC5J,GAAGC,IAAI;gBACPnB,cAAc6B,iBAAiBG,kCAAkC;YACrE;QACJ;IACJ;IACA,MAAMC,mBAAmBhB,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIe,qBAAqBb;QACxBa,CAAAA,sBAAsB,AAACb,CAAAA,SAASjC,KAAI,EAAG+C,YAAY,AAAD,MAAO,QAAQD,wBAAwB,KAAK,IAAI,KAAK,IAAIA,oBAAoBT,IAAI,CAACJ,QAAQH,OAAOC;QACpJ,IAAId,UAAUQ,OAAO,EAAE;YACnBX,SAASiB,MAAMd,UAAUQ,OAAO;QACpC;IACJ;IACA,OAAO;QACHlB,UAAU;QACV,GAAGyC,IAAAA,wBAAW,EAAC;YACX,GAAGhD,KAAK;YACRS;YACAG;YACAwB,cAAcR;YACdmB,cAAcF;YACdF,iBAAiBJ;QACrB,GAAGU,IAAAA,6BAAa,EAAChD,KAAKqB,kBAAkB;IAC5C;AACJ"}
1
+ {"version":3,"sources":["useTree.js"],"sourcesContent":["import * as React from 'react';\nimport { useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { createNextOpenItems, useControllableOpenItems } from '../../hooks/useControllableOpenItems';\nimport { createNextNestedCheckedItems, useNestedCheckedItems } from './useNestedControllableCheckedItems';\nimport { useSubtreeContext_unstable } from '../../contexts/subtreeContext';\nimport { useRootTree } from '../../hooks/useRootTree';\nimport { useSubtree } from '../../hooks/useSubtree';\nimport { createHTMLElementWalker } from '../../utils/createHTMLElementWalker';\nimport { treeItemFilter } from '../../utils/treeItemFilter';\nimport { useTreeNavigation } from './useTreeNavigation';\nimport { useFluent_unstable } from '@fluentui/react-shared-contexts';\nexport const useTree_unstable = (props, ref)=>{\n const { level } = useSubtreeContext_unstable();\n // as level is static, this doesn't break rule of hooks\n // and if this becomes an issue later on, this can be easily converted\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return level > 0 ? useSubtree(props, ref) : useNestedRootTree(props, ref);\n};\nfunction useNestedRootTree(props, ref) {\n const [openItems, setOpenItems] = useControllableOpenItems(props);\n const checkedItems = useNestedCheckedItems(props);\n const { navigate, initialize } = useTreeNavigation();\n const walkerRef = React.useRef();\n const { targetDocument } = useFluent_unstable();\n const initializeWalker = React.useCallback((root)=>{\n if (root && targetDocument) {\n walkerRef.current = createHTMLElementWalker(root, targetDocument, treeItemFilter);\n initialize(walkerRef.current);\n }\n }, [\n initialize,\n targetDocument\n ]);\n const handleOpenChange = useEventCallback((event, data)=>{\n var _props_onOpenChange;\n const nextOpenItems = createNextOpenItems(data, openItems);\n (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, event, {\n ...data,\n openItems: nextOpenItems.dangerouslyGetInternalSet_unstable()\n });\n setOpenItems(nextOpenItems);\n });\n const handleCheckedChange = useEventCallback((event, data)=>{\n if (walkerRef.current) {\n var _props_onCheckedChange;\n const nextCheckedItems = createNextNestedCheckedItems(data, checkedItems);\n (_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, event, {\n ...data,\n checkedItems: nextCheckedItems.dangerouslyGetInternalMap_unstable()\n });\n }\n });\n const handleNavigation = useEventCallback((event, data)=>{\n var _props_onNavigation;\n (_props_onNavigation = props.onNavigation) === null || _props_onNavigation === void 0 ? void 0 : _props_onNavigation.call(props, event, data);\n if (walkerRef.current && !event.isDefaultPrevented()) {\n navigate(data, walkerRef.current);\n }\n });\n return {\n treeType: 'nested',\n ...useRootTree({\n ...props,\n openItems,\n checkedItems,\n onOpenChange: handleOpenChange,\n onNavigation: handleNavigation,\n onCheckedChange: handleCheckedChange\n }, useMergedRefs(ref, initializeWalker))\n };\n}\n"],"names":["useTree_unstable","props","ref","level","useSubtreeContext_unstable","useSubtree","useNestedRootTree","openItems","setOpenItems","useControllableOpenItems","checkedItems","useNestedCheckedItems","navigate","initialize","useTreeNavigation","walkerRef","React","useRef","targetDocument","useFluent_unstable","initializeWalker","useCallback","root","current","createHTMLElementWalker","treeItemFilter","handleOpenChange","useEventCallback","event","data","_props_onOpenChange","nextOpenItems","createNextOpenItems","onOpenChange","call","dangerouslyGetInternalSet_unstable","handleCheckedChange","_props_onCheckedChange","nextCheckedItems","createNextNestedCheckedItems","onCheckedChange","dangerouslyGetInternalMap_unstable","handleNavigation","_props_onNavigation","onNavigation","isDefaultPrevented","treeType","useRootTree","useMergedRefs"],"mappings":";;;;+BAWaA;;;eAAAA;;;;iEAXU;gCACyB;0CACc;mDACM;gCACzB;6BACf;4BACD;yCACa;gCACT;mCACG;qCACC;AAC5B,MAAMA,mBAAmB,CAACC,OAAOC;IACpC,MAAM,EAAEC,KAAK,EAAE,GAAGC,IAAAA,0CAA0B;IAC5C,uDAAuD;IACvD,sEAAsE;IACtE,sDAAsD;IACtD,OAAOD,QAAQ,IAAIE,IAAAA,sBAAU,EAACJ,OAAOC,OAAOI,kBAAkBL,OAAOC;AACzE;AACA,SAASI,kBAAkBL,KAAK,EAAEC,GAAG;IACjC,MAAM,CAACK,WAAWC,aAAa,GAAGC,IAAAA,kDAAwB,EAACR;IAC3D,MAAMS,eAAeC,IAAAA,wDAAqB,EAACV;IAC3C,MAAM,EAAEW,QAAQ,EAAEC,UAAU,EAAE,GAAGC,IAAAA,oCAAiB;IAClD,MAAMC,YAAYC,OAAMC,MAAM;IAC9B,MAAM,EAAEC,cAAc,EAAE,GAAGC,IAAAA,uCAAkB;IAC7C,MAAMC,mBAAmBJ,OAAMK,WAAW,CAAC,CAACC;QACxC,IAAIA,QAAQJ,gBAAgB;YACxBH,UAAUQ,OAAO,GAAGC,IAAAA,gDAAuB,EAACF,MAAMJ,gBAAgBO,8BAAc;YAChFZ,WAAWE,UAAUQ,OAAO;QAChC;IACJ,GAAG;QACCV;QACAK;KACH;IACD,MAAMQ,mBAAmBC,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIC;QACJ,MAAMC,gBAAgBC,IAAAA,6CAAmB,EAACH,MAAMtB;QAC/CuB,CAAAA,sBAAsB7B,MAAMgC,YAAY,AAAD,MAAO,QAAQH,wBAAwB,KAAK,IAAI,KAAK,IAAIA,oBAAoBI,IAAI,CAACjC,OAAO2B,OAAO;YACpI,GAAGC,IAAI;YACPtB,WAAWwB,cAAcI,kCAAkC;QAC/D;QACA3B,aAAauB;IACjB;IACA,MAAMK,sBAAsBT,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QACjD,IAAId,UAAUQ,OAAO,EAAE;YACnB,IAAIc;YACJ,MAAMC,mBAAmBC,IAAAA,+DAA4B,EAACV,MAAMnB;YAC3D2B,CAAAA,yBAAyBpC,MAAMuC,eAAe,AAAD,MAAO,QAAQH,2BAA2B,KAAK,IAAI,KAAK,IAAIA,uBAAuBH,IAAI,CAACjC,OAAO2B,OAAO;gBAChJ,GAAGC,IAAI;gBACPnB,cAAc4B,iBAAiBG,kCAAkC;YACrE;QACJ;IACJ;IACA,MAAMC,mBAAmBf,IAAAA,gCAAgB,EAAC,CAACC,OAAOC;QAC9C,IAAIc;QACHA,CAAAA,sBAAsB1C,MAAM2C,YAAY,AAAD,MAAO,QAAQD,wBAAwB,KAAK,IAAI,KAAK,IAAIA,oBAAoBT,IAAI,CAACjC,OAAO2B,OAAOC;QACxI,IAAId,UAAUQ,OAAO,IAAI,CAACK,MAAMiB,kBAAkB,IAAI;YAClDjC,SAASiB,MAAMd,UAAUQ,OAAO;QACpC;IACJ;IACA,OAAO;QACHuB,UAAU;QACV,GAAGC,IAAAA,wBAAW,EAAC;YACX,GAAG9C,KAAK;YACRM;YACAG;YACAuB,cAAcP;YACdkB,cAAcF;YACdF,iBAAiBJ;QACrB,GAAGY,IAAAA,6BAAa,EAAC9C,KAAKkB,kBAAkB;IAC5C;AACJ"}
@@ -8,22 +8,37 @@ Object.defineProperty(exports, "useTreeContextValues_unstable", {
8
8
  return useTreeContextValues_unstable;
9
9
  }
10
10
  });
11
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
12
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
11
13
  function useTreeContextValues_unstable(state) {
12
- const { openItems, checkedItems, selectionMode, level, appearance, size, requestTreeResponse, treeType } = state;
13
- /**
14
- * This context is created with "@fluentui/react-context-selector",
15
- * there is no sense to memoize it
16
- */ const tree = {
17
- treeType,
18
- size,
19
- level,
20
- openItems,
21
- appearance,
22
- checkedItems,
23
- selectionMode,
24
- requestTreeResponse
25
- };
14
+ if (state.contextType === 'root') {
15
+ const { openItems, level, contextType, treeType, checkedItems, selectionMode, appearance, size, requestTreeResponse } = state;
16
+ /**
17
+ * This context is created with "@fluentui/react-context-selector",
18
+ * there is no sense to memoize it
19
+ */ const tree = {
20
+ treeType,
21
+ size,
22
+ openItems,
23
+ appearance,
24
+ checkedItems,
25
+ selectionMode,
26
+ contextType,
27
+ level,
28
+ requestTreeResponse
29
+ };
30
+ return {
31
+ tree
32
+ };
33
+ }
26
34
  return {
27
- tree
35
+ // contextType is statically determined by the context
36
+ // eslint-disable-next-line react-hooks/rules-of-hooks
37
+ tree: _react.useMemo(()=>({
38
+ level: state.level,
39
+ contextType: 'subtree'
40
+ }), [
41
+ state.level
42
+ ])
28
43
  };
29
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["useTreeContextValues.js"],"sourcesContent":["export function useTreeContextValues_unstable(state) {\n const { openItems, checkedItems, selectionMode, level, appearance, size, requestTreeResponse, treeType } = state;\n /**\n * This context is created with \"@fluentui/react-context-selector\",\n * there is no sense to memoize it\n */ const tree = {\n treeType,\n size,\n level,\n openItems,\n appearance,\n checkedItems,\n selectionMode,\n requestTreeResponse\n };\n return {\n tree\n };\n}\n"],"names":["useTreeContextValues_unstable","state","openItems","checkedItems","selectionMode","level","appearance","size","requestTreeResponse","treeType","tree"],"mappings":";;;;+BAAgBA;;;eAAAA;;;AAAT,SAASA,8BAA8BC,KAAK;IAC/C,MAAM,EAAEC,SAAS,EAAEC,YAAY,EAAEC,aAAa,EAAEC,KAAK,EAAEC,UAAU,EAAEC,IAAI,EAAEC,mBAAmB,EAAEC,QAAQ,EAAE,GAAGR;IAC3G;;;GAGD,GAAG,MAAMS,OAAO;QACXD;QACAF;QACAF;QACAH;QACAI;QACAH;QACAC;QACAI;IACJ;IACA,OAAO;QACHE;IACJ;AACJ"}
1
+ {"version":3,"sources":["useTreeContextValues.js"],"sourcesContent":["import * as React from 'react';\nexport function useTreeContextValues_unstable(state) {\n if (state.contextType === 'root') {\n const { openItems, level, contextType, treeType, checkedItems, selectionMode, appearance, size, requestTreeResponse } = state;\n /**\n * This context is created with \"@fluentui/react-context-selector\",\n * there is no sense to memoize it\n */ const tree = {\n treeType,\n size,\n openItems,\n appearance,\n checkedItems,\n selectionMode,\n contextType,\n level,\n requestTreeResponse\n };\n return {\n tree\n };\n }\n return {\n // contextType is statically determined by the context\n // eslint-disable-next-line react-hooks/rules-of-hooks\n tree: React.useMemo(()=>({\n level: state.level,\n contextType: 'subtree'\n }), [\n state.level\n ])\n };\n}\n"],"names":["useTreeContextValues_unstable","state","contextType","openItems","level","treeType","checkedItems","selectionMode","appearance","size","requestTreeResponse","tree","React","useMemo"],"mappings":";;;;+BACgBA;;;eAAAA;;;;iEADO;AAChB,SAASA,8BAA8BC,KAAK;IAC/C,IAAIA,MAAMC,WAAW,KAAK,QAAQ;QAC9B,MAAM,EAAEC,SAAS,EAAEC,KAAK,EAAEF,WAAW,EAAEG,QAAQ,EAAEC,YAAY,EAAEC,aAAa,EAAEC,UAAU,EAAEC,IAAI,EAAEC,mBAAmB,EAAE,GAAGT;QACxH;;;KAGH,GAAG,MAAMU,OAAO;YACTN;YACAI;YACAN;YACAK;YACAF;YACAC;YACAL;YACAE;YACAM;QACJ;QACA,OAAO;YACHC;QACJ;IACJ;IACA,OAAO;QACH,sDAAsD;QACtD,sDAAsD;QACtDA,MAAMC,OAAMC,OAAO,CAAC,IAAK,CAAA;gBACjBT,OAAOH,MAAMG,KAAK;gBAClBF,aAAa;YACjB,CAAA,GAAI;YACJD,MAAMG,KAAK;SACd;IACL;AACJ"}
@@ -15,16 +15,20 @@ const _reactutilities = require("@fluentui/react-utilities");
15
15
  const _reactportal = require("@fluentui/react-portal");
16
16
  const _keyboardkeys = require("@fluentui/keyboard-keys");
17
17
  const _tokens = require("../../utils/tokens");
18
- const _index = require("../../contexts/index");
18
+ const _contexts = require("../../contexts");
19
19
  const _getTreeItemValueFromElement = require("../../utils/getTreeItemValueFromElement");
20
20
  function useTreeItem_unstable(props, ref) {
21
21
  var _props_value;
22
- const treeType = (0, _index.useTreeContext_unstable)((ctx)=>ctx.treeType);
22
+ const treeType = (0, _contexts.useTreeContext_unstable)((ctx)=>ctx.treeType);
23
23
  if (treeType === 'flat') {
24
24
  warnIfNoProperPropsFlatTreeItem(props);
25
25
  }
26
- const requestTreeResponse = (0, _index.useTreeContext_unstable)((ctx)=>ctx.requestTreeResponse);
27
- const contextLevel = (0, _index.useTreeContext_unstable)((ctx)=>ctx.level);
26
+ const requestTreeResponse = (0, _contexts.useTreeContext_unstable)((ctx)=>ctx.requestTreeResponse);
27
+ const { level: contextLevel } = (0, _contexts.useSubtreeContext_unstable)();
28
+ const parentValue = (0, _contexts.useTreeItemContext_unstable)((ctx)=>{
29
+ var _props_parentValue;
30
+ return (_props_parentValue = props.parentValue) !== null && _props_parentValue !== void 0 ? _props_parentValue : ctx.value;
31
+ });
28
32
  // note, if the value is not externally provided,
29
33
  // then selection and expansion will not work properly
30
34
  const value = (0, _reactutilities.useId)('fuiTreeItemValue-', (_props_value = props.value) === null || _props_value === void 0 ? void 0 : _props_value.toString());
@@ -39,14 +43,17 @@ function useTreeItem_unstable(props, ref) {
39
43
  const layoutRef = _react.useRef(null);
40
44
  const subtreeRef = _react.useRef(null);
41
45
  const selectionRef = _react.useRef(null);
42
- var _props_open;
43
- const open = (0, _index.useTreeContext_unstable)((ctx)=>(_props_open = props.open) !== null && _props_open !== void 0 ? _props_open : ctx.openItems.has(value));
44
- const selectionMode = (0, _index.useTreeContext_unstable)((ctx)=>ctx.selectionMode);
45
- var _ctx_checkedItems_get;
46
- const checked = (0, _index.useTreeContext_unstable)((ctx)=>(_ctx_checkedItems_get = ctx.checkedItems.get(value)) !== null && _ctx_checkedItems_get !== void 0 ? _ctx_checkedItems_get : false);
46
+ const open = (0, _contexts.useTreeContext_unstable)((ctx)=>{
47
+ var _props_open;
48
+ return (_props_open = props.open) !== null && _props_open !== void 0 ? _props_open : ctx.openItems.has(value);
49
+ });
50
+ const selectionMode = (0, _contexts.useTreeContext_unstable)((ctx)=>ctx.selectionMode);
51
+ const checked = (0, _contexts.useTreeContext_unstable)((ctx)=>{
52
+ var _ctx_checkedItems_get;
53
+ return (_ctx_checkedItems_get = ctx.checkedItems.get(value)) !== null && _ctx_checkedItems_get !== void 0 ? _ctx_checkedItems_get : false;
54
+ });
47
55
  const handleClick = (0, _reactutilities.useEventCallback)((event)=>{
48
- var _onClick;
49
- (_onClick = onClick) === null || _onClick === void 0 ? void 0 : _onClick(event);
56
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
50
57
  if (event.isDefaultPrevented()) {
51
58
  return;
52
59
  }
@@ -64,7 +71,7 @@ function useTreeItem_unstable(props, ref) {
64
71
  }
65
72
  const isEventFromExpandIcon = expandIconRef.current && (0, _reactportal.elementContains)(expandIconRef.current, event.target);
66
73
  _reactdom.unstable_batchedUpdates(()=>{
67
- var _props_onOpenChange, _props;
74
+ var _props_onOpenChange;
68
75
  const data = {
69
76
  event,
70
77
  value,
@@ -72,16 +79,23 @@ function useTreeItem_unstable(props, ref) {
72
79
  target: event.currentTarget,
73
80
  type: isEventFromExpandIcon ? _tokens.treeDataTypes.ExpandIconClick : _tokens.treeDataTypes.Click
74
81
  };
75
- (_props_onOpenChange = (_props = props).onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(_props, event, data);
82
+ (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, event, data);
76
83
  requestTreeResponse({
77
84
  ...data,
78
- itemType
85
+ itemType,
86
+ requestType: 'open'
87
+ });
88
+ requestTreeResponse({
89
+ ...data,
90
+ itemType,
91
+ parentValue,
92
+ requestType: 'navigate',
93
+ type: _tokens.treeDataTypes.Click
79
94
  });
80
95
  });
81
96
  });
82
97
  const handleKeyDown = (0, _reactutilities.useEventCallback)((event)=>{
83
- var _onKeyDown;
84
- (_onKeyDown = onKeyDown) === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(event);
98
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
85
99
  // Ignore keyboard events that do not originate from the current tree item.
86
100
  if (event.isDefaultPrevented() || event.currentTarget !== event.target) {
87
101
  return;
@@ -96,7 +110,7 @@ function useTreeItem_unstable(props, ref) {
96
110
  return;
97
111
  case _tokens.treeDataTypes.Enter:
98
112
  {
99
- var _props_onOpenChange, _props;
113
+ var _props_onOpenChange;
100
114
  const data = {
101
115
  value,
102
116
  event,
@@ -104,10 +118,11 @@ function useTreeItem_unstable(props, ref) {
104
118
  type: event.key,
105
119
  target: event.currentTarget
106
120
  };
107
- (_props_onOpenChange = (_props = props).onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(_props, event, data);
121
+ (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, event, data);
108
122
  return requestTreeResponse({
109
123
  ...data,
110
- itemType
124
+ itemType,
125
+ requestType: 'open'
111
126
  });
112
127
  }
113
128
  case _tokens.treeDataTypes.End:
@@ -115,9 +130,11 @@ function useTreeItem_unstable(props, ref) {
115
130
  case _tokens.treeDataTypes.ArrowUp:
116
131
  case _tokens.treeDataTypes.ArrowDown:
117
132
  return requestTreeResponse({
133
+ requestType: 'navigate',
118
134
  event,
119
135
  value,
120
136
  itemType,
137
+ parentValue,
121
138
  type: event.key,
122
139
  target: event.currentTarget
123
140
  });
@@ -135,12 +152,14 @@ function useTreeItem_unstable(props, ref) {
135
152
  target: event.currentTarget
136
153
  };
137
154
  if (open) {
138
- var _props_onOpenChange1, _props1;
139
- (_props_onOpenChange1 = (_props1 = props).onOpenChange) === null || _props_onOpenChange1 === void 0 ? void 0 : _props_onOpenChange1.call(_props1, event, data);
155
+ var _props_onOpenChange1;
156
+ (_props_onOpenChange1 = props.onOpenChange) === null || _props_onOpenChange1 === void 0 ? void 0 : _props_onOpenChange1.call(props, event, data);
140
157
  }
141
158
  return requestTreeResponse({
142
159
  ...data,
143
- itemType
160
+ itemType,
161
+ parentValue,
162
+ requestType: open ? 'open' : 'navigate'
144
163
  });
145
164
  }
146
165
  case _tokens.treeDataTypes.ArrowRight:
@@ -156,22 +175,26 @@ function useTreeItem_unstable(props, ref) {
156
175
  target: event.currentTarget
157
176
  };
158
177
  if (!open) {
159
- var _props_onOpenChange2, _props2;
160
- (_props_onOpenChange2 = (_props2 = props).onOpenChange) === null || _props_onOpenChange2 === void 0 ? void 0 : _props_onOpenChange2.call(_props2, event, data);
178
+ var _props_onOpenChange2;
179
+ (_props_onOpenChange2 = props.onOpenChange) === null || _props_onOpenChange2 === void 0 ? void 0 : _props_onOpenChange2.call(props, event, data);
161
180
  }
162
181
  return requestTreeResponse({
163
182
  ...data,
164
- itemType
183
+ itemType,
184
+ parentValue,
185
+ requestType: open ? 'navigate' : 'open'
165
186
  });
166
187
  }
167
188
  const isTypeAheadCharacter = event.key.length === 1 && event.key.match(/\w/) && !event.altKey && !event.ctrlKey && !event.metaKey;
168
189
  if (isTypeAheadCharacter) {
169
190
  requestTreeResponse({
191
+ requestType: 'navigate',
170
192
  event,
171
193
  target: event.currentTarget,
172
194
  value,
173
195
  itemType,
174
- type: _tokens.treeDataTypes.TypeAhead
196
+ type: _tokens.treeDataTypes.TypeAhead,
197
+ parentValue
175
198
  });
176
199
  }
177
200
  });
@@ -200,6 +223,7 @@ function useTreeItem_unstable(props, ref) {
200
223
  return;
201
224
  }
202
225
  requestTreeResponse({
226
+ requestType: 'selection',
203
227
  event,
204
228
  value,
205
229
  itemType,
@@ -251,14 +275,16 @@ function useTreeItem_unstable(props, ref) {
251
275
  }
252
276
  function warnIfNoProperPropsFlatTreeItem(props) {
253
277
  if (process.env.NODE_ENV !== 'production') {
254
- if (props['aria-posinset'] === undefined || props['aria-setsize'] === undefined || props['aria-level'] === undefined) {
278
+ if (props['aria-posinset'] === undefined || props['aria-setsize'] === undefined || props['aria-level'] === undefined || props.parentValue === undefined && props['aria-level'] !== 1) {
255
279
  // eslint-disable-next-line no-console
256
280
  console.error(`@fluentui/react-tree [${useTreeItem_unstable.name}]:
257
- A flat treeitem must have "aria-posinset", "aria-setsize", "aria-level" to ensure a11y and navigation.
281
+ A flat treeitem must have "aria-posinset", "aria-setsize", "aria-level"
282
+ and "parentValue" (if "aria-level" > 1) to ensure a11y and navigation.
258
283
 
259
284
  - "aria-posinset": the position of this treeitem in the current level of the tree.
260
285
  - "aria-setsize": the number of siblings in this level of the tree.
261
- - "aria-level": the current level of the treeitem.`);
286
+ - "aria-level": the current level of the treeitem.
287
+ - "parentValue": the "value" property of the parent item of this item.`);
262
288
  }
263
289
  }
264
290
  }