@itwin/tree-widget-react 2.1.0 → 2.3.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.
- package/CHANGELOG.md +24 -4
- package/README.md +85 -0
- package/lib/cjs/components/SelectableTree.d.ts +4 -0
- package/lib/cjs/components/SelectableTree.js +2 -1
- package/lib/cjs/components/SelectableTree.js.map +1 -1
- package/lib/cjs/components/TreeSelector.d.ts +2 -0
- package/lib/cjs/components/TreeSelector.js +5 -2
- package/lib/cjs/components/TreeSelector.js.map +1 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +2 -0
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.d.ts +1 -0
- package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +11 -3
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js +8 -5
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +6 -0
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js +10 -5
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +17 -8
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.d.ts +27 -0
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js +51 -0
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js.map +1 -0
- package/lib/cjs/components/trees/common/TreeRenderer.d.ts +17 -2
- package/lib/cjs/components/trees/common/TreeRenderer.js +19 -3
- package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/cjs/components/trees/common/TreeRenderer.scss +1 -1
- package/lib/cjs/components/trees/common/UseFeatureReporting.d.ts +23 -0
- package/lib/cjs/components/trees/common/UseFeatureReporting.js +30 -0
- package/lib/cjs/components/trees/common/UseFeatureReporting.js.map +1 -0
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +8 -1
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +5 -3
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +6 -0
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +16 -7
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +6 -0
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +17 -3
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +6 -0
- package/lib/cjs/components/trees/models-tree/ModelsTree.js +19 -12
- package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +26 -11
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +10 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +5 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +35 -12
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/Utils.js +0 -22
- package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
- package/lib/esm/components/SelectableTree.d.ts +4 -0
- package/lib/esm/components/SelectableTree.js +2 -1
- package/lib/esm/components/SelectableTree.js.map +1 -1
- package/lib/esm/components/TreeSelector.d.ts +2 -0
- package/lib/esm/components/TreeSelector.js +5 -2
- package/lib/esm/components/TreeSelector.js.map +1 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +2 -0
- package/lib/esm/components/TreeWidgetUiItemsProvider.js +1 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.d.ts +1 -0
- package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +11 -3
- package/lib/esm/components/trees/VisibilityTreeRenderer.js +8 -5
- package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +6 -0
- package/lib/esm/components/trees/category-tree/CategoriesTree.js +10 -5
- package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +17 -8
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.d.ts +27 -0
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.js +47 -0
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.js.map +1 -0
- package/lib/esm/components/trees/common/TreeRenderer.d.ts +17 -2
- package/lib/esm/components/trees/common/TreeRenderer.js +19 -3
- package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
- package/lib/esm/components/trees/common/TreeRenderer.scss +1 -1
- package/lib/esm/components/trees/common/UseFeatureReporting.d.ts +23 -0
- package/lib/esm/components/trees/common/UseFeatureReporting.js +26 -0
- package/lib/esm/components/trees/common/UseFeatureReporting.js.map +1 -0
- package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +8 -1
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js +5 -3
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +6 -0
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +17 -8
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +6 -0
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +18 -4
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +6 -0
- package/lib/esm/components/trees/models-tree/ModelsTree.js +19 -12
- package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +26 -11
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +10 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +5 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +35 -12
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
- package/lib/esm/components/trees/models-tree/Utils.js +0 -22
- package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsVisibilityHandler.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsVisibilityHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AASrD;;;GAGG;AACH,MAAM,CAAN,IAAY,kBAOX;AAPD,WAAY,kBAAkB;IAC5B,iEAAO,CAAA;IACP,iEAAO,CAAA;IACP,6DAAK,CAAA;IACL,mEAAQ,CAAA;IACR,iEAAO,CAAA;IACP,mEAAQ,CAAA;AACV,CAAC,EAPW,kBAAkB,KAAlB,kBAAkB,QAO7B;AAoBD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAQlC,YAAY,KAAmC;QAFvC,eAAU,GAAG,IAAI,KAAK,EAAc,CAAC;QAqBtC,uBAAkB,GAAG,IAAI,OAAO,EAA4B,CAAC;QAgYpE,gEAAgE;QACxD,kBAAa,GAAG,CAAC,GAAa,EAAE,EAAE;YACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,gEAAgE;QACxD,gCAA2B,GAAG,GAAG,EAAE;YACzC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,gEAAgE;QACxD,+BAA0B,GAAG,GAAG,EAAE;YACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACpC,CAAC,CAAC;QA/ZA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,oBAAoB,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjH,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC5G,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,wBAAwB,CAAC,WAAW,CAAC,0BAA0B,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;SAChM;IACH,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAID,sEAAsE;IAC/D,uBAAuB,CAAC,QAA2D;QACxF,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;IACxC,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAkB;QAC1C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,kBAAkB,CAAC,OAAO,CAAC;SACnC;QAED,IAAI,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,kBAAkB,CAAC,QAAQ,CAAC;SACpC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,kBAAkB,CAAC,OAAO,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,kBAAkB,CAAC,OAAO,CAAC;SACnC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,kBAAkB,CAAC,KAAK,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,kBAAkB,CAAC,QAAQ,CAAC;SACpC;QACD,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,IAAkB;QAC5C,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IAC1D,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,IAAkB;QAC1C,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,IAAkB;QAC7C,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC3D,CAAC;IAED,kDAAkD;IAC3C,mBAAmB,CAAC,IAAkB;QAC3C,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SAC9C;QAED,IAAI,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAC3C,OAAO,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;YACxC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SAC9C;QAED,IAAI,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/C,4EAA4E;YAC5E,OAAO,IAAI,CAAC,wBAAwB,CAClC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACzC,IAAI,CACL,CAAC;SACH;QACD,IAAI,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC/D;QACD,IAAI,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAChD,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;SACvG;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACjI,CAAC;IAED,oEAAoE;IAC7D,KAAK,CAAC,gBAAgB,CAAC,IAAkB,EAAE,EAAW;QAC3D,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO;SACR;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QAEzB,IAAI,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO;SACR;QAED,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;YACxC,OAAO;SACR;QAED,IAAI,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/C,MAAM,IAAI,CAAC,sBAAsB,CAC/B,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACzC,IAAI,EACJ,EAAE,CACH,CAAC;SACH;aAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpD,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC7D;aAAM,IAAI,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACvD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/F;aAAM;YACL,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAChJ;IACH,CAAC;IAES,KAAK,CAAC,wBAAwB,CAAC,GAAiB,EAAE,IAAkB;QAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,wBAAwB,CAAC,EAAE,CAAC;SAC5G;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACpF;QAED,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,GAAiB;QACrD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACxG,IAAI,WAAW,EAAE;YACf,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,CAAC;SAClG;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,yBAAyB,CAAC,EAAE,CAAC;IAC1F,CAAC;IAEO,KAAK,CAAC,+BAA+B,CAC3C,QAA+C,EAC/C,GAAiB,EACjB,IAAkB;QAElB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;SAC1C;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1H,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE;YACxE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,CAAC;SAClG;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,yBAAyB,CAAC,EAAE,CAAC;IAC1F,CAAC;IAES,qBAAqB,CAAC,EAAc;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAAE,CAAC;SAC1G;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;IAC9H,CAAC;IAES,wBAAwB,CAAC,EAAc,EAAE,aAAqC;QACtF,IAAI,aAAa,EAAE;YACjB,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAChE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,4BAA4B,CAAC,EAAE,CAAC;aAChH;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAChG,QAAQ,QAAQ,EAAE;gBAChB,KAAK,0BAA0B,CAAC,QAAQ,CAAC,IAAI;oBAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,2CAA2C,CAAC,EAAE,CAAC;gBAC9G,KAAK,0BAA0B,CAAC,QAAQ,CAAC,IAAI;oBAC3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,wCAAwC,CAAC,EAAE,CAAC;aAC1G;SACF;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACzC,OAAO,EAAE,WAAW;gBAClB,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,2CAA2C,CAAC;gBACvE,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,wCAAwC,CAAC;SACtE,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mCAAmC,CAAC,GAAW,EAAE,GAA2B;QAC1F,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAEjF,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC9D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,2BAA2B,CAAC,EAAE,CAAC;SAC/G;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE;YAC/F,IAAI,+BAA+B,GAAG,KAAK,CAAC;YAC5C,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,UAAU,CAAC,aAAa,EAAE,EAAE;gBACxD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;oBACnD,+BAA+B,GAAG,IAAI,CAAC;oBACvC,MAAM;iBACP;aACF;YACD,IAAI,+BAA+B,EAAE;gBACnC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,yCAAyC,CAAC,EAAE,CAAC;aAC3G;SACF;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE;YAChJ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,wDAAwD,CAAC,EAAE,CAAC;SACxH;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;YAC7F,IAAI,sBAAsB,GAAG,IAAI,CAAC;YAClC,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,UAAU,CAAC,aAAa,EAAE,EAAE;gBACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;oBACnD,sBAAsB,GAAG,KAAK,CAAC;oBAC/B,MAAM;iBACP;aACF;YACD,IAAI,sBAAsB,EAAE;gBAC1B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,EAAE,CAAC;aACtG;SACF;QAED,IAAI,UAAU,IAAI,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;YACxF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;SAC3E;QAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,+BAA+B,CAAC,EAAE,CAAC;IAChG,CAAC;IAES,uBAAuB,CAAC,SAAqB,EAAE,OAA+B,EAAE,UAAkC;QAC1H,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC9D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,2BAA2B,CAAC,EAAE,CAAC;SAC/G;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACnG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,qCAAqC,CAAC,EAAE,CAAC;SACrG;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;YAClD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,yCAAyC,CAAC,EAAE,CAAC;aAC3G;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE;gBAC9F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,wDAAwD,CAAC,EAAE,CAAC;aACxH;SACF;QACD,IAAI,UAAU,IAAI,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;YACxF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;SAC3E;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,+BAA+B,CAAC,EAAE,CAAC;IAChG,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,GAAiB,EAAE,IAAkB,EAAE,EAAW;QACvF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC9C,OAAO;SACR;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SACnF;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,QAA+C,EAAE,GAAiB,EAAE,IAAkB,EAAE,EAAW;QAC1I,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SACzC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,GAAiB,EAAE,EAAW;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,EAAc,EAAE,EAAW;QAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAC9C,OAAO;SACR;QAED,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,GAAiB,EAAE,OAAgB;QACxE,IAAI,OAAO,EAAE;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SAClD;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACrD;IACH,CAAC;IAES,mBAAmB,CAAC,UAAsB,EAAE,aAAqC,EAAE,EAAW;QACtG,IAAI,aAAa,EAAE;YACjB,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAClF,MAAM,GAAG,GACP,EAAE,KAAK,qBAAqB;gBAC1B,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI;gBAC1C,CAAC,CAAC,EAAE;oBACF,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI;oBAC1C,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAC5F,IAAI,GAAG,KAAK,0BAA0B,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE;gBAC1D,kFAAkF;gBAClF,4EAA4E;gBAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACtE;YACD,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAES,KAAK,CAAC,8BAA8B,CAAC,GAA2B,EAAE,EAAW;QACrF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,EAAc,EAAE,OAA+B,EAAE,UAAkC,EAAE,EAAW,EAAE,WAAqB;QACxJ,MAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnF,MAAM,yCAAyC,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACzF,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,yCAAyC,CAAC,CAAC;QACzG,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,iBAAiB,CAAC,aAAa,EAAE,EAAE;YAC7D,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,EAAE,EAAE,oBAAoB,EAAE,yCAAyC,CAAC,CAAC;SAC/G;IACH,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,OAA+B,EAC/B,UAAkC,EAClC,UAAsC,EACtC,EAAW;QAEX,MAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnF,MAAM,yCAAyC,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACzF,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,UAAU,EAAE;YACxC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,oBAAoB,EAAE,yCAAyC,CAAC,CAAC;SACjH;IACH,CAAC;IAEO,0BAA0B,CAAC,SAAqB,EAAE,EAAW,EAAE,oBAA6B,EAAE,yCAAkD;QACtJ,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvG,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAErI,IAAI,EAAE,EAAE;YACN,gBAAgB,GAAG,gBAAgB,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC,oBAAoB,IAAI,yCAAyC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAC3G,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/B,kBAAkB,GAAG,IAAI,CAAC;aAC3B;SACF;aAAM;YACL,kBAAkB,GAAG,kBAAkB,IAAI,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7E,IAAI,oBAAoB,IAAI,CAAC,yCAAyC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACxG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC9B,gBAAgB,GAAG,IAAI,CAAC;aACzB;SACF;QAED,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACvE,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAC1H,CAAC;IAEO,2BAA2B,CAAC,OAA+B,EAAE,UAAkC;QACrG,OAAO,CACL,CAAC,CAAC,OAAO;YACT,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS;YACvD,CAAC,CAAC,UAAU;YACZ,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CACvE,CAAC;IACJ,CAAC;IAEO,+BAA+B;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IACrG,CAAC;IAEO,0BAA0B;QAChC,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,OAAO;SACR;QAED,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC5C,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAiBO,wBAAwB,CAAC,YAA0B;QACzD,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;IAC9G,CAAC;IAEO,iBAAiB,CAAC,WAAyB;QACjD,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;IAC5G,CAAC;IAEO,oBAAoB,CAAC,WAAyB;QACpD,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;IAC/G,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,UAAwB;QACvD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAChH,CAAC,WAAyB,EAAE,IAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,EAC5E,EAAE,CACH,CAAC;IACJ,CAAC;IAED,uBAAuB;IACf,qBAAqB,CAAC,UAAsB;QAClD,OAAO,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC;IAED,uBAAuB;IACf,KAAK,CAAC,oBAAoB,CAAC,eAAgC;QACjE,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC;CACF;AAED,gBAAgB;AAChB,MAAM,OAAO,oBAAoB;IAM/B,YAAY,MAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,aAAa,GAAG,KAAK,IAA+F,EAAE;YAC1H,MAAM,aAAa,GAAG;;;OAGrB,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9H,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,IAA8D,EAAE;YACvF,MAAM,WAAW,GAAG;;;;;OAKnB,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5H,CAAC,CAAC;QAEF,SAAS,SAAS,CAAe,GAAwB,EAAE,GAAS,EAAE,KAAa;YACjF,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,EAAE,CAAC;gBACV,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACpB;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QACpC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA4B,CAAC;QACpE,KAAK,MAAM,OAAO,IAAI,MAAM,aAAa,EAAE,EAAE;YAC3C,uBAAuB;YACvB,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACpB,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;aAClE;YACD,qBAAqB;YACrB,IAAI,OAAO,CAAC,iBAAiB,EAAE;gBAC7B,SAAS,CAAC,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;aAC3E;SACF;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,WAAW,EAAE,EAAE;YACvC,uBAAuB;YACvB,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/D,uBAAuB;YACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACxC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aACjC;YAED,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC/B,SAAS,CAAC,IAAI,CAAC,cAAe,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;SACtD;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,8BAA8B,CAAC,QAAsB,EAAE,SAAqB;QAClF,MAAM,eAAe,GAAG,IAAI,CAAC,cAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,eAAe,EAAE;YACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;SACnC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;SACpF;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,SAAqB;QACnD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAc,CAAC;QACzC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAQD,uBAAuB;AACvB,MAAM,eAAe;IAInB,YACU,OAAyB,EACzB,UAAkB;QADlB,YAAO,GAAP,OAAO,CAAkB;QACzB,eAAU,GAAV,UAAU,CAAQ;QALpB,6BAAwB,GAAG,IAAI,GAAG,EAAsC,CAAC;QACzE,4BAAuB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAKpE,CAAC;IAEG,KAAK;QACV,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAEM,qBAAqB,CAAC,UAAsB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC;SACZ;QAED,MAAM,SAAS,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/F,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,eAAgC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC7F,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,uBAAuB;AACvB,KAAK,SAAS,CAAC,CAAC,0BAA0B,CAAC,MAAwB,EAAE,SAAiB,EAAE,WAAmB,EAAE,SAAe;IAC1H,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,sBAAsB,CAAC;QACjE,MAAM;QACN,WAAW,EAAE,SAAS;QACtB,WAAW;QACX,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC;KAC5B,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE;QACnC,MAAM,GAAG,CAAC,EAAE,CAAC;KACd;AACH,CAAC;AAED,uBAAuB;AACvB,SAAS,iCAAiC,CAAC,MAAwB,EAAE,SAAiB,EAAE,UAAsB;IAC5G,OAAO,IAAI,0BAA0B,CACnC,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAC7H,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,KAAK,UAAU,yBAAyB,CAAC,MAAwB,EAAE,SAAiB,EAAE,eAAgC;IACpH,MAAM,0BAA0B,GAAG,IAAI,0BAA0B,CAC/D,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,eAAe,CAAC,CAAC,CAC5F,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1E,IAAI,SAAS,CAAC,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;IAED,IAAI,OAAO,EAAE,UAAU,CAAC;IACxB,MAAM,KAAK,GAAG,kHAAkH,CAAC;IACjI,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtI,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE;QACvB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACjC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;KACxC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,0BAA0B,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,MAAyC,EAAE,eAAmC,EAAU,EAAE;IAC/G,MAAM,cAAc,GAAG,oBAAoB,MAAM,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,YAAY,CAAC;KACrB;IAED,eAAe,GAAG,sBAAsB,eAAe,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5D,OAAO,GAAG,YAAY,KAAK,aAAa,EAAE,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAgB,EAAE,QAAkB;IACtE,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC5B,MAAM,mBAAmB,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAgB,EAAE,QAAkB;IACtE,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAgB,EAAE,QAAkB;IACxE,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAChC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5B;aAAM;YACL,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/B;IACH,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,QAAQ,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAgB,EAAE,MAAe,EAAE,QAAkB;IACtF,qBAAqB;IACrB,IAAI,CAAC,MAAM,EAAE;QACX,OAAO;KACR;IACD,IAAI,MAAM,EAAE;QACV,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC5C;SAAM;QACL,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACxC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAgB,EAAE,QAAkB;IACtE,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrF,CAAC","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 { BeEvent } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelApp, PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { KeySet, NodeKey } from \"@itwin/presentation-common\";\nimport { isPresentationTreeNodeItem } from \"@itwin/presentation-components\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { toggleAllCategories } from \"../CategoriesVisibilityUtils\";\nimport { CachingElementIdsContainer } from \"./Utils\";\n\nimport type { TreeNodeItem } from \"@itwin/components-react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { ECClassGroupingNodeKey, GroupingNodeKey, Keys } from \"@itwin/presentation-common\";\nimport type { IFilteredPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport type { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from \"../VisibilityTreeEventHandler\";\n\n/**\n * Models tree node types.\n * @public\n */\nexport enum ModelsTreeNodeType {\n Unknown,\n Subject,\n Model,\n Category,\n Element,\n Grouping,\n}\n\n/**\n * Type definition of predicate used to decide if node can be selected\n * @public\n */\nexport type ModelsTreeSelectionPredicate = (key: NodeKey, type: ModelsTreeNodeType) => boolean;\n\n/**\n * Props for [[ModelsVisibilityHandler]]\n * @public\n */\nexport interface ModelsVisibilityHandlerProps {\n rulesetId: string;\n viewport: Viewport;\n hierarchyAutoUpdateEnabled?: boolean;\n /** @internal */\n subjectModelIdsCache?: SubjectModelIdsCache;\n}\n\n/**\n * Visibility handler used by [[ModelsTree]] to control visibility of the tree items.\n * @public\n */\nexport class ModelsVisibilityHandler implements IVisibilityHandler {\n private _props: ModelsVisibilityHandlerProps;\n private _pendingVisibilityChange: any | undefined;\n private _subjectModelIdsCache: SubjectModelIdsCache;\n private _filteredDataProvider?: IFilteredPresentationTreeDataProvider;\n private _elementIdsCache: ElementIdsCache;\n private _listeners = new Array<() => void>();\n\n constructor(props: ModelsVisibilityHandlerProps) {\n this._props = props;\n this._subjectModelIdsCache = props.subjectModelIdsCache ?? new SubjectModelIdsCache(this._props.viewport.iModel);\n this._elementIdsCache = new ElementIdsCache(this._props.viewport.iModel, this._props.rulesetId);\n this._listeners.push(this._props.viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedCategoriesChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedModelsChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onAlwaysDrawnChanged.addListener(this.onElementAlwaysDrawnChanged));\n this._listeners.push(this._props.viewport.onNeverDrawnChanged.addListener(this.onElementNeverDrawnChanged));\n if (this._props.hierarchyAutoUpdateEnabled) {\n this._listeners.push(Presentation.presentation.onIModelHierarchyChanged.addListener(/* istanbul ignore next */ () => this._elementIdsCache.clear())); // eslint-disable-line @itwin/no-internal\n }\n }\n\n public dispose() {\n this._listeners.forEach((remove) => remove());\n clearTimeout(this._pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent<VisibilityChangeListener>();\n\n /** Sets data provider that is used to get filtered tree hierarchy. */\n public setFilteredDataProvider(provider: IFilteredPresentationTreeDataProvider | undefined) {\n this._filteredDataProvider = provider;\n }\n\n public static getNodeType(item: TreeNodeItem) {\n if (!isPresentationTreeNodeItem(item)) {\n return ModelsTreeNodeType.Unknown;\n }\n\n if (NodeKey.isClassGroupingNodeKey(item.key)) {\n return ModelsTreeNodeType.Grouping;\n }\n\n if (!item.extendedData) {\n return ModelsTreeNodeType.Unknown;\n }\n\n if (this.isSubjectNode(item)) {\n return ModelsTreeNodeType.Subject;\n }\n if (this.isModelNode(item)) {\n return ModelsTreeNodeType.Model;\n }\n if (this.isCategoryNode(item)) {\n return ModelsTreeNodeType.Category;\n }\n return ModelsTreeNodeType.Element;\n }\n\n public static isSubjectNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isSubject;\n }\n\n public static isModelNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isModel;\n }\n\n public static isCategoryNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isCategory;\n }\n\n /** Returns visibility status of the tree node. */\n public getVisibilityStatus(node: TreeNodeItem): VisibilityStatus | Promise<VisibilityStatus> {\n const nodeKey = isPresentationTreeNodeItem(node) ? node.key : undefined;\n if (!nodeKey) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey)) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibility(\n nodeKey.instanceKeys.map((key) => key.id),\n node,\n );\n }\n if (ModelsVisibilityHandler.isModelNode(node)) {\n return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);\n }\n if (ModelsVisibilityHandler.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));\n }\n return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public async changeVisibility(node: TreeNodeItem, on: boolean) {\n if (!isPresentationTreeNodeItem(node)) {\n return;\n }\n const nodeKey = node.key;\n\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n await this.changeElementGroupingNodeState(nodeKey, on);\n return;\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey)) {\n return;\n }\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n await this.changeSubjectNodeState(\n nodeKey.instanceKeys.map((key) => key.id),\n node,\n on,\n );\n } else if (ModelsVisibilityHandler.isModelNode(node)) {\n await this.changeModelState(nodeKey.instanceKeys[0].id, on);\n } else if (ModelsVisibilityHandler.isCategoryNode(node)) {\n this.changeCategoryState(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node), on);\n } else {\n await this.changeElementState(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node), on, node.hasChildren);\n }\n }\n\n protected async getSubjectNodeVisibility(ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (!this._props.viewport.view.isSpatialView()) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"subject.nonSpatialView\") };\n }\n\n if (this._filteredDataProvider) {\n return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);\n }\n\n return this.getSubjectDisplayStatus(ids);\n }\n\n private async getSubjectDisplayStatus(ids: Id64String[]): Promise<VisibilityStatus> {\n const modelIds = await this.getSubjectModelIds(ids);\n const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === \"visible\");\n if (isDisplayed) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n private async getFilteredSubjectDisplayStatus(\n provider: IFilteredPresentationTreeDataProvider,\n ids: Id64String[],\n node: TreeNodeItem,\n ): Promise<VisibilityStatus> {\n if (provider.nodeMatchesFilter(node)) {\n return this.getSubjectDisplayStatus(ids);\n }\n\n const children = await provider.getNodes(node);\n const childrenDisplayStatuses = await Promise.all(children.map(async (childNode) => this.getVisibilityStatus(childNode)));\n if (childrenDisplayStatuses.some((status) => status.state === \"visible\")) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n protected getModelDisplayStatus(id: Id64String): VisibilityStatus {\n if (!this._props.viewport.view.isSpatialView()) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"model.nonSpatialView\") };\n }\n const isDisplayed = this._props.viewport.view.viewsModel(id);\n return { state: isDisplayed ? \"visible\" : \"hidden\", tooltip: createTooltip(isDisplayed ? \"visible\" : \"hidden\", undefined) };\n }\n\n protected getCategoryDisplayStatus(id: Id64String, parentModelId: Id64String | undefined): VisibilityStatus {\n if (parentModelId) {\n if (this.getModelDisplayStatus(parentModelId).state === \"hidden\") {\n return { state: \"hidden\", isDisabled: true, tooltip: createTooltip(\"disabled\", \"category.modelNotDisplayed\") };\n }\n\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);\n switch (override) {\n case PerModelCategoryVisibility.Override.Show:\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"category.displayedThroughPerModelOverride\") };\n case PerModelCategoryVisibility.Override.Hide:\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"category.hiddenThroughPerModelOverride\") };\n }\n }\n const isDisplayed = this._props.viewport.view.viewsCategory(id);\n return {\n state: isDisplayed ? \"visible\" : \"hidden\",\n tooltip: isDisplayed\n ? createTooltip(\"visible\", \"category.displayedThroughCategorySelector\")\n : createTooltip(\"hidden\", \"category.hiddenThroughCategorySelector\"),\n };\n }\n\n protected async getElementGroupingNodeDisplayStatus(_id: string, key: ECClassGroupingNodeKey): Promise<VisibilityStatus> {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n\n if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {\n let atLeastOneElementForceDisplayed = false;\n for await (const elementId of elementIds.getElementIds()) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n atLeastOneElementForceDisplayed = true;\n break;\n }\n }\n if (atLeastOneElementForceDisplayed) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n\n // istanbul ignore else\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {\n let allElementsForceHidden = true;\n for await (const elementId of elementIds.getElementIds()) {\n if (!this._props.viewport.neverDrawn.has(elementId)) {\n allElementsForceHidden = false;\n break;\n }\n }\n if (allElementsForceHidden) {\n return { state: \"hidden\", tooltip: createTooltip(\"visible\", \"element.hiddenThroughNeverDrawnList\") };\n }\n }\n\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\") {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n }\n\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected getElementDisplayStatus(elementId: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined): VisibilityStatus {\n if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n }\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId)) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughNeverDrawnList\") };\n }\n if (this._props.viewport.alwaysDrawn !== undefined) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n }\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\") {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected async changeSubjectNodeState(ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (!this._props.viewport.view.isSpatialView()) {\n return;\n }\n\n if (this._filteredDataProvider) {\n return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);\n }\n\n return this.changeSubjectState(ids, on);\n }\n\n private async changeFilteredSubjectState(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (provider.nodeMatchesFilter(node)) {\n return this.changeSubjectState(ids, on);\n }\n\n const children = await provider.getNodes(node);\n return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, on)));\n }\n\n private async changeSubjectState(ids: Id64String[], on: boolean) {\n const modelIds = await this.getSubjectModelIds(ids);\n return this.changeModelsVisibility(modelIds, on);\n }\n\n protected async changeModelState(id: Id64String, on: boolean) {\n if (!this._props.viewport.view.isSpatialView()) {\n return;\n }\n\n return this.changeModelsVisibility([id], on);\n }\n\n protected async changeModelsVisibility(ids: Id64String[], visible: boolean) {\n if (visible) {\n return this._props.viewport.addViewedModels(ids);\n } else {\n this._props.viewport.changeModelDisplay(ids, false);\n }\n }\n\n protected changeCategoryState(categoryId: Id64String, parentModelId: Id64String | undefined, on: boolean) {\n if (parentModelId) {\n const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);\n const ovr =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);\n if (ovr === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n this._props.viewport.changeCategoryDisplay([categoryId], true, true);\n }\n return;\n }\n this._props.viewport.changeCategoryDisplay([categoryId], on, on ? true : false);\n }\n\n protected async changeElementGroupingNodeState(key: ECClassGroupingNodeKey, on: boolean) {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n await this.changeElementsState(modelId, categoryId, elementIds.getElementIds(), on);\n }\n\n protected async changeElementState(id: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined, on: boolean, hasChildren?: boolean) {\n const isDisplayedByDefault = this.isElementDisplayedByDefault(modelId, categoryId);\n const isHiddenDueToExclusiveAlwaysDrawnElements = this.hasExclusiveAlwaysDrawnElements();\n this.changeElementStateInternal(id, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n if (!hasChildren) {\n return;\n }\n\n const childIdsContainer = this.getAssemblyElementIds(id);\n for await (const childId of childIdsContainer.getElementIds()) {\n this.changeElementStateInternal(childId, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n }\n }\n\n protected async changeElementsState(\n modelId: Id64String | undefined,\n categoryId: Id64String | undefined,\n elementIds: AsyncGenerator<Id64String>,\n on: boolean,\n ) {\n const isDisplayedByDefault = this.isElementDisplayedByDefault(modelId, categoryId);\n const isHiddenDueToExclusiveAlwaysDrawnElements = this.hasExclusiveAlwaysDrawnElements();\n for await (const elementId of elementIds) {\n this.changeElementStateInternal(elementId, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n }\n }\n\n private changeElementStateInternal(elementId: Id64String, on: boolean, isDisplayedByDefault: boolean, isHiddenDueToExclusiveAlwaysDrawnElements: boolean) {\n let changedNeverDraw = false;\n let changedAlwaysDrawn = false;\n\n const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);\n const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ? this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);\n\n if (on) {\n changedNeverDraw = changedNeverDraw || currNeverDrawn.delete(elementId);\n if ((!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements) && !currAlwaysDrawn.has(elementId)) {\n currAlwaysDrawn.add(elementId);\n changedAlwaysDrawn = true;\n }\n } else {\n changedAlwaysDrawn = changedAlwaysDrawn || currAlwaysDrawn.delete(elementId);\n if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements && !currNeverDrawn.has(elementId)) {\n currNeverDrawn.add(elementId);\n changedNeverDraw = true;\n }\n }\n\n changedNeverDraw && this._props.viewport.setNeverDrawn(currNeverDrawn);\n changedAlwaysDrawn && this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }\n\n private isElementDisplayedByDefault(modelId: Id64String | undefined, categoryId: Id64String | undefined) {\n return (\n !!modelId &&\n this.getModelDisplayStatus(modelId).state === \"visible\" &&\n !!categoryId &&\n this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\"\n );\n }\n\n private hasExclusiveAlwaysDrawnElements() {\n return this._props.viewport.isAlwaysDrawnExclusive && 0 !== this._props.viewport.alwaysDrawn?.size;\n }\n\n private onVisibilityChangeInternal() {\n if (this._pendingVisibilityChange) {\n return;\n }\n\n this._pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this._pendingVisibilityChange = undefined;\n }, 0);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onViewChanged = (_vp: Viewport) => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementAlwaysDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementNeverDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private getCategoryParentModelId(categoryNode: TreeNodeItem): Id64String | undefined {\n return categoryNode.extendedData ? categoryNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementModelId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementCategoryId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;\n }\n\n private async getSubjectModelIds(subjectIds: Id64String[]) {\n return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id)))).reduce(\n (allModelIds: Id64String[], curr: Id64String[]) => [...allModelIds, ...curr],\n [],\n );\n }\n\n // istanbul ignore next\n private getAssemblyElementIds(assemblyId: Id64String) {\n return this._elementIdsCache.getAssemblyElementIds(assemblyId);\n }\n\n // istanbul ignore next\n private async getGroupedElementIds(groupingNodeKey: GroupingNodeKey) {\n return this._elementIdsCache.getGroupedElementIds(groupingNodeKey);\n }\n}\n\n/** @internal */\nexport class SubjectModelIdsCache {\n private _imodel: IModelConnection;\n private _subjectsHierarchy: Map<Id64String, Id64String[]> | undefined;\n private _subjectModels: Map<Id64String, Id64String[]> | undefined;\n private _init: Promise<void> | undefined;\n\n constructor(imodel: IModelConnection) {\n this._imodel = imodel;\n }\n\n private async initSubjectModels() {\n const querySubjects = async (): Promise<Array<{ id: Id64String; parentId?: Id64String; targetPartitionId?: Id64String }>> => {\n const subjectsQuery = `\n SELECT ECInstanceId id, Parent.Id parentId, json_extract(JsonProperties, '$.Subject.Model.TargetPartition') targetPartitionId\n FROM bis.Subject\n `;\n return this._imodel.createQueryReader(subjectsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n };\n const queryModels = async (): Promise<Array<{ id: Id64String; parentId: Id64String }>> => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.GeometricModel3d m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n return this._imodel.createQueryReader(modelsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n };\n\n function pushToMap<TKey, TValue>(map: Map<TKey, TValue[]>, key: TKey, value: TValue) {\n let list = map.get(key);\n if (!list) {\n list = [];\n map.set(key, list);\n }\n list.push(value);\n }\n\n this._subjectsHierarchy = new Map();\n const targetPartitionSubjects = new Map<Id64String, Id64String[]>();\n for (const subject of await querySubjects()) {\n // istanbul ignore else\n if (subject.parentId) {\n pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);\n }\n // istanbul ignore if\n if (subject.targetPartitionId) {\n pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);\n }\n }\n\n this._subjectModels = new Map();\n for (const model of await queryModels()) {\n // istanbul ignore next\n const subjectIds = targetPartitionSubjects.get(model.id) ?? [];\n // istanbul ignore else\n if (!subjectIds.includes(model.parentId)) {\n subjectIds.push(model.parentId);\n }\n\n subjectIds.forEach((subjectId) => {\n pushToMap(this._subjectModels!, subjectId, model.id);\n });\n }\n }\n\n private async initCache() {\n if (!this._init) {\n this._init = this.initSubjectModels().then(() => {});\n }\n return this._init;\n }\n\n private appendSubjectModelsRecursively(modelIds: Id64String[], subjectId: Id64String) {\n const subjectModelIds = this._subjectModels!.get(subjectId);\n if (subjectModelIds) {\n modelIds.push(...subjectModelIds);\n }\n\n const childSubjectIds = this._subjectsHierarchy!.get(subjectId);\n if (childSubjectIds) {\n childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));\n }\n }\n\n public async getSubjectModelIds(subjectId: Id64String): Promise<Id64String[]> {\n await this.initCache();\n const modelIds = new Array<Id64String>();\n this.appendSubjectModelsRecursively(modelIds, subjectId);\n return modelIds;\n }\n}\n\ninterface GroupedElementIds {\n modelId?: string;\n categoryId?: string;\n elementIds: CachingElementIdsContainer;\n}\n\n// istanbul ignore next\nclass ElementIdsCache {\n private _assemblyElementIdsCache = new Map<string, CachingElementIdsContainer>();\n private _groupedElementIdsCache = new Map<string, GroupedElementIds>();\n\n constructor(\n private _imodel: IModelConnection,\n private _rulesetId: string,\n ) {}\n\n public clear() {\n this._assemblyElementIdsCache.clear();\n this._groupedElementIdsCache.clear();\n }\n\n public getAssemblyElementIds(assemblyId: Id64String) {\n const ids = this._assemblyElementIdsCache.get(assemblyId);\n if (ids) {\n return ids;\n }\n\n const container = createAssemblyElementIdsContainer(this._imodel, this._rulesetId, assemblyId);\n this._assemblyElementIdsCache.set(assemblyId, container);\n return container;\n }\n\n public async getGroupedElementIds(groupingNodeKey: GroupingNodeKey): Promise<GroupedElementIds> {\n const keyString = JSON.stringify(groupingNodeKey);\n const ids = this._groupedElementIdsCache.get(keyString);\n if (ids) {\n return ids;\n }\n const info = await createGroupedElementsInfo(this._imodel, this._rulesetId, groupingNodeKey);\n this._groupedElementIdsCache.set(keyString, info);\n return info;\n }\n}\n\n// istanbul ignore next\nasync function* createInstanceIdsGenerator(imodel: IModelConnection, rulesetId: string, displayType: string, inputKeys: Keys) {\n const res = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n rulesetOrId: rulesetId,\n displayType,\n keys: new KeySet(inputKeys),\n });\n for await (const key of res.items()) {\n yield key.id;\n }\n}\n\n// istanbul ignore next\nfunction createAssemblyElementIdsContainer(imodel: IModelConnection, rulesetId: string, assemblyId: Id64String) {\n return new CachingElementIdsContainer(\n createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [{ className: \"BisCore:Element\", id: assemblyId }]),\n );\n}\n\n// istanbul ignore next\nasync function createGroupedElementsInfo(imodel: IModelConnection, rulesetId: string, groupingNodeKey: GroupingNodeKey) {\n const groupedElementIdsContainer = new CachingElementIdsContainer(\n createInstanceIdsGenerator(imodel, rulesetId, \"AssemblyElementsRequest\", [groupingNodeKey]),\n );\n const elementId = await groupedElementIdsContainer.getElementIds().next();\n if (elementId.done) {\n throw new Error(\"Invalid grouping node key\");\n }\n\n let modelId, categoryId;\n const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;\n const reader = imodel.createQueryReader(query, QueryBinder.from([elementId.value]), { rowFormat: QueryRowFormat.UseJsPropertyNames });\n if (await reader.step()) {\n modelId = reader.current.modelId;\n categoryId = reader.current.categoryId;\n }\n return { modelId, categoryId, elementIds: groupedElementIdsContainer };\n}\n\nconst createTooltip = (status: \"visible\" | \"hidden\" | \"disabled\", tooltipStringId: string | undefined): string => {\n const statusStringId = `modelTree.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n if (!tooltipStringId) {\n return statusString;\n }\n\n tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;\n const tooltipString = TreeWidget.translate(tooltipStringId);\n return `${statusString}: ${tooltipString}`;\n};\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(IModelApp.viewManager, viewport.iModel, true, viewport, false);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsVisibilityHandler.js","sourceRoot":"","sources":["../../../../../src/components/trees/models-tree/ModelsVisibilityHandler.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 { BeEvent } from \"@itwin/core-bentley\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelApp, PerModelCategoryVisibility } from \"@itwin/core-frontend\";\nimport { KeySet, NodeKey } from \"@itwin/presentation-common\";\nimport { isPresentationTreeNodeItem } from \"@itwin/presentation-components\";\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { TreeWidget } from \"../../../TreeWidget\";\nimport { toggleAllCategories } from \"../CategoriesVisibilityUtils\";\nimport { CachingElementIdsContainer } from \"./Utils\";\n\nimport type { TreeNodeItem } from \"@itwin/components-react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport type { IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport type { ECClassGroupingNodeKey, GroupingNodeKey, Keys } from \"@itwin/presentation-common\";\nimport type { IFilteredPresentationTreeDataProvider } from \"@itwin/presentation-components\";\nimport type { IVisibilityHandler, VisibilityChangeListener, VisibilityStatus } from \"../VisibilityTreeEventHandler\";\n\n/**\n * Models tree node types.\n * @public\n */\nexport enum ModelsTreeNodeType {\n Unknown,\n Subject,\n Model,\n Category,\n Element,\n Grouping,\n}\n\n/**\n * Type definition of predicate used to decide if node can be selected\n * @public\n */\nexport type ModelsTreeSelectionPredicate = (key: NodeKey, type: ModelsTreeNodeType) => boolean;\n\n/**\n * Props for [[ModelsVisibilityHandler]]\n * @public\n */\nexport interface ModelsVisibilityHandlerProps {\n rulesetId: string;\n viewport: Viewport;\n hierarchyAutoUpdateEnabled?: boolean;\n /** @internal */\n subjectModelIdsCache?: SubjectModelIdsCache;\n}\n\n/**\n * Visibility handler used by [[ModelsTree]] to control visibility of the tree items.\n * @public\n */\nexport class ModelsVisibilityHandler implements IVisibilityHandler {\n private _props: ModelsVisibilityHandlerProps;\n private _pendingVisibilityChange: any | undefined;\n private _subjectModelIdsCache: SubjectModelIdsCache;\n private _filteredDataProvider?: IFilteredPresentationTreeDataProvider;\n private _elementIdsCache: ElementIdsCache;\n private _listeners = new Array<() => void>();\n\n constructor(props: ModelsVisibilityHandlerProps) {\n this._props = props;\n this._subjectModelIdsCache = props.subjectModelIdsCache ?? new SubjectModelIdsCache(this._props.viewport.iModel);\n this._elementIdsCache = new ElementIdsCache(this._props.viewport.iModel);\n this._listeners.push(this._props.viewport.onViewedCategoriesPerModelChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedCategoriesChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onViewedModelsChanged.addListener(this.onViewChanged));\n this._listeners.push(this._props.viewport.onAlwaysDrawnChanged.addListener(this.onElementAlwaysDrawnChanged));\n this._listeners.push(this._props.viewport.onNeverDrawnChanged.addListener(this.onElementNeverDrawnChanged));\n if (this._props.hierarchyAutoUpdateEnabled) {\n this._listeners.push(Presentation.presentation.onIModelHierarchyChanged.addListener(/* istanbul ignore next */ () => this._elementIdsCache.clear())); // eslint-disable-line @itwin/no-internal\n }\n }\n\n public dispose() {\n this._listeners.forEach((remove) => remove());\n clearTimeout(this._pendingVisibilityChange);\n }\n\n public onVisibilityChange = new BeEvent<VisibilityChangeListener>();\n\n /** Sets data provider that is used to get filtered tree hierarchy. */\n public setFilteredDataProvider(provider: IFilteredPresentationTreeDataProvider | undefined) {\n this._filteredDataProvider = provider;\n }\n\n public static getNodeType(item: TreeNodeItem) {\n if (!isPresentationTreeNodeItem(item)) {\n return ModelsTreeNodeType.Unknown;\n }\n\n if (NodeKey.isClassGroupingNodeKey(item.key)) {\n return ModelsTreeNodeType.Grouping;\n }\n\n if (!item.extendedData) {\n return ModelsTreeNodeType.Unknown;\n }\n\n if (this.isSubjectNode(item)) {\n return ModelsTreeNodeType.Subject;\n }\n if (this.isModelNode(item)) {\n return ModelsTreeNodeType.Model;\n }\n if (this.isCategoryNode(item)) {\n return ModelsTreeNodeType.Category;\n }\n return ModelsTreeNodeType.Element;\n }\n\n public static isSubjectNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isSubject;\n }\n\n public static isModelNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isModel;\n }\n\n public static isCategoryNode(node: TreeNodeItem) {\n return node.extendedData && node.extendedData.isCategory;\n }\n\n /** Returns visibility status of the tree node. */\n public getVisibilityStatus(node: TreeNodeItem): VisibilityStatus | Promise<VisibilityStatus> {\n const nodeKey = isPresentationTreeNodeItem(node) ? node.key : undefined;\n if (!nodeKey) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n return this.getElementGroupingNodeDisplayStatus(node.id, nodeKey);\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey)) {\n return { state: \"hidden\", isDisabled: true };\n }\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.getSubjectNodeVisibility(\n nodeKey.instanceKeys.map((key) => key.id),\n node,\n );\n }\n if (ModelsVisibilityHandler.isModelNode(node)) {\n return this.getModelDisplayStatus(nodeKey.instanceKeys[0].id);\n }\n if (ModelsVisibilityHandler.isCategoryNode(node)) {\n return this.getCategoryDisplayStatus(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node));\n }\n return this.getElementDisplayStatus(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node));\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public async changeVisibility(node: TreeNodeItem, on: boolean) {\n if (!isPresentationTreeNodeItem(node)) {\n return;\n }\n const nodeKey = node.key;\n\n if (NodeKey.isClassGroupingNodeKey(nodeKey)) {\n await this.changeElementGroupingNodeState(nodeKey, on);\n return;\n }\n\n if (!NodeKey.isInstancesNodeKey(nodeKey)) {\n return;\n }\n\n if (ModelsVisibilityHandler.isSubjectNode(node)) {\n await this.changeSubjectNodeState(\n nodeKey.instanceKeys.map((key) => key.id),\n node,\n on,\n );\n } else if (ModelsVisibilityHandler.isModelNode(node)) {\n await this.changeModelState(nodeKey.instanceKeys[0].id, on);\n } else if (ModelsVisibilityHandler.isCategoryNode(node)) {\n this.changeCategoryState(nodeKey.instanceKeys[0].id, this.getCategoryParentModelId(node), on);\n } else {\n await this.changeElementState(nodeKey.instanceKeys[0].id, this.getElementModelId(node), this.getElementCategoryId(node), on, node.hasChildren);\n }\n }\n\n protected async getSubjectNodeVisibility(ids: Id64String[], node: TreeNodeItem): Promise<VisibilityStatus> {\n if (!this._props.viewport.view.isSpatialView()) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"subject.nonSpatialView\") };\n }\n\n if (this._filteredDataProvider) {\n return this.getFilteredSubjectDisplayStatus(this._filteredDataProvider, ids, node);\n }\n\n return this.getSubjectDisplayStatus(ids);\n }\n\n private async getSubjectDisplayStatus(ids: Id64String[]): Promise<VisibilityStatus> {\n const modelIds = await this.getSubjectModelIds(ids);\n const isDisplayed = modelIds.some((modelId) => this.getModelDisplayStatus(modelId).state === \"visible\");\n if (isDisplayed) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n private async getFilteredSubjectDisplayStatus(\n provider: IFilteredPresentationTreeDataProvider,\n ids: Id64String[],\n node: TreeNodeItem,\n ): Promise<VisibilityStatus> {\n if (provider.nodeMatchesFilter(node)) {\n return this.getSubjectDisplayStatus(ids);\n }\n\n const children = await provider.getNodes(node);\n const childrenDisplayStatuses = await Promise.all(children.map(async (childNode) => this.getVisibilityStatus(childNode)));\n if (childrenDisplayStatuses.some((status) => status.state === \"visible\")) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"subject.atLeastOneModelVisible\") };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"subject.allModelsHidden\") };\n }\n\n protected getModelDisplayStatus(id: Id64String): VisibilityStatus {\n if (!this._props.viewport.view.isSpatialView()) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"model.nonSpatialView\") };\n }\n const isDisplayed = this._props.viewport.view.viewsModel(id);\n return { state: isDisplayed ? \"visible\" : \"hidden\", tooltip: createTooltip(isDisplayed ? \"visible\" : \"hidden\", undefined) };\n }\n\n protected getCategoryDisplayStatus(id: Id64String, parentModelId: Id64String | undefined): VisibilityStatus {\n if (parentModelId) {\n if (this.getModelDisplayStatus(parentModelId).state === \"hidden\") {\n return { state: \"hidden\", isDisabled: true, tooltip: createTooltip(\"disabled\", \"category.modelNotDisplayed\") };\n }\n\n const override = this._props.viewport.perModelCategoryVisibility.getOverride(parentModelId, id);\n switch (override) {\n case PerModelCategoryVisibility.Override.Show:\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"category.displayedThroughPerModelOverride\") };\n case PerModelCategoryVisibility.Override.Hide:\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"category.hiddenThroughPerModelOverride\") };\n }\n }\n const isDisplayed = this._props.viewport.view.viewsCategory(id);\n return {\n state: isDisplayed ? \"visible\" : \"hidden\",\n tooltip: isDisplayed\n ? createTooltip(\"visible\", \"category.displayedThroughCategorySelector\")\n : createTooltip(\"hidden\", \"category.hiddenThroughCategorySelector\"),\n };\n }\n\n protected async getElementGroupingNodeDisplayStatus(_id: string, key: ECClassGroupingNodeKey): Promise<VisibilityStatus> {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n\n if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size > 0) {\n let atLeastOneElementForceDisplayed = false;\n for await (const elementId of elementIds.getElementIds()) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n atLeastOneElementForceDisplayed = true;\n break;\n }\n }\n if (atLeastOneElementForceDisplayed) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n }\n\n if (this._props.viewport.alwaysDrawn !== undefined && this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n\n // istanbul ignore else\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.size > 0) {\n let allElementsForceHidden = true;\n for await (const elementId of elementIds.getElementIds()) {\n if (!this._props.viewport.neverDrawn.has(elementId)) {\n allElementsForceHidden = false;\n break;\n }\n }\n if (allElementsForceHidden) {\n return { state: \"hidden\", tooltip: createTooltip(\"visible\", \"element.hiddenThroughNeverDrawnList\") };\n }\n }\n\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\") {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n }\n\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected getElementDisplayStatus(elementId: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined): VisibilityStatus {\n if (!modelId || !this._props.viewport.view.viewsModel(modelId)) {\n return { isDisabled: true, state: \"hidden\", tooltip: createTooltip(\"disabled\", \"element.modelNotDisplayed\") };\n }\n if (this._props.viewport.neverDrawn !== undefined && this._props.viewport.neverDrawn.has(elementId)) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughNeverDrawnList\") };\n }\n if (this._props.viewport.alwaysDrawn !== undefined) {\n if (this._props.viewport.alwaysDrawn.has(elementId)) {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", \"element.displayedThroughAlwaysDrawnList\") };\n }\n if (this._props.viewport.alwaysDrawn.size !== 0 && this._props.viewport.isAlwaysDrawnExclusive) {\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenDueToOtherElementsExclusivelyAlwaysDrawn\") };\n }\n }\n if (categoryId && this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\") {\n return { state: \"visible\", tooltip: createTooltip(\"visible\", undefined) };\n }\n return { state: \"hidden\", tooltip: createTooltip(\"hidden\", \"element.hiddenThroughCategory\") };\n }\n\n protected async changeSubjectNodeState(ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (!this._props.viewport.view.isSpatialView()) {\n return;\n }\n\n if (this._filteredDataProvider) {\n return this.changeFilteredSubjectState(this._filteredDataProvider, ids, node, on);\n }\n\n return this.changeSubjectState(ids, on);\n }\n\n private async changeFilteredSubjectState(provider: IFilteredPresentationTreeDataProvider, ids: Id64String[], node: TreeNodeItem, on: boolean) {\n if (provider.nodeMatchesFilter(node)) {\n return this.changeSubjectState(ids, on);\n }\n\n const children = await provider.getNodes(node);\n return Promise.all(children.map(async (childNode) => this.changeVisibility(childNode, on)));\n }\n\n private async changeSubjectState(ids: Id64String[], on: boolean) {\n const modelIds = await this.getSubjectModelIds(ids);\n return this.changeModelsVisibility(modelIds, on);\n }\n\n protected async changeModelState(id: Id64String, on: boolean) {\n if (!this._props.viewport.view.isSpatialView()) {\n return;\n }\n\n return this.changeModelsVisibility([id], on);\n }\n\n protected async changeModelsVisibility(ids: Id64String[], visible: boolean) {\n if (visible) {\n return this._props.viewport.addViewedModels(ids);\n } else {\n this._props.viewport.changeModelDisplay(ids, false);\n }\n }\n\n protected changeCategoryState(categoryId: Id64String, parentModelId: Id64String | undefined, on: boolean) {\n if (parentModelId) {\n const isDisplayedInSelector = this._props.viewport.view.viewsCategory(categoryId);\n const ovr =\n on === isDisplayedInSelector\n ? PerModelCategoryVisibility.Override.None\n : on\n ? PerModelCategoryVisibility.Override.Show\n : PerModelCategoryVisibility.Override.Hide;\n this._props.viewport.perModelCategoryVisibility.setOverride(parentModelId, categoryId, ovr);\n if (ovr === PerModelCategoryVisibility.Override.None && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n this._props.viewport.changeCategoryDisplay([categoryId], true, true);\n }\n return;\n }\n this._props.viewport.changeCategoryDisplay([categoryId], on, on ? true : false);\n }\n\n protected async changeElementGroupingNodeState(key: ECClassGroupingNodeKey, on: boolean) {\n const { modelId, categoryId, elementIds } = await this.getGroupedElementIds(key);\n await this.changeElementsState(modelId, categoryId, elementIds.getElementIds(), on);\n }\n\n protected async changeElementState(id: Id64String, modelId: Id64String | undefined, categoryId: Id64String | undefined, on: boolean, hasChildren?: boolean) {\n const isDisplayedByDefault = this.isElementDisplayedByDefault(modelId, categoryId);\n const isHiddenDueToExclusiveAlwaysDrawnElements = this.hasExclusiveAlwaysDrawnElements();\n this.changeElementStateInternal(id, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n if (!hasChildren) {\n return;\n }\n\n const childIdsContainer = this.getAssemblyElementIds(id);\n for await (const childId of childIdsContainer.getElementIds()) {\n this.changeElementStateInternal(childId, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n }\n }\n\n protected async changeElementsState(\n modelId: Id64String | undefined,\n categoryId: Id64String | undefined,\n elementIds: AsyncGenerator<Id64String>,\n on: boolean,\n ) {\n const isDisplayedByDefault = this.isElementDisplayedByDefault(modelId, categoryId);\n const isHiddenDueToExclusiveAlwaysDrawnElements = this.hasExclusiveAlwaysDrawnElements();\n for await (const elementId of elementIds) {\n this.changeElementStateInternal(elementId, on, isDisplayedByDefault, isHiddenDueToExclusiveAlwaysDrawnElements);\n }\n }\n\n private changeElementStateInternal(elementId: Id64String, on: boolean, isDisplayedByDefault: boolean, isHiddenDueToExclusiveAlwaysDrawnElements: boolean) {\n let changedNeverDraw = false;\n let changedAlwaysDrawn = false;\n\n const currNeverDrawn = new Set(this._props.viewport.neverDrawn ? this._props.viewport.neverDrawn : []);\n const currAlwaysDrawn = new Set(this._props.viewport.alwaysDrawn ? this._props.viewport.alwaysDrawn : /* istanbul ignore next */ []);\n\n if (on) {\n changedNeverDraw = changedNeverDraw || currNeverDrawn.delete(elementId);\n if ((!isDisplayedByDefault || isHiddenDueToExclusiveAlwaysDrawnElements) && !currAlwaysDrawn.has(elementId)) {\n currAlwaysDrawn.add(elementId);\n changedAlwaysDrawn = true;\n }\n } else {\n changedAlwaysDrawn = changedAlwaysDrawn || currAlwaysDrawn.delete(elementId);\n if (isDisplayedByDefault && !isHiddenDueToExclusiveAlwaysDrawnElements && !currNeverDrawn.has(elementId)) {\n currNeverDrawn.add(elementId);\n changedNeverDraw = true;\n }\n }\n\n changedNeverDraw && this._props.viewport.setNeverDrawn(currNeverDrawn);\n changedAlwaysDrawn && this._props.viewport.setAlwaysDrawn(currAlwaysDrawn, this._props.viewport.isAlwaysDrawnExclusive);\n }\n\n private isElementDisplayedByDefault(modelId: Id64String | undefined, categoryId: Id64String | undefined) {\n return (\n !!modelId &&\n this.getModelDisplayStatus(modelId).state === \"visible\" &&\n !!categoryId &&\n this.getCategoryDisplayStatus(categoryId, modelId).state === \"visible\"\n );\n }\n\n private hasExclusiveAlwaysDrawnElements() {\n return this._props.viewport.isAlwaysDrawnExclusive && 0 !== this._props.viewport.alwaysDrawn?.size;\n }\n\n private onVisibilityChangeInternal() {\n if (this._pendingVisibilityChange) {\n return;\n }\n\n this._pendingVisibilityChange = setTimeout(() => {\n this.onVisibilityChange.raiseEvent();\n this._pendingVisibilityChange = undefined;\n }, 0);\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onViewChanged = (_vp: Viewport) => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementAlwaysDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private onElementNeverDrawnChanged = () => {\n this.onVisibilityChangeInternal();\n };\n\n private getCategoryParentModelId(categoryNode: TreeNodeItem): Id64String | undefined {\n return categoryNode.extendedData ? categoryNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementModelId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.modelId : /* istanbul ignore next */ undefined;\n }\n\n private getElementCategoryId(elementNode: TreeNodeItem): Id64String | undefined {\n return elementNode.extendedData ? elementNode.extendedData.categoryId : /* istanbul ignore next */ undefined;\n }\n\n private async getSubjectModelIds(subjectIds: Id64String[]) {\n return (await Promise.all(subjectIds.map(async (id) => this._subjectModelIdsCache.getSubjectModelIds(id)))).reduce(\n (allModelIds: Id64String[], curr: Id64String[]) => [...allModelIds, ...curr],\n [],\n );\n }\n\n // istanbul ignore next\n private getAssemblyElementIds(assemblyId: Id64String) {\n return this._elementIdsCache.getAssemblyElementIds(assemblyId);\n }\n\n // istanbul ignore next\n private async getGroupedElementIds(groupingNodeKey: GroupingNodeKey) {\n return this._elementIdsCache.getGroupedElementIds(groupingNodeKey);\n }\n}\n\n/** @internal */\nexport class SubjectModelIdsCache {\n private _imodel: IModelConnection;\n private _subjectsHierarchy: Map<Id64String, Id64String[]> | undefined;\n private _subjectModels: Map<Id64String, Id64String[]> | undefined;\n private _init: Promise<void> | undefined;\n\n constructor(imodel: IModelConnection) {\n this._imodel = imodel;\n }\n\n private async initSubjectModels() {\n const querySubjects = async (): Promise<Array<{ id: Id64String; parentId?: Id64String; targetPartitionId?: Id64String }>> => {\n const subjectsQuery = `\n SELECT ECInstanceId id, Parent.Id parentId, json_extract(JsonProperties, '$.Subject.Model.TargetPartition') targetPartitionId\n FROM bis.Subject\n `;\n return this._imodel.createQueryReader(subjectsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n };\n const queryModels = async (): Promise<Array<{ id: Id64String; parentId: Id64String }>> => {\n const modelsQuery = `\n SELECT p.ECInstanceId id, p.Parent.Id parentId\n FROM bis.InformationPartitionElement p\n INNER JOIN bis.GeometricModel3d m ON m.ModeledElement.Id = p.ECInstanceId\n WHERE NOT m.IsPrivate\n `;\n return this._imodel.createQueryReader(modelsQuery, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }).toArray();\n };\n\n function pushToMap<TKey, TValue>(map: Map<TKey, TValue[]>, key: TKey, value: TValue) {\n let list = map.get(key);\n if (!list) {\n list = [];\n map.set(key, list);\n }\n list.push(value);\n }\n\n this._subjectsHierarchy = new Map();\n const targetPartitionSubjects = new Map<Id64String, Id64String[]>();\n for (const subject of await querySubjects()) {\n // istanbul ignore else\n if (subject.parentId) {\n pushToMap(this._subjectsHierarchy, subject.parentId, subject.id);\n }\n // istanbul ignore if\n if (subject.targetPartitionId) {\n pushToMap(targetPartitionSubjects, subject.targetPartitionId, subject.id);\n }\n }\n\n this._subjectModels = new Map();\n for (const model of await queryModels()) {\n // istanbul ignore next\n const subjectIds = targetPartitionSubjects.get(model.id) ?? [];\n // istanbul ignore else\n if (!subjectIds.includes(model.parentId)) {\n subjectIds.push(model.parentId);\n }\n\n subjectIds.forEach((subjectId) => {\n pushToMap(this._subjectModels!, subjectId, model.id);\n });\n }\n }\n\n private async initCache() {\n if (!this._init) {\n this._init = this.initSubjectModels().then(() => {});\n }\n return this._init;\n }\n\n private appendSubjectModelsRecursively(modelIds: Id64String[], subjectId: Id64String) {\n const subjectModelIds = this._subjectModels!.get(subjectId);\n if (subjectModelIds) {\n modelIds.push(...subjectModelIds);\n }\n\n const childSubjectIds = this._subjectsHierarchy!.get(subjectId);\n if (childSubjectIds) {\n childSubjectIds.forEach((cs) => this.appendSubjectModelsRecursively(modelIds, cs));\n }\n }\n\n public async getSubjectModelIds(subjectId: Id64String): Promise<Id64String[]> {\n await this.initCache();\n const modelIds = new Array<Id64String>();\n this.appendSubjectModelsRecursively(modelIds, subjectId);\n return modelIds;\n }\n}\n\ninterface GroupedElementIds {\n modelId?: string;\n categoryId?: string;\n elementIds: CachingElementIdsContainer;\n}\n\n// istanbul ignore next\nclass ElementIdsCache {\n private _assemblyElementIdsCache = new Map<string, CachingElementIdsContainer>();\n private _groupedElementIdsCache = new Map<string, GroupedElementIds>();\n\n constructor(private _imodel: IModelConnection) {}\n\n public clear() {\n this._assemblyElementIdsCache.clear();\n this._groupedElementIdsCache.clear();\n }\n\n public getAssemblyElementIds(assemblyId: Id64String) {\n const ids = this._assemblyElementIdsCache.get(assemblyId);\n if (ids) {\n return ids;\n }\n\n const container = createAssemblyElementIdsContainer(this._imodel, assemblyId);\n this._assemblyElementIdsCache.set(assemblyId, container);\n return container;\n }\n\n public async getGroupedElementIds(groupingNodeKey: GroupingNodeKey): Promise<GroupedElementIds> {\n const keyString = JSON.stringify(groupingNodeKey);\n const ids = this._groupedElementIdsCache.get(keyString);\n if (ids) {\n return ids;\n }\n const info = await createGroupedElementsInfo(this._imodel, groupingNodeKey);\n this._groupedElementIdsCache.set(keyString, info);\n return info;\n }\n}\n\n// istanbul ignore next\nasync function* createInstanceIdsGenerator(imodel: IModelConnection, inputKeys: Keys) {\n const res = await Presentation.presentation.getContentInstanceKeys({\n imodel,\n rulesetOrId: {\n id: \"ModelsTree/AssemblyElements\",\n rules: [\n {\n ruleType: \"Content\",\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 keys: new KeySet(inputKeys),\n });\n for await (const key of res.items()) {\n yield key.id;\n }\n}\n\n// istanbul ignore next\nfunction createAssemblyElementIdsContainer(imodel: IModelConnection, assemblyId: Id64String) {\n return new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, [{ className: \"BisCore:Element\", id: assemblyId }]));\n}\n\n// istanbul ignore next\nasync function createGroupedElementsInfo(imodel: IModelConnection, groupingNodeKey: GroupingNodeKey) {\n const groupedElementIdsContainer = new CachingElementIdsContainer(createInstanceIdsGenerator(imodel, [groupingNodeKey]));\n const elementId = await groupedElementIdsContainer.getElementIds().next();\n if (elementId.done) {\n throw new Error(\"Invalid grouping node key\");\n }\n\n let modelId, categoryId;\n const query = `SELECT Model.Id AS modelId, Category.Id AS categoryId FROM bis.GeometricElement3d WHERE ECInstanceId = ? LIMIT 1`;\n const reader = imodel.createQueryReader(query, QueryBinder.from([elementId.value]), { rowFormat: QueryRowFormat.UseJsPropertyNames });\n if (await reader.step()) {\n modelId = reader.current.modelId;\n categoryId = reader.current.categoryId;\n }\n return { modelId, categoryId, elementIds: groupedElementIdsContainer };\n}\n\nconst createTooltip = (status: \"visible\" | \"hidden\" | \"disabled\", tooltipStringId: string | undefined): string => {\n const statusStringId = `modelTree.status.${status}`;\n const statusString = TreeWidget.translate(statusStringId);\n if (!tooltipStringId) {\n return statusString;\n }\n\n tooltipStringId = `modelTree.tooltips.${tooltipStringId}`;\n const tooltipString = TreeWidget.translate(tooltipStringId);\n return `${statusString}: ${tooltipString}`;\n};\n\n/**\n * Enables display of all given models. Also enables display of all categories and clears always and\n * never drawn lists in the viewport.\n * @public\n */\nexport async function showAllModels(models: string[], viewport: Viewport) {\n await viewport.addViewedModels(models);\n viewport.clearNeverDrawn();\n viewport.clearAlwaysDrawn();\n await toggleAllCategories(IModelApp.viewManager, viewport.iModel, true, viewport, false);\n}\n\n/**\n * Disables display of all given models.\n * @public\n */\nexport async function hideAllModels(models: string[], viewport: Viewport) {\n viewport.changeModelDisplay(models, false);\n}\n\n/**\n * Inverts display of all given models.\n * @public\n */\nexport async function invertAllModels(models: string[], viewport: Viewport) {\n const notViewedModels: string[] = [];\n const viewedModels: string[] = [];\n models.forEach((modelId) => {\n if (viewport.viewsModel(modelId)) {\n viewedModels.push(modelId);\n } else {\n notViewedModels.push(modelId);\n }\n });\n await viewport.addViewedModels(notViewedModels);\n viewport.changeModelDisplay(viewedModels, false);\n}\n\n/**\n * Based on the value of `enable` argument, either enables or disables display of given models.\n * @public\n */\nexport async function toggleModels(models: string[], enable: boolean, viewport: Viewport) {\n // istanbul ignore if\n if (!models) {\n return;\n }\n if (enable) {\n viewport.changeModelDisplay(models, false);\n } else {\n await viewport.addViewedModels(models);\n }\n}\n\n/**\n * Checks if all given models are displayed in given viewport.\n * @public\n */\nexport function areAllModelsVisible(models: string[], viewport: Viewport) {\n return models.length !== 0 ? models.every((id) => viewport.viewsModel(id)) : false;\n}\n"]}
|
|
@@ -167,28 +167,6 @@ export function createRuleset(props) {
|
|
|
167
167
|
},
|
|
168
168
|
],
|
|
169
169
|
},
|
|
170
|
-
{
|
|
171
|
-
ruleType: "Content",
|
|
172
|
-
condition: `ContentDisplayType = "AssemblyElementsRequest"`,
|
|
173
|
-
specifications: [
|
|
174
|
-
{
|
|
175
|
-
specType: "SelectedNodeInstances",
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
specType: "ContentRelatedInstances",
|
|
179
|
-
relationshipPaths: [
|
|
180
|
-
{
|
|
181
|
-
relationship: {
|
|
182
|
-
schemaName: "BisCore",
|
|
183
|
-
className: "ElementOwnsChildElements",
|
|
184
|
-
},
|
|
185
|
-
direction: "Forward",
|
|
186
|
-
count: "*",
|
|
187
|
-
},
|
|
188
|
-
],
|
|
189
|
-
},
|
|
190
|
-
],
|
|
191
|
-
},
|
|
192
170
|
],
|
|
193
171
|
};
|
|
194
172
|
}
|
|
@@ -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 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
|
+
{"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 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 };\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/tree-widget-react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Tree Widget React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Bentley",
|
|
@@ -66,30 +66,30 @@
|
|
|
66
66
|
"rxjs": "^7.8.1"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@itwin/appui-abstract": "^4.
|
|
69
|
+
"@itwin/appui-abstract": "^4.5.1",
|
|
70
70
|
"@itwin/appui-react": "^4.10.0",
|
|
71
|
-
"@itwin/build-tools": "^4.
|
|
71
|
+
"@itwin/build-tools": "^4.5.1",
|
|
72
72
|
"@itwin/components-react": "^4.10.0",
|
|
73
|
-
"@itwin/core-backend": "^4.
|
|
74
|
-
"@itwin/core-bentley": "^4.
|
|
75
|
-
"@itwin/core-common": "^4.
|
|
76
|
-
"@itwin/core-frontend": "^4.
|
|
77
|
-
"@itwin/core-geometry": "^4.
|
|
78
|
-
"@itwin/core-i18n": "^4.
|
|
79
|
-
"@itwin/core-markup": "^4.
|
|
80
|
-
"@itwin/core-orbitgt": "
|
|
81
|
-
"@itwin/core-quantity": "^4.
|
|
73
|
+
"@itwin/core-backend": "^4.5.1",
|
|
74
|
+
"@itwin/core-bentley": "^4.5.1",
|
|
75
|
+
"@itwin/core-common": "^4.5.1",
|
|
76
|
+
"@itwin/core-frontend": "^4.5.1",
|
|
77
|
+
"@itwin/core-geometry": "^4.5.1",
|
|
78
|
+
"@itwin/core-i18n": "^4.5.1",
|
|
79
|
+
"@itwin/core-markup": "^4.5.1",
|
|
80
|
+
"@itwin/core-orbitgt": "4.5.1",
|
|
81
|
+
"@itwin/core-quantity": "^4.5.1",
|
|
82
82
|
"@itwin/core-react": "^4.10.0",
|
|
83
|
-
"@itwin/core-telemetry": "^4.
|
|
84
|
-
"@itwin/ecschema-metadata": "^4.
|
|
83
|
+
"@itwin/core-telemetry": "^4.5.1",
|
|
84
|
+
"@itwin/ecschema-metadata": "^4.5.1",
|
|
85
85
|
"@itwin/eslint-plugin": "^4.0.0-dev.38",
|
|
86
86
|
"@itwin/imodel-components-react": "^4.10.0",
|
|
87
|
-
"@itwin/presentation-backend": "^4.
|
|
88
|
-
"@itwin/presentation-common": "^4.
|
|
89
|
-
"@itwin/presentation-components": "^5.
|
|
90
|
-
"@itwin/presentation-frontend": "^4.
|
|
91
|
-
"@itwin/presentation-testing": "^5.0.
|
|
92
|
-
"@itwin/webgl-compatibility": "^4.
|
|
87
|
+
"@itwin/presentation-backend": "^4.5.1",
|
|
88
|
+
"@itwin/presentation-common": "^4.5.1",
|
|
89
|
+
"@itwin/presentation-components": "^5.2.0",
|
|
90
|
+
"@itwin/presentation-frontend": "^4.5.1",
|
|
91
|
+
"@itwin/presentation-testing": "^5.0.3",
|
|
92
|
+
"@itwin/webgl-compatibility": "^4.5.1",
|
|
93
93
|
"@playwright/test": "^1.41.2",
|
|
94
94
|
"@testing-library/dom": "^9.3.3",
|
|
95
95
|
"@testing-library/react": "^14.1.2",
|