@fluentui/react-tree 9.0.0-beta.26 → 9.0.0-beta.28

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 (169) hide show
  1. package/CHANGELOG.json +85 -1
  2. package/CHANGELOG.md +29 -2
  3. package/dist/index.d.ts +160 -96
  4. package/lib/FlatTree.js +1 -0
  5. package/lib/FlatTree.js.map +1 -0
  6. package/lib/components/FlatTree/FlatTree.js +13 -0
  7. package/lib/components/FlatTree/FlatTree.js.map +1 -0
  8. package/lib/components/FlatTree/FlatTree.types.js +1 -0
  9. package/lib/components/FlatTree/FlatTree.types.js.map +1 -0
  10. package/lib/components/FlatTree/index.js +6 -0
  11. package/lib/components/FlatTree/index.js.map +1 -0
  12. package/lib/{hooks → components/FlatTree}/useFlatControllableCheckedItems.js +10 -23
  13. package/lib/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -0
  14. package/lib/components/FlatTree/useFlatTree.js +3 -0
  15. package/lib/components/FlatTree/useFlatTree.js.map +1 -0
  16. package/lib/{hooks → components/FlatTree}/useFlatTreeNavigation.js +12 -12
  17. package/lib/components/FlatTree/useFlatTreeNavigation.js.map +1 -0
  18. package/lib/components/FlatTree/useFlatTreeStyles.styles.js +30 -0
  19. package/lib/components/FlatTree/useFlatTreeStyles.styles.js.map +1 -0
  20. package/lib/{hooks/useFlatTree.js → components/FlatTree/useHeadlessFlatTree.js} +8 -14
  21. package/lib/components/FlatTree/useHeadlessFlatTree.js.map +1 -0
  22. package/lib/components/Tree/Tree.js +4 -9
  23. package/lib/components/Tree/Tree.js.map +1 -1
  24. package/lib/components/Tree/Tree.types.js.map +1 -1
  25. package/lib/components/Tree/index.js +2 -2
  26. package/lib/components/Tree/index.js.map +1 -1
  27. package/lib/components/Tree/renderTree.js.map +1 -1
  28. package/lib/{hooks/useNestedControllableCheckedItems.js → components/Tree/useControllableCheckedItems.js} +5 -18
  29. package/lib/components/Tree/useControllableCheckedItems.js.map +1 -0
  30. package/lib/components/Tree/useTree.js +38 -14
  31. package/lib/components/Tree/useTree.js.map +1 -1
  32. package/lib/components/Tree/useTreeContextValues.js.map +1 -1
  33. package/lib/{hooks/useNestedTreeNavigation.js → components/Tree/useTreeNavigation.js} +6 -6
  34. package/lib/components/Tree/useTreeNavigation.js.map +1 -0
  35. package/lib/components/Tree/useTreeStyles.styles.js +2 -2
  36. package/lib/components/Tree/useTreeStyles.styles.js.map +1 -1
  37. package/lib/components/TreeItem/TreeItem.types.js.map +1 -1
  38. package/lib/components/TreeItem/renderTreeItem.js +2 -4
  39. package/lib/components/TreeItem/renderTreeItem.js.map +1 -1
  40. package/lib/components/TreeItem/useTreeItem.js +10 -56
  41. package/lib/components/TreeItem/useTreeItem.js.map +1 -1
  42. package/lib/components/TreeItem/useTreeItemContextValues.js +8 -16
  43. package/lib/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  44. package/lib/components/TreeItemLayout/TreeItemLayout.types.js.map +1 -1
  45. package/lib/components/TreeItemLayout/renderTreeItemLayout.js.map +1 -1
  46. package/lib/components/TreeItemLayout/useTreeItemLayout.js +50 -7
  47. package/lib/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  48. package/lib/components/TreeItemPersonaLayout/TreeItemPersonaLayout.types.js.map +1 -1
  49. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +1 -1
  50. package/lib/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  51. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +6 -1
  52. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  53. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +5 -1
  54. package/lib/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -1
  55. package/lib/contexts/index.js +0 -1
  56. package/lib/contexts/index.js.map +1 -1
  57. package/lib/contexts/treeContext.js.map +1 -1
  58. package/lib/contexts/treeItemContext.js +5 -0
  59. package/lib/contexts/treeItemContext.js.map +1 -1
  60. package/lib/hooks/useControllableOpenItems.js +6 -3
  61. package/lib/hooks/useControllableOpenItems.js.map +1 -1
  62. package/lib/{components/Tree → hooks}/useRootTree.js +18 -25
  63. package/lib/hooks/useRootTree.js.map +1 -0
  64. package/lib/{components/Tree → hooks}/useSubtree.js +4 -4
  65. package/lib/hooks/useSubtree.js.map +1 -0
  66. package/lib/index.js +2 -2
  67. package/lib/index.js.map +1 -1
  68. package/lib/utils/ImmutableMap.js +4 -0
  69. package/lib/utils/ImmutableMap.js.map +1 -1
  70. package/lib/utils/ImmutableSet.js +4 -0
  71. package/lib/utils/ImmutableSet.js.map +1 -1
  72. package/lib/utils/createCheckedItems.js +18 -0
  73. package/lib/utils/createCheckedItems.js.map +1 -0
  74. package/lib/utils/{createFlatTreeItems.js → createHeadlessTree.js} +45 -45
  75. package/lib/utils/createHeadlessTree.js.map +1 -0
  76. package/lib/utils/createOpenItems.js +10 -0
  77. package/lib/utils/createOpenItems.js.map +1 -0
  78. package/lib/utils/flattenTree.js.map +1 -1
  79. package/lib-commonjs/FlatTree.js +6 -0
  80. package/lib-commonjs/FlatTree.js.map +1 -0
  81. package/lib-commonjs/components/FlatTree/FlatTree.js +20 -0
  82. package/lib-commonjs/components/FlatTree/FlatTree.js.map +1 -0
  83. package/lib-commonjs/components/FlatTree/FlatTree.types.js +4 -0
  84. package/lib-commonjs/components/FlatTree/FlatTree.types.js.map +1 -0
  85. package/lib-commonjs/components/FlatTree/index.js +21 -0
  86. package/lib-commonjs/components/FlatTree/index.js.map +1 -0
  87. package/lib-commonjs/{hooks → components/FlatTree}/useFlatControllableCheckedItems.js +10 -23
  88. package/lib-commonjs/components/FlatTree/useFlatControllableCheckedItems.js.map +1 -0
  89. package/lib-commonjs/components/FlatTree/useFlatTree.js +12 -0
  90. package/lib-commonjs/components/FlatTree/useFlatTree.js.map +1 -0
  91. package/lib-commonjs/{hooks → components/FlatTree}/useFlatTreeNavigation.js +12 -12
  92. package/lib-commonjs/components/FlatTree/useFlatTreeNavigation.js.map +1 -0
  93. package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js +53 -0
  94. package/lib-commonjs/components/FlatTree/useFlatTreeStyles.styles.js.map +1 -0
  95. package/lib-commonjs/{hooks/useFlatTree.js → components/FlatTree/useHeadlessFlatTree.js} +10 -16
  96. package/lib-commonjs/components/FlatTree/useHeadlessFlatTree.js.map +1 -0
  97. package/lib-commonjs/components/Tree/Tree.js +3 -3
  98. package/lib-commonjs/components/Tree/Tree.js.map +1 -1
  99. package/lib-commonjs/components/Tree/index.js +2 -2
  100. package/lib-commonjs/components/Tree/index.js.map +1 -1
  101. package/lib-commonjs/{hooks/useNestedControllableCheckedItems.js → components/Tree/useControllableCheckedItems.js} +7 -20
  102. package/lib-commonjs/components/Tree/useControllableCheckedItems.js.map +1 -0
  103. package/lib-commonjs/components/Tree/useTree.js +38 -6
  104. package/lib-commonjs/components/Tree/useTree.js.map +1 -1
  105. package/lib-commonjs/{hooks/useNestedTreeNavigation.js → components/Tree/useTreeNavigation.js} +8 -8
  106. package/lib-commonjs/components/Tree/useTreeNavigation.js.map +1 -0
  107. package/lib-commonjs/components/Tree/useTreeStyles.styles.js +2 -2
  108. package/lib-commonjs/components/Tree/useTreeStyles.styles.js.map +1 -1
  109. package/lib-commonjs/components/TreeItem/renderTreeItem.js +1 -3
  110. package/lib-commonjs/components/TreeItem/renderTreeItem.js.map +1 -1
  111. package/lib-commonjs/components/TreeItem/useTreeItem.js +9 -55
  112. package/lib-commonjs/components/TreeItem/useTreeItem.js.map +1 -1
  113. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js +8 -17
  114. package/lib-commonjs/components/TreeItem/useTreeItemContextValues.js.map +1 -1
  115. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js +48 -5
  116. package/lib-commonjs/components/TreeItemLayout/useTreeItemLayout.js.map +1 -1
  117. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js +1 -1
  118. package/lib-commonjs/components/TreeItemPersonaLayout/renderTreeItemPersonaLayout.js.map +1 -1
  119. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js +6 -1
  120. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayout.js.map +1 -1
  121. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js +5 -1
  122. package/lib-commonjs/components/TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles.js.map +1 -1
  123. package/lib-commonjs/contexts/index.js +0 -1
  124. package/lib-commonjs/contexts/index.js.map +1 -1
  125. package/lib-commonjs/contexts/treeItemContext.js +5 -0
  126. package/lib-commonjs/contexts/treeItemContext.js.map +1 -1
  127. package/lib-commonjs/hooks/useControllableOpenItems.js +3 -2
  128. package/lib-commonjs/hooks/useControllableOpenItems.js.map +1 -1
  129. package/lib-commonjs/{components/Tree → hooks}/useRootTree.js +15 -22
  130. package/lib-commonjs/hooks/useRootTree.js.map +1 -0
  131. package/lib-commonjs/{components/Tree → hooks}/useSubtree.js +10 -10
  132. package/lib-commonjs/hooks/useSubtree.js.map +1 -0
  133. package/lib-commonjs/index.js +10 -4
  134. package/lib-commonjs/index.js.map +1 -1
  135. package/lib-commonjs/utils/ImmutableMap.js +4 -0
  136. package/lib-commonjs/utils/ImmutableMap.js.map +1 -1
  137. package/lib-commonjs/utils/ImmutableSet.js +4 -0
  138. package/lib-commonjs/utils/ImmutableSet.js.map +1 -1
  139. package/lib-commonjs/utils/createCheckedItems.js +26 -0
  140. package/lib-commonjs/utils/createCheckedItems.js.map +1 -0
  141. package/lib-commonjs/utils/{createFlatTreeItems.js → createHeadlessTree.js} +47 -47
  142. package/lib-commonjs/utils/createHeadlessTree.js.map +1 -0
  143. package/lib-commonjs/utils/createOpenItems.js +18 -0
  144. package/lib-commonjs/utils/createOpenItems.js.map +1 -0
  145. package/package.json +8 -8
  146. package/lib/components/Tree/useRootTree.js.map +0 -1
  147. package/lib/components/Tree/useSubtree.js.map +0 -1
  148. package/lib/contexts/treeItemSlotsContext.js +0 -9
  149. package/lib/contexts/treeItemSlotsContext.js.map +0 -1
  150. package/lib/hooks/index.js +0 -5
  151. package/lib/hooks/index.js.map +0 -1
  152. package/lib/hooks/useFlatControllableCheckedItems.js.map +0 -1
  153. package/lib/hooks/useFlatTree.js.map +0 -1
  154. package/lib/hooks/useFlatTreeNavigation.js.map +0 -1
  155. package/lib/hooks/useNestedControllableCheckedItems.js.map +0 -1
  156. package/lib/hooks/useNestedTreeNavigation.js.map +0 -1
  157. package/lib/utils/createFlatTreeItems.js.map +0 -1
  158. package/lib-commonjs/components/Tree/useRootTree.js.map +0 -1
  159. package/lib-commonjs/components/Tree/useSubtree.js.map +0 -1
  160. package/lib-commonjs/contexts/treeItemSlotsContext.js +0 -25
  161. package/lib-commonjs/contexts/treeItemSlotsContext.js.map +0 -1
  162. package/lib-commonjs/hooks/index.js +0 -10
  163. package/lib-commonjs/hooks/index.js.map +0 -1
  164. package/lib-commonjs/hooks/useFlatControllableCheckedItems.js.map +0 -1
  165. package/lib-commonjs/hooks/useFlatTree.js.map +0 -1
  166. package/lib-commonjs/hooks/useFlatTreeNavigation.js.map +0 -1
  167. package/lib-commonjs/hooks/useNestedControllableCheckedItems.js.map +0 -1
  168. package/lib-commonjs/hooks/useNestedTreeNavigation.js.map +0 -1
  169. package/lib-commonjs/utils/createFlatTreeItems.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["treeContext.ts"],"sourcesContent":["import { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport { TreeCheckedChangeData, TreeNavigationData_unstable, TreeOpenChangeData } from '../Tree';\nimport { TreeItemType, TreeItemValue } from '../TreeItem';\nimport { SelectionMode } from '@fluentui/react-utilities';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\n\nexport type TreeContextValue = {\n level: number;\n selectionMode: 'none' | SelectionMode;\n appearance: 'subtle' | 'subtle-alpha' | 'transparent';\n size: 'small' | 'medium';\n openItems: ImmutableSet<TreeItemValue>;\n checkedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>;\n /**\n * requests root Tree component to respond to some tree item event,\n */\n requestTreeResponse(request: TreeItemRequest): void;\n};\n\nexport type TreeItemRequest = { itemType: TreeItemType } & (\n | OmitWithoutExpanding<TreeOpenChangeData, 'open'>\n | TreeNavigationData_unstable\n | OmitWithoutExpanding<TreeCheckedChangeData, 'checked' | 'selectionMode'>\n);\n\n// helper type that avoids the expansion of unions while inferring it, should work exactly the same as Omit\ntype OmitWithoutExpanding<P, K extends string | number | symbol> = P extends unknown ? Omit<P, K> : P;\n\nconst defaultContextValue: TreeContextValue = {\n level: 0,\n selectionMode: 'none',\n openItems: ImmutableSet.empty,\n checkedItems: ImmutableMap.empty,\n requestTreeResponse: noop,\n appearance: 'subtle',\n size: 'medium',\n};\n\nfunction noop() {\n /* noop */\n}\n\nexport const TreeContext: Context<TreeContextValue | undefined> = createContext<TreeContextValue | undefined>(\n undefined,\n);\n\nexport const { Provider: TreeProvider } = TreeContext;\nexport const useTreeContext_unstable = <T>(selector: ContextSelector<TreeContextValue, T>): T =>\n useContextSelector(TreeContext, (ctx = defaultContextValue) => selector(ctx));\n"],"names":["createContext","useContextSelector","ImmutableSet","ImmutableMap","defaultContextValue","level","selectionMode","openItems","empty","checkedItems","requestTreeResponse","noop","appearance","size","TreeContext","undefined","Provider","TreeProvider","useTreeContext_unstable","selector","ctx"],"mappings":"AAAA,SAAmCA,aAAa,EAAEC,kBAAkB,QAAQ,mCAAmC;AAI/G,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,wBAAwB;AAwBrD,MAAMC,sBAAwC;IAC5CC,OAAO;IACPC,eAAe;IACfC,WAAWL,aAAaM,KAAK;IAC7BC,cAAcN,aAAaK,KAAK;IAChCE,qBAAqBC;IACrBC,YAAY;IACZC,MAAM;AACR;AAEA,SAASF,OAAO;AACd,QAAQ,GACV;AAEA,OAAO,MAAMG,cAAqDd,cAChEe,WACA;AAEF,OAAO,MAAM,EAAEC,UAAUC,aAAY,EAAE,GAAGH,YAAY;AACtD,OAAO,MAAMI,0BAA0B,CAAIC,WACzClB,mBAAmBa,aAAa,CAACM,MAAMhB,mBAAmB,GAAKe,SAASC,MAAM"}
1
+ {"version":3,"sources":["treeContext.ts"],"sourcesContent":["import { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport { TreeItemType, TreeItemValue } from '../TreeItem';\nimport { SelectionMode } from '@fluentui/react-utilities';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport { ImmutableMap } from '../utils/ImmutableMap';\nimport { TreeCheckedChangeData, TreeNavigationData_unstable, TreeOpenChangeData } from '../Tree';\n\nexport type TreeContextValue = {\n level: number;\n selectionMode: 'none' | SelectionMode;\n appearance: 'subtle' | 'subtle-alpha' | 'transparent';\n size: 'small' | 'medium';\n openItems: ImmutableSet<TreeItemValue>;\n checkedItems: ImmutableMap<TreeItemValue, 'mixed' | boolean>;\n /**\n * requests root Tree component to respond to some tree item event,\n */\n requestTreeResponse(request: TreeItemRequest): void;\n};\n\nexport type TreeItemRequest = { itemType: TreeItemType } & (\n | OmitWithoutExpanding<TreeOpenChangeData, 'open'>\n | TreeNavigationData_unstable\n | OmitWithoutExpanding<TreeCheckedChangeData, 'checked' | 'selectionMode'>\n);\n\n// helper type that avoids the expansion of unions while inferring it, should work exactly the same as Omit\ntype OmitWithoutExpanding<P, K extends string | number | symbol> = P extends unknown ? Omit<P, K> : P;\n\nconst defaultContextValue: TreeContextValue = {\n level: 0,\n selectionMode: 'none',\n openItems: ImmutableSet.empty,\n checkedItems: ImmutableMap.empty,\n requestTreeResponse: noop,\n appearance: 'subtle',\n size: 'medium',\n};\n\nfunction noop() {\n /* noop */\n}\n\nexport const TreeContext: Context<TreeContextValue | undefined> = createContext<TreeContextValue | undefined>(\n undefined,\n);\n\nexport const { Provider: TreeProvider } = TreeContext;\nexport const useTreeContext_unstable = <T>(selector: ContextSelector<TreeContextValue, T>): T =>\n useContextSelector(TreeContext, (ctx = defaultContextValue) => selector(ctx));\n"],"names":["createContext","useContextSelector","ImmutableSet","ImmutableMap","defaultContextValue","level","selectionMode","openItems","empty","checkedItems","requestTreeResponse","noop","appearance","size","TreeContext","undefined","Provider","TreeProvider","useTreeContext_unstable","selector","ctx"],"mappings":"AAAA,SAAmCA,aAAa,EAAEC,kBAAkB,QAAQ,mCAAmC;AAG/G,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,wBAAwB;AAyBrD,MAAMC,sBAAwC;IAC5CC,OAAO;IACPC,eAAe;IACfC,WAAWL,aAAaM,KAAK;IAC7BC,cAAcN,aAAaK,KAAK;IAChCE,qBAAqBC;IACrBC,YAAY;IACZC,MAAM;AACR;AAEA,SAASF,OAAO;AACd,QAAQ,GACV;AAEA,OAAO,MAAMG,cAAqDd,cAChEe,WACA;AAEF,OAAO,MAAM,EAAEC,UAAUC,aAAY,EAAE,GAAGH,YAAY;AACtD,OAAO,MAAMI,0BAA0B,CAAIC,WACzClB,mBAAmBa,aAAa,CAACM,MAAMhB,mBAAmB,GAAKe,SAASC,MAAM"}
@@ -2,8 +2,13 @@ import * as React from 'react';
2
2
  import { createContext, useContextSelector } from '@fluentui/react-context-selector';
3
3
  const defaultContextValue = {
4
4
  value: '',
5
+ selectionRef: React.createRef(),
5
6
  layoutRef: React.createRef(),
6
7
  subtreeRef: React.createRef(),
8
+ actionsRef: React.createRef(),
9
+ expandIconRef: React.createRef(),
10
+ isActionsVisible: false,
11
+ isAsideVisible: false,
7
12
  itemType: 'leaf',
8
13
  open: false
9
14
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["treeItemContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport { TreeItemType } from '../TreeItem';\n\nexport type TreeItemContextValue = {\n layoutRef: React.Ref<HTMLDivElement>;\n subtreeRef: React.Ref<HTMLDivElement>;\n itemType: TreeItemType;\n value: string;\n open: boolean;\n};\n\nconst defaultContextValue: TreeItemContextValue = {\n value: '',\n layoutRef: React.createRef(),\n subtreeRef: React.createRef(),\n itemType: 'leaf',\n open: false,\n};\n\nexport const TreeItemContext: Context<TreeItemContextValue | undefined> = createContext<\n TreeItemContextValue | undefined\n>(undefined);\n\nexport const { Provider: TreeItemProvider } = TreeItemContext;\nexport const useTreeItemContext_unstable = <T>(selector: ContextSelector<TreeItemContextValue, T>): T =>\n useContextSelector(TreeItemContext, (ctx = defaultContextValue) => selector(ctx));\n"],"names":["React","createContext","useContextSelector","defaultContextValue","value","layoutRef","createRef","subtreeRef","itemType","open","TreeItemContext","undefined","Provider","TreeItemProvider","useTreeItemContext_unstable","selector","ctx"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAAmCC,aAAa,EAAEC,kBAAkB,QAAQ,mCAAmC;AAW/G,MAAMC,sBAA4C;IAChDC,OAAO;IACPC,WAAWL,MAAMM,SAAS;IAC1BC,YAAYP,MAAMM,SAAS;IAC3BE,UAAU;IACVC,MAAM,KAAK;AACb;AAEA,OAAO,MAAMC,kBAA6DT,cAExEU,WAAW;AAEb,OAAO,MAAM,EAAEC,UAAUC,iBAAgB,EAAE,GAAGH,gBAAgB;AAC9D,OAAO,MAAMI,8BAA8B,CAAIC,WAC7Cb,mBAAmBQ,iBAAiB,CAACM,MAAMb,mBAAmB,GAAKY,SAASC,MAAM"}
1
+ {"version":3,"sources":["treeItemContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { Context, ContextSelector, createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport type { TreeItemType, TreeItemValue } from '../TreeItem';\n\nexport type TreeItemContextValue = {\n isActionsVisible: boolean;\n isAsideVisible: boolean;\n selectionRef: React.Ref<HTMLInputElement>;\n actionsRef: React.Ref<HTMLDivElement>;\n expandIconRef: React.Ref<HTMLDivElement>;\n layoutRef: React.Ref<HTMLDivElement>;\n subtreeRef: React.Ref<HTMLDivElement>;\n itemType: TreeItemType;\n value: TreeItemValue;\n open: boolean;\n};\n\nconst defaultContextValue: TreeItemContextValue = {\n value: '',\n selectionRef: React.createRef(),\n layoutRef: React.createRef(),\n subtreeRef: React.createRef(),\n actionsRef: React.createRef(),\n expandIconRef: React.createRef(),\n isActionsVisible: false,\n isAsideVisible: false,\n itemType: 'leaf',\n open: false,\n};\n\nexport const TreeItemContext: Context<TreeItemContextValue | undefined> = createContext<\n TreeItemContextValue | undefined\n>(undefined);\n\nexport const { Provider: TreeItemProvider } = TreeItemContext;\nexport const useTreeItemContext_unstable = <T>(selector: ContextSelector<TreeItemContextValue, T>): T =>\n useContextSelector(TreeItemContext, (ctx = defaultContextValue) => selector(ctx));\n"],"names":["React","createContext","useContextSelector","defaultContextValue","value","selectionRef","createRef","layoutRef","subtreeRef","actionsRef","expandIconRef","isActionsVisible","isAsideVisible","itemType","open","TreeItemContext","undefined","Provider","TreeItemProvider","useTreeItemContext_unstable","selector","ctx"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAAmCC,aAAa,EAAEC,kBAAkB,QAAQ,mCAAmC;AAgB/G,MAAMC,sBAA4C;IAChDC,OAAO;IACPC,cAAcL,MAAMM,SAAS;IAC7BC,WAAWP,MAAMM,SAAS;IAC1BE,YAAYR,MAAMM,SAAS;IAC3BG,YAAYT,MAAMM,SAAS;IAC3BI,eAAeV,MAAMM,SAAS;IAC9BK,kBAAkB,KAAK;IACvBC,gBAAgB,KAAK;IACrBC,UAAU;IACVC,MAAM,KAAK;AACb;AAEA,OAAO,MAAMC,kBAA6Dd,cAExEe,WAAW;AAEb,OAAO,MAAM,EAAEC,UAAUC,iBAAgB,EAAE,GAAGH,gBAAgB;AAC9D,OAAO,MAAMI,8BAA8B,CAAIC,WAC7ClB,mBAAmBa,iBAAiB,CAACM,MAAMlB,mBAAmB,GAAKiB,SAASC,MAAM"}
@@ -1,18 +1,21 @@
1
1
  import { useControllableState } from '@fluentui/react-utilities';
2
2
  import * as React from 'react';
3
3
  import { ImmutableSet } from '../utils/ImmutableSet';
4
+ import { createOpenItems } from '../utils/createOpenItems';
4
5
  /**
5
6
  * @internal
6
7
  */ export function useControllableOpenItems(props) {
7
8
  return useControllableState({
8
- state: React.useMemo(()=>props.openItems && ImmutableSet.create(props.openItems), [
9
+ state: React.useMemo(()=>props.openItems && createOpenItems(props.openItems), [
9
10
  props.openItems
10
11
  ]),
11
- defaultState: props.defaultOpenItems && (()=>ImmutableSet.create(props.defaultOpenItems)),
12
+ defaultState: ()=>createOpenItems(props.defaultOpenItems),
12
13
  initialState: ImmutableSet.empty
13
14
  });
14
15
  }
15
- export function createNextOpenItems(data, previousOpenItems) {
16
+ /**
17
+ * @internal
18
+ */ export function createNextOpenItems(data, previousOpenItems) {
16
19
  if (data.value === null) {
17
20
  return previousOpenItems;
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["useControllableOpenItems.ts"],"sourcesContent":["import { useControllableState } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport type { TreeOpenChangeData, TreeProps } from '../components/Tree/Tree.types';\nimport type { TreeItemValue } from '../components/TreeItem/TreeItem.types';\n\n/**\n * @internal\n */\nexport function useControllableOpenItems(props: Pick<TreeProps, 'openItems' | 'defaultOpenItems'>) {\n return useControllableState({\n state: React.useMemo(() => props.openItems && ImmutableSet.create(props.openItems), [props.openItems]),\n defaultState: props.defaultOpenItems && (() => ImmutableSet.create(props.defaultOpenItems)),\n initialState: ImmutableSet.empty,\n });\n}\n\nexport function createNextOpenItems(\n data: Pick<TreeOpenChangeData, 'value' | 'open'>,\n previousOpenItems: ImmutableSet<TreeItemValue>,\n): ImmutableSet<TreeItemValue> {\n if (data.value === null) {\n return previousOpenItems;\n }\n const previousOpenItemsHasId = previousOpenItems.has(data.value);\n if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {\n return previousOpenItems;\n }\n const nextOpenItems = ImmutableSet.create(previousOpenItems);\n return data.open ? nextOpenItems.add(data.value) : nextOpenItems.delete(data.value);\n}\n"],"names":["useControllableState","React","ImmutableSet","useControllableOpenItems","props","state","useMemo","openItems","create","defaultState","defaultOpenItems","initialState","empty","createNextOpenItems","data","previousOpenItems","value","previousOpenItemsHasId","has","open","nextOpenItems","add","delete"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,4BAA4B;AACjE,YAAYC,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,wBAAwB;AAIrD;;CAEC,GACD,OAAO,SAASC,yBAAyBC,KAAwD,EAAE;IACjG,OAAOJ,qBAAqB;QAC1BK,OAAOJ,MAAMK,OAAO,CAAC,IAAMF,MAAMG,SAAS,IAAIL,aAAaM,MAAM,CAACJ,MAAMG,SAAS,GAAG;YAACH,MAAMG,SAAS;SAAC;QACrGE,cAAcL,MAAMM,gBAAgB,IAAK,CAAA,IAAMR,aAAaM,MAAM,CAACJ,MAAMM,gBAAgB,CAAA;QACzFC,cAAcT,aAAaU,KAAK;IAClC;AACF,CAAC;AAED,OAAO,SAASC,oBACdC,IAAgD,EAChDC,iBAA8C,EACjB;IAC7B,IAAID,KAAKE,KAAK,KAAK,IAAI,EAAE;QACvB,OAAOD;IACT,CAAC;IACD,MAAME,yBAAyBF,kBAAkBG,GAAG,CAACJ,KAAKE,KAAK;IAC/D,IAAIF,KAAKK,IAAI,GAAGF,yBAAyB,CAACA,sBAAsB,EAAE;QAChE,OAAOF;IACT,CAAC;IACD,MAAMK,gBAAgBlB,aAAaM,MAAM,CAACO;IAC1C,OAAOD,KAAKK,IAAI,GAAGC,cAAcC,GAAG,CAACP,KAAKE,KAAK,IAAII,cAAcE,MAAM,CAACR,KAAKE,KAAK,CAAC;AACrF,CAAC"}
1
+ {"version":3,"sources":["useControllableOpenItems.ts"],"sourcesContent":["import { useControllableState } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { ImmutableSet } from '../utils/ImmutableSet';\nimport type { TreeItemValue } from '../components/TreeItem/TreeItem.types';\nimport { createOpenItems } from '../utils/createOpenItems';\nimport { TreeOpenChangeData, TreeProps } from '../Tree';\n\n/**\n * @internal\n */\nexport function useControllableOpenItems(props: Pick<TreeProps, 'openItems' | 'defaultOpenItems'>) {\n return useControllableState({\n state: React.useMemo(() => props.openItems && createOpenItems(props.openItems), [props.openItems]),\n defaultState: () => createOpenItems(props.defaultOpenItems),\n initialState: ImmutableSet.empty,\n });\n}\n\n/**\n * @internal\n */\nexport function createNextOpenItems(\n data: Pick<TreeOpenChangeData, 'value' | 'open'>,\n previousOpenItems: ImmutableSet<TreeItemValue>,\n): ImmutableSet<TreeItemValue> {\n if (data.value === null) {\n return previousOpenItems;\n }\n const previousOpenItemsHasId = previousOpenItems.has(data.value);\n if (data.open ? previousOpenItemsHasId : !previousOpenItemsHasId) {\n return previousOpenItems;\n }\n const nextOpenItems = ImmutableSet.create(previousOpenItems);\n return data.open ? nextOpenItems.add(data.value) : nextOpenItems.delete(data.value);\n}\n"],"names":["useControllableState","React","ImmutableSet","createOpenItems","useControllableOpenItems","props","state","useMemo","openItems","defaultState","defaultOpenItems","initialState","empty","createNextOpenItems","data","previousOpenItems","value","previousOpenItemsHasId","has","open","nextOpenItems","create","add","delete"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,4BAA4B;AACjE,YAAYC,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,wBAAwB;AAErD,SAASC,eAAe,QAAQ,2BAA2B;AAG3D;;CAEC,GACD,OAAO,SAASC,yBAAyBC,KAAwD,EAAE;IACjG,OAAOL,qBAAqB;QAC1BM,OAAOL,MAAMM,OAAO,CAAC,IAAMF,MAAMG,SAAS,IAAIL,gBAAgBE,MAAMG,SAAS,GAAG;YAACH,MAAMG,SAAS;SAAC;QACjGC,cAAc,IAAMN,gBAAgBE,MAAMK,gBAAgB;QAC1DC,cAAcT,aAAaU,KAAK;IAClC;AACF,CAAC;AAED;;CAEC,GACD,OAAO,SAASC,oBACdC,IAAgD,EAChDC,iBAA8C,EACjB;IAC7B,IAAID,KAAKE,KAAK,KAAK,IAAI,EAAE;QACvB,OAAOD;IACT,CAAC;IACD,MAAME,yBAAyBF,kBAAkBG,GAAG,CAACJ,KAAKE,KAAK;IAC/D,IAAIF,KAAKK,IAAI,GAAGF,yBAAyB,CAACA,sBAAsB,EAAE;QAChE,OAAOF;IACT,CAAC;IACD,MAAMK,gBAAgBlB,aAAamB,MAAM,CAACN;IAC1C,OAAOD,KAAKK,IAAI,GAAGC,cAAcE,GAAG,CAACR,KAAKE,KAAK,IAAII,cAAcG,MAAM,CAACT,KAAKE,KAAK,CAAC;AACrF,CAAC"}
@@ -1,41 +1,34 @@
1
+ import { getNativeElementProps, useEventCallback } from '@fluentui/react-utilities';
1
2
  import * as React from 'react';
2
3
  import * as ReactDOM from 'react-dom';
3
- import { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
4
- import { useControllableOpenItems, useNestedTreeNavigation, useNestedControllableCheckedItems, createNextOpenItems } from '../../hooks';
5
- import { treeDataTypes } from '../../utils/tokens';
4
+ import { createOpenItems } from '../utils/createOpenItems';
5
+ import { createCheckedItems } from '../utils/createCheckedItems';
6
+ import { treeDataTypes } from '../utils/tokens';
6
7
  /**
7
- * Create the state required to render the root level Tree.
8
+ * Create the state required to render the root level BaseTree.
8
9
  *
9
- * @param props - props from this instance of Tree
10
- * @param ref - reference to root HTMLElement of Tree
10
+ * @param props - props from this instance of BaseTree
11
+ * @param ref - reference to root HTMLElement of BaseTree
11
12
  */ export function useRootTree(props, ref) {
12
13
  warnIfNoProperPropsRootTree(props);
13
14
  const { appearance ='subtle' , size ='medium' , selectionMode ='none' } = props;
14
- const [openItems, setOpenItems] = useControllableOpenItems(props);
15
- const [checkedItems] = useNestedControllableCheckedItems(props);
16
- const [navigate, navigationRef] = useNestedTreeNavigation();
15
+ const openItems = React.useMemo(()=>createOpenItems(props.openItems), [
16
+ props.openItems
17
+ ]);
18
+ const checkedItems = React.useMemo(()=>createCheckedItems(props.checkedItems), [
19
+ props.checkedItems
20
+ ]);
17
21
  const requestOpenChange = (data)=>{
18
22
  var _props_onOpenChange;
19
- (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, data.event, data);
20
- if (data.event.isDefaultPrevented()) {
21
- return;
22
- }
23
- return setOpenItems(createNextOpenItems(data, openItems));
23
+ return (_props_onOpenChange = props.onOpenChange) === null || _props_onOpenChange === void 0 ? void 0 : _props_onOpenChange.call(props, data.event, data);
24
24
  };
25
25
  const requestCheckedChange = (data)=>{
26
26
  var _props_onCheckedChange;
27
- (_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, data.event, data);
28
- // TODO:
29
- // we should implement the logic for nested tree selection
30
- // return setCheckedItems(checkedItems);
27
+ return (_props_onCheckedChange = props.onCheckedChange) === null || _props_onCheckedChange === void 0 ? void 0 : _props_onCheckedChange.call(props, data.event, data);
31
28
  };
32
29
  const requestNavigation = (data)=>{
33
30
  var _props_onNavigation_unstable;
34
31
  (_props_onNavigation_unstable = props.onNavigation_unstable) === null || _props_onNavigation_unstable === void 0 ? void 0 : _props_onNavigation_unstable.call(props, data.event, data);
35
- if (data.event.isDefaultPrevented()) {
36
- return;
37
- }
38
- navigate(data);
39
32
  if (data.type === treeDataTypes.ArrowDown || data.type === treeDataTypes.ArrowUp) {
40
33
  data.event.preventDefault();
41
34
  }
@@ -126,8 +119,8 @@ import { treeDataTypes } from '../../utils/tokens';
126
119
  checkedItems,
127
120
  requestTreeResponse,
128
121
  root: getNativeElementProps('div', {
129
- ref: useMergedRefs(navigationRef, ref),
130
- role: 'tree',
122
+ ref,
123
+ role: 'baseTree',
131
124
  'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined,
132
125
  ...props
133
126
  })
@@ -137,7 +130,7 @@ function warnIfNoProperPropsRootTree(props) {
137
130
  if (process.env.NODE_ENV === 'development') {
138
131
  if (!props['aria-label'] && !props['aria-labelledby']) {
139
132
  // eslint-disable-next-line no-console
140
- console.warn('Tree must have either a `aria-label` or `aria-labelledby` property defined');
133
+ console.warn('BaseTree must have either a `aria-label` or `aria-labelledby` property defined');
141
134
  }
142
135
  }
143
136
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useRootTree.ts"],"sourcesContent":["import { SelectionMode, getNativeElementProps, useEventCallback } from '@fluentui/react-utilities';\nimport type {\n TreeCheckedChangeData,\n TreeNavigationData_unstable,\n TreeOpenChangeData,\n TreeProps,\n TreeState,\n} from '../Tree';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { TreeItemRequest } from '../contexts/treeContext';\nimport { createOpenItems } from '../utils/createOpenItems';\nimport { createCheckedItems } from '../utils/createCheckedItems';\nimport { treeDataTypes } from '../utils/tokens';\n\n/**\n * Create the state required to render the root level BaseTree.\n *\n * @param props - props from this instance of BaseTree\n * @param ref - reference to root HTMLElement of BaseTree\n */\nexport function useRootTree(\n props: Pick<\n TreeProps,\n | 'selectionMode'\n | 'appearance'\n | 'size'\n | 'openItems'\n | 'checkedItems'\n | 'onOpenChange'\n | 'onCheckedChange'\n | 'onNavigation_unstable'\n | 'aria-label'\n | 'aria-labelledby'\n >,\n ref: React.Ref<HTMLElement>,\n): TreeState {\n warnIfNoProperPropsRootTree(props);\n\n const { appearance = 'subtle', size = 'medium', selectionMode = 'none' } = props;\n\n const openItems = React.useMemo(() => createOpenItems(props.openItems), [props.openItems]);\n const checkedItems = React.useMemo(() => createCheckedItems(props.checkedItems), [props.checkedItems]);\n const requestOpenChange = (data: TreeOpenChangeData) => props.onOpenChange?.(data.event, data);\n\n const requestCheckedChange = (data: TreeCheckedChangeData) => props.onCheckedChange?.(data.event, data);\n const requestNavigation = (data: TreeNavigationData_unstable) => {\n props.onNavigation_unstable?.(data.event, data);\n if (data.type === treeDataTypes.ArrowDown || data.type === treeDataTypes.ArrowUp) {\n data.event.preventDefault();\n }\n };\n\n const requestTreeResponse = useEventCallback((request: TreeItemRequest) => {\n switch (request.type) {\n case treeDataTypes.Click:\n case treeDataTypes.ExpandIconClick: {\n return ReactDOM.unstable_batchedUpdates(() => {\n requestOpenChange({ ...request, open: request.itemType === 'branch' && !openItems.has(request.value) });\n requestNavigation({ ...request, type: treeDataTypes.Click });\n });\n }\n case treeDataTypes.ArrowRight: {\n if (request.itemType === 'leaf') {\n return;\n }\n const open = openItems.has(request.value);\n if (!open) {\n return requestOpenChange({ ...request, open: true });\n }\n return requestNavigation(request);\n }\n case treeDataTypes.Enter: {\n const open = openItems.has(request.value);\n return requestOpenChange({ ...request, open: request.itemType === 'branch' && !open });\n }\n case treeDataTypes.ArrowLeft: {\n const open = openItems.has(request.value);\n if (open && request.itemType === 'branch') {\n return requestOpenChange({ ...request, open: false, type: treeDataTypes.ArrowLeft });\n }\n return requestNavigation({ ...request, type: treeDataTypes.ArrowLeft });\n }\n case treeDataTypes.End:\n case treeDataTypes.Home:\n case treeDataTypes.ArrowUp:\n case treeDataTypes.ArrowDown:\n case treeDataTypes.TypeAhead:\n return requestNavigation({ ...request, target: request.event.currentTarget });\n case treeDataTypes.Change: {\n const previousCheckedValue = checkedItems.get(request.value);\n return requestCheckedChange({\n ...request,\n selectionMode: selectionMode as SelectionMode,\n checked: previousCheckedValue === 'mixed' ? true : !previousCheckedValue,\n });\n }\n }\n });\n\n return {\n components: {\n root: 'div',\n },\n selectionMode,\n open: true,\n appearance,\n size,\n level: 1,\n openItems,\n checkedItems,\n requestTreeResponse,\n root: getNativeElementProps('div', {\n ref,\n role: 'baseTree',\n 'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined,\n ...props,\n }),\n };\n}\n\nfunction warnIfNoProperPropsRootTree(props: Pick<TreeProps, 'aria-label' | 'aria-labelledby'>) {\n if (process.env.NODE_ENV === 'development') {\n if (!props['aria-label'] && !props['aria-labelledby']) {\n // eslint-disable-next-line no-console\n console.warn('BaseTree must have either a `aria-label` or `aria-labelledby` property defined');\n }\n }\n}\n"],"names":["getNativeElementProps","useEventCallback","React","ReactDOM","createOpenItems","createCheckedItems","treeDataTypes","useRootTree","props","ref","warnIfNoProperPropsRootTree","appearance","size","selectionMode","openItems","useMemo","checkedItems","requestOpenChange","data","onOpenChange","event","requestCheckedChange","onCheckedChange","requestNavigation","onNavigation_unstable","type","ArrowDown","ArrowUp","preventDefault","requestTreeResponse","request","Click","ExpandIconClick","unstable_batchedUpdates","open","itemType","has","value","ArrowRight","Enter","ArrowLeft","End","Home","TypeAhead","target","currentTarget","Change","previousCheckedValue","get","checked","components","root","level","role","undefined","process","env","NODE_ENV","console","warn"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import * as React from 'react';
2
+ import { useTreeContext_unstable, useTreeItemContext_unstable } from '../contexts/index';
2
3
  import { getNativeElementProps, useMergedRefs } from '@fluentui/react-utilities';
3
- import { useTreeContext_unstable, useTreeItemContext_unstable } from '../../contexts';
4
4
  /**
5
- * Create the state required to render a sub-level Tree.
5
+ * Create the state required to render a sub-level BaseTree.
6
6
  *
7
- * @param props - props from this instance of Tree
8
- * @param ref - reference to root HTMLElement of Tree
7
+ * @param props - props from this instance of BaseTree
8
+ * @param ref - reference to root HTMLElement of BaseTree
9
9
  */ export function useSubtree(props, ref) {
10
10
  const contextAppearance = useTreeContext_unstable((ctx)=>ctx.appearance);
11
11
  const contextSize = useTreeContext_unstable((ctx)=>ctx.size);
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useSubtree.ts"],"sourcesContent":["import * as React from 'react';\nimport { TreeProps, TreeState } from '../Tree';\nimport { useTreeContext_unstable, useTreeItemContext_unstable } from '../contexts/index';\nimport { getNativeElementProps, useMergedRefs } from '@fluentui/react-utilities';\n\n/**\n * Create the state required to render a sub-level BaseTree.\n *\n * @param props - props from this instance of BaseTree\n * @param ref - reference to root HTMLElement of BaseTree\n */\nexport function useSubtree(props: Pick<TreeProps, 'appearance' | 'size'>, ref: React.Ref<HTMLElement>): TreeState {\n const contextAppearance = useTreeContext_unstable(ctx => ctx.appearance);\n const contextSize = useTreeContext_unstable(ctx => ctx.size);\n const subtreeRef = useTreeItemContext_unstable(ctx => ctx.subtreeRef);\n const value = useTreeItemContext_unstable(ctx => ctx.value);\n\n const { appearance = contextAppearance ?? 'subtle', size = contextSize ?? 'medium' } = props;\n\n const parentLevel = useTreeContext_unstable(ctx => ctx.level);\n const selectionMode = useTreeContext_unstable(ctx => ctx.selectionMode);\n const openItems = useTreeContext_unstable(ctx => ctx.openItems);\n const checkedItems = useTreeContext_unstable(ctx => ctx.checkedItems);\n const requestTreeResponse = useTreeContext_unstable(ctx => ctx.requestTreeResponse);\n\n const open = openItems.has(value);\n\n return {\n open,\n components: {\n root: 'div',\n },\n appearance,\n size,\n selectionMode,\n level: parentLevel + 1,\n root: getNativeElementProps('div', {\n ref: useMergedRefs(ref, subtreeRef),\n role: 'group',\n ...props,\n }),\n openItems,\n checkedItems,\n requestTreeResponse,\n };\n}\n"],"names":["React","useTreeContext_unstable","useTreeItemContext_unstable","getNativeElementProps","useMergedRefs","useSubtree","props","ref","contextAppearance","ctx","appearance","contextSize","size","subtreeRef","value","parentLevel","level","selectionMode","openItems","checkedItems","requestTreeResponse","open","has","components","root","role"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,uBAAuB,EAAEC,2BAA2B,QAAQ,oBAAoB;AACzF,SAASC,qBAAqB,EAAEC,aAAa,QAAQ,4BAA4B;AAEjF;;;;;CAKC,GACD,OAAO,SAASC,WAAWC,KAA6C,EAAEC,GAA2B,EAAa;IAChH,MAAMC,oBAAoBP,wBAAwBQ,CAAAA,MAAOA,IAAIC,UAAU;IACvE,MAAMC,cAAcV,wBAAwBQ,CAAAA,MAAOA,IAAIG,IAAI;IAC3D,MAAMC,aAAaX,4BAA4BO,CAAAA,MAAOA,IAAII,UAAU;IACpE,MAAMC,QAAQZ,4BAA4BO,CAAAA,MAAOA,IAAIK,KAAK;IAE1D,MAAM,EAAEJ,YAAaF,8BAAAA,+BAAAA,oBAAqB,QAAQ,CAAA,EAAEI,MAAOD,wBAAAA,yBAAAA,cAAe,QAAQ,CAAA,EAAE,GAAGL;IAEvF,MAAMS,cAAcd,wBAAwBQ,CAAAA,MAAOA,IAAIO,KAAK;IAC5D,MAAMC,gBAAgBhB,wBAAwBQ,CAAAA,MAAOA,IAAIQ,aAAa;IACtE,MAAMC,YAAYjB,wBAAwBQ,CAAAA,MAAOA,IAAIS,SAAS;IAC9D,MAAMC,eAAelB,wBAAwBQ,CAAAA,MAAOA,IAAIU,YAAY;IACpE,MAAMC,sBAAsBnB,wBAAwBQ,CAAAA,MAAOA,IAAIW,mBAAmB;IAElF,MAAMC,OAAOH,UAAUI,GAAG,CAACR;IAE3B,OAAO;QACLO;QACAE,YAAY;YACVC,MAAM;QACR;QACAd;QACAE;QACAK;QACAD,OAAOD,cAAc;QACrBS,MAAMrB,sBAAsB,OAAO;YACjCI,KAAKH,cAAcG,KAAKM;YACxBY,MAAM;YACN,GAAGnB,KAAK;QACV;QACAY;QACAC;QACAC;IACF;AACF,CAAC"}
package/lib/index.js CHANGED
@@ -1,8 +1,8 @@
1
- export { Tree, treeClassNames, renderTree_unstable, useTreeStyles_unstable, useTree_unstable, useTreeContextValues_unstable } from './Tree';
1
+ export { Tree, treeClassNames, useTree_unstable, useTreeStyles_unstable, useTreeContextValues_unstable, renderTree_unstable } from './Tree';
2
+ export { FlatTree, flatTreeClassNames, useFlatTree_unstable, useFlatTreeStyles_unstable, useFlatTreeContextValues_unstable, renderFlatTree_unstable, useHeadlessFlatTree_unstable } from './FlatTree';
2
3
  export { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';
3
4
  export { treeItemLevelToken } from './utils/tokens';
4
5
  export { TreeItem, treeItemClassNames, renderTreeItem_unstable, useTreeItemStyles_unstable, useTreeItemContextValues_unstable, useTreeItem_unstable } from './TreeItem';
5
6
  export { TreeItemLayout, treeItemLayoutClassNames, renderTreeItemLayout_unstable, useTreeItemLayoutStyles_unstable, useTreeItemLayout_unstable } from './TreeItemLayout';
6
7
  export { TreeItemPersonaLayout, treeItemPersonaLayoutClassNames, renderTreeItemPersonaLayout_unstable, useTreeItemPersonaLayoutStyles_unstable, useTreeItemPersonaLayout_unstable } from './TreeItemPersonaLayout';
7
- export { useFlatTree_unstable } from './hooks/index';
8
8
  export { flattenTree_unstable } from './utils/flattenTree';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n renderTree_unstable,\n useTreeStyles_unstable,\n useTree_unstable,\n useTreeContextValues_unstable,\n} from './Tree';\nexport type {\n TreeProps,\n TreeState,\n TreeSlots,\n TreeSelectionValue,\n TreeOpenChangeData,\n TreeOpenChangeEvent,\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationEvent_unstable,\n TreeNavigationData_unstable,\n} from './Tree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots, TreeItemValue } from './TreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { useFlatTree_unstable } from './hooks/index';\nexport type { FlatTreeItem, FlatTreeItemProps, FlatTreeProps, FlatTree } from './hooks/index';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { NestedTreeItem } from './utils/flattenTree';\n"],"names":["Tree","treeClassNames","renderTree_unstable","useTreeStyles_unstable","useTree_unstable","useTreeContextValues_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItemContextValues_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","useFlatTree_unstable","flattenTree_unstable"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,mBAAmB,EACnBC,sBAAsB,EACtBC,gBAAgB,EAChBC,6BAA6B,QACxB,SAAS;AAchB,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,aAAa;AAGlH,SAASC,kBAAkB,QAAQ,iBAAiB;AAEpD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,iCAAiC,EACjCC,oBAAoB,QACf,aAAa;AAGpB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,mBAAmB;AAG1B,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,0BAA0B;AAOjC,SAASC,oBAAoB,QAAQ,gBAAgB;AAGrD,SAASC,oBAAoB,QAAQ,sBAAsB"}
1
+ {"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Tree,\n treeClassNames,\n useTree_unstable,\n useTreeStyles_unstable,\n useTreeContextValues_unstable,\n renderTree_unstable,\n} from './Tree';\n\nexport type {\n TreeSlots,\n TreeProps,\n TreeState,\n TreeContextValues,\n TreeOpenChangeData,\n TreeSelectionValue,\n TreeOpenChangeEvent,\n TreeCheckedChangeData,\n TreeCheckedChangeEvent,\n TreeNavigationData_unstable,\n TreeNavigationEvent_unstable,\n} from './Tree';\n\nexport {\n FlatTree,\n flatTreeClassNames,\n useFlatTree_unstable,\n useFlatTreeStyles_unstable,\n useFlatTreeContextValues_unstable,\n renderFlatTree_unstable,\n useHeadlessFlatTree_unstable,\n} from './FlatTree';\n\nexport type {\n FlatTreeSlots,\n FlatTreeProps,\n FlatTreeState,\n HeadlessFlatTree,\n HeadlessFlatTreeItem,\n HeadlessFlatTreeOptions,\n HeadlessFlatTreeItemProps,\n} from './FlatTree';\n\nexport { TreeProvider, useTreeContext_unstable, useTreeItemContext_unstable, TreeItemProvider } from './contexts';\nexport type { TreeContextValue, TreeItemContextValue } from './contexts';\n\nexport { treeItemLevelToken } from './utils/tokens';\n\nexport {\n TreeItem,\n treeItemClassNames,\n renderTreeItem_unstable,\n useTreeItemStyles_unstable,\n useTreeItemContextValues_unstable,\n useTreeItem_unstable,\n} from './TreeItem';\nexport type { TreeItemProps, TreeItemState, TreeItemSlots, TreeItemValue } from './TreeItem';\n\nexport {\n TreeItemLayout,\n treeItemLayoutClassNames,\n renderTreeItemLayout_unstable,\n useTreeItemLayoutStyles_unstable,\n useTreeItemLayout_unstable,\n} from './TreeItemLayout';\nexport type { TreeItemLayoutProps, TreeItemLayoutSlots, TreeItemLayoutState } from './TreeItemLayout';\n\nexport {\n TreeItemPersonaLayout,\n treeItemPersonaLayoutClassNames,\n renderTreeItemPersonaLayout_unstable,\n useTreeItemPersonaLayoutStyles_unstable,\n useTreeItemPersonaLayout_unstable,\n} from './TreeItemPersonaLayout';\nexport type {\n TreeItemPersonaLayoutProps,\n TreeItemPersonaLayoutSlots,\n TreeItemPersonaLayoutState,\n} from './TreeItemPersonaLayout';\n\nexport { flattenTree_unstable } from './utils/flattenTree';\nexport type { FlattenTreeItem } from './utils/flattenTree';\n"],"names":["Tree","treeClassNames","useTree_unstable","useTreeStyles_unstable","useTreeContextValues_unstable","renderTree_unstable","FlatTree","flatTreeClassNames","useFlatTree_unstable","useFlatTreeStyles_unstable","useFlatTreeContextValues_unstable","renderFlatTree_unstable","useHeadlessFlatTree_unstable","TreeProvider","useTreeContext_unstable","useTreeItemContext_unstable","TreeItemProvider","treeItemLevelToken","TreeItem","treeItemClassNames","renderTreeItem_unstable","useTreeItemStyles_unstable","useTreeItemContextValues_unstable","useTreeItem_unstable","TreeItemLayout","treeItemLayoutClassNames","renderTreeItemLayout_unstable","useTreeItemLayoutStyles_unstable","useTreeItemLayout_unstable","TreeItemPersonaLayout","treeItemPersonaLayoutClassNames","renderTreeItemPersonaLayout_unstable","useTreeItemPersonaLayoutStyles_unstable","useTreeItemPersonaLayout_unstable","flattenTree_unstable"],"mappings":"AAAA,SACEA,IAAI,EACJC,cAAc,EACdC,gBAAgB,EAChBC,sBAAsB,EACtBC,6BAA6B,EAC7BC,mBAAmB,QACd,SAAS;AAgBhB,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,oBAAoB,EACpBC,0BAA0B,EAC1BC,iCAAiC,EACjCC,uBAAuB,EACvBC,4BAA4B,QACvB,aAAa;AAYpB,SAASC,YAAY,EAAEC,uBAAuB,EAAEC,2BAA2B,EAAEC,gBAAgB,QAAQ,aAAa;AAGlH,SAASC,kBAAkB,QAAQ,iBAAiB;AAEpD,SACEC,QAAQ,EACRC,kBAAkB,EAClBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,iCAAiC,EACjCC,oBAAoB,QACf,aAAa;AAGpB,SACEC,cAAc,EACdC,wBAAwB,EACxBC,6BAA6B,EAC7BC,gCAAgC,EAChCC,0BAA0B,QACrB,mBAAmB;AAG1B,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,oCAAoC,EACpCC,uCAAuC,EACvCC,iCAAiC,QAC5B,0BAA0B;AAOjC,SAASC,oBAAoB,QAAQ,sBAAsB"}
@@ -29,9 +29,13 @@ const emptyImmutableMap = createImmutableMap();
29
29
  dangerouslyGetInternalMap_unstable: ()=>internalMap
30
30
  };
31
31
  }
32
+ function isImmutableMap(value) {
33
+ return typeof value === 'object' && value !== null && 'dangerouslyGetInternalMap_unstable' in value;
34
+ }
32
35
  export const ImmutableMap = {
33
36
  empty: emptyImmutableMap,
34
37
  create: createImmutableMap,
38
+ isImmutableMap,
35
39
  // eslint-disable-next-line @typescript-eslint/naming-convention
36
40
  dangerouslyCreate_unstable: dangerouslyCreateImmutableMap
37
41
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["ImmutableMap.ts"],"sourcesContent":["export interface ImmutableMap<Key, Value> {\n clear(): ImmutableMap<Key, Value>;\n delete(key: Key): ImmutableMap<Key, Value>;\n /**\n * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.\n * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.\n */\n get(key: Key): Value | undefined;\n /**\n * @returns boolean indicating whether an element with the specified key exists or not.\n */\n has(key: Key): boolean;\n /**\n * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.\n */\n set(key: Key, value: Value): ImmutableMap<Key, Value>;\n /**\n * @returns the number of elements in the Map.\n */\n readonly size: number;\n /** Iterates over entries in the Map. */\n [Symbol.iterator](): IterableIterator<[Key, Value]>;\n /**\n * @internal\n * Exposes the internal map used to store values.\n * This is an internal API and should not be used directly.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalMap_unstable(): Map<Key, Value>;\n}\n\nconst emptyImmutableMap = createImmutableMap<never, never>();\n\n/**\n * properly creates an ImmutableMap instance from an iterable\n */\nfunction createImmutableMap<Key, Value>(iterable?: Iterable<[Key, Value]>): ImmutableMap<Key, Value> {\n const internalMap = new Map(iterable);\n return dangerouslyCreateImmutableMap(internalMap);\n}\n/**\n * Avoid using *dangerouslyCreateImmutableMap*, since this method will expose internally used set, use createImmutableMap instead,\n * @param internalMap - a set that is used internally to store values.\n */\nfunction dangerouslyCreateImmutableMap<Key, Value>(internalMap: Map<Key, Value>): ImmutableMap<Key, Value> {\n return {\n size: internalMap.size,\n set: (key, value) => {\n const nextSet = new Map(internalMap);\n nextSet.set(key, value);\n return dangerouslyCreateImmutableMap(nextSet);\n },\n get: key => internalMap.get(key),\n clear: () => emptyImmutableMap,\n delete(value) {\n const nextSet = new Map(internalMap);\n nextSet.delete(value);\n return dangerouslyCreateImmutableMap(nextSet);\n },\n has: value => internalMap.has(value),\n [Symbol.iterator]: () => internalMap[Symbol.iterator](),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalMap_unstable: () => internalMap,\n };\n}\n\nexport const ImmutableMap = {\n empty: emptyImmutableMap,\n create: createImmutableMap,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyCreate_unstable: dangerouslyCreateImmutableMap,\n};\n"],"names":["emptyImmutableMap","createImmutableMap","iterable","internalMap","Map","dangerouslyCreateImmutableMap","size","set","key","value","nextSet","get","clear","delete","has","Symbol","iterator","dangerouslyGetInternalMap_unstable","ImmutableMap","empty","create","dangerouslyCreate_unstable"],"mappings":"AA+BA,MAAMA,oBAAoBC;AAE1B;;CAEC,GACD,SAASA,mBAA+BC,QAAiC,EAA4B;IACnG,MAAMC,cAAc,IAAIC,IAAIF;IAC5B,OAAOG,8BAA8BF;AACvC;AACA;;;CAGC,GACD,SAASE,8BAA0CF,WAA4B,EAA4B;IACzG,OAAO;QACLG,MAAMH,YAAYG,IAAI;QACtBC,KAAK,CAACC,KAAKC,QAAU;YACnB,MAAMC,UAAU,IAAIN,IAAID;YACxBO,QAAQH,GAAG,CAACC,KAAKC;YACjB,OAAOJ,8BAA8BK;QACvC;QACAC,KAAKH,CAAAA,MAAOL,YAAYQ,GAAG,CAACH;QAC5BI,OAAO,IAAMZ;QACba,QAAOJ,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIN,IAAID;YACxBO,QAAQG,MAAM,CAACJ;YACf,OAAOJ,8BAA8BK;QACvC;QACAI,KAAKL,CAAAA,QAASN,YAAYW,GAAG,CAACL;QAC9B,CAACM,OAAOC,QAAQ,CAAC,EAAE,IAAMb,WAAW,CAACY,OAAOC,QAAQ,CAAC;QACrD,gEAAgE;QAChEC,oCAAoC,IAAMd;IAC5C;AACF;AAEA,OAAO,MAAMe,eAAe;IAC1BC,OAAOnB;IACPoB,QAAQnB;IACR,gEAAgE;IAChEoB,4BAA4BhB;AAC9B,EAAE"}
1
+ {"version":3,"sources":["ImmutableMap.ts"],"sourcesContent":["export interface ImmutableMap<Key, Value> {\n clear(): ImmutableMap<Key, Value>;\n delete(key: Key): ImmutableMap<Key, Value>;\n /**\n * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.\n * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.\n */\n get(key: Key): Value | undefined;\n /**\n * @returns boolean indicating whether an element with the specified key exists or not.\n */\n has(key: Key): boolean;\n /**\n * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.\n */\n set(key: Key, value: Value): ImmutableMap<Key, Value>;\n /**\n * @returns the number of elements in the Map.\n */\n readonly size: number;\n /** Iterates over entries in the Map. */\n [Symbol.iterator](): IterableIterator<[Key, Value]>;\n /**\n * @internal\n * Exposes the internal map used to store values.\n * This is an internal API and should not be used directly.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalMap_unstable(): Map<Key, Value>;\n}\n\nconst emptyImmutableMap = createImmutableMap<never, never>();\n\n/**\n * properly creates an ImmutableMap instance from an iterable\n */\nfunction createImmutableMap<Key, Value>(iterable?: Iterable<[Key, Value]>): ImmutableMap<Key, Value> {\n const internalMap = new Map(iterable);\n return dangerouslyCreateImmutableMap(internalMap);\n}\n/**\n * Avoid using *dangerouslyCreateImmutableMap*, since this method will expose internally used set, use createImmutableMap instead,\n * @param internalMap - a set that is used internally to store values.\n */\nfunction dangerouslyCreateImmutableMap<Key, Value>(internalMap: Map<Key, Value>): ImmutableMap<Key, Value> {\n return {\n size: internalMap.size,\n set: (key, value) => {\n const nextSet = new Map(internalMap);\n nextSet.set(key, value);\n return dangerouslyCreateImmutableMap(nextSet);\n },\n get: key => internalMap.get(key),\n clear: () => emptyImmutableMap,\n delete(value) {\n const nextSet = new Map(internalMap);\n nextSet.delete(value);\n return dangerouslyCreateImmutableMap(nextSet);\n },\n has: value => internalMap.has(value),\n [Symbol.iterator]: () => internalMap[Symbol.iterator](),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalMap_unstable: () => internalMap,\n };\n}\n\nfunction isImmutableMap<Key, Value>(value: unknown): value is ImmutableMap<Key, Value> {\n return typeof value === 'object' && value !== null && 'dangerouslyGetInternalMap_unstable' in value;\n}\n\nexport const ImmutableMap = {\n empty: emptyImmutableMap,\n create: createImmutableMap,\n isImmutableMap,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyCreate_unstable: dangerouslyCreateImmutableMap,\n};\n"],"names":["emptyImmutableMap","createImmutableMap","iterable","internalMap","Map","dangerouslyCreateImmutableMap","size","set","key","value","nextSet","get","clear","delete","has","Symbol","iterator","dangerouslyGetInternalMap_unstable","isImmutableMap","ImmutableMap","empty","create","dangerouslyCreate_unstable"],"mappings":"AA+BA,MAAMA,oBAAoBC;AAE1B;;CAEC,GACD,SAASA,mBAA+BC,QAAiC,EAA4B;IACnG,MAAMC,cAAc,IAAIC,IAAIF;IAC5B,OAAOG,8BAA8BF;AACvC;AACA;;;CAGC,GACD,SAASE,8BAA0CF,WAA4B,EAA4B;IACzG,OAAO;QACLG,MAAMH,YAAYG,IAAI;QACtBC,KAAK,CAACC,KAAKC,QAAU;YACnB,MAAMC,UAAU,IAAIN,IAAID;YACxBO,QAAQH,GAAG,CAACC,KAAKC;YACjB,OAAOJ,8BAA8BK;QACvC;QACAC,KAAKH,CAAAA,MAAOL,YAAYQ,GAAG,CAACH;QAC5BI,OAAO,IAAMZ;QACba,QAAOJ,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIN,IAAID;YACxBO,QAAQG,MAAM,CAACJ;YACf,OAAOJ,8BAA8BK;QACvC;QACAI,KAAKL,CAAAA,QAASN,YAAYW,GAAG,CAACL;QAC9B,CAACM,OAAOC,QAAQ,CAAC,EAAE,IAAMb,WAAW,CAACY,OAAOC,QAAQ,CAAC;QACrD,gEAAgE;QAChEC,oCAAoC,IAAMd;IAC5C;AACF;AAEA,SAASe,eAA2BT,KAAc,EAAqC;IACrF,OAAO,OAAOA,UAAU,YAAYA,UAAU,IAAI,IAAI,wCAAwCA;AAChG;AAEA,OAAO,MAAMU,eAAe;IAC1BC,OAAOpB;IACPqB,QAAQpB;IACRiB;IACA,gEAAgE;IAChEI,4BAA4BjB;AAC9B,EAAE"}
@@ -28,6 +28,9 @@ const emptyImmutableSet = createImmutableSet();
28
28
  dangerouslyGetInternalSet_unstable: ()=>internalSet
29
29
  };
30
30
  }
31
+ function isImmutableSet(value) {
32
+ return typeof value === 'object' && value !== null && 'dangerouslyGetInternalSet_unstable' in value;
33
+ }
31
34
  /**
32
35
  * properly creates an ImmutableSet instance from an iterable
33
36
  */ function createImmutableSet(iterable) {
@@ -37,6 +40,7 @@ const emptyImmutableSet = createImmutableSet();
37
40
  export const ImmutableSet = {
38
41
  empty: emptyImmutableSet,
39
42
  create: createImmutableSet,
43
+ isImmutableSet,
40
44
  // eslint-disable-next-line @typescript-eslint/naming-convention
41
45
  dangerouslyCreate_unstable: dangerouslyCreateImmutableSet
42
46
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n /**\n * @internal\n * Exposes the internal set used to store values.\n * This is an internal API and should not be used directly.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalSet_unstable(): Set<Value>;\n}\n\nconst emptyImmutableSet = createImmutableSet<never>();\n\n/**\n * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,\n * @param internalSet - a set that is used internally to store values.\n */\nfunction dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value> {\n return {\n size: internalSet.size,\n add(value) {\n const nextSet = new Set(internalSet);\n nextSet.add(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n clear() {\n return emptyImmutableSet;\n },\n delete(value) {\n const nextSet = new Set(internalSet);\n nextSet.delete(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n has(value) {\n return internalSet.has(value);\n },\n [Symbol.iterator]() {\n return internalSet[Symbol.iterator]();\n },\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalSet_unstable: () => internalSet,\n };\n}\n\n/**\n * properly creates an ImmutableSet instance from an iterable\n */\nfunction createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value> {\n const internalSet = new Set(iterable);\n return dangerouslyCreateImmutableSet(internalSet);\n}\n\nexport const ImmutableSet = {\n empty: emptyImmutableSet,\n create: createImmutableSet,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyCreate_unstable: dangerouslyCreateImmutableSet,\n};\n"],"names":["emptyImmutableSet","createImmutableSet","dangerouslyCreateImmutableSet","internalSet","size","add","value","nextSet","Set","clear","delete","has","Symbol","iterator","dangerouslyGetInternalSet_unstable","iterable","ImmutableSet","empty","create","dangerouslyCreate_unstable"],"mappings":"AAiCA,MAAMA,oBAAoBC;AAE1B;;;CAGC,GACD,SAASC,8BAAqCC,WAAuB,EAAuB;IAC1F,OAAO;QACLC,MAAMD,YAAYC,IAAI;QACtBC,KAAIC,KAAK,EAAE;YACT,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQF,GAAG,CAACC;YACZ,OAAOJ,8BAA8BK;QACvC;QACAE,SAAQ;YACN,OAAOT;QACT;QACAU,QAAOJ,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQG,MAAM,CAACJ;YACf,OAAOJ,8BAA8BK;QACvC;QACAI,KAAIL,KAAK,EAAE;YACT,OAAOH,YAAYQ,GAAG,CAACL;QACzB;QACA,CAACM,OAAOC,QAAQ,CAAC,IAAG;YAClB,OAAOV,WAAW,CAACS,OAAOC,QAAQ,CAAC;QACrC;QACA,gEAAgE;QAChEC,oCAAoC,IAAMX;IAC5C;AACF;AAEA;;CAEC,GACD,SAASF,mBAA0Bc,QAA0B,EAAuB;IAClF,MAAMZ,cAAc,IAAIK,IAAIO;IAC5B,OAAOb,8BAA8BC;AACvC;AAEA,OAAO,MAAMa,eAAe;IAC1BC,OAAOjB;IACPkB,QAAQjB;IACR,gEAAgE;IAChEkB,4BAA4BjB;AAC9B,EAAE"}
1
+ {"version":3,"sources":["ImmutableSet.ts"],"sourcesContent":["export interface ImmutableSet<Value> {\n /**\n * The number of (unique) elements in a ImmutableSet.\n */\n readonly size: number;\n /**\n * Creates a new ImmutableSet containing all previous element plus the one provided as argument\n * @param value - new value to be included in the new ImmutableSet instance\n */\n add(value: Value): ImmutableSet<Value>;\n /**\n * Returns a reference to ImmutableSet.emptySet\n */\n clear(): ImmutableSet<Value>;\n /**\n * Creates a new ImmutableSet with the original items and removes a specified value from the new ImmutableSet.\n */\n delete(value: Value): ImmutableSet<Value>;\n /**\n * @returns a boolean indicating whether an element with the specified value exists in the ImmutableSet or not.\n */\n has(value: Value): boolean;\n /** Iterates over values in the ImmutableSet. */\n [Symbol.iterator](): IterableIterator<Value>;\n /**\n * @internal\n * Exposes the internal set used to store values.\n * This is an internal API and should not be used directly.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalSet_unstable(): Set<Value>;\n}\n\nconst emptyImmutableSet = createImmutableSet<never>();\n\n/**\n * Avoid using *dangerouslyCreateImmutableSet*, since this method will expose internally used set, use createImmutableSet instead,\n * @param internalSet - a set that is used internally to store values.\n */\nfunction dangerouslyCreateImmutableSet<Value>(internalSet: Set<Value>): ImmutableSet<Value> {\n return {\n size: internalSet.size,\n add(value) {\n const nextSet = new Set(internalSet);\n nextSet.add(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n clear() {\n return emptyImmutableSet;\n },\n delete(value) {\n const nextSet = new Set(internalSet);\n nextSet.delete(value);\n return dangerouslyCreateImmutableSet(nextSet);\n },\n has(value) {\n return internalSet.has(value);\n },\n [Symbol.iterator]() {\n return internalSet[Symbol.iterator]();\n },\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyGetInternalSet_unstable: () => internalSet,\n };\n}\n\nfunction isImmutableSet<Value>(value: unknown): value is ImmutableSet<Value> {\n return typeof value === 'object' && value !== null && 'dangerouslyGetInternalSet_unstable' in value;\n}\n\n/**\n * properly creates an ImmutableSet instance from an iterable\n */\nfunction createImmutableSet<Value>(iterable?: Iterable<Value>): ImmutableSet<Value> {\n const internalSet = new Set(iterable);\n return dangerouslyCreateImmutableSet(internalSet);\n}\n\nexport const ImmutableSet = {\n empty: emptyImmutableSet,\n create: createImmutableSet,\n isImmutableSet,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dangerouslyCreate_unstable: dangerouslyCreateImmutableSet,\n};\n"],"names":["emptyImmutableSet","createImmutableSet","dangerouslyCreateImmutableSet","internalSet","size","add","value","nextSet","Set","clear","delete","has","Symbol","iterator","dangerouslyGetInternalSet_unstable","isImmutableSet","iterable","ImmutableSet","empty","create","dangerouslyCreate_unstable"],"mappings":"AAiCA,MAAMA,oBAAoBC;AAE1B;;;CAGC,GACD,SAASC,8BAAqCC,WAAuB,EAAuB;IAC1F,OAAO;QACLC,MAAMD,YAAYC,IAAI;QACtBC,KAAIC,KAAK,EAAE;YACT,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQF,GAAG,CAACC;YACZ,OAAOJ,8BAA8BK;QACvC;QACAE,SAAQ;YACN,OAAOT;QACT;QACAU,QAAOJ,KAAK,EAAE;YACZ,MAAMC,UAAU,IAAIC,IAAIL;YACxBI,QAAQG,MAAM,CAACJ;YACf,OAAOJ,8BAA8BK;QACvC;QACAI,KAAIL,KAAK,EAAE;YACT,OAAOH,YAAYQ,GAAG,CAACL;QACzB;QACA,CAACM,OAAOC,QAAQ,CAAC,IAAG;YAClB,OAAOV,WAAW,CAACS,OAAOC,QAAQ,CAAC;QACrC;QACA,gEAAgE;QAChEC,oCAAoC,IAAMX;IAC5C;AACF;AAEA,SAASY,eAAsBT,KAAc,EAAgC;IAC3E,OAAO,OAAOA,UAAU,YAAYA,UAAU,IAAI,IAAI,wCAAwCA;AAChG;AAEA;;CAEC,GACD,SAASL,mBAA0Be,QAA0B,EAAuB;IAClF,MAAMb,cAAc,IAAIK,IAAIQ;IAC5B,OAAOd,8BAA8BC;AACvC;AAEA,OAAO,MAAMc,eAAe;IAC1BC,OAAOlB;IACPmB,QAAQlB;IACRc;IACA,gEAAgE;IAChEK,4BAA4BlB;AAC9B,EAAE"}
@@ -0,0 +1,18 @@
1
+ import { ImmutableMap } from './ImmutableMap';
2
+ export function createCheckedItems(iterable) {
3
+ if (iterable === undefined) {
4
+ return ImmutableMap.empty;
5
+ }
6
+ if (ImmutableMap.isImmutableMap(iterable)) {
7
+ return iterable;
8
+ }
9
+ const internalMap = new Map();
10
+ for (const item of iterable){
11
+ if (Array.isArray(item)) {
12
+ internalMap.set(item[0], item[1]);
13
+ } else {
14
+ internalMap.set(item, true);
15
+ }
16
+ }
17
+ return ImmutableMap.dangerouslyCreate_unstable(internalMap);
18
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createCheckedItems.ts"],"sourcesContent":["import { ImmutableMap } from './ImmutableMap';\nimport type { TreeSelectionValue } from '../Tree';\nimport type { TreeItemValue } from '../TreeItem';\n\nexport function createCheckedItems(iterable?: Iterable<TreeItemValue | [TreeItemValue, TreeSelectionValue]>) {\n if (iterable === undefined) {\n return ImmutableMap.empty;\n }\n if (ImmutableMap.isImmutableMap<TreeItemValue, TreeSelectionValue>(iterable)) {\n return iterable;\n }\n const internalMap = new Map<TreeItemValue, 'mixed' | boolean>();\n for (const item of iterable) {\n if (Array.isArray(item)) {\n internalMap.set(item[0], item[1]);\n } else {\n internalMap.set(item, true);\n }\n }\n return ImmutableMap.dangerouslyCreate_unstable(internalMap);\n}\n"],"names":["ImmutableMap","createCheckedItems","iterable","undefined","empty","isImmutableMap","internalMap","Map","item","Array","isArray","set","dangerouslyCreate_unstable"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAI9C,OAAO,SAASC,mBAAmBC,QAAwE,EAAE;IAC3G,IAAIA,aAAaC,WAAW;QAC1B,OAAOH,aAAaI,KAAK;IAC3B,CAAC;IACD,IAAIJ,aAAaK,cAAc,CAAoCH,WAAW;QAC5E,OAAOA;IACT,CAAC;IACD,MAAMI,cAAc,IAAIC;IACxB,KAAK,MAAMC,QAAQN,SAAU;QAC3B,IAAIO,MAAMC,OAAO,CAACF,OAAO;YACvBF,YAAYK,GAAG,CAACH,IAAI,CAAC,EAAE,EAAEA,IAAI,CAAC,EAAE;QAClC,OAAO;YACLF,YAAYK,GAAG,CAACH,MAAM,IAAI;QAC5B,CAAC;IACH;IACA,OAAOR,aAAaY,0BAA0B,CAACN;AACjD,CAAC"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * creates a list of flat tree items
2
+ * creates a list of virtual tree items
3
3
  * and provides a map to access each item by id
4
- */ export function createFlatTreeItems(flatTreeItemProps) {
5
- const root = createFlatTreeRootItem();
4
+ */ export function createHeadlessTree(virtualTreeItemProps) {
5
+ const root = createHeadlessTreeRootItem();
6
6
  const itemsPerValue = new Map([
7
7
  [
8
8
  root.value,
@@ -10,14 +10,14 @@
10
10
  ]
11
11
  ]);
12
12
  const items = [];
13
- for(let index = 0; index < flatTreeItemProps.length; index++){
14
- const { parentValue =flatTreeRootId , ...treeItemProps } = flatTreeItemProps[index];
15
- const nextItemProps = flatTreeItemProps[index + 1];
13
+ for(let index = 0; index < virtualTreeItemProps.length; index++){
14
+ const { parentValue =virtualTreeRootId , ...treeItemProps } = virtualTreeItemProps[index];
15
+ const nextItemProps = virtualTreeItemProps[index + 1];
16
16
  const currentParent = itemsPerValue.get(parentValue);
17
17
  if (!currentParent) {
18
18
  if (process.env.NODE_ENV === 'development') {
19
19
  // eslint-disable-next-line no-console
20
- console.error(`useFlatTree: item ${flatTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`);
20
+ console.error(`useHeadlessTree: item ${virtualTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`);
21
21
  }
22
22
  break;
23
23
  }
@@ -25,7 +25,7 @@
25
25
  const itemType = (_treeItemProps_itemType = treeItemProps.itemType) !== null && _treeItemProps_itemType !== void 0 ? _treeItemProps_itemType : treeItemProps.value === undefined || (nextItemProps === null || nextItemProps === void 0 ? void 0 : nextItemProps.parentValue) !== treeItemProps.value ? 'leaf' : 'branch';
26
26
  var _currentParent_level;
27
27
  const currentLevel = ((_currentParent_level = currentParent.level) !== null && _currentParent_level !== void 0 ? _currentParent_level : 0) + 1;
28
- const flatTreeItem = {
28
+ const virtualTreeItem = {
29
29
  value: treeItemProps.value,
30
30
  getTreeItemProps: ()=>({
31
31
  ...treeItemProps,
@@ -39,12 +39,12 @@
39
39
  childrenValues: [],
40
40
  index: -1
41
41
  };
42
- const currentChildrenSize = currentParent.childrenValues.push(flatTreeItem.value);
43
- itemsPerValue.set(flatTreeItem.value, flatTreeItem);
44
- items.push(flatTreeItem);
42
+ const currentChildrenSize = currentParent.childrenValues.push(virtualTreeItem.value);
43
+ itemsPerValue.set(virtualTreeItem.value, virtualTreeItem);
44
+ items.push(virtualTreeItem);
45
45
  }
46
46
  var _itemsPerValue_get_parentValue, _itemsPerValue_get;
47
- const flatTreeItems = {
47
+ const virtualTreeItems = {
48
48
  root,
49
49
  size: items.length,
50
50
  getByIndex: (index)=>items[index],
@@ -53,26 +53,26 @@
53
53
  return (_itemsPerValue_get = itemsPerValue.get((_itemsPerValue_get_parentValue = (_itemsPerValue_get1 = itemsPerValue.get(key)) === null || _itemsPerValue_get1 === void 0 ? void 0 : _itemsPerValue_get1.parentValue) !== null && _itemsPerValue_get_parentValue !== void 0 ? _itemsPerValue_get_parentValue : root.value)) !== null && _itemsPerValue_get !== void 0 ? _itemsPerValue_get : root;
54
54
  },
55
55
  get: (key)=>itemsPerValue.get(key),
56
- subtree: (key)=>FlatTreeSubtreeGenerator(key, flatTreeItems),
57
- children: (key)=>FlatTreeChildrenGenerator(key, flatTreeItems),
58
- ancestors: (key)=>FlatTreeAncestorsGenerator(key, flatTreeItems),
59
- visibleItems: (openItems)=>VisibleFlatTreeItemGenerator(openItems, flatTreeItems)
56
+ subtree: (key)=>HeadlessTreeSubtreeGenerator(key, virtualTreeItems),
57
+ children: (key)=>HeadlessTreeChildrenGenerator(key, virtualTreeItems),
58
+ ancestors: (key)=>HeadlessTreeAncestorsGenerator(key, virtualTreeItems),
59
+ visibleItems: (openItems)=>HeadlessTreeVisibleItemsGenerator(openItems, virtualTreeItems)
60
60
  };
61
- return flatTreeItems;
61
+ return virtualTreeItems;
62
62
  }
63
- export const flatTreeRootId = '__fuiFlatTreeRoot';
64
- function createFlatTreeRootItem() {
63
+ export const virtualTreeRootId = '__fuiHeadlessTreeRoot';
64
+ function createHeadlessTreeRootItem() {
65
65
  return {
66
66
  parentValue: undefined,
67
- value: flatTreeRootId,
67
+ value: virtualTreeRootId,
68
68
  getTreeItemProps: ()=>{
69
69
  if (process.env.NODE_ENV !== 'production') {
70
70
  // eslint-disable-next-line no-console
71
- console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
71
+ console.error('useHeadlessTree: internal error, trying to access treeitem props from invalid root element');
72
72
  }
73
73
  return {
74
- id: flatTreeRootId,
75
- value: flatTreeRootId,
74
+ id: virtualTreeRootId,
75
+ value: virtualTreeRootId,
76
76
  'aria-setsize': -1,
77
77
  'aria-level': -1,
78
78
  'aria-posinset': -1,
@@ -83,7 +83,7 @@ function createFlatTreeRootItem() {
83
83
  get index () {
84
84
  if (process.env.NODE_ENV !== 'production') {
85
85
  // eslint-disable-next-line no-console
86
- console.error('useFlatTree: internal error, trying to access treeitem props from invalid root element');
86
+ console.error('useHeadlessTree: internal error, trying to access treeitem props from invalid root element');
87
87
  }
88
88
  return -1;
89
89
  },
@@ -91,54 +91,54 @@ function createFlatTreeRootItem() {
91
91
  };
92
92
  }
93
93
  /**
94
- * Generator that returns all subtree of a given flat tree item
94
+ * Generator that returns all subtree of a given virtual tree item
95
95
  * @param key the key of the item to get the subtree from
96
96
  */ // eslint-disable-next-line @typescript-eslint/naming-convention
97
- function* FlatTreeSubtreeGenerator(key, flatTreeItems) {
98
- const item = flatTreeItems.get(key);
97
+ function* HeadlessTreeSubtreeGenerator(key, virtualTreeItems) {
98
+ const item = virtualTreeItems.get(key);
99
99
  if (!item || item.childrenValues.length === 0) {
100
100
  return [];
101
101
  }
102
102
  let counter = item.childrenValues.length;
103
103
  let index = item.index;
104
104
  while(counter > 0){
105
- const children = flatTreeItems.getByIndex(++index);
105
+ const children = virtualTreeItems.getByIndex(++index);
106
106
  yield children;
107
107
  counter += children.childrenValues.length - 1;
108
108
  }
109
109
  }
110
110
  /**
111
- * Generator that returns all children of a given flat tree item
111
+ * Generator that returns all children of a given virtual tree item
112
112
  * @param key the key of the item to get the children from
113
113
  */ // eslint-disable-next-line @typescript-eslint/naming-convention
114
- function* FlatTreeChildrenGenerator(key, flatTreeItems) {
115
- const item = flatTreeItems.get(key);
114
+ function* HeadlessTreeChildrenGenerator(key, virtualTreeItems) {
115
+ const item = virtualTreeItems.get(key);
116
116
  if (!item || item.childrenValues.length === 0) {
117
117
  return;
118
118
  }
119
119
  for (const childValue of item.childrenValues){
120
- yield flatTreeItems.get(childValue);
120
+ yield virtualTreeItems.get(childValue);
121
121
  }
122
122
  }
123
123
  /**
124
- * Generator that returns all ancestors of a given flat tree item
124
+ * Generator that returns all ancestors of a given virtual tree item
125
125
  * @param key the key of the item to get the children from
126
126
  */ // eslint-disable-next-line @typescript-eslint/naming-convention
127
- function* FlatTreeAncestorsGenerator(key, flatTreeItems) {
128
- let parent = flatTreeItems.getParent(key);
129
- while(parent !== flatTreeItems.root){
127
+ function* HeadlessTreeAncestorsGenerator(key, virtualTreeItems) {
128
+ let parent = virtualTreeItems.getParent(key);
129
+ while(parent !== virtualTreeItems.root){
130
130
  yield parent;
131
- parent = flatTreeItems.getParent(parent.value);
131
+ parent = virtualTreeItems.getParent(parent.value);
132
132
  }
133
133
  }
134
134
  /**
135
- * Generator that returns all visible items of a given flat tree
135
+ * Generator that returns all visible items of a given virtual tree
136
136
  * @param openItems the open items of the tree
137
137
  */ // eslint-disable-next-line @typescript-eslint/naming-convention
138
- function* VisibleFlatTreeItemGenerator(openItems, flatTreeItems) {
139
- for(let index = 0, visibleIndex = 0; index < flatTreeItems.size; index++){
140
- const item = flatTreeItems.getByIndex(index);
141
- if (isItemVisible(item, openItems, flatTreeItems)) {
138
+ function* HeadlessTreeVisibleItemsGenerator(openItems, virtualTreeItems) {
139
+ for(let index = 0, visibleIndex = 0; index < virtualTreeItems.size; index++){
140
+ const item = virtualTreeItems.getByIndex(index);
141
+ if (isItemVisible(item, openItems, virtualTreeItems)) {
142
142
  item.index = visibleIndex++;
143
143
  yield item;
144
144
  } else {
@@ -147,15 +147,15 @@ function* VisibleFlatTreeItemGenerator(openItems, flatTreeItems) {
147
147
  }
148
148
  }
149
149
  }
150
- function isItemVisible(item, openItems, flatTreeItems) {
150
+ function isItemVisible(item, openItems, virtualTreeItems) {
151
151
  if (item.level === 1) {
152
152
  return true;
153
153
  }
154
- while(item.parentValue && item.parentValue !== flatTreeItems.root.value){
154
+ while(item.parentValue && item.parentValue !== virtualTreeItems.root.value){
155
155
  if (!openItems.has(item.parentValue)) {
156
156
  return false;
157
157
  }
158
- const parent = flatTreeItems.get(item.parentValue);
158
+ const parent = virtualTreeItems.get(item.parentValue);
159
159
  if (!parent) {
160
160
  return false;
161
161
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createHeadlessTree.ts"],"sourcesContent":["import { TreeItemProps, TreeItemType, TreeItemValue } from '../TreeItem';\nimport { ImmutableSet } from './ImmutableSet';\n\nexport type HeadlessTreeItemProps = Omit<TreeItemProps, 'itemType' | 'value'> & {\n value: TreeItemValue;\n itemType?: TreeItemType;\n parentValue?: TreeItemValue;\n};\n\n/**\n * The item that is returned by `createHeadlessTree`, it represents a wrapper around the properties provided to\n * `createHeadlessTree` but with extra information that might be useful on virtual tree scenarios\n */\nexport type HeadlessTreeItem<Props extends HeadlessTreeItemProps> = {\n index: number;\n level: number;\n childrenValues: TreeItemValue[];\n value: TreeItemValue;\n parentValue: TreeItemValue | undefined;\n getTreeItemProps(): Required<Pick<Props, 'value' | 'aria-setsize' | 'aria-level' | 'aria-posinset' | 'itemType'>> &\n Omit<Props, 'parentValue'>;\n};\n\n/**\n * @internal\n */\nexport type HeadlessTree<Props extends HeadlessTreeItemProps> = {\n size: number;\n root: HeadlessTreeItem<HeadlessTreeItemProps>;\n get(key: TreeItemValue): HeadlessTreeItem<Props> | undefined;\n getParent(key: TreeItemValue): HeadlessTreeItem<Props>;\n getByIndex(index: number): HeadlessTreeItem<Props>;\n subtree(key: TreeItemValue): IterableIterator<HeadlessTreeItem<Props>>;\n children(key: TreeItemValue): IterableIterator<HeadlessTreeItem<Props>>;\n visibleItems(openItems: ImmutableSet<TreeItemValue>): IterableIterator<HeadlessTreeItem<Props>>;\n ancestors(key: TreeItemValue): IterableIterator<HeadlessTreeItem<Props>>;\n};\n\n/**\n * creates a list of virtual tree items\n * and provides a map to access each item by id\n */\nexport function createHeadlessTree<Props extends HeadlessTreeItemProps>(\n virtualTreeItemProps: Props[],\n): HeadlessTree<Props> {\n const root = createHeadlessTreeRootItem();\n const itemsPerValue = new Map<TreeItemValue, HeadlessTreeItem<HeadlessTreeItemProps>>([[root.value, root]]);\n const items: HeadlessTreeItem<HeadlessTreeItemProps>[] = [];\n\n for (let index = 0; index < virtualTreeItemProps.length; index++) {\n const { parentValue = virtualTreeRootId, ...treeItemProps } = virtualTreeItemProps[index];\n\n const nextItemProps: Props | undefined = virtualTreeItemProps[index + 1];\n const currentParent = itemsPerValue.get(parentValue);\n if (!currentParent) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.error(\n `useHeadlessTree: item ${virtualTreeItemProps[index].value} is wrongly positioned, did you properly ordered provided item props? make sure provided items are organized`,\n );\n }\n break;\n }\n const itemType =\n treeItemProps.itemType ??\n (treeItemProps.value === undefined || nextItemProps?.parentValue !== treeItemProps.value ? 'leaf' : 'branch');\n const currentLevel = (currentParent.level ?? 0) + 1;\n\n const virtualTreeItem: HeadlessTreeItem<HeadlessTreeItemProps> = {\n value: treeItemProps.value,\n getTreeItemProps: () => ({\n ...treeItemProps,\n 'aria-level': currentLevel,\n 'aria-posinset': currentChildrenSize,\n 'aria-setsize': currentParent.childrenValues.length,\n itemType,\n }),\n level: currentLevel,\n parentValue,\n childrenValues: [],\n index: -1,\n };\n const currentChildrenSize = currentParent.childrenValues.push(virtualTreeItem.value);\n itemsPerValue.set(virtualTreeItem.value, virtualTreeItem);\n items.push(virtualTreeItem);\n }\n\n const virtualTreeItems: HeadlessTree<HeadlessTreeItemProps> = {\n root,\n size: items.length,\n getByIndex: index => items[index],\n getParent: key => itemsPerValue.get(itemsPerValue.get(key)?.parentValue ?? root.value) ?? root,\n get: key => itemsPerValue.get(key),\n subtree: key => HeadlessTreeSubtreeGenerator(key, virtualTreeItems),\n children: key => HeadlessTreeChildrenGenerator(key, virtualTreeItems),\n ancestors: key => HeadlessTreeAncestorsGenerator(key, virtualTreeItems),\n visibleItems: openItems => HeadlessTreeVisibleItemsGenerator(openItems, virtualTreeItems),\n };\n\n return virtualTreeItems as HeadlessTree<Props>;\n}\n\nexport const virtualTreeRootId = '__fuiHeadlessTreeRoot';\n\nfunction createHeadlessTreeRootItem(): HeadlessTreeItem<HeadlessTreeItemProps> {\n return {\n parentValue: undefined,\n value: virtualTreeRootId,\n getTreeItemProps: () => {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useHeadlessTree: internal error, trying to access treeitem props from invalid root element');\n }\n return {\n id: virtualTreeRootId,\n value: virtualTreeRootId,\n 'aria-setsize': -1,\n 'aria-level': -1,\n 'aria-posinset': -1,\n itemType: 'branch',\n };\n },\n childrenValues: [],\n get index() {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error('useHeadlessTree: internal error, trying to access treeitem props from invalid root element');\n }\n return -1;\n },\n level: 0,\n };\n}\n\n/**\n * Generator that returns all subtree of a given virtual tree item\n * @param key the key of the item to get the subtree from\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction* HeadlessTreeSubtreeGenerator<Props extends HeadlessTreeItemProps>(\n key: TreeItemValue,\n virtualTreeItems: HeadlessTree<Props>,\n) {\n const item = virtualTreeItems.get(key);\n if (!item || item.childrenValues.length === 0) {\n return [];\n }\n let counter = item.childrenValues.length;\n let index = item.index;\n while (counter > 0) {\n const children = virtualTreeItems.getByIndex(++index);\n yield children;\n counter += children.childrenValues.length - 1;\n }\n}\n\n/**\n * Generator that returns all children of a given virtual tree item\n * @param key the key of the item to get the children from\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction* HeadlessTreeChildrenGenerator<Props extends HeadlessTreeItemProps>(\n key: TreeItemValue,\n virtualTreeItems: HeadlessTree<Props>,\n) {\n const item = virtualTreeItems.get(key);\n if (!item || item.childrenValues.length === 0) {\n return;\n }\n for (const childValue of item.childrenValues) {\n yield virtualTreeItems.get(childValue)!;\n }\n}\n\n/**\n * Generator that returns all ancestors of a given virtual tree item\n * @param key the key of the item to get the children from\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction* HeadlessTreeAncestorsGenerator<Props extends HeadlessTreeItemProps>(\n key: TreeItemValue,\n virtualTreeItems: HeadlessTree<Props>,\n) {\n let parent = virtualTreeItems.getParent(key);\n while (parent !== virtualTreeItems.root) {\n yield parent;\n parent = virtualTreeItems.getParent(parent.value);\n }\n}\n\n/**\n * Generator that returns all visible items of a given virtual tree\n * @param openItems the open items of the tree\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction* HeadlessTreeVisibleItemsGenerator<Props extends HeadlessTreeItemProps>(\n openItems: ImmutableSet<TreeItemValue>,\n virtualTreeItems: HeadlessTree<Props>,\n) {\n for (let index = 0, visibleIndex = 0; index < virtualTreeItems.size; index++) {\n const item = virtualTreeItems.getByIndex(index) as HeadlessTreeItem<Props>;\n if (isItemVisible(item, openItems, virtualTreeItems)) {\n item.index = visibleIndex++;\n yield item;\n } else {\n // Jump the amount of children the current item has, since those items will also be hidden\n index += item.childrenValues.length;\n }\n }\n}\n\nfunction isItemVisible(\n item: HeadlessTreeItem<HeadlessTreeItemProps>,\n openItems: ImmutableSet<TreeItemValue>,\n virtualTreeItems: HeadlessTree<HeadlessTreeItemProps>,\n) {\n if (item.level === 1) {\n return true;\n }\n while (item.parentValue && item.parentValue !== virtualTreeItems.root.value) {\n if (!openItems.has(item.parentValue)) {\n return false;\n }\n const parent = virtualTreeItems.get(item.parentValue);\n if (!parent) {\n return false;\n }\n item = parent;\n }\n return true;\n}\n"],"names":["createHeadlessTree","virtualTreeItemProps","root","createHeadlessTreeRootItem","itemsPerValue","Map","value","items","index","length","parentValue","virtualTreeRootId","treeItemProps","nextItemProps","currentParent","get","process","env","NODE_ENV","console","error","itemType","undefined","currentLevel","level","virtualTreeItem","getTreeItemProps","currentChildrenSize","childrenValues","push","set","virtualTreeItems","size","getByIndex","getParent","key","subtree","HeadlessTreeSubtreeGenerator","children","HeadlessTreeChildrenGenerator","ancestors","HeadlessTreeAncestorsGenerator","visibleItems","openItems","HeadlessTreeVisibleItemsGenerator","id","item","counter","childValue","parent","visibleIndex","isItemVisible","has"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ImmutableSet } from './ImmutableSet';
2
+ export function createOpenItems(iterable) {
3
+ if (iterable === undefined) {
4
+ return ImmutableSet.empty;
5
+ }
6
+ if (ImmutableSet.isImmutableSet(iterable)) {
7
+ return iterable;
8
+ }
9
+ return ImmutableSet.create(iterable);
10
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createOpenItems.ts"],"sourcesContent":["import { ImmutableSet } from './ImmutableSet';\nimport type { TreeItemValue } from '../TreeItem';\n\nexport function createOpenItems(iterable?: Iterable<TreeItemValue>) {\n if (iterable === undefined) {\n return ImmutableSet.empty;\n }\n if (ImmutableSet.isImmutableSet<TreeItemValue>(iterable)) {\n return iterable;\n }\n return ImmutableSet.create(iterable);\n}\n"],"names":["ImmutableSet","createOpenItems","iterable","undefined","empty","isImmutableSet","create"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAG9C,OAAO,SAASC,gBAAgBC,QAAkC,EAAE;IAClE,IAAIA,aAAaC,WAAW;QAC1B,OAAOH,aAAaI,KAAK;IAC3B,CAAC;IACD,IAAIJ,aAAaK,cAAc,CAAgBH,WAAW;QACxD,OAAOA;IACT,CAAC;IACD,OAAOF,aAAaM,MAAM,CAACJ;AAC7B,CAAC"}