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

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 (233) hide show
  1. package/README.md +136 -1
  2. package/lib/cjs/components/SelectableTree.d.ts +12 -6
  3. package/lib/cjs/components/SelectableTree.js.map +1 -1
  4. package/lib/cjs/components/TreeSelector.d.ts +2 -2
  5. package/lib/cjs/components/TreeSelector.js.map +1 -1
  6. package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +3 -2
  7. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  8. package/lib/cjs/components/tree-header/TreeHeader.d.ts +1 -1
  9. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  10. package/lib/cjs/components/trees/categories-tree/CategoriesTree.d.ts +6 -5
  11. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js +8 -9
  12. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  13. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.d.ts +3 -3
  14. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
  15. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  16. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.d.ts +4 -4
  17. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js +7 -7
  18. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  19. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.d.ts +1 -5
  20. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.js +0 -5
  21. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
  22. package/lib/cjs/components/trees/common/FocusedInstancesContext.d.ts +0 -3
  23. package/lib/cjs/components/trees/common/FocusedInstancesContext.js +0 -2
  24. package/lib/cjs/components/trees/common/FocusedInstancesContext.js.map +1 -1
  25. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.d.ts +0 -1
  26. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js +0 -1
  27. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js.map +1 -1
  28. package/lib/cjs/components/trees/common/UseFiltering.d.ts +0 -1
  29. package/lib/cjs/components/trees/common/UseFiltering.js +0 -1
  30. package/lib/cjs/components/trees/common/UseFiltering.js.map +1 -1
  31. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.d.ts +0 -1
  32. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js +1 -1
  33. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js.map +1 -1
  34. package/lib/cjs/components/trees/common/UseHierarchyFiltering.d.ts +1 -7
  35. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js +4 -3
  36. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js.map +1 -1
  37. package/lib/cjs/components/trees/common/UseHierarchyVisibility.d.ts +15 -10
  38. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js +20 -17
  39. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  40. package/lib/cjs/components/trees/common/UseIModelChangeListener.d.ts +0 -1
  41. package/lib/cjs/components/trees/common/UseIModelChangeListener.js +0 -1
  42. package/lib/cjs/components/trees/common/UseIModelChangeListener.js.map +1 -1
  43. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.d.ts +0 -1
  44. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js +0 -1
  45. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js.map +1 -1
  46. package/lib/cjs/components/trees/common/UseNodeHighlighting.d.ts +9 -5
  47. package/lib/cjs/components/trees/common/UseNodeHighlighting.js +15 -24
  48. package/lib/cjs/components/trees/common/UseNodeHighlighting.js.map +1 -1
  49. package/lib/cjs/components/trees/common/UseTelemetryContext.d.ts +29 -0
  50. package/lib/cjs/components/trees/common/UseTelemetryContext.js +49 -0
  51. package/lib/cjs/components/trees/common/UseTelemetryContext.js.map +1 -0
  52. package/lib/cjs/components/trees/common/Utils.d.ts +3 -0
  53. package/lib/cjs/components/trees/common/Utils.js +11 -1
  54. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  55. package/lib/cjs/components/trees/common/components/Delayed.d.ts +0 -1
  56. package/lib/cjs/components/trees/common/components/Delayed.js +0 -1
  57. package/lib/cjs/components/trees/common/components/Delayed.js.map +1 -1
  58. package/lib/cjs/components/trees/common/components/ProgressOverlay.d.ts +0 -1
  59. package/lib/cjs/components/trees/common/components/ProgressOverlay.js +0 -1
  60. package/lib/cjs/components/trees/common/components/ProgressOverlay.js.map +1 -1
  61. package/lib/cjs/components/trees/common/components/Tree.d.ts +54 -0
  62. package/lib/cjs/components/trees/common/components/{BaseTree.js → Tree.js} +26 -22
  63. package/lib/cjs/components/trees/common/components/Tree.js.map +1 -0
  64. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.d.ts +14 -7
  65. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
  66. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.d.ts +7 -6
  67. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js +1 -1
  68. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js.map +1 -1
  69. package/lib/cjs/components/trees/common/components/TreeRenderer.d.ts +13 -5
  70. package/lib/cjs/components/trees/common/components/TreeRenderer.js +21 -4
  71. package/lib/cjs/components/trees/common/components/TreeRenderer.js.map +1 -1
  72. package/lib/cjs/components/trees/common/components/VisibilityTree.d.ts +27 -9
  73. package/lib/cjs/components/trees/common/components/VisibilityTree.js +8 -23
  74. package/lib/cjs/components/trees/common/components/VisibilityTree.js.map +1 -1
  75. package/lib/cjs/components/trees/common/components/VisibilityTreeRenderer.d.ts +12 -0
  76. package/lib/cjs/components/trees/common/components/VisibilityTreeRenderer.js +26 -0
  77. package/lib/cjs/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -0
  78. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +8 -7
  79. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +7 -10
  80. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  81. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +5 -5
  82. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +3 -3
  83. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  84. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +8 -7
  85. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +9 -12
  86. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  87. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +5 -5
  88. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +3 -3
  89. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  90. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  91. package/lib/cjs/components/trees/index.d.ts +7 -0
  92. package/lib/cjs/components/trees/index.js +11 -1
  93. package/lib/cjs/components/trees/index.js.map +1 -1
  94. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +10 -9
  95. package/lib/cjs/components/trees/models-tree/ModelsTree.js +19 -20
  96. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  97. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.d.ts +10 -5
  98. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js +19 -6
  99. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  100. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +11 -5
  101. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +15 -23
  102. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  103. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.d.ts +9 -5
  104. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  105. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +11 -3
  106. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  107. package/lib/cjs/tree-widget-react.d.ts +1 -1
  108. package/lib/cjs/tree-widget-react.js.map +1 -1
  109. package/lib/esm/components/SelectableTree.d.ts +12 -6
  110. package/lib/esm/components/SelectableTree.js.map +1 -1
  111. package/lib/esm/components/TreeSelector.d.ts +2 -2
  112. package/lib/esm/components/TreeSelector.js.map +1 -1
  113. package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +3 -2
  114. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  115. package/lib/esm/components/tree-header/TreeHeader.d.ts +1 -1
  116. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  117. package/lib/esm/components/trees/categories-tree/CategoriesTree.d.ts +6 -5
  118. package/lib/esm/components/trees/categories-tree/CategoriesTree.js +8 -9
  119. package/lib/esm/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  120. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.d.ts +3 -3
  121. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js +3 -3
  122. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  123. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.d.ts +4 -4
  124. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js +7 -7
  125. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  126. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.d.ts +1 -5
  127. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.js +0 -5
  128. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
  129. package/lib/esm/components/trees/common/FocusedInstancesContext.d.ts +0 -3
  130. package/lib/esm/components/trees/common/FocusedInstancesContext.js +0 -2
  131. package/lib/esm/components/trees/common/FocusedInstancesContext.js.map +1 -1
  132. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.d.ts +0 -1
  133. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js +0 -1
  134. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js.map +1 -1
  135. package/lib/esm/components/trees/common/UseFiltering.d.ts +0 -1
  136. package/lib/esm/components/trees/common/UseFiltering.js +0 -1
  137. package/lib/esm/components/trees/common/UseFiltering.js.map +1 -1
  138. package/lib/esm/components/trees/common/UseHierarchiesLocalization.d.ts +0 -1
  139. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js +1 -1
  140. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js.map +1 -1
  141. package/lib/esm/components/trees/common/UseHierarchyFiltering.d.ts +1 -7
  142. package/lib/esm/components/trees/common/UseHierarchyFiltering.js +4 -3
  143. package/lib/esm/components/trees/common/UseHierarchyFiltering.js.map +1 -1
  144. package/lib/esm/components/trees/common/UseHierarchyVisibility.d.ts +15 -10
  145. package/lib/esm/components/trees/common/UseHierarchyVisibility.js +20 -17
  146. package/lib/esm/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  147. package/lib/esm/components/trees/common/UseIModelChangeListener.d.ts +0 -1
  148. package/lib/esm/components/trees/common/UseIModelChangeListener.js +0 -1
  149. package/lib/esm/components/trees/common/UseIModelChangeListener.js.map +1 -1
  150. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.d.ts +0 -1
  151. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js +0 -1
  152. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js.map +1 -1
  153. package/lib/esm/components/trees/common/UseNodeHighlighting.d.ts +9 -5
  154. package/lib/esm/components/trees/common/UseNodeHighlighting.js +14 -23
  155. package/lib/esm/components/trees/common/UseNodeHighlighting.js.map +1 -1
  156. package/lib/esm/components/trees/common/UseTelemetryContext.d.ts +29 -0
  157. package/lib/esm/components/trees/common/UseTelemetryContext.js +43 -0
  158. package/lib/esm/components/trees/common/UseTelemetryContext.js.map +1 -0
  159. package/lib/esm/components/trees/common/Utils.d.ts +3 -0
  160. package/lib/esm/components/trees/common/Utils.js +9 -0
  161. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  162. package/lib/esm/components/trees/common/components/Delayed.d.ts +0 -1
  163. package/lib/esm/components/trees/common/components/Delayed.js +0 -1
  164. package/lib/esm/components/trees/common/components/Delayed.js.map +1 -1
  165. package/lib/esm/components/trees/common/components/ProgressOverlay.d.ts +0 -1
  166. package/lib/esm/components/trees/common/components/ProgressOverlay.js +0 -1
  167. package/lib/esm/components/trees/common/components/ProgressOverlay.js.map +1 -1
  168. package/lib/esm/components/trees/common/components/Tree.d.ts +54 -0
  169. package/lib/esm/components/trees/common/components/{BaseTree.js → Tree.js} +25 -21
  170. package/lib/esm/components/trees/common/components/Tree.js.map +1 -0
  171. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.d.ts +14 -7
  172. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js.map +1 -1
  173. package/lib/esm/components/trees/common/components/TreeNodeRenderer.d.ts +7 -6
  174. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js +1 -1
  175. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js.map +1 -1
  176. package/lib/esm/components/trees/common/components/TreeRenderer.d.ts +13 -5
  177. package/lib/esm/components/trees/common/components/TreeRenderer.js +21 -4
  178. package/lib/esm/components/trees/common/components/TreeRenderer.js.map +1 -1
  179. package/lib/esm/components/trees/common/components/VisibilityTree.d.ts +27 -9
  180. package/lib/esm/components/trees/common/components/VisibilityTree.js +8 -23
  181. package/lib/esm/components/trees/common/components/VisibilityTree.js.map +1 -1
  182. package/lib/esm/components/trees/common/components/VisibilityTreeRenderer.d.ts +12 -0
  183. package/lib/esm/components/trees/common/components/VisibilityTreeRenderer.js +22 -0
  184. package/lib/esm/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -0
  185. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +8 -7
  186. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +7 -10
  187. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  188. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +5 -5
  189. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +3 -3
  190. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  191. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +8 -7
  192. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +9 -12
  193. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  194. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +5 -5
  195. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +3 -3
  196. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  197. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  198. package/lib/esm/components/trees/index.d.ts +7 -0
  199. package/lib/esm/components/trees/index.js +5 -0
  200. package/lib/esm/components/trees/index.js.map +1 -1
  201. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +10 -9
  202. package/lib/esm/components/trees/models-tree/ModelsTree.js +19 -20
  203. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  204. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.d.ts +10 -5
  205. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js +18 -6
  206. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  207. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +11 -5
  208. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +16 -24
  209. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  210. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.d.ts +9 -5
  211. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  212. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +11 -3
  213. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  214. package/lib/esm/tree-widget-react.d.ts +1 -1
  215. package/lib/esm/tree-widget-react.js.map +1 -1
  216. package/lib/public/locales/en/TreeWidget.json +2 -1
  217. package/package.json +2 -2
  218. package/lib/cjs/components/trees/common/UseFeatureReporting.d.ts +0 -34
  219. package/lib/cjs/components/trees/common/UseFeatureReporting.js +0 -39
  220. package/lib/cjs/components/trees/common/UseFeatureReporting.js.map +0 -1
  221. package/lib/cjs/components/trees/common/UsePerformanceReporting.d.ts +0 -18
  222. package/lib/cjs/components/trees/common/UsePerformanceReporting.js +0 -25
  223. package/lib/cjs/components/trees/common/UsePerformanceReporting.js.map +0 -1
  224. package/lib/cjs/components/trees/common/components/BaseTree.d.ts +0 -34
  225. package/lib/cjs/components/trees/common/components/BaseTree.js.map +0 -1
  226. package/lib/esm/components/trees/common/UseFeatureReporting.d.ts +0 -34
  227. package/lib/esm/components/trees/common/UseFeatureReporting.js +0 -34
  228. package/lib/esm/components/trees/common/UseFeatureReporting.js.map +0 -1
  229. package/lib/esm/components/trees/common/UsePerformanceReporting.d.ts +0 -18
  230. package/lib/esm/components/trees/common/UsePerformanceReporting.js +0 -21
  231. package/lib/esm/components/trees/common/UsePerformanceReporting.js.map +0 -1
  232. package/lib/esm/components/trees/common/components/BaseTree.d.ts +0 -34
  233. package/lib/esm/components/trees/common/components/BaseTree.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../src/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.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 { concat, concatAll, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, map, merge, mergeMap, of, reduce } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { IModelApp, PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeIdentifier, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { toggleAllCategories } from \"../../common/CategoriesVisibilityUtils\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode\";\nimport { createVisibilityStatus } from \"./Tooltip\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\n\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyNodeIdentifiersPath } from \"@itwin/presentation-hierarchies\";\nimport type { AlwaysOrNeverDrawnElementsQueryProps } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"./Tooltip\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\n\ninterface GetCategoryStatusProps {\n categoryId: Id64String;\n modelId: Id64String;\n}\n\ninterface ChangeCategoryStateProps extends GetCategoryStatusProps {\n on: boolean;\n}\n\ninterface GetElementStateProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\ninterface GetFilteredNodeVisibilityProps {\n parentKeys: HierarchyNodeKey[];\n filterPaths: HierarchyNodeIdentifiersPath[];\n}\n\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\ninterface ChangeElementStateProps extends GetElementStateProps {\n on: boolean;\n}\n\ninterface ChangeModelStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\nexport const SUBJECT_CLASS_NAME = \"BisCore.Subject\" as const;\nexport const MODEL_CLASS_NAME = \"BisCore.GeometricModel3d\" as const;\nexport const CATEGORY_CLASS_NAME = \"BisCore.SpatialCategory\" as const;\nexport const ELEMENT_CLASS_NAME = \"BisCore.GeometricElement3d\" as const;\n\ntype CategoryKey = `${Id64String}-${Id64String}`;\ntype ElementKey = `${CategoryKey}-${Id64String}`;\n\nfunction createCategoryKey(modelId: string, categoryId: string): CategoryKey {\n return `${modelId}-${categoryId}`;\n}\n\nfunction parseCategoryKey(key: CategoryKey) {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n}\n\nfunction createElementKey(modelId: string, categoryId: string, elementId: string): ElementKey {\n return `${modelId}-${categoryId}-${elementId}`;\n}\n\nfunction parseElementKey(key: ElementKey) {\n const [modelId, categoryId, elementId] = key.split(\"-\");\n return { modelId, categoryId, elementId };\n}\n\ninterface FilterTargets {\n subjects?: Set<Id64String>;\n models?: Set<Id64String>;\n categories?: Set<CategoryKey>;\n elements?: Set<ElementKey>;\n}\n\n/**\n * Properties for a method of `ModelsTreeVisibilityHandler` that can be overridden.\n */\ntype OverridableMethodProps<TFunc> = TFunc extends (props: infer TProps) => infer TResult\n ? TProps & {\n /** A callback that produces the value from the original implementation. */\n readonly originalImplementation: () => TResult;\n /**\n * Reference to the hierarchy based handler.\n * @note Calling `getVisibility` or `changeVisibility` of this object invokes the overridden implementation as well.\n */\n readonly handler: ModelsTreeVisibilityHandler;\n }\n : never;\n\n/**\n * Function type for an overridden method of `ModelsTreeVisibilityHandler`.\n */\ntype OverridableMethod<TFunc> = TFunc extends (...args: any[]) => infer TResult ? (props: OverridableMethodProps<TFunc>) => TResult : never;\n\n/**\n * Functionality of `ModelsTreeVisibilityHandler` that can be overridden.\n * Each callback will be provided original implementation and reference to a `HierarchyVisibilityHandler`.\n */\ninterface VisibilityHandlerOverrides {\n getSubjectNodeVisibility?: OverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: OverridableMethod<(props: { id: Id64String }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: OverridableMethod<(props: GetCategoryStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: OverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: OverridableMethod<(props: GetElementStateProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: OverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: OverridableMethod<(props: ChangeModelStateProps) => Promise<void>>;\n changeCategoryState?: OverridableMethod<(props: ChangeCategoryStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: OverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementState?: OverridableMethod<(props: ChangeElementStateProps) => Promise<void>>;\n}\n\n/**\n * Properties for `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: VisibilityHandlerOverrides;\n}\n\n/**\n * Hierarchy based visibility handler.\n * When determining visibility for nodes, it should take into account the visibility of their children.\n * @internal\n */\nexport type ModelsTreeVisibilityHandler = HierarchyVisibilityHandler;\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): ModelsTreeVisibilityHandler {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements ModelsTreeVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ModelsTreeIdsCache;\n\n constructor(private readonly _props: ModelsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener(_props.viewport);\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n }\n\n // istanbul ignore next\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(this.getVisibilityStatusObs(node));\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n return toVoidPromise(this.changeVisibilityObs(node, shouldDisplay));\n }\n\n public dispose(): void {\n this._eventListener.dispose();\n this._alwaysAndNeverDrawnElements.dispose();\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus(node.key.instanceKeys.map((key) => key.id));\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus(node.key.instanceKeys[0].id);\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets({ parentKeys, filterPaths })).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus([...subjects]));\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus(modelId))));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryId });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.getElementDisplayStatus({ modelId, categoryId, elementId });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((x) => {\n assert(x !== \"empty\");\n return createVisibilityStatus(x);\n }),\n );\n }\n\n private getSubjectNodeVisibilityStatus(subjectIds: Id64Array): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"subject.nonSpatialView\"));\n }\n\n return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(\n concatAll(),\n distinct(),\n mergeMap((modelId) => this.getModelVisibilityStatus(modelId)),\n map((x) => x.state),\n getVisibilityStatusFromTreeNodeChildren({\n visible: \"subject.allModelsVisible\",\n hidden: \"subject.allModelsHidden\",\n partial: \"subject.someModelsHidden\",\n }),\n );\n });\n\n const ovr = this._props.overrides?.getSubjectNodeVisibility;\n return ovr ? from(ovr(this.createOverrideProps({ ids: subjectIds }, result))) : result;\n }\n\n private getModelVisibilityStatus(modelId: Id64String): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"model.nonSpatialView\"));\n }\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"model.hiddenThroughModelSelector\"));\n }\n\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId })),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((visibilityByCategories) => {\n const state = visibilityByCategories === \"empty\" ? \"visible\" : visibilityByCategories;\n return createVisibilityStatus(state, state === \"partial\" ? \"model.someCategoriesHidden\" : `model.allCategories${state ? \"Visible\" : \"Hidden\"}`);\n }),\n );\n });\n\n const ovr = this._props.overrides?.getModelDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps({ id: modelId }, result))) : result;\n }\n\n private getDefaultCategoryVisibilityStatus({ modelId, categoryId }: { categoryId: Id64String; modelId: Id64String }): NonPartialVisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\");\n }\n\n switch (this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId)) {\n case PerModelCategoryVisibility.Override.Show:\n return createVisibilityStatus(\"visible\", \"category.displayedThroughPerModelOverride\");\n case PerModelCategoryVisibility.Override.Hide:\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughPerModelOverride\");\n }\n\n const isVisible = viewport.view.viewsCategory(categoryId);\n return isVisible\n ? createVisibilityStatus(\"visible\", \"category.displayedThroughCategorySelector\")\n : createVisibilityStatus(\"hidden\", \"category.hiddenThroughCategorySelector\");\n }\n\n private getCategoryDisplayStatus(props: GetCategoryStatusProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.viewsModel(props.modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: props,\n tooltips: {\n allElementsInAlwaysDrawnList: \"category.allElementsVisible\",\n allElementsInNeverDrawnList: \"category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"category.allElementsHidden\",\n },\n defaultStatus: () => this.getDefaultCategoryVisibilityStatus(props),\n });\n });\n\n const ovr = this._props.overrides?.getCategoryDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps(props, result))) : result;\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return createVisibilityStatus(status.state, `groupingNode.${status.state}ThroughCategory`);\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"groupingNode.allElementsHidden\",\n },\n });\n });\n\n const ovr = this._props.overrides?.getElementGroupingNodeDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps({ node }, result))) : result;\n }\n\n private getElementOverriddenVisibility(elementId: string): NonPartialVisibilityStatus | undefined {\n const viewport = this._props.viewport;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenThroughNeverDrawnList\");\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", \"element.displayedThroughAlwaysDrawnList\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\");\n }\n }\n\n return undefined;\n }\n\n private getElementDisplayStatus(props: GetElementStateProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"element.hiddenThroughModel\"));\n }\n\n let status = this.getElementOverriddenVisibility(elementId);\n if (status) {\n return of(status);\n }\n\n status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return of(createVisibilityStatus(status.state, status.state === \"visible\" ? undefined : \"element.hiddenThroughCategory\"));\n });\n\n const ovr = this._props.overrides?.getElementDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps(props, result))) : result;\n }\n\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n on,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n // istanbul ignore if\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys[0].id, on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n // istanbul ignore if\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n // istanbul ignore if\n if (!categoryId) {\n // istanbul ignore next\n return EMPTY;\n }\n\n return this.changeElementState({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getFilterTargets({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n const filterTargets: FilterTargets = {};\n\n function addFilterTarget(targetType: \"subjects\" | \"models\", value: Id64String): void;\n function addFilterTarget(targetType: \"categories\", value: CategoryKey): void;\n function addFilterTarget(targetType: \"elements\", value: ElementKey): void;\n function addFilterTarget(targetType: keyof FilterTargets, value: string) {\n ((filterTargets as Record<keyof FilterTargets, Set<string>>)[targetType] ??= new Set()).add(value);\n }\n\n const imodelAccess = this._props.imodelAccess;\n\n // Remove all paths such that there are paths to any of the ancestors of the filter target.\n filterPaths = reduceFilterPaths(filterPaths);\n\n await Promise.all(\n filterPaths.map(async (path) => {\n const target = path[path.length - 1];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(target)) {\n return;\n }\n\n const previousPath = path.slice(0, path.length - 1);\n\n if (await imodelAccess.classDerivesFrom(target.className, SUBJECT_CLASS_NAME)) {\n addFilterTarget(\"subjects\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, MODEL_CLASS_NAME)) {\n addFilterTarget(\"models\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, CATEGORY_CLASS_NAME)) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const modelId = await this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME);\n addFilterTarget(\"categories\", createCategoryKey(modelId, target.id));\n return;\n }\n\n const [modelId, categoryId] = await Promise.all([\n this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME),\n this.findClassIdInFilterPath(previousPath, parentKeys, CATEGORY_CLASS_NAME),\n ]);\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, target.id));\n\n // Add parent elements to the filter targets as well\n for (let idx = path.length - 1; idx >= 0; --idx) {\n const pathIdentifier = path[idx];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(pathIdentifier)) {\n continue;\n }\n\n if (!(await imodelAccess.classDerivesFrom(pathIdentifier.className, ELEMENT_CLASS_NAME))) {\n break;\n }\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, pathIdentifier.id));\n }\n }),\n );\n\n return filterTargets;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.changeElementState({ modelId, categoryId, elementId, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n // istanbul ignore if\n if (!this._props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return from(this._idsCache.getSubjectModelIds(ids)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n\n const ovr = this._props.overrides?.changeSubjectNodeState;\n return ovr ? from(ovr(this.createVoidOverrideProps({ ids, on }, result))) : result;\n }\n\n private changeModelState(props: ChangeModelStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n // istanbul ignore if\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const { ids, on } = props;\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return EMPTY;\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n (typeof ids === \"string\" ? of(ids) : from(ids)).pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryId, modelId, on: true })),\n );\n }),\n ),\n );\n });\n const ovr = this._props.overrides?.changeModelState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String) {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this._props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { modelId, categoryId, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeCategoryState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n const viewport = this._props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return from(elementIds).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeElementGroupingNodeState;\n return ovr ? from(ovr(this.createVoidOverrideProps({ node, on }, result))) : result;\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementState(props: ChangeElementStateProps): Observable<void> {\n const result = defer(() => {\n const { elementId, on, modelId, categoryId } = props;\n const viewport = this._props.viewport;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return of(elementId).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeElementState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this._props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n reduce(\n (acc, elementId) => {\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: new Set(this._props.viewport.neverDrawn || []),\n alwaysDrawn: new Set(this._props.viewport.alwaysDrawn || []),\n },\n ),\n map((state) => {\n state.changedNeverDrawn && this._props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && this._props.viewport.setAlwaysDrawn(state.alwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount } = props;\n\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", props.tooltips.allElementsInNeverDrawnList);\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", props.tooltips.allElementsInAlwaysDrawnList);\n }\n\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", props.tooltips.elementsInBothAlwaysAndNeverDrawn)\n : createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList);\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Set } | { queryProps: AlwaysOrNeverDrawnElementsQueryProps }),\n ): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n }),\n );\n }\n\n const { modelId, categoryId } = props.queryProps;\n const totalCount = categoryId ? this._idsCache.getCategoryElementsCount(modelId, categoryId) : this._idsCache.getModelElementCount(modelId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n });\n }),\n );\n }\n\n private getAlwaysDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"always\" });\n }\n\n private getNeverDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"never\" });\n }\n\n private clearAlwaysAndNeverDrawnElements(props: Omit<AlwaysOrNeverDrawnElementsQueryProps, \"setType\">) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysDrawnElements(props),\n neverDrawn: this.getNeverDrawnElements(props),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this._props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private createVoidOverrideProps<TProps>(props: TProps, obs: Observable<void>): OverridableMethodProps<(props: TProps) => Promise<void>> {\n return {\n ...props,\n originalImplementation: async () => toVoidPromise(obs),\n handler: this,\n };\n }\n\n private createOverrideProps<TProps, TObservable extends Observable<any>>(\n props: TProps,\n obs: TObservable,\n ): TObservable extends Observable<infer T> ? OverridableMethodProps<(props: TProps) => Promise<T>> : never;\n private createOverrideProps<TProps, TObservable extends Observable<unknown>>(\n props: TProps,\n obs: TObservable,\n ): OverridableMethodProps<(props: TProps) => Promise<unknown>> {\n return {\n ...props,\n originalImplementation: async () => firstValueFrom(obs),\n handler: this,\n };\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private async findClassIdInFilterPath(path: HierarchyNodeIdentifiersPath, parentKeys: HierarchyNodeKey[], className: string) {\n function* keysToCheck(): Iterable<InstanceKey> {\n for (let i = path.length - 1; i >= 0; --i) {\n const id = path[i];\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {\n yield id;\n }\n }\n\n for (let i = parentKeys.length - 1; i >= 0; --i) {\n const key = parentKeys[i];\n if (HierarchyNodeKey.isInstances(key)) {\n yield* key.instanceKeys;\n }\n }\n }\n\n for (const parentKey of keysToCheck()) {\n if (await this._props.imodelAccess.classDerivesFrom(parentKey.className, className)) {\n return parentKey.id;\n }\n }\n\n assert(false, () => `Cannot find an instance of ${className} in instance keys: ${JSON.stringify([...keysToCheck()], undefined, 2)}`);\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: () => VisibilityStatus;\n}\n\nfunction getVisibilityFromTreeNodeChildren(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction getVisibilityStatusFromTreeNodeChildren(tooltipMap: { [key in Visibility]: string | undefined }): OperatorFunction<Visibility, VisibilityStatus> {\n return (obs) => {\n return getVisibilityFromTreeNodeChildren(obs).pipe(\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n\n return createVisibilityStatus(visibility, tooltipMap[visibility]);\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => !rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction setIntersection<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction reduceFilterPaths(paths: HierarchyNodeIdentifiersPath[]) {\n const sorted = [...paths].sort((a, b) => a.length - b.length);\n paths = [];\n for (const path of sorted) {\n if (!arraySortedByLengthContainsPrefix(paths, path)) {\n paths.push(path);\n }\n }\n return paths;\n}\n\nfunction arraySortedByLengthContainsPrefix(targetArray: HierarchyNodeIdentifiersPath[], source: HierarchyNodeIdentifiersPath) {\n for (const targetVal of targetArray) {\n if (targetVal.length >= source.length) {\n break;\n }\n\n let isPrefix = true;\n for (let i = 0; i < targetVal.length; ++i) {\n if (!HierarchyNodeIdentifier.equal(targetVal[i], source[i])) {\n isPrefix = false;\n break;\n }\n }\n\n if (isPrefix) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(IModelApp.viewManager, viewport.iModel, true, viewport, false);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n"]}
1
+ {"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../src/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,+BAAmI;AACnI,sDAA6C;AAC7C,wDAA6E;AAC7E,8EAA2G;AAC3G,sFAA6E;AAC7E,4CAA+D;AAC/D,qFAAkF;AAClF,qDAAkD;AAClD,uCAAmD;AACnD,mFAAsF;AAqDzE,QAAA,kBAAkB,GAAG,iBAA0B,CAAC;AAChD,QAAA,gBAAgB,GAAG,0BAAmC,CAAC;AACvD,QAAA,mBAAmB,GAAG,yBAAkC,CAAC;AACzD,QAAA,kBAAkB,GAAG,4BAAqC,CAAC;AAKxE,SAAS,iBAAiB,CAAC,OAAe,EAAE,UAAkB;IAC5D,OAAO,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAgB;IACxC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,UAAkB,EAAE,SAAiB;IAC9E,OAAO,GAAG,OAAO,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,GAAe;IACtC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAoED;;;GAGG;AACH,SAAgB,iCAAiC,CAAC,KAAuC;IACvF,OAAO,IAAI,+BAA+B,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAFD,8EAEC;AAED,MAAM,+BAA+B;IAKnC,YAA6B,MAAwC;QAAxC,WAAM,GAAN,MAAM,CAAkC;QACnE,IAAI,CAAC,cAAc,GAAG,IAAA,mEAAmC,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,4BAA4B,GAAG,IAAI,+DAA8B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED,uBAAuB;IACvB,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,IAAmB;QAClD,OAAO,IAAA,qBAAc,EAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAmB,EAAE,aAAsB;QACvE,OAAO,IAAA,oBAAa,EAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAEO,sBAAsB,CAAC,IAAmB;QAChD,IAAI,IAAI,CAAC,SAAS,EAAE,+BAA+B,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC7F,OAAO,IAAI,CAAC,yBAAyB,CAAC;gBACpC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;gBAC1C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,+BAA+B;aAC5D,CAAC,CAAC;SACJ;QAED,IAAI,wCAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC;SACrD;QAED,IAAI,CAAC,wCAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,UAAU,CAAC,CAAC,CAAC;SAC/C;QAED,IAAI,+BAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACtC,4EAA4E;YAC5E,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SACxF;QAED,IAAI,+BAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACnE;QAED,MAAM,OAAO,GAAG,+BAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,UAAU,CAAC,CAAC,CAAC;SAC/C;QAED,IAAI,+BAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,wBAAwB,CAAC;gBACnC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvC,OAAO;aACR,CAAC,CAAC;SACJ;QAED,MAAM,UAAU,GAAG,+BAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,UAAU,CAAC,CAAC,CAAC;SAC/C;QAED,OAAO,IAAI,CAAC,uBAAuB,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO;YACP,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAkC;QAC3F,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAA,eAAQ,EAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtD,MAAM,WAAW,GAAG,IAAI,KAAK,EAAgC,CAAC;YAC9D,IAAI,QAAQ,EAAE,IAAI,EAAE;gBAClB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;aACtE;YAED,IAAI,MAAM,EAAE,IAAI,EAAE;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAA,WAAI,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAA,eAAQ,EAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACpG;YAED,IAAI,UAAU,EAAE,IAAI,EAAE;gBACpB,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,UAAU,CAAC,CAAC,IAAI,CACnB,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;oBACf,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBACtD,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAChE,CAAC,CAAC,CACH,CACF,CAAC;aACH;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE;gBAClB,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;oBACf,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1E,CAAC,CAAC,CACH,CACF,CAAC;aACH;YAED,OAAO,IAAA,YAAK,EAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACnB,iCAAiC,EACjC,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE;YACR,IAAA,qBAAM,EAAC,CAAC,KAAK,OAAO,CAAC,CAAC;YACtB,OAAO,IAAA,gCAAsB,EAAC,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,8BAA8B,CAAC,UAAqB;QAC1D,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC9C,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC;aACzE;YAED,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC7D,IAAA,gBAAS,GAAE,EACX,IAAA,eAAQ,GAAE,EACV,IAAA,eAAQ,EAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,EAC7D,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACnB,uCAAuC,CAAC;gBACtC,OAAO,EAAE,0BAA0B;gBACnC,MAAM,EAAE,yBAAyB;gBACjC,OAAO,EAAE,0BAA0B;aACpC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;QAC5D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzF,CAAC;IAEO,wBAAwB,CAAC,OAAmB;QAClD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBAClC,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC;aACvE;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBACtC,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC,CAAC;aACjF;YAED,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1D,IAAA,gBAAS,GAAE,EACX,IAAA,eAAQ,EAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAChF,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACnB,iCAAiC,EACjC,IAAA,UAAG,EAAC,CAAC,sBAAsB,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC;gBACtF,OAAO,IAAA,gCAAsB,EAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;QACzD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,CAAC;IAEO,kCAAkC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAmD;QACjH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAEtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACtC,OAAO,IAAA,gCAAsB,EAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;SACxE;QAED,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;YACxF,KAAK,0CAA0B,CAAC,QAAQ,CAAC,IAAI;gBAC3C,OAAO,IAAA,gCAAsB,EAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;YACxF,KAAK,0CAA0B,CAAC,QAAQ,CAAC,IAAI;gBAC3C,OAAO,IAAA,gCAAsB,EAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;SACrF;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,SAAS;YACd,CAAC,CAAC,IAAA,gCAAsB,EAAC,SAAS,EAAE,2CAA2C,CAAC;YAChF,CAAC,CAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;IACjF,CAAC;IAEO,wBAAwB,CAAC,KAA6B;QAC5D,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBACxD,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC,CAAC;aAC5E;YAED,OAAO,IAAI,CAAC,4CAA4C,CAAC;gBACvD,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE;oBACR,4BAA4B,EAAE,6BAA6B;oBAC3D,2BAA2B,EAAE,4BAA4B;oBACzD,iCAAiC,EAAE,gCAAgC;oBACnE,oCAAoC,EAAE,4BAA4B;iBACnE;gBACD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC;aACpE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;QAC5D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,CAAC;IAEO,iCAAiC,CAAC,IAA2B;QACnE,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBAClD,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,4CAA4C,CAAC;gBACvD,QAAQ,EAAE,UAAU;gBACpB,aAAa,EAAE,GAAG,EAAE;oBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,kCAAkC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;oBAChF,OAAO,IAAA,gCAAsB,EAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,MAAM,CAAC,KAAK,iBAAiB,CAAC,CAAC;gBAC7F,CAAC;gBACD,QAAQ,EAAE;oBACR,4BAA4B,EAAE,iCAAiC;oBAC/D,2BAA2B,EAAE,gCAAgC;oBAC7D,iCAAiC,EAAE,oCAAoC;oBACvE,oCAAoC,EAAE,gCAAgC;iBACvE;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;QACvE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,CAAC;IAEO,8BAA8B,CAAC,SAAiB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,IAAI,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE;YACvC,OAAO,IAAA,gCAAsB,EAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;SAChF;QAED,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACvC,OAAO,IAAA,gCAAsB,EAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;aACrF;YAED,IAAI,QAAQ,CAAC,sBAAsB,EAAE;gBACnC,OAAO,IAAA,gCAAsB,EAAC,QAAQ,EAAE,wDAAwD,CAAC,CAAC;aACnG;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,uBAAuB,CAAC,KAA2B;QACzD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;YAEjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;gBACtC,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;aAC3E;YAED,IAAI,MAAM,GAAG,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,MAAM,EAAE;gBACV,OAAO,IAAA,SAAE,EAAC,MAAM,CAAC,CAAC;aACnB;YAED,MAAM,GAAG,IAAI,CAAC,kCAAkC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;QAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,CAAC;IAED,oEAAoE;IAC5D,mBAAmB,CAAC,IAAmB,EAAE,EAAW;QAC1D,IAAI,IAAI,CAAC,SAAS,EAAE,+BAA+B,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC7F,OAAO,IAAI,CAAC,4BAA4B,CAAC;gBACvC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC;gBAC1C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,+BAA+B;gBAC3D,EAAE;aACH,CAAC,CAAC;SACJ;QAED,IAAI,wCAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACtD;QAED,qBAAqB;QACrB,IAAI,CAAC,wCAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;YACxC,OAAO,YAAK,CAAC;SACd;QAED,IAAI,+BAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC,sBAAsB,CAChC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1C,EAAE,CACH,CAAC;SACH;QAED,IAAI,+BAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SACxE;QAED,MAAM,OAAO,GAAG,+BAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,qBAAqB;QACrB,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,YAAK,CAAC;SACd;QAED,IAAI,+BAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,mBAAmB,CAAC;gBAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvC,OAAO;gBACP,EAAE;aACH,CAAC,CAAC;SACJ;QAED,MAAM,UAAU,GAAG,+BAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,qBAAqB;QACrB,IAAI,CAAC,UAAU,EAAE;YACf,uBAAuB;YACvB,OAAO,YAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO;YACP,UAAU;YACV,EAAE;SACH,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAkC;QACxF,MAAM,aAAa,GAAkB,EAAE,CAAC;QAKxC,SAAS,eAAe,CAAC,UAA+B,EAAE,KAAa;YACrE,CAAE,aAA0D,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAE9C,2FAA2F;QAC3F,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,kDAAuB,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE;gBAC7D,OAAO;aACR;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpD,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,0BAAkB,CAAC,EAAE;gBAC7E,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO;aACR;YAED,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,wBAAgB,CAAC,EAAE;gBAC3E,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrC,OAAO;aACR;YAED,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,2BAAmB,CAAC,EAAE;gBAC9E,wDAAwD;gBACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,UAAU,EAAE,wBAAgB,CAAC,CAAC;gBAC/F,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrE,OAAO;aACR;YAED,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9C,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,UAAU,EAAE,wBAAgB,CAAC;gBACxE,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,UAAU,EAAE,2BAAmB,CAAC;aAC5E,CAAC,CAAC;YACH,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,oDAAoD;YACpD,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;gBAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,kDAAuB,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE;oBACrE,SAAS;iBACV;gBAED,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,0BAAkB,CAAC,CAAC,EAAE;oBACxF,MAAM;iBACP;gBACD,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;aACvF;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,4BAA4B,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAqC;QACtF,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAC5C,IAAA,eAAQ,EAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtD,MAAM,WAAW,GAAG,IAAI,KAAK,EAAoB,CAAC;YAClD,IAAI,QAAQ,EAAE,IAAI,EAAE;gBAClB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAClE;YAED,IAAI,MAAM,EAAE,IAAI,EAAE;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aAC9D;YAED,IAAI,UAAU,EAAE,IAAI,EAAE;gBACpB,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,UAAU,CAAC,CAAC,IAAI,CACnB,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;oBACf,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBACtD,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/D,CAAC,CAAC,CACH,CACF,CAAC;aACH;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE;gBAClB,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;oBACf,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzE,CAAC,CAAC,CACH,CACF,CAAC;aACH;YAED,OAAO,IAAA,YAAK,EAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,GAAc,EAAE,EAAW;QACxD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC9C,OAAO,YAAK,CAAC;aACd;YAED,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAA,eAAQ,EAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjI,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;QAC1D,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,CAAC;IAEO,gBAAgB,CAAC,KAA4B;QACnD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBAClC,OAAO,YAAK,CAAC;aACd;YAED,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,EAAE,EAAE;gBACP,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxC,OAAO,YAAK,CAAC;aACd;YAED,OAAO,IAAA,aAAM,EACX,IAAA,YAAK,EAAC,GAAG,EAAE;gBACT,QAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACxD,OAAO,IAAA,WAAI,EAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,EACF,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAClD,IAAA,eAAQ,EAAC,CAAC,OAAO,EAAE,EAAE;gBACnB,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1D,IAAA,gBAAS,GAAE,EACX,IAAA,eAAQ,EAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACtF,CAAC;YACJ,CAAC,CAAC,CACH,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACpD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,CAAC;IAEO,uCAAuC,CAAC,OAAmB;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,OAAO,IAAA,eAAQ,EAAC;YACd,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACtD,mBAAmB,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9D,CAAC,CAAC,IAAI,CACL,IAAA,eAAQ,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE,EAAE;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YACrD,IAAI,WAAW,IAAI,mBAAmB,EAAE;gBACtC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;aAC1E;YACD,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAChC,IAAI,CAAC,uDAAuD,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,uDAAuD,CAAC,OAAe,EAAE,UAAkB,EAAE,EAAW;QAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,QAAQ,GACZ,EAAE,KAAK,qBAAqB;YAC1B,CAAC,CAAC,0CAA0B,CAAC,QAAQ,CAAC,IAAI;YAC1C,CAAC,CAAC,EAAE;gBACF,CAAC,CAAC,0CAA0B,CAAC,QAAQ,CAAC,IAAI;gBAC1C,CAAC,CAAC,0CAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjD,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/E,IAAI,QAAQ,KAAK,0CAA0B,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE;YAC/D,kFAAkF;YAClF,4EAA4E;YAC5E,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACxD;IACH,CAAC;IAEO,mBAAmB,CAAC,KAA+B;QACzD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAC1C,OAAO,IAAA,aAAM,EACX,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAK,EAC9G,IAAA,YAAK,EAAC,GAAG,EAAE;gBACT,IAAI,CAAC,uDAAuD,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;gBACtF,OAAO,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;QACvD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACK,8BAA8B,CAAC,IAA2B,EAAE,EAAW;QAC7E,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE5C,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,OAAO,IAAA,aAAM,EACX,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAK,EACxG,IAAA,YAAK,EAAC,GAAG,EAAE;gBACT,MAAM,kBAAkB,GAAG,IAAI,CAAC,kCAAkC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5F,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC;gBACpE,OAAO,IAAA,WAAI,EAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACxG,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,8BAA8B,CAAC;QAClE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtF,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,KAA8B;QACvD,MAAM,MAAM,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE;YACxB,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,OAAO,IAAA,aAAM,EACX,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAK,EAC9G,IAAA,YAAK,EAAC,GAAG,EAAE;gBACT,MAAM,kBAAkB,GAAG,IAAI,CAAC,kCAAkC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5F,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC;gBACpE,OAAO,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACtD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,CAAC;IAEO,oCAAoC,CAAC,KAAqD;QAChG,OAAO,CAAC,UAAkC,EAAE,EAAE;YAC5C,MAAM,EAAE,EAAE,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;YAC3C,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC3E,OAAO,UAAU,CAAC,IAAI,CACpB,IAAA,aAAM,EACJ,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;gBACjB,IAAI,EAAE,EAAE;oBACN,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACpD,GAAG,CAAC,iBAAiB,KAAK,UAAU,CAAC;oBACrC,kFAAkF;oBAClF,IAAI,CAAC,CAAC,oBAAoB,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;wBACxF,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAC/B,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;qBAC/B;iBACF;qBAAM;oBACL,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACrD,GAAG,CAAC,kBAAkB,KAAK,UAAU,CAAC;oBACtC,wFAAwF;oBACxF,IAAI,oBAAoB,IAAI,CAAC,sBAAsB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;wBACrF,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAC9B,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;qBAC9B;iBACF;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EACD;gBACE,iBAAiB,EAAE,KAAK;gBACxB,kBAAkB,EAAE,KAAK;gBACzB,UAAU,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;gBAC1D,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;aAC7D,CACF,EACD,IAAA,UAAG,EAAC,CAAC,KAAK,EAAE,EAAE;gBACZ,KAAK,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAChF,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAClI,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAEO,gDAAgD,CACtD,KAIqD;QAErD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAEtD,IAAI,UAAU,EAAE,IAAI,KAAK,UAAU,EAAE;YACnC,OAAO,IAAA,gCAAsB,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;SACrF;QAED,IAAI,WAAW,EAAE,IAAI,KAAK,UAAU,EAAE;YACpC,OAAO,IAAA,gCAAsB,EAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;SACvF;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,IAAI,QAAQ,CAAC,sBAAsB,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;YACjE,OAAO,WAAW,EAAE,IAAI;gBACtB,CAAC,CAAC,IAAA,gCAAsB,EAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC;gBACrF,CAAC,CAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;SAC3F;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,EAAE,IAAI,CAAC,EAAE;YACxG,OAAO,IAAA,gCAAsB,EAAC,SAAS,CAAC,CAAC;SAC1C;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,4CAA4C,CAClD,KAAyI;QAEzI,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,IAAI,QAAQ,CAAC,sBAAsB,EAAE;YACnC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;gBAChC,OAAO,IAAA,SAAE,EAAC,IAAA,gCAAsB,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;aAClG;SACF;aAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;YACtE,OAAO,IAAA,SAAE,EAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;SAClC;QAED,IAAI,UAAU,IAAI,KAAK,EAAE;YACvB,OAAO,IAAA,SAAE,EACP,IAAI,CAAC,gDAAgD,CAAC;gBACpD,GAAG,KAAK;gBACR,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3G,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxG,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;aAChC,CAAC,CACH,CAAC;SACH;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;QACjD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5I,OAAO,IAAA,eAAQ,EAAC;YACd,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;YAC1D,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC;SACzD,CAAC,CAAC,IAAI,CACL,IAAA,UAAG,EAAC,CAAC,KAAK,EAAE,EAAE;YACZ,OAAO,IAAI,CAAC,gDAAgD,CAAC;gBAC3D,GAAG,KAAK;gBACR,GAAG,KAAK;aACT,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,KAA2C;QACxE,OAAO,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxF,CAAC;IAEO,qBAAqB,CAAC,KAA2C;QACvE,OAAO,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IAEO,gCAAgC,CAAC,KAA4D;QACnG,OAAO,IAAA,eAAQ,EAAC;YACd,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAC,IAAI,CACL,IAAA,UAAG,EAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACtC,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE;gBAClD,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;aAC3E;YACD,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE;gBAChD,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;aACxE;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAS,KAAa,EAAE,GAAqB;QAC1E,OAAO;YACL,GAAG,KAAK;YACR,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,oBAAa,EAAC,GAAG,CAAC;YACtD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAMO,mBAAmB,CACzB,KAAa,EACb,GAAgB;QAEhB,OAAO;YACL,GAAG,KAAK;YACR,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAA,qBAAc,EAAC,GAAG,CAAC;YACvD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAA2B;QACrD,MAAM,OAAO,GAAG,+BAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,+BAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,IAAA,qBAAM,EAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,IAAkC,EAAE,UAA8B,EAAE,SAAiB;QACzH,QAAQ,CAAC,CAAC,WAAW;YACnB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;gBACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,kDAAuB,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE;oBACxD,MAAM,EAAE,CAAC;iBACV;aACF;YAED,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,2CAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;oBACrC,KAAK,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;iBACzB;aACF;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,EAAE;YACrC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;gBACnF,OAAO,SAAS,CAAC,EAAE,CAAC;aACrB;SACF;QAED,IAAA,qBAAM,EAAC,KAAK,EAAE,GAAG,EAAE,CAAC,8BAA8B,SAAS,sBAAsB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvI,CAAC;CACF;AAaD,SAAS,iCAAiC,CAAC,GAA2B;IACpE,OAAO,GAAG,CAAC,IAAI,CACb,IAAA,kBAAW,EACT,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,EAClC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,GAAG,CAAC,UAAU,KAAK,GAAG,KAAK,SAAS,CAAC;QACrC,GAAG,CAAC,SAAS,KAAK,GAAG,KAAK,QAAQ,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACtC,EACD,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE;QACR,IAAI,CAAC,CAAC,EAAE;YACN,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,uCAAuC,CAAC,UAAuD;IACtG,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,OAAO,iCAAiC,CAAC,GAAG,CAAC,CAAC,IAAI,CAChD,IAAA,UAAG,EAAC,CAAC,UAAU,EAAE,EAAE;YACjB,IAAI,UAAU,KAAK,OAAO,EAAE;gBAC1B,UAAU,GAAG,SAAS,CAAC;aACxB;YAED,OAAO,IAAA,gCAAsB,EAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAI,GAAW,EAAE,GAAW;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;IAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAI,GAAW,EAAE,GAAW;IAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAK,CAAC;IAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAqC;IAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9D,KAAK,GAAG,EAAE,CAAC;IACX,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;QACzB,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iCAAiC,CAAC,WAA2C,EAAE,MAAoC;IAC1H,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;QACnC,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;YACrC,MAAM;SACP;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACzC,IAAI,CAAC,kDAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3D,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;aACP;SACF;QAED,IAAI,QAAQ,EAAE;YACZ,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa,CAAC,MAAgB,EAAE,QAAkB;IACtE,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC5B,MAAM,IAAA,+CAAmB,EAAC,yBAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3F,CAAC;AALD,sCAKC;AAED;;;GAGG;AACI,KAAK,UAAU,aAAa,CAAC,MAAgB,EAAE,QAAkB;IACtE,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAFD,sCAEC;AAED;;;GAGG;AACI,KAAK,UAAU,eAAe,CAAC,MAAgB,EAAE,QAAkB;IACxE,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAChC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5B;aAAM;YACL,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/B;IACH,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,QAAQ,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAZD,0CAYC;AAED;;;GAGG;AACI,KAAK,UAAU,YAAY,CAAC,MAAgB,EAAE,MAAe,EAAE,QAAkB;IACtF,qBAAqB;IACrB,IAAI,CAAC,MAAM,EAAE;QACX,OAAO;KACR;IACD,IAAI,MAAM,EAAE;QACV,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC5C;SAAM;QACL,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACxC;AACH,CAAC;AAVD,oCAUC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAAgB,EAAE,QAAkB;IACtE,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrF,CAAC;AAFD,kDAEC","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 { concat, concatAll, defer, distinct, EMPTY, firstValueFrom, forkJoin, from, map, merge, mergeMap, of, reduce } from \"rxjs\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { IModelApp, PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { HierarchyNode, HierarchyNodeIdentifier, HierarchyNodeKey } from \"@itwin/presentation-hierarchies\";\nimport { toggleAllCategories } from \"../../common/CategoriesVisibilityUtils\";\nimport { reduceWhile, toVoidPromise } from \"../../common/Rxjs\";\nimport { AlwaysAndNeverDrawnElementInfo } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport { ModelsTreeNode } from \"./ModelsTreeNode\";\nimport { createVisibilityStatus } from \"./Tooltip\";\nimport { createVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\n\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { ModelsTreeIdsCache } from \"./ModelsTreeIdsCache\";\nimport type { Id64Arg, Id64Array, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyNodeIdentifiersPath } from \"@itwin/presentation-hierarchies\";\nimport type { AlwaysOrNeverDrawnElementsQueryProps } from \"./AlwaysAndNeverDrawnElementInfo\";\nimport type { IVisibilityChangeEventListener } from \"./VisibilityChangeEventListener\";\nimport type { Viewport } from \"@itwin/core-frontend\";\nimport type { NonPartialVisibilityStatus, Visibility } from \"./Tooltip\";\nimport type { HierarchyVisibilityHandler, VisibilityStatus } from \"../../common/UseHierarchyVisibility\";\nimport type { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\n\n/** @beta */\ninterface GetCategoryStatusProps {\n categoryId: Id64String;\n modelId: Id64String;\n}\n\n/** @beta */\ninterface ChangeCategoryStateProps extends GetCategoryStatusProps {\n on: boolean;\n}\n\n/** @beta */\ninterface GetElementStateProps {\n elementId: Id64String;\n modelId: Id64String;\n categoryId: Id64String;\n}\n\n/** @beta */\ninterface GetFilteredNodeVisibilityProps {\n parentKeys: HierarchyNodeKey[];\n filterPaths: HierarchyNodeIdentifiersPath[];\n}\n\n/** @beta */\ninterface ChangeFilteredNodeVisibilityProps extends GetFilteredNodeVisibilityProps {\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeElementStateProps extends GetElementStateProps {\n on: boolean;\n}\n\n/** @beta */\ninterface ChangeModelStateProps {\n ids: Id64Arg;\n on: boolean;\n}\n\nexport const SUBJECT_CLASS_NAME = \"BisCore.Subject\" as const;\nexport const MODEL_CLASS_NAME = \"BisCore.GeometricModel3d\" as const;\nexport const CATEGORY_CLASS_NAME = \"BisCore.SpatialCategory\" as const;\nexport const ELEMENT_CLASS_NAME = \"BisCore.GeometricElement3d\" as const;\n\ntype CategoryKey = `${Id64String}-${Id64String}`;\ntype ElementKey = `${CategoryKey}-${Id64String}`;\n\nfunction createCategoryKey(modelId: string, categoryId: string): CategoryKey {\n return `${modelId}-${categoryId}`;\n}\n\nfunction parseCategoryKey(key: CategoryKey) {\n const [modelId, categoryId] = key.split(\"-\");\n return { modelId, categoryId };\n}\n\nfunction createElementKey(modelId: string, categoryId: string, elementId: string): ElementKey {\n return `${modelId}-${categoryId}-${elementId}`;\n}\n\nfunction parseElementKey(key: ElementKey) {\n const [modelId, categoryId, elementId] = key.split(\"-\");\n return { modelId, categoryId, elementId };\n}\n\ninterface FilterTargets {\n subjects?: Set<Id64String>;\n models?: Set<Id64String>;\n categories?: Set<CategoryKey>;\n elements?: Set<ElementKey>;\n}\n\n/**\n * Properties for a method of `ModelsTreeVisibilityHandler` that can be overridden.\n * @beta\n */\ntype OverridableMethodProps<TFunc> = TFunc extends (props: infer TProps) => infer TResult\n ? TProps & {\n /** A callback that produces the value from the original implementation. */\n readonly originalImplementation: () => TResult;\n /**\n * Reference to the hierarchy based handler.\n * @note Calling `getVisibility` or `changeVisibility` of this object invokes the overridden implementation as well.\n */\n readonly handler: ModelsTreeVisibilityHandler;\n }\n : never;\n\n/**\n * Function type for an overridden method of `ModelsTreeVisibilityHandler`.\n * @beta\n */\ntype OverridableMethod<TFunc> = TFunc extends (...args: any[]) => infer TResult ? (props: OverridableMethodProps<TFunc>) => TResult : never;\n\n/**\n * Functionality of `ModelsTreeVisibilityHandler` that can be overridden.\n * Each callback will be provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides {\n getSubjectNodeVisibility?: OverridableMethod<(props: { ids: Id64Array }) => Promise<VisibilityStatus>>;\n getModelDisplayStatus?: OverridableMethod<(props: { id: Id64String }) => Promise<VisibilityStatus>>;\n getCategoryDisplayStatus?: OverridableMethod<(props: GetCategoryStatusProps) => Promise<VisibilityStatus>>;\n getElementGroupingNodeDisplayStatus?: OverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n getElementDisplayStatus?: OverridableMethod<(props: GetElementStateProps) => Promise<VisibilityStatus>>;\n\n changeSubjectNodeState?: OverridableMethod<(props: { ids: Id64Array; on: boolean }) => Promise<void>>;\n changeModelState?: OverridableMethod<(props: ChangeModelStateProps) => Promise<void>>;\n changeCategoryState?: OverridableMethod<(props: ChangeCategoryStateProps) => Promise<void>>;\n changeElementGroupingNodeState?: OverridableMethod<(props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>>;\n changeElementState?: OverridableMethod<(props: ChangeElementStateProps) => Promise<void>>;\n}\n\n/**\n * Properties for `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport interface ModelsTreeVisibilityHandlerProps {\n viewport: Viewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Hierarchy based visibility handler.\n * When determining visibility for nodes, it should take into account the visibility of their children.\n * @beta\n */\nexport type ModelsTreeVisibilityHandler = HierarchyVisibilityHandler;\n\n/**\n * Creates an instance if `ModelsTreeVisibilityHandler`.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: ModelsTreeVisibilityHandlerProps): ModelsTreeVisibilityHandler {\n return new ModelsTreeVisibilityHandlerImpl(props);\n}\n\nclass ModelsTreeVisibilityHandlerImpl implements ModelsTreeVisibilityHandler {\n private readonly _eventListener: IVisibilityChangeEventListener;\n private readonly _alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n private readonly _idsCache: ModelsTreeIdsCache;\n\n constructor(private readonly _props: ModelsTreeVisibilityHandlerProps) {\n this._eventListener = createVisibilityChangeEventListener(_props.viewport);\n this._alwaysAndNeverDrawnElements = new AlwaysAndNeverDrawnElementInfo(_props.viewport);\n this._idsCache = this._props.idsCache;\n }\n\n // istanbul ignore next\n public get onVisibilityChange() {\n return this._eventListener.onVisibilityChange;\n }\n\n public async getVisibilityStatus(node: HierarchyNode): Promise<VisibilityStatus> {\n return firstValueFrom(this.getVisibilityStatusObs(node));\n }\n\n public async changeVisibility(node: HierarchyNode, shouldDisplay: boolean): Promise<void> {\n return toVoidPromise(this.changeVisibilityObs(node, shouldDisplay));\n }\n\n public dispose(): void {\n this._eventListener.dispose();\n this._alwaysAndNeverDrawnElements.dispose();\n }\n\n private getVisibilityStatusObs(node: HierarchyNode): Observable<VisibilityStatus> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.getFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.getClassGroupingNodeDisplayStatus(node);\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibilityStatus(node.key.instanceKeys.map((key) => key.id));\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.getModelVisibilityStatus(node.key.instanceKeys[0].id);\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.getElementDisplayStatus({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n });\n }\n\n private getFilteredNodeVisibility({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets({ parentKeys, filterPaths })).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjects?.size) {\n observables.push(this.getSubjectNodeVisibilityStatus([...subjects]));\n }\n\n if (models?.size) {\n observables.push(from(models).pipe(mergeMap((modelId) => this.getModelVisibilityStatus(modelId))));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.getCategoryDisplayStatus({ modelId, categoryId });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.getElementDisplayStatus({ modelId, categoryId, elementId });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((x) => {\n assert(x !== \"empty\");\n return createVisibilityStatus(x);\n }),\n );\n }\n\n private getSubjectNodeVisibilityStatus(subjectIds: Id64Array): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"subject.nonSpatialView\"));\n }\n\n return from(this._idsCache.getSubjectModelIds(subjectIds)).pipe(\n concatAll(),\n distinct(),\n mergeMap((modelId) => this.getModelVisibilityStatus(modelId)),\n map((x) => x.state),\n getVisibilityStatusFromTreeNodeChildren({\n visible: \"subject.allModelsVisible\",\n hidden: \"subject.allModelsHidden\",\n partial: \"subject.someModelsHidden\",\n }),\n );\n });\n\n const ovr = this._props.overrides?.getSubjectNodeVisibility;\n return ovr ? from(ovr(this.createOverrideProps({ ids: subjectIds }, result))) : result;\n }\n\n private getModelVisibilityStatus(modelId: Id64String): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n if (!viewport.view.isSpatialView()) {\n return of(createVisibilityStatus(\"disabled\", \"model.nonSpatialView\"));\n }\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"model.hiddenThroughModelSelector\"));\n }\n\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.getCategoryDisplayStatus({ modelId, categoryId })),\n map((x) => x.state),\n getVisibilityFromTreeNodeChildren,\n map((visibilityByCategories) => {\n const state = visibilityByCategories === \"empty\" ? \"visible\" : visibilityByCategories;\n return createVisibilityStatus(state, state === \"partial\" ? \"model.someCategoriesHidden\" : `model.allCategories${state ? \"Visible\" : \"Hidden\"}`);\n }),\n );\n });\n\n const ovr = this._props.overrides?.getModelDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps({ id: modelId }, result))) : result;\n }\n\n private getDefaultCategoryVisibilityStatus({ modelId, categoryId }: { categoryId: Id64String; modelId: Id64String }): NonPartialVisibilityStatus {\n const viewport = this._props.viewport;\n\n if (!viewport.view.viewsModel(modelId)) {\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\");\n }\n\n switch (this._props.viewport.perModelCategoryVisibility.getOverride(modelId, categoryId)) {\n case PerModelCategoryVisibility.Override.Show:\n return createVisibilityStatus(\"visible\", \"category.displayedThroughPerModelOverride\");\n case PerModelCategoryVisibility.Override.Hide:\n return createVisibilityStatus(\"hidden\", \"category.hiddenThroughPerModelOverride\");\n }\n\n const isVisible = viewport.view.viewsCategory(categoryId);\n return isVisible\n ? createVisibilityStatus(\"visible\", \"category.displayedThroughCategorySelector\")\n : createVisibilityStatus(\"hidden\", \"category.hiddenThroughCategorySelector\");\n }\n\n private getCategoryDisplayStatus(props: GetCategoryStatusProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n if (!this._props.viewport.view.viewsModel(props.modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"category.hiddenThroughModel\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: props,\n tooltips: {\n allElementsInAlwaysDrawnList: \"category.allElementsVisible\",\n allElementsInNeverDrawnList: \"category.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"category.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"category.allElementsHidden\",\n },\n defaultStatus: () => this.getDefaultCategoryVisibilityStatus(props),\n });\n });\n\n const ovr = this._props.overrides?.getCategoryDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps(props, result))) : result;\n }\n\n private getClassGroupingNodeDisplayStatus(node: GroupingHierarchyNode): Observable<VisibilityStatus> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n if (!this._props.viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => {\n const status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return createVisibilityStatus(status.state, `groupingNode.${status.state}ThroughCategory`);\n },\n tooltips: {\n allElementsInAlwaysDrawnList: \"groupingNode.allElementsVisible\",\n allElementsInNeverDrawnList: \"groupingNode.allElementsHidden\",\n elementsInBothAlwaysAndNeverDrawn: \"groupingNode.someElementsAreHidden\",\n noElementsInExclusiveAlwaysDrawnList: \"groupingNode.allElementsHidden\",\n },\n });\n });\n\n const ovr = this._props.overrides?.getElementGroupingNodeDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps({ node }, result))) : result;\n }\n\n private getElementOverriddenVisibility(elementId: string): NonPartialVisibilityStatus | undefined {\n const viewport = this._props.viewport;\n if (viewport.neverDrawn?.has(elementId)) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenThroughNeverDrawnList\");\n }\n\n if (viewport.alwaysDrawn?.size) {\n if (viewport.alwaysDrawn.has(elementId)) {\n return createVisibilityStatus(\"visible\", \"element.displayedThroughAlwaysDrawnList\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\");\n }\n }\n\n return undefined;\n }\n\n private getElementDisplayStatus(props: GetElementStateProps): Observable<VisibilityStatus> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { elementId, modelId, categoryId } = props;\n\n if (!viewport.view.viewsModel(modelId)) {\n return of(createVisibilityStatus(\"hidden\", \"element.hiddenThroughModel\"));\n }\n\n let status = this.getElementOverriddenVisibility(elementId);\n if (status) {\n return of(status);\n }\n\n status = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n return of(createVisibilityStatus(status.state, status.state === \"visible\" ? undefined : \"element.hiddenThroughCategory\"));\n });\n\n const ovr = this._props.overrides?.getElementDisplayStatus;\n return ovr ? from(ovr(this.createOverrideProps(props, result))) : result;\n }\n\n /** Changes visibility of the items represented by the tree node. */\n private changeVisibilityObs(node: HierarchyNode, on: boolean): Observable<void> {\n if (node.filtering?.filteredChildrenIdentifierPaths?.length && !node.filtering.isFilterTarget) {\n return this.changeFilteredNodeVisibility({\n parentKeys: [...node.parentKeys, node.key],\n filterPaths: node.filtering.filteredChildrenIdentifierPaths,\n on,\n });\n }\n\n if (HierarchyNode.isClassGroupingNode(node)) {\n return this.changeElementGroupingNodeState(node, on);\n }\n\n // istanbul ignore if\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.changeSubjectNodeState(\n node.key.instanceKeys.map((key) => key.id),\n on,\n );\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.changeModelState({ ids: node.key.instanceKeys[0].id, on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n // istanbul ignore if\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.changeCategoryState({\n categoryId: node.key.instanceKeys[0].id,\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n // istanbul ignore if\n if (!categoryId) {\n // istanbul ignore next\n return EMPTY;\n }\n\n return this.changeElementState({\n elementId: node.key.instanceKeys[0].id,\n modelId,\n categoryId,\n on,\n });\n }\n\n private async getFilterTargets({ parentKeys, filterPaths }: GetFilteredNodeVisibilityProps) {\n const filterTargets: FilterTargets = {};\n\n function addFilterTarget(targetType: \"subjects\" | \"models\", value: Id64String): void;\n function addFilterTarget(targetType: \"categories\", value: CategoryKey): void;\n function addFilterTarget(targetType: \"elements\", value: ElementKey): void;\n function addFilterTarget(targetType: keyof FilterTargets, value: string) {\n ((filterTargets as Record<keyof FilterTargets, Set<string>>)[targetType] ??= new Set()).add(value);\n }\n\n const imodelAccess = this._props.imodelAccess;\n\n // Remove all paths such that there are paths to any of the ancestors of the filter target.\n filterPaths = reduceFilterPaths(filterPaths);\n\n await Promise.all(\n filterPaths.map(async (path) => {\n const target = path[path.length - 1];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(target)) {\n return;\n }\n\n const previousPath = path.slice(0, path.length - 1);\n\n if (await imodelAccess.classDerivesFrom(target.className, SUBJECT_CLASS_NAME)) {\n addFilterTarget(\"subjects\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, MODEL_CLASS_NAME)) {\n addFilterTarget(\"models\", target.id);\n return;\n }\n\n if (await imodelAccess.classDerivesFrom(target.className, CATEGORY_CLASS_NAME)) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const modelId = await this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME);\n addFilterTarget(\"categories\", createCategoryKey(modelId, target.id));\n return;\n }\n\n const [modelId, categoryId] = await Promise.all([\n this.findClassIdInFilterPath(previousPath, parentKeys, MODEL_CLASS_NAME),\n this.findClassIdInFilterPath(previousPath, parentKeys, CATEGORY_CLASS_NAME),\n ]);\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, target.id));\n\n // Add parent elements to the filter targets as well\n for (let idx = path.length - 1; idx >= 0; --idx) {\n const pathIdentifier = path[idx];\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(pathIdentifier)) {\n continue;\n }\n\n if (!(await imodelAccess.classDerivesFrom(pathIdentifier.className, ELEMENT_CLASS_NAME))) {\n break;\n }\n addFilterTarget(\"elements\", createElementKey(modelId, categoryId, pathIdentifier.id));\n }\n }),\n );\n\n return filterTargets;\n }\n\n private changeFilteredNodeVisibility({ on, ...props }: ChangeFilteredNodeVisibilityProps) {\n return from(this.getFilterTargets(props)).pipe(\n mergeMap(({ subjects, models, categories, elements }) => {\n const observables = new Array<Observable<void>>();\n if (subjects?.size) {\n observables.push(this.changeSubjectNodeState([...subjects], on));\n }\n\n if (models?.size) {\n observables.push(this.changeModelState({ ids: models, on }));\n }\n\n if (categories?.size) {\n observables.push(\n from(categories).pipe(\n mergeMap((key) => {\n const { modelId, categoryId } = parseCategoryKey(key);\n return this.changeCategoryState({ modelId, categoryId, on });\n }),\n ),\n );\n }\n\n if (elements?.size) {\n observables.push(\n from(elements).pipe(\n mergeMap((key) => {\n const { modelId, categoryId, elementId } = parseElementKey(key);\n return this.changeElementState({ modelId, categoryId, elementId, on });\n }),\n ),\n );\n }\n\n return merge(...observables);\n }),\n );\n }\n\n private changeSubjectNodeState(ids: Id64Array, on: boolean): Observable<void> {\n const result = defer(() => {\n // istanbul ignore if\n if (!this._props.viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n return from(this._idsCache.getSubjectModelIds(ids)).pipe(mergeMap((modelIds) => this.changeModelState({ ids: modelIds, on })));\n });\n\n const ovr = this._props.overrides?.changeSubjectNodeState;\n return ovr ? from(ovr(this.createVoidOverrideProps({ ids, on }, result))) : result;\n }\n\n private changeModelState(props: ChangeModelStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n // istanbul ignore if\n if (!viewport.view.isSpatialView()) {\n return EMPTY;\n }\n\n const { ids, on } = props;\n if (!on) {\n viewport.changeModelDisplay(ids, false);\n return EMPTY;\n }\n\n return concat(\n defer(() => {\n viewport.perModelCategoryVisibility.clearOverrides(ids);\n return from(viewport.addViewedModels(ids));\n }),\n (typeof ids === \"string\" ? of(ids) : from(ids)).pipe(\n mergeMap((modelId) => {\n return from(this._idsCache.getModelCategories(modelId)).pipe(\n concatAll(),\n mergeMap((categoryId) => this.changeCategoryState({ categoryId, modelId, on: true })),\n );\n }),\n ),\n );\n });\n const ovr = this._props.overrides?.changeModelState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String) {\n const viewport = this._props.viewport;\n return forkJoin({\n categories: this._idsCache.getModelCategories(modelId),\n alwaysDrawnElements: this.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ categories, alwaysDrawnElements }) => {\n const alwaysDrawn = this._props.viewport.alwaysDrawn;\n if (alwaysDrawn && alwaysDrawnElements) {\n viewport.setAlwaysDrawn(setDifference(alwaysDrawn, alwaysDrawnElements));\n }\n categories.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false);\n });\n await viewport.addViewedModels(modelId);\n }),\n );\n }\n\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean) {\n const viewport = this._props.viewport;\n const isDisplayedInSelector = viewport.view.viewsCategory(categoryId);\n const override =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n viewport.perModelCategoryVisibility.setOverride(modelId, categoryId, override);\n if (override === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay(categoryId, true, true);\n }\n }\n\n private changeCategoryState(props: ChangeCategoryStateProps): Observable<void> {\n const result = defer(() => {\n const viewport = this._props.viewport;\n const { modelId, categoryId, on } = props;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, on);\n return this.clearAlwaysAndNeverDrawnElements(props);\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeCategoryState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n /**\n * Updates visibility of all grouping node's elements.\n * @see `changeElementState`\n */\n private changeElementGroupingNodeState(node: GroupingHierarchyNode, on: boolean): Observable<void> {\n const result = defer(() => {\n const info = this.getGroupingNodeInfo(node);\n\n const { modelId, categoryId, elementIds } = info;\n const viewport = this._props.viewport;\n return concat(\n on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return from(elementIds).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeElementGroupingNodeState;\n return ovr ? from(ovr(this.createVoidOverrideProps({ node, on }, result))) : result;\n }\n\n /**\n * Updates visibility of an element and all its child elements by adding them to the always/never drawn list.\n * @note If element is to be enabled and model is hidden, it will be enabled.\n */\n private changeElementState(props: ChangeElementStateProps): Observable<void> {\n const result = defer(() => {\n const { elementId, on, modelId, categoryId } = props;\n const viewport = this._props.viewport;\n return concat(\n props.on && !viewport.view.viewsModel(modelId) ? this.showModelWithoutAnyCategoriesOrElements(modelId) : EMPTY,\n defer(() => {\n const categoryVisibility = this.getDefaultCategoryVisibilityStatus({ categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return of(elementId).pipe(this.changeElementStateNoChildrenOperator({ on, isDisplayedByDefault }));\n }),\n );\n });\n\n const ovr = this._props.overrides?.changeElementState;\n return ovr ? from(ovr(this.createVoidOverrideProps(props, result))) : result;\n }\n\n private changeElementStateNoChildrenOperator(props: { on: boolean; isDisplayedByDefault: boolean }): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = this._props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n reduce(\n (acc, elementId) => {\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: new Set(this._props.viewport.neverDrawn || []),\n alwaysDrawn: new Set(this._props.viewport.alwaysDrawn || []),\n },\n ),\n map((state) => {\n state.changedNeverDrawn && this._props.viewport.setNeverDrawn(state.neverDrawn);\n state.changedAlwaysDrawn && this._props.viewport.setAlwaysDrawn(state.alwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }),\n );\n };\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Id64Set | undefined;\n neverDrawn: Id64Set | undefined;\n totalCount: number;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n ): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount } = props;\n\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\", props.tooltips.allElementsInNeverDrawnList);\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\", props.tooltips.allElementsInAlwaysDrawnList);\n }\n\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive && viewport.alwaysDrawn?.size) {\n return alwaysDrawn?.size\n ? createVisibilityStatus(\"partial\", props.tooltips.elementsInBothAlwaysAndNeverDrawn)\n : createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList);\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n }\n\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Set } | { queryProps: AlwaysOrNeverDrawnElementsQueryProps }),\n ): Observable<VisibilityStatus> {\n const viewport = this._props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\", props.tooltips.noElementsInExclusiveAlwaysDrawnList));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(props.elements, viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(props.elements, viewport.neverDrawn) : undefined,\n totalCount: props.elements.size,\n }),\n );\n }\n\n const { modelId, categoryId } = props.queryProps;\n const totalCount = categoryId ? this._idsCache.getCategoryElementsCount(modelId, categoryId) : this._idsCache.getModelElementCount(modelId);\n return forkJoin({\n totalCount,\n alwaysDrawn: this.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.getNeverDrawnElements(props.queryProps),\n }).pipe(\n map((state) => {\n return this.getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n });\n }),\n );\n }\n\n private getAlwaysDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"always\" });\n }\n\n private getNeverDrawnElements(props: AlwaysOrNeverDrawnElementsQueryProps) {\n return this._alwaysAndNeverDrawnElements.getElements({ ...props, setType: \"never\" });\n }\n\n private clearAlwaysAndNeverDrawnElements(props: Omit<AlwaysOrNeverDrawnElementsQueryProps, \"setType\">) {\n return forkJoin({\n alwaysDrawn: this.getAlwaysDrawnElements(props),\n neverDrawn: this.getNeverDrawnElements(props),\n }).pipe(\n map(({ alwaysDrawn, neverDrawn }) => {\n const viewport = this._props.viewport;\n if (viewport.alwaysDrawn?.size && alwaysDrawn.size) {\n viewport.setAlwaysDrawn(setDifference(viewport.alwaysDrawn, alwaysDrawn));\n }\n if (viewport.neverDrawn?.size && neverDrawn.size) {\n viewport.setNeverDrawn(setDifference(viewport.neverDrawn, neverDrawn));\n }\n }),\n );\n }\n\n private createVoidOverrideProps<TProps>(props: TProps, obs: Observable<void>): OverridableMethodProps<(props: TProps) => Promise<void>> {\n return {\n ...props,\n originalImplementation: async () => toVoidPromise(obs),\n handler: this,\n };\n }\n\n private createOverrideProps<TProps, TObservable extends Observable<any>>(\n props: TProps,\n obs: TObservable,\n ): TObservable extends Observable<infer T> ? OverridableMethodProps<(props: TProps) => Promise<T>> : never;\n private createOverrideProps<TProps, TObservable extends Observable<unknown>>(\n props: TProps,\n obs: TObservable,\n ): OverridableMethodProps<(props: TProps) => Promise<unknown>> {\n return {\n ...props,\n originalImplementation: async () => firstValueFrom(obs),\n handler: this,\n };\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = new Set(node.groupedInstanceKeys.map((key) => key.id));\n return { modelId, categoryId, elementIds };\n }\n\n private async findClassIdInFilterPath(path: HierarchyNodeIdentifiersPath, parentKeys: HierarchyNodeKey[], className: string) {\n function* keysToCheck(): Iterable<InstanceKey> {\n for (let i = path.length - 1; i >= 0; --i) {\n const id = path[i];\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {\n yield id;\n }\n }\n\n for (let i = parentKeys.length - 1; i >= 0; --i) {\n const key = parentKeys[i];\n if (HierarchyNodeKey.isInstances(key)) {\n yield* key.instanceKeys;\n }\n }\n }\n\n for (const parentKey of keysToCheck()) {\n if (await this._props.imodelAccess.classDerivesFrom(parentKey.className, className)) {\n return parentKey.id;\n }\n }\n\n assert(false, () => `Cannot find an instance of ${className} in instance keys: ${JSON.stringify([...keysToCheck()], undefined, 2)}`);\n }\n}\n\ninterface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n tooltips: {\n allElementsInNeverDrawnList: string;\n allElementsInAlwaysDrawnList: string;\n elementsInBothAlwaysAndNeverDrawn: string;\n noElementsInExclusiveAlwaysDrawnList: string;\n };\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: () => VisibilityStatus;\n}\n\nfunction getVisibilityFromTreeNodeChildren(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\nfunction getVisibilityStatusFromTreeNodeChildren(tooltipMap: { [key in Visibility]: string | undefined }): OperatorFunction<Visibility, VisibilityStatus> {\n return (obs) => {\n return getVisibilityFromTreeNodeChildren(obs).pipe(\n map((visibility) => {\n if (visibility === \"empty\") {\n visibility = \"visible\";\n }\n\n return createVisibilityStatus(visibility, tooltipMap[visibility]);\n }),\n );\n };\n}\n\nfunction setDifference<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => !rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction setIntersection<T>(lhs: Set<T>, rhs: Set<T>): Set<T> {\n const result = new Set<T>();\n lhs.forEach((x) => rhs.has(x) && result.add(x));\n return result;\n}\n\nfunction reduceFilterPaths(paths: HierarchyNodeIdentifiersPath[]) {\n const sorted = [...paths].sort((a, b) => a.length - b.length);\n paths = [];\n for (const path of sorted) {\n if (!arraySortedByLengthContainsPrefix(paths, path)) {\n paths.push(path);\n }\n }\n return paths;\n}\n\nfunction arraySortedByLengthContainsPrefix(targetArray: HierarchyNodeIdentifiersPath[], source: HierarchyNodeIdentifiersPath) {\n for (const targetVal of targetArray) {\n if (targetVal.length >= source.length) {\n break;\n }\n\n let isPrefix = true;\n for (let i = 0; i < targetVal.length; ++i) {\n if (!HierarchyNodeIdentifier.equal(targetVal[i], source[i])) {\n isPrefix = false;\n break;\n }\n }\n\n if (isPrefix) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(IModelApp.viewManager, viewport.iModel, true, viewport, false);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export { TreeWidget } from "./TreeWidget";
2
2
  export { createTreeWidget, TreeWidgetComponent } from "./components/TreeWidgetUiItemsProvider";
3
- export { SelectableTree, TreeDefinition } from "./components/SelectableTree";
3
+ export { SelectableTree, SelectableTreeDefinition } from "./components/SelectableTree";
4
4
  export * from "./components/trees";
5
5
  //# sourceMappingURL=tree-widget-react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-widget-react.js","sourceRoot":"","sources":["../../src/tree-widget-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;AAEhG,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,oFAA+F;AAAtF,6HAAA,gBAAgB,OAAA;AAAE,gIAAA,mBAAmB,OAAA;AAC9C,8DAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,qDAAmC","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\nexport { TreeWidget } from \"./TreeWidget\";\nexport { createTreeWidget, TreeWidgetComponent } from \"./components/TreeWidgetUiItemsProvider\";\nexport { SelectableTree, TreeDefinition } from \"./components/SelectableTree\";\nexport * from \"./components/trees\";\n"]}
1
+ {"version":3,"file":"tree-widget-react.js","sourceRoot":"","sources":["../../src/tree-widget-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;AAEhG,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,oFAA+F;AAAtF,6HAAA,gBAAgB,OAAA;AAAE,gIAAA,mBAAmB,OAAA;AAC9C,8DAAuF;AAA9E,gHAAA,cAAc,OAAA;AACvB,qDAAmC","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\nexport { TreeWidget } from \"./TreeWidget\";\nexport { createTreeWidget, TreeWidgetComponent } from \"./components/TreeWidgetUiItemsProvider\";\nexport { SelectableTree, SelectableTreeDefinition } from \"./components/SelectableTree\";\nexport * from \"./components/trees\";\n"]}
@@ -1,8 +1,11 @@
1
1
  /// <reference types="react" />
2
2
  import "./SelectableTree.scss";
3
3
  import type { IModelConnection } from "@itwin/core-frontend";
4
- /** Props for rendering trees */
5
- export interface TreeRenderProps {
4
+ /**
5
+ * Props for rendering trees
6
+ * @public
7
+ */
8
+ export interface SelectableTreeRenderProps {
6
9
  density?: "enlarged" | "default";
7
10
  onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;
8
11
  onFeatureUsed?: (feature: string) => void;
@@ -11,13 +14,13 @@ export interface TreeRenderProps {
11
14
  * Definition of a tree component displayed in `SelectableTree`.
12
15
  * @public
13
16
  */
14
- export interface TreeDefinition {
17
+ export interface SelectableTreeDefinition {
15
18
  /** Id of the tree */
16
19
  id: string;
17
20
  /** Callback that is used to get tree label */
18
21
  getLabel: () => string;
19
22
  /** Callback that is used to render tree component */
20
- render: (props: TreeRenderProps) => React.ReactNode;
23
+ render: (props: SelectableTreeRenderProps) => React.ReactNode;
21
24
  /**
22
25
  * Callback that is used to determine if tree should be shown for current active iModel connection.
23
26
  * If callback is `undefined` tree is shown for all iModel connections.
@@ -26,9 +29,12 @@ export interface TreeDefinition {
26
29
  /** Icon to render before tree label in tree selector */
27
30
  startIcon?: React.ReactNode;
28
31
  }
29
- /** Props for `SelectableTree` */
32
+ /**
33
+ * Props for `SelectableTree`
34
+ * @public
35
+ */
30
36
  export interface SelectableTreeProps {
31
- trees: TreeDefinition[];
37
+ trees: SelectableTreeDefinition[];
32
38
  density?: "enlarged" | "default";
33
39
  onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;
34
40
  onFeatureUsed?: (feature: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../src/components/SelectableTree.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 \"./SelectableTree.scss\";\nimport { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { FillCentered } from \"@itwin/core-react\";\nimport { ProgressLinear } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { TreeSelector } from \"./TreeSelector\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectorProps } from \"./TreeSelector\";\n\n/** Props for rendering trees */\nexport interface TreeRenderProps {\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Definition of a tree component displayed in `SelectableTree`.\n * @public\n */\nexport interface TreeDefinition {\n /** Id of the tree */\n id: string;\n /** Callback that is used to get tree label */\n getLabel: () => string;\n /** Callback that is used to render tree component */\n render: (props: TreeRenderProps) => React.ReactNode;\n /**\n * Callback that is used to determine if tree should be shown for current active iModel connection.\n * If callback is `undefined` tree is shown for all iModel connections.\n */\n shouldShow?: (imodel: IModelConnection) => Promise<boolean>;\n /** Icon to render before tree label in tree selector */\n startIcon?: React.ReactNode;\n}\n\n/** Props for `SelectableTree` */\nexport interface SelectableTreeProps {\n trees: TreeDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders a tree (combo box) selector and the selected tree component.\n * @public\n */\nexport function SelectableTree(props: SelectableTreeProps) {\n const imodel = useActiveIModelConnection();\n if (!imodel) {\n return null;\n }\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent(props: SelectableTreeProps & { imodel: IModelConnection }) {\n const { trees: treeDefinitions, imodel } = props;\n const trees = useActiveTrees(treeDefinitions, imodel);\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <TreeSelector\n {...getTreeSelectorProps(trees)}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n </div>\n );\n}\n\nfunction useActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection) {\n const [trees, setTrees] = useState<TreeContentDefinition[]>();\n\n useEffect(() => {\n let disposed = false;\n void (async () => {\n const visibleTrees = await getActiveTrees(treeDefinitions, imodel);\n // istanbul ignore else\n if (!disposed) {\n setTrees(visibleTrees);\n }\n })();\n\n return () => {\n disposed = true;\n };\n }, [treeDefinitions, imodel]);\n\n return trees;\n}\n\nasync function getActiveTrees(treeDefinitions: TreeDefinition[], imodel: IModelConnection): Promise<TreeContentDefinition[]> {\n const handleDefinition = async (treeDef: TreeDefinition) => {\n if (treeDef.shouldShow !== undefined && !(await treeDef.shouldShow(imodel))) {\n return undefined;\n }\n return {\n id: treeDef.id,\n label: treeDef.getLabel(),\n render: treeDef.render,\n startIcon: treeDef.startIcon,\n };\n };\n\n return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined) as TreeContentDefinition[];\n}\n\nfunction getTreeSelectorProps(trees?: TreeContentDefinition[]): TreeSelectorProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n render: () => (\n <Delayed>\n <ProgressLinear indeterminate={true} />\n </Delayed>\n ),\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n label: \"\",\n render: () => <FillCentered>{TreeWidget.translate(\"selectableTree.noTrees\")}</FillCentered>,\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction Delayed({ delay = 200, children }: PropsWithChildren<{ delay?: number }>) {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShow(true);\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n\n if (!show) {\n return null;\n }\n\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"SelectableTree.js","sourceRoot":"","sources":["../../../src/components/SelectableTree.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 \"./SelectableTree.scss\";\nimport { useEffect, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { FillCentered } from \"@itwin/core-react\";\nimport { ProgressLinear } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { TreeSelector } from \"./TreeSelector\";\n\nimport type { PropsWithChildren } from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectorProps } from \"./TreeSelector\";\n\n/**\n * Props for rendering trees\n * @public\n */\nexport interface SelectableTreeRenderProps {\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Definition of a tree component displayed in `SelectableTree`.\n * @public\n */\nexport interface SelectableTreeDefinition {\n /** Id of the tree */\n id: string;\n /** Callback that is used to get tree label */\n getLabel: () => string;\n /** Callback that is used to render tree component */\n render: (props: SelectableTreeRenderProps) => React.ReactNode;\n /**\n * Callback that is used to determine if tree should be shown for current active iModel connection.\n * If callback is `undefined` tree is shown for all iModel connections.\n */\n shouldShow?: (imodel: IModelConnection) => Promise<boolean>;\n /** Icon to render before tree label in tree selector */\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `SelectableTree`\n * @public\n */\nexport interface SelectableTreeProps {\n trees: SelectableTreeDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that renders a tree (combo box) selector and the selected tree component.\n * @public\n */\nexport function SelectableTree(props: SelectableTreeProps) {\n const imodel = useActiveIModelConnection();\n if (!imodel) {\n return null;\n }\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent(props: SelectableTreeProps & { imodel: IModelConnection }) {\n const { trees: treeDefinitions, imodel } = props;\n const trees = useActiveTrees(treeDefinitions, imodel);\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <TreeSelector\n {...getTreeSelectorProps(trees)}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n </div>\n );\n}\n\nfunction useActiveTrees(treeDefinitions: SelectableTreeDefinition[], imodel: IModelConnection) {\n const [trees, setTrees] = useState<TreeContentDefinition[]>();\n\n useEffect(() => {\n let disposed = false;\n void (async () => {\n const visibleTrees = await getActiveTrees(treeDefinitions, imodel);\n // istanbul ignore else\n if (!disposed) {\n setTrees(visibleTrees);\n }\n })();\n\n return () => {\n disposed = true;\n };\n }, [treeDefinitions, imodel]);\n\n return trees;\n}\n\nasync function getActiveTrees(treeDefinitions: SelectableTreeDefinition[], imodel: IModelConnection): Promise<TreeContentDefinition[]> {\n const handleDefinition = async (treeDef: SelectableTreeDefinition) => {\n if (treeDef.shouldShow !== undefined && !(await treeDef.shouldShow(imodel))) {\n return undefined;\n }\n return {\n id: treeDef.id,\n label: treeDef.getLabel(),\n render: treeDef.render,\n startIcon: treeDef.startIcon,\n };\n };\n\n return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined) as TreeContentDefinition[];\n}\n\nfunction getTreeSelectorProps(trees?: TreeContentDefinition[]): TreeSelectorProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n render: () => (\n <Delayed>\n <ProgressLinear indeterminate={true} />\n </Delayed>\n ),\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n label: \"\",\n render: () => <FillCentered>{TreeWidget.translate(\"selectableTree.noTrees\")}</FillCentered>,\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction Delayed({ delay = 200, children }: PropsWithChildren<{ delay?: number }>) {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n const id = setTimeout(() => {\n setShow(true);\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n\n if (!show) {\n return null;\n }\n\n return <>{children}</>;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import "./TreeSelector.scss";
3
- import type { TreeRenderProps } from "./SelectableTree";
3
+ import type { SelectableTreeRenderProps } from "./SelectableTree";
4
4
  /**
5
5
  * A definition for trees displayed in `TreeSelector`
6
6
  * @internal
@@ -8,7 +8,7 @@ import type { TreeRenderProps } from "./SelectableTree";
8
8
  export interface TreeContentDefinition {
9
9
  id: string;
10
10
  label: string;
11
- render: (props: TreeRenderProps) => React.ReactNode;
11
+ render: (props: SelectableTreeRenderProps) => React.ReactNode;
12
12
  startIcon?: React.ReactNode;
13
13
  }
14
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSelector.js","sourceRoot":"","sources":["../../../src/components/TreeSelector.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA4BxD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAA2B,CAAC;IACrH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,cAAK,SAAS,EAAC,sDAAsD,YAClE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,CAAC,EAAE,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACpC,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;wBAC3B,KAAK,CAAC,aAAa,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;wBAC1C,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC,EACD,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CACnC,KAAC,QAAQ,OAAK,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAC3F,MAAM,CAAC,KAAK,GACJ,CACZ,GACD,CACH,GACG,EACN,cAAK,SAAS,EAAC,uDAAuD,YACnE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GACxI,IACF,CACP,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 \"./TreeSelector.scss\";\nimport { useMemo, useState } from \"react\";\nimport { MenuItem, Select } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { TreeRenderProps } from \"./SelectableTree\";\n\n/**\n * A definition for trees displayed in `TreeSelector`\n * @internal\n */\nexport interface TreeContentDefinition {\n id: string;\n label: string;\n render: (props: TreeRenderProps) => React.ReactNode;\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `TreeSelector`\n * @internal\n */\nexport interface TreeSelectorProps {\n defaultSelectedContentId: string;\n trees: TreeContentDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that accepts a list of trees and renders a select box at the top,\n * allowing to choose which of the provided tree components should be rendered at the bottom.\n * @internal\n */\nexport function TreeSelector(props: TreeSelectorProps) {\n const [selectedContentId, setSelectedContentId] = useState(props.defaultSelectedContentId);\n const selectedContent = props.trees.find((c) => c.id === selectedContentId) ?? props.trees[0];\n const isEnlarged = props.density === \"enlarged\";\n\n const options = useMemo(() => {\n return props.trees.map((c) => ({ label: c.label, value: c.id, startIcon: c.startIcon })) as SelectOption<string>[];\n }, [props.trees]);\n\n return (\n <div className=\"presentation-components-tree-selector-content\">\n <div className=\"presentation-components-tree-selector-content-header\">\n {options.length > 0 && (\n <Select\n options={options}\n value={selectedContent.id}\n size={isEnlarged ? \"large\" : \"small\"}\n onChange={(treeId: string) => {\n props.onFeatureUsed?.(`choose-${treeId}`);\n setSelectedContentId(treeId);\n }}\n itemRenderer={(option, itemProps) => (\n <MenuItem {...option} isSelected={itemProps.isSelected} size={isEnlarged ? \"large\" : \"default\"}>\n {option.label}\n </MenuItem>\n )}\n />\n )}\n </div>\n <div className=\"presentation-components-tree-selector-content-wrapper\">\n {selectedContent?.render({ density: props.density, onPerformanceMeasured: props.onPerformanceMeasured, onFeatureUsed: props.onFeatureUsed })}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"TreeSelector.js","sourceRoot":"","sources":["../../../src/components/TreeSelector.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA4BxD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAA2B,CAAC;IACrH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,cAAK,SAAS,EAAC,sDAAsD,YAClE,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,KAAC,MAAM,IACL,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,eAAe,CAAC,EAAE,EACzB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EACpC,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;wBAC3B,KAAK,CAAC,aAAa,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;wBAC1C,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC,EACD,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CACnC,KAAC,QAAQ,OAAK,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAC3F,MAAM,CAAC,KAAK,GACJ,CACZ,GACD,CACH,GACG,EACN,cAAK,SAAS,EAAC,uDAAuD,YACnE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GACxI,IACF,CACP,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 \"./TreeSelector.scss\";\nimport { useMemo, useState } from \"react\";\nimport { MenuItem, Select } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { SelectableTreeRenderProps } from \"./SelectableTree\";\n\n/**\n * A definition for trees displayed in `TreeSelector`\n * @internal\n */\nexport interface TreeContentDefinition {\n id: string;\n label: string;\n render: (props: SelectableTreeRenderProps) => React.ReactNode;\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `TreeSelector`\n * @internal\n */\nexport interface TreeSelectorProps {\n defaultSelectedContentId: string;\n trees: TreeContentDefinition[];\n density?: \"enlarged\" | \"default\";\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * A component that accepts a list of trees and renders a select box at the top,\n * allowing to choose which of the provided tree components should be rendered at the bottom.\n * @internal\n */\nexport function TreeSelector(props: TreeSelectorProps) {\n const [selectedContentId, setSelectedContentId] = useState(props.defaultSelectedContentId);\n const selectedContent = props.trees.find((c) => c.id === selectedContentId) ?? props.trees[0];\n const isEnlarged = props.density === \"enlarged\";\n\n const options = useMemo(() => {\n return props.trees.map((c) => ({ label: c.label, value: c.id, startIcon: c.startIcon })) as SelectOption<string>[];\n }, [props.trees]);\n\n return (\n <div className=\"presentation-components-tree-selector-content\">\n <div className=\"presentation-components-tree-selector-content-header\">\n {options.length > 0 && (\n <Select\n options={options}\n value={selectedContent.id}\n size={isEnlarged ? \"large\" : \"small\"}\n onChange={(treeId: string) => {\n props.onFeatureUsed?.(`choose-${treeId}`);\n setSelectedContentId(treeId);\n }}\n itemRenderer={(option, itemProps) => (\n <MenuItem {...option} isSelected={itemProps.isSelected} size={isEnlarged ? \"large\" : \"default\"}>\n {option.label}\n </MenuItem>\n )}\n />\n )}\n </div>\n <div className=\"presentation-components-tree-selector-content-wrapper\">\n {selectedContent?.render({ density: props.density, onPerformanceMeasured: props.onPerformanceMeasured, onFeatureUsed: props.onFeatureUsed })}\n </div>\n </div>\n );\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import "./TreeWidgetUiItemsProvider.scss";
3
3
  import type { Widget } from "@itwin/appui-react";
4
- import type { SelectableTreeProps, TreeDefinition } from "./SelectableTree";
4
+ import type { SelectableTreeDefinition, SelectableTreeProps } from "./SelectableTree";
5
5
  /**
6
6
  * Props for `createWidget`.
7
+ * @public
7
8
  */
8
9
  interface TreeWidgetProps {
9
10
  /**
@@ -13,7 +14,7 @@ interface TreeWidgetProps {
13
14
  * @see ExternalSourcesTreeComponent
14
15
  * @see IModelContentTreeComponent
15
16
  */
16
- trees: TreeDefinition[];
17
+ trees: SelectableTreeDefinition[];
17
18
  /** Modifies the density of the tree widget. `enlarged` widget contains larger content */
18
19
  density?: "enlarged" | "default";
19
20
  /** Callback that is invoked when performance of tracked feature is measured. */
@@ -1 +1 @@
1
- {"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../src/components/TreeWidgetUiItemsProvider.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 \"./TreeWidgetUiItemsProvider.scss\";\nimport { useRef } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { StagePanelLocation, StagePanelSection, useTransientState } from \"@itwin/appui-react\";\nimport { SvgHierarchyTree } from \"@itwin/itwinui-icons-react\";\nimport { SvgError } from \"@itwin/itwinui-illustrations-react\";\nimport { Button, NonIdealState } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { SelectableTree } from \"./SelectableTree\";\n\nimport type { Widget } from \"@itwin/appui-react\";\nimport type { SelectableTreeProps, TreeDefinition } from \"./SelectableTree\";\nimport type { FallbackProps } from \"react-error-boundary\";\nimport type { Ref } from \"react\";\n\n/**\n * Props for `createWidget`.\n */\ninterface TreeWidgetProps {\n /**\n * Trees to show in the widget.\n * @see ModelsTreeComponent\n * @see CategoriesTreeComponent\n * @see ExternalSourcesTreeComponent\n * @see IModelContentTreeComponent\n */\n trees: TreeDefinition[];\n /** Modifies the density of the tree widget. `enlarged` widget contains larger content */\n density?: \"enlarged\" | \"default\";\n /** Callback that is invoked when performance of tracked feature is measured. */\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n /** Callback that is invoked when a tracked feature is used. */\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Creates a tree widget definition that should be returned from `UiItemsProvider.getWidgets()`.\n * @public\n */\nexport function createTreeWidget(props: TreeWidgetProps): Widget {\n return {\n id: \"tree-widget-react:trees\",\n label: TreeWidget.translate(\"widget.label\"),\n icon: <SvgHierarchyTree />,\n layouts: {\n standard: {\n section: StagePanelSection.Start,\n location: StagePanelLocation.Right,\n },\n },\n content: (\n <TreeWidgetComponent\n trees={props.trees}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n ),\n };\n}\n\n/**\n * Tree widget component which allows selecting which tree to render.\n * @public\n */\nexport function TreeWidgetComponent(props: SelectableTreeProps) {\n const ref = useTreeWidgetTransientState();\n return (\n <div ref={ref} className=\"tree-widget\">\n <ErrorBoundary FallbackComponent={ErrorState}>\n <SelectableTree {...props} />\n </ErrorBoundary>\n </div>\n );\n}\n\nfunction ErrorState({ resetErrorBoundary }: FallbackProps) {\n return (\n <NonIdealState\n svg={<SvgError />}\n heading={TreeWidget.translate(\"errorState.title\")}\n description={TreeWidget.translate(\"errorState.description\")}\n actions={\n <Button styleType={\"high-visibility\"} onClick={resetErrorBoundary}>\n {TreeWidget.translate(\"errorState.retryButtonLabel\")}\n </Button>\n }\n />\n );\n}\n\nfunction useTreeWidgetTransientState() {\n const { ref, persist, restore } = useTreeStorage();\n useTransientState(persist, restore);\n return ref;\n}\n\ninterface UseTreeStorageResult {\n ref: Ref<HTMLDivElement>;\n persist: () => void;\n restore: () => void;\n}\n\nfunction useTreeStorage(): UseTreeStorageResult {\n const ref = useRef<HTMLDivElement>(null);\n const scrollTop = useRef<number | undefined>();\n\n const getContainer = () => {\n return ref.current?.querySelector(\"#tw-tree-renderer-container\");\n };\n\n const persist = () => {\n const container = getContainer();\n scrollTop.current = container?.scrollTop;\n };\n\n const restore = () => {\n setTimeout(() => {\n const container = getContainer();\n if (container && scrollTop.current) {\n container.scrollTop = scrollTop.current;\n }\n });\n };\n\n return { ref, persist, restore };\n}\n"]}
1
+ {"version":3,"file":"TreeWidgetUiItemsProvider.js","sourceRoot":"","sources":["../../../src/components/TreeWidgetUiItemsProvider.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 \"./TreeWidgetUiItemsProvider.scss\";\nimport { useRef } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { StagePanelLocation, StagePanelSection, useTransientState } from \"@itwin/appui-react\";\nimport { SvgHierarchyTree } from \"@itwin/itwinui-icons-react\";\nimport { SvgError } from \"@itwin/itwinui-illustrations-react\";\nimport { Button, NonIdealState } from \"@itwin/itwinui-react\";\nimport { TreeWidget } from \"../TreeWidget\";\nimport { SelectableTree } from \"./SelectableTree\";\n\nimport type { Widget } from \"@itwin/appui-react\";\nimport type { SelectableTreeDefinition, SelectableTreeProps } from \"./SelectableTree\";\nimport type { FallbackProps } from \"react-error-boundary\";\nimport type { Ref } from \"react\";\n\n/**\n * Props for `createWidget`.\n * @public\n */\ninterface TreeWidgetProps {\n /**\n * Trees to show in the widget.\n * @see ModelsTreeComponent\n * @see CategoriesTreeComponent\n * @see ExternalSourcesTreeComponent\n * @see IModelContentTreeComponent\n */\n trees: SelectableTreeDefinition[];\n /** Modifies the density of the tree widget. `enlarged` widget contains larger content */\n density?: \"enlarged\" | \"default\";\n /** Callback that is invoked when performance of tracked feature is measured. */\n onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;\n /** Callback that is invoked when a tracked feature is used. */\n onFeatureUsed?: (feature: string) => void;\n}\n\n/**\n * Creates a tree widget definition that should be returned from `UiItemsProvider.getWidgets()`.\n * @public\n */\nexport function createTreeWidget(props: TreeWidgetProps): Widget {\n return {\n id: \"tree-widget-react:trees\",\n label: TreeWidget.translate(\"widget.label\"),\n icon: <SvgHierarchyTree />,\n layouts: {\n standard: {\n section: StagePanelSection.Start,\n location: StagePanelLocation.Right,\n },\n },\n content: (\n <TreeWidgetComponent\n trees={props.trees}\n density={props.density}\n onPerformanceMeasured={props.onPerformanceMeasured}\n onFeatureUsed={props.onFeatureUsed}\n />\n ),\n };\n}\n\n/**\n * Tree widget component which allows selecting which tree to render.\n * @public\n */\nexport function TreeWidgetComponent(props: SelectableTreeProps) {\n const ref = useTreeWidgetTransientState();\n return (\n <div ref={ref} className=\"tree-widget\">\n <ErrorBoundary FallbackComponent={ErrorState}>\n <SelectableTree {...props} />\n </ErrorBoundary>\n </div>\n );\n}\n\nfunction ErrorState({ resetErrorBoundary }: FallbackProps) {\n return (\n <NonIdealState\n svg={<SvgError />}\n heading={TreeWidget.translate(\"errorState.title\")}\n description={TreeWidget.translate(\"errorState.description\")}\n actions={\n <Button styleType={\"high-visibility\"} onClick={resetErrorBoundary}>\n {TreeWidget.translate(\"errorState.retryButtonLabel\")}\n </Button>\n }\n />\n );\n}\n\nfunction useTreeWidgetTransientState() {\n const { ref, persist, restore } = useTreeStorage();\n useTransientState(persist, restore);\n return ref;\n}\n\ninterface UseTreeStorageResult {\n ref: Ref<HTMLDivElement>;\n persist: () => void;\n restore: () => void;\n}\n\nfunction useTreeStorage(): UseTreeStorageResult {\n const ref = useRef<HTMLDivElement>(null);\n const scrollTop = useRef<number | undefined>();\n\n const getContainer = () => {\n return ref.current?.querySelector(\"#tw-tree-renderer-container\");\n };\n\n const persist = () => {\n const container = getContainer();\n scrollTop.current = container?.scrollTop;\n };\n\n const restore = () => {\n setTimeout(() => {\n const container = getContainer();\n if (container && scrollTop.current) {\n container.scrollTop = scrollTop.current;\n }\n });\n };\n\n return { ref, persist, restore };\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  import "./TreeHeader.scss";
3
3
  import type { Viewport } from "@itwin/core-frontend";
4
4
  import type { CommonProps } from "@itwin/core-react";
5
- /** @internal */
5
+ /** @public */
6
6
  export interface TreeHeaderButtonProps {
7
7
  viewport: Viewport;
8
8
  density?: "default" | "enlarged";