@itwin/tree-widget-react 1.2.1 → 2.0.0-dev.0

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 (173) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +1 -1
  3. package/lib/cjs/TreeWidget.d.ts +0 -1
  4. package/lib/cjs/TreeWidget.js +9 -10
  5. package/lib/cjs/TreeWidget.js.map +1 -1
  6. package/lib/cjs/components/SelectableTree.js +24 -13
  7. package/lib/cjs/components/SelectableTree.js.map +1 -1
  8. package/lib/cjs/components/TreeFilteringState.js +3 -3
  9. package/lib/cjs/components/TreeFilteringState.js.map +1 -1
  10. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +7 -5
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.scss +1 -1
  13. package/lib/cjs/components/tree-header/TreeHeader.js +15 -12
  14. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  15. package/lib/cjs/components/tree-header/TreeHeader.scss +1 -1
  16. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +13 -8
  17. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  18. package/lib/cjs/components/trees/VisibilityTreeBase.scss +1 -1
  19. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  20. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +25 -28
  21. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  22. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  23. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +28 -10
  24. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
  25. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  26. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +47 -30
  27. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
  28. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  29. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  30. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  31. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  32. package/lib/cjs/components/trees/common/ContextMenu.js +4 -4
  33. package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -1
  34. package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  35. package/lib/cjs/components/trees/common/TreeNodeRenderer.js +4 -4
  36. package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -1
  37. package/lib/cjs/components/trees/common/TreeRenderer.d.ts +15 -1
  38. package/lib/cjs/components/trees/common/TreeRenderer.js +17 -7
  39. package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
  40. package/lib/cjs/components/trees/common/TreeRenderer.scss +7 -2
  41. package/lib/cjs/components/trees/common/Types.d.ts +8 -0
  42. package/lib/cjs/components/trees/common/Types.js +3 -3
  43. package/lib/cjs/components/trees/common/Types.js.map +1 -1
  44. package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  45. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +47 -0
  46. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  47. package/lib/cjs/components/trees/common/Utils.js +7 -5
  48. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  49. package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +1 -3
  50. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  51. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +19 -7
  52. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  53. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  54. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  55. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  56. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +16 -12
  57. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  58. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  59. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  60. package/lib/cjs/components/trees/index.js +3 -3
  61. package/lib/cjs/components/trees/index.js.map +1 -1
  62. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +7 -2
  63. package/lib/cjs/components/trees/models-tree/ModelsTree.js +76 -62
  64. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  65. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +11 -18
  66. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  67. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  68. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +31 -0
  69. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  70. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  71. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  72. package/lib/cjs/components/trees/models-tree/Utils.d.ts +4 -0
  73. package/lib/cjs/components/trees/models-tree/Utils.js +52 -58
  74. package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
  75. package/lib/cjs/components/utils/AutoSizer.js +7 -5
  76. package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
  77. package/lib/cjs/components/utils/IsPromiseLike.js +4 -4
  78. package/lib/cjs/components/utils/IsPromiseLike.js.map +1 -1
  79. package/lib/cjs/components/utils/UseTreeTransientState.js +3 -3
  80. package/lib/cjs/components/utils/UseTreeTransientState.js.map +1 -1
  81. package/lib/cjs/e2e-tests/TreeWidget.test.js +55 -1
  82. package/lib/cjs/e2e-tests/TreeWidget.test.js.map +1 -1
  83. package/lib/cjs/e2e-tests/utils.d.ts +1 -0
  84. package/lib/cjs/e2e-tests/utils.js +4 -5
  85. package/lib/cjs/e2e-tests/utils.js.map +1 -1
  86. package/lib/cjs/tree-widget-react.js +3 -3
  87. package/lib/cjs/tree-widget-react.js.map +1 -1
  88. package/lib/esm/TreeWidget.d.ts +0 -1
  89. package/lib/esm/TreeWidget.js +9 -10
  90. package/lib/esm/TreeWidget.js.map +1 -1
  91. package/lib/esm/components/SelectableTree.js +24 -13
  92. package/lib/esm/components/SelectableTree.js.map +1 -1
  93. package/lib/esm/components/TreeFilteringState.js +3 -3
  94. package/lib/esm/components/TreeFilteringState.js.map +1 -1
  95. package/lib/esm/components/TreeWidgetUiItemsProvider.js +7 -5
  96. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  97. package/lib/esm/components/TreeWidgetUiItemsProvider.scss +1 -1
  98. package/lib/esm/components/tree-header/TreeHeader.js +15 -12
  99. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  100. package/lib/esm/components/tree-header/TreeHeader.scss +1 -1
  101. package/lib/esm/components/trees/CategoriesVisibilityUtils.js +13 -8
  102. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  103. package/lib/esm/components/trees/VisibilityTreeBase.scss +1 -1
  104. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  105. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +22 -25
  106. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  107. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  108. package/lib/esm/components/trees/VisibilityTreeRenderer.js +27 -10
  109. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
  110. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  111. package/lib/esm/components/trees/category-tree/CategoriesTree.js +51 -34
  112. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
  113. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  114. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  115. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  116. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  117. package/lib/esm/components/trees/common/ContextMenu.js +4 -4
  118. package/lib/esm/components/trees/common/ContextMenu.js.map +1 -1
  119. package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  120. package/lib/esm/components/trees/common/TreeNodeRenderer.js +4 -4
  121. package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -1
  122. package/lib/esm/components/trees/common/TreeRenderer.d.ts +15 -1
  123. package/lib/esm/components/trees/common/TreeRenderer.js +15 -6
  124. package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
  125. package/lib/esm/components/trees/common/TreeRenderer.scss +7 -2
  126. package/lib/esm/components/trees/common/Types.d.ts +8 -0
  127. package/lib/esm/components/trees/common/Types.js +3 -3
  128. package/lib/esm/components/trees/common/Types.js.map +1 -1
  129. package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  130. package/lib/esm/components/trees/common/UseVisibilityTreeState.js +43 -0
  131. package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  132. package/lib/esm/components/trees/common/Utils.js +7 -5
  133. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  134. package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +1 -3
  135. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  136. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +22 -10
  137. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  138. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  139. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  140. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  141. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +19 -15
  142. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  143. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  144. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  145. package/lib/esm/components/trees/index.js +3 -3
  146. package/lib/esm/components/trees/index.js.map +1 -1
  147. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +7 -2
  148. package/lib/esm/components/trees/models-tree/ModelsTree.js +80 -66
  149. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  150. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +12 -19
  151. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  152. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  153. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +27 -0
  154. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  155. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  156. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  157. package/lib/esm/components/trees/models-tree/Utils.d.ts +4 -0
  158. package/lib/esm/components/trees/models-tree/Utils.js +50 -57
  159. package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
  160. package/lib/esm/components/utils/AutoSizer.js +7 -5
  161. package/lib/esm/components/utils/AutoSizer.js.map +1 -1
  162. package/lib/esm/components/utils/IsPromiseLike.js +4 -4
  163. package/lib/esm/components/utils/IsPromiseLike.js.map +1 -1
  164. package/lib/esm/components/utils/UseTreeTransientState.js +3 -3
  165. package/lib/esm/components/utils/UseTreeTransientState.js.map +1 -1
  166. package/lib/esm/e2e-tests/TreeWidget.test.js +56 -2
  167. package/lib/esm/e2e-tests/TreeWidget.test.js.map +1 -1
  168. package/lib/esm/e2e-tests/utils.d.ts +1 -0
  169. package/lib/esm/e2e-tests/utils.js +2 -4
  170. package/lib/esm/e2e-tests/utils.js.map +1 -1
  171. package/lib/esm/tree-widget-react.js +3 -3
  172. package/lib/esm/tree-widget-react.js.map +1 -1
  173. package/package.json +88 -87
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { NodeKey } from \"@itwin/presentation-common\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { ChildNodeSpecification, Node, Ruleset, SingleSchemaClassSpecification } from \"@itwin/presentation-common\";\nimport type { DelayLoadedTreeNodeItem } from \"@itwin/components-react\";\nimport type { ModelsTreeHierarchyConfiguration } from \"./ModelsTree\";\n\n/** @internal */\nexport class CachingElementIdsContainer {\n private _ids = new Array<Id64String>();\n constructor(private _generator: AsyncGenerator<Id64String>) {\n }\n\n private async next() { return (await this._generator.next()).value; }\n\n public async* getElementIds() {\n for (const id of this._ids) {\n yield id;\n }\n\n let nextId;\n while (nextId = await this.next()) {\n this._ids.push(nextId);\n yield nextId;\n }\n }\n}\n\n/** @internal */\nexport type CreateRulesetProps = Omit<ModelsTreeHierarchyConfiguration, \"enableElementsClassGrouping\"> & {\n enableElementsClassGrouping?: boolean;\n};\n\n/** @internal */\nexport function createRuleset(props: CreateRulesetProps): Ruleset {\n const context: SpecificationsContext = {\n elementClassSpecification: props.elementClassSpecification ?? { schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n groupElements: !!props.enableElementsClassGrouping,\n showEmptyModels: !!props.showEmptyModels,\n };\n\n return {\n id: \"tree-widget-react/ModelsTree\",\n requiredSchemas: [\n {\n name: \"BisCore\",\n },\n ],\n rules: [\n {\n ruleType: \"RootNodes\",\n autoExpand: true,\n specifications: [\n createRootSubjectSpecification(),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: \"\\\"icon-imodel-hollow-2\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n createRelatedHierarchySubjectSpecification(),\n createRelatedNonHierarchySubjectSpecification(),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: \"\\\"icon-folder\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n createNonContentModelsSpecification(context),\n createContentModelsSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: \"\\\"icon-model\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"ISubModeledElement\", \"BisCore\")`,\n specifications: [\n createElementModelSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: \"\\\"icon-model\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricModel3d\", \"BisCore\")`,\n specifications: [\n createModelCategoriesSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isCategory: \"true\",\n modelId: \"ParentNode.InstanceId\",\n icon: \"\\\"icon-layers\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"SpatialCategory\", \"BisCore\")`,\n specifications: [\n createCategoryElementsSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n modelId: \"this.Model.Id\",\n categoryId: \"this.Category.Id\",\n icon: \"\\\"icon-item\\\"\",\n groupIcon: \"\\\"icon-ec-class\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricElement3d\", \"BisCore\")`,\n specifications: [\n createEementElementsSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n modelId: \"this.Model.Id\",\n categoryId: \"this.Category.Id\",\n icon: \"\\\"icon-item\\\"\",\n groupIcon: \"\\\"icon-ec-class\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"SpatialCategory\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n {\n ruleType: \"Content\",\n condition: `ContentDisplayType = \"AssemblyElementsRequest\"`,\n specifications: [\n {\n specType: \"SelectedNodeInstances\",\n },\n {\n specType: \"ContentRelatedInstances\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ElementOwnsChildElements\",\n },\n direction: \"Forward\",\n count: \"*\",\n },\n ],\n },\n ],\n },\n ],\n };\n}\n\n/** @internal */\nexport type CreateSearchRulesetProps = Omit<ModelsTreeHierarchyConfiguration, \"enableElementsClassGrouping\">;\n\n/** @internal */\nexport function createSearchRuleset(props: CreateSearchRulesetProps): Ruleset {\n const context: SpecificationsContext = {\n elementClassSpecification: props.elementClassSpecification ?? { schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n groupElements: false,\n showEmptyModels: !!props.showEmptyModels,\n };\n\n return {\n id: \"tree-widget-react/ModelsTreeSearch\",\n rules: [\n {\n ruleType: \"RootNodes\",\n specifications: [\n createRootSubjectSpecification(),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: \"\\\"icon-imodel-hollow-2\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n createRelatedHierarchySubjectSpecification(),\n {\n ...createRelatedNonHierarchySubjectSpecification(),\n hideExpression: `NOT ThisNode.HasChildren ANDALSO NOT ThisNode.ChildrenArtifacts.AnyMatches(x => x.isContentModel)`,\n hideIfNoChildren: undefined,\n },\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: \"\\\"icon-folder\\\"\",\n },\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n {\n ...createNonContentModelsSpecification(context),\n hasChildren: \"Unknown\",\n },\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: \"\\\"icon-model\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n {\n ...createContentModelsSpecification(context),\n hasChildren: \"Unknown\",\n },\n ],\n customizationRules: [\n {\n ruleType: \"NodeArtifacts\",\n items: {\n isContentModel: \"true\",\n },\n },\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: \"\\\"icon-model\\\"\",\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricModel3d\", \"BisCore\")`,\n specifications: [\n createModelSubModelsSpecification(context),\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: \"\\\"icon-model\\\"\",\n },\n },\n ],\n },\n ],\n };\n}\n\ninterface SpecificationsContext {\n elementClassSpecification: SingleSchemaClassSpecification;\n groupElements: boolean;\n showEmptyModels: boolean;\n}\n\nfunction createRootSubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: [\n {\n schemaName: \"BisCore\",\n classNames: [\n \"Subject\",\n ],\n },\n ],\n instanceFilter: `this.Parent = NULL`,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createRelatedHierarchySubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"SubjectOwnsSubjects\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n },\n ],\n instanceFilter: `json_extract(this.JsonProperties, \"$.Subject.Job.Bridge\") <> NULL OR ifnull(json_extract(this.JsonProperties, \"$.Subject.Model.Type\"), \"\") = \"Hierarchy\"`,\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createRelatedNonHierarchySubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"SubjectOwnsSubjects\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n },\n ],\n instanceFilter: `json_extract(this.JsonProperties, \"$.Subject.Job.Bridge\") = NULL AND ifnull(json_extract(this.JsonProperties, \"$.Subject.Model.Type\"), \"\") <> \"Hierarchy\"`,\n hideIfNoChildren: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createNonContentModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const partitionFilter = `parent.ECInstanceId = partition.Parent.Id OR json_extract(parent.JsonProperties, \"$.Subject.Model.TargetPartition\") = printf(\"0x%x\", partition.ECInstanceId)`;\n const modelHasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n\n const hasNoContent = `json_extract(partition.JsonProperties, \"$.PhysicalPartition.Model.Content\") = NULL AND json_extract(partition.JsonProperties, \"$.GraphicalPartition3d.Model.Content\") = NULL`;\n const instanceFilter = `(${partitionFilter}) AND NOT this.IsPrivate AND ${hasNoContent}${showEmptyModels ? \"\" : ` AND ${modelHasElements}`}`;\n\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: {\n schemaName: \"BisCore\",\n classNames: [\n \"GeometricModel3d\",\n ],\n arePolymorphic: true,\n },\n relatedInstances: [\n {\n relationshipPath: {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"InformationPartitionElement\",\n },\n },\n alias: \"partition\",\n isRequired: true,\n },\n ],\n instanceFilter,\n hasChildren: showEmptyModels ? \"Unknown\" : \"Always\",\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createContentModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const partitionFilter = `parent.ECInstanceId = partition.Parent.Id OR json_extract(parent.JsonProperties, \"$.Subject.Model.TargetPartition\") = printf(\"0x%x\", partition.ECInstanceId)`;\n const modelHasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n\n const hasContent = `json_extract(partition.JsonProperties, \"$.PhysicalPartition.Model.Content\") <> NULL OR json_extract(partition.JsonProperties, \"$.GraphicalPartition3d.Model.Content\") <> NULL`;\n const instanceFilter = `(${partitionFilter}) AND NOT this.IsPrivate AND (${hasContent})${showEmptyModels ? \"\" : ` AND ${modelHasElements}`}`;\n\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: {\n schemaName: \"BisCore\",\n classNames: [\"GeometricModel3d\"],\n arePolymorphic: true,\n },\n relatedInstances: [\n {\n relationshipPath: {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"InformationPartitionElement\",\n },\n },\n alias: \"partition\",\n isRequired: true,\n },\n ],\n instanceFilter,\n hasChildren: showEmptyModels ? \"Unknown\" : \"Always\",\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createElementModelSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const hasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n const instanceFilter = `NOT this.IsPrivate${showEmptyModels ? \"\" : ` AND ${hasElements}`}`;\n\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Backward\",\n },\n ],\n instanceFilter,\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createModelCategoriesSpecification({ elementClassSpecification }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelContainsElements\",\n },\n direction: \"Forward\",\n targetClass: elementClassSpecification,\n },\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"GeometricElement3dIsInCategory\",\n },\n direction: \"Forward\",\n },\n ],\n ],\n instanceFilter: `NOT this.IsPrivate`,\n suppressSimilarAncestorsCheck: true,\n hideIfNoChildren: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createCategoryElementsSpecification({ elementClassSpecification, groupElements }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"GeometricElement3dIsInCategory\",\n },\n direction: \"Backward\",\n targetClass: elementClassSpecification,\n },\n ],\n instanceFilter: `this.Model.Id = parent.parent.ECInstanceId ANDALSO this.Parent = NULL`,\n groupByClass: groupElements,\n groupByLabel: false,\n };\n}\n\nfunction createEementElementsSpecification({ elementClassSpecification, groupElements }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ElementOwnsChildElements\",\n },\n direction: \"Forward\",\n targetClass: elementClassSpecification,\n },\n ],\n groupByClass: groupElements,\n groupByLabel: false,\n };\n}\n\nfunction createModelSubModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const hasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n const instanceFilter = `NOT this.IsPrivate${showEmptyModels ? \"\" : ` AND ${hasElements}`}`;\n\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelOwnsSubModel\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"GeometricModel3d\",\n },\n },\n ],\n instanceFilter,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\n/** @internal */\nexport function addModelsTreeNodeItemIcons(item: Partial<DelayLoadedTreeNodeItem>, node: Partial<Node>) {\n item.icon = node.key && NodeKey.isClassGroupingNodeKey(node.key)\n ? node.extendedData?.groupIcon\n : node.extendedData?.icon;\n}\n"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/Utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAIhG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAQrD,gBAAgB;AAChB,MAAM,OAAO,0BAA0B;IAErC,YAAoB,UAAsC;QAAtC,eAAU,GAAV,UAAU,CAA4B;QADlD,SAAI,GAAG,IAAI,KAAK,EAAc,CAAC;IACsB,CAAC;IAEtD,KAAK,CAAC,IAAI;QAChB,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,CAAC,aAAa;QACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;YAC1B,MAAM,EAAE,CAAC;SACV;QAED,IAAI,MAAM,CAAC;QACX,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,MAAM,CAAC;SACd;IACH,CAAC;CACF;AAOD,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,OAAO,GAA0B;QACrC,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE;QACxH,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B;QAClD,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe;KACzC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,8BAA8B;QAClC,eAAe,EAAE;YACf;gBACE,IAAI,EAAE,SAAS;aAChB;SACF;QACD,KAAK,EAAE;YACL;gBACE,QAAQ,EAAE,WAAW;gBACrB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,CAAC,8BAA8B,EAAE,CAAC;gBAClD,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,SAAS,EAAE,MAAM;4BACjB,IAAI,EAAE,wBAAwB;yBAC/B;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,4CAA4C;gBACvD,cAAc,EAAE,CAAC,0CAA0C,EAAE,EAAE,6CAA6C,EAAE,CAAC;gBAC/G,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,SAAS,EAAE,MAAM;4BACjB,IAAI,EAAE,eAAe;yBACtB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,4CAA4C;gBACvD,cAAc,EAAE,CAAC,mCAAmC,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;gBACzG,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,cAAc;yBACrB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,uDAAuD;gBAClE,cAAc,EAAE,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;gBAC1D,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,cAAc;yBACrB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,qDAAqD;gBAChE,cAAc,EAAE,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;gBAC7D,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,UAAU,EAAE,MAAM;4BAClB,OAAO,EAAE,uBAAuB;4BAChC,IAAI,EAAE,eAAe;yBACtB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,oDAAoD;gBAC/D,cAAc,EAAE,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;gBAC9D,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,eAAe;4BACxB,UAAU,EAAE,kBAAkB;4BAC9B,IAAI,EAAE,aAAa;4BACnB,SAAS,EAAE,iBAAiB;yBAC7B;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,uDAAuD;gBAClE,cAAc,EAAE,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;gBAC5D,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,eAAe;4BACxB,UAAU,EAAE,kBAAkB;4BAC9B,IAAI,EAAE,aAAa;4BACnB,SAAS,EAAE,iBAAiB;yBAC7B;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE;oBACL,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,SAAS;iBACrB;gBACD,MAAM,EAAE;oBACN;wBACE,QAAQ,EAAE,mBAAmB;wBAC7B,gBAAgB,EAAE,aAAa;qBAChC;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE;oBACL,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,iBAAiB;iBAC7B;gBACD,MAAM,EAAE;oBACN;wBACE,QAAQ,EAAE,mBAAmB;wBAC7B,gBAAgB,EAAE,aAAa;qBAChC;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,gDAAgD;gBAC3D,cAAc,EAAE;oBACd;wBACE,QAAQ,EAAE,uBAAuB;qBAClC;oBACD;wBACE,QAAQ,EAAE,yBAAyB;wBACnC,iBAAiB,EAAE;4BACjB;gCACE,YAAY,EAAE;oCACZ,UAAU,EAAE,SAAS;oCACrB,SAAS,EAAE,0BAA0B;iCACtC;gCACD,SAAS,EAAE,SAAS;gCACpB,KAAK,EAAE,GAAG;6BACX;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAKD,gBAAgB;AAChB,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,OAAO,GAA0B;QACrC,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE;QACxH,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe;KACzC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,oCAAoC;QACxC,KAAK,EAAE;YACL;gBACE,QAAQ,EAAE,WAAW;gBACrB,cAAc,EAAE,CAAC,8BAA8B,EAAE,CAAC;gBAClD,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,SAAS,EAAE,MAAM;4BACjB,IAAI,EAAE,wBAAwB;yBAC/B;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,4CAA4C;gBACvD,cAAc,EAAE;oBACd,0CAA0C,EAAE;oBAC5C;wBACE,GAAG,6CAA6C,EAAE;wBAClD,cAAc,EAAE,mGAAmG;wBACnH,gBAAgB,EAAE,SAAS;qBAC5B;iBACF;gBACD,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,SAAS,EAAE,MAAM;4BACjB,IAAI,EAAE,eAAe;yBACtB;qBACF;oBACD;wBACE,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE;4BACL,UAAU,EAAE,SAAS;4BACrB,SAAS,EAAE,SAAS;yBACrB;wBACD,MAAM,EAAE;4BACN;gCACE,QAAQ,EAAE,mBAAmB;gCAC7B,gBAAgB,EAAE,aAAa;6BAChC;yBACF;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,4CAA4C;gBACvD,cAAc,EAAE;oBACd;wBACE,GAAG,mCAAmC,CAAC,OAAO,CAAC;wBAC/C,WAAW,EAAE,SAAS;qBACvB;iBACF;gBACD,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,cAAc;yBACrB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,4CAA4C;gBACvD,cAAc,EAAE;oBACd;wBACE,GAAG,gCAAgC,CAAC,OAAO,CAAC;wBAC5C,WAAW,EAAE,SAAS;qBACvB;iBACF;gBACD,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,eAAe;wBACzB,KAAK,EAAE;4BACL,cAAc,EAAE,MAAM;yBACvB;qBACF;oBACD;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,cAAc;yBACrB;qBACF;iBACF;aACF;YACD;gBACE,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,qDAAqD;gBAChE,cAAc,EAAE,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;gBAC5D,kBAAkB,EAAE;oBAClB;wBACE,QAAQ,EAAE,cAAc;wBACxB,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,cAAc;yBACrB;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAQD,SAAS,8BAA8B;IACrC,OAAO;QACL,QAAQ,EAAE,gCAAgC;QAC1C,OAAO,EAAE;YACP;gBACE,UAAU,EAAE,SAAS;gBACrB,UAAU,EAAE,CAAC,SAAS,CAAC;aACxB;SACF;QACD,cAAc,EAAE,oBAAoB;QACpC,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,0CAA0C;IACjD,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,qBAAqB;iBACjC;gBACD,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE;oBACX,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,SAAS;iBACrB;aACF;SACF;QACD,cAAc,EAAE,0JAA0J;QAC1K,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,6CAA6C;IACpD,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,qBAAqB;iBACjC;gBACD,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE;oBACX,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,SAAS;iBACrB;aACF;SACF;QACD,cAAc,EAAE,2JAA2J;QAC3K,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,EAAE,yBAAyB,EAAE,eAAe,EAAyB;IAChH,MAAM,eAAe,GAAG,8JAA8J,CAAC;IACvL,MAAM,gBAAgB,GAAG,wEAAwE,yBAAyB,CAAC,UAAU,IAAI,yBAAyB,CAAC,SAAS,IAAI,CAAC;IAEjL,MAAM,YAAY,GAAG,8KAA8K,CAAC;IACpM,MAAM,cAAc,GAAG,IAAI,eAAe,gCAAgC,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,gBAAgB,EAAE,EAAE,CAAC;IAE7I,OAAO;QACL,QAAQ,EAAE,gCAAgC;QAC1C,OAAO,EAAE;YACP,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC,kBAAkB,CAAC;YAChC,cAAc,EAAE,IAAI;SACrB;QACD,gBAAgB,EAAE;YAChB;gBACE,gBAAgB,EAAE;oBAChB,YAAY,EAAE;wBACZ,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,oBAAoB;qBAChC;oBACD,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE;wBACX,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,6BAA6B;qBACzC;iBACF;gBACD,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,IAAI;aACjB;SACF;QACD,cAAc;QACd,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACnD,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CAAC,EAAE,yBAAyB,EAAE,eAAe,EAAyB;IAC7G,MAAM,eAAe,GAAG,8JAA8J,CAAC;IACvL,MAAM,gBAAgB,GAAG,wEAAwE,yBAAyB,CAAC,UAAU,IAAI,yBAAyB,CAAC,SAAS,IAAI,CAAC;IAEjL,MAAM,UAAU,GAAG,+KAA+K,CAAC;IACnM,MAAM,cAAc,GAAG,IAAI,eAAe,iCAAiC,UAAU,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,gBAAgB,EAAE,EAAE,CAAC;IAE7I,OAAO;QACL,QAAQ,EAAE,gCAAgC;QAC1C,OAAO,EAAE;YACP,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,CAAC,kBAAkB,CAAC;YAChC,cAAc,EAAE,IAAI;SACrB;QACD,gBAAgB,EAAE;YAChB;gBACE,gBAAgB,EAAE;oBAChB,YAAY,EAAE;wBACZ,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,oBAAoB;qBAChC;oBACD,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE;wBACX,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,6BAA6B;qBACzC;iBACF;gBACD,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,IAAI;aACjB;SACF;QACD,cAAc;QACd,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACnD,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,EAAE,yBAAyB,EAAE,eAAe,EAAyB;IAC5G,MAAM,WAAW,GAAG,wEAAwE,yBAAyB,CAAC,UAAU,IAAI,yBAAyB,CAAC,SAAS,IAAI,CAAC;IAC5K,MAAM,cAAc,GAAG,qBAAqB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,WAAW,EAAE,EAAE,CAAC;IAE3F,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,oBAAoB;iBAChC;gBACD,SAAS,EAAE,UAAU;aACtB;SACF;QACD,cAAc;QACd,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,EAAE,yBAAyB,EAAyB;IAC9F,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE;oBACE,YAAY,EAAE;wBACZ,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,uBAAuB;qBACnC;oBACD,SAAS,EAAE,SAAS;oBACpB,WAAW,EAAE,yBAAyB;iBACvC;gBACD;oBACE,YAAY,EAAE;wBACZ,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,gCAAgC;qBAC5C;oBACD,SAAS,EAAE,SAAS;iBACrB;aACF;SACF;QACD,cAAc,EAAE,oBAAoB;QACpC,6BAA6B,EAAE,IAAI;QACnC,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAAC,EAAE,yBAAyB,EAAE,aAAa,EAAyB;IAC9G,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,gCAAgC;iBAC5C;gBACD,SAAS,EAAE,UAAU;gBACrB,WAAW,EAAE,yBAAyB;aACvC;SACF;QACD,cAAc,EAAE,uEAAuE;QACvF,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,EAAE,yBAAyB,EAAE,aAAa,EAAyB;IAC5G,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,0BAA0B;iBACtC;gBACD,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,yBAAyB;aACvC;SACF;QACD,YAAY,EAAE,aAAa;QAC3B,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,EAAE,yBAAyB,EAAE,eAAe,EAAyB;IAC9G,MAAM,WAAW,GAAG,wEAAwE,yBAAyB,CAAC,UAAU,IAAI,yBAAyB,CAAC,SAAS,IAAI,CAAC;IAC5K,MAAM,cAAc,GAAG,qBAAqB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,WAAW,EAAE,EAAE,CAAC;IAE3F,OAAO;QACL,QAAQ,EAAE,sBAAsB;QAChC,iBAAiB,EAAE;YACjB;gBACE,YAAY,EAAE;oBACZ,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,mBAAmB;iBAC/B;gBACD,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE;oBACX,UAAU,EAAE,SAAS;oBACrB,SAAS,EAAE,kBAAkB;iBAC9B;aACF;SACF;QACD,cAAc;QACd,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,0BAA0B,CAAC,IAAsC,EAAE,IAAmB;IACpG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;AAC5H,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAAwB;IACxE,MAAM,WAAW,GAAqB;QACpC,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE;;;;;;;OAOJ;QACH,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAyB,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAgB,CAAC;AAC/I,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { GeometricModel3dProps, ModelQueryParams } from \"@itwin/core-common\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { NodeKey } from \"@itwin/presentation-common\";\n\nimport type { ModelInfo } from \"./ModelsTreeComponent\";\n\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { ChildNodeSpecification, Node, Ruleset, SingleSchemaClassSpecification } from \"@itwin/presentation-common\";\nimport type { DelayLoadedTreeNodeItem } from \"@itwin/components-react\";\nimport type { ModelsTreeHierarchyConfiguration } from \"./ModelsTree\";\n/** @internal */\nexport class CachingElementIdsContainer {\n private _ids = new Array<Id64String>();\n constructor(private _generator: AsyncGenerator<Id64String>) {}\n\n private async next() {\n return (await this._generator.next()).value;\n }\n\n public async *getElementIds() {\n for (const id of this._ids) {\n yield id;\n }\n\n let nextId;\n while ((nextId = await this.next())) {\n this._ids.push(nextId);\n yield nextId;\n }\n }\n}\n\n/** @internal */\nexport type CreateRulesetProps = Omit<ModelsTreeHierarchyConfiguration, \"enableElementsClassGrouping\"> & {\n enableElementsClassGrouping?: boolean;\n};\n\n/** @internal */\nexport function createRuleset(props: CreateRulesetProps): Ruleset {\n const context: SpecificationsContext = {\n elementClassSpecification: props.elementClassSpecification ?? { schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n groupElements: !!props.enableElementsClassGrouping,\n showEmptyModels: !!props.showEmptyModels,\n };\n\n return {\n id: \"tree-widget-react/ModelsTree\",\n requiredSchemas: [\n {\n name: \"BisCore\",\n },\n ],\n rules: [\n {\n ruleType: \"RootNodes\",\n autoExpand: true,\n specifications: [createRootSubjectSpecification()],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: '\"icon-imodel-hollow-2\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [createRelatedHierarchySubjectSpecification(), createRelatedNonHierarchySubjectSpecification()],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: '\"icon-folder\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [createNonContentModelsSpecification(context), createContentModelsSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: '\"icon-model\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"ISubModeledElement\", \"BisCore\")`,\n specifications: [createElementModelSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: '\"icon-model\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricModel3d\", \"BisCore\")`,\n specifications: [createModelCategoriesSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isCategory: \"true\",\n modelId: \"ParentNode.InstanceId\",\n icon: '\"icon-layers\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"SpatialCategory\", \"BisCore\")`,\n specifications: [createCategoryElementsSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n modelId: \"this.Model.Id\",\n categoryId: \"this.Category.Id\",\n icon: '\"icon-item\"',\n groupIcon: '\"icon-ec-class\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricElement3d\", \"BisCore\")`,\n specifications: [createEementElementsSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n modelId: \"this.Model.Id\",\n categoryId: \"this.Category.Id\",\n icon: '\"icon-item\"',\n groupIcon: '\"icon-ec-class\"',\n },\n },\n ],\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"SpatialCategory\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n {\n ruleType: \"Content\",\n condition: `ContentDisplayType = \"AssemblyElementsRequest\"`,\n specifications: [\n {\n specType: \"SelectedNodeInstances\",\n },\n {\n specType: \"ContentRelatedInstances\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ElementOwnsChildElements\",\n },\n direction: \"Forward\",\n count: \"*\",\n },\n ],\n },\n ],\n },\n ],\n };\n}\n\n/** @internal */\nexport type CreateSearchRulesetProps = Omit<ModelsTreeHierarchyConfiguration, \"enableElementsClassGrouping\">;\n\n/** @internal */\nexport function createSearchRuleset(props: CreateSearchRulesetProps): Ruleset {\n const context: SpecificationsContext = {\n elementClassSpecification: props.elementClassSpecification ?? { schemaName: \"BisCore\", className: \"GeometricElement3d\" },\n groupElements: false,\n showEmptyModels: !!props.showEmptyModels,\n };\n\n return {\n id: \"tree-widget-react/ModelsTreeSearch\",\n rules: [\n {\n ruleType: \"RootNodes\",\n specifications: [createRootSubjectSpecification()],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: '\"icon-imodel-hollow-2\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n createRelatedHierarchySubjectSpecification(),\n {\n ...createRelatedNonHierarchySubjectSpecification(),\n hideExpression: `NOT ThisNode.HasChildren ANDALSO NOT ThisNode.ChildrenArtifacts.AnyMatches(x => x.isContentModel)`,\n hideIfNoChildren: undefined,\n },\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isSubject: \"true\",\n icon: '\"icon-folder\"',\n },\n },\n {\n ruleType: \"Grouping\",\n class: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n groups: [\n {\n specType: \"SameLabelInstance\",\n applicationStage: \"PostProcess\",\n },\n ],\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n {\n ...createNonContentModelsSpecification(context),\n hasChildren: \"Unknown\",\n },\n ],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: '\"icon-model\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"Subject\", \"BisCore\")`,\n specifications: [\n {\n ...createContentModelsSpecification(context),\n hasChildren: \"Unknown\",\n },\n ],\n customizationRules: [\n {\n ruleType: \"NodeArtifacts\",\n items: {\n isContentModel: \"true\",\n },\n },\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: '\"icon-model\"',\n },\n },\n ],\n },\n {\n ruleType: \"ChildNodes\",\n condition: `ParentNode.IsOfClass(\"GeometricModel3d\", \"BisCore\")`,\n specifications: [createModelSubModelsSpecification(context)],\n customizationRules: [\n {\n ruleType: \"ExtendedData\",\n items: {\n isModel: \"true\",\n icon: '\"icon-model\"',\n },\n },\n ],\n },\n ],\n };\n}\n\ninterface SpecificationsContext {\n elementClassSpecification: SingleSchemaClassSpecification;\n groupElements: boolean;\n showEmptyModels: boolean;\n}\n\nfunction createRootSubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: [\n {\n schemaName: \"BisCore\",\n classNames: [\"Subject\"],\n },\n ],\n instanceFilter: `this.Parent = NULL`,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createRelatedHierarchySubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"SubjectOwnsSubjects\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n },\n ],\n instanceFilter: `json_extract(this.JsonProperties, \"$.Subject.Job.Bridge\") <> NULL OR ifnull(json_extract(this.JsonProperties, \"$.Subject.Model.Type\"), \"\") = \"Hierarchy\"`,\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createRelatedNonHierarchySubjectSpecification(): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"SubjectOwnsSubjects\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"Subject\",\n },\n },\n ],\n instanceFilter: `json_extract(this.JsonProperties, \"$.Subject.Job.Bridge\") = NULL AND ifnull(json_extract(this.JsonProperties, \"$.Subject.Model.Type\"), \"\") <> \"Hierarchy\"`,\n hideIfNoChildren: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createNonContentModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const partitionFilter = `parent.ECInstanceId = partition.Parent.Id OR json_extract(parent.JsonProperties, \"$.Subject.Model.TargetPartition\") = printf(\"0x%x\", partition.ECInstanceId)`;\n const modelHasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n\n const hasNoContent = `json_extract(partition.JsonProperties, \"$.PhysicalPartition.Model.Content\") = NULL AND json_extract(partition.JsonProperties, \"$.GraphicalPartition3d.Model.Content\") = NULL`;\n const instanceFilter = `(${partitionFilter}) AND NOT this.IsPrivate AND ${hasNoContent}${showEmptyModels ? \"\" : ` AND ${modelHasElements}`}`;\n\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: {\n schemaName: \"BisCore\",\n classNames: [\"GeometricModel3d\"],\n arePolymorphic: true,\n },\n relatedInstances: [\n {\n relationshipPath: {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"InformationPartitionElement\",\n },\n },\n alias: \"partition\",\n isRequired: true,\n },\n ],\n instanceFilter,\n hasChildren: showEmptyModels ? \"Unknown\" : \"Always\",\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createContentModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const partitionFilter = `parent.ECInstanceId = partition.Parent.Id OR json_extract(parent.JsonProperties, \"$.Subject.Model.TargetPartition\") = printf(\"0x%x\", partition.ECInstanceId)`;\n const modelHasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n\n const hasContent = `json_extract(partition.JsonProperties, \"$.PhysicalPartition.Model.Content\") <> NULL OR json_extract(partition.JsonProperties, \"$.GraphicalPartition3d.Model.Content\") <> NULL`;\n const instanceFilter = `(${partitionFilter}) AND NOT this.IsPrivate AND (${hasContent})${showEmptyModels ? \"\" : ` AND ${modelHasElements}`}`;\n\n return {\n specType: \"InstanceNodesOfSpecificClasses\",\n classes: {\n schemaName: \"BisCore\",\n classNames: [\"GeometricModel3d\"],\n arePolymorphic: true,\n },\n relatedInstances: [\n {\n relationshipPath: {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"InformationPartitionElement\",\n },\n },\n alias: \"partition\",\n isRequired: true,\n },\n ],\n instanceFilter,\n hasChildren: showEmptyModels ? \"Unknown\" : \"Always\",\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createElementModelSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const hasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n const instanceFilter = `NOT this.IsPrivate${showEmptyModels ? \"\" : ` AND ${hasElements}`}`;\n\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelModelsElement\",\n },\n direction: \"Backward\",\n },\n ],\n instanceFilter,\n hideNodesInHierarchy: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createModelCategoriesSpecification({ elementClassSpecification }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelContainsElements\",\n },\n direction: \"Forward\",\n targetClass: elementClassSpecification,\n },\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"GeometricElement3dIsInCategory\",\n },\n direction: \"Forward\",\n },\n ],\n ],\n instanceFilter: `NOT this.IsPrivate`,\n suppressSimilarAncestorsCheck: true,\n hideIfNoChildren: true,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\nfunction createCategoryElementsSpecification({ elementClassSpecification, groupElements }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"GeometricElement3dIsInCategory\",\n },\n direction: \"Backward\",\n targetClass: elementClassSpecification,\n },\n ],\n instanceFilter: `this.Model.Id = parent.parent.ECInstanceId ANDALSO this.Parent = NULL`,\n groupByClass: groupElements,\n groupByLabel: false,\n };\n}\n\nfunction createEementElementsSpecification({ elementClassSpecification, groupElements }: SpecificationsContext): ChildNodeSpecification {\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ElementOwnsChildElements\",\n },\n direction: \"Forward\",\n targetClass: elementClassSpecification,\n },\n ],\n groupByClass: groupElements,\n groupByLabel: false,\n };\n}\n\nfunction createModelSubModelsSpecification({ elementClassSpecification, showEmptyModels }: SpecificationsContext): ChildNodeSpecification {\n const hasElements = `this.HasRelatedInstance(\"BisCore:ModelContainsElements\", \"Forward\", \"${elementClassSpecification.schemaName}:${elementClassSpecification.className}\")`;\n const instanceFilter = `NOT this.IsPrivate${showEmptyModels ? \"\" : ` AND ${hasElements}`}`;\n\n return {\n specType: \"RelatedInstanceNodes\",\n relationshipPaths: [\n {\n relationship: {\n schemaName: \"BisCore\",\n className: \"ModelOwnsSubModel\",\n },\n direction: \"Forward\",\n targetClass: {\n schemaName: \"BisCore\",\n className: \"GeometricModel3d\",\n },\n },\n ],\n instanceFilter,\n groupByClass: false,\n groupByLabel: false,\n };\n}\n\n/** @internal */\nexport function addModelsTreeNodeItemIcons(item: Partial<DelayLoadedTreeNodeItem>, node: Partial<Node>) {\n item.icon = node.key && NodeKey.isClassGroupingNodeKey(node.key) ? node.extendedData?.groupIcon : node.extendedData?.icon;\n}\n\n/** @internal */\nexport async function queryModelsForHeaderActions(iModel: IModelConnection) {\n const queryParams: ModelQueryParams = {\n from: \"BisCore.GeometricModel3d\",\n where: `\n EXISTS (\n SELECT 1\n FROM BisCore.Element e\n WHERE e.ECClassId IS (BisCore.GeometricElement3d, BisCore.InformationPartitionElement)\n AND e.ECInstanceId = GeometricModel3d.ModeledElement.Id\n )\n `,\n wantPrivate: false,\n };\n\n const modelProps = await iModel.models.queryProps(queryParams);\n return modelProps.map(({ id, isPlanProjection }: GeometricModel3dProps) => ({ id, isPlanProjection })).filter(({ id }) => id) as ModelInfo[];\n}\n"]}
@@ -1,15 +1,17 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
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
- *--------------------------------------------------------------------------------------------*/
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
6
  import { useCallback, useState } from "react";
7
7
  import { ResizableContainerObserver } from "@itwin/core-react";
8
8
  // istanbul ignore next
9
9
  /** @internal */
10
10
  export function AutoSizer(props) {
11
11
  const [{ height, width }, setSize] = useState({ height: 0, width: 0 });
12
- const handleResize = useCallback((w, h) => { setSize({ height: h, width: w }); }, []);
13
- return (_jsx(ResizableContainerObserver, { onResize: handleResize, children: props.children({ height, width }) }));
12
+ const handleResize = useCallback((w, h) => {
13
+ setSize({ height: h, width: w });
14
+ }, []);
15
+ return _jsx(ResizableContainerObserver, { onResize: handleResize, children: props.children({ height, width }) });
14
16
  }
15
17
  //# sourceMappingURL=AutoSizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoSizer.js","sourceRoot":"","sources":["../../../../src/components/utils/AutoSizer.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAa/D,uBAAuB;AACvB,gBAAgB;AAChB,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtG,OAAO,CACL,KAAC,0BAA0B,IAAC,QAAQ,EAAE,YAAY,YAC/C,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GACP,CAC9B,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { useCallback, useState } from \"react\";\nimport { ResizableContainerObserver } from \"@itwin/core-react\";\n\n/** @internal */\nexport interface Size {\n width: number;\n height: number;\n}\n\n/** @internal */\nexport interface AutoSizerProps {\n children: (size: Size) => React.ReactNode;\n}\n\n// istanbul ignore next\n/** @internal */\nexport function AutoSizer(props: AutoSizerProps) {\n const [{ height, width }, setSize] = useState<Size>({ height: 0, width: 0 });\n const handleResize = useCallback((w: number, h: number) => { setSize({ height: h, width: w }); }, []);\n\n return (\n <ResizableContainerObserver onResize={handleResize}>\n {props.children({ height, width })}\n </ResizableContainerObserver>\n );\n}\n"]}
1
+ {"version":3,"file":"AutoSizer.js","sourceRoot":"","sources":["../../../../src/components/utils/AutoSizer.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAa/D,uBAAuB;AACvB,gBAAgB;AAChB,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACxD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAC,0BAA0B,IAAC,QAAQ,EAAE,YAAY,YAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAA8B,CAAC;AAC9H,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useCallback, useState } from \"react\";\nimport { ResizableContainerObserver } from \"@itwin/core-react\";\n\n/** @internal */\nexport interface Size {\n width: number;\n height: number;\n}\n\n/** @internal */\nexport interface AutoSizerProps {\n children: (size: Size) => React.ReactNode;\n}\n\n// istanbul ignore next\n/** @internal */\nexport function AutoSizer(props: AutoSizerProps) {\n const [{ height, width }, setSize] = useState<Size>({ height: 0, width: 0 });\n const handleResize = useCallback((w: number, h: number) => {\n setSize({ height: h, width: w });\n }, []);\n\n return <ResizableContainerObserver onResize={handleResize}>{props.children({ height, width })}</ResizableContainerObserver>;\n}\n"]}
@@ -1,12 +1,12 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  /**
6
6
  * Checks if the specified argument is a promise
7
7
  * @internal
8
8
  */
9
9
  export function isPromiseLike(obj) {
10
- return !!(obj && (typeof obj === "object") && (typeof obj.then === "function"));
10
+ return !!(obj && typeof obj === "object" && typeof obj.then === "function");
11
11
  }
12
12
  //# sourceMappingURL=IsPromiseLike.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsPromiseLike.js","sourceRoot":"","sources":["../../../../src/components/utils/IsPromiseLike.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/**\n * Checks if the specified argument is a promise\n * @internal\n */\nexport function isPromiseLike(obj: unknown): obj is PromiseLike<unknown> {\n return !!(obj && (typeof obj === \"object\") && (typeof (obj as any).then === \"function\"));\n}\n"]}
1
+ {"version":3,"file":"IsPromiseLike.js","sourceRoot":"","sources":["../../../../src/components/utils/IsPromiseLike.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACvF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/**\n * Checks if the specified argument is a promise\n * @internal\n */\nexport function isPromiseLike(obj: unknown): obj is PromiseLike<unknown> {\n return !!(obj && typeof obj === \"object\" && typeof (obj as any).then === \"function\");\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  import { useTransientState } from "@itwin/appui-react";
6
6
  import { useControlledTreeLayoutStorage } from "@itwin/components-react";
7
7
  // istanbul ignore file
@@ -1 +1 @@
1
- {"version":3,"file":"UseTreeTransientState.js","sourceRoot":"","sources":["../../../../src/components/utils/UseTreeTransientState.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,uBAAuB;AAEvB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,8BAA8B,EAAK,CAAC;IACtE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { useTransientState } from \"@itwin/appui-react\";\nimport { useControlledTreeLayoutStorage } from \"@itwin/components-react\";\n\n// istanbul ignore file\n\n/**\n * Allows to persist tree scroll position when tree is used in `@itwin/appui-react` Widgets.\n * Returned `ref` should be passed to container element containing tree component.\n *\n * Example:\n * ```typescript\n * function ModelsTreeWidget() {\n * const ref = useTreeTransientState<HTMLDivElement>();\n * return <div ref={ref}>\n * <ModelsTree />\n * </div>\n * }\n * ```\n *\n * @public\n */\nexport function useTreeTransientState<T extends Element>() {\n const { ref, persist, restore } = useControlledTreeLayoutStorage<T>();\n useTransientState(persist, restore);\n return ref;\n}\n"]}
1
+ {"version":3,"file":"UseTreeTransientState.js","sourceRoot":"","sources":["../../../../src/components/utils/UseTreeTransientState.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,uBAAuB;AAEvB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,8BAA8B,EAAK,CAAC;IACtE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { useTransientState } from \"@itwin/appui-react\";\nimport { useControlledTreeLayoutStorage } from \"@itwin/components-react\";\n\n// istanbul ignore file\n\n/**\n * Allows to persist tree scroll position when tree is used in `@itwin/appui-react` Widgets.\n * Returned `ref` should be passed to container element containing tree component.\n *\n * Example:\n * ```typescript\n * function ModelsTreeWidget() {\n * const ref = useTreeTransientState<HTMLDivElement>();\n * return <div ref={ref}>\n * <ModelsTree />\n * </div>\n * }\n * ```\n *\n * @public\n */\nexport function useTreeTransientState<T extends Element>() {\n const { ref, persist, restore } = useControlledTreeLayoutStorage<T>();\n useTransientState(persist, restore);\n return ref;\n}\n"]}
@@ -4,11 +4,12 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import assert from "assert";
6
6
  import { expect, test } from "@playwright/test";
7
- import { expandStagePanel, locateNode, locateWidget, takeScreenshot } from "./utils";
7
+ import { expandStagePanel, locateInstanceFilter, locateNode, locateWidget, takeScreenshot } from "./utils";
8
8
  let treeWidget;
9
9
  test.beforeEach(async ({ page, baseURL }) => {
10
10
  assert(baseURL);
11
- await page.goto(baseURL);
11
+ await page.goto(baseURL, { waitUntil: "networkidle" });
12
+ await page.evaluate(async () => document.fonts.ready);
12
13
  // expand panel size to ~300px
13
14
  await expandStagePanel(page, "right", 100);
14
15
  treeWidget = locateWidget(page, "tree");
@@ -27,6 +28,59 @@ test.describe("should match image snapshot", () => {
27
28
  await locateNode(treeWidget, "Tag-Category").waitFor();
28
29
  await takeScreenshot(page, treeWidget);
29
30
  });
31
+ test("fully expanded tree node", async ({ page }) => {
32
+ const physicalModelNode = locateNode(treeWidget, "ProcessPhysicalModel");
33
+ await physicalModelNode.getByTestId("tree-node-expansion-toggle").click();
34
+ // wait for node at the bottom to be visible/loaded
35
+ await locateNode(treeWidget, "Tag-Category").waitFor();
36
+ const pipeSupportNode = locateNode(treeWidget, "PipeSupport");
37
+ await pipeSupportNode.getByTestId("tree-node-expansion-toggle").click();
38
+ // wait for node at the bottom to be visible/loaded
39
+ await locateNode(treeWidget, "Hanger Rod [4-2UH]").waitFor();
40
+ await takeScreenshot(page, treeWidget);
41
+ });
42
+ // make sure to open the filter dialog before calling this.
43
+ async function selectPropertyInDialog(page, propertyText) {
44
+ const filterBuilder = page.locator(".presentation-property-filter-builder");
45
+ await filterBuilder.getByPlaceholder("Choose property").click();
46
+ // ensure that options are loaded
47
+ await page.getByRole("menuitem", { name: "Model" }).waitFor();
48
+ await page.getByRole("menuitem", { name: propertyText }).click();
49
+ }
50
+ test("node with active filtering - information message", async ({ page }) => {
51
+ const physicalModelNode = locateNode(treeWidget, "ProcessPhysicalModel");
52
+ // hover the node for the button to appear
53
+ await physicalModelNode.hover();
54
+ await physicalModelNode.getByTitle("Apply filter").click();
55
+ await locateInstanceFilter(page).waitFor();
56
+ await selectPropertyInDialog(page, "Is Private");
57
+ await page.getByRole("button", { name: "Apply" }).click();
58
+ // hover the node for the button to appear
59
+ await physicalModelNode.hover();
60
+ await treeWidget.getByTitle("Clear active filter").waitFor();
61
+ await takeScreenshot(page, treeWidget);
62
+ });
63
+ test("node with active filtering - filtered nodes", async ({ page }) => {
64
+ const physicalModelNode = locateNode(treeWidget, "ProcessPhysicalModel");
65
+ // hover the node for the button to appear
66
+ await physicalModelNode.hover();
67
+ await physicalModelNode.getByTitle("Apply filter").click();
68
+ await locateInstanceFilter(page).waitFor();
69
+ await selectPropertyInDialog(page, "Is Private");
70
+ await page
71
+ .getByRole("combobox")
72
+ .filter({ has: page.getByText("Is true") })
73
+ .click();
74
+ await page.getByRole("option", { name: "Is true" }).waitFor();
75
+ await page.getByRole("option", { name: "Is false" }).click();
76
+ await page.getByRole("button", { name: "Apply" }).click();
77
+ // hover the node for buttons to appear
78
+ await physicalModelNode.hover();
79
+ await treeWidget.getByTitle("Clear active filter").waitFor();
80
+ // ensure the last node is loaded before taking a screenshot to avoid flakiness
81
+ await locateNode(treeWidget, "SWS-1-SWS-0311-EX-OPM").waitFor();
82
+ await takeScreenshot(page, treeWidget);
83
+ });
30
84
  test("selected node", async ({ page }) => {
31
85
  const node = locateNode(treeWidget, "BayTown");
32
86
  await node.click();
@@ -1 +1 @@
1
- {"version":3,"file":"TreeWidget.test.js","sourceRoot":"","sources":["../../../src/e2e-tests/TreeWidget.test.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAGhG,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErF,IAAI,UAAmB,CAAC;AACxB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,8BAA8B;IAC9B,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3C,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAEhD,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACtC,6CAA6C;QAC7C,MAAM,UAAU,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACvH,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE7D,mDAAmD;QACnD,MAAM,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAEnB,mCAAmC;QACnC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAChC,MAAM,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAChD,MAAM,UAAU,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5D,MAAM,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { Locator } from \"@playwright/test\";\nimport assert from \"assert\";\nimport { expect, test } from \"@playwright/test\";\nimport { expandStagePanel, locateNode, locateWidget, takeScreenshot } from \"./utils\";\n\nlet treeWidget: Locator;\ntest.beforeEach(async ({ page, baseURL }) => {\n assert(baseURL);\n await page.goto(baseURL);\n // expand panel size to ~300px\n await expandStagePanel(page, \"right\", 100);\n treeWidget = locateWidget(page, \"tree\");\n await treeWidget.waitFor();\n});\n\ntest.describe(\"should match image snapshot\", () => {\n\n test(\"initial tree\", async ({ page }) => {\n // wait for element to be visible in the tree\n await locateNode(treeWidget, \"ProcessPhysicalModel\").getByRole(\"checkbox\", { name: \"Visible\", exact: true }).waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"expanded tree node\", async ({ page }) => {\n const node = locateNode(treeWidget, \"ProcessPhysicalModel\");\n await node.getByTestId(\"tree-node-expansion-toggle\").click();\n\n // wait for node at the bottom to be visible/loaded\n await locateNode(treeWidget, \"Tag-Category\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"selected node\", async ({ page }) => {\n const node = locateNode(treeWidget, \"BayTown\");\n await node.click();\n\n // wait for node to become selected\n await expect(node).toHaveClass(/is-selected/);\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"search\", async ({ page }) => {\n await treeWidget.getByText(\"BayTown\").waitFor();\n await treeWidget.getByTitle(\"Search for something\").click();\n await treeWidget.getByPlaceholder(\"Search...\").fill(\"Model\");\n await treeWidget.locator(\".components-activehighlight\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n});\n"]}
1
+ {"version":3,"file":"TreeWidget.test.js","sourceRoot":"","sources":["../../../src/e2e-tests/TreeWidget.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport type { Locator, Page } from \"@playwright/test\";\nimport assert from \"assert\";\nimport { expect, test } from \"@playwright/test\";\nimport { expandStagePanel, locateInstanceFilter, locateNode, locateWidget, takeScreenshot } from \"./utils\";\n\nlet treeWidget: Locator;\ntest.beforeEach(async ({ page, baseURL }) => {\n assert(baseURL);\n await page.goto(baseURL, { waitUntil: \"networkidle\" });\n await page.evaluate(async () => document.fonts.ready);\n // expand panel size to ~300px\n await expandStagePanel(page, \"right\", 100);\n treeWidget = locateWidget(page, \"tree\");\n await treeWidget.waitFor();\n});\n\ntest.describe(\"should match image snapshot\", () => {\n test(\"initial tree\", async ({ page }) => {\n // wait for element to be visible in the tree\n await locateNode(treeWidget, \"ProcessPhysicalModel\").getByRole(\"checkbox\", { name: \"Visible\", exact: true }).waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"expanded tree node\", async ({ page }) => {\n const node = locateNode(treeWidget, \"ProcessPhysicalModel\");\n await node.getByTestId(\"tree-node-expansion-toggle\").click();\n\n // wait for node at the bottom to be visible/loaded\n await locateNode(treeWidget, \"Tag-Category\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"fully expanded tree node\", async ({ page }) => {\n const physicalModelNode = locateNode(treeWidget, \"ProcessPhysicalModel\");\n await physicalModelNode.getByTestId(\"tree-node-expansion-toggle\").click();\n\n // wait for node at the bottom to be visible/loaded\n await locateNode(treeWidget, \"Tag-Category\").waitFor();\n const pipeSupportNode = locateNode(treeWidget, \"PipeSupport\");\n await pipeSupportNode.getByTestId(\"tree-node-expansion-toggle\").click();\n\n // wait for node at the bottom to be visible/loaded\n await locateNode(treeWidget, \"Hanger Rod [4-2UH]\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n // make sure to open the filter dialog before calling this.\n async function selectPropertyInDialog(page: Page, propertyText: string) {\n const filterBuilder = page.locator(\".presentation-property-filter-builder\");\n\n await filterBuilder.getByPlaceholder(\"Choose property\").click();\n\n // ensure that options are loaded\n await page.getByRole(\"menuitem\", { name: \"Model\" }).waitFor();\n await page.getByRole(\"menuitem\", { name: propertyText }).click();\n }\n\n test(\"node with active filtering - information message\", async ({ page }) => {\n const physicalModelNode = locateNode(treeWidget, \"ProcessPhysicalModel\");\n\n // hover the node for the button to appear\n await physicalModelNode.hover();\n await physicalModelNode.getByTitle(\"Apply filter\").click();\n\n await locateInstanceFilter(page).waitFor();\n await selectPropertyInDialog(page, \"Is Private\");\n\n await page.getByRole(\"button\", { name: \"Apply\" }).click();\n\n // hover the node for the button to appear\n await physicalModelNode.hover();\n await treeWidget.getByTitle(\"Clear active filter\").waitFor();\n\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"node with active filtering - filtered nodes\", async ({ page }) => {\n const physicalModelNode = locateNode(treeWidget, \"ProcessPhysicalModel\");\n\n // hover the node for the button to appear\n await physicalModelNode.hover();\n await physicalModelNode.getByTitle(\"Apply filter\").click();\n\n await locateInstanceFilter(page).waitFor();\n await selectPropertyInDialog(page, \"Is Private\");\n\n await page\n .getByRole(\"combobox\")\n .filter({ has: page.getByText(\"Is true\") })\n .click();\n await page.getByRole(\"option\", { name: \"Is true\" }).waitFor();\n await page.getByRole(\"option\", { name: \"Is false\" }).click();\n\n await page.getByRole(\"button\", { name: \"Apply\" }).click();\n\n // hover the node for buttons to appear\n await physicalModelNode.hover();\n await treeWidget.getByTitle(\"Clear active filter\").waitFor();\n\n // ensure the last node is loaded before taking a screenshot to avoid flakiness\n await locateNode(treeWidget, \"SWS-1-SWS-0311-EX-OPM\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"selected node\", async ({ page }) => {\n const node = locateNode(treeWidget, \"BayTown\");\n await node.click();\n\n // wait for node to become selected\n await expect(node).toHaveClass(/is-selected/);\n await takeScreenshot(page, treeWidget);\n });\n\n test(\"search\", async ({ page }) => {\n await treeWidget.getByText(\"BayTown\").waitFor();\n await treeWidget.getByTitle(\"Search for something\").click();\n await treeWidget.getByPlaceholder(\"Search...\").fill(\"Model\");\n await treeWidget.locator(\".components-activehighlight\").waitFor();\n await takeScreenshot(page, treeWidget);\n });\n});\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { Locator, Page } from "@playwright/test";
2
2
  export declare const locateNode: (tree: Page | Locator, name: string) => Locator;
3
3
  export declare const locateWidget: (page: Page | Locator, widgetName: string) => Locator;
4
+ export declare const locateInstanceFilter: (page: Page | Locator) => Locator;
4
5
  type PanelSide = "left" | "right" | "top" | "bottom";
5
6
  export declare const locatePanel: (page: Page, side: PanelSide) => Locator;
6
7
  export declare const expandStagePanel: (page: Page, side: PanelSide, px: number) => Promise<void>;
@@ -6,13 +6,11 @@ import assert from "assert";
6
6
  import { expect } from "@playwright/test";
7
7
  export const locateNode = (tree, name) => tree.getByRole("treeitem", { name });
8
8
  export const locateWidget = (page, widgetName) => page.locator(`.${widgetName}-widget`);
9
+ export const locateInstanceFilter = (page) => page.locator(`.presentation-instance-filter`);
9
10
  export const locatePanel = (page, side) => page.locator(`.nz-widgetPanels-panel.nz-${side}`);
10
11
  export const expandStagePanel = async (page, side, px) => {
11
12
  const widgetPanel = locatePanel(page, side);
12
- const handlePos = await widgetPanel
13
- .locator(".nz-grip-container")
14
- .locator(".nz-handle")
15
- .boundingBox();
13
+ const handlePos = await widgetPanel.locator(".nz-grip-container").locator(".nz-handle").boundingBox();
16
14
  assert(handlePos);
17
15
  await page.mouse.move(handlePos.x, handlePos.y);
18
16
  await page.mouse.down();
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/e2e-tests/utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAoB,EAAE,UAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,SAAS,CAAC,CAAC;AAGhH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;AAE9G,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAU,EAAE,IAAe,EAAE,EAAU,EAAE,EAAE;IAChF,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,WAAW;SAChC,OAAO,CAAC,oBAAoB,CAAC;SAC7B,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,EAAE,CAAC;IACjB,MAAM,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAExB,QAAQ,IAAI,EAAE;QACZ,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,OAAO;YACV,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,KAAK;YACR,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM;KACT;IACD,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,SAAkB;IACjE,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,CAAC,WAAW,CAAC,CAAC;IACpB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport assert from \"assert\";\nimport { expect } from \"@playwright/test\";\n\nimport type { Locator, Page } from \"@playwright/test\";\n\nexport const locateNode = (tree: Page | Locator, name: string) => tree.getByRole(\"treeitem\", { name });\nexport const locateWidget = (page: Page | Locator, widgetName: string) => page.locator(`.${widgetName}-widget`);\n\ntype PanelSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport const locatePanel = (page: Page, side: PanelSide) => page.locator(`.nz-widgetPanels-panel.nz-${side}`);\n\nexport const expandStagePanel = async (page: Page, side: PanelSide, px: number) => {\n const widgetPanel = locatePanel(page, side);\n const handlePos = await widgetPanel\n .locator(\".nz-grip-container\")\n .locator(\".nz-handle\")\n .boundingBox();\n assert(handlePos);\n\n await page.mouse.move(handlePos.x, handlePos.y);\n await page.mouse.down();\n\n switch (side) {\n case \"left\":\n await page.mouse.move(handlePos.x + px, handlePos.y);\n break;\n case \"right\":\n await page.mouse.move(handlePos.x - px, handlePos.y);\n break;\n case \"top\":\n await page.mouse.move(handlePos.x, handlePos.y - px);\n break;\n case \"bottom\":\n await page.mouse.move(handlePos.x, handlePos.y + px);\n break;\n }\n await page.mouse.up();\n};\n\nexport async function takeScreenshot(page: Page, component: Locator) {\n const boundingBox = await component.boundingBox();\n assert(boundingBox);\n await expect(page).toHaveScreenshot({ clip: boundingBox });\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/e2e-tests/utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAoB,EAAE,UAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,SAAS,CAAC,CAAC;AAChH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAG5G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;AAE9G,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAU,EAAE,IAAe,EAAE,EAAU,EAAE,EAAE;IAChF,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IACtG,MAAM,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAExB,QAAQ,IAAI,EAAE;QACZ,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,OAAO;YACV,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,KAAK;YACR,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM;KACT;IACD,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,SAAkB;IACjE,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,CAAC,WAAW,CAAC,CAAC;IACpB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport assert from \"assert\";\nimport { expect } from \"@playwright/test\";\n\nimport type { Locator, Page } from \"@playwright/test\";\n\nexport const locateNode = (tree: Page | Locator, name: string) => tree.getByRole(\"treeitem\", { name });\nexport const locateWidget = (page: Page | Locator, widgetName: string) => page.locator(`.${widgetName}-widget`);\nexport const locateInstanceFilter = (page: Page | Locator) => page.locator(`.presentation-instance-filter`);\n\ntype PanelSide = \"left\" | \"right\" | \"top\" | \"bottom\";\nexport const locatePanel = (page: Page, side: PanelSide) => page.locator(`.nz-widgetPanels-panel.nz-${side}`);\n\nexport const expandStagePanel = async (page: Page, side: PanelSide, px: number) => {\n const widgetPanel = locatePanel(page, side);\n const handlePos = await widgetPanel.locator(\".nz-grip-container\").locator(\".nz-handle\").boundingBox();\n assert(handlePos);\n\n await page.mouse.move(handlePos.x, handlePos.y);\n await page.mouse.down();\n\n switch (side) {\n case \"left\":\n await page.mouse.move(handlePos.x + px, handlePos.y);\n break;\n case \"right\":\n await page.mouse.move(handlePos.x - px, handlePos.y);\n break;\n case \"top\":\n await page.mouse.move(handlePos.x, handlePos.y - px);\n break;\n case \"bottom\":\n await page.mouse.move(handlePos.x, handlePos.y + px);\n break;\n }\n await page.mouse.up();\n};\n\nexport async function takeScreenshot(page: Page, component: Locator) {\n const boundingBox = await component.boundingBox();\n assert(boundingBox);\n await expect(page).toHaveScreenshot({ clip: boundingBox });\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
5
  export * from "./TreeWidget";
6
6
  export * from "./components/SelectableTree";
7
7
  export * from "./components/trees";
@@ -1 +1 @@
1
- {"version":3,"file":"tree-widget-react.js","sourceRoot":"","sources":["../../src/tree-widget-react.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nexport * from \"./TreeWidget\";\nexport * from \"./components/SelectableTree\";\nexport * from \"./components/trees\";\nexport * from \"./components/TreeWidgetUiItemsProvider\";\nexport * from \"./components/utils/UseTreeTransientState\";\n"]}
1
+ {"version":3,"file":"tree-widget-react.js","sourceRoot":"","sources":["../../src/tree-widget-react.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nexport * from \"./TreeWidget\";\nexport * from \"./components/SelectableTree\";\nexport * from \"./components/trees\";\nexport * from \"./components/TreeWidgetUiItemsProvider\";\nexport * from \"./components/utils/UseTreeTransientState\";\n"]}