@itwin/tree-widget-react 4.0.0-alpha.1 → 4.0.0-alpha.11

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 (284) hide show
  1. package/CHANGELOG.md +84 -1
  2. package/README.md +5 -53
  3. package/lib/esm/tree-widget-react/TreeWidget.d.ts +7 -2
  4. package/lib/esm/tree-widget-react/TreeWidget.js +22 -2
  5. package/lib/esm/tree-widget-react/TreeWidget.js.map +1 -1
  6. package/lib/esm/tree-widget-react/components/{SelectableTree.scss → TreeWidgetComponentImpl.css} +0 -1
  7. package/lib/esm/tree-widget-react/components/{SelectableTree.d.ts → TreeWidgetComponentImpl.d.ts} +18 -14
  8. package/lib/esm/tree-widget-react/components/{SelectableTree.js → TreeWidgetComponentImpl.js} +28 -28
  9. package/lib/esm/tree-widget-react/components/TreeWidgetComponentImpl.js.map +1 -0
  10. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.d.ts +4 -6
  11. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js +9 -10
  12. package/lib/esm/tree-widget-react/components/TreeWidgetUiItemsProvider.js.map +1 -1
  13. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.d.ts +4 -0
  14. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js +14 -0
  15. package/lib/esm/tree-widget-react/components/tree-header/ErrorState.js.map +1 -0
  16. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.d.ts +11 -0
  17. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js +33 -0
  18. package/lib/esm/tree-widget-react/components/tree-header/SearchBox.js.map +1 -0
  19. package/lib/esm/tree-widget-react/components/tree-header/{TreeWithHeader.scss → SelectableTree.css} +9 -8
  20. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.d.ts +16 -0
  21. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js +14 -0
  22. package/lib/esm/tree-widget-react/components/tree-header/SelectableTree.js.map +1 -0
  23. package/lib/esm/tree-widget-react/components/{TreeSelector.scss → tree-header/WidgetHeader.css} +12 -5
  24. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.d.ts +36 -0
  25. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js +31 -0
  26. package/lib/esm/tree-widget-react/components/tree-header/WidgetHeader.js.map +1 -0
  27. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.d.ts +3 -2
  28. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js +4 -2
  29. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTree.js.map +1 -1
  30. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.d.ts +11 -5
  31. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js +60 -14
  32. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -1
  33. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.d.ts +1 -6
  34. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js +4 -10
  35. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -1
  36. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +39 -4
  37. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js +658 -114
  38. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -1
  39. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.d.ts +19 -6
  40. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js +83 -82
  41. package/lib/esm/tree-widget-react/components/trees/categories-tree/UseCategoriesTree.js.map +1 -1
  42. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.d.ts +68 -0
  43. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js +442 -0
  44. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeIdsCache.js.map +1 -0
  45. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.d.ts +41 -0
  46. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js +50 -0
  47. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeNode.js.map +1 -0
  48. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.d.ts +23 -0
  49. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js +708 -0
  50. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/CategoriesTreeVisibilityHandler.js.map +1 -0
  51. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.d.ts +39 -0
  52. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js +221 -0
  53. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/FilteredTree.js.map +1 -0
  54. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.d.ts +25 -0
  55. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js +133 -0
  56. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseFilteredPaths.js.map +1 -0
  57. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.d.ts +8 -0
  58. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js +48 -0
  59. package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/UseIdsCache.js.map +1 -0
  60. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.d.ts +12 -0
  61. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js +14 -0
  62. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTree.js.map +1 -0
  63. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.d.ts +23 -0
  64. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js +47 -0
  65. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeComponent.js.map +1 -0
  66. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.d.ts +38 -0
  67. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js +353 -0
  68. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeDefinition.js.map +1 -0
  69. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.d.ts +6 -0
  70. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js +37 -0
  71. package/lib/esm/tree-widget-react/components/trees/classifications-tree/ClassificationsTreeIcon.js.map +1 -0
  72. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.d.ts +23 -0
  73. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js +52 -0
  74. package/lib/esm/tree-widget-react/components/trees/classifications-tree/UseClassificationsTree.js.map +1 -0
  75. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.d.ts +38 -0
  76. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js +269 -0
  77. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeIdsCache.js.map +1 -0
  78. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.d.ts +20 -0
  79. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js +36 -0
  80. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeNode.js.map +1 -0
  81. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.d.ts +19 -0
  82. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js +484 -0
  83. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/ClassificationsTreeVisibilityHandler.js.map +1 -0
  84. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.d.ts +8 -0
  85. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.js +45 -0
  86. package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/UseIdsCache.js.map +1 -0
  87. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.d.ts +5 -21
  88. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js +5 -62
  89. package/lib/esm/tree-widget-react/components/trees/common/CategoriesVisibilityUtils.js.map +1 -1
  90. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.d.ts +28 -4
  91. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js +73 -2
  92. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContext.js.map +1 -1
  93. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js +1 -0
  94. package/lib/esm/tree-widget-react/components/trees/common/TreeErrors.js.map +1 -1
  95. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.d.ts +4 -4
  96. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js +12 -6
  97. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyVisibility.js.map +1 -1
  98. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.d.ts +3 -3
  99. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js +13 -15
  100. package/lib/esm/tree-widget-react/components/trees/common/UseNodeHighlighting.js.map +1 -1
  101. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.d.ts +1 -0
  102. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js +2 -1
  103. package/lib/esm/tree-widget-react/components/trees/common/UseTelemetryContext.js.map +1 -1
  104. package/lib/esm/tree-widget-react/components/trees/common/Utils.d.ts +38 -23
  105. package/lib/esm/tree-widget-react/components/trees/common/Utils.js +65 -47
  106. package/lib/esm/tree-widget-react/components/trees/common/Utils.js.map +1 -1
  107. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.d.ts +6 -0
  108. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js +13 -0
  109. package/lib/esm/tree-widget-react/components/trees/common/components/BaseTreeRenderer.js.map +1 -0
  110. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.d.ts +1 -0
  111. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js +1 -0
  112. package/lib/esm/tree-widget-react/components/trees/common/components/Delayed.js.map +1 -1
  113. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.css +25 -0
  114. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.d.ts +21 -0
  115. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js +43 -0
  116. package/lib/esm/tree-widget-react/components/trees/common/components/EmptyTree.js.map +1 -0
  117. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.d.ts +2 -1
  118. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js +5 -4
  119. package/lib/esm/tree-widget-react/components/trees/common/components/ProgressOverlay.js.map +1 -1
  120. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.css +16 -0
  121. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.d.ts +4 -0
  122. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +16 -0
  123. package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js.map +1 -0
  124. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.css +11 -0
  125. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.d.ts +9 -13
  126. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js +53 -36
  127. package/lib/esm/tree-widget-react/components/trees/common/components/Tree.js.map +1 -1
  128. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.css +2 -1
  129. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.d.ts +5 -10
  130. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js +14 -20
  131. package/lib/esm/tree-widget-react/components/trees/common/components/TreeNodeVisibilityButton.js.map +1 -1
  132. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.d.ts +2 -8
  133. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js +11 -7
  134. package/lib/esm/tree-widget-react/components/trees/common/components/TreeRenderer.js.map +1 -1
  135. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.d.ts +3 -2
  136. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js +7 -7
  137. package/lib/esm/tree-widget-react/components/trees/common/components/UseVisibilityButtonHandler.js.map +1 -1
  138. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.d.ts +2 -2
  139. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js +10 -6
  140. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTree.js.map +1 -1
  141. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.d.ts +3 -3
  142. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js +13 -10
  143. package/lib/esm/tree-widget-react/components/trees/common/components/VisibilityTreeRenderer.js.map +1 -1
  144. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.d.ts +43 -0
  145. package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/AlwaysAndNeverDrawnElementInfo.js +91 -34
  146. package/lib/esm/tree-widget-react/components/trees/common/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
  147. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.d.ts +43 -0
  148. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js +47 -0
  149. package/lib/esm/tree-widget-react/components/trees/common/internal/ClassNameDefinitions.js.map +1 -0
  150. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.d.ts +15 -0
  151. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js +79 -0
  152. package/lib/esm/tree-widget-react/components/trees/common/internal/ModelCategoryElementsCountCache.js.map +1 -0
  153. package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.d.ts → internal/Rxjs.d.ts} +9 -2
  154. package/lib/esm/tree-widget-react/components/trees/common/{Rxjs.js → internal/Rxjs.js} +10 -2
  155. package/lib/esm/tree-widget-react/components/trees/common/internal/Rxjs.js.map +1 -0
  156. package/lib/esm/tree-widget-react/components/trees/common/{Tooltip.d.ts → internal/Tooltip.d.ts} +4 -8
  157. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js +18 -0
  158. package/lib/esm/tree-widget-react/components/trees/common/internal/Tooltip.js.map +1 -0
  159. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.d.ts +14 -0
  160. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js +6 -0
  161. package/lib/esm/tree-widget-react/components/trees/common/internal/Types.js.map +1 -0
  162. package/lib/esm/tree-widget-react/components/trees/common/internal/UseActiveViewport.js.map +1 -0
  163. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.d.ts → internal/UseHierarchiesLocalization.d.ts} +3 -2
  164. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchiesLocalization.js → internal/UseHierarchiesLocalization.js} +6 -2
  165. package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchiesLocalization.js.map +1 -0
  166. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.d.ts → internal/UseHierarchyFiltering.d.ts} +1 -1
  167. package/lib/esm/tree-widget-react/components/trees/common/{UseHierarchyFiltering.js → internal/UseHierarchyFiltering.js} +5 -4
  168. package/lib/esm/tree-widget-react/components/trees/common/internal/UseHierarchyFiltering.js.map +1 -0
  169. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.d.ts +17 -0
  170. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js +32 -0
  171. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelAccess.js.map +1 -0
  172. package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.d.ts → internal/UseIModelChangeListener.d.ts} +1 -0
  173. package/lib/esm/tree-widget-react/components/trees/common/{UseIModelChangeListener.js → internal/UseIModelChangeListener.js} +1 -0
  174. package/lib/esm/tree-widget-react/components/trees/common/internal/UseIModelChangeListener.js.map +1 -0
  175. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.d.ts +46 -0
  176. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js +101 -0
  177. package/lib/esm/tree-widget-react/components/trees/common/internal/Utils.js.map +1 -0
  178. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.d.ts +19 -0
  179. package/lib/esm/tree-widget-react/components/trees/{models-tree → common}/internal/VisibilityChangeEventListener.js +17 -9
  180. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityChangeEventListener.js.map +1 -0
  181. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.d.ts +63 -0
  182. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +205 -0
  183. package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -0
  184. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +8 -2
  185. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js +26 -16
  186. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  187. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +1 -5
  188. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +2 -1
  189. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  190. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +1 -0
  191. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +6 -0
  192. package/lib/esm/tree-widget-react/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -1
  193. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.d.ts +10 -2
  194. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js +46 -31
  195. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  196. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +1 -5
  197. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js +2 -1
  198. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  199. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +13 -1
  200. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +47 -76
  201. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -1
  202. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +5 -5
  203. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +29 -24
  204. package/lib/esm/tree-widget-react/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -1
  205. package/lib/esm/tree-widget-react/components/trees/index.d.ts +11 -4
  206. package/lib/esm/tree-widget-react/components/trees/index.js +10 -4
  207. package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
  208. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.d.ts +3 -2
  209. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js +3 -2
  210. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTree.js.map +1 -1
  211. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.d.ts +4 -4
  212. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js +38 -30
  213. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeButtons.js.map +1 -1
  214. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.d.ts +7 -7
  215. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js +16 -19
  216. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  217. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.d.ts +10 -3
  218. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js +91 -114
  219. package/lib/esm/tree-widget-react/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -1
  220. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.d.ts +9 -3
  221. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js +70 -239
  222. package/lib/esm/tree-widget-react/components/trees/models-tree/UseModelsTree.js.map +1 -1
  223. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.d.ts +7 -9
  224. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js +7 -9
  225. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/FilteredTree.js.map +1 -1
  226. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +10 -7
  227. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js +106 -104
  228. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -1
  229. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -1
  230. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +3 -29
  231. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +177 -333
  232. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -1
  233. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.d.ts +27 -0
  234. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js +170 -0
  235. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseFilteredPaths.js.map +1 -0
  236. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.d.ts +8 -0
  237. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js +47 -0
  238. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/UseIdsCache.js.map +1 -0
  239. package/lib/esm/tree-widget-react-internal.d.ts +11 -0
  240. package/lib/esm/tree-widget-react-internal.js +17 -0
  241. package/lib/esm/tree-widget-react-internal.js.map +1 -0
  242. package/lib/esm/tree-widget-react.d.ts +2 -2
  243. package/lib/esm/tree-widget-react.js +1 -2
  244. package/lib/esm/tree-widget-react.js.map +1 -1
  245. package/lib/public/locales/en/TreeWidget.json +36 -56
  246. package/package.json +75 -73
  247. package/lib/esm/tree-widget-react/components/SelectableTree.js.map +0 -1
  248. package/lib/esm/tree-widget-react/components/TreeSelector.d.ts +0 -30
  249. package/lib/esm/tree-widget-react/components/TreeSelector.js +0 -23
  250. package/lib/esm/tree-widget-react/components/TreeSelector.js.map +0 -1
  251. package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.d.ts +0 -32
  252. package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js +0 -25
  253. package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.js.map +0 -1
  254. package/lib/esm/tree-widget-react/components/tree-header/TreeHeader.scss +0 -56
  255. package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.d.ts +0 -13
  256. package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js +0 -13
  257. package/lib/esm/tree-widget-react/components/tree-header/TreeWithHeader.js.map +0 -1
  258. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +0 -28
  259. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js +0 -87
  260. package/lib/esm/tree-widget-react/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +0 -1
  261. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.d.ts +0 -7
  262. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js +0 -66
  263. package/lib/esm/tree-widget-react/components/trees/common/FocusedInstancesContextProvider.js.map +0 -1
  264. package/lib/esm/tree-widget-react/components/trees/common/Rxjs.js.map +0 -1
  265. package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js +0 -24
  266. package/lib/esm/tree-widget-react/components/trees/common/Tooltip.js.map +0 -1
  267. package/lib/esm/tree-widget-react/components/trees/common/UseActiveViewport.js.map +0 -1
  268. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.d.ts +0 -11
  269. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js +0 -24
  270. package/lib/esm/tree-widget-react/components/trees/common/UseFiltering.js.map +0 -1
  271. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchiesLocalization.js.map +0 -1
  272. package/lib/esm/tree-widget-react/components/trees/common/UseHierarchyFiltering.js.map +0 -1
  273. package/lib/esm/tree-widget-react/components/trees/common/UseIModelChangeListener.js.map +0 -1
  274. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.d.ts +0 -7
  275. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js +0 -21
  276. package/lib/esm/tree-widget-react/components/trees/models-tree/Utils.js.map +0 -1
  277. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +0 -29
  278. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +0 -1
  279. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +0 -12
  280. package/lib/esm/tree-widget-react/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +0 -1
  281. /package/lib/esm/tree-widget-react/components/{TreeWidgetUiItemsProvider.scss → TreeWidgetUiItemsProvider.css} +0 -0
  282. /package/lib/esm/tree-widget-react/components/trees/common/components/{ProgressOverlay.scss → ProgressOverlay.css} +0 -0
  283. /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.d.ts → internal/UseActiveViewport.d.ts} +0 -0
  284. /package/lib/esm/tree-widget-react/components/trees/common/{UseActiveViewport.js → internal/UseActiveViewport.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,9 +1,92 @@
1
1
  # Change Log - @itwin/tree-widget-react
2
2
 
3
- This log was last generated on Mon, 27 Jan 2025 18:30:40 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 15 May 2025 05:33:32 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 3.8.0
8
+
9
+ Thu, 15 May 2025 05:33:32 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - Fixed merged (categories and models) nodes visibility. Changed `@beta` APIs in a **breaking** way: `ModelsTreeVisibilityHandlerOverrides.getModelDisplayStatus` and `ModelsTreeVisibilityHandlerOverrides.getCategoryDisplayStatus` - `id` and `categoryId` props are now of `Id64Arg` type instead of `Id64String`. Use `Id64` from `@itwin/core-bentley` to access individual IDs. ([#1311](https://github.com/iTwin/viewer-components-react/pull/1311))
14
+
15
+ ### Patches
16
+
17
+ - update presentation deps to versions that properly support core @ 5.0-rc ([#1304](https://github.com/iTwin/viewer-components-react/pull/1304))
18
+
19
+ ## 3.7.0
20
+
21
+ Mon, 28 Apr 2025 16:18:43 GMT
22
+
23
+ ### Minor changes
24
+
25
+ - Added ability to disabled hierarchy level filtering in `ModelsTree`. ([#1297](https://github.com/iTwin/viewer-components-react/pull/1297))
26
+
27
+ ## 3.6.1
28
+
29
+ Fri, 18 Apr 2025 17:06:22 GMT
30
+
31
+ ### Patches
32
+
33
+ - Fixed Categories tree not reacting to Category display changes from Models tree, when they're made on per-model category overrides. ([#1284](https://github.com/iTwin/viewer-components-react/pull/1284))
34
+ - Fixed `ModelsTree` and `CategoriesTree` not applying custom hierarchy level size limit. ([#1292](https://github.com/iTwin/viewer-components-react/pull/1292))
35
+
36
+ ## 3.6.0
37
+
38
+ Fri, 21 Mar 2025 11:37:20 GMT
39
+
40
+ ### Minor changes
41
+
42
+ - Add ability to remove root Subject node from Models and iModel content trees by setting `hideRootSubject: true` in the `hierarchyConfig` prop. ([#1251](https://github.com/iTwin/viewer-components-react/pull/1251))
43
+
44
+ ### Patches
45
+
46
+ - Fixed Models tree showing that modeled elements have children, when their sub model is private or when sub model does not have any elements. Now it shows that modeled element has children only when it's sub model has children and is not private. ([#1253](https://github.com/iTwin/viewer-components-react/pull/1253))
47
+ - Fixed Categories tree showing definition containers that contain categories without elements. Now it displays definition containers only when they have categories that contain elements. ([#1248](https://github.com/iTwin/viewer-components-react/pull/1248))
48
+
49
+ ## 3.5.1
50
+
51
+ Thu, 06 Mar 2025 12:37:44 GMT
52
+
53
+ ### Patches
54
+
55
+ - Update import to use `@itwin/core-bentley` for types that are reexported by `@itwin/core-common` ([#1232](https://github.com/iTwin/viewer-components-react/pull/1232))
56
+
57
+ ## 3.5.0
58
+
59
+ Wed, 19 Feb 2025 21:08:10 GMT
60
+
61
+ ### Minor changes
62
+
63
+ - `CategoriesTree` component rendered `Categories` as a flat list, where each `Category` had zero or more child `SubCategories`. Some iTwin.js applications started to group `Categories` under `DefinitionContainers` and wanted to see them displayed in `CategoriesTree` component. Added `DefinitionContainers` to `CategoriesTree` component. This change doesn't affect applications that don't have `DefinitionContainers`. ([#1172](https://github.com/iTwin/viewer-components-react/pull/1172))
64
+
65
+ ## 3.4.2
66
+
67
+ Fri, 14 Feb 2025 15:54:49 GMT
68
+
69
+ ### Patches
70
+
71
+ - Adjusted modeled element / sub-model visibility controls. Now, if visibility of modeled element is changed, visibility of sub-model is adjusted accordingly and vice versa. ([#1183](https://github.com/iTwin/viewer-components-react/pull/1183))
72
+
73
+ ## 3.4.1
74
+
75
+ Thu, 06 Feb 2025 13:36:20 GMT
76
+
77
+ ### Patches
78
+
79
+ - Removed horizontal scroll from trees. ([#1180](https://github.com/iTwin/viewer-components-react/pull/1180))
80
+
81
+ ## 3.4.0
82
+
83
+ Tue, 04 Feb 2025 15:29:52 GMT
84
+
85
+ ### Minor changes
86
+
87
+ - Expose `FocusedInstancesContextProvider` and `useFocusedInstancesContext` to allow using `ModelsTreeComponent.ToggleInstancesFocusButton` from outside of `ModelsTreeComponent` and accesing the context from other React components. ([#1175](https://github.com/iTwin/viewer-components-react/pull/1175))
88
+ - Add `filterButtonsVisibility` prop to `TreeRenderer`. The prop allows to control visibility of hierarchy level filtering buttons in the tree: `show-on-hover` (default) shows them on hover or focus, `hide` only shows them when a node is filtered. ([#1178](https://github.com/iTwin/viewer-components-react/pull/1178))
89
+
7
90
  ## 3.3.0
8
91
 
9
92
  Mon, 27 Jan 2025 18:30:40 GMT
package/README.md CHANGED
@@ -69,8 +69,6 @@ UiItemsManager.register({
69
69
  getLabel: () => ModelsTreeComponent.getLabel(),
70
70
  render: (props) => (
71
71
  <ModelsTreeComponent
72
- // see "Creating schema context" section for example implementation
73
- getSchemaContext={getSchemaContext}
74
72
  // see "Creating unified selection storage" section for example implementation
75
73
  selectionStorage={unifiedSelectionStorage}
76
74
  />
@@ -106,8 +104,6 @@ import { ModelsTreeComponent } from "@itwin/tree-widget-react";
106
104
  function MyWidget() {
107
105
  return (
108
106
  <ModelsTreeComponent
109
- // see "Creating schema context" section for example implementation
110
- getSchemaContext={getSchemaContext}
111
107
  // see "Creating unified selection storage" section for example implementation
112
108
  selectionStorage={unifiedSelectionStorage}
113
109
  headerButtons={[
@@ -144,10 +140,10 @@ This package provides building blocks for custom models tree:
144
140
  Example:
145
141
 
146
142
  ```tsx
143
+ import { useCallback } from "react";
147
144
  import { TreeWithHeader, useModelsTree, useModelsTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react";
148
145
  import type { SelectionStorage } from "@itwin/unified-selection";
149
146
  import type { IModelConnection, Viewport } from "@itwin/core-frontend";
150
- import type { SchemaContext } from "@itwin/ecschema-metadata";
151
147
  import type { ComponentPropsWithoutRef } from "react";
152
148
 
153
149
  type VisibilityTreeRendererProps = ComponentPropsWithoutRef<typeof VisibilityTreeRenderer>;
@@ -161,17 +157,17 @@ function CustomModelsTreeRenderer(props: CustomModelsTreeRendererProps) {
161
157
  },
162
158
  [getLabel],
163
159
  );
164
- return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabel} />;
160
+ const getSublabelCallback = useCallback<Required<VisibilityTreeRendererProps>["getSublabel"]>((node) => <>Sublabel - {node.label}</>, []);
161
+ return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabelCallback} />;
165
162
  }
166
163
 
167
164
  interface CustomModelsTreeProps {
168
165
  imodel: IModelConnection;
169
166
  viewport: Viewport;
170
- getSchemaContext: (imodel: IModelConnection) => SchemaContext;
171
167
  selectionStorage: SelectionStorage;
172
168
  }
173
169
 
174
- function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomModelsTreeProps) {
170
+ function CustomModelsTreeComponent({ imodel, viewport, selectionStorage }: CustomModelsTreeProps) {
175
171
  const { buttonProps } = useModelsTreeButtonProps({ imodel, viewport });
176
172
  const { modelsTreeProps, rendererProps } = useModelsTree({ activeView: viewport });
177
173
 
@@ -184,7 +180,6 @@ function CustomModelsTreeComponent({ imodel, viewport, getSchemaContext, selecti
184
180
  >
185
181
  <VisibilityTree
186
182
  {...modelsTreeProps}
187
- getSchemaContext={getSchemaContext}
188
183
  selectionStorage={selectionStorage}
189
184
  imodel={imodel}
190
185
  treeRenderer={(props) => <CustomModelsTreeRenderer {...props} {...rendererProps} />}
@@ -224,7 +219,6 @@ function CustomModelsTreeComponent({ viewport, selectionStorage, imodel, targetI
224
219
  return (
225
220
  <VisibilityTree
226
221
  {...modelsTreeProps}
227
- getSchemaContext={getSchemaContext}
228
222
  selectionStorage={selectionStorage}
229
223
  imodel={imodel}
230
224
  treeRenderer={(props) => <VisibilityTreeRenderer {...props} {...rendererProps} />}
@@ -247,8 +241,6 @@ import { CategoriesTreeComponent } from "@itwin/tree-widget-react";
247
241
  function MyWidget() {
248
242
  return (
249
243
  <CategoriesTreeComponent
250
- // see "Creating schema context" section for example implementation
251
- getSchemaContext={getSchemaContext}
252
244
  // see "Creating unified selection storage" section for example implementation
253
245
  selectionStorage={unifiedSelectionStorage}
254
246
  headerButtons={[(props) => <CategoriesTreeComponent.ShowAllButton {...props} />, (props) => <CategoriesTreeComponent.HideAllButton {...props} />]}
@@ -276,7 +268,6 @@ Example:
276
268
  import { TreeWithHeader, useCategoriesTree, useCategoriesTreeButtonProps, VisibilityTree, VisibilityTreeRenderer } from "@itwin/tree-widget-react";
277
269
  import type { IModelConnection, Viewport } from "@itwin/core-frontend";
278
270
  import type { SelectionStorage } from "@itwin/unified-selection";
279
- import type { SchemaContext } from "@itwin/ecschema-metadata";
280
271
  import type { ComponentPropsWithoutRef } from "react";
281
272
 
282
273
  type VisibilityTreeRendererProps = ComponentPropsWithoutRef<typeof VisibilityTreeRenderer>;
@@ -291,25 +282,21 @@ function CustomCategoriesTreeRenderer(props: CustomCategoriesTreeRendererProps)
291
282
  },
292
283
  [getLabel],
293
284
  );
294
-
295
285
  const getSublabel = useCallback<Required<VisibilityTreeRendererProps>["getSublabel"]>(() => {
296
286
  return <>Custom sub label</>;
297
287
  }, []);
298
-
299
288
  return <VisibilityTreeRenderer {...props} getLabel={getLabelCallback} getSublabel={getSublabel} />;
300
289
  }
301
290
 
302
291
  interface CustomCategoriesTreeProps {
303
292
  imodel: IModelConnection;
304
293
  viewport: Viewport;
305
- getSchemaContext: (imodel: IModelConnection) => SchemaContext;
306
294
  selectionStorage: SelectionStorage;
307
295
  }
308
296
 
309
- function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, selectionStorage }: CustomCategoriesTreeProps) {
297
+ function CustomCategoriesTreeComponent({ imodel, viewport, selectionStorage }: CustomCategoriesTreeProps) {
310
298
  const { buttonProps } = useCategoriesTreeButtonProps({ viewport });
311
299
  const { categoriesTreeProps, rendererProps } = useCategoriesTree({ activeView: viewport, filter: "" });
312
-
313
300
  return (
314
301
  <TreeWithHeader
315
302
  buttons={[
@@ -319,7 +306,6 @@ function CustomCategoriesTreeComponent({ imodel, viewport, getSchemaContext, sel
319
306
  >
320
307
  <VisibilityTree
321
308
  {...categoriesTreeProps}
322
- getSchemaContext={getSchemaContext}
323
309
  selectionStorage={selectionStorage}
324
310
  imodel={imodel}
325
311
  treeRenderer={(props) => <CustomCategoriesTreeRenderer {...props} {...rendererProps} />}
@@ -350,8 +336,6 @@ import { IModelContentTreeComponent } from "@itwin/tree-widget-react";
350
336
  function MyWidget() {
351
337
  return (
352
338
  <IModelContentTreeComponent
353
- // see "Creating schema context" section for example implementation
354
- getSchemaContext={getSchemaContext}
355
339
  // see "Creating unified selection storage" section for example implementation
356
340
  selectionStorage={unifiedSelectionStorage}
357
341
  />
@@ -422,7 +406,6 @@ function MyTree({ imodel }: MyTreeProps) {
422
406
  treeName="MyTree"
423
407
  imodel={imodel}
424
408
  selectionStorage={unifiedSelectionStorage}
425
- getSchemaContext={getSchemaContext}
426
409
  getHierarchyDefinition={getHierarchyDefinition}
427
410
  treeRenderer={(props) => <TreeRenderer {...props} />}
428
411
  />
@@ -507,7 +490,6 @@ function MyVisibilityTree({ imodel }: MyVisibilityTreeProps) {
507
490
  treeName="MyVisibilityTree"
508
491
  imodel={imodel}
509
492
  selectionStorage={unifiedSelectionStorage}
510
- getSchemaContext={getSchemaContext}
511
493
  getHierarchyDefinition={getHierarchyDefinition}
512
494
  visibilityHandlerFactory={visibilityHandlerFactory}
513
495
  treeRenderer={(props) => <VisibilityTreeRenderer {...props} />}
@@ -561,34 +543,6 @@ import { Presentation } from "@itwin/presentation-frontend";
561
543
  await Presentation.initialize({ selection: { selectionStorage: getUnifiedSelectionStorage() } });
562
544
  ```
563
545
 
564
- ### Creating schema context
565
-
566
- All tree components delivered with the package require a [`SchemaContext`](https://www.itwinjs.org/reference/ecschema-metadata/context/schemacontext/) to be able to access iModels metadata.
567
-
568
- Typically, we want one schema context per iModel per application - this allows schema information to be shared across components, saving memory and time required to access the metadata. Below is an example implementation of `getSchemaContext` function, required by tree components:
569
-
570
- ```tsx
571
- import { SchemaContext } from "@itwin/ecschema-metadata";
572
- import { ECSchemaRpcLocater } from "@itwin/ecschema-rpcinterface-common";
573
- import type { IModelConnection } from "@itwin/core-frontend";
574
-
575
- const schemaContextCache = new Map<string, SchemaContext>();
576
- function getSchemaContext(imodel: IModelConnection) {
577
- const key = imodel.getRpcProps().key;
578
- let schemaContext = schemaContextCache.get(key);
579
- if (!schemaContext) {
580
- const schemaLocater = new ECSchemaRpcLocater(imodel.getRpcProps());
581
- schemaContext = new SchemaContext();
582
- schemaContext.addLocater(schemaLocater);
583
- schemaContextCache.set(key, schemaContext);
584
- imodel.onClose.addOnce(() => schemaContextCache.delete(key));
585
- }
586
- return schemaContext;
587
- }
588
- ```
589
-
590
- Note: Using `ECSchemaRpcLocater` requires the application to support [ECSchemaRpcInterface](https://github.com/iTwin/itwinjs-core/blob/111ab9053f4718896de17bdaeb8de037bad281bd/core/ecschema-rpc/common/src/ECSchemaRpcInterface.ts#L14). This means [registering the interface](https://www.itwinjs.org/learning/rpcinterface/#configure-interfaces) and, on the backend, [registering the implementation](https://www.itwinjs.org/learning/rpcinterface/#server-side-configuration) by calling [ECSchemaRpcImpl.register()](https://github.com/iTwin/itwinjs-core/blob/111ab9053f4718896de17bdaeb8de037bad281bd/core/ecschema-rpc/impl/src/ECSchemaRpcImpl.ts#L29).
591
-
592
546
  ## Telemetry
593
547
 
594
548
  ### Performance tracking
@@ -646,7 +600,6 @@ function MyWidget() {
646
600
  onFeatureUsed={(feature) => {
647
601
  console.log(`TreeWidget [${feature}] used`);
648
602
  }}
649
- getSchemaContext={getSchemaContext}
650
603
  selectionStorage={unifiedSelectionStorage}
651
604
  />
652
605
  );
@@ -680,7 +633,6 @@ function MyTree() {
680
633
  // VisibilityTree will use provided telemetry context to report used features and their performance
681
634
  <VisibilityTree
682
635
  {...categoriesTreeProps}
683
- getSchemaContext={getSchemaContext}
684
636
  selectionStorage={unifiedSelectionStorage}
685
637
  imodel={imodel}
686
638
  treeRenderer={(props) => <VisibilityTreeRenderer {...props} {...rendererProps} />}
@@ -1,24 +1,29 @@
1
1
  import type { Localization, TranslationOptions } from "@itwin/core-common";
2
+ import type { ILogger } from "@itwin/presentation-shared";
2
3
  /**
3
4
  * Entry point for static initialization required by various components used in the package.
4
5
  * @public
5
6
  */
6
7
  export declare class TreeWidget {
7
8
  private static _i18n?;
9
+ private static _logger?;
8
10
  private static _initialized?;
9
11
  /**
10
12
  * Called by IModelApp to initialize the Tree Widget
11
13
  * @param i18n - The internationalization service created by the IModelApp.
14
+ * @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.
12
15
  */
13
- static initialize(i18n?: Localization): Promise<void>;
16
+ static initialize(i18n?: Localization, logger?: ILogger): Promise<void>;
14
17
  /** Unregisters the TreeWidget internationalization service namespace */
15
18
  static terminate(): void;
19
+ /** The logger used by this components in this package. */
20
+ static get logger(): ILogger;
16
21
  /** The internationalization service created by the IModelApp. */
17
22
  static get i18n(): Localization;
18
23
  /** The internationalization service namespace. */
19
24
  static get i18nNamespace(): string;
20
25
  /** Calls i18n.translateWithNamespace with the "TreeWidget" namespace. Do NOT include the namespace in the key.
21
26
  */
22
- static translate(key: string | string[], options?: TranslationOptions): string;
27
+ static translate(key: string, options?: TranslationOptions): string;
23
28
  }
24
29
  //# sourceMappingURL=TreeWidget.d.ts.map
@@ -2,22 +2,32 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { BentleyError, BentleyStatus } from "@itwin/core-common";
5
+ import { BentleyError, BentleyStatus, Logger } from "@itwin/core-bentley";
6
6
  import { IModelApp } from "@itwin/core-frontend";
7
+ import { createLogger } from "@itwin/presentation-core-interop";
8
+ import { setLogger as setHierarchiesLogger } from "@itwin/presentation-hierarchies";
9
+ import { setLogger as setHierarchiesReactLogger } from "@itwin/presentation-hierarchies-react";
7
10
  /**
8
11
  * Entry point for static initialization required by various components used in the package.
9
12
  * @public
10
13
  */
11
14
  export class TreeWidget {
15
+ static _i18n;
16
+ static _logger;
17
+ static _initialized;
12
18
  /**
13
19
  * Called by IModelApp to initialize the Tree Widget
14
20
  * @param i18n - The internationalization service created by the IModelApp.
21
+ * @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.
15
22
  */
16
- static async initialize(i18n) {
23
+ static async initialize(i18n, logger) {
17
24
  if (this._initialized) {
18
25
  return;
19
26
  }
20
27
  TreeWidget._initialized = true;
28
+ TreeWidget._logger = logger ?? createLogger(Logger);
29
+ setHierarchiesLogger(TreeWidget._logger);
30
+ setHierarchiesReactLogger(TreeWidget._logger);
21
31
  TreeWidget._i18n = i18n ?? IModelApp.localization;
22
32
  return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);
23
33
  }
@@ -27,8 +37,18 @@ export class TreeWidget {
27
37
  TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);
28
38
  TreeWidget._i18n = undefined;
29
39
  }
40
+ TreeWidget._logger = undefined;
41
+ setHierarchiesLogger(undefined);
42
+ setHierarchiesReactLogger(undefined);
30
43
  TreeWidget._initialized = false;
31
44
  }
45
+ /** The logger used by this components in this package. */
46
+ static get logger() {
47
+ if (!TreeWidget._logger) {
48
+ throw new BentleyError(BentleyStatus.ERROR, "TreeWidget not initialized");
49
+ }
50
+ return TreeWidget._logger;
51
+ }
32
52
  /** The internationalization service created by the IModelApp. */
33
53
  static get i18n() {
34
54
  if (!TreeWidget._i18n) {
@@ -1 +1 @@
1
- {"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../../src/tree-widget-react/TreeWidget.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD;;;GAGG;AACH,MAAM,OAAO,UAAU;IAIrB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAmB;QAChD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO;SACR;QAED,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,KAAK,GAAG,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC;QAClD,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,SAAS;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE;YACpB,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;SAC9B;QAED,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,iEAAiE;IAC1D,MAAM,KAAK,IAAI;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;SAC3E;QACD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,aAAa;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;OACG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB,EAAE,OAA4B;QAC1E,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF","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 { BentleyError, BentleyStatus } from \"@itwin/core-common\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\nimport type { Localization, TranslationOptions } from \"@itwin/core-common\";\n\n/**\n * Entry point for static initialization required by various components used in the package.\n * @public\n */\nexport class TreeWidget {\n private static _i18n?: Localization;\n private static _initialized?: boolean;\n\n /**\n * Called by IModelApp to initialize the Tree Widget\n * @param i18n - The internationalization service created by the IModelApp.\n */\n public static async initialize(i18n?: Localization): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n TreeWidget._initialized = true;\n TreeWidget._i18n = i18n ?? IModelApp.localization;\n return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);\n }\n\n /** Unregisters the TreeWidget internationalization service namespace */\n public static terminate() {\n if (TreeWidget._i18n) {\n TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);\n TreeWidget._i18n = undefined;\n }\n\n TreeWidget._initialized = false;\n }\n\n /** The internationalization service created by the IModelApp. */\n public static get i18n(): Localization {\n if (!TreeWidget._i18n) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._i18n;\n }\n\n /** The internationalization service namespace. */\n public static get i18nNamespace(): string {\n return \"TreeWidget\";\n }\n\n /** Calls i18n.translateWithNamespace with the \"TreeWidget\" namespace. Do NOT include the namespace in the key.\n */\n public static translate(key: string | string[], options?: TranslationOptions): string {\n const stringKey = `${TreeWidget.i18nNamespace}:${key}`;\n return TreeWidget.i18n.getLocalizedString(stringKey, options);\n }\n}\n"]}
1
+ {"version":3,"file":"TreeWidget.js","sourceRoot":"","sources":["../../../src/tree-widget-react/TreeWidget.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,SAAS,IAAI,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAK/F;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,MAAM,CAAC,KAAK,CAAgB;IAC5B,MAAM,CAAC,OAAO,CAAW;IACzB,MAAM,CAAC,YAAY,CAAW;IAEtC;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAmB,EAAE,MAAgB;QAClE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;QAE/B,UAAU,CAAC,OAAO,GAAG,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACpD,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE9C,UAAU,CAAC,KAAK,GAAG,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC;QAClD,OAAO,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,SAAS;QACrB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAErC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;IAClC,CAAC;IAED,0DAA0D;IACnD,MAAM,KAAK,MAAM;QACtB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,iEAAiE;IAC1D,MAAM,KAAK,IAAI;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,aAAa;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;OACG;IACI,MAAM,CAAC,SAAS,CAAC,GAAW,EAAE,OAA4B;QAC/D,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF","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 { BentleyError, BentleyStatus, Logger } from \"@itwin/core-bentley\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { createLogger } from \"@itwin/presentation-core-interop\";\nimport { setLogger as setHierarchiesLogger } from \"@itwin/presentation-hierarchies\";\nimport { setLogger as setHierarchiesReactLogger } from \"@itwin/presentation-hierarchies-react\";\n\nimport type { Localization, TranslationOptions } from \"@itwin/core-common\";\nimport type { ILogger } from \"@itwin/presentation-shared\";\n\n/**\n * Entry point for static initialization required by various components used in the package.\n * @public\n */\nexport class TreeWidget {\n private static _i18n?: Localization;\n private static _logger?: ILogger;\n private static _initialized?: boolean;\n\n /**\n * Called by IModelApp to initialize the Tree Widget\n * @param i18n - The internationalization service created by the IModelApp.\n * @param logger - The logger to use for logging messages. Defaults to `Logger` from `@itwin/core-bentley`.\n */\n public static async initialize(i18n?: Localization, logger?: ILogger): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n TreeWidget._initialized = true;\n\n TreeWidget._logger = logger ?? createLogger(Logger);\n setHierarchiesLogger(TreeWidget._logger);\n setHierarchiesReactLogger(TreeWidget._logger);\n\n TreeWidget._i18n = i18n ?? IModelApp.localization;\n return TreeWidget._i18n.registerNamespace(TreeWidget.i18nNamespace);\n }\n\n /** Unregisters the TreeWidget internationalization service namespace */\n public static terminate() {\n if (TreeWidget._i18n) {\n TreeWidget._i18n.unregisterNamespace(TreeWidget.i18nNamespace);\n TreeWidget._i18n = undefined;\n }\n\n TreeWidget._logger = undefined;\n setHierarchiesLogger(undefined);\n setHierarchiesReactLogger(undefined);\n\n TreeWidget._initialized = false;\n }\n\n /** The logger used by this components in this package. */\n public static get logger(): ILogger {\n if (!TreeWidget._logger) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._logger;\n }\n\n /** The internationalization service created by the IModelApp. */\n public static get i18n(): Localization {\n if (!TreeWidget._i18n) {\n throw new BentleyError(BentleyStatus.ERROR, \"TreeWidget not initialized\");\n }\n return TreeWidget._i18n;\n }\n\n /** The internationalization service namespace. */\n public static get i18nNamespace(): string {\n return \"TreeWidget\";\n }\n\n /** Calls i18n.translateWithNamespace with the \"TreeWidget\" namespace. Do NOT include the namespace in the key.\n */\n public static translate(key: string, options?: TranslationOptions): string {\n const stringKey = `${TreeWidget.i18nNamespace}:${key}`;\n return TreeWidget.i18n.getLocalizedString(stringKey, options);\n }\n}\n"]}
@@ -4,7 +4,6 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
 
6
6
  .tree-widget-selectable-tree {
7
- padding: var(--iui-size-xs);
8
7
  width: 100%;
9
8
  height: 100%;
10
9
  box-sizing: border-box;
@@ -1,12 +1,11 @@
1
- /// <reference types="react" />
2
- import "./SelectableTree.scss";
1
+ import "./TreeWidgetComponentImpl.css";
3
2
  import type { IModelConnection } from "@itwin/core-frontend";
4
3
  /**
5
4
  * Props for rendering trees
6
5
  * @public
7
6
  */
8
- export interface SelectableTreeRenderProps {
9
- density?: "enlarged" | "default";
7
+ export interface TreeRenderProps {
8
+ filter?: string;
10
9
  onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;
11
10
  onFeatureUsed?: (feature: string) => void;
12
11
  }
@@ -14,34 +13,39 @@ export interface SelectableTreeRenderProps {
14
13
  * Definition of a tree component displayed in `SelectableTree`.
15
14
  * @public
16
15
  */
17
- export interface SelectableTreeDefinition {
16
+ export interface TreeDefinition {
18
17
  /** Id of the tree */
19
18
  id: string;
20
19
  /** Callback that is used to get tree label */
21
20
  getLabel: () => string;
22
21
  /** Callback that is used to render tree component */
23
- render: (props: SelectableTreeRenderProps) => React.ReactNode;
22
+ render: (props: TreeRenderProps) => React.ReactNode;
24
23
  /**
25
24
  * Callback that is used to determine if tree should be shown for current active iModel connection.
26
25
  * If callback is `undefined` tree is shown for all iModel connections.
27
26
  */
28
27
  shouldShow?: (imodel: IModelConnection) => Promise<boolean>;
28
+ /**
29
+ * Flag to determine if search box should be rendered.
30
+ * - false or undefined, the search box will not be rendered.
31
+ * - true, the search box will be rendered.
32
+ */
33
+ isSearchable?: boolean;
29
34
  /** Icon to render before tree label in tree selector */
30
35
  startIcon?: React.ReactNode;
31
36
  }
32
37
  /**
33
- * Props for `SelectableTree`
34
- * @public
38
+ * Props for `TreeWidgetComponent`
39
+ * @internal
35
40
  */
36
- export interface SelectableTreeProps {
37
- trees: SelectableTreeDefinition[];
38
- density?: "enlarged" | "default";
41
+ export interface TreeWidgetComponentImplProps {
42
+ trees: TreeDefinition[];
39
43
  onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;
40
44
  onFeatureUsed?: (feature: string) => void;
41
45
  }
42
46
  /**
43
47
  * A component that renders a tree (combo box) selector and the selected tree component.
44
- * @public
48
+ * @internal
45
49
  */
46
- export declare function SelectableTree(props: SelectableTreeProps): import("react/jsx-runtime").JSX.Element | null;
47
- //# sourceMappingURL=SelectableTree.d.ts.map
50
+ export declare function TreeWidgetComponentImpl(props: TreeWidgetComponentImplProps): import("react/jsx-runtime").JSX.Element | null;
51
+ //# sourceMappingURL=TreeWidgetComponentImpl.d.ts.map
@@ -1,29 +1,38 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /*---------------------------------------------------------------------------------------------
3
3
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
- import "./SelectableTree.scss";
7
- import { useEffect, useState } from "react";
6
+ import "./TreeWidgetComponentImpl.css";
7
+ import { useCallback, useEffect, useMemo, useState } from "react";
8
8
  import { useActiveIModelConnection } from "@itwin/appui-react";
9
- import { Spinner } from "@itwin/itwinui-react/bricks";
9
+ import { Skeleton } from "@stratakit/bricks";
10
10
  import { TreeWidget } from "../TreeWidget.js";
11
- import { TreeSelector } from "./TreeSelector.js";
11
+ import { SelectableTree } from "./tree-header/SelectableTree.js";
12
+ import { WidgetHeader } from "./tree-header/WidgetHeader.js";
13
+ import { SkeletonTree } from "./trees/common/components/SkeletonTree.js";
12
14
  /**
13
15
  * A component that renders a tree (combo box) selector and the selected tree component.
14
- * @public
16
+ * @internal
15
17
  */
16
- export function SelectableTree(props) {
18
+ export function TreeWidgetComponentImpl(props) {
17
19
  const imodel = useActiveIModelConnection();
18
20
  if (!imodel) {
19
21
  return null;
20
22
  }
21
23
  return _jsx(SelectableTreeContent, { ...props, imodel: imodel });
22
24
  }
23
- function SelectableTreeContent(props) {
24
- const { trees: treeDefinitions, imodel } = props;
25
- const trees = useActiveTrees(treeDefinitions, imodel);
26
- return (_jsx("div", { className: "tree-widget-selectable-tree", children: _jsx(TreeSelector, { ...getTreeSelectorProps(trees), onPerformanceMeasured: props.onPerformanceMeasured, onFeatureUsed: props.onFeatureUsed }) }));
25
+ function SelectableTreeContent({ onPerformanceMeasured, onFeatureUsed, trees: treeDefinitions, imodel, }) {
26
+ const activeTrees = useActiveTrees(treeDefinitions, imodel);
27
+ const { trees, defaultSelectedContentId } = useMemo(() => getWidgetWithHeaderProps(activeTrees), [activeTrees]);
28
+ const [searchValue, setSearchValue] = useState(undefined);
29
+ const [selectedContentId, setSelectedContentId] = useState(defaultSelectedContentId);
30
+ const selectedContent = useMemo(() => trees.find((c) => c.id === selectedContentId) ?? trees[0], [selectedContentId, trees]);
31
+ const onSelect = useCallback((treeId) => {
32
+ onFeatureUsed?.(`choose-${treeId}`);
33
+ setSelectedContentId(treeId);
34
+ }, [onFeatureUsed]);
35
+ return (_jsx("div", { className: "tree-widget-selectable-tree", children: _jsxs("div", { className: "tw-content", children: [_jsx(WidgetHeader, { trees: trees, defaultSelectedContentId: defaultSelectedContentId, onSearch: setSearchValue, onSelect: onSelect, isLoading: selectedContent.id === "loading" }), _jsx("div", { className: "tw-content-wrapper", children: selectedContent?.render({ onPerformanceMeasured, onFeatureUsed, filter: searchValue }) })] }) }));
27
36
  }
28
37
  function useActiveTrees(treeDefinitions, imodel) {
29
38
  const [trees, setTrees] = useState();
@@ -48,6 +57,7 @@ async function getActiveTrees(treeDefinitions, imodel) {
48
57
  }
49
58
  return {
50
59
  id: treeDef.id,
60
+ isSearchable: treeDef.isSearchable,
51
61
  label: treeDef.getLabel(),
52
62
  render: treeDef.render,
53
63
  startIcon: treeDef.startIcon,
@@ -55,7 +65,7 @@ async function getActiveTrees(treeDefinitions, imodel) {
55
65
  };
56
66
  return (await Promise.all(treeDefinitions.map(handleDefinition))).filter((tree) => tree !== undefined);
57
67
  }
58
- function getTreeSelectorProps(trees) {
68
+ function getWidgetWithHeaderProps(trees) {
59
69
  if (trees === undefined) {
60
70
  return {
61
71
  defaultSelectedContentId: "loading",
@@ -63,7 +73,8 @@ function getTreeSelectorProps(trees) {
63
73
  {
64
74
  id: "loading",
65
75
  label: "",
66
- render: () => (_jsx(Delayed, { children: _jsx(Spinner, {}) })),
76
+ isSearchable: false,
77
+ render: () => _jsx(LoadingTree, {}),
67
78
  },
68
79
  ],
69
80
  };
@@ -74,6 +85,7 @@ function getTreeSelectorProps(trees) {
74
85
  trees: [
75
86
  {
76
87
  id: "no-trees",
88
+ isSearchable: false,
77
89
  label: "",
78
90
  render: () => (_jsx("div", { style: { display: "flex", justifyContent: "center", alignItems: "center" }, className: "tree-widget-no-trees-container", children: TreeWidget.translate("selectableTree.noTrees") })),
79
91
  },
@@ -85,19 +97,7 @@ function getTreeSelectorProps(trees) {
85
97
  trees,
86
98
  };
87
99
  }
88
- function Delayed({ delay = 200, children }) {
89
- const [show, setShow] = useState(false);
90
- useEffect(() => {
91
- const id = setTimeout(() => {
92
- setShow(true);
93
- }, delay);
94
- return () => {
95
- clearTimeout(id);
96
- };
97
- }, [delay]);
98
- if (!show) {
99
- return null;
100
- }
101
- return _jsx(_Fragment, { children: children });
100
+ function LoadingTree() {
101
+ return (_jsx(SelectableTree, { buttons: _jsxs(_Fragment, { children: [_jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" }), _jsx(Skeleton, { variant: "object", size: "medium" })] }), children: _jsx(SkeletonTree, {}) }));
102
102
  }
103
- //# sourceMappingURL=SelectableTree.js.map
103
+ //# sourceMappingURL=TreeWidgetComponentImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeWidgetComponentImpl.js","sourceRoot":"","sources":["../../../../src/tree-widget-react/components/TreeWidgetComponentImpl.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 \"./TreeWidgetComponentImpl.css\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport { Skeleton } from \"@stratakit/bricks\";\nimport { TreeWidget } from \"../TreeWidget.js\";\nimport { SelectableTree } from \"./tree-header/SelectableTree.js\";\nimport { WidgetHeader } from \"./tree-header/WidgetHeader.js\";\nimport { SkeletonTree } from \"./trees/common/components/SkeletonTree.js\";\n\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { TreeContentDefinition, TreeSelectionProps } from \"./tree-header/WidgetHeader.js\";\n/**\n * Props for rendering trees\n * @public\n */\nexport interface TreeRenderProps {\n filter?: string;\n onPerformanceMeasured?: (featureId: string, elapsedTime: number) => void;\n onFeatureUsed?: (feature: string) => void;\n}\n\n// TODO: fix interface so startIcon type is taken from this interface for `TreeSelector`\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 /**\n * Flag to determine if search box should be rendered.\n * - false or undefined, the search box will not be rendered.\n * - true, the search box will be rendered.\n */\n isSearchable?: boolean;\n /** Icon to render before tree label in tree selector */\n startIcon?: React.ReactNode;\n}\n\n/**\n * Props for `TreeWidgetComponent`\n * @internal\n */\nexport interface TreeWidgetComponentImplProps {\n trees: TreeDefinition[];\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 * @internal\n */\nexport function TreeWidgetComponentImpl(props: TreeWidgetComponentImplProps) {\n const imodel = useActiveIModelConnection();\n if (!imodel) {\n return null;\n }\n return <SelectableTreeContent {...props} imodel={imodel} />;\n}\n\nfunction SelectableTreeContent({\n onPerformanceMeasured,\n onFeatureUsed,\n trees: treeDefinitions,\n imodel,\n}: TreeWidgetComponentImplProps & { imodel: IModelConnection }) {\n const activeTrees = useActiveTrees(treeDefinitions, imodel);\n const { trees, defaultSelectedContentId } = useMemo(() => getWidgetWithHeaderProps(activeTrees), [activeTrees]);\n const [searchValue, setSearchValue] = useState<string | undefined>(undefined);\n const [selectedContentId, setSelectedContentId] = useState<string | undefined>(defaultSelectedContentId);\n const selectedContent = useMemo(() => trees.find((c) => c.id === selectedContentId) ?? trees[0], [selectedContentId, trees]);\n\n const onSelect = useCallback(\n (treeId: string) => {\n onFeatureUsed?.(`choose-${treeId}`);\n setSelectedContentId(treeId);\n },\n [onFeatureUsed],\n );\n\n return (\n <div className=\"tree-widget-selectable-tree\">\n <div className=\"tw-content\">\n <WidgetHeader\n trees={trees}\n defaultSelectedContentId={defaultSelectedContentId}\n onSearch={setSearchValue}\n onSelect={onSelect}\n isLoading={selectedContent.id === \"loading\"}\n />\n <div className=\"tw-content-wrapper\">{selectedContent?.render({ onPerformanceMeasured, onFeatureUsed, filter: searchValue })}</div>\n </div>\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 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 isSearchable: treeDef.isSearchable,\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 getWidgetWithHeaderProps(trees?: TreeContentDefinition[]): TreeSelectionProps {\n if (trees === undefined) {\n return {\n defaultSelectedContentId: \"loading\",\n trees: [\n {\n id: \"loading\",\n label: \"\",\n isSearchable: false,\n render: () => <LoadingTree />,\n },\n ],\n };\n }\n\n if (trees.length === 0) {\n return {\n defaultSelectedContentId: \"no-trees\",\n trees: [\n {\n id: \"no-trees\",\n isSearchable: false,\n label: \"\",\n render: () => (\n <div style={{ display: \"flex\", justifyContent: \"center\", alignItems: \"center\" }} className=\"tree-widget-no-trees-container\">\n {TreeWidget.translate(\"selectableTree.noTrees\")}\n </div>\n ),\n },\n ],\n };\n }\n\n return {\n defaultSelectedContentId: trees[0].id,\n trees,\n };\n}\n\nfunction LoadingTree() {\n return (\n <SelectableTree\n buttons={\n <>\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n <Skeleton variant={\"object\"} size={\"medium\"} />\n </>\n }\n >\n <SkeletonTree />\n </SelectableTree>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
- import "./TreeWidgetUiItemsProvider.scss";
1
+ import "./TreeWidgetUiItemsProvider.css";
2
2
  import type { Widget } from "@itwin/appui-react";
3
- import type { SelectableTreeDefinition, SelectableTreeProps } from "./SelectableTree.js";
3
+ import type { TreeDefinition } from "./TreeWidgetComponentImpl.js";
4
4
  /**
5
5
  * Props for `createWidget`.
6
6
  * @public
@@ -13,9 +13,7 @@ interface TreeWidgetProps {
13
13
  * @see ExternalSourcesTreeComponent
14
14
  * @see IModelContentTreeComponent
15
15
  */
16
- trees: SelectableTreeDefinition[];
17
- /** Modifies the density of the tree widget. `enlarged` widget contains larger content */
18
- density?: "enlarged" | "default";
16
+ trees: TreeDefinition[];
19
17
  /** Callback that is invoked when performance of tracked feature is measured. */
20
18
  onPerformanceMeasured?: (feature: string, elapsedTime: number) => void;
21
19
  /** Callback that is invoked when a tracked feature is used. */
@@ -30,6 +28,6 @@ export declare function createTreeWidget(props: TreeWidgetProps): Widget;
30
28
  * Tree widget component which allows selecting which tree to render.
31
29
  * @public
32
30
  */
33
- export declare function TreeWidgetComponent(props: SelectableTreeProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function TreeWidgetComponent(props: TreeWidgetProps): import("react/jsx-runtime").JSX.Element;
34
32
  export {};
35
33
  //# sourceMappingURL=TreeWidgetUiItemsProvider.d.ts.map