@itwin/tree-widget-react 4.0.0-alpha.2 → 4.0.0-alpha.20

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 (309) hide show
  1. package/CHANGELOG.md +281 -1
  2. package/README.md +190 -63
  3. package/lib/esm/tree-widget-react/TreeWidget.d.ts +7 -4
  4. package/lib/esm/tree-widget-react/TreeWidget.js +32 -12
  5. package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
  6. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.d.ts +7 -1
  7. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js +22 -23
  8. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -1
  9. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +4 -3
  10. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  11. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +4 -3
  12. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -1
  13. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +1 -1
  14. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +6 -6
  15. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -1
  16. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.css +3 -2
  17. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.d.ts +4 -4
  18. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js +1 -1
  19. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js.map +1 -1
  20. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.css +1 -0
  21. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +12 -5
  22. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +13 -9
  23. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -1
  24. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +3 -3
  25. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +3 -2
  26. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +11 -7
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +64 -14
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +8 -6
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -4
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +41 -8
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +700 -125
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +18 -7
  37. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +124 -83
  38. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  39. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +70 -0
  40. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +504 -0
  41. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -0
  42. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.d.ts +41 -0
  43. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +50 -0
  44. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +1 -0
  45. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +27 -0
  46. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +136 -0
  47. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
  48. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.d.ts +54 -0
  49. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +291 -0
  50. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -0
  51. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.d.ts +64 -0
  52. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js +94 -0
  53. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHelper.js.map +1 -0
  54. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.d.ts +36 -0
  55. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js +219 -0
  56. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/FilteredTree.js.map +1 -0
  57. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +12 -0
  58. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +19 -0
  59. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -0
  60. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +30 -0
  61. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +47 -0
  62. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -0
  63. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +45 -0
  64. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +569 -0
  65. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -0
  66. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +6 -0
  67. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js +33 -0
  68. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -0
  69. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +24 -0
  70. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +115 -0
  71. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -0
  72. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.d.ts +44 -0
  73. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js +61 -0
  74. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTreeDefinition.js.map +1 -0
  75. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +50 -0
  76. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +364 -0
  77. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -0
  78. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +19 -0
  79. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +32 -0
  80. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -0
  81. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.d.ts +20 -0
  82. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js +53 -0
  83. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseFilteredPaths.js.map +1 -0
  84. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.d.ts +37 -0
  85. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +177 -0
  86. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -0
  87. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.d.ts +55 -0
  88. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js +53 -0
  89. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHelper.js.map +1 -0
  90. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.d.ts +32 -0
  91. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js +168 -0
  92. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/FilteredTree.js.map +1 -0
  93. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +11 -23
  94. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +22 -76
  95. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
  96. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.d.ts +28 -4
  97. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js +73 -2
  98. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js.map +1 -1
  99. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js +1 -0
  100. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js.map +1 -1
  101. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.d.ts +186 -0
  102. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js +79 -0
  103. package/lib/esm/tree-widget-react/components/trees/common/TreeWidgetViewport.js.map +1 -0
  104. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +15 -7
  105. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +33 -22
  106. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  107. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -0
  108. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js +2 -1
  109. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
  110. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +45 -23
  111. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +110 -44
  112. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  113. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +2 -3
  114. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +4 -5
  115. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -1
  116. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -0
  117. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js +1 -0
  118. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js.map +1 -1
  119. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.css +25 -0
  120. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +27 -0
  121. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +47 -0
  122. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -0
  123. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +1 -0
  124. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +4 -3
  125. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
  126. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.css +16 -0
  127. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.d.ts +7 -0
  128. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +19 -0
  129. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js.map +1 -0
  130. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +11 -0
  131. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +9 -12
  132. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +55 -38
  133. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  134. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.css +2 -1
  135. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +24 -8
  136. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +41 -25
  137. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  138. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +6 -1
  139. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +13 -4
  140. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  141. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +6 -5
  142. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +7 -7
  143. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  144. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +5 -5
  145. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js +10 -6
  146. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
  147. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +5 -3
  148. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +17 -15
  149. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  150. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.d.ts +74 -0
  151. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js +207 -0
  152. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  153. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.d.ts +43 -0
  154. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js +47 -0
  155. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js.map +1 -0
  156. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.d.ts +12 -0
  157. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +112 -0
  158. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -0
  159. package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.d.ts → internal/Rxjs.d.ts} +9 -2
  160. package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.js → internal/Rxjs.js} +10 -2
  161. package/lib/esm/tree-widget-react/components/trees/common/internal/Rxjs.js.map +1 -0
  162. package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.d.ts → internal/Tooltip.d.ts} +4 -8
  163. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js +18 -0
  164. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -0
  165. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +14 -0
  166. package/lib/esm/tree-widget-react/components/{tree-header/SearchBox.css → trees/common/internal/Types.js} +2 -4
  167. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -0
  168. package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.d.ts +6 -0
  169. package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.js +24 -0
  170. package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveTreeWidgetViewport.js.map +1 -0
  171. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.d.ts → internal/UseHierarchiesLocalization.d.ts} +3 -2
  172. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.js → internal/UseHierarchiesLocalization.js} +6 -2
  173. package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchiesLocalization.js.map +1 -0
  174. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.d.ts → internal/UseHierarchyFiltering.d.ts} +1 -1
  175. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.js → internal/UseHierarchyFiltering.js} +5 -4
  176. package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchyFiltering.js.map +1 -0
  177. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +17 -0
  178. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +32 -0
  179. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -0
  180. package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.d.ts → internal/UseIModelChangeListener.d.ts} +1 -0
  181. package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.js → internal/UseIModelChangeListener.js} +1 -0
  182. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelChangeListener.js.map +1 -0
  183. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +70 -0
  184. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +172 -0
  185. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -0
  186. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +20 -0
  187. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js +60 -0
  188. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -0
  189. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +39 -0
  190. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +160 -0
  191. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
  192. package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.d.ts +3 -0
  193. package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.js +12 -0
  194. package/lib/esm/tree-widget-react/components/trees/common/internal/useGuid.js.map +1 -0
  195. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.d.ts +68 -0
  196. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js +170 -0
  197. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseCachedVisibility.js.map +1 -0
  198. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.d.ts +20 -0
  199. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js +46 -0
  200. package/lib/esm/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.js.map +1 -0
  201. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.d.ts +91 -0
  202. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js +112 -0
  203. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.js.map +1 -0
  204. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +236 -0
  205. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +600 -0
  206. package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -0
  207. package/lib/esm/tree-widget-react/components/trees/common/useGuid.d.ts +2 -0
  208. package/lib/esm/tree-widget-react/components/trees/common/useGuid.js +11 -0
  209. package/lib/esm/tree-widget-react/components/trees/common/useGuid.js.map +1 -0
  210. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +7 -2
  211. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +29 -20
  212. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  213. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +2 -6
  214. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +2 -2
  215. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  216. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +5 -6
  217. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +36 -21
  218. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
  219. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -2
  220. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +48 -36
  221. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  222. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +2 -6
  223. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +2 -2
  224. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  225. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +13 -4
  226. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +80 -74
  227. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  228. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +7 -10
  229. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +45 -36
  230. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
  231. package/lib/esm/tree-widget-react/components/trees/index.d.ts +16 -5
  232. package/lib/esm/tree-widget-react/components/trees/index.js +16 -4
  233. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  234. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +3 -3
  235. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -2
  236. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  237. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +3 -3
  238. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +34 -24
  239. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  240. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -7
  241. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +11 -7
  242. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  243. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +24 -20
  244. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +193 -154
  245. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  246. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +60 -10
  247. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +97 -238
  248. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  249. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +22 -25
  250. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +280 -298
  251. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  252. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.d.ts +1 -1
  253. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
  254. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +41 -0
  255. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +253 -0
  256. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
  257. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.d.ts +27 -0
  258. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.js +148 -0
  259. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/FilteredTree.js.map +1 -0
  260. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.d.ts +76 -0
  261. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +269 -0
  262. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -0
  263. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.d.ts +53 -0
  264. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js +71 -0
  265. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHelper.js.map +1 -0
  266. package/lib/esm/tree-widget-react-internal.d.ts +12 -0
  267. package/lib/esm/tree-widget-react-internal.js +18 -0
  268. package/lib/esm/tree-widget-react-internal.js.map +1 -0
  269. package/lib/public/locales/en/TreeWidget.json +41 -54
  270. package/package.json +76 -79
  271. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +0 -28
  272. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js +0 -87
  273. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +0 -1
  274. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.d.ts +0 -7
  275. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js +0 -66
  276. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js.map +0 -1
  277. package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +0 -1
  278. package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js +0 -24
  279. package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js.map +0 -1
  280. package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.d.ts +0 -7
  281. package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js +0 -21
  282. package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +0 -1
  283. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.d.ts +0 -11
  284. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js +0 -24
  285. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js.map +0 -1
  286. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchiesLocalization.js.map +0 -1
  287. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.js.map +0 -1
  288. package/lib/esm/tree-widget-react/components/trees/common/UseIModelChangeListener.js.map +0 -1
  289. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +0 -20
  290. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +0 -127
  291. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +0 -1
  292. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.d.ts +0 -7
  293. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.js +0 -12
  294. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTreeContent.js.map +0 -1
  295. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +0 -7
  296. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +0 -21
  297. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +0 -1
  298. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +0 -29
  299. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +0 -138
  300. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
  301. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +0 -25
  302. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +0 -173
  303. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +0 -1
  304. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +0 -106
  305. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +0 -663
  306. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +0 -1
  307. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +0 -12
  308. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js +0 -48
  309. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { useCallback, useEffect, useRef, useState } from "react";
6
+ import { useIModelChangeListener } from "../UseIModelChangeListener.js";
7
+ /** @internal */
8
+ export function useIdsCache(props) {
9
+ const cacheRef = useRef(undefined);
10
+ const clearCacheRef = useRef(() => {
11
+ cacheRef.current?.[Symbol.dispose]?.();
12
+ cacheRef.current = undefined;
13
+ });
14
+ const { imodel, createCache, cacheSpecificProps } = props;
15
+ const createCacheGetterRef = useRef((currImodel, specificProps, componentId) => {
16
+ return () => {
17
+ if (cacheRef.current === undefined) {
18
+ cacheRef.current = createCache({ imodel: currImodel, specificProps, componentId });
19
+ }
20
+ return cacheRef.current;
21
+ };
22
+ });
23
+ const [getCache, setCacheGetter] = useState(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));
24
+ useEffect(() => {
25
+ // clear cache in case it was created before `useEffect` was run first time
26
+ clearCacheRef.current();
27
+ // make sure all cache users rerender
28
+ setCacheGetter(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));
29
+ return () => {
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31
+ clearCacheRef.current();
32
+ };
33
+ }, [imodel, cacheSpecificProps, props.componentId]);
34
+ useIModelChangeListener({
35
+ imodel,
36
+ action: useCallback(() => {
37
+ clearCacheRef.current();
38
+ // make sure all cache users rerender
39
+ setCacheGetter(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));
40
+ }, [imodel, cacheSpecificProps, props.componentId]),
41
+ });
42
+ return {
43
+ getCache,
44
+ };
45
+ }
46
+ //# sourceMappingURL=UseIdsCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UseIdsCache.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/common/internal/useTreeHooks/UseIdsCache.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAoBxE,gBAAgB;AAChB,MAAM,UAAU,WAAW,CACzB,KAAoD;IAEpD,MAAM,QAAQ,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE;QAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACvC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;IAE1D,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,UAA4B,EAAE,aAAkC,EAAE,WAAuB,EAAE,EAAE;QAChI,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACnC,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAe,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAE7I,SAAS,CAAC,GAAG,EAAE;QACb,2EAA2E;QAC3E,aAAa,CAAC,OAAO,EAAE,CAAC;QAExB,qCAAqC;QACrC,cAAc,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAClG,OAAO,GAAG,EAAE;YACV,uDAAuD;YACvD,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAEpD,uBAAuB,CAAC;QACtB,MAAM;QACN,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE;YACvB,aAAa,CAAC,OAAO,EAAE,CAAC;YACxB,qCAAqC;YACrC,cAAc,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACpG,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;KACpD,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;KACT,CAAC;AACJ,CAAC","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, useEffect, useRef, useState } from \"react\";\nimport { useIModelChangeListener } from \"../UseIModelChangeListener.js\";\n\nimport type { GuidString } from \"@itwin/core-bentley\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\n\n/** @internal */\nexport interface CreateCacheProps<TCacheSpecificProps> {\n imodel: IModelConnection;\n specificProps: TCacheSpecificProps;\n componentId: GuidString;\n}\n\n/** @internal */\nexport interface UseIdsCacheProps<TCache, TCacheSpecificProps> {\n imodel: IModelConnection;\n createCache: (props: CreateCacheProps<TCacheSpecificProps>) => TCache;\n cacheSpecificProps: TCacheSpecificProps;\n componentId: GuidString;\n}\n\n/** @internal */\nexport function useIdsCache<TCache extends Disposable, TCacheSpecificProps extends object>(\n props: UseIdsCacheProps<TCache, TCacheSpecificProps>,\n): { getCache: () => TCache } {\n const cacheRef = useRef<TCache | undefined>(undefined);\n const clearCacheRef = useRef(() => {\n cacheRef.current?.[Symbol.dispose]?.();\n cacheRef.current = undefined;\n });\n const { imodel, createCache, cacheSpecificProps } = props;\n\n const createCacheGetterRef = useRef((currImodel: IModelConnection, specificProps: TCacheSpecificProps, componentId: GuidString) => {\n return () => {\n if (cacheRef.current === undefined) {\n cacheRef.current = createCache({ imodel: currImodel, specificProps, componentId });\n }\n return cacheRef.current;\n };\n });\n\n const [getCache, setCacheGetter] = useState<() => TCache>(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));\n\n useEffect(() => {\n // clear cache in case it was created before `useEffect` was run first time\n clearCacheRef.current();\n\n // make sure all cache users rerender\n setCacheGetter(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n clearCacheRef.current();\n };\n }, [imodel, cacheSpecificProps, props.componentId]);\n\n useIModelChangeListener({\n imodel,\n action: useCallback(() => {\n clearCacheRef.current();\n // make sure all cache users rerender\n setCacheGetter(() => createCacheGetterRef.current(imodel, cacheSpecificProps, props.componentId));\n }, [imodel, cacheSpecificProps, props.componentId]),\n });\n\n return {\n getCache,\n };\n}\n"]}
@@ -0,0 +1,91 @@
1
+ import { HierarchyFilteringPath, HierarchyNode } from "@itwin/presentation-hierarchies";
2
+ import type { Id64String } from "@itwin/core-bentley";
3
+ import type { ClassGroupingNodeKey, InstancesNodeKey } from "@itwin/presentation-hierarchies";
4
+ import type { InstanceKey } from "@itwin/presentation-shared";
5
+ /** @internal */
6
+ export type FilteredTreeNodeChildren<TFilteredTreeNode> = Map<Id64String, TFilteredTreeNode>;
7
+ /**
8
+ * A generic interface for a filtered tree root node.
9
+ *
10
+ * It differs from `BaseFilteredTreeNode` in that it only contains children details and nothing else.
11
+ * @internal
12
+ */
13
+ export interface FilteredTreeRootNode<TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {
14
+ children: FilteredTreeNodeChildren<TFilteredTreeNode>;
15
+ }
16
+ /**
17
+ * A generic interface for a filtered tree node.
18
+ *
19
+ * It represents every node in a filtered tree structure.
20
+ * @internal
21
+ * */
22
+ export interface BaseFilteredTreeNode<TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {
23
+ type: string;
24
+ id: Id64String;
25
+ children?: FilteredTreeNodeChildren<TFilteredTreeNode>;
26
+ isFilterTarget: boolean;
27
+ }
28
+ /**
29
+ * Class that provides methods to handle filtered nodes in a tree structure.
30
+ *
31
+ * It provides two methods that can be shared across different filtered trees:
32
+ * - `processFilteredNodes` - processes filtered nodes and returns a function to get filter targets for a node.
33
+ * - `accept` - accepts a new node and adds it to the tree structure.
34
+ * @internal
35
+ */
36
+ export declare abstract class FilteredNodesHandler<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {
37
+ readonly root: FilteredTreeRootNode<TFilteredTreeNode>;
38
+ readonly filteredNodesArr: TFilteredTreeNode[];
39
+ /** Returns filtered tree node type based on its' className */
40
+ abstract getType(className: string): Promise<TFilteredTreeNode["type"]>;
41
+ /** Converts nodes to filter targets */
42
+ abstract convertNodesToFilterTargets(filteredNodes: TFilteredTreeNode[], processedFilteredNodes: TProcessedFilteredNodes): TFilterTargets | undefined;
43
+ /**
44
+ * Processes filtered nodes.
45
+ *
46
+ * Nodes are created using filtering paths, and some information is not present in the filtering paths.
47
+ * Because of this, some nodes may need to be processed to get additional information.
48
+ *
49
+ * E.g. Retrieving categoryId of elements can't be done using filtering paths.
50
+ */
51
+ abstract getProcessedFilteredNodes(): Promise<TProcessedFilteredNodes>;
52
+ /** Creates filtered nodes */
53
+ abstract createFilteredTreeNode(props: {
54
+ type: TFilteredTreeNode["type"];
55
+ id: Id64String;
56
+ isFilterTarget: boolean;
57
+ parent: TFilteredTreeNode | FilteredTreeRootNode<TFilteredTreeNode>;
58
+ }): TFilteredTreeNode;
59
+ processFilteredNodes(): Promise<{
60
+ getNodeFilterTargets: (node: HierarchyNode & {
61
+ key: ClassGroupingNodeKey | InstancesNodeKey;
62
+ }) => TFilterTargets | undefined;
63
+ }>;
64
+ /** Takes a new node and adds it to the tree structure. */
65
+ accept(props: {
66
+ instanceKey: InstanceKey;
67
+ parentNode: TFilteredTreeNode | FilteredTreeRootNode<TFilteredTreeNode>;
68
+ isFilterTarget: boolean;
69
+ }): Promise<TFilteredTreeNode>;
70
+ /** Takes a specific node and gets all filter targets related to it. */
71
+ private getNodeFilterTargets;
72
+ /** Finds filtered nodes that match the given keys. */
73
+ private findMatchingFilteredNodes;
74
+ }
75
+ /** @internal */
76
+ export interface FilteredTree<TFilterTargets> {
77
+ getFilterTargets: (node: HierarchyNode & {
78
+ key: ClassGroupingNodeKey | InstancesNodeKey;
79
+ }) => TFilterTargets | undefined;
80
+ }
81
+ /** @internal */
82
+ export interface CreateFilteredTreeProps<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {
83
+ filteredNodesHandler: FilteredNodesHandler<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode>;
84
+ filteringPaths: HierarchyFilteringPath[];
85
+ }
86
+ /**
87
+ * Function iterates over filtering paths and creates uses `filteredNodesHandler` to create a filtered tree.
88
+ * @internal
89
+ */
90
+ export declare function createFilteredTree<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>>(props: CreateFilteredTreeProps<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode>): Promise<FilteredTree<TFilterTargets>>;
91
+ //# sourceMappingURL=BaseFilteredTree.d.ts.map
@@ -0,0 +1,112 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { Id64 } from "@itwin/core-bentley";
6
+ import { HierarchyFilteringPath, HierarchyNode, HierarchyNodeIdentifier, HierarchyNodeKey } from "@itwin/presentation-hierarchies";
7
+ /**
8
+ * Class that provides methods to handle filtered nodes in a tree structure.
9
+ *
10
+ * It provides two methods that can be shared across different filtered trees:
11
+ * - `processFilteredNodes` - processes filtered nodes and returns a function to get filter targets for a node.
12
+ * - `accept` - accepts a new node and adds it to the tree structure.
13
+ * @internal
14
+ */
15
+ export class FilteredNodesHandler {
16
+ root = {
17
+ children: new Map(),
18
+ };
19
+ filteredNodesArr = new Array();
20
+ async processFilteredNodes() {
21
+ const processedFilteredNodes = await this.getProcessedFilteredNodes();
22
+ return {
23
+ getNodeFilterTargets: (node) => this.getNodeFilterTargets(node, processedFilteredNodes),
24
+ };
25
+ }
26
+ /** Takes a new node and adds it to the tree structure. */
27
+ async accept(props) {
28
+ const { instanceKey, parentNode, isFilterTarget } = props;
29
+ const type = await this.getType(instanceKey.className);
30
+ const newNode = this.createFilteredTreeNode({
31
+ type,
32
+ id: instanceKey.id,
33
+ isFilterTarget,
34
+ parent: parentNode,
35
+ });
36
+ (parentNode.children ??= new Map()).set(instanceKey.id, newNode);
37
+ this.filteredNodesArr.push(newNode);
38
+ return newNode;
39
+ }
40
+ /** Takes a specific node and gets all filter targets related to it. */
41
+ getNodeFilterTargets(node, processedFilteredNodes) {
42
+ let lookupParents = [this.root];
43
+ // find the filtered parent nodes of the `node`
44
+ for (const parentKey of node.parentKeys) {
45
+ if (!HierarchyNodeKey.isInstances(parentKey)) {
46
+ continue;
47
+ }
48
+ // tree node might be merged from multiple instances. As filtered tree stores only one instance per node, we need to find all matching nodes
49
+ // and use them when checking for matching node in one level deeper.
50
+ const parentNodes = this.findMatchingFilteredNodes(lookupParents, parentKey.instanceKeys.map((key) => key.id));
51
+ if (parentNodes.length === 0) {
52
+ return undefined;
53
+ }
54
+ lookupParents = parentNodes;
55
+ }
56
+ const ids = HierarchyNode.isInstancesNode(node) ? node.key.instanceKeys.map(({ id }) => id) : node.groupedInstanceKeys.map(({ id }) => id);
57
+ // find filtered nodes that match the `node`
58
+ const filteredNodes = this.findMatchingFilteredNodes(lookupParents, ids);
59
+ if (filteredNodes.length === 0) {
60
+ return undefined;
61
+ }
62
+ return this.convertNodesToFilterTargets(filteredNodes, processedFilteredNodes);
63
+ }
64
+ /** Finds filtered nodes that match the given keys. */
65
+ findMatchingFilteredNodes(lookupParents, ids) {
66
+ return lookupParents.flatMap((lookup) => {
67
+ const childrenArray = Array();
68
+ for (const id of Id64.iterable(ids)) {
69
+ const node = lookup.children?.get(id);
70
+ if (node) {
71
+ childrenArray.push(node);
72
+ }
73
+ }
74
+ return childrenArray;
75
+ });
76
+ }
77
+ }
78
+ /**
79
+ * Function iterates over filtering paths and creates uses `filteredNodesHandler` to create a filtered tree.
80
+ * @internal
81
+ */
82
+ export async function createFilteredTree(props) {
83
+ const { filteringPaths, filteredNodesHandler } = props;
84
+ for (const filteringPath of filteringPaths) {
85
+ const normalizedPath = HierarchyFilteringPath.normalize(filteringPath).path;
86
+ let parentNode = filteredNodesHandler.root;
87
+ for (let i = 0; i < normalizedPath.length; ++i) {
88
+ if ("type" in parentNode && "isFilterTarget" in parentNode && parentNode.isFilterTarget) {
89
+ break;
90
+ }
91
+ const identifier = normalizedPath[i];
92
+ if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {
93
+ break;
94
+ }
95
+ const currentNode = parentNode.children?.get(identifier.id);
96
+ if (currentNode !== undefined) {
97
+ parentNode = currentNode;
98
+ continue;
99
+ }
100
+ parentNode = await filteredNodesHandler.accept({
101
+ instanceKey: identifier,
102
+ parentNode,
103
+ isFilterTarget: i === normalizedPath.length - 1,
104
+ });
105
+ }
106
+ }
107
+ const processedFilteredNodes = await filteredNodesHandler.processFilteredNodes();
108
+ return {
109
+ getFilterTargets: (node) => processedFilteredNodes.getNodeFilterTargets(node),
110
+ };
111
+ }
112
+ //# sourceMappingURL=BaseFilteredTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseFilteredTree.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/common/internal/visibility/BaseFilteredTree.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 { Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyFilteringPath, HierarchyNode, HierarchyNodeIdentifier, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\n\nimport type { Id64Arg, Id64String } from \"@itwin/core-bentley\";\nimport type { ClassGroupingNodeKey, InstancesNodeKey } from \"@itwin/presentation-hierarchies\";\nimport type { InstanceKey } from \"@itwin/presentation-shared\";\n\n/** @internal */\nexport type FilteredTreeNodeChildren<TFilteredTreeNode> = Map<Id64String, TFilteredTreeNode>;\n\n/**\n * A generic interface for a filtered tree root node.\n *\n * It differs from `BaseFilteredTreeNode` in that it only contains children details and nothing else.\n * @internal\n */\nexport interface FilteredTreeRootNode<TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {\n children: FilteredTreeNodeChildren<TFilteredTreeNode>;\n}\n\n/**\n * A generic interface for a filtered tree node.\n *\n * It represents every node in a filtered tree structure.\n * @internal\n * */\nexport interface BaseFilteredTreeNode<TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {\n type: string;\n id: Id64String;\n children?: FilteredTreeNodeChildren<TFilteredTreeNode>;\n isFilterTarget: boolean;\n}\n\n/**\n * Class that provides methods to handle filtered nodes in a tree structure.\n *\n * It provides two methods that can be shared across different filtered trees:\n * - `processFilteredNodes` - processes filtered nodes and returns a function to get filter targets for a node.\n * - `accept` - accepts a new node and adds it to the tree structure.\n * @internal\n */\nexport abstract class FilteredNodesHandler<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {\n public readonly root: FilteredTreeRootNode<TFilteredTreeNode> = {\n children: new Map(),\n };\n public readonly filteredNodesArr = new Array<TFilteredTreeNode>();\n\n /** Returns filtered tree node type based on its' className */\n public abstract getType(className: string): Promise<TFilteredTreeNode[\"type\"]>;\n /** Converts nodes to filter targets */\n public abstract convertNodesToFilterTargets(filteredNodes: TFilteredTreeNode[], processedFilteredNodes: TProcessedFilteredNodes): TFilterTargets | undefined;\n /**\n * Processes filtered nodes.\n *\n * Nodes are created using filtering paths, and some information is not present in the filtering paths.\n * Because of this, some nodes may need to be processed to get additional information.\n *\n * E.g. Retrieving categoryId of elements can't be done using filtering paths.\n */\n public abstract getProcessedFilteredNodes(): Promise<TProcessedFilteredNodes>;\n /** Creates filtered nodes */\n public abstract createFilteredTreeNode(props: {\n type: TFilteredTreeNode[\"type\"];\n id: Id64String;\n isFilterTarget: boolean;\n parent: TFilteredTreeNode | FilteredTreeRootNode<TFilteredTreeNode>;\n }): TFilteredTreeNode;\n\n public async processFilteredNodes(): Promise<{\n getNodeFilterTargets: (node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey }) => TFilterTargets | undefined;\n }> {\n const processedFilteredNodes = await this.getProcessedFilteredNodes();\n return {\n getNodeFilterTargets: (node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey }) => this.getNodeFilterTargets(node, processedFilteredNodes),\n };\n }\n\n /** Takes a new node and adds it to the tree structure. */\n public async accept(props: {\n instanceKey: InstanceKey;\n parentNode: TFilteredTreeNode | FilteredTreeRootNode<TFilteredTreeNode>;\n isFilterTarget: boolean;\n }): Promise<TFilteredTreeNode> {\n const { instanceKey, parentNode, isFilterTarget } = props;\n const type = await this.getType(instanceKey.className);\n\n const newNode = this.createFilteredTreeNode({\n type,\n id: instanceKey.id,\n isFilterTarget,\n parent: parentNode,\n });\n (parentNode.children ??= new Map()).set(instanceKey.id, newNode);\n this.filteredNodesArr.push(newNode);\n return newNode;\n }\n\n /** Takes a specific node and gets all filter targets related to it. */\n private getNodeFilterTargets(\n node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey },\n processedFilteredNodes: TProcessedFilteredNodes,\n ): TFilterTargets | undefined {\n let lookupParents: Array<FilteredTreeRootNode<TFilteredTreeNode> | TFilteredTreeNode> = [this.root];\n\n // find the filtered parent nodes of the `node`\n for (const parentKey of node.parentKeys) {\n if (!HierarchyNodeKey.isInstances(parentKey)) {\n continue;\n }\n\n // tree node might be merged from multiple instances. As filtered tree stores only one instance per node, we need to find all matching nodes\n // and use them when checking for matching node in one level deeper.\n const parentNodes = this.findMatchingFilteredNodes(\n lookupParents,\n parentKey.instanceKeys.map((key) => key.id),\n );\n if (parentNodes.length === 0) {\n return undefined;\n }\n lookupParents = parentNodes;\n }\n\n const ids = HierarchyNode.isInstancesNode(node) ? node.key.instanceKeys.map(({ id }) => id) : node.groupedInstanceKeys.map(({ id }) => id);\n // find filtered nodes that match the `node`\n const filteredNodes = this.findMatchingFilteredNodes(lookupParents, ids);\n if (filteredNodes.length === 0) {\n return undefined;\n }\n\n return this.convertNodesToFilterTargets(filteredNodes, processedFilteredNodes);\n }\n\n /** Finds filtered nodes that match the given keys. */\n private findMatchingFilteredNodes(lookupParents: Array<FilteredTreeRootNode<TFilteredTreeNode> | TFilteredTreeNode>, ids: Id64Arg) {\n return lookupParents.flatMap((lookup) => {\n const childrenArray = Array<TFilteredTreeNode>();\n for (const id of Id64.iterable(ids)) {\n const node = lookup.children?.get(id);\n if (node) {\n childrenArray.push(node);\n }\n }\n return childrenArray;\n });\n }\n}\n\n/** @internal */\nexport interface FilteredTree<TFilterTargets> {\n getFilterTargets: (node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey }) => TFilterTargets | undefined;\n}\n\n/** @internal */\nexport interface CreateFilteredTreeProps<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>> {\n filteredNodesHandler: FilteredNodesHandler<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode>;\n filteringPaths: HierarchyFilteringPath[];\n}\n\n/**\n * Function iterates over filtering paths and creates uses `filteredNodesHandler` to create a filtered tree.\n * @internal\n */\nexport async function createFilteredTree<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode extends BaseFilteredTreeNode<TFilteredTreeNode>>(\n props: CreateFilteredTreeProps<TProcessedFilteredNodes, TFilterTargets, TFilteredTreeNode>,\n): Promise<FilteredTree<TFilterTargets>> {\n const { filteringPaths, filteredNodesHandler } = props;\n\n for (const filteringPath of filteringPaths) {\n const normalizedPath = HierarchyFilteringPath.normalize(filteringPath).path;\n\n let parentNode: FilteredTreeRootNode<TFilteredTreeNode> | TFilteredTreeNode = filteredNodesHandler.root;\n for (let i = 0; i < normalizedPath.length; ++i) {\n if (\"type\" in parentNode && \"isFilterTarget\" in parentNode && parentNode.isFilterTarget) {\n break;\n }\n\n const identifier = normalizedPath[i];\n\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {\n break;\n }\n\n const currentNode: TFilteredTreeNode | undefined = parentNode.children?.get(identifier.id);\n if (currentNode !== undefined) {\n parentNode = currentNode;\n continue;\n }\n parentNode = await filteredNodesHandler.accept({\n instanceKey: identifier,\n parentNode,\n isFilterTarget: i === normalizedPath.length - 1,\n });\n }\n }\n const processedFilteredNodes = await filteredNodesHandler.processFilteredNodes();\n return {\n getFilterTargets: (node: HierarchyNode & { key: ClassGroupingNodeKey | InstancesNodeKey }) => processedFilteredNodes.getNodeFilterTargets(node),\n };\n}\n"]}
@@ -0,0 +1,236 @@
1
+ import type { Observable } from "rxjs";
2
+ import type { Id64Arg, Id64Set, Id64String } from "@itwin/core-bentley";
3
+ import type { HierarchyNode } from "@itwin/presentation-hierarchies";
4
+ import type { TreeWidgetViewport } from "../../TreeWidgetViewport.js";
5
+ import type { HierarchyVisibilityHandlerOverridableMethod, HierarchyVisibilityOverrideHandler, VisibilityStatus } from "../../UseHierarchyVisibility.js";
6
+ import type { AlwaysAndNeverDrawnElementInfo } from "../AlwaysAndNeverDrawnElementInfo.js";
7
+ /**
8
+ * Functionality of tree visibility handler methods that can be overridden.
9
+ * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.
10
+ * @beta
11
+ */
12
+ export interface BaseTreeVisibilityHandlerOverrides {
13
+ getModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
14
+ modelIds: Id64Arg;
15
+ }) => Promise<VisibilityStatus>>;
16
+ getCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
17
+ categoryIds: Id64Arg;
18
+ modelId?: Id64String;
19
+ }) => Promise<VisibilityStatus>>;
20
+ getElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
21
+ elementIds: Id64Arg;
22
+ modelId: Id64String;
23
+ categoryId: Id64String;
24
+ }) => Promise<VisibilityStatus>>;
25
+ changeModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
26
+ modelIds: Id64Arg;
27
+ on: boolean;
28
+ }) => Promise<void>>;
29
+ changeCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
30
+ categoryIds: Id64Arg;
31
+ modelId?: Id64String;
32
+ on: boolean;
33
+ }) => Promise<void>>;
34
+ changeElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: {
35
+ elementIds: Id64Arg;
36
+ modelId: Id64String;
37
+ categoryId: Id64String;
38
+ on: boolean;
39
+ }) => Promise<void>>;
40
+ }
41
+ /** @internal */
42
+ export interface BaseIdsCache {
43
+ hasSubModel: (elementId: Id64String) => Observable<boolean>;
44
+ getElementsCount: (props: {
45
+ modelId: Id64String;
46
+ categoryId: Id64String;
47
+ }) => Observable<number>;
48
+ getSubCategories: (props: {
49
+ categoryIds: Id64Arg;
50
+ }) => Observable<{
51
+ id: Id64String;
52
+ subCategories: Id64Arg | undefined;
53
+ }>;
54
+ getModels: (props: {
55
+ categoryIds: Id64Arg;
56
+ }) => Observable<{
57
+ id: Id64String;
58
+ models: Id64Arg | undefined;
59
+ }>;
60
+ getCategories: (props: {
61
+ modelIds: Id64Arg;
62
+ }) => Observable<{
63
+ id: Id64String;
64
+ drawingCategories?: Id64Arg;
65
+ spatialCategories?: Id64Arg;
66
+ }>;
67
+ getSubModels: (props: {
68
+ modelIds: Id64Arg;
69
+ categoryId?: Id64String;
70
+ } | {
71
+ categoryIds: Id64Arg;
72
+ modelId: Id64String | undefined;
73
+ }) => Observable<{
74
+ id: Id64String;
75
+ subModels: Id64Arg | undefined;
76
+ }>;
77
+ getAllCategories: () => Observable<{
78
+ drawingCategories?: Id64Set;
79
+ spatialCategories?: Id64Set;
80
+ }>;
81
+ }
82
+ /**
83
+ * Interface for a tree visibility handler that provides methods to get and change visibility status of hierarchy nodes.
84
+ * @internal
85
+ */
86
+ export interface TreeSpecificVisibilityHandler<TFilterTargets> {
87
+ getVisibilityStatus: (node: HierarchyNode) => Observable<VisibilityStatus>;
88
+ changeVisibilityStatus: (node: HierarchyNode, on: boolean) => Observable<void>;
89
+ getFilterTargetsVisibilityStatus: (targets: TFilterTargets) => Observable<VisibilityStatus>;
90
+ changeFilterTargetsVisibilityStatus: (targets: TFilterTargets, on: boolean) => Observable<void>;
91
+ }
92
+ /** @internal */
93
+ export interface BaseVisibilityHelperProps {
94
+ viewport: TreeWidgetViewport;
95
+ alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;
96
+ overrideHandler?: HierarchyVisibilityOverrideHandler;
97
+ overrides?: BaseTreeVisibilityHandlerOverrides;
98
+ baseIdsCache: BaseIdsCache;
99
+ }
100
+ /**
101
+ * Base class for visibility status getters and modifiers.
102
+ *
103
+ * It provides methods that help retrieve and change visibility status of models, categories, elements.
104
+ * @internal
105
+ */
106
+ export declare class BaseVisibilityHelper implements Disposable {
107
+ #private;
108
+ constructor(props: BaseVisibilityHelperProps);
109
+ [Symbol.dispose](): void;
110
+ /**
111
+ * Removes "always drawn exclusive" mode from the viewport without affecting any visibilities.
112
+ *
113
+ * This is achieved by:
114
+ * - Resets `alwaysDrawn` exclusive flag to `false`;
115
+ * - Turns off all categories;
116
+ * - Clears always drawn list;
117
+ * - Removes all per-model category overrides. */
118
+ removeAlwaysDrawnExclusive(): Observable<void>;
119
+ /**
120
+ * Returns visibility status of models.
121
+ *
122
+ * Determines visibility status by checking:
123
+ * - Models visibility in the viewport;
124
+ * - Models' subModels visibility (if elements' modelId is in the provided modelIds, and element is itself a model, then it is considered a subModel);
125
+ * - Categories visibility in the viewport (if elements' modelId is in the provided modelIds, then its' category gets checked).
126
+ */
127
+ getModelsVisibilityStatus(props: {
128
+ modelIds: Id64Arg;
129
+ type: "GeometricModel3d" | "GeometricModel2d";
130
+ }): Observable<VisibilityStatus>;
131
+ /**
132
+ * Gets visibility status of a model's categories, assuming model is visible.
133
+ *
134
+ * Determines visibility status by checking:
135
+ * - Elements in the viewports' always/never drawn lists;
136
+ * - Default categories visibility status in the viewport;
137
+ * - SubModels that are related to the modelId and categoryIds
138
+ */
139
+ private getVisibleModelCategoriesVisibilityStatus;
140
+ /** Gets visibility status of sub-categories, assuming category is visible. */
141
+ private getVisibleCategorySubCategoriesVisibilityStatus;
142
+ /**
143
+ * Gets visibility status of sub-categories.
144
+ *
145
+ * Determines visibility status by checking:
146
+ * - Models that contain the category visibility;
147
+ * - Per model category visibility overrides;
148
+ * - Category selector visibility in the viewport.
149
+ * - Sub-categories visibility in the viewport.
150
+ */
151
+ getSubCategoriesVisibilityStatus(props: {
152
+ subCategoryIds: Id64Arg;
153
+ categoryId: Id64String;
154
+ modelId?: Id64String;
155
+ }): Observable<VisibilityStatus>;
156
+ /**
157
+ * Gets visibility status of categories.
158
+ *
159
+ * Determines visibility status by checking:
160
+ * - Categories visibility;
161
+ * - Visibility of models that are related to the categories;
162
+ * - sub-categories visibility.
163
+ */
164
+ getCategoriesVisibilityStatus(props: {
165
+ categoryIds: Id64Arg;
166
+ modelId: Id64String | undefined;
167
+ type: "DrawingCategory" | "SpatialCategory";
168
+ }): Observable<VisibilityStatus>;
169
+ /**
170
+ * Gets visibility status of categories, assuming model is visible.
171
+ *
172
+ * Determines visibility status by checking:
173
+ * - Per model category visibility overrides;
174
+ * - Category selector visibility in the viewport.
175
+ */
176
+ getVisibleModelCategoriesDirectVisibilityStatus({ modelId, categoryIds }: {
177
+ categoryIds: Id64Arg;
178
+ modelId: Id64String;
179
+ }): VisibilityStatus;
180
+ /**
181
+ * Gets visibility status of elements.
182
+ *
183
+ * Determines visibility status by checking:
184
+ * - Elements in the viewports' always/never drawn lists;
185
+ * - Related categories and models visibility status;
186
+ * - Sub-models that are related to the specified elements.
187
+ */
188
+ getElementsVisibilityStatus(props: {
189
+ elementIds: Id64Arg;
190
+ modelId: Id64String;
191
+ categoryId: Id64String;
192
+ type: "GeometricElement3d" | "GeometricElement2d";
193
+ }): Observable<VisibilityStatus>;
194
+ /** Gets visibility status of elements based on viewport's always/never drawn elements and related categories and models. */
195
+ private getVisibilityFromAlwaysAndNeverDrawnElements;
196
+ /**
197
+ * Changes visibility status of models.
198
+ *
199
+ * Also, changes visibility status of related categories and sub-models.
200
+ */
201
+ changeModelsVisibilityStatus(props: {
202
+ modelIds: Id64Arg;
203
+ on: boolean;
204
+ }): Observable<void>;
205
+ /** Turns model on and turns off elements with categories related to that model. */
206
+ private showModelWithoutAnyCategoriesOrElements;
207
+ /** Adds per-model category overrides based on category visibility in category selector. */
208
+ private changeCategoryStateInViewportAccordingToModelVisibility;
209
+ /**
210
+ * Changes categories visibility status.
211
+ *
212
+ * Also:
213
+ * - Turns on models in cases where categories need to be turned on and models are not already on.
214
+ * - Removed related elements from always/never drawn elements.
215
+ * - changes visibility of sub-models that are related to the specified categories.
216
+ */
217
+ changeCategoriesVisibilityStatus(props: {
218
+ modelId: Id64String | undefined;
219
+ categoryIds: Id64Arg;
220
+ on: boolean;
221
+ }): Observable<void>;
222
+ /**
223
+ * Changes visibility status of elements by adding them to the viewport's always/never drawn elements.
224
+ *
225
+ * Also, changes visibility status of specified elements that are models.
226
+ */
227
+ changeElementsVisibilityStatus(props: {
228
+ elementIds: Id64Arg;
229
+ modelId: Id64String;
230
+ categoryId: Id64String;
231
+ on: boolean;
232
+ }): Observable<void>;
233
+ /** Queues visibility change for elements. */
234
+ private queueElementsVisibilityChange;
235
+ }
236
+ //# sourceMappingURL=BaseVisibilityHelper.d.ts.map