@itwin/tree-widget-react 2.3.2 → 3.0.0-dev.1

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 (418) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +232 -147
  3. package/lib/cjs/TreeWidget.d.ts +2 -4
  4. package/lib/cjs/TreeWidget.js +0 -6
  5. package/lib/cjs/TreeWidget.js.map +1 -1
  6. package/lib/cjs/components/SelectableTree.d.ts +3 -9
  7. package/lib/cjs/components/SelectableTree.js +1 -1
  8. package/lib/cjs/components/SelectableTree.js.map +1 -1
  9. package/lib/cjs/components/TreeSelector.d.ts +2 -2
  10. package/lib/cjs/components/TreeSelector.js.map +1 -1
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +14 -25
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +43 -45
  13. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  14. package/lib/cjs/components/tree-header/TreeHeader.js +17 -9
  15. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  16. package/lib/cjs/components/tree-header/TreeHeader.scss +7 -41
  17. package/lib/cjs/components/trees/Tree.scss +23 -0
  18. package/lib/cjs/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
  19. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js +78 -0
  20. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js.map +1 -0
  21. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
  22. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js +37 -0
  23. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
  24. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
  25. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js +75 -0
  26. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
  27. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
  28. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js +185 -0
  29. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
  30. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
  31. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js +94 -0
  32. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
  33. package/lib/cjs/components/trees/categories-tree/UseCategories.d.ts +8 -0
  34. package/lib/cjs/components/trees/categories-tree/UseCategories.js +22 -0
  35. package/lib/cjs/components/trees/categories-tree/UseCategories.js.map +1 -0
  36. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
  37. package/lib/cjs/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +56 -8
  38. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
  39. package/lib/cjs/components/trees/common/FocusedInstancesContext.d.ts +14 -0
  40. package/lib/cjs/components/trees/common/FocusedInstancesContext.js +16 -0
  41. package/lib/cjs/components/trees/common/FocusedInstancesContext.js.map +1 -0
  42. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
  43. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js +71 -0
  44. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
  45. package/lib/cjs/components/trees/common/Rxjs.d.ts +10 -0
  46. package/lib/cjs/components/trees/common/Rxjs.js +46 -0
  47. package/lib/cjs/components/trees/common/Rxjs.js.map +1 -0
  48. package/lib/cjs/components/trees/common/UseFeatureReporting.d.ts +11 -0
  49. package/lib/cjs/components/trees/common/UseFeatureReporting.js +10 -1
  50. package/lib/cjs/components/trees/common/UseFeatureReporting.js.map +1 -1
  51. package/lib/cjs/components/trees/common/UseFiltering.d.ts +12 -0
  52. package/lib/cjs/components/trees/common/UseFiltering.js +29 -0
  53. package/lib/cjs/components/trees/common/UseFiltering.js.map +1 -0
  54. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
  55. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js +33 -0
  56. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
  57. package/lib/cjs/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
  58. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js +157 -0
  59. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js.map +1 -0
  60. package/lib/cjs/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
  61. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js +98 -0
  62. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js.map +1 -0
  63. package/lib/cjs/components/trees/common/UseIModelChangeListener.d.ts +9 -0
  64. package/lib/cjs/components/trees/common/UseIModelChangeListener.js +20 -0
  65. package/lib/cjs/components/trees/common/UseIModelChangeListener.js.map +1 -0
  66. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
  67. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js +35 -0
  68. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
  69. package/lib/cjs/components/trees/common/UseNodeHighlighting.d.ts +16 -0
  70. package/lib/cjs/components/trees/common/UseNodeHighlighting.js +140 -0
  71. package/lib/cjs/components/trees/common/UseNodeHighlighting.js.map +1 -0
  72. package/lib/cjs/components/trees/common/Utils.d.ts +16 -6
  73. package/lib/cjs/components/trees/common/Utils.js +38 -34
  74. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  75. package/lib/cjs/components/trees/common/components/BaseTree.d.ts +34 -0
  76. package/lib/cjs/components/trees/common/components/BaseTree.js +77 -0
  77. package/lib/cjs/components/trees/common/components/BaseTree.js.map +1 -0
  78. package/lib/cjs/components/trees/common/components/Delayed.d.ts +6 -0
  79. package/lib/cjs/components/trees/common/components/Delayed.js +31 -0
  80. package/lib/cjs/components/trees/common/components/Delayed.js.map +1 -0
  81. package/lib/cjs/components/trees/common/components/ProgressOverlay.d.ts +5 -0
  82. package/lib/cjs/components/trees/common/components/ProgressOverlay.js +16 -0
  83. package/lib/cjs/components/trees/common/components/ProgressOverlay.js.map +1 -0
  84. package/lib/cjs/components/trees/common/components/ProgressOverlay.scss +21 -0
  85. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
  86. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js +28 -0
  87. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
  88. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
  89. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js +20 -0
  90. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
  91. package/lib/cjs/components/trees/common/components/TreeRenderer.d.ts +19 -0
  92. package/lib/cjs/components/trees/common/components/TreeRenderer.js +30 -0
  93. package/lib/cjs/components/trees/common/components/TreeRenderer.js.map +1 -0
  94. package/lib/cjs/components/trees/common/components/TreeRenderer.scss +62 -0
  95. package/lib/cjs/components/trees/common/components/VisibilityTree.d.ts +14 -0
  96. package/lib/cjs/components/trees/common/components/VisibilityTree.js +41 -0
  97. package/lib/cjs/components/trees/common/components/VisibilityTree.js.map +1 -0
  98. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
  99. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +29 -83
  100. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  101. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
  102. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
  103. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  104. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
  105. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +262 -0
  106. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
  107. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
  108. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +41 -79
  109. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  110. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
  111. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
  112. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  113. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
  114. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +619 -0
  115. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
  116. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
  117. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +203 -0
  118. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
  119. package/lib/cjs/components/trees/index.d.ts +4 -16
  120. package/lib/cjs/components/trees/index.js +9 -30
  121. package/lib/cjs/components/trees/index.js.map +1 -1
  122. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +17 -72
  123. package/lib/cjs/components/trees/models-tree/ModelsTree.js +196 -135
  124. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  125. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
  126. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js +101 -0
  127. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
  128. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
  129. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +40 -83
  130. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  131. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
  132. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js +617 -0
  133. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
  134. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
  135. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +121 -0
  136. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  137. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
  138. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js +325 -0
  139. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
  140. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
  141. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js +40 -0
  142. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
  143. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
  144. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +757 -0
  145. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
  146. package/lib/cjs/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
  147. package/lib/cjs/components/trees/models-tree/internal/Tooltip.js +29 -0
  148. package/lib/cjs/components/trees/models-tree/internal/Tooltip.js.map +1 -0
  149. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
  150. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js +43 -0
  151. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
  152. package/lib/cjs/tree-widget-react.d.ts +3 -4
  153. package/lib/cjs/tree-widget-react.js +8 -4
  154. package/lib/cjs/tree-widget-react.js.map +1 -1
  155. package/lib/esm/TreeWidget.d.ts +2 -4
  156. package/lib/esm/TreeWidget.js +0 -6
  157. package/lib/esm/TreeWidget.js.map +1 -1
  158. package/lib/esm/components/SelectableTree.d.ts +3 -9
  159. package/lib/esm/components/SelectableTree.js +1 -1
  160. package/lib/esm/components/SelectableTree.js.map +1 -1
  161. package/lib/esm/components/TreeSelector.d.ts +2 -2
  162. package/lib/esm/components/TreeSelector.js.map +1 -1
  163. package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +14 -25
  164. package/lib/esm/components/TreeWidgetUiItemsProvider.js +42 -44
  165. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  166. package/lib/esm/components/tree-header/TreeHeader.js +17 -9
  167. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  168. package/lib/esm/components/tree-header/TreeHeader.scss +7 -41
  169. package/lib/esm/components/trees/Tree.scss +23 -0
  170. package/lib/esm/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
  171. package/lib/esm/components/trees/categories-tree/CategoriesTree.js +74 -0
  172. package/lib/esm/components/trees/categories-tree/CategoriesTree.js.map +1 -0
  173. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
  174. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js +31 -0
  175. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
  176. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
  177. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js +68 -0
  178. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
  179. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
  180. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js +181 -0
  181. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
  182. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
  183. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js +90 -0
  184. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
  185. package/lib/esm/components/trees/categories-tree/UseCategories.d.ts +8 -0
  186. package/lib/esm/components/trees/categories-tree/UseCategories.js +18 -0
  187. package/lib/esm/components/trees/categories-tree/UseCategories.js.map +1 -0
  188. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
  189. package/lib/esm/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +51 -6
  190. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
  191. package/lib/esm/components/trees/common/FocusedInstancesContext.d.ts +14 -0
  192. package/lib/esm/components/trees/common/FocusedInstancesContext.js +12 -0
  193. package/lib/esm/components/trees/common/FocusedInstancesContext.js.map +1 -0
  194. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
  195. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js +67 -0
  196. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
  197. package/lib/esm/components/trees/common/Rxjs.d.ts +10 -0
  198. package/lib/esm/components/trees/common/Rxjs.js +40 -0
  199. package/lib/esm/components/trees/common/Rxjs.js.map +1 -0
  200. package/lib/esm/components/trees/common/UseFeatureReporting.d.ts +11 -0
  201. package/lib/esm/components/trees/common/UseFeatureReporting.js +8 -0
  202. package/lib/esm/components/trees/common/UseFeatureReporting.js.map +1 -1
  203. package/lib/esm/components/trees/common/UseFiltering.d.ts +12 -0
  204. package/lib/esm/components/trees/common/UseFiltering.js +25 -0
  205. package/lib/esm/components/trees/common/UseFiltering.js.map +1 -0
  206. package/lib/esm/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
  207. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js +29 -0
  208. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
  209. package/lib/esm/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
  210. package/lib/esm/components/trees/common/UseHierarchyFiltering.js +153 -0
  211. package/lib/esm/components/trees/common/UseHierarchyFiltering.js.map +1 -0
  212. package/lib/esm/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
  213. package/lib/esm/components/trees/common/UseHierarchyVisibility.js +94 -0
  214. package/lib/esm/components/trees/common/UseHierarchyVisibility.js.map +1 -0
  215. package/lib/esm/components/trees/common/UseIModelChangeListener.d.ts +9 -0
  216. package/lib/esm/components/trees/common/UseIModelChangeListener.js +16 -0
  217. package/lib/esm/components/trees/common/UseIModelChangeListener.js.map +1 -0
  218. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
  219. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js +31 -0
  220. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
  221. package/lib/esm/components/trees/common/UseNodeHighlighting.d.ts +16 -0
  222. package/lib/esm/components/trees/common/UseNodeHighlighting.js +136 -0
  223. package/lib/esm/components/trees/common/UseNodeHighlighting.js.map +1 -0
  224. package/lib/esm/components/trees/common/Utils.d.ts +16 -6
  225. package/lib/esm/components/trees/common/Utils.js +33 -29
  226. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  227. package/lib/esm/components/trees/common/components/BaseTree.d.ts +34 -0
  228. package/lib/esm/components/trees/common/components/BaseTree.js +73 -0
  229. package/lib/esm/components/trees/common/components/BaseTree.js.map +1 -0
  230. package/lib/esm/components/trees/common/components/Delayed.d.ts +6 -0
  231. package/lib/esm/components/trees/common/components/Delayed.js +27 -0
  232. package/lib/esm/components/trees/common/components/Delayed.js.map +1 -0
  233. package/lib/esm/components/trees/common/components/ProgressOverlay.d.ts +5 -0
  234. package/lib/esm/components/trees/common/components/ProgressOverlay.js +12 -0
  235. package/lib/esm/components/trees/common/components/ProgressOverlay.js.map +1 -0
  236. package/lib/esm/components/trees/common/components/ProgressOverlay.scss +21 -0
  237. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
  238. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js +21 -0
  239. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
  240. package/lib/esm/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
  241. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js +13 -0
  242. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
  243. package/lib/esm/components/trees/common/components/TreeRenderer.d.ts +19 -0
  244. package/lib/esm/components/trees/common/components/TreeRenderer.js +26 -0
  245. package/lib/esm/components/trees/common/components/TreeRenderer.js.map +1 -0
  246. package/lib/esm/components/trees/common/components/TreeRenderer.scss +62 -0
  247. package/lib/esm/components/trees/common/components/VisibilityTree.d.ts +14 -0
  248. package/lib/esm/components/trees/common/components/VisibilityTree.js +37 -0
  249. package/lib/esm/components/trees/common/components/VisibilityTree.js.map +1 -0
  250. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
  251. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +27 -58
  252. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  253. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
  254. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
  255. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  256. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
  257. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +258 -0
  258. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
  259. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
  260. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +39 -54
  261. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  262. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
  263. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
  264. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  265. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
  266. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +615 -0
  267. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
  268. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
  269. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +199 -0
  270. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
  271. package/lib/esm/components/trees/index.d.ts +4 -16
  272. package/lib/esm/components/trees/index.js +4 -16
  273. package/lib/esm/components/trees/index.js.map +1 -1
  274. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +17 -72
  275. package/lib/esm/components/trees/models-tree/ModelsTree.js +196 -132
  276. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  277. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
  278. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js +92 -0
  279. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
  280. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
  281. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +38 -81
  282. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  283. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
  284. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js +613 -0
  285. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
  286. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
  287. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +117 -0
  288. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  289. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
  290. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js +321 -0
  291. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
  292. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
  293. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js +37 -0
  294. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
  295. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
  296. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +748 -0
  297. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
  298. package/lib/esm/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
  299. package/lib/esm/components/trees/models-tree/internal/Tooltip.js +24 -0
  300. package/lib/esm/components/trees/models-tree/internal/Tooltip.js.map +1 -0
  301. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
  302. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js +39 -0
  303. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
  304. package/lib/esm/tree-widget-react.d.ts +3 -4
  305. package/lib/esm/tree-widget-react.js +3 -4
  306. package/lib/esm/tree-widget-react.js.map +1 -1
  307. package/lib/public/locales/en/TreeWidget.json +126 -42
  308. package/package.json +19 -6
  309. package/lib/cjs/components/TreeFilteringState.d.ts +0 -18
  310. package/lib/cjs/components/TreeFilteringState.js +0 -46
  311. package/lib/cjs/components/TreeFilteringState.js.map +0 -1
  312. package/lib/cjs/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
  313. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +0 -1
  314. package/lib/cjs/components/trees/VisibilityTreeBase.scss +0 -82
  315. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
  316. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +0 -158
  317. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +0 -1
  318. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +0 -100
  319. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +0 -98
  320. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +0 -1
  321. package/lib/cjs/components/trees/category-tree/Categories.json +0 -99
  322. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +0 -60
  323. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +0 -141
  324. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +0 -1
  325. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
  326. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +0 -123
  327. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
  328. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
  329. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +0 -172
  330. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
  331. package/lib/cjs/components/trees/common/ContextMenu.d.ts +0 -39
  332. package/lib/cjs/components/trees/common/ContextMenu.js +0 -44
  333. package/lib/cjs/components/trees/common/ContextMenu.js.map +0 -1
  334. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
  335. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js +0 -51
  336. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
  337. package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +0 -61
  338. package/lib/cjs/components/trees/common/TreeNodeRenderer.js +0 -50
  339. package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +0 -1
  340. package/lib/cjs/components/trees/common/TreeRenderer.d.ts +0 -55
  341. package/lib/cjs/components/trees/common/TreeRenderer.js +0 -67
  342. package/lib/cjs/components/trees/common/TreeRenderer.js.map +0 -1
  343. package/lib/cjs/components/trees/common/TreeRenderer.scss +0 -149
  344. package/lib/cjs/components/trees/common/Types.d.ts +0 -57
  345. package/lib/cjs/components/trees/common/Types.js +0 -21
  346. package/lib/cjs/components/trees/common/Types.js.map +0 -1
  347. package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
  348. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +0 -49
  349. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +0 -1
  350. package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +0 -228
  351. package/lib/cjs/components/trees/imodel-content-tree/IModelContent.json +0 -443
  352. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
  353. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +0 -36
  354. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
  355. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
  356. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +0 -651
  357. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
  358. package/lib/cjs/components/trees/models-tree/Utils.d.ts +0 -29
  359. package/lib/cjs/components/trees/models-tree/Utils.js +0 -556
  360. package/lib/cjs/components/trees/models-tree/Utils.js.map +0 -1
  361. package/lib/cjs/components/utils/UseTreeTransientState.d.ts +0 -19
  362. package/lib/cjs/components/utils/UseTreeTransientState.js +0 -33
  363. package/lib/cjs/components/utils/UseTreeTransientState.js.map +0 -1
  364. package/lib/esm/components/TreeFilteringState.d.ts +0 -18
  365. package/lib/esm/components/TreeFilteringState.js +0 -42
  366. package/lib/esm/components/TreeFilteringState.js.map +0 -1
  367. package/lib/esm/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
  368. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +0 -1
  369. package/lib/esm/components/trees/VisibilityTreeBase.scss +0 -82
  370. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
  371. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +0 -154
  372. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +0 -1
  373. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +0 -100
  374. package/lib/esm/components/trees/VisibilityTreeRenderer.js +0 -86
  375. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +0 -1
  376. package/lib/esm/components/trees/category-tree/Categories.json +0 -99
  377. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +0 -60
  378. package/lib/esm/components/trees/category-tree/CategoriesTree.js +0 -111
  379. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +0 -1
  380. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
  381. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +0 -116
  382. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
  383. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
  384. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +0 -164
  385. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
  386. package/lib/esm/components/trees/common/ContextMenu.d.ts +0 -39
  387. package/lib/esm/components/trees/common/ContextMenu.js +0 -39
  388. package/lib/esm/components/trees/common/ContextMenu.js.map +0 -1
  389. package/lib/esm/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
  390. package/lib/esm/components/trees/common/ReportingTreeEventHandler.js +0 -47
  391. package/lib/esm/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
  392. package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +0 -61
  393. package/lib/esm/components/trees/common/TreeNodeRenderer.js +0 -44
  394. package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +0 -1
  395. package/lib/esm/components/trees/common/TreeRenderer.d.ts +0 -55
  396. package/lib/esm/components/trees/common/TreeRenderer.js +0 -59
  397. package/lib/esm/components/trees/common/TreeRenderer.js.map +0 -1
  398. package/lib/esm/components/trees/common/TreeRenderer.scss +0 -149
  399. package/lib/esm/components/trees/common/Types.d.ts +0 -57
  400. package/lib/esm/components/trees/common/Types.js +0 -18
  401. package/lib/esm/components/trees/common/Types.js.map +0 -1
  402. package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
  403. package/lib/esm/components/trees/common/UseVisibilityTreeState.js +0 -45
  404. package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +0 -1
  405. package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +0 -228
  406. package/lib/esm/components/trees/imodel-content-tree/IModelContent.json +0 -443
  407. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
  408. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +0 -32
  409. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
  410. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
  411. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +0 -641
  412. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
  413. package/lib/esm/components/trees/models-tree/Utils.d.ts +0 -29
  414. package/lib/esm/components/trees/models-tree/Utils.js +0 -548
  415. package/lib/esm/components/trees/models-tree/Utils.js.map +0 -1
  416. package/lib/esm/components/utils/UseTreeTransientState.d.ts +0 -19
  417. package/lib/esm/components/utils/UseTreeTransientState.js +0 -29
  418. package/lib/esm/components/utils/UseTreeTransientState.js.map +0 -1
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CategoriesTree = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /*---------------------------------------------------------------------------------------------
6
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
7
+ * See LICENSE.md in the project root for license terms and full copyright notice.
8
+ *--------------------------------------------------------------------------------------------*/
9
+ const react_1 = require("react");
10
+ const core_frontend_1 = require("@itwin/core-frontend");
11
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
12
+ const itwinui_react_1 = require("@itwin/itwinui-react");
13
+ const TreeWidget_1 = require("../../../TreeWidget");
14
+ const VisibilityTree_1 = require("../common/components/VisibilityTree");
15
+ const UseFeatureReporting_1 = require("../common/UseFeatureReporting");
16
+ const CategoriesTreeComponent_1 = require("./CategoriesTreeComponent");
17
+ const CategoriesTreeDefinition_1 = require("./CategoriesTreeDefinition");
18
+ const CategoriesVisibilityHandler_1 = require("./CategoriesVisibilityHandler");
19
+ /** @internal */
20
+ function CategoriesTree({ imodel, viewManager, categories, allViewports, getSchemaContext, height, width, activeView, filter, density, hierarchyLevelConfig, selectionMode, onPerformanceMeasured, onFeatureUsed, }) {
21
+ const [filteringError, setFilteringError] = (0, react_1.useState)();
22
+ const visibilityHandlerFactory = (0, react_1.useCallback)(() => {
23
+ const visibilityHandler = new CategoriesVisibilityHandler_1.CategoriesVisibilityHandler({
24
+ imodel,
25
+ viewport: activeView,
26
+ viewManager: viewManager ?? core_frontend_1.IModelApp.viewManager,
27
+ categories,
28
+ allViewports,
29
+ });
30
+ return {
31
+ getVisibilityStatus: async (node) => visibilityHandler.getVisibilityStatus(node),
32
+ changeVisibility: async (node, on) => visibilityHandler.changeVisibility(node, on),
33
+ onVisibilityChange: visibilityHandler.onVisibilityChange,
34
+ dispose: () => visibilityHandler.dispose(),
35
+ };
36
+ }, [activeView, allViewports, categories, imodel, viewManager]);
37
+ const { reportUsage } = (0, UseFeatureReporting_1.useFeatureReporting)({ onFeatureUsed, treeIdentifier: CategoriesTreeComponent_1.CategoriesTreeComponent.id });
38
+ const getDefinitionsProvider = (0, react_1.useCallback)((props) => {
39
+ return new CategoriesTreeDefinition_1.CategoriesTreeDefinition({ ...props, viewType: activeView.view.is2d() ? "2d" : "3d" });
40
+ }, [activeView]);
41
+ const getSearchFilteredPaths = (0, react_1.useMemo)(() => {
42
+ setFilteringError(undefined);
43
+ if (!filter) {
44
+ return undefined;
45
+ }
46
+ return async ({ imodelAccess }) => {
47
+ reportUsage?.({ featureId: "filtering", reportInteraction: true });
48
+ try {
49
+ return await CategoriesTreeDefinition_1.CategoriesTreeDefinition.createInstanceKeyPaths({ imodelAccess, label: filter, viewType: activeView.view.is2d() ? "2d" : "3d" });
50
+ }
51
+ catch (e) {
52
+ const newError = e instanceof Error && e.message.match(/Filter matches more than \d+ items/) ? "tooManyFilterMatches" : "unknownFilterError";
53
+ setFilteringError(newError);
54
+ return [];
55
+ }
56
+ };
57
+ }, [filter, activeView, reportUsage]);
58
+ return ((0, jsx_runtime_1.jsx)(VisibilityTree_1.VisibilityTree, { height: height, width: width, imodel: imodel, treeName: CategoriesTreeComponent_1.CategoriesTreeComponent.id, getSchemaContext: getSchemaContext, visibilityHandlerFactory: visibilityHandlerFactory, getHierarchyDefinition: getDefinitionsProvider, getFilteredPaths: getSearchFilteredPaths, hierarchyLevelSizeLimit: hierarchyLevelConfig?.sizeLimit, getSublabel: getSublabel, getIcon: getIcon, density: density, noDataMessage: getNoDataMessage(filter, filteringError), selectionMode: selectionMode ?? "none", onPerformanceMeasured: (action, duration) => {
59
+ onPerformanceMeasured?.(`${CategoriesTreeComponent_1.CategoriesTreeComponent.id}-${action}`, duration);
60
+ }, reportUsage: reportUsage, searchText: filter }));
61
+ }
62
+ exports.CategoriesTree = CategoriesTree;
63
+ function getNoDataMessage(filter, error) {
64
+ if (error) {
65
+ return (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: TreeWidget_1.TreeWidget.translate(`categoriesTree.filtering.${error}`) });
66
+ }
67
+ if (filter) {
68
+ return (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: TreeWidget_1.TreeWidget.translate("categoriesTree.filtering.noMatches", { filter }) });
69
+ }
70
+ return undefined;
71
+ }
72
+ function getIcon() {
73
+ return (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgLayers, {});
74
+ }
75
+ function getSublabel(node) {
76
+ return node.extendedData?.description;
77
+ }
78
+ //# sourceMappingURL=CategoriesTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoriesTree.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTree.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { SvgLayers } from \"@itwin/itwinui-icons-react\";\nimport { Text } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { VisibilityTree } from \"../common/components/VisibilityTree\";\nimport { useFeatureReporting } from \"../common/UseFeatureReporting\";\nimport { CategoriesTreeComponent } from \"./CategoriesTreeComponent\";\nimport { CategoriesTreeDefinition } from \"./CategoriesTreeDefinition\";\nimport { CategoriesVisibilityHandler } from \"./CategoriesVisibilityHandler\";\n\nimport type { CategoryInfo } from \"../common/CategoriesVisibilityUtils\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport type { ViewManager, Viewport } from \"@itwin/core-frontend\";\nimport type { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { PresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\n\ntype CategoriesTreeFilteringError = \"tooManyFilterMatches\" | \"unknownFilterError\";\n\ninterface CategoriesTreeOwnProps {\n filter: string;\n activeView: Viewport;\n categories: CategoryInfo[];\n viewManager?: ViewManager;\n allViewports?: boolean;\n hierarchyLevelConfig?: {\n sizeLimit?: number;\n };\n onPerformanceMeasured?: (featureId: string, duration: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\ntype VisibilityTreeProps = ComponentPropsWithoutRef<typeof VisibilityTree>;\ntype GetFilteredPathsCallback = VisibilityTreeProps[\"getFilteredPaths\"];\ntype GetHierarchyDefinitionCallback = VisibilityTreeProps[\"getHierarchyDefinition\"];\n\ntype ModelsTreeProps = CategoriesTreeOwnProps & Pick<VisibilityTreeProps, \"imodel\" | \"getSchemaContext\" | \"height\" | \"width\" | \"density\" | \"selectionMode\">;\n\n/** @internal */\nexport function CategoriesTree({\n imodel,\n viewManager,\n categories,\n allViewports,\n getSchemaContext,\n height,\n width,\n activeView,\n filter,\n density,\n hierarchyLevelConfig,\n selectionMode,\n onPerformanceMeasured,\n onFeatureUsed,\n}: ModelsTreeProps) {\n const [filteringError, setFilteringError] = useState<CategoriesTreeFilteringError | undefined>();\n const visibilityHandlerFactory = useCallback(() => {\n const visibilityHandler = new CategoriesVisibilityHandler({\n imodel,\n viewport: activeView,\n viewManager: viewManager ?? IModelApp.viewManager,\n categories,\n allViewports,\n });\n return {\n getVisibilityStatus: async (node: HierarchyNode) => visibilityHandler.getVisibilityStatus(node),\n changeVisibility: async (node: HierarchyNode, on: boolean) => visibilityHandler.changeVisibility(node, on),\n onVisibilityChange: visibilityHandler.onVisibilityChange,\n dispose: () => visibilityHandler.dispose(),\n };\n }, [activeView, allViewports, categories, imodel, viewManager]);\n\n const { reportUsage } = useFeatureReporting({ onFeatureUsed, treeIdentifier: CategoriesTreeComponent.id });\n\n const getDefinitionsProvider = useCallback(\n (props: Parameters<GetHierarchyDefinitionCallback>[0]) => {\n return new CategoriesTreeDefinition({ ...props, viewType: activeView.view.is2d() ? \"2d\" : \"3d\" });\n },\n [activeView],\n );\n\n const getSearchFilteredPaths = useMemo<GetFilteredPathsCallback | undefined>(() => {\n setFilteringError(undefined);\n if (!filter) {\n return undefined;\n }\n return async ({ imodelAccess }) => {\n reportUsage?.({ featureId: \"filtering\", reportInteraction: true });\n try {\n return await CategoriesTreeDefinition.createInstanceKeyPaths({ imodelAccess, label: filter, viewType: activeView.view.is2d() ? \"2d\" : \"3d\" });\n } catch (e) {\n const newError = e instanceof Error && e.message.match(/Filter matches more than \\d+ items/) ? \"tooManyFilterMatches\" : \"unknownFilterError\";\n setFilteringError(newError);\n return [];\n }\n };\n }, [filter, activeView, reportUsage]);\n\n return (\n <VisibilityTree\n height={height}\n width={width}\n imodel={imodel}\n treeName={CategoriesTreeComponent.id}\n getSchemaContext={getSchemaContext}\n visibilityHandlerFactory={visibilityHandlerFactory}\n getHierarchyDefinition={getDefinitionsProvider}\n getFilteredPaths={getSearchFilteredPaths}\n hierarchyLevelSizeLimit={hierarchyLevelConfig?.sizeLimit}\n getSublabel={getSublabel}\n getIcon={getIcon}\n density={density}\n noDataMessage={getNoDataMessage(filter, filteringError)}\n selectionMode={selectionMode ?? \"none\"}\n onPerformanceMeasured={(action, duration) => {\n onPerformanceMeasured?.(`${CategoriesTreeComponent.id}-${action}`, duration);\n }}\n reportUsage={reportUsage}\n searchText={filter}\n />\n );\n}\n\nfunction getNoDataMessage(filter: string, error?: CategoriesTreeFilteringError) {\n if (error) {\n return <Text>{TreeWidget.translate(`categoriesTree.filtering.${error}`)}</Text>;\n }\n if (filter) {\n return <Text>{TreeWidget.translate(\"categoriesTree.filtering.noMatches\", { filter })}</Text>;\n }\n return undefined;\n}\n\nfunction getIcon() {\n return <SvgLayers />;\n}\n\nfunction getSublabel(node: PresentationHierarchyNode) {\n return node.extendedData?.description;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ /// <reference types="react" />
2
+ import type { CategoryInfo } from "../common/CategoriesVisibilityUtils";
3
+ import type { TreeHeaderButtonProps } from "../../tree-header/TreeHeader";
4
+ /**
5
+ * Props that get passed to `CategoriesTreeComponent` header button renderer.
6
+ * @see CategoriesTreeComponentProps.headerButtons
7
+ * @public
8
+ */
9
+ export interface CategoriesTreeHeaderButtonProps extends TreeHeaderButtonProps {
10
+ /** A list of categories available in the iModel */
11
+ categories: CategoryInfo[];
12
+ /** In case the tree is filtered, a list of filtered categories. */
13
+ filteredCategories?: CategoryInfo[];
14
+ }
15
+ /** @internal */
16
+ export declare function ShowAllButton(props: CategoriesTreeHeaderButtonProps): JSX.Element;
17
+ /** @internal */
18
+ export declare function HideAllButton(props: CategoriesTreeHeaderButtonProps): JSX.Element;
19
+ /** @internal */
20
+ export declare function InvertAllButton(props: CategoriesTreeHeaderButtonProps): JSX.Element;
21
+ //# sourceMappingURL=CategoriesTreeButtons.d.ts.map
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvertAllButton = exports.HideAllButton = exports.ShowAllButton = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ /*---------------------------------------------------------------------------------------------
6
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
7
+ * See LICENSE.md in the project root for license terms and full copyright notice.
8
+ *--------------------------------------------------------------------------------------------*/
9
+ const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
10
+ const itwinui_react_1 = require("@itwin/itwinui-react");
11
+ const TreeWidget_1 = require("../../../TreeWidget");
12
+ const CategoriesVisibilityUtils_1 = require("../common/CategoriesVisibilityUtils");
13
+ /** @internal */
14
+ function ShowAllButton(props) {
15
+ return ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", title: TreeWidget_1.TreeWidget.translate("categoriesTree.buttons.showAll.tooltip"), onClick: () => {
16
+ props.onFeatureUsed?.(`categories-tree-showall`);
17
+ void (0, CategoriesVisibilityUtils_1.showAllCategories)((props.filteredCategories ?? props.categories).map((category) => category.categoryId), props.viewport);
18
+ }, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityShow, {}) }));
19
+ }
20
+ exports.ShowAllButton = ShowAllButton;
21
+ /** @internal */
22
+ function HideAllButton(props) {
23
+ return ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", title: TreeWidget_1.TreeWidget.translate("categoriesTree.buttons.hideAll.tooltip"), onClick: () => {
24
+ props.onFeatureUsed?.(`categories-tree-hideall`);
25
+ void (0, CategoriesVisibilityUtils_1.hideAllCategories)((props.filteredCategories ?? props.categories).map((category) => category.categoryId), props.viewport);
26
+ }, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityHide, {}) }));
27
+ }
28
+ exports.HideAllButton = HideAllButton;
29
+ /** @internal */
30
+ function InvertAllButton(props) {
31
+ return ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { title: TreeWidget_1.TreeWidget.translate("categoriesTree.buttons.invert.tooltip"), size: props.density === "enlarged" ? "large" : "small", styleType: "borderless", onClick: () => {
32
+ props.onFeatureUsed?.(`categories-tree-invert`);
33
+ void (0, CategoriesVisibilityUtils_1.invertAllCategories)(props.filteredCategories ?? props.categories, props.viewport);
34
+ }, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityHalf, {}) }));
35
+ }
36
+ exports.InvertAllButton = InvertAllButton;
37
+ //# sourceMappingURL=CategoriesTreeButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoriesTreeButtons.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTreeButtons.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,oEAAqG;AACrG,wDAAkD;AAClD,oDAAiD;AACjD,mFAAgH;AAiBhH,gBAAgB;AAChB,SAAgB,aAAa,CAAC,KAAsC;IAClE,OAAO,CACL,uBAAC,0BAAU,IACT,IAAI,EAAE,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACtD,SAAS,EAAC,YAAY,EACtB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,wCAAwC,CAAC,EACrE,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,CAAC,aAAa,EAAE,CAAC,yBAAyB,CAAC,CAAC;YACjD,KAAK,IAAA,6CAAiB,EACpB,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EACrF,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC,YAED,uBAAC,uCAAiB,KAAG,GACV,CACd,CAAC;AACJ,CAAC;AAjBD,sCAiBC;AAED,gBAAgB;AAChB,SAAgB,aAAa,CAAC,KAAsC;IAClE,OAAO,CACL,uBAAC,0BAAU,IACT,IAAI,EAAE,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACtD,SAAS,EAAC,YAAY,EACtB,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,wCAAwC,CAAC,EACrE,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,CAAC,aAAa,EAAE,CAAC,yBAAyB,CAAC,CAAC;YACjD,KAAK,IAAA,6CAAiB,EACpB,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EACrF,KAAK,CAAC,QAAQ,CACf,CAAC;QACJ,CAAC,YAED,uBAAC,uCAAiB,KAAG,GACV,CACd,CAAC;AACJ,CAAC;AAjBD,sCAiBC;AAED,gBAAgB;AAChB,SAAgB,eAAe,CAAC,KAAsC;IACpE,OAAO,CACL,uBAAC,0BAAU,IACT,KAAK,EAAE,uBAAU,CAAC,SAAS,CAAC,uCAAuC,CAAC,EACpE,IAAI,EAAE,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACtD,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,CAAC,aAAa,EAAE,CAAC,wBAAwB,CAAC,CAAC;YAChD,KAAK,IAAA,+CAAmB,EAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzF,CAAC,YAED,uBAAC,uCAAiB,KAAG,GACV,CACd,CAAC;AACJ,CAAC;AAdD,0CAcC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SvgVisibilityHalf, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { hideAllCategories, invertAllCategories, showAllCategories } from \"../common/CategoriesVisibilityUtils\";\n\nimport type { CategoryInfo } from \"../common/CategoriesVisibilityUtils\";\nimport type { TreeHeaderButtonProps } from \"../../tree-header/TreeHeader\";\n\n/**\n * Props that get passed to `CategoriesTreeComponent` header button renderer.\n * @see CategoriesTreeComponentProps.headerButtons\n * @public\n */\nexport interface CategoriesTreeHeaderButtonProps extends TreeHeaderButtonProps {\n /** A list of categories available in the iModel */\n categories: CategoryInfo[];\n /** In case the tree is filtered, a list of filtered categories. */\n filteredCategories?: CategoryInfo[];\n}\n\n/** @internal */\nexport function ShowAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n title={TreeWidget.translate(\"categoriesTree.buttons.showAll.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-showall`);\n void showAllCategories(\n (props.filteredCategories ?? props.categories).map((category) => category.categoryId),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityShow />\n </IconButton>\n );\n}\n\n/** @internal */\nexport function HideAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n title={TreeWidget.translate(\"categoriesTree.buttons.hideAll.tooltip\")}\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-hideall`);\n void hideAllCategories(\n (props.filteredCategories ?? props.categories).map((category) => category.categoryId),\n props.viewport,\n );\n }}\n >\n <SvgVisibilityHide />\n </IconButton>\n );\n}\n\n/** @internal */\nexport function InvertAllButton(props: CategoriesTreeHeaderButtonProps) {\n return (\n <IconButton\n title={TreeWidget.translate(\"categoriesTree.buttons.invert.tooltip\")}\n size={props.density === \"enlarged\" ? \"large\" : \"small\"}\n styleType=\"borderless\"\n onClick={() => {\n props.onFeatureUsed?.(`categories-tree-invert`);\n void invertAllCategories(props.filteredCategories ?? props.categories, props.viewport);\n }}\n >\n <SvgVisibilityHalf />\n </IconButton>\n );\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import "../Tree.scss";
2
+ import { CategoriesTree } from "./CategoriesTree";
3
+ import { HideAllButton, InvertAllButton, ShowAllButton } from "./CategoriesTreeButtons";
4
+ import type { ComponentPropsWithoutRef } from "react";
5
+ import type { SelectionStorage } from "@itwin/presentation-hierarchies-react";
6
+ import type { CategoriesTreeHeaderButtonProps } from "./CategoriesTreeButtons";
7
+ type CategoriesTreeProps = ComponentPropsWithoutRef<typeof CategoriesTree>;
8
+ interface CategoriesTreeComponentProps extends Pick<CategoriesTreeProps, "getSchemaContext" | "density" | "hierarchyLevelConfig" | "selectionMode" | "onPerformanceMeasured" | "onFeatureUsed"> {
9
+ /**
10
+ * Renderers of header buttons. Defaults to:
11
+ * ```ts
12
+ * [
13
+ * CategoriesTreeComponent.ShowAllButton,
14
+ * CategoriesTreeComponent.HideAllButton,
15
+ * CategoriesTreeComponent.InvertAllButton,
16
+ * ]
17
+ * ```
18
+ */
19
+ headerButtons?: Array<(props: CategoriesTreeHeaderButtonProps) => React.ReactNode>;
20
+ selectionStorage: SelectionStorage;
21
+ }
22
+ /**
23
+ * A component that renders `CategoriesTree` and a header with filtering capabilities and header buttons.
24
+ * @public
25
+ */
26
+ export declare const CategoriesTreeComponent: {
27
+ (props: CategoriesTreeComponentProps): JSX.Element | null;
28
+ /**
29
+ * Renders a "Show all" button that enables display of all categories and their subcategories.
30
+ * @public
31
+ */
32
+ ShowAllButton: typeof ShowAllButton;
33
+ /**
34
+ * Renders a "Hide all" button that disables display of all categories.
35
+ * @public
36
+ */
37
+ HideAllButton: typeof HideAllButton;
38
+ /**
39
+ * Renders an "Invert all" button that inverts display of all categories.
40
+ * @public
41
+ */
42
+ InvertAllButton: typeof InvertAllButton;
43
+ /**
44
+ * Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
45
+ * @public
46
+ */
47
+ id: string;
48
+ /**
49
+ * Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
50
+ * @public
51
+ */
52
+ getLabel(): string;
53
+ };
54
+ export {};
55
+ //# sourceMappingURL=CategoriesTreeComponent.d.ts.map
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CategoriesTreeComponent = void 0;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ /*---------------------------------------------------------------------------------------------
9
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
10
+ * See LICENSE.md in the project root for license terms and full copyright notice.
11
+ *--------------------------------------------------------------------------------------------*/
12
+ require("../Tree.scss");
13
+ const classnames_1 = __importDefault(require("classnames"));
14
+ const react_1 = require("react");
15
+ const appui_react_1 = require("@itwin/appui-react");
16
+ const core_frontend_1 = require("@itwin/core-frontend");
17
+ const presentation_hierarchies_react_1 = require("@itwin/presentation-hierarchies-react");
18
+ const TreeWidget_1 = require("../../../TreeWidget");
19
+ const TreeHeader_1 = require("../../tree-header/TreeHeader");
20
+ const AutoSizer_1 = require("../../utils/AutoSizer");
21
+ const UseFiltering_1 = require("../common/UseFiltering");
22
+ const CategoriesTree_1 = require("./CategoriesTree");
23
+ const CategoriesTreeButtons_1 = require("./CategoriesTreeButtons");
24
+ const UseCategories_1 = require("./UseCategories");
25
+ /**
26
+ * A component that renders `CategoriesTree` and a header with filtering capabilities and header buttons.
27
+ * @public
28
+ */
29
+ const CategoriesTreeComponent = (props) => {
30
+ const iModel = (0, appui_react_1.useActiveIModelConnection)();
31
+ const viewport = (0, appui_react_1.useActiveViewport)();
32
+ if (!iModel || !viewport) {
33
+ return null;
34
+ }
35
+ return (0, jsx_runtime_1.jsx)(CategoriesTreeComponentImpl, { ...props, iModel: iModel, viewport: viewport });
36
+ };
37
+ exports.CategoriesTreeComponent = CategoriesTreeComponent;
38
+ /**
39
+ * Renders a "Show all" button that enables display of all categories and their subcategories.
40
+ * @public
41
+ */
42
+ exports.CategoriesTreeComponent.ShowAllButton = CategoriesTreeButtons_1.ShowAllButton;
43
+ /**
44
+ * Renders a "Hide all" button that disables display of all categories.
45
+ * @public
46
+ */
47
+ exports.CategoriesTreeComponent.HideAllButton = CategoriesTreeButtons_1.HideAllButton;
48
+ /**
49
+ * Renders an "Invert all" button that inverts display of all categories.
50
+ * @public
51
+ */
52
+ exports.CategoriesTreeComponent.InvertAllButton = CategoriesTreeButtons_1.InvertAllButton;
53
+ /**
54
+ * Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
55
+ * @public
56
+ */
57
+ exports.CategoriesTreeComponent.id = "categories-tree-v2";
58
+ /**
59
+ * Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.
60
+ * @public
61
+ */
62
+ exports.CategoriesTreeComponent.getLabel = () => TreeWidget_1.TreeWidget.translate("categoriesTree.label");
63
+ function CategoriesTreeComponentImpl({ iModel, viewport, headerButtons, selectionStorage, ...treeProps }) {
64
+ const categories = (0, UseCategories_1.useCategories)(core_frontend_1.IModelApp.viewManager, iModel, viewport);
65
+ const { filter, applyFilter, clearFilter } = (0, UseFiltering_1.useFiltering)();
66
+ const density = treeProps.density;
67
+ return ((0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)("tw-tree-with-header", density === "enlarged" && "enlarge"), children: (0, jsx_runtime_1.jsxs)(presentation_hierarchies_react_1.UnifiedSelectionProvider, { storage: selectionStorage, children: [(0, jsx_runtime_1.jsx)(TreeHeader_1.TreeHeader, { onFilterStart: applyFilter, onFilterClear: clearFilter, onSelectedChanged: () => { }, density: density, children: headerButtons
68
+ ? headerButtons.map((btn, index) => (0, jsx_runtime_1.jsx)(react_1.Fragment, { children: btn({ viewport, categories, onFeatureUsed: treeProps.onFeatureUsed }) }, index))
69
+ : [
70
+ (0, jsx_runtime_1.jsx)(CategoriesTreeButtons_1.ShowAllButton, { viewport: viewport, categories: categories, density: density, onFeatureUsed: treeProps.onFeatureUsed }, "show-all-btn"),
71
+ (0, jsx_runtime_1.jsx)(CategoriesTreeButtons_1.HideAllButton, { viewport: viewport, categories: categories, density: density, onFeatureUsed: treeProps.onFeatureUsed }, "hide-all-btn"),
72
+ (0, jsx_runtime_1.jsx)(CategoriesTreeButtons_1.InvertAllButton, { viewport: viewport, categories: categories, density: density, onFeatureUsed: treeProps.onFeatureUsed }, "invert-all-btn"),
73
+ ] }), (0, jsx_runtime_1.jsx)("div", { className: "tw-tree-content", children: (0, jsx_runtime_1.jsx)(AutoSizer_1.AutoSizer, { children: ({ width, height }) => ((0, jsx_runtime_1.jsx)(CategoriesTree_1.CategoriesTree, { ...treeProps, imodel: iModel, categories: categories, activeView: viewport, width: width, height: height, filter: filter })) }) })] }) }));
74
+ }
75
+ //# sourceMappingURL=CategoriesTreeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoriesTreeComponent.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTreeComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"../Tree.scss\";\nimport classNames from \"classnames\";\nimport { Fragment } from \"react\";\nimport { useActiveIModelConnection, useActiveViewport } from \"@itwin/appui-react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { UnifiedSelectionProvider } from \"@itwin/presentation-hierarchies-react\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { TreeHeader } from \"../../tree-header/TreeHeader\";\nimport { AutoSizer } from \"../../utils/AutoSizer\";\nimport { useFiltering } from \"../common/UseFiltering\";\nimport { CategoriesTree } from \"./CategoriesTree\";\nimport { HideAllButton, InvertAllButton, ShowAllButton } from \"./CategoriesTreeButtons\";\nimport { useCategories } from \"./UseCategories\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport type { IModelConnection, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { SelectionStorage } from \"@itwin/presentation-hierarchies-react\";\nimport type { CategoriesTreeHeaderButtonProps } from \"./CategoriesTreeButtons\";\n\ntype CategoriesTreeProps = ComponentPropsWithoutRef<typeof CategoriesTree>;\n\ninterface CategoriesTreeComponentProps\n extends Pick<CategoriesTreeProps, \"getSchemaContext\" | \"density\" | \"hierarchyLevelConfig\" | \"selectionMode\" | \"onPerformanceMeasured\" | \"onFeatureUsed\"> {\n /**\n * Renderers of header buttons. Defaults to:\n * ```ts\n * [\n * CategoriesTreeComponent.ShowAllButton,\n * CategoriesTreeComponent.HideAllButton,\n * CategoriesTreeComponent.InvertAllButton,\n * ]\n * ```\n */\n headerButtons?: Array<(props: CategoriesTreeHeaderButtonProps) => React.ReactNode>;\n selectionStorage: SelectionStorage;\n}\n\n/**\n * A component that renders `CategoriesTree` and a header with filtering capabilities and header buttons.\n * @public\n */\nexport const CategoriesTreeComponent = (props: CategoriesTreeComponentProps) => {\n const iModel = useActiveIModelConnection();\n const viewport = useActiveViewport();\n\n if (!iModel || !viewport) {\n return null;\n }\n\n return <CategoriesTreeComponentImpl {...props} iModel={iModel} viewport={viewport} />;\n};\n\n/**\n * Renders a \"Show all\" button that enables display of all categories and their subcategories.\n * @public\n */\nCategoriesTreeComponent.ShowAllButton = ShowAllButton;\n\n/**\n * Renders a \"Hide all\" button that disables display of all categories.\n * @public\n */\nCategoriesTreeComponent.HideAllButton = HideAllButton;\n\n/**\n * Renders an \"Invert all\" button that inverts display of all categories.\n * @public\n */\nCategoriesTreeComponent.InvertAllButton = InvertAllButton;\n\n/**\n * Id of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @public\n */\nCategoriesTreeComponent.id = \"categories-tree-v2\";\n\n/**\n * Label of the component. May be used when a creating a `TreeDefinition` for `SelectableTree`.\n * @public\n */\nCategoriesTreeComponent.getLabel = () => TreeWidget.translate(\"categoriesTree.label\");\n\nfunction CategoriesTreeComponentImpl({\n iModel,\n viewport,\n headerButtons,\n selectionStorage,\n ...treeProps\n}: CategoriesTreeComponentProps & { iModel: IModelConnection; viewport: ScreenViewport }) {\n const categories = useCategories(IModelApp.viewManager, iModel, viewport);\n const { filter, applyFilter, clearFilter } = useFiltering();\n const density = treeProps.density;\n return (\n <div className={classNames(\"tw-tree-with-header\", density === \"enlarged\" && \"enlarge\")}>\n <UnifiedSelectionProvider storage={selectionStorage}>\n <TreeHeader onFilterStart={applyFilter} onFilterClear={clearFilter} onSelectedChanged={() => {}} density={density}>\n {headerButtons\n ? headerButtons.map((btn, index) => <Fragment key={index}>{btn({ viewport, categories, onFeatureUsed: treeProps.onFeatureUsed })}</Fragment>)\n : [\n <ShowAllButton viewport={viewport} categories={categories} key=\"show-all-btn\" density={density} onFeatureUsed={treeProps.onFeatureUsed} />,\n <HideAllButton viewport={viewport} categories={categories} key=\"hide-all-btn\" density={density} onFeatureUsed={treeProps.onFeatureUsed} />,\n <InvertAllButton viewport={viewport} categories={categories} key=\"invert-all-btn\" density={density} onFeatureUsed={treeProps.onFeatureUsed} />,\n ]}\n </TreeHeader>\n <div className=\"tw-tree-content\">\n <AutoSizer>\n {({ width, height }) => (\n <CategoriesTree {...treeProps} imodel={iModel} categories={categories} activeView={viewport} width={width} height={height} filter={filter} />\n )}\n </AutoSizer>\n </div>\n </UnifiedSelectionProvider>\n </div>\n );\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { ECClassHierarchyInspector, ECSchemaProvider } from "@itwin/presentation-shared";
2
+ import type { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyLevelDefinition, HierarchyNodeIdentifiersPath, LimitingECSqlQueryExecutor } from "@itwin/presentation-hierarchies";
3
+ interface CategoriesTreeDefinitionProps {
4
+ imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;
5
+ viewType: "2d" | "3d";
6
+ }
7
+ interface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {
8
+ imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;
9
+ label: string;
10
+ viewType: "2d" | "3d";
11
+ }
12
+ export declare class CategoriesTreeDefinition implements HierarchyDefinition {
13
+ private _impl;
14
+ private _selectQueryFactory;
15
+ private _nodeLabelSelectClauseFactory;
16
+ constructor(props: CategoriesTreeDefinitionProps);
17
+ defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition>;
18
+ private createRootHierarchyLevelDefinition;
19
+ private createSubcategoryQuery;
20
+ static createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps): Promise<HierarchyNodeIdentifiersPath[]>;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=CategoriesTreeDefinition.d.ts.map
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CategoriesTreeDefinition = void 0;
8
+ const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
9
+ const presentation_shared_1 = require("@itwin/presentation-shared");
10
+ const MAX_FILTERING_INSTANCE_KEY_COUNT = 100;
11
+ class CategoriesTreeDefinition {
12
+ constructor(props) {
13
+ this._impl = (0, presentation_hierarchies_1.createClassBasedHierarchyDefinition)({
14
+ classHierarchyInspector: props.imodelAccess,
15
+ hierarchy: {
16
+ rootNodes: async (requestProps) => this.createRootHierarchyLevelDefinition({ ...requestProps, viewType: props.viewType }),
17
+ childNodes: [
18
+ {
19
+ parentNodeClassName: "BisCore.Category",
20
+ definitions: async (requestProps) => this.createSubcategoryQuery(requestProps),
21
+ },
22
+ ],
23
+ },
24
+ });
25
+ this._selectQueryFactory = (0, presentation_hierarchies_1.createNodesQueryClauseFactory)({ imodelAccess: props.imodelAccess });
26
+ this._nodeLabelSelectClauseFactory = (0, presentation_shared_1.createBisInstanceLabelSelectClauseFactory)({ classHierarchyInspector: props.imodelAccess });
27
+ }
28
+ async defineHierarchyLevel(props) {
29
+ return this._impl.defineHierarchyLevel(props);
30
+ }
31
+ async createRootHierarchyLevelDefinition(props) {
32
+ const { categoryClass, categoryElementClass } = getClassesByView(props.viewType);
33
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
34
+ filter: props.instanceFilter,
35
+ contentClass: { fullName: categoryClass, alias: "this" },
36
+ });
37
+ return [
38
+ {
39
+ fullClassName: categoryClass,
40
+ query: {
41
+ ecsql: `
42
+ SELECT
43
+ ${await this._selectQueryFactory.createSelectClause({
44
+ ecClassId: { selector: presentation_shared_1.ECSql.createRawPropertyValueSelector("this", "ECClassId") },
45
+ ecInstanceId: { selector: "this.ECInstanceId" },
46
+ nodeLabel: {
47
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
48
+ classAlias: "this",
49
+ className: categoryClass,
50
+ }),
51
+ },
52
+ hasChildren: {
53
+ selector: `
54
+ IFNULL((
55
+ SELECT 1
56
+ FROM (
57
+ SELECT COUNT(1) AS ChildCount
58
+ FROM BisCore.SubCategory sc
59
+ WHERE sc.Parent.Id = this.ECInstanceId
60
+ )
61
+ WHERE ChildCount > 1
62
+ ), 0)
63
+ `,
64
+ },
65
+ extendedData: {
66
+ description: { selector: "this.Description" },
67
+ },
68
+ supportsFiltering: true,
69
+ })}
70
+ FROM ${instanceFilterClauses.from} this
71
+ ${instanceFilterClauses.joins}
72
+ JOIN BisCore.Model m ON m.ECInstanceId = this.Model.Id
73
+ WHERE
74
+ NOT this.IsPrivate
75
+ AND (NOT m.IsPrivate OR m.ECClassId IS (BisCore.DictionaryModel))
76
+ AND EXISTS (SELECT 1 FROM ${categoryElementClass} e WHERE e.Category.Id = this.ECInstanceId)
77
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
78
+ `,
79
+ },
80
+ },
81
+ ];
82
+ }
83
+ async createSubcategoryQuery({ parentNodeInstanceIds: elementIds, instanceFilter, }) {
84
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
85
+ filter: instanceFilter,
86
+ contentClass: { fullName: "BisCore.SubCategory", alias: "this" },
87
+ });
88
+ return [
89
+ {
90
+ fullClassName: "BisCore.SubCategory",
91
+ query: {
92
+ ecsql: `
93
+ SELECT
94
+ ${await this._selectQueryFactory.createSelectClause({
95
+ ecClassId: { selector: "this.ECClassId" },
96
+ ecInstanceId: { selector: "this.ECInstanceId" },
97
+ nodeLabel: {
98
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
99
+ classAlias: "this",
100
+ className: "BisCore.SubCategory",
101
+ }),
102
+ },
103
+ extendedData: {
104
+ categoryId: { selector: "printf('0x%x', this.Parent.Id)" },
105
+ },
106
+ supportsFiltering: false,
107
+ })}
108
+ FROM ${instanceFilterClauses.from} this
109
+ ${instanceFilterClauses.joins}
110
+ WHERE
111
+ NOT this.IsPrivate AND this.Parent.Id IN (${elementIds.map(() => "?").join(",")})
112
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
113
+ `,
114
+ bindings: elementIds.map((id) => ({ type: "id", value: id })),
115
+ },
116
+ },
117
+ ];
118
+ }
119
+ static async createInstanceKeyPaths(props) {
120
+ const labelsFactory = (0, presentation_shared_1.createBisInstanceLabelSelectClauseFactory)({ classHierarchyInspector: props.imodelAccess });
121
+ return createInstanceKeyPathsFromInstanceLabel({ ...props, labelsFactory });
122
+ }
123
+ }
124
+ exports.CategoriesTreeDefinition = CategoriesTreeDefinition;
125
+ function getClassesByView(viewType) {
126
+ return viewType === "2d"
127
+ ? { categoryClass: "BisCore.DrawingCategory", categoryElementClass: "BisCore:GeometricElement2d" }
128
+ : { categoryClass: "BisCore.SpatialCategory", categoryElementClass: "BisCore:GeometricElement3d" };
129
+ }
130
+ async function createInstanceKeyPathsFromInstanceLabel(props) {
131
+ const { categoryClass, categoryElementClass } = getClassesByView(props.viewType);
132
+ const reader = props.imodelAccess.createQueryReader({
133
+ ctes: [
134
+ `RootCategories(ClassName, ECInstanceId, ChildCount) as (
135
+ SELECT
136
+ ec_classname(this.ECClassId, 's.c'),
137
+ this.ECInstanceId,
138
+ COUNT(sc.ECInstanceId)
139
+ FROM ${categoryClass} this
140
+ JOIN BisCore.Model m ON m.ECInstanceId = this.Model.Id
141
+ JOIN BisCore.SubCategory sc ON sc.Parent.Id = this.ECInstanceId
142
+ WHERE
143
+ NOT this.IsPrivate
144
+ AND (NOT m.IsPrivate OR m.ECClassId IS (BisCore.DictionaryModel))
145
+ AND EXISTS (SELECT 1 FROM ${categoryElementClass} e WHERE e.Category.Id = this.ECInstanceId)
146
+ GROUP BY this.ECInstanceId
147
+ )`,
148
+ `SubCategoriesWithLabels(ClassName, ECInstanceId, ParentId, DisplayLabel) as (
149
+ SELECT
150
+ ec_classname(this.ECClassId, 's.c'),
151
+ this.ECInstanceId,
152
+ this.Parent.Id,
153
+ ${await props.labelsFactory.createSelectClause({
154
+ classAlias: "this",
155
+ className: "BisCore.SubCategory",
156
+ })}
157
+ FROM BisCore.SubCategory this
158
+ WHERE NOT this.IsPrivate
159
+ )`,
160
+ ],
161
+ ecsql: `
162
+ SELECT
163
+ c.ClassName AS CategoryClass,
164
+ c.ECInstanceId AS CategoryId,
165
+ IIF(c.ChildCount > 1, sc.ClassName, NULL) AS SubcategoryClass,
166
+ IIF(c.ChildCount > 1, sc.ECInstanceId, NULL) AS SubcategoryId
167
+ FROM RootCategories c
168
+ JOIN SubCategoriesWithLabels sc ON sc.ParentId = c.ECInstanceId
169
+ WHERE sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\'
170
+ LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}
171
+ `,
172
+ bindings: [{ type: "string", value: props.label.replace(/[%_\\]/g, "\\$&") }],
173
+ }, { restartToken: "tree-widget/categories-tree/filter-by-label-query" });
174
+ const paths = new Array();
175
+ for await (const row of reader) {
176
+ const path = [{ className: row.CategoryClass, id: row.CategoryId }];
177
+ row.SubcategoryId && path.push({ className: row.SubcategoryClass, id: row.SubcategoryId });
178
+ paths.push(path);
179
+ }
180
+ if (paths.length > MAX_FILTERING_INSTANCE_KEY_COUNT) {
181
+ throw new Error(`Filter matches more than ${MAX_FILTERING_INSTANCE_KEY_COUNT} items`);
182
+ }
183
+ return paths;
184
+ }
185
+ //# sourceMappingURL=CategoriesTreeDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoriesTreeDefinition.js","sourceRoot":"","sources":["../../../../../src/components/trees/categories-tree/CategoriesTreeDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createClassBasedHierarchyDefinition, createNodesQueryClauseFactory } from \"@itwin/presentation-hierarchies\";\nimport { createBisInstanceLabelSelectClauseFactory, ECSql } from \"@itwin/presentation-shared\";\n\nimport type { ECClassHierarchyInspector, ECSchemaProvider, IInstanceLabelSelectClauseFactory } from \"@itwin/presentation-shared\";\nimport type {\n DefineHierarchyLevelProps,\n DefineInstanceNodeChildHierarchyLevelProps,\n DefineRootHierarchyLevelProps,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodeIdentifiersPath,\n LimitingECSqlQueryExecutor,\n NodesQueryClauseFactory,\n} from \"@itwin/presentation-hierarchies\";\n\nconst MAX_FILTERING_INSTANCE_KEY_COUNT = 100;\n\ninterface CategoriesTreeDefinitionProps {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n viewType: \"2d\" | \"3d\";\n}\n\ninterface CategoriesTreeInstanceKeyPathsFromInstanceLabelProps {\n imodelAccess: ECClassHierarchyInspector & LimitingECSqlQueryExecutor;\n label: string;\n viewType: \"2d\" | \"3d\";\n}\n\nexport class CategoriesTreeDefinition implements HierarchyDefinition {\n private _impl: HierarchyDefinition;\n private _selectQueryFactory: NodesQueryClauseFactory;\n private _nodeLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n\n public constructor(props: CategoriesTreeDefinitionProps) {\n this._impl = createClassBasedHierarchyDefinition({\n classHierarchyInspector: props.imodelAccess,\n hierarchy: {\n rootNodes: async (requestProps) => this.createRootHierarchyLevelDefinition({ ...requestProps, viewType: props.viewType }),\n childNodes: [\n {\n parentNodeClassName: \"BisCore.Category\",\n definitions: async (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => this.createSubcategoryQuery(requestProps),\n },\n ],\n },\n });\n this._selectQueryFactory = createNodesQueryClauseFactory({ imodelAccess: props.imodelAccess });\n this._nodeLabelSelectClauseFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps) {\n return this._impl.defineHierarchyLevel(props);\n }\n\n private async createRootHierarchyLevelDefinition(props: DefineRootHierarchyLevelProps & { viewType: \"2d\" | \"3d\" }): Promise<HierarchyLevelDefinition> {\n const { categoryClass, categoryElementClass } = getClassesByView(props.viewType);\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: props.instanceFilter,\n contentClass: { fullName: categoryClass, alias: \"this\" },\n });\n return [\n {\n fullClassName: categoryClass,\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: ECSql.createRawPropertyValueSelector(\"this\", \"ECClassId\") },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: categoryClass,\n }),\n },\n hasChildren: {\n selector: `\n IFNULL((\n SELECT 1\n FROM (\n SELECT COUNT(1) AS ChildCount\n FROM BisCore.SubCategory sc\n WHERE sc.Parent.Id = this.ECInstanceId\n )\n WHERE ChildCount > 1\n ), 0)\n `,\n },\n extendedData: {\n description: { selector: \"this.Description\" },\n },\n supportsFiltering: true,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n JOIN BisCore.Model m ON m.ECInstanceId = this.Model.Id\n WHERE\n NOT this.IsPrivate\n AND (NOT m.IsPrivate OR m.ECClassId IS (BisCore.DictionaryModel))\n AND EXISTS (SELECT 1 FROM ${categoryElementClass} e WHERE e.Category.Id = this.ECInstanceId)\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n },\n },\n ];\n }\n\n private async createSubcategoryQuery({\n parentNodeInstanceIds: elementIds,\n instanceFilter,\n }: DefineInstanceNodeChildHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({\n filter: instanceFilter,\n contentClass: { fullName: \"BisCore.SubCategory\", alias: \"this\" },\n });\n return [\n {\n fullClassName: \"BisCore.SubCategory\",\n query: {\n ecsql: `\n SELECT\n ${await this._selectQueryFactory.createSelectClause({\n ecClassId: { selector: \"this.ECClassId\" },\n ecInstanceId: { selector: \"this.ECInstanceId\" },\n nodeLabel: {\n selector: await this._nodeLabelSelectClauseFactory.createSelectClause({\n classAlias: \"this\",\n className: \"BisCore.SubCategory\",\n }),\n },\n extendedData: {\n categoryId: { selector: \"printf('0x%x', this.Parent.Id)\" },\n },\n supportsFiltering: false,\n })}\n FROM ${instanceFilterClauses.from} this\n ${instanceFilterClauses.joins}\n WHERE\n NOT this.IsPrivate AND this.Parent.Id IN (${elementIds.map(() => \"?\").join(\",\")})\n ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : \"\"}\n `,\n bindings: elementIds.map((id) => ({ type: \"id\", value: id })),\n },\n },\n ];\n }\n\n public static async createInstanceKeyPaths(props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps) {\n const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });\n return createInstanceKeyPathsFromInstanceLabel({ ...props, labelsFactory });\n }\n}\n\nfunction getClassesByView(viewType: \"2d\" | \"3d\") {\n return viewType === \"2d\"\n ? { categoryClass: \"BisCore.DrawingCategory\", categoryElementClass: \"BisCore:GeometricElement2d\" }\n : { categoryClass: \"BisCore.SpatialCategory\", categoryElementClass: \"BisCore:GeometricElement3d\" };\n}\n\nasync function createInstanceKeyPathsFromInstanceLabel(\n props: CategoriesTreeInstanceKeyPathsFromInstanceLabelProps & { labelsFactory: IInstanceLabelSelectClauseFactory },\n) {\n const { categoryClass, categoryElementClass } = getClassesByView(props.viewType);\n const reader = props.imodelAccess.createQueryReader(\n {\n ctes: [\n `RootCategories(ClassName, ECInstanceId, ChildCount) as (\n SELECT\n ec_classname(this.ECClassId, 's.c'),\n this.ECInstanceId,\n COUNT(sc.ECInstanceId)\n FROM ${categoryClass} this\n JOIN BisCore.Model m ON m.ECInstanceId = this.Model.Id\n JOIN BisCore.SubCategory sc ON sc.Parent.Id = this.ECInstanceId\n WHERE\n NOT this.IsPrivate\n AND (NOT m.IsPrivate OR m.ECClassId IS (BisCore.DictionaryModel))\n AND EXISTS (SELECT 1 FROM ${categoryElementClass} e WHERE e.Category.Id = this.ECInstanceId)\n GROUP BY this.ECInstanceId\n )`,\n `SubCategoriesWithLabels(ClassName, ECInstanceId, ParentId, DisplayLabel) as (\n SELECT\n ec_classname(this.ECClassId, 's.c'),\n this.ECInstanceId,\n this.Parent.Id,\n ${await props.labelsFactory.createSelectClause({\n classAlias: \"this\",\n className: \"BisCore.SubCategory\",\n })}\n FROM BisCore.SubCategory this\n WHERE NOT this.IsPrivate\n )`,\n ],\n ecsql: `\n SELECT\n c.ClassName AS CategoryClass,\n c.ECInstanceId AS CategoryId,\n IIF(c.ChildCount > 1, sc.ClassName, NULL) AS SubcategoryClass,\n IIF(c.ChildCount > 1, sc.ECInstanceId, NULL) AS SubcategoryId\n FROM RootCategories c\n JOIN SubCategoriesWithLabels sc ON sc.ParentId = c.ECInstanceId\n WHERE sc.DisplayLabel LIKE '%' || ? || '%' ESCAPE '\\\\'\n LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}\n `,\n bindings: [{ type: \"string\", value: props.label.replace(/[%_\\\\]/g, \"\\\\$&\") }],\n },\n { restartToken: \"tree-widget/categories-tree/filter-by-label-query\" },\n );\n const paths = new Array<HierarchyNodeIdentifiersPath>();\n for await (const row of reader) {\n const path = [{ className: row.CategoryClass, id: row.CategoryId }];\n row.SubcategoryId && path.push({ className: row.SubcategoryClass, id: row.SubcategoryId });\n paths.push(path);\n }\n if (paths.length > MAX_FILTERING_INSTANCE_KEY_COUNT) {\n throw new Error(`Filter matches more than ${MAX_FILTERING_INSTANCE_KEY_COUNT} items`);\n }\n return paths;\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import { BeEvent } from "@itwin/core-bentley";
2
+ import { HierarchyNode } from "@itwin/presentation-hierarchies";
3
+ import type { CategoryInfo } from "../common/CategoriesVisibilityUtils";
4
+ import type { IModelConnection, ViewManager, Viewport } from "@itwin/core-frontend";
5
+ import type { HierarchyVisibilityHandler, VisibilityStatus } from "../common/UseHierarchyVisibility";
6
+ interface CategoriesVisibilityHandlerProps {
7
+ viewManager: ViewManager;
8
+ imodel: IModelConnection;
9
+ categories: CategoryInfo[];
10
+ viewport: Viewport;
11
+ allViewports?: boolean;
12
+ }
13
+ /** @internal */
14
+ export declare class CategoriesVisibilityHandler implements HierarchyVisibilityHandler {
15
+ private _viewManager;
16
+ private _imodel;
17
+ private _pendingVisibilityChange;
18
+ private _viewport;
19
+ private _useAllViewports;
20
+ constructor(props: CategoriesVisibilityHandlerProps);
21
+ dispose(): void;
22
+ onVisibilityChange: BeEvent<import("@itwin/core-bentley").Listener>;
23
+ /** Returns visibility status of the tree node. */
24
+ getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> | VisibilityStatus;
25
+ changeVisibility(node: HierarchyNode, on: boolean): Promise<void>;
26
+ getSubCategoryVisibility(node: HierarchyNode): "visible" | "hidden";
27
+ getCategoryVisibility(node: HierarchyNode): "visible" | "hidden";
28
+ private onDisplayStyleChanged;
29
+ private onViewedCategoriesChanged;
30
+ private onVisibilityChangeInternal;
31
+ static getInstanceIdFromHierarchyNode(node: HierarchyNode): string;
32
+ enableCategory(ids: string[], enabled: boolean, enableAllSubCategories?: boolean): Promise<void>;
33
+ enableSubCategory(key: string, enabled: boolean): void;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=CategoriesVisibilityHandler.d.ts.map