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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +232 -147
  3. package/lib/cjs/TreeWidget.d.ts +2 -4
  4. package/lib/cjs/TreeWidget.js +0 -6
  5. package/lib/cjs/TreeWidget.js.map +1 -1
  6. package/lib/cjs/components/SelectableTree.d.ts +3 -9
  7. package/lib/cjs/components/SelectableTree.js +1 -1
  8. package/lib/cjs/components/SelectableTree.js.map +1 -1
  9. package/lib/cjs/components/TreeSelector.d.ts +2 -2
  10. package/lib/cjs/components/TreeSelector.js.map +1 -1
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +14 -25
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +43 -45
  13. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  14. package/lib/cjs/components/tree-header/TreeHeader.js +17 -9
  15. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  16. package/lib/cjs/components/tree-header/TreeHeader.scss +7 -41
  17. package/lib/cjs/components/trees/Tree.scss +23 -0
  18. package/lib/cjs/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
  19. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js +78 -0
  20. package/lib/cjs/components/trees/categories-tree/CategoriesTree.js.map +1 -0
  21. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
  22. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js +37 -0
  23. package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
  24. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
  25. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js +75 -0
  26. package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
  27. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
  28. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js +185 -0
  29. package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
  30. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
  31. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js +94 -0
  32. package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
  33. package/lib/cjs/components/trees/categories-tree/UseCategories.d.ts +8 -0
  34. package/lib/cjs/components/trees/categories-tree/UseCategories.js +22 -0
  35. package/lib/cjs/components/trees/categories-tree/UseCategories.js.map +1 -0
  36. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
  37. package/lib/cjs/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +56 -8
  38. package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
  39. package/lib/cjs/components/trees/common/FocusedInstancesContext.d.ts +14 -0
  40. package/lib/cjs/components/trees/common/FocusedInstancesContext.js +16 -0
  41. package/lib/cjs/components/trees/common/FocusedInstancesContext.js.map +1 -0
  42. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
  43. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js +71 -0
  44. package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
  45. package/lib/cjs/components/trees/common/Rxjs.d.ts +10 -0
  46. package/lib/cjs/components/trees/common/Rxjs.js +46 -0
  47. package/lib/cjs/components/trees/common/Rxjs.js.map +1 -0
  48. package/lib/cjs/components/trees/common/UseFeatureReporting.d.ts +11 -0
  49. package/lib/cjs/components/trees/common/UseFeatureReporting.js +10 -1
  50. package/lib/cjs/components/trees/common/UseFeatureReporting.js.map +1 -1
  51. package/lib/cjs/components/trees/common/UseFiltering.d.ts +12 -0
  52. package/lib/cjs/components/trees/common/UseFiltering.js +29 -0
  53. package/lib/cjs/components/trees/common/UseFiltering.js.map +1 -0
  54. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
  55. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js +33 -0
  56. package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
  57. package/lib/cjs/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
  58. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js +157 -0
  59. package/lib/cjs/components/trees/common/UseHierarchyFiltering.js.map +1 -0
  60. package/lib/cjs/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
  61. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js +98 -0
  62. package/lib/cjs/components/trees/common/UseHierarchyVisibility.js.map +1 -0
  63. package/lib/cjs/components/trees/common/UseIModelChangeListener.d.ts +9 -0
  64. package/lib/cjs/components/trees/common/UseIModelChangeListener.js +20 -0
  65. package/lib/cjs/components/trees/common/UseIModelChangeListener.js.map +1 -0
  66. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
  67. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js +35 -0
  68. package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
  69. package/lib/cjs/components/trees/common/UseNodeHighlighting.d.ts +16 -0
  70. package/lib/cjs/components/trees/common/UseNodeHighlighting.js +140 -0
  71. package/lib/cjs/components/trees/common/UseNodeHighlighting.js.map +1 -0
  72. package/lib/cjs/components/trees/common/Utils.d.ts +16 -6
  73. package/lib/cjs/components/trees/common/Utils.js +38 -34
  74. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  75. package/lib/cjs/components/trees/common/components/BaseTree.d.ts +34 -0
  76. package/lib/cjs/components/trees/common/components/BaseTree.js +77 -0
  77. package/lib/cjs/components/trees/common/components/BaseTree.js.map +1 -0
  78. package/lib/cjs/components/trees/common/components/Delayed.d.ts +6 -0
  79. package/lib/cjs/components/trees/common/components/Delayed.js +31 -0
  80. package/lib/cjs/components/trees/common/components/Delayed.js.map +1 -0
  81. package/lib/cjs/components/trees/common/components/ProgressOverlay.d.ts +5 -0
  82. package/lib/cjs/components/trees/common/components/ProgressOverlay.js +16 -0
  83. package/lib/cjs/components/trees/common/components/ProgressOverlay.js.map +1 -0
  84. package/lib/cjs/components/trees/common/components/ProgressOverlay.scss +21 -0
  85. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
  86. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js +28 -0
  87. package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
  88. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
  89. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js +20 -0
  90. package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
  91. package/lib/cjs/components/trees/common/components/TreeRenderer.d.ts +19 -0
  92. package/lib/cjs/components/trees/common/components/TreeRenderer.js +30 -0
  93. package/lib/cjs/components/trees/common/components/TreeRenderer.js.map +1 -0
  94. package/lib/cjs/components/trees/common/components/TreeRenderer.scss +62 -0
  95. package/lib/cjs/components/trees/common/components/VisibilityTree.d.ts +14 -0
  96. package/lib/cjs/components/trees/common/components/VisibilityTree.js +41 -0
  97. package/lib/cjs/components/trees/common/components/VisibilityTree.js.map +1 -0
  98. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
  99. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +29 -83
  100. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  101. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
  102. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
  103. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  104. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
  105. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +262 -0
  106. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
  107. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
  108. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +41 -79
  109. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  110. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
  111. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
  112. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  113. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
  114. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +619 -0
  115. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
  116. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
  117. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +203 -0
  118. package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
  119. package/lib/cjs/components/trees/index.d.ts +4 -16
  120. package/lib/cjs/components/trees/index.js +9 -30
  121. package/lib/cjs/components/trees/index.js.map +1 -1
  122. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +17 -72
  123. package/lib/cjs/components/trees/models-tree/ModelsTree.js +196 -135
  124. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  125. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
  126. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js +101 -0
  127. package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
  128. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
  129. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +40 -83
  130. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  131. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
  132. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js +617 -0
  133. package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
  134. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
  135. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +121 -0
  136. package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  137. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
  138. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js +325 -0
  139. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
  140. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
  141. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js +40 -0
  142. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
  143. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
  144. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +757 -0
  145. package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
  146. package/lib/cjs/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
  147. package/lib/cjs/components/trees/models-tree/internal/Tooltip.js +29 -0
  148. package/lib/cjs/components/trees/models-tree/internal/Tooltip.js.map +1 -0
  149. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
  150. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js +43 -0
  151. package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
  152. package/lib/cjs/tree-widget-react.d.ts +3 -4
  153. package/lib/cjs/tree-widget-react.js +8 -4
  154. package/lib/cjs/tree-widget-react.js.map +1 -1
  155. package/lib/esm/TreeWidget.d.ts +2 -4
  156. package/lib/esm/TreeWidget.js +0 -6
  157. package/lib/esm/TreeWidget.js.map +1 -1
  158. package/lib/esm/components/SelectableTree.d.ts +3 -9
  159. package/lib/esm/components/SelectableTree.js +1 -1
  160. package/lib/esm/components/SelectableTree.js.map +1 -1
  161. package/lib/esm/components/TreeSelector.d.ts +2 -2
  162. package/lib/esm/components/TreeSelector.js.map +1 -1
  163. package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +14 -25
  164. package/lib/esm/components/TreeWidgetUiItemsProvider.js +42 -44
  165. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  166. package/lib/esm/components/tree-header/TreeHeader.js +17 -9
  167. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  168. package/lib/esm/components/tree-header/TreeHeader.scss +7 -41
  169. package/lib/esm/components/trees/Tree.scss +23 -0
  170. package/lib/esm/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
  171. package/lib/esm/components/trees/categories-tree/CategoriesTree.js +74 -0
  172. package/lib/esm/components/trees/categories-tree/CategoriesTree.js.map +1 -0
  173. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
  174. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js +31 -0
  175. package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
  176. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
  177. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js +68 -0
  178. package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
  179. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
  180. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js +181 -0
  181. package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
  182. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
  183. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js +90 -0
  184. package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
  185. package/lib/esm/components/trees/categories-tree/UseCategories.d.ts +8 -0
  186. package/lib/esm/components/trees/categories-tree/UseCategories.js +18 -0
  187. package/lib/esm/components/trees/categories-tree/UseCategories.js.map +1 -0
  188. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
  189. package/lib/esm/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +51 -6
  190. package/lib/esm/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
  191. package/lib/esm/components/trees/common/FocusedInstancesContext.d.ts +14 -0
  192. package/lib/esm/components/trees/common/FocusedInstancesContext.js +12 -0
  193. package/lib/esm/components/trees/common/FocusedInstancesContext.js.map +1 -0
  194. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
  195. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js +67 -0
  196. package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
  197. package/lib/esm/components/trees/common/Rxjs.d.ts +10 -0
  198. package/lib/esm/components/trees/common/Rxjs.js +40 -0
  199. package/lib/esm/components/trees/common/Rxjs.js.map +1 -0
  200. package/lib/esm/components/trees/common/UseFeatureReporting.d.ts +11 -0
  201. package/lib/esm/components/trees/common/UseFeatureReporting.js +8 -0
  202. package/lib/esm/components/trees/common/UseFeatureReporting.js.map +1 -1
  203. package/lib/esm/components/trees/common/UseFiltering.d.ts +12 -0
  204. package/lib/esm/components/trees/common/UseFiltering.js +25 -0
  205. package/lib/esm/components/trees/common/UseFiltering.js.map +1 -0
  206. package/lib/esm/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
  207. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js +29 -0
  208. package/lib/esm/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
  209. package/lib/esm/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
  210. package/lib/esm/components/trees/common/UseHierarchyFiltering.js +153 -0
  211. package/lib/esm/components/trees/common/UseHierarchyFiltering.js.map +1 -0
  212. package/lib/esm/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
  213. package/lib/esm/components/trees/common/UseHierarchyVisibility.js +94 -0
  214. package/lib/esm/components/trees/common/UseHierarchyVisibility.js.map +1 -0
  215. package/lib/esm/components/trees/common/UseIModelChangeListener.d.ts +9 -0
  216. package/lib/esm/components/trees/common/UseIModelChangeListener.js +16 -0
  217. package/lib/esm/components/trees/common/UseIModelChangeListener.js.map +1 -0
  218. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
  219. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js +31 -0
  220. package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
  221. package/lib/esm/components/trees/common/UseNodeHighlighting.d.ts +16 -0
  222. package/lib/esm/components/trees/common/UseNodeHighlighting.js +136 -0
  223. package/lib/esm/components/trees/common/UseNodeHighlighting.js.map +1 -0
  224. package/lib/esm/components/trees/common/Utils.d.ts +16 -6
  225. package/lib/esm/components/trees/common/Utils.js +33 -29
  226. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  227. package/lib/esm/components/trees/common/components/BaseTree.d.ts +34 -0
  228. package/lib/esm/components/trees/common/components/BaseTree.js +73 -0
  229. package/lib/esm/components/trees/common/components/BaseTree.js.map +1 -0
  230. package/lib/esm/components/trees/common/components/Delayed.d.ts +6 -0
  231. package/lib/esm/components/trees/common/components/Delayed.js +27 -0
  232. package/lib/esm/components/trees/common/components/Delayed.js.map +1 -0
  233. package/lib/esm/components/trees/common/components/ProgressOverlay.d.ts +5 -0
  234. package/lib/esm/components/trees/common/components/ProgressOverlay.js +12 -0
  235. package/lib/esm/components/trees/common/components/ProgressOverlay.js.map +1 -0
  236. package/lib/esm/components/trees/common/components/ProgressOverlay.scss +21 -0
  237. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
  238. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js +21 -0
  239. package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
  240. package/lib/esm/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
  241. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js +13 -0
  242. package/lib/esm/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
  243. package/lib/esm/components/trees/common/components/TreeRenderer.d.ts +19 -0
  244. package/lib/esm/components/trees/common/components/TreeRenderer.js +26 -0
  245. package/lib/esm/components/trees/common/components/TreeRenderer.js.map +1 -0
  246. package/lib/esm/components/trees/common/components/TreeRenderer.scss +62 -0
  247. package/lib/esm/components/trees/common/components/VisibilityTree.d.ts +14 -0
  248. package/lib/esm/components/trees/common/components/VisibilityTree.js +37 -0
  249. package/lib/esm/components/trees/common/components/VisibilityTree.js.map +1 -0
  250. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
  251. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +27 -58
  252. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  253. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
  254. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
  255. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  256. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
  257. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +258 -0
  258. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
  259. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
  260. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +39 -54
  261. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  262. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
  263. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
  264. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  265. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
  266. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +615 -0
  267. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
  268. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
  269. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +199 -0
  270. package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
  271. package/lib/esm/components/trees/index.d.ts +4 -16
  272. package/lib/esm/components/trees/index.js +4 -16
  273. package/lib/esm/components/trees/index.js.map +1 -1
  274. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +17 -72
  275. package/lib/esm/components/trees/models-tree/ModelsTree.js +196 -132
  276. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  277. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
  278. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js +92 -0
  279. package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
  280. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
  281. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +38 -81
  282. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  283. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
  284. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js +613 -0
  285. package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
  286. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
  287. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +117 -0
  288. package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  289. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
  290. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js +321 -0
  291. package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
  292. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
  293. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js +37 -0
  294. package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
  295. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
  296. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +748 -0
  297. package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
  298. package/lib/esm/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
  299. package/lib/esm/components/trees/models-tree/internal/Tooltip.js +24 -0
  300. package/lib/esm/components/trees/models-tree/internal/Tooltip.js.map +1 -0
  301. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
  302. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js +39 -0
  303. package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
  304. package/lib/esm/tree-widget-react.d.ts +3 -4
  305. package/lib/esm/tree-widget-react.js +3 -4
  306. package/lib/esm/tree-widget-react.js.map +1 -1
  307. package/lib/public/locales/en/TreeWidget.json +126 -42
  308. package/package.json +19 -6
  309. package/lib/cjs/components/TreeFilteringState.d.ts +0 -18
  310. package/lib/cjs/components/TreeFilteringState.js +0 -46
  311. package/lib/cjs/components/TreeFilteringState.js.map +0 -1
  312. package/lib/cjs/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
  313. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +0 -1
  314. package/lib/cjs/components/trees/VisibilityTreeBase.scss +0 -82
  315. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
  316. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +0 -158
  317. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +0 -1
  318. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +0 -100
  319. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +0 -98
  320. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +0 -1
  321. package/lib/cjs/components/trees/category-tree/Categories.json +0 -99
  322. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +0 -60
  323. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +0 -141
  324. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +0 -1
  325. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
  326. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +0 -123
  327. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
  328. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
  329. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +0 -172
  330. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
  331. package/lib/cjs/components/trees/common/ContextMenu.d.ts +0 -39
  332. package/lib/cjs/components/trees/common/ContextMenu.js +0 -44
  333. package/lib/cjs/components/trees/common/ContextMenu.js.map +0 -1
  334. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
  335. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js +0 -51
  336. package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
  337. package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +0 -61
  338. package/lib/cjs/components/trees/common/TreeNodeRenderer.js +0 -50
  339. package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +0 -1
  340. package/lib/cjs/components/trees/common/TreeRenderer.d.ts +0 -55
  341. package/lib/cjs/components/trees/common/TreeRenderer.js +0 -67
  342. package/lib/cjs/components/trees/common/TreeRenderer.js.map +0 -1
  343. package/lib/cjs/components/trees/common/TreeRenderer.scss +0 -149
  344. package/lib/cjs/components/trees/common/Types.d.ts +0 -57
  345. package/lib/cjs/components/trees/common/Types.js +0 -21
  346. package/lib/cjs/components/trees/common/Types.js.map +0 -1
  347. package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
  348. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +0 -49
  349. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +0 -1
  350. package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +0 -228
  351. package/lib/cjs/components/trees/imodel-content-tree/IModelContent.json +0 -443
  352. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
  353. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +0 -36
  354. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
  355. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
  356. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +0 -651
  357. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
  358. package/lib/cjs/components/trees/models-tree/Utils.d.ts +0 -29
  359. package/lib/cjs/components/trees/models-tree/Utils.js +0 -556
  360. package/lib/cjs/components/trees/models-tree/Utils.js.map +0 -1
  361. package/lib/cjs/components/utils/UseTreeTransientState.d.ts +0 -19
  362. package/lib/cjs/components/utils/UseTreeTransientState.js +0 -33
  363. package/lib/cjs/components/utils/UseTreeTransientState.js.map +0 -1
  364. package/lib/esm/components/TreeFilteringState.d.ts +0 -18
  365. package/lib/esm/components/TreeFilteringState.js +0 -42
  366. package/lib/esm/components/TreeFilteringState.js.map +0 -1
  367. package/lib/esm/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
  368. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +0 -1
  369. package/lib/esm/components/trees/VisibilityTreeBase.scss +0 -82
  370. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
  371. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +0 -154
  372. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +0 -1
  373. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +0 -100
  374. package/lib/esm/components/trees/VisibilityTreeRenderer.js +0 -86
  375. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +0 -1
  376. package/lib/esm/components/trees/category-tree/Categories.json +0 -99
  377. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +0 -60
  378. package/lib/esm/components/trees/category-tree/CategoriesTree.js +0 -111
  379. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +0 -1
  380. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
  381. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +0 -116
  382. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
  383. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
  384. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +0 -164
  385. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
  386. package/lib/esm/components/trees/common/ContextMenu.d.ts +0 -39
  387. package/lib/esm/components/trees/common/ContextMenu.js +0 -39
  388. package/lib/esm/components/trees/common/ContextMenu.js.map +0 -1
  389. package/lib/esm/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
  390. package/lib/esm/components/trees/common/ReportingTreeEventHandler.js +0 -47
  391. package/lib/esm/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
  392. package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +0 -61
  393. package/lib/esm/components/trees/common/TreeNodeRenderer.js +0 -44
  394. package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +0 -1
  395. package/lib/esm/components/trees/common/TreeRenderer.d.ts +0 -55
  396. package/lib/esm/components/trees/common/TreeRenderer.js +0 -59
  397. package/lib/esm/components/trees/common/TreeRenderer.js.map +0 -1
  398. package/lib/esm/components/trees/common/TreeRenderer.scss +0 -149
  399. package/lib/esm/components/trees/common/Types.d.ts +0 -57
  400. package/lib/esm/components/trees/common/Types.js +0 -18
  401. package/lib/esm/components/trees/common/Types.js.map +0 -1
  402. package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
  403. package/lib/esm/components/trees/common/UseVisibilityTreeState.js +0 -45
  404. package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +0 -1
  405. package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +0 -228
  406. package/lib/esm/components/trees/imodel-content-tree/IModelContent.json +0 -443
  407. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
  408. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +0 -32
  409. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
  410. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
  411. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +0 -641
  412. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
  413. package/lib/esm/components/trees/models-tree/Utils.d.ts +0 -29
  414. package/lib/esm/components/trees/models-tree/Utils.js +0 -548
  415. package/lib/esm/components/trees/models-tree/Utils.js.map +0 -1
  416. package/lib/esm/components/utils/UseTreeTransientState.d.ts +0 -19
  417. package/lib/esm/components/utils/UseTreeTransientState.js +0 -29
  418. package/lib/esm/components/utils/UseTreeTransientState.js.map +0 -1
@@ -0,0 +1,617 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ModelsTreeDefinition = exports.ModelsTreeInstanceKeyPathsProps = exports.defaultHierarchyConfiguration = void 0;
8
+ const rxjs_1 = require("rxjs");
9
+ const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
10
+ const presentation_shared_1 = require("@itwin/presentation-shared");
11
+ const Rxjs_1 = require("../common/Rxjs");
12
+ const Utils_1 = require("../common/Utils");
13
+ const MAX_FILTERING_INSTANCE_KEY_COUNT = 100;
14
+ exports.defaultHierarchyConfiguration = {
15
+ elementClassGrouping: "enable",
16
+ elementClassSpecification: "BisCore.GeometricElement3d",
17
+ showEmptyModels: false,
18
+ };
19
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
20
+ var ModelsTreeInstanceKeyPathsProps;
21
+ (function (ModelsTreeInstanceKeyPathsProps) {
22
+ function isLabelProps(props) {
23
+ return !!props.label;
24
+ }
25
+ ModelsTreeInstanceKeyPathsProps.isLabelProps = isLabelProps;
26
+ })(ModelsTreeInstanceKeyPathsProps = exports.ModelsTreeInstanceKeyPathsProps || (exports.ModelsTreeInstanceKeyPathsProps = {}));
27
+ class ModelsTreeDefinition {
28
+ constructor(props) {
29
+ this._impl = (0, presentation_hierarchies_1.createClassBasedHierarchyDefinition)({
30
+ classHierarchyInspector: props.imodelAccess,
31
+ hierarchy: {
32
+ rootNodes: async (requestProps) => this.createRootHierarchyLevelDefinition(requestProps),
33
+ childNodes: [
34
+ {
35
+ parentNodeClassName: "BisCore.Subject",
36
+ definitions: async (requestProps) => this.createSubjectChildrenQuery(requestProps),
37
+ },
38
+ {
39
+ parentNodeClassName: "BisCore.ISubModeledElement",
40
+ definitions: async (requestProps) => this.createISubModeledElementChildrenQuery(requestProps),
41
+ },
42
+ {
43
+ parentNodeClassName: "BisCore.GeometricModel3d",
44
+ definitions: async (requestProps) => this.createGeometricModel3dChildrenQuery(requestProps),
45
+ },
46
+ {
47
+ parentNodeClassName: "BisCore.SpatialCategory",
48
+ definitions: async (requestProps) => this.createSpatialCategoryChildrenQuery(requestProps),
49
+ },
50
+ {
51
+ parentNodeClassName: "BisCore.GeometricElement3d",
52
+ definitions: async (requestProps) => this.createGeometricElement3dChildrenQuery(requestProps),
53
+ },
54
+ ],
55
+ },
56
+ });
57
+ this._idsCache = props.idsCache;
58
+ this._queryExecutor = props.imodelAccess;
59
+ this._hierarchyConfig = props.hierarchyConfig;
60
+ this._selectQueryFactory = (0, presentation_hierarchies_1.createNodesQueryClauseFactory)({ imodelAccess: props.imodelAccess });
61
+ this._nodeLabelSelectClauseFactory = (0, presentation_shared_1.createBisInstanceLabelSelectClauseFactory)({ classHierarchyInspector: props.imodelAccess });
62
+ }
63
+ async postProcessNode(node) {
64
+ if (presentation_hierarchies_1.HierarchyNode.isClassGroupingNode(node)) {
65
+ return {
66
+ ...node,
67
+ label: this._hierarchyConfig.elementClassGrouping === "enableWithCounts" ? `${node.label} (${node.children.length})` : node.label,
68
+ extendedData: {
69
+ ...node.extendedData,
70
+ // add `modelId` and `categoryId` from the first grouped element
71
+ ...node.children[0].extendedData,
72
+ // `imageId` is assigned to instance nodes at query time, but grouping ones need to
73
+ // be handled during post-processing
74
+ imageId: "icon-ec-class",
75
+ },
76
+ };
77
+ }
78
+ return node;
79
+ }
80
+ async defineHierarchyLevel(props) {
81
+ if (this._isSupported === undefined) {
82
+ this._isSupported = this.isSupported();
83
+ }
84
+ if ((await this._isSupported) === false) {
85
+ return [];
86
+ }
87
+ return this._impl.defineHierarchyLevel(props);
88
+ }
89
+ async createRootHierarchyLevelDefinition(props) {
90
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
91
+ filter: props.instanceFilter,
92
+ contentClass: { fullName: "BisCore.Subject", alias: "this" },
93
+ });
94
+ return [
95
+ {
96
+ fullClassName: "BisCore.Subject",
97
+ query: {
98
+ ecsql: `
99
+ SELECT
100
+ ${await this._selectQueryFactory.createSelectClause({
101
+ ecClassId: { selector: presentation_shared_1.ECSql.createRawPropertyValueSelector("this", "ECClassId") },
102
+ ecInstanceId: { selector: "this.ECInstanceId" },
103
+ nodeLabel: {
104
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
105
+ classAlias: "this",
106
+ className: "BisCore.Subject",
107
+ }),
108
+ },
109
+ extendedData: {
110
+ imageId: "icon-imodel-hollow-2",
111
+ isSubject: true,
112
+ },
113
+ autoExpand: true,
114
+ supportsFiltering: true,
115
+ })}
116
+ FROM ${instanceFilterClauses.from} this
117
+ ${instanceFilterClauses.joins}
118
+ WHERE
119
+ this.Parent IS NULL
120
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
121
+ `,
122
+ },
123
+ },
124
+ ];
125
+ }
126
+ async createSubjectChildrenQuery({ parentNodeInstanceIds: subjectIds, instanceFilter, }) {
127
+ const [subjectFilterClauses, modelFilterClauses] = await Promise.all([
128
+ this._selectQueryFactory.createFilterClauses({
129
+ filter: instanceFilter,
130
+ contentClass: { fullName: "BisCore.Subject", alias: "this" },
131
+ }),
132
+ this._selectQueryFactory.createFilterClauses({
133
+ filter: instanceFilter,
134
+ contentClass: { fullName: "BisCore.GeometricModel3d", alias: "this" },
135
+ }),
136
+ ]);
137
+ const [childSubjectIds, childModelIds] = await Promise.all([
138
+ this._idsCache.getChildSubjectIds(subjectIds),
139
+ this._idsCache.getChildSubjectModelIds(subjectIds),
140
+ ]);
141
+ const defs = new Array();
142
+ childSubjectIds.length &&
143
+ defs.push({
144
+ fullClassName: "BisCore.Subject",
145
+ query: {
146
+ ecsql: `
147
+ SELECT
148
+ ${await this._selectQueryFactory.createSelectClause({
149
+ ecClassId: { selector: "this.ECClassId" },
150
+ ecInstanceId: { selector: "this.ECInstanceId" },
151
+ nodeLabel: {
152
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
153
+ classAlias: "this",
154
+ className: "BisCore.Subject",
155
+ }),
156
+ },
157
+ hideIfNoChildren: true,
158
+ hasChildren: { selector: `InVirtualSet(?, this.ECInstanceId)` },
159
+ grouping: { byLabel: { action: "merge", groupId: "subject" } },
160
+ extendedData: {
161
+ imageId: "icon-folder",
162
+ isSubject: true,
163
+ },
164
+ supportsFiltering: true,
165
+ })}
166
+ FROM ${subjectFilterClauses.from} this
167
+ ${subjectFilterClauses.joins}
168
+ WHERE
169
+ this.ECInstanceId IN (${childSubjectIds.map(() => "?").join(",")})
170
+ ${subjectFilterClauses.where ? `AND ${subjectFilterClauses.where}` : ""}
171
+ `,
172
+ bindings: [
173
+ { type: "idset", value: await this._idsCache.getParentSubjectIds() },
174
+ ...childSubjectIds.map((id) => ({ type: "id", value: id })),
175
+ ],
176
+ },
177
+ });
178
+ childModelIds.length &&
179
+ defs.push({
180
+ fullClassName: "BisCore.GeometricModel3d",
181
+ query: {
182
+ ecsql: `
183
+ SELECT model.ECInstanceId AS ECInstanceId, model.*
184
+ FROM (
185
+ SELECT
186
+ ${await this._selectQueryFactory.createSelectClause({
187
+ ecClassId: { selector: "m.ECClassId" },
188
+ ecInstanceId: { selector: "m.ECInstanceId" },
189
+ nodeLabel: {
190
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
191
+ classAlias: "partition",
192
+ className: "BisCore.InformationPartitionElement",
193
+ }),
194
+ },
195
+ hideNodeInHierarchy: {
196
+ selector: `
197
+ CASE
198
+ WHEN (
199
+ json_extract([partition].JsonProperties, '$.PhysicalPartition.Model.Content') IS NOT NULL
200
+ OR json_extract([partition].JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NOT NULL
201
+ ) THEN 1
202
+ ELSE 0
203
+ END
204
+ `,
205
+ },
206
+ hasChildren: this._hierarchyConfig.showEmptyModels
207
+ ? {
208
+ selector: `
209
+ IFNULL((
210
+ SELECT 1
211
+ FROM ${this._hierarchyConfig.elementClassSpecification} e
212
+ WHERE e.Model.Id = m.ECInstanceId
213
+ LIMIT 1
214
+ ), 0)
215
+ `,
216
+ }
217
+ : true,
218
+ extendedData: {
219
+ imageId: "icon-model",
220
+ isModel: true,
221
+ },
222
+ supportsFiltering: true,
223
+ })}
224
+ FROM Bis.GeometricModel3d m
225
+ JOIN bis.InformationPartitionElement [partition] ON [partition].ECInstanceId = m.ModeledElement.Id
226
+ WHERE
227
+ m.ECInstanceId IN (${childModelIds.map(() => "?").join(",")})
228
+ ) model
229
+ JOIN ${modelFilterClauses.from} this ON this.ECInstanceId = model.ECInstanceId
230
+ ${modelFilterClauses.joins}
231
+ ${modelFilterClauses.where ? `AND (model.${presentation_hierarchies_1.NodeSelectClauseColumnNames.HideNodeInHierarchy} OR ${modelFilterClauses.where})` : ""}
232
+ `,
233
+ bindings: childModelIds.map((id) => ({ type: "id", value: id })),
234
+ },
235
+ });
236
+ return defs;
237
+ }
238
+ async createISubModeledElementChildrenQuery({ parentNodeInstanceIds: elementIds, }) {
239
+ // note: we do not apply hierarchy level filtering on this hierarchy level, because it's always
240
+ // hidden - the filter will get applied on the child hierarchy levels
241
+ return [
242
+ {
243
+ fullClassName: "BisCore.GeometricModel3d",
244
+ query: {
245
+ ecsql: `
246
+ SELECT
247
+ ${await this._selectQueryFactory.createSelectClause({
248
+ ecClassId: { selector: "this.ECClassId" },
249
+ ecInstanceId: { selector: "this.ECInstanceId" },
250
+ nodeLabel: "",
251
+ hideNodeInHierarchy: true,
252
+ })}
253
+ FROM BisCore.GeometricModel3d this
254
+ WHERE
255
+ this.ModeledElement.Id IN (${elementIds.map(() => "?").join(",")})
256
+ AND NOT this.IsPrivate
257
+ AND this.ECInstanceId IN (SELECT Model.Id FROM ${this._hierarchyConfig.elementClassSpecification})
258
+ `,
259
+ bindings: [...elementIds.map((id) => ({ type: "id", value: id }))],
260
+ },
261
+ },
262
+ ];
263
+ }
264
+ async createGeometricModel3dChildrenQuery({ parentNodeInstanceIds: modelIds, instanceFilter, }) {
265
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
266
+ filter: instanceFilter,
267
+ contentClass: { fullName: "BisCore.SpatialCategory", alias: "this" },
268
+ });
269
+ return [
270
+ {
271
+ fullClassName: "BisCore.SpatialCategory",
272
+ query: {
273
+ ecsql: `
274
+ SELECT
275
+ ${await this._selectQueryFactory.createSelectClause({
276
+ ecClassId: { selector: "this.ECClassId" },
277
+ ecInstanceId: { selector: "this.ECInstanceId" },
278
+ nodeLabel: {
279
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
280
+ classAlias: "this",
281
+ className: "BisCore.SpatialCategory",
282
+ }),
283
+ },
284
+ grouping: { byLabel: { action: "merge", groupId: "category" } },
285
+ hasChildren: true,
286
+ extendedData: {
287
+ imageId: "icon-layers",
288
+ isCategory: true,
289
+ modelIds: { selector: (0, Utils_1.createIdsSelector)(modelIds) },
290
+ },
291
+ supportsFiltering: true,
292
+ })}
293
+ FROM ${instanceFilterClauses.from} this
294
+ ${instanceFilterClauses.joins}
295
+ WHERE
296
+ EXISTS (
297
+ SELECT 1
298
+ FROM ${this._hierarchyConfig.elementClassSpecification} element
299
+ WHERE
300
+ element.Model.Id IN (${modelIds.map(() => "?").join(",")})
301
+ AND element.Category.Id = +this.ECInstanceId
302
+ AND element.Parent IS NULL
303
+ )
304
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
305
+ `,
306
+ bindings: modelIds.map((id) => ({ type: "id", value: id })),
307
+ },
308
+ },
309
+ ];
310
+ }
311
+ async createSpatialCategoryChildrenQuery({ parentNodeInstanceIds: categoryIds, parentNode, instanceFilter, }) {
312
+ const modelIds = (0, Utils_1.parseIdsSelectorResult)(parentNode.extendedData?.modelIds);
313
+ if (modelIds.length === 0) {
314
+ throw new Error(`Invalid category node "${parentNode.label}" - missing model information.`);
315
+ }
316
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
317
+ filter: instanceFilter,
318
+ contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: "this" },
319
+ });
320
+ return [
321
+ {
322
+ fullClassName: this._hierarchyConfig.elementClassSpecification,
323
+ query: {
324
+ ecsql: `
325
+ SELECT
326
+ ${await this._selectQueryFactory.createSelectClause({
327
+ ecClassId: { selector: "this.ECClassId" },
328
+ ecInstanceId: { selector: "this.ECInstanceId" },
329
+ nodeLabel: {
330
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
331
+ classAlias: "this",
332
+ className: this._hierarchyConfig.elementClassSpecification,
333
+ }),
334
+ },
335
+ grouping: {
336
+ byClass: this._hierarchyConfig.elementClassGrouping !== "disable",
337
+ },
338
+ hasChildren: {
339
+ selector: `
340
+ IFNULL((
341
+ SELECT 1
342
+ FROM (
343
+ SELECT Parent.Id ParentId FROM ${this._hierarchyConfig.elementClassSpecification}
344
+ UNION ALL
345
+ SELECT ModeledElement.Id ParentId FROM bis.GeometricModel3d
346
+ )
347
+ WHERE ParentId = this.ECInstanceId
348
+ LIMIT 1
349
+ ), 0)
350
+ `,
351
+ },
352
+ extendedData: {
353
+ modelId: { selector: "IdToHex(this.Model.Id)" },
354
+ categoryId: { selector: "IdToHex(this.Category.Id)" },
355
+ imageId: "icon-item",
356
+ },
357
+ supportsFiltering: true,
358
+ })}
359
+ FROM ${instanceFilterClauses.from} this
360
+ ${instanceFilterClauses.joins}
361
+ WHERE
362
+ this.Category.Id IN (${categoryIds.map(() => "?").join(",")})
363
+ AND this.Model.Id IN (${modelIds.map(() => "?").join(",")})
364
+ AND this.Parent IS NULL
365
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
366
+ `,
367
+ bindings: [...categoryIds.map((id) => ({ type: "id", value: id })), ...modelIds.map((id) => ({ type: "id", value: id }))],
368
+ },
369
+ },
370
+ ];
371
+ }
372
+ async createGeometricElement3dChildrenQuery({ parentNodeInstanceIds: elementIds, instanceFilter, }) {
373
+ const instanceFilterClauses = await this._selectQueryFactory.createFilterClauses({
374
+ filter: instanceFilter,
375
+ contentClass: { fullName: this._hierarchyConfig.elementClassSpecification, alias: "this" },
376
+ });
377
+ return [
378
+ {
379
+ fullClassName: this._hierarchyConfig.elementClassSpecification,
380
+ query: {
381
+ ecsql: `
382
+ SELECT
383
+ ${await this._selectQueryFactory.createSelectClause({
384
+ ecClassId: { selector: "this.ECClassId" },
385
+ ecInstanceId: { selector: "this.ECInstanceId" },
386
+ nodeLabel: {
387
+ selector: await this._nodeLabelSelectClauseFactory.createSelectClause({
388
+ classAlias: "this",
389
+ className: this._hierarchyConfig.elementClassSpecification,
390
+ }),
391
+ },
392
+ grouping: {
393
+ byClass: this._hierarchyConfig.elementClassGrouping !== "disable",
394
+ },
395
+ hasChildren: {
396
+ selector: `
397
+ IFNULL((
398
+ SELECT 1
399
+ FROM (
400
+ SELECT Parent.Id ParentId FROM ${this._hierarchyConfig.elementClassSpecification}
401
+ UNION ALL
402
+ SELECT ModeledElement.Id ParentId FROM bis.GeometricModel3d
403
+ )
404
+ WHERE ParentId = this.ECInstanceId
405
+ LIMIT 1
406
+ ), 0)
407
+ `,
408
+ },
409
+ extendedData: {
410
+ modelId: { selector: "IdToHex(this.Model.Id)" },
411
+ categoryId: { selector: "IdToHex(this.Category.Id)" },
412
+ imageId: "icon-item",
413
+ },
414
+ supportsFiltering: true,
415
+ })}
416
+ FROM ${instanceFilterClauses.from} this
417
+ ${instanceFilterClauses.joins}
418
+ WHERE
419
+ this.Parent.Id IN (${elementIds.map(() => "?").join(",")})
420
+ ${instanceFilterClauses.where ? `AND ${instanceFilterClauses.where}` : ""}
421
+ `,
422
+ bindings: elementIds.map((id) => ({ type: "id", value: id })),
423
+ },
424
+ },
425
+ ];
426
+ }
427
+ static async createInstanceKeyPaths(props) {
428
+ if (ModelsTreeInstanceKeyPathsProps.isLabelProps(props)) {
429
+ const labelsFactory = (0, presentation_shared_1.createBisInstanceLabelSelectClauseFactory)({ classHierarchyInspector: props.imodelAccess });
430
+ return createInstanceKeyPathsFromInstanceLabel({ ...props, labelsFactory });
431
+ }
432
+ return createInstanceKeyPathsFromInstanceKeys(props);
433
+ }
434
+ async isSupported() {
435
+ const [schemaName, className] = this._hierarchyConfig.elementClassSpecification.split(/[\.:]/);
436
+ if (!schemaName || !className) {
437
+ throw new Error(`Provided class specification ${this._hierarchyConfig.elementClassSpecification} should be in format {SchemaName}:{ClassName} or {SchemaName}.{ClassName}`);
438
+ }
439
+ const query = {
440
+ ecsql: `
441
+ SELECT 1
442
+ FROM ECDbMeta.ECSchemaDef s
443
+ JOIN ECDbMeta.ECClassDef c ON c.Schema.Id = s.ECInstanceId
444
+ WHERE s.Name = ? AND c.Name = ? AND c.ECInstanceId IS (BisCore.GeometricElement3d)
445
+ `,
446
+ bindings: [
447
+ { type: "string", value: schemaName },
448
+ { type: "string", value: className },
449
+ ],
450
+ };
451
+ for await (const _row of this._queryExecutor.createQueryReader(query)) {
452
+ return true;
453
+ }
454
+ return false;
455
+ }
456
+ }
457
+ exports.ModelsTreeDefinition = ModelsTreeDefinition;
458
+ function createSubjectInstanceKeysPath(subjectId, idsCache) {
459
+ return (0, rxjs_1.from)(idsCache.getSubjectAncestorsPath(subjectId)).pipe((0, rxjs_1.map)((idsPath) => idsPath.map((id) => ({ className: "BisCore.Subject", id }))));
460
+ }
461
+ function createModelInstanceKeyPaths(modelId, idsCache) {
462
+ return (0, rxjs_1.from)(idsCache.getModelSubjects(modelId)).pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.mergeMap)((modelSubjectId) => createSubjectInstanceKeysPath(modelSubjectId, idsCache).pipe((0, rxjs_1.map)((subjectPath) => [...subjectPath, { className: "BisCore.GeometricModel3d", id: modelId }]))));
463
+ }
464
+ function createCategoryInstanceKeyPaths(categoryId, idsCache) {
465
+ return (0, rxjs_1.from)(idsCache.getCategoryModels(categoryId)).pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.mergeMap)((categoryModelId) => createModelInstanceKeyPaths(categoryModelId, idsCache).pipe((0, rxjs_1.map)((modelPath) => [...modelPath, { className: "BisCore.SpatialCategory", id: categoryId }]))));
466
+ }
467
+ function createGeometricElementInstanceKeyPaths(imodelAccess, idsCache, hierarchyConfig, elementInfos) {
468
+ return (0, rxjs_1.defer)(() => {
469
+ const elementIds = elementInfos.filter((info) => typeof info === "string");
470
+ const groupInfos = elementInfos.filter((info) => typeof info !== "string");
471
+ const elementsClause = elementIds.length > 0 ? `e.ECInstanceId IN (${elementIds.map(() => "?").join(",")})` : undefined;
472
+ const createParentElementClause = (parent) => `e.Parent.Id IN (${parent.ids.map(() => "?").join(",")})`;
473
+ const createParentCategoryClause = ({ ids, modelIds }) => `e.Category.Id IN (${ids.map(() => "?").join(",")}) AND e.Model.Id IN (${modelIds.map(() => "?").join(",")})`;
474
+ const classClause = groupInfos.map(({ parent, classes }) => `(${parent.type === "element" ? createParentElementClause(parent) : createParentCategoryClause(parent)} AND e.ECClassId IS (${classes.join(",")}))`);
475
+ const whereClause = [...(elementsClause ? [elementsClause] : []), ...(classClause ?? [])].join(" OR ");
476
+ const ctes = [
477
+ `ModelsCategoriesElementsHierarchy(ECInstanceId, ParentId, ModelId, Path) AS (
478
+ SELECT
479
+ e.ECInstanceId,
480
+ e.Parent.Id,
481
+ e.Model.Id,
482
+ json_array(
483
+ ${createECInstanceKeySelectClause({ alias: "e" })},
484
+ IIF(e.Parent.Id IS NULL, ${createECInstanceKeySelectClause({ alias: "c" })}, NULL),
485
+ IIF(e.Parent.Id IS NULL, ${createECInstanceKeySelectClause({ alias: "m" })}, NULL)
486
+ )
487
+ FROM ${hierarchyConfig.elementClassSpecification} e
488
+ JOIN bis.GeometricModel3d m ON m.ECInstanceId = e.Model.Id
489
+ JOIN bis.SpatialCategory c ON c.ECInstanceId = e.Category.Id
490
+ WHERE ${whereClause}
491
+
492
+ UNION ALL
493
+
494
+ SELECT
495
+ pe.ECInstanceId,
496
+ pe.Parent.Id,
497
+ pe.Model.Id,
498
+ json_insert(
499
+ ce.Path,
500
+ '$[#]', ${createECInstanceKeySelectClause({ alias: "pe" })},
501
+ '$[#]', IIF(pe.Parent.Id IS NULL, ${createECInstanceKeySelectClause({ alias: "c" })}, NULL),
502
+ '$[#]', IIF(pe.Parent.Id IS NULL, ${createECInstanceKeySelectClause({ alias: "m" })}, NULL)
503
+ )
504
+ FROM ModelsCategoriesElementsHierarchy ce
505
+ JOIN ${hierarchyConfig.elementClassSpecification} pe ON (pe.ECInstanceId = ce.ParentId OR pe.ECInstanceId = ce.ModelId AND ce.ParentId IS NULL)
506
+ JOIN bis.GeometricModel3d m ON m.ECInstanceId = pe.Model.Id
507
+ JOIN bis.SpatialCategory c ON c.ECInstanceId = pe.Category.Id
508
+ )`,
509
+ ];
510
+ const ecsql = `
511
+ SELECT mce.ModelId, mce.Path
512
+ FROM ModelsCategoriesElementsHierarchy mce
513
+ WHERE mce.ParentId IS NULL
514
+ `;
515
+ const createIdBinding = (id) => ({ type: "id", value: id });
516
+ const createCategoryElementsBindings = ({ ids, modelIds }) => [
517
+ ...ids.map(createIdBinding),
518
+ ...modelIds.map(createIdBinding),
519
+ ];
520
+ return imodelAccess.createQueryReader({
521
+ ctes,
522
+ ecsql,
523
+ bindings: [
524
+ ...elementIds.map(createIdBinding),
525
+ ...groupInfos.flatMap((info) => info.parent.type === "element" ? info.parent.ids.map(createIdBinding) : createCategoryElementsBindings(info.parent)),
526
+ ],
527
+ }, { rowFormat: "Indexes" });
528
+ }).pipe((0, rxjs_1.map)((row) => ({
529
+ modelId: row[0],
530
+ elementHierarchyPath: flatten(JSON.parse(row[1])).reverse(),
531
+ })), (0, rxjs_1.mergeMap)(({ modelId, elementHierarchyPath }) => createModelInstanceKeyPaths(modelId, idsCache).pipe((0, rxjs_1.map)((modelPath) => {
532
+ modelPath.pop(); // model is already included in the element hierarchy path
533
+ return [...modelPath, ...elementHierarchyPath.filter((x) => !!x)];
534
+ }))));
535
+ }
536
+ async function createInstanceKeyPathsFromInstanceKeys(props) {
537
+ if (props.keys.length > MAX_FILTERING_INSTANCE_KEY_COUNT) {
538
+ throw new Error(`Filter matches more than ${MAX_FILTERING_INSTANCE_KEY_COUNT} items`);
539
+ }
540
+ const ids = {
541
+ models: new Array(),
542
+ categories: new Array(),
543
+ subjects: new Array(),
544
+ elements: new Array(),
545
+ };
546
+ await Promise.all(props.keys.map(async (key) => {
547
+ if ("parent" in key) {
548
+ ids.elements.push(key);
549
+ }
550
+ else if (await props.imodelAccess.classDerivesFrom(key.className, "BisCore.Subject")) {
551
+ ids.subjects.push(key.id);
552
+ }
553
+ else if (await props.imodelAccess.classDerivesFrom(key.className, "BisCore.Model")) {
554
+ ids.models.push(key.id);
555
+ }
556
+ else if (await props.imodelAccess.classDerivesFrom(key.className, "BisCore.SpatialCategory")) {
557
+ ids.categories.push(key.id);
558
+ }
559
+ else {
560
+ ids.elements.push(key.id);
561
+ }
562
+ }));
563
+ return (0, Rxjs_1.collect)((0, rxjs_1.merge)((0, rxjs_1.from)(ids.subjects).pipe((0, rxjs_1.mergeMap)((id) => createSubjectInstanceKeysPath(id, props.idsCache))), (0, rxjs_1.from)(ids.models).pipe((0, rxjs_1.mergeMap)((id) => createModelInstanceKeyPaths(id, props.idsCache))), (0, rxjs_1.from)(ids.categories).pipe((0, rxjs_1.mergeMap)((id) => createCategoryInstanceKeyPaths(id, props.idsCache))), ids.elements.length ? createGeometricElementInstanceKeyPaths(props.imodelAccess, props.idsCache, props.hierarchyConfig, ids.elements) : rxjs_1.EMPTY));
564
+ }
565
+ async function createInstanceKeyPathsFromInstanceLabel(props) {
566
+ const elementLabelSelectClause = await props.labelsFactory.createSelectClause({
567
+ classAlias: "e",
568
+ className: "BisCore.Element",
569
+ // eslint-disable-next-line @typescript-eslint/unbound-method
570
+ selectorsConcatenator: presentation_shared_1.ECSql.createConcatenatedValueStringSelector,
571
+ });
572
+ const targetsReader = props.imodelAccess.createQueryReader({
573
+ ecsql: `
574
+ SELECT *
575
+ FROM (
576
+ SELECT
577
+ ec_classname(e.ECClassId, 's.c'),
578
+ e.ECInstanceId,
579
+ ${elementLabelSelectClause} Label
580
+ FROM BisCore.Element e
581
+ WHERE e.ECClassId IS (BisCore.Subject, BisCore.SpatialCategory, ${props.hierarchyConfig.elementClassSpecification})
582
+
583
+ UNION ALL
584
+
585
+ SELECT
586
+ ec_classname(m.ECClassId, 's.c'),
587
+ m.ECInstanceId,
588
+ ${elementLabelSelectClause} Label
589
+ FROM BisCore.GeometricModel3d m
590
+ JOIN BisCore.Element e ON e.ECInstanceId = m.ModeledElement.Id
591
+ WHERE NOT m.IsPrivate
592
+ ${props.hierarchyConfig.showEmptyModels ? "" : `AND EXISTS (SELECT 1 FROM ${props.hierarchyConfig.elementClassSpecification} WHERE Model.Id = m.ECInstanceId)`}
593
+ AND json_extract(e.JsonProperties, '$.PhysicalPartition.Model.Content') IS NULL
594
+ AND json_extract(e.JsonProperties, '$.GraphicalPartition3d.Model.Content') IS NULL
595
+ )
596
+ WHERE Label LIKE '%' || ? || '%' ESCAPE '\\'
597
+ LIMIT ${MAX_FILTERING_INSTANCE_KEY_COUNT + 1}
598
+ `,
599
+ bindings: [{ type: "string", value: props.label.replace(/[%_\\]/g, "\\$&") }],
600
+ }, { rowFormat: "Indexes", restartToken: "tree-widget/models-tree/filter-by-label-query" });
601
+ const targetKeys = new Array();
602
+ for await (const row of targetsReader) {
603
+ targetKeys.push({ className: row[0], id: row[1] });
604
+ }
605
+ return createInstanceKeyPathsFromInstanceKeys({ ...props, keys: targetKeys });
606
+ }
607
+ function createECInstanceKeySelectClause(props) {
608
+ const classIdSelector = `[${props.alias}].[ECClassId]`;
609
+ const instanceHexIdSelector = `IdToHex([${props.alias}].[ECInstanceId])`;
610
+ return `json_object('className', ec_classname(${classIdSelector}, 's.c'), 'id', ${instanceHexIdSelector})`;
611
+ }
612
+ function flatten(source) {
613
+ return source.reduce((flat, item) => {
614
+ return [...flat, ...(Array.isArray(item) ? flatten(item) : [item])];
615
+ }, new Array());
616
+ }
617
+ //# sourceMappingURL=ModelsTreeDefinition.js.map