@babylonjs/viewer 6.34.0 → 6.34.2

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/index.js CHANGED
@@ -10,6 +10,7 @@ import { AnimationPlayMode, AnimationState } from "./model/modelAnimation.js";
10
10
  import { AbstractViewerNavbarButton } from "./templating/viewerTemplatePlugin.js";
11
11
  // eslint-disable-next-line import/no-internal-modules
12
12
  import { registerCustomOptimizer } from "./optimizer/custom/index.js";
13
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
13
14
  /**
14
15
  * BabylonJS Viewer
15
16
  *
@@ -34,7 +35,7 @@ function disposeAll() {
34
35
  telemetryManager.dispose();
35
36
  }
36
37
  var Version = viewerGlobals.version;
37
- console.log("Babylon.js viewer (v" + Version + ")");
38
+ Logger.Log("Babylon.js viewer (v" + Version + ")");
38
39
  // public API for initialization
39
40
  export { BABYLON, Version, InitTags, DefaultViewer, AbstractViewer, viewerGlobals, telemetryManager, disableInit, viewerManager, mapperManager, disposeAll, ModelLoader, ViewerModel, AnimationPlayMode, AnimationState, ModelState, AbstractViewerNavbarButton, registerCustomOptimizer, };
40
41
  // eslint-disable-next-line import/no-internal-modules
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../tools/viewer/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;GAIG;AAEH,sDAAsD;AACtD,OAAO,KAAK,OAAO,iCAAmB;AAEtC,uBAAuB;AACvB,sDAAsD;AACtD,qCAAuB;AACvB,OAAO,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,aAAa,EAAE,CAAC;AAEhB,8CAA8C;AAC9C,IAAM,WAAW,GAAY,aAAa,CAAC,WAAW,CAAC;AAEvD;;GAEG;AACH,SAAS,UAAU;IACf,aAAa,CAAC,OAAO,EAAE,CAAC;IACxB,aAAa,CAAC,OAAO,EAAE,CAAC;IACxB,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,IAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;AAEtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;AAEpD,gCAAgC;AAChC,OAAO,EACH,OAAO,EACP,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EAEV,0BAA0B,EAC1B,uBAAuB,GAC1B,CAAC;AACF,sDAAsD;AACtD,OAAO,EAAE,KAAK,EAAE,yCAA2B;AAC3C,gDAAgD;AAChD,sDAAsD;AACtD,cAAc,uBAAuB,CAAC","sourcesContent":["import { mapperManager } from \"./configuration/mappers\";\r\nimport { viewerGlobals } from \"./configuration/globals\";\r\nimport { viewerManager } from \"./viewer/viewerManager\";\r\nimport { DefaultViewer } from \"./viewer/defaultViewer\";\r\nimport { AbstractViewer } from \"./viewer/viewer\";\r\nimport { telemetryManager } from \"./managers/telemetryManager\";\r\nimport { ModelLoader } from \"./loader/modelLoader\";\r\nimport { ViewerModel, ModelState } from \"./model/viewerModel\";\r\nimport { AnimationPlayMode, AnimationState } from \"./model/modelAnimation\";\r\nimport { ILoaderPlugin } from \"./loader/plugins/loaderPlugin\";\r\nimport { AbstractViewerNavbarButton } from \"./templating/viewerTemplatePlugin\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { registerCustomOptimizer } from \"./optimizer/custom/index\";\r\n\r\n/**\r\n * BabylonJS Viewer\r\n *\r\n * An HTML-Based viewer for 3D models, based on BabylonJS and its extensions.\r\n */\r\n\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport * as BABYLON from \"core/index\";\r\n\r\n// load needed modules.\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport \"loaders/index\";\r\nimport \"pepjs\";\r\n\r\nimport { initListeners, InitTags } from \"./initializer\";\r\n\r\ninitListeners();\r\n\r\n//deprecated, here for backwards compatibility\r\nconst disableInit: boolean = viewerGlobals.disableInit;\r\n\r\n/**\r\n * Dispose all viewers currently registered\r\n */\r\nfunction disposeAll() {\r\n viewerManager.dispose();\r\n mapperManager.dispose();\r\n telemetryManager.dispose();\r\n}\r\n\r\nconst Version = viewerGlobals.version;\r\n\r\nconsole.log(\"Babylon.js viewer (v\" + Version + \")\");\r\n\r\n// public API for initialization\r\nexport {\r\n BABYLON,\r\n Version,\r\n InitTags,\r\n DefaultViewer,\r\n AbstractViewer,\r\n viewerGlobals,\r\n telemetryManager,\r\n disableInit,\r\n viewerManager,\r\n mapperManager,\r\n disposeAll,\r\n ModelLoader,\r\n ViewerModel,\r\n AnimationPlayMode,\r\n AnimationState,\r\n ModelState,\r\n ILoaderPlugin,\r\n AbstractViewerNavbarButton,\r\n registerCustomOptimizer,\r\n};\r\n// eslint-disable-next-line import/no-internal-modules\r\nexport { GLTF2 } from \"loaders/glTF/index\";\r\n// export publicliy all configuration interfaces\r\n// eslint-disable-next-line import/no-internal-modules\r\nexport * from \"./configuration/index\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../tools/viewer/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,sDAAsD;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,uCAAyB;AAE1C;;;;GAIG;AAEH,sDAAsD;AACtD,OAAO,KAAK,OAAO,iCAAmB;AAEtC,uBAAuB;AACvB,sDAAsD;AACtD,qCAAuB;AACvB,OAAO,OAAO,CAAC;AAEf,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,aAAa,EAAE,CAAC;AAEhB,8CAA8C;AAC9C,IAAM,WAAW,GAAY,aAAa,CAAC,WAAW,CAAC;AAEvD;;GAEG;AACH,SAAS,UAAU;IACf,aAAa,CAAC,OAAO,EAAE,CAAC;IACxB,aAAa,CAAC,OAAO,EAAE,CAAC;IACxB,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,IAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;AAEtC,MAAM,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;AAEnD,gCAAgC;AAChC,OAAO,EACH,OAAO,EACP,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EAEV,0BAA0B,EAC1B,uBAAuB,GAC1B,CAAC;AACF,sDAAsD;AACtD,OAAO,EAAE,KAAK,EAAE,yCAA2B;AAC3C,gDAAgD;AAChD,sDAAsD;AACtD,cAAc,uBAAuB,CAAC","sourcesContent":["import { mapperManager } from \"./configuration/mappers\";\r\nimport { viewerGlobals } from \"./configuration/globals\";\r\nimport { viewerManager } from \"./viewer/viewerManager\";\r\nimport { DefaultViewer } from \"./viewer/defaultViewer\";\r\nimport { AbstractViewer } from \"./viewer/viewer\";\r\nimport { telemetryManager } from \"./managers/telemetryManager\";\r\nimport { ModelLoader } from \"./loader/modelLoader\";\r\nimport { ViewerModel, ModelState } from \"./model/viewerModel\";\r\nimport { AnimationPlayMode, AnimationState } from \"./model/modelAnimation\";\r\nimport { ILoaderPlugin } from \"./loader/plugins/loaderPlugin\";\r\nimport { AbstractViewerNavbarButton } from \"./templating/viewerTemplatePlugin\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { registerCustomOptimizer } from \"./optimizer/custom/index\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * BabylonJS Viewer\r\n *\r\n * An HTML-Based viewer for 3D models, based on BabylonJS and its extensions.\r\n */\r\n\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport * as BABYLON from \"core/index\";\r\n\r\n// load needed modules.\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport \"loaders/index\";\r\nimport \"pepjs\";\r\n\r\nimport { initListeners, InitTags } from \"./initializer\";\r\n\r\ninitListeners();\r\n\r\n//deprecated, here for backwards compatibility\r\nconst disableInit: boolean = viewerGlobals.disableInit;\r\n\r\n/**\r\n * Dispose all viewers currently registered\r\n */\r\nfunction disposeAll() {\r\n viewerManager.dispose();\r\n mapperManager.dispose();\r\n telemetryManager.dispose();\r\n}\r\n\r\nconst Version = viewerGlobals.version;\r\n\r\nLogger.Log(\"Babylon.js viewer (v\" + Version + \")\");\r\n\r\n// public API for initialization\r\nexport {\r\n BABYLON,\r\n Version,\r\n InitTags,\r\n DefaultViewer,\r\n AbstractViewer,\r\n viewerGlobals,\r\n telemetryManager,\r\n disableInit,\r\n viewerManager,\r\n mapperManager,\r\n disposeAll,\r\n ModelLoader,\r\n ViewerModel,\r\n AnimationPlayMode,\r\n AnimationState,\r\n ModelState,\r\n ILoaderPlugin,\r\n AbstractViewerNavbarButton,\r\n registerCustomOptimizer,\r\n};\r\n// eslint-disable-next-line import/no-internal-modules\r\nexport { GLTF2 } from \"loaders/glTF/index\";\r\n// export publicliy all configuration interfaces\r\n// eslint-disable-next-line import/no-internal-modules\r\nexport * from \"./configuration/index\";\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/viewer",
3
- "version": "6.34.0",
3
+ "version": "6.34.2",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
@@ -18,10 +18,10 @@
18
18
  "postcompile": "build-tools -c add-js-to-es6"
19
19
  },
20
20
  "dependencies": {
21
- "@babylonjs/core": "^6.34.0",
22
- "@babylonjs/loaders": "^6.34.0",
23
- "babylonjs-gltf2interface": "^6.34.0",
24
- "babylonjs-viewer-assets": "^6.34.0",
21
+ "@babylonjs/core": "^6.34.2",
22
+ "@babylonjs/loaders": "^6.34.2",
23
+ "babylonjs-gltf2interface": "^6.34.2",
24
+ "babylonjs-viewer-assets": "^6.34.2",
25
25
  "deepmerge": "~4.2.2",
26
26
  "handlebars": "~4.7.7",
27
27
  "pepjs": "~0.5.3",
@@ -11,6 +11,7 @@ import { extendClassWithConfig } from "../helper/index.js";
11
11
  import { AnimationState } from "../model/modelAnimation.js";
12
12
  import { HDButtonPlugin } from "../templating/plugins/hdButtonPlugin.js";
13
13
  import { PrintButtonPlugin } from "../templating/plugins/printButton.js";
14
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
14
15
  import "@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js";
15
16
  /**
16
17
  * The Default viewer is the default implementation of the AbstractViewer.
@@ -449,7 +450,7 @@ var DefaultViewer = /** @class */ (function (_super) {
449
450
  }
450
451
  this.showLoadingScreen();
451
452
  return _super.prototype.loadModel.call(this, model, true).catch(function (error) {
452
- console.log(error);
453
+ Logger.Log(error);
453
454
  _this.hideLoadingScreen();
454
455
  _this.showOverlayScreen("error");
455
456
  return Promise.reject(error);
@@ -1 +1 @@
1
- {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAClD,OAAO,EAAE,SAAS,EAAE,4CAA8B;AAClD,OAAO,EAAE,OAAO,EAAE,sCAAwB;AAE1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,sDAAwC;AACnE,OAAO,EAAE,WAAW,EAAE,qDAAuC;AAC7D,sDAAsD;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAMtE,yEAA2D;AAE3D;;;GAGG;AACH;IAAmC,iCAA0B;IAQzD;;;;OAIG;IACH,uBACW,gBAAyB,EAChC,oBAAkE;QAAlE,qCAAA,EAAA,yBAA8C,OAAO,EAAE,SAAS,EAAE;QAFtE,YAII,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAiChD;QApCU,sBAAgB,GAAhB,gBAAgB,CAAS;QAsC5B,wBAAkB,GAAiC,EAAE,CAAC;QA2ItD,yBAAmB,GAAG,UAAC,KAAoB;YAC/C,IAAM,WAAW,GAAiB,KAAK,CAAC,KAAK,CAAC;YAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO;aACV;YACD,IAAM,OAAO,GAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO;aACV;YAED,IAAM,aAAa,GAAG,OAAO,CAAC,aAAc,CAAC,SAAS,CAAC;YAEvD,IAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;YAEzC,IAAI,WAAW,GAAG,EAAE,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC5C,IAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7E,WAAW,GAAG,SAAS,CAAC;oBACxB,MAAM;iBACT;aACJ;YAED,QAAQ,WAAW,EAAE;gBACjB,KAAK,cAAc,CAAC;gBACpB,KAAK,cAAc;oBACf,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAChC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;qBAChC;yBAAM;wBACH,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;qBAC7B;oBACD,MAAM;gBACV,KAAK,mBAAmB;oBACpB,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,MAAM;gBACV,KAAK,qBAAqB,CAAC,CAAC;oBACxB,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACvC,IAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;oBAC5D,IAAI,KAAK,IAAI,KAAK,EAAE;wBAChB,KAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;qBAC9E;oBACD,MAAM;iBACT;gBACD,KAAK,qBAAqB,CAAC,CAAC;oBACxB,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;wBACzB,OAAO;qBACV;oBACD,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACvC,IAAI,KAAK,EAAE;wBACP,KAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;qBACrC;oBACD,MAAM;iBACT;gBACD,KAAK,kBAAkB;oBACnB,KAAI,CAAC,WAAW,GAAG,CAAC,KAAI,CAAC,kBAAkB,CAAC;oBAC5C,IAAI,KAAI,CAAC,WAAW,EAAE;wBAClB,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBACD,MAAM;gBACV,KAAK,mBAAmB;oBACpB,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,MAAM;gBACV,KAAK,WAAW;oBACZ,KAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM;gBACV;oBACI,OAAO;aACd;QACL,CAAC,CAAC;QAEF;;;WAGG;QACK,sBAAgB,GAAG,UAAC,UAAoB;YAC5C,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;gBACzB,OAAO;aACV;YACD,IAAI,KAAI,CAAC,kBAAkB,EAAE;gBACzB,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;aACpC;iBAAM;gBACH,KAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;aAClC;YAED,KAAI,CAAC,kBAAkB,GAAG,CAAC,KAAI,CAAC,kBAAkB,CAAC;YAEnD,IAAI,UAAU,EAAE;gBACZ,OAAO;aACV;YAED,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO;aACV;YAED,MAAM,CAAC,YAAY,CAAC;gBAChB,MAAM,EAAE,KAAI,CAAC,kBAAkB;aAClC,CAAC,CAAC;QACP,CAAC,CAAC;QAIF;;WAEG;QACK,wBAAkB,GAAG;YACzB,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO;aACV;YACD,IAAM,cAAc,GAAqB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;YAC/F,IAAI,cAAc,IAAI,KAAI,CAAC,iBAAiB,EAAE;gBAC1C,IAAM,QAAQ,GAAG,CAAC,KAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBAC7F,IAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC;gBAClD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE;oBACzC,wCAAwC;oBACxC,cAAc,CAAC,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;iBACxC;gBAED,IAAI,KAAI,CAAC,iBAAiB,CAAC,KAAK,KAAK,cAAc,CAAC,OAAO,EAAE;oBACzD,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,KAAI,CAAC,qBAAqB,EAAE;wBAC9E,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;wBAC7F,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,CAAC,CAAC;qBACvE;iBACJ;qBAAM;oBACH,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,IAAI,KAAI,CAAC,qBAAqB,EAAE;wBAC7E,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,KAAI,CAAC,qBAAqB,CAAC;wBAC7F,KAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;qBAClC;iBACJ;aACJ;QACL,CAAC,CAAC;QAEF;;;;WAIG;QACK,2BAAqB,GAAG,UAAC,KAAa,EAAE,YAAkB;YAC9D,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO;aACV;YAED,IAAI,KAAK,IAAI,KAAI,CAAC,iBAAiB,EAAE;gBACjC,KAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;oBAC1B,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;iBACpC;gBAED,IAAI,YAAY,EAAE;oBACd,YAAY,CAAC,aAAa,GAAG,KAAK,GAAG,GAAG,CAAC;iBAC5C;qBAAM;oBACH,MAAM,CAAC,YAAY,CAAC;wBAChB,aAAa,EAAE,KAAK,GAAG,GAAG;qBAC7B,CAAC,CAAC;iBACN;aACJ;QACL,CAAC,CAAC;QAEF;;;;;;WAMG;QACK,0BAAoB,GAAG,UAAC,IAAsC,EAAE,YAAkB;YACtF,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO;aACV;YAED,IAAI,IAAI,EAAE;gBACN,KAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9F;YAED,IAAI,YAAY,EAAE;gBACd,YAAY,CAAC,iBAAiB,GAAG,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7E,YAAY,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;aACnD;iBAAM;gBACH,MAAM,CAAC,YAAY,CAAC;oBAChB,iBAAiB,EAAE,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBAC9D,qBAAqB,EAAE,IAAI,CAAC,KAAK;iBACpC,CAAC,CAAC;aACN;YAED,KAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC,CAAC;QAiBF;;WAEG;QACI,sBAAgB,GAAG;YACtB,IAAM,cAAc,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAM,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC;YAC9D,IAAM,iBAAiB,GAAG,KAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC;YAElE,IAAI,iBAAiB,EAAE;gBACnB,IAAM,cAAc,GACV,QAAS,CAAC,iBAAiB,IAAU,QAAS,CAAC,uBAAuB,IAAU,QAAS,CAAC,oBAAoB,IAAU,QAAS,CAAC,mBAAmB,CAAC;gBAChK,IAAI,CAAC,cAAc,EAAE;oBACjB,IAAM,iBAAiB,GACnB,iBAAiB,CAAC,iBAAiB;wBAC7B,iBAAkB,CAAC,uBAAuB;wBAC1C,iBAAkB,CAAC,mBAAmB;wBACtC,iBAAkB,CAAC,oBAAoB,CAAC;oBAClD,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC1C,IAAI,aAAa,EAAE;wBACf,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;qBAChD;iBACJ;qBAAM;oBACH,IAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAU,QAAS,CAAC,oBAAoB,IAAU,QAAS,CAAC,gBAAgB,IAAU,QAAS,CAAC,mBAAmB,CAAC;oBAClK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9B,IAAI,aAAa,EAAE;wBACf,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;qBACnD;iBACJ;aACJ;QACL,CAAC,CAAC;QA4EM,oBAAc,GAAG,UAAC,KAAkB;YACxC,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC/B,iEAAiE;YACjE,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,IAAI,KAAI,CAAC,aAAa,CAAC,GAAG,IAAI,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,EAAE;gBACjF,gBAAgB,GAAG,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;aAC9D;YACD,UAAU,CAAC;gBACP,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACrC,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAErB,OAAO;QACX,CAAC,CAAC;QAlfE,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC;QACtD,KAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;YAC9B,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;YAC5B,KAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,CAAC;gBAC/C,KAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,KAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,UAAU,WAAgC;gBAC7E,IAAM,IAAI,GAAG,WAAW,CAAC,eAAe,CAAC;gBACzC,IAAI,CAAC,IAAI,EAAE;oBACP,OAAO;iBACV;gBACD,IACI,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,kBAAkB,CAAC;oBACtG,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,aAAa,CAAC,EAC9F;oBACE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;wBAClC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpF;yBAAM;wBACH,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/E;iBACJ;gBACD,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC,CAAC;YACF,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClC,KAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAIM,8CAAsB,GAA7B,UAA8B,MAA6B;QAA3D,iBA+BC;QA9BG,UAAU;QACV,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,mBAAY,MAAM,CAAC,YAAY,eAAY,CAAC,CAAC;SAChE;QACD,IAAI,MAAM,CAAC,eAAe,EAAE;YACxB,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,UAAC,IAAI;gBAC7B,MAAM,CAAC,eAAgB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,MAAM,EAAE,CAAC;SACrB;QAED,IAAI,MAAM,CAAC,cAAc,EAAE;YACvB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,SAAS;gBACpC,MAAM,CAAC,OAAO;oBACV,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAC9C,MAAM,CAAC,YAAY,EACnB,UAAC,KAAK;wBACF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;4BACtD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;yBACzB;oBACL,CAAC,EACD,SAAS,CACZ,CAAC;YACV,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;OAEG;IACO,0CAAkB,GAA5B;QAAA,iBAuCC;QAtCG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,SAAS;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,uBAAuB;QACvB,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE;YACV,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YACnE,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,gBAAgB,CAAC,aAAa,EAAE;oBACxC,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACN;SACJ;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE;YACrE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;gBAC5G,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBAC/B,IAAM,UAAU,GAAG,IAAI,UAAU,CAC7B,KAAI,CAAC,MAAM,EACX,KAAI,CAAC,YAAY,CAAC,KAAK,EACvB,cAAO,CAAC,EACR,cAAO,CAAC,EACR,cAAO,CAAC,EACR,cAAO,CAAC,EACR,cAAa,CAAC,EACd,UAAC,IAAU;wBACP,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC,EACD,cAAO,CAAC,CACX,CAAC;oBACF,UAAU,CAAC,0BAA0B,CAAC,KAAI,CAAC,eAAe,CAAC,SAAS,EAAG,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;aACN;SACJ;QAED,OAAO,iBAAM,kBAAkB,WAAE,CAAC;IACtC,CAAC;IAEO,mCAAW,GAAnB;QAAA,iBAqDC;QApDG,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAChG,iEAAiE;YACjE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAC9C,QAAQ,EACR;gBACI,gBAAgB;YACpB,CAAC,EACD,aAAa,EACb,cAAc,CACjB,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAC9C,QAAQ,EACR,UAAC,KAAoB;gBACjB,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxB,IAAM,OAAO,GAAqB,GAAG,CAAC,MAAM,CAAC;gBAC7C,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;oBACzB,OAAO;iBACV;gBACD,IAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACzE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;oBAClB,OAAO;iBACV;gBACD,KAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC,EACD,OAAO,CACV,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAC9C,QAAQ,EACR;gBACI,IAAI,KAAI,CAAC,WAAW,EAAE;oBAClB,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBACD,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7B,CAAC,EACD,WAAW,EACX,mBAAmB,CACtB,CAAC;YAEF,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC3G,MAAM,CAAC,YAAY,CAAC;oBAChB,YAAY,EAAE,IAAI;iBACrB,CAAC,CAAC;aACN;YAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,sBAAsB,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5D;IACL,CAAC;IAuMS,+BAAO,GAAjB;QAAA,iBAaC;QAZG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC5B,2EAA2E;YAC3E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;gBACvC,IAAM,cAAc,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClE,IAAM,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC;gBAE9D,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC3C;YACL,CAAC,CAAC,CAAC;SACN;QACD,iBAAM,OAAO,WAAE,CAAC;IACpB,CAAC;IAiCD;;OAEG;IACO,gDAAwB,GAAlC;QACI,IAAM,WAAW,GAAG,IAAI,CAAC,gBAA+B,CAAC;QACzD,IAAI,WAAW,CAAC,KAAK,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACxC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;SACtC;IACL,CAAC;IAED;;;;OAIG;IACO,0CAAkB,GAA5B,UAA6B,KAAmB;QAC5C,IAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QAED,IAAM,SAAS,GAAQ,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAEzD,IAAI,CAAC,KAAK,EAAE;YACR,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;SAC/B;aAAM;YACH,IAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACjD,SAAS,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,UAAC,CAAC;gBACxC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,IAAI,cAAc,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;gBACxI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;gBACrC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;oBAC9F,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBACjF,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;wBACvB,cAAc,GAAG,CAAC,CAAC;qBACtB;iBACJ;gBACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;aAC9E;iBAAM;gBACH,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;aAC/B;YAED,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;gBAC/B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;aACvD;SACJ;QACD,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,iCAAS,GAAhB,UAAiB,KAA2C;QAA5D,iBAWC;QAVG,IAAI,CAAC,KAAK,EAAE;YACR,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;SACpC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,iBAAM,SAAS,YAAC,KAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,KAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,KAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAkBD;;;;OAIG;IACI,yCAAiB,GAAxB,UAAyB,SAAiB;QAA1C,iBAuBC;QAtBG,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;SACxD;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC1B,IAAM,UAAU,GAAG,KAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YAEjE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAEpC,IAAM,WAAW,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAChE,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,qBAAqB,CAAC,CAAC;aAC5D;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,UAAC,QAAQ;gBAC7B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACvC,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,yCAAiB,GAAxB;QACI,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;SACxD;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC1B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,IAAM,eAAe,GAAG;gBACpB,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;gBACtE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAEnE,IAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,QAAQ,EAAE;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBACtC,IAAM,WAAW,GAAgB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClD,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;iBACtC;aACJ;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACI,4BAAI,GAAX,UAAY,kBAA8D;QACtE,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1D,wBAAwB;QACxB,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;SACpD;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACI,4BAAI,GAAX,UAAY,kBAA8D;QACtE,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1D,wBAAwB;QACxB,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;SACpD;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,yCAAiB,GAAxB;QAAA,iBAsBC;QArBG,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;SAC/D;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC1B,IAAM,UAAU,GAAG,KAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YACjE,mFAAmF;YAEnF,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,4BAA4B;YAC5B,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,IAAI,KAAI,CAAC,aAAa,CAAC,SAAS,IAAI,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE;gBAC5E,KAAK,GAAG,CAAC,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,IAAY,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;aACrJ;YACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,yCAAiB,GAAxB;QACI,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;SAC/D;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,QAAQ;YAC1B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,IAAM,eAAe,GAAG;gBACpB,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;gBACtE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YACnE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,+BAAO,GAAd;QACI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC/B,iBAAM,OAAO,WAAE,CAAC;IACpB,CAAC;IAES,8CAAsB,GAAhC,UAAiC,aAAkC;QAAnE,iBAiBC;QAhBG,iBAAM,sBAAsB,YAAC,aAAa,CAAC,CAAC;QAE5C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElE,2BAA2B;QAC3B,IAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;QAEjE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACzD,yCAAyC;QACzC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC;YACjC,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAChD,IAAI,MAAM,EAAE;gBACR,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACzB;YACD,KAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,wCAAgB,GAAxB;QAAA,iBA2CC;QA1CG,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE;YAC7D,IAAI,aAA0C,CAAC;YAC/C,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3B,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACvD,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBAClE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC;aAC5D;YACD,IAAM,YAAU,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzH,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACvD,YAAU,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,YAAU,CAAC,SAAS,CAAC;gBAC3F,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;oBAC3C,YAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,YAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,YAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;iBACtE;gBACD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;oBAC5C,YAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrE,YAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrE,YAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;iBACxE;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAC,SAAS;gBACtD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;oBAC5C,aAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;iBAChD;qBAAM;oBACH,aAAW,GAAG,SAAS,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,IAAM,wBAAwB,GAAG;gBAC7B,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,IAAI,YAAU,EAAE;oBACxC,YAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAChE,IAAI,aAAW,EAAE;wBACb,aAAW,CAAC,aAAa,CAAC,YAAU,CAAC,QAAQ,EAAE,YAAU,CAAC,SAAS,CAAC,CAAC;qBACxE;iBACJ;YACL,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;YACvE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC1E;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AAptBD,CAAmC,0BAA0B,GAotB5D","sourcesContent":["import type { Template, EventCallback } from \"../templating/templateManager\";\r\nimport { TemplateManager } from \"../templating/templateManager\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { Vector3 } from \"core/Maths/math\";\r\n\r\nimport { AbstractViewerWithTemplate } from \"./viewerWithTemplate\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { extendClassWithConfig } from \"../helper/index\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport type { IModelAnimation } from \"../model/modelAnimation\";\r\nimport { AnimationState } from \"../model/modelAnimation\";\r\nimport type { IViewerTemplatePlugin } from \"../templating/viewerTemplatePlugin\";\r\nimport { HDButtonPlugin } from \"../templating/plugins/hdButtonPlugin\";\r\nimport { PrintButtonPlugin } from \"../templating/plugins/printButton\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { ISceneConfiguration } from \"../configuration/interfaces/sceneConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\nimport \"core/Lights/Shadows/shadowGeneratorSceneComponent\";\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = { extends: \"default\" }\r\n ) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add(() => {\r\n this._configureLights();\r\n });\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n const conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if (\r\n (conf.materialType === \"standard\" && this.scene.defaultMaterial.getClassName() !== \"StandardMaterial\") ||\r\n (conf.materialType === \"pbr\" && this.scene.defaultMaterial.getClassName() !== \"PBRMaterial\")\r\n ) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === \"standard\") {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n };\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n const template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent &&\r\n this.templateManager.eventManager.registerCallback(\r\n plugin.templateName,\r\n (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n },\r\n eventName\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (template) {\r\n const closeButton = template.parent.querySelector(\".close-button\");\r\n if (closeButton) {\r\n closeButton.addEventListener(\"pointerdown\", () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n const filesInput = new FilesInput(\r\n this.engine,\r\n this.sceneManager.scene,\r\n () => {},\r\n () => {},\r\n () => {},\r\n () => {},\r\n function () {},\r\n (file: File) => {\r\n this.loadModel(file);\r\n },\r\n () => {}\r\n );\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback(\"navBar\", this._handlePointerClick, \"click\");\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n // do your thing\r\n },\r\n \"pointerdown\",\r\n \".help-button\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>evt.target;\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const gotoFrame = (+element.value / 100) * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) {\r\n return;\r\n }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n },\r\n \"input\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n },\r\n \"pointerup\",\r\n \".progress-wrapper\"\r\n );\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true,\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n const pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) {\r\n return;\r\n }\r\n const element = <HTMLElement>event.event.target;\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const parentClasses = element.parentElement!.classList;\r\n\r\n const elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n const className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\": {\r\n const value = element.dataset[\"value\"];\r\n const label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n }\r\n case \"speed-option-button\": {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n }\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * Plays or Pauses animation\r\n * @param noUiUpdate\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) {\r\n return;\r\n }\r\n\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n };\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n const progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = (this._currentAnimation.currentFrame / this._currentAnimation.frames) * 100;\r\n const currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) {\r\n // Only move if greater than a 1% change\r\n progressSlider.value = \"\" + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Speed\r\n * @param speed\r\n * @param paramsObject\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Type\r\n * @param data\r\n * @param data.label\r\n * @param data.value\r\n * @param paramsObject\r\n */\r\n private _updateAnimationType = (data: { label: string; value: string }, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = this._animationList.indexOf(data.value) + 1;\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: this._animationList.indexOf(data.value) + 1,\r\n selectedAnimationName: data.label,\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n };\r\n\r\n protected _initVR() {\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n const fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n const currentElement =\r\n (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n const requestFullScreen =\r\n fullscreenElement.requestFullscreen ||\r\n (<any>fullscreenElement).webkitRequestFullscreen ||\r\n (<any>fullscreenElement).msRequestFullscreen ||\r\n (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n const exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = \"relative\";\r\n htmlElement.style.height = \"100%\";\r\n htmlElement.style.display = \"flex\";\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n const newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n const animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => {\r\n return { label: a, value: a };\r\n });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === \"string\") {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n console.log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n };\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n const subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + \" template not found\");\r\n }\r\n return subTemplate.show((template) => {\r\n template.parent.style.display = \"flex\";\r\n return Promise.resolve(template);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n const overlays = template.parent.querySelectorAll(\".overlay\");\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n const htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = \"none\";\r\n }\r\n }\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>) {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params && <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n const templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n const canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget: Nullable<Vector3> | undefined;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n const flashlight = new SpotLight(\"flashlight\", Vector3.Zero(), Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = eventData.pickInfo.pickedPoint;\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n const updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Template, EventCallback } from \"../templating/templateManager\";\r\nimport { TemplateManager } from \"../templating/templateManager\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { Vector3 } from \"core/Maths/math\";\r\n\r\nimport { AbstractViewerWithTemplate } from \"./viewerWithTemplate\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { extendClassWithConfig } from \"../helper/index\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport type { IModelAnimation } from \"../model/modelAnimation\";\r\nimport { AnimationState } from \"../model/modelAnimation\";\r\nimport type { IViewerTemplatePlugin } from \"../templating/viewerTemplatePlugin\";\r\nimport { HDButtonPlugin } from \"../templating/plugins/hdButtonPlugin\";\r\nimport { PrintButtonPlugin } from \"../templating/plugins/printButton\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { ISceneConfiguration } from \"../configuration/interfaces/sceneConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport \"core/Lights/Shadows/shadowGeneratorSceneComponent\";\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = { extends: \"default\" }\r\n ) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add(() => {\r\n this._configureLights();\r\n });\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n const conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if (\r\n (conf.materialType === \"standard\" && this.scene.defaultMaterial.getClassName() !== \"StandardMaterial\") ||\r\n (conf.materialType === \"pbr\" && this.scene.defaultMaterial.getClassName() !== \"PBRMaterial\")\r\n ) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === \"standard\") {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n };\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n const template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent &&\r\n this.templateManager.eventManager.registerCallback(\r\n plugin.templateName,\r\n (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n },\r\n eventName\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (template) {\r\n const closeButton = template.parent.querySelector(\".close-button\");\r\n if (closeButton) {\r\n closeButton.addEventListener(\"pointerdown\", () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n const filesInput = new FilesInput(\r\n this.engine,\r\n this.sceneManager.scene,\r\n () => {},\r\n () => {},\r\n () => {},\r\n () => {},\r\n function () {},\r\n (file: File) => {\r\n this.loadModel(file);\r\n },\r\n () => {}\r\n );\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback(\"navBar\", this._handlePointerClick, \"click\");\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n // do your thing\r\n },\r\n \"pointerdown\",\r\n \".help-button\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>evt.target;\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const gotoFrame = (+element.value / 100) * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) {\r\n return;\r\n }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n },\r\n \"input\"\r\n );\r\n\r\n this.templateManager.eventManager.registerCallback(\r\n \"navBar\",\r\n () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n },\r\n \"pointerup\",\r\n \".progress-wrapper\"\r\n );\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true,\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n const pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) {\r\n return;\r\n }\r\n const element = <HTMLElement>event.event.target;\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n const parentClasses = element.parentElement!.classList;\r\n\r\n const elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n const className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\": {\r\n const value = element.dataset[\"value\"];\r\n const label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n }\r\n case \"speed-option-button\": {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n const speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n }\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * Plays or Pauses animation\r\n * @param noUiUpdate\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) {\r\n return;\r\n }\r\n\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n };\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n const progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = (this._currentAnimation.currentFrame / this._currentAnimation.frames) * 100;\r\n const currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) {\r\n // Only move if greater than a 1% change\r\n progressSlider.value = \"\" + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Speed\r\n * @param speed\r\n * @param paramsObject\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update Current Animation Type\r\n * @param data\r\n * @param data.label\r\n * @param data.value\r\n * @param paramsObject\r\n */\r\n private _updateAnimationType = (data: { label: string; value: string }, paramsObject?: any) => {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = this._animationList.indexOf(data.value) + 1;\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: this._animationList.indexOf(data.value) + 1,\r\n selectedAnimationName: data.label,\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n };\r\n\r\n protected _initVR() {\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n const viewerTemplate = this.templateManager.getTemplate(\"viewer\");\r\n const viewerElement = viewerTemplate && viewerTemplate.parent;\r\n const fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n const currentElement =\r\n (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n const requestFullScreen =\r\n fullscreenElement.requestFullscreen ||\r\n (<any>fullscreenElement).webkitRequestFullscreen ||\r\n (<any>fullscreenElement).msRequestFullscreen ||\r\n (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n const exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = \"relative\";\r\n htmlElement.style.height = \"100%\";\r\n htmlElement.style.display = \"flex\";\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n const navbar = this.templateManager.getTemplate(\"navBar\");\r\n if (!navbar) {\r\n return;\r\n }\r\n\r\n const newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n const animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => {\r\n return { label: a, value: a };\r\n });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === \"string\") {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n Logger.Log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n };\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n const subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + \" template not found\");\r\n }\r\n return subTemplate.show((template) => {\r\n template.parent.style.display = \"flex\";\r\n return Promise.resolve(template);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n const template = this.templateManager.getTemplate(\"overlay\");\r\n if (!template) {\r\n return Promise.resolve(\"Overlay template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n const overlays = template.parent.querySelectorAll(\".overlay\");\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n const htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = \"none\";\r\n }\r\n }\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: (template: Template) => Promise<Template>): Promise<Template> {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: (template: Template) => Promise<Template>) {\r\n const template = this.templateManager.getTemplate(\"main\");\r\n //not possible, but yet:\r\n if (!template) {\r\n return Promise.reject(\"Main template not found\");\r\n }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.show((template) => {\r\n const canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = \"flex\";\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params && <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n const template = this.templateManager.getTemplate(\"loadingScreen\");\r\n if (!template) {\r\n return Promise.resolve(\"Loading Screen template not found\");\r\n }\r\n\r\n return template.hide((template) => {\r\n template.parent.style.opacity = \"0\";\r\n const onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = \"none\";\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n });\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n const templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n const canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget: Nullable<Vector3> | undefined;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n const flashlight = new SpotLight(\"flashlight\", Vector3.Zero(), Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = eventData.pickInfo.pickedPoint;\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n const updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}\r\n"]}
@@ -1,6 +1,7 @@
1
1
  import { __extends } from "@babylonjs/core/tslib.es6.js";
2
2
  import { AbstractViewer } from "./viewer.js";
3
3
  import "@babylonjs/core/Misc/observable.extensions.js";
4
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
4
5
  var RenderOnlyViewer = /** @class */ (function (_super) {
5
6
  __extends(RenderOnlyViewer, _super);
6
7
  function RenderOnlyViewer(containerElement, initialConfiguration) {
@@ -34,7 +35,7 @@ var RenderOnlyViewer = /** @class */ (function (_super) {
34
35
  return _this.onInitDoneObservable.notifyObserversWithPromise(_this);
35
36
  })
36
37
  .catch(function (e) {
37
- console.log(e.toString());
38
+ Logger.Log(e.toString());
38
39
  return _this;
39
40
  });
40
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,uDAAyC;AAEzC;IAAsC,oCAAc;IAChD,0BACW,gBAAyB,EAChC,oBAA8C;QAA9C,qCAAA,EAAA,yBAA8C;QAFlD,YAII,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAEhD;QALU,sBAAgB,GAAhB,gBAAgB,CAAS;QAIhC,KAAI,CAAC,OAAO,GAAG,gBAAqC,CAAC;;IACzD,CAAC;IACM,qCAAU,GAAjB;QAAA,iBAyBC;QAxBG,IAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC,WAAW,EAAE;aACpB,IAAI,CAAC,UAAC,MAAM;YACT,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CAAC;aACD,IAAI,CAAC;YACF,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,QAAQ,EAAE;gBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC;qBAC3C,KAAK,CAAC,cAAO,CAAC,CAAC;qBACf,IAAI,CAAC;oBACF,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACnC,CAAC,CAAC,CAAC;aACV;iBAAM;gBACH,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAC3F;QACL,CAAC,CAAC;aACD,IAAI,CAAC;YACF,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;QACtE,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1B,OAAO,KAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACX,CAAC;IACS,mDAAwB,GAAlC,cAAsC,CAAC;IAC3C,uBAAC;AAAD,CAAC,AAnCD,CAAsC,cAAc,GAmCnD","sourcesContent":["import type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { AbstractViewer } from \"./viewer\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\nexport class RenderOnlyViewer extends AbstractViewer {\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = {}\r\n ) {\r\n super(containerElement, initialConfiguration);\r\n this._canvas = containerElement as HTMLCanvasElement;\r\n }\r\n public initialize() {\r\n const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\r\n .catch((e) => {\r\n console.log(e.toString());\r\n return this;\r\n });\r\n }\r\n protected _prepareContainerElement() {}\r\n}\r\n"]}
1
+ {"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,uDAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,uCAAyB;AAE1C;IAAsC,oCAAc;IAChD,0BACW,gBAAyB,EAChC,oBAA8C;QAA9C,qCAAA,EAAA,yBAA8C;QAFlD,YAII,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAEhD;QALU,sBAAgB,GAAhB,gBAAgB,CAAS;QAIhC,KAAI,CAAC,OAAO,GAAG,gBAAqC,CAAC;;IACzD,CAAC;IACM,qCAAU,GAAjB;QAAA,iBAyBC;QAxBG,IAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC,WAAW,EAAE;aACpB,IAAI,CAAC,UAAC,MAAM;YACT,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CAAC;aACD,IAAI,CAAC;YACF,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,QAAQ,EAAE;gBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC;qBAC3C,KAAK,CAAC,cAAO,CAAC,CAAC;qBACf,IAAI,CAAC;oBACF,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACnC,CAAC,CAAC,CAAC;aACV;iBAAM;gBACH,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAC3F;QACL,CAAC,CAAC;aACD,IAAI,CAAC;YACF,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;QACtE,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,CAAC;YACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzB,OAAO,KAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACX,CAAC;IACS,mDAAwB,GAAlC,cAAsC,CAAC;IAC3C,uBAAC;AAAD,CAAC,AAnCD,CAAsC,cAAc,GAmCnD","sourcesContent":["import type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { AbstractViewer } from \"./viewer\";\r\nimport \"core/Misc/observable.extensions\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nexport class RenderOnlyViewer extends AbstractViewer {\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = {}\r\n ) {\r\n super(containerElement, initialConfiguration);\r\n this._canvas = containerElement as HTMLCanvasElement;\r\n }\r\n public initialize() {\r\n const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\r\n .catch((e) => {\r\n Logger.Log(e.toString());\r\n return this;\r\n });\r\n }\r\n protected _prepareContainerElement() {}\r\n}\r\n"]}
package/viewer/viewer.js CHANGED
@@ -15,6 +15,7 @@ import { SceneManager } from "../managers/sceneManager.js";
15
15
  import { telemetryManager } from "../managers/telemetryManager.js";
16
16
  import { viewerManager } from "./viewerManager.js";
17
17
  import "@babylonjs/core/Misc/observable.extensions.js";
18
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
18
19
  /**
19
20
  * The AbstractViewer is the center of Babylon's viewer.
20
21
  * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates
@@ -463,10 +464,10 @@ var AbstractViewer = /** @class */ (function () {
463
464
  return _this.updateConfiguration(newData);
464
465
  }
465
466
  catch (e) {
466
- console.log("Error parsing file " + newConfiguration);
467
+ Logger.Log("Error parsing file " + newConfiguration);
467
468
  }
468
469
  }, undefined, undefined, undefined, function (error) {
469
- console.log("Error parsing file " + newConfiguration, error);
470
+ Logger.Log(["Error parsing file " + newConfiguration, error]);
470
471
  });
471
472
  }
472
473
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"core/Engines/engine\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport type { TargetCamera } from \"core/Cameras/targetCamera\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Effect } from \"core/Materials/effect\";\r\nimport { processConfigurationCompatibility } from \"../configuration/configurationCompatibility\";\r\nimport { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport { viewerGlobals } from \"../configuration/globals\";\r\nimport { RenderOnlyConfigurationLoader } from \"../configuration/renderOnlyLoader\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { deepmerge } from \"../helper/index\";\r\nimport { ModelLoader } from \"../loader/modelLoader\";\r\nimport { ObservablesManager } from \"../managers/observablesManager\";\r\nimport { SceneManager } from \"../managers/sceneManager\";\r\nimport { telemetryManager } from \"../managers/telemetryManager\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { viewerManager } from \"./viewerManager\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { IObserversConfiguration } from \"../configuration/interfaces/observersConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/glTFFileLoader\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\n/**\r\n * The AbstractViewer is the center of Babylon's viewer.\r\n * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates\r\n */\r\nexport abstract class AbstractViewer {\r\n /**\r\n * Babylon Engine corresponding with this viewer\r\n */\r\n public engine: Engine;\r\n /**\r\n * The ID of this viewer. it will be generated randomly or use the HTML Element's ID.\r\n */\r\n public readonly baseId: string;\r\n\r\n /**\r\n * The last loader used to load a model.\r\n * @deprecated\r\n */\r\n public lastUsedLoader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n /**\r\n * The ModelLoader instance connected with this viewer.\r\n */\r\n public modelLoader: ModelLoader;\r\n\r\n /**\r\n * A flag that controls whether or not the render loop should be executed\r\n */\r\n public runRenderLoop: boolean = true;\r\n\r\n /**\r\n * The scene manager connected with this viewer instance\r\n */\r\n public sceneManager: SceneManager;\r\n\r\n // observables\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n public get onSceneInitObservable(): Observable<Scene> {\r\n return this.observablesManager.onSceneInitObservable;\r\n }\r\n /**\r\n * will notify when the engine was initialized\r\n */\r\n public get onEngineInitObservable(): Observable<Engine> {\r\n return this.observablesManager.onEngineInitObservable;\r\n }\r\n\r\n /**\r\n * Will notify when a new model was added to the scene.\r\n * Note that added does not necessarily mean loaded!\r\n */\r\n public get onModelAddedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelAddedObservable;\r\n }\r\n /**\r\n * will notify after every model load\r\n */\r\n public get onModelLoadedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelLoadedObservable;\r\n }\r\n /**\r\n * will notify when any model notify of progress\r\n */\r\n public get onModelLoadProgressObservable(): Observable<ISceneLoaderProgressEvent> {\r\n return this.observablesManager.onModelLoadProgressObservable;\r\n }\r\n /**\r\n * will notify when any model load failed.\r\n */\r\n public get onModelLoadErrorObservable(): Observable<{ message: string; exception: any }> {\r\n return this.observablesManager.onModelLoadErrorObservable;\r\n }\r\n /**\r\n * Will notify when a model was removed from the scene;\r\n */\r\n public get onModelRemovedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelRemovedObservable;\r\n }\r\n /**\r\n * will notify when a new loader was initialized.\r\n * Used mainly to know when a model starts loading.\r\n */\r\n public get onLoaderInitObservable(): Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n return this.observablesManager.onLoaderInitObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when the entire load process has finished.\r\n */\r\n public get onInitDoneObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onViewerInitDoneObservable;\r\n }\r\n\r\n /**\r\n * Functions added to this observable will be executed on each frame rendered.\r\n */\r\n public get onFrameRenderedObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onFrameRenderedObservable;\r\n }\r\n\r\n /**\r\n * Observers registered here will be executed when VR more is entered.\r\n */\r\n public get onEnteringVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onEnteringVRObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when VR mode is exited.\r\n */\r\n public get onExitingVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onExitingVRObservable;\r\n }\r\n\r\n public observablesManager: ObservablesManager;\r\n\r\n /**\r\n * The canvas associated with this viewer\r\n */\r\n protected _canvas: HTMLCanvasElement;\r\n\r\n /**\r\n * The (single) canvas of this viewer\r\n */\r\n public get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n /**\r\n * is this viewer disposed?\r\n */\r\n protected _isDisposed: boolean = false;\r\n\r\n /**\r\n * registered onBeforeRender functions.\r\n * This functions are also registered at the native scene. The reference can be used to unregister them.\r\n */\r\n protected _registeredOnBeforeRenderFunctions: Array<() => void>;\r\n /**\r\n * The configuration loader of this viewer\r\n */\r\n protected _configurationLoader: RenderOnlyConfigurationLoader;\r\n\r\n /**\r\n * Is the viewer already initialized. for internal use.\r\n */\r\n protected _isInit: boolean;\r\n\r\n protected _configurationContainer: ConfigurationContainer;\r\n\r\n public get configurationContainer() {\r\n return this._configurationContainer;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected getConfigurationLoader() {\r\n return new RenderOnlyConfigurationLoader();\r\n }\r\n\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = {}\r\n ) {\r\n // if exists, use the container id. otherwise, generate a random string.\r\n if (containerElement.id) {\r\n this.baseId = containerElement.id;\r\n } else {\r\n this.baseId = containerElement.id = \"bjs\" + Math.random().toString(32).substr(2, 8);\r\n }\r\n\r\n this._registeredOnBeforeRenderFunctions = [];\r\n\r\n this._configurationContainer = new ConfigurationContainer();\r\n\r\n this.observablesManager = new ObservablesManager();\r\n\r\n this.modelLoader = new ModelLoader(this.observablesManager, this._configurationContainer);\r\n\r\n RenderingManager.AUTOCLEAR = false;\r\n\r\n // extend the configuration\r\n this._configurationLoader = this.getConfigurationLoader();\r\n this._configurationLoader.loadConfiguration(initialConfiguration, (configuration) => {\r\n this._onConfigurationLoaded(configuration);\r\n });\r\n\r\n this.onSceneInitObservable.add(() => {\r\n this.updateConfiguration();\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this._isInit = true;\r\n this.engine.runRenderLoop(this._render);\r\n });\r\n\r\n this._prepareContainerElement();\r\n\r\n // add this viewer to the viewer manager\r\n viewerManager.addViewer(this);\r\n }\r\n\r\n /**\r\n * get the baseId of this viewer\r\n */\r\n public getBaseId(): string {\r\n return this.baseId;\r\n }\r\n\r\n /**\r\n * Do we have a canvas to render on, and is it a part of the scene\r\n */\r\n public isCanvasInDOM(): boolean {\r\n return !!this._canvas && !!this._canvas.parentElement;\r\n }\r\n\r\n /**\r\n * Is the engine currently set to render even when the page is in background\r\n */\r\n public get renderInBackground() {\r\n return this.engine && this.engine.renderEvenInBackground;\r\n }\r\n\r\n /**\r\n * Set the viewer's background rendering flag.\r\n */\r\n public set renderInBackground(value: boolean) {\r\n if (this.engine) {\r\n this.engine.renderEvenInBackground = value;\r\n }\r\n }\r\n\r\n /**\r\n * Get the configuration object. This is a reference only.\r\n * The configuration can ONLY be updated using the updateConfiguration function.\r\n * changing this object will have no direct effect on the scene.\r\n */\r\n public get configuration(): ViewerConfiguration {\r\n return this._configurationContainer.configuration;\r\n }\r\n\r\n /**\r\n * force resizing the engine.\r\n */\r\n public forceResize() {\r\n this._resize();\r\n }\r\n\r\n protected _hdToggled: boolean = false;\r\n\r\n public toggleHD() {\r\n this._hdToggled = !this._hdToggled;\r\n\r\n const scale = this._hdToggled ? Math.max(0.5, 1 / (window.devicePixelRatio || 2)) : 1;\r\n\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n\r\n protected _vrToggled: boolean = false;\r\n private _vrModelRepositioning: number = 0;\r\n protected _vrScale: number = 1;\r\n\r\n protected _vrInit: boolean = false;\r\n\r\n public toggleVR() {\r\n if (!this._vrInit) {\r\n this._initVR();\r\n }\r\n\r\n if (this.sceneManager.vrHelper && !this.sceneManager.vrHelper.isInVRMode) {\r\n // make sure the floor is set\r\n if (this.sceneManager.environmentHelper && this.sceneManager.environmentHelper.ground) {\r\n this.sceneManager.vrHelper.addFloorMesh(this.sceneManager.environmentHelper.ground);\r\n }\r\n\r\n this._vrToggled = true;\r\n this.sceneManager.vrHelper.enterVR();\r\n\r\n // position the vr camera to be in front of the object or wherever the user has configured it to be\r\n if (this.sceneManager.vrHelper.currentVRCamera && this.sceneManager.vrHelper.currentVRCamera !== this.sceneManager.camera) {\r\n if (this.configuration.vr && this.configuration.vr.cameraPosition !== undefined) {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(\r\n this.configuration.vr.cameraPosition.x,\r\n this.configuration.vr.cameraPosition.y,\r\n this.configuration.vr.cameraPosition.z\r\n );\r\n } else {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(0, this.sceneManager.vrHelper.currentVRCamera.position.y, -1);\r\n }\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion &&\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // set the height of the model to be what the user has configured, or floating by default\r\n if (this.configuration.vr && this.configuration.vr.modelHeightCorrection !== undefined) {\r\n if (typeof this.configuration.vr.modelHeightCorrection === \"number\") {\r\n this._vrModelRepositioning = this.configuration.vr.modelHeightCorrection;\r\n } else if (this.configuration.vr.modelHeightCorrection) {\r\n this._vrModelRepositioning = this.sceneManager.vrHelper.currentVRCamera.position.y / 2;\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n }\r\n\r\n // scale the model\r\n if (this.sceneManager.models.length) {\r\n const boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n const sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n const maxDimension = Math.max(sizeVec.x, sizeVec.y, sizeVec.z);\r\n this._vrScale = 1 / maxDimension;\r\n if (this.configuration.vr && this.configuration.vr.objectScaleFactor) {\r\n this._vrScale *= this.configuration.vr.objectScaleFactor;\r\n }\r\n\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(this._vrScale);\r\n\r\n // reposition the object to \"float\" in front of the user\r\n this.sceneManager.models[0].rootMesh.position.y += this._vrModelRepositioning;\r\n this.sceneManager.models[0].rootMesh.rotationQuaternion = null;\r\n }\r\n\r\n // scale the environment to match the model\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = false;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.vrHelper) {\r\n this.sceneManager.vrHelper.exitVR();\r\n }\r\n }\r\n }\r\n\r\n protected _initVR() {\r\n if (this.sceneManager.vrHelper) {\r\n this.observablesManager.onExitingVRObservable.add(() => {\r\n if (this._vrToggled) {\r\n this._vrToggled = false;\r\n\r\n // undo the scaling of the model\r\n if (this.sceneManager.models.length) {\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.models[0].rootMesh.position.y -= this._vrModelRepositioning;\r\n }\r\n\r\n // undo the scaling of the environment\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(1 / this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = true;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n\r\n // clear set height and width\r\n this.canvas.removeAttribute(\"height\");\r\n this.canvas.removeAttribute(\"width\");\r\n this.engine.resize();\r\n }\r\n });\r\n }\r\n\r\n this._vrInit = true;\r\n }\r\n\r\n /**\r\n * The resize function that will be registered with the window object\r\n */\r\n protected _resize = (): void => {\r\n // Only resize if Canvas is in the DOM\r\n if (!this.isCanvasInDOM()) {\r\n return;\r\n }\r\n\r\n if (this.canvas.clientWidth <= 0 || this.canvas.clientHeight <= 0) {\r\n return;\r\n }\r\n\r\n if (this.configuration.engine && this.configuration.engine.disableResize) {\r\n return;\r\n }\r\n\r\n this.engine.resize();\r\n };\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, configuration);\r\n if (this.configuration.observers) {\r\n this._configureObservers(this.configuration.observers);\r\n }\r\n // TODO remove this after testing, as this is done in the updateConfiguration as well.\r\n if (this.configuration.loaderPlugins) {\r\n Object.keys(this.configuration.loaderPlugins).forEach((name) => {\r\n if (this.configuration.loaderPlugins && this.configuration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n });\r\n }\r\n\r\n this.observablesManager.onViewerInitStartedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Force a single render loop execution.\r\n */\r\n public forceRender() {\r\n this._render(true);\r\n }\r\n\r\n /**\r\n * render loop that will be executed by the engine\r\n * @param force\r\n */\r\n protected _render = (force: boolean = false): void => {\r\n if (force || (this.sceneManager.scene && this.sceneManager.scene.activeCamera)) {\r\n if (this.runRenderLoop || force) {\r\n this.engine.performanceMonitor.enable();\r\n this.sceneManager.scene.render();\r\n this.onFrameRenderedObservable.notifyObservers(this);\r\n } else {\r\n this.engine.performanceMonitor.disable();\r\n\r\n // update camera instead of rendering\r\n this.sceneManager.scene.activeCamera && this.sceneManager.scene.activeCamera.update();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Takes a screenshot of the scene and returns it as a base64 encoded png.\r\n * @param callback optional callback that will be triggered when screenshot is done.\r\n * @param width Optional screenshot width (default to 512).\r\n * @param height Optional screenshot height (default to 512).\r\n * @returns a promise with the screenshot data\r\n */\r\n public takeScreenshot(callback?: (data: string) => void, width = 0, height = 0): Promise<string> {\r\n width = width || this.canvas.clientWidth;\r\n height = height || this.canvas.clientHeight;\r\n\r\n // Create the screenshot\r\n return new Promise<string>((resolve, reject) => {\r\n try {\r\n Tools.CreateScreenshot(this.engine, this.sceneManager.camera, { width, height }, (data) => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n resolve(data);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the current viewer configuration with new values.\r\n * Only provided information will be updated, old configuration values will be kept.\r\n * If this.configuration was manually changed, you can trigger this function with no parameters,\r\n * and the entire configuration will be updated.\r\n * @param newConfiguration the partial configuration to update or a URL to a JSON holding the updated configuration\r\n *\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration> | string = this.configuration) {\r\n if (typeof newConfiguration === \"string\") {\r\n Tools.LoadFile(\r\n newConfiguration,\r\n (data) => {\r\n try {\r\n const newData = JSON.parse(data.toString()) as ViewerConfiguration;\r\n return this.updateConfiguration(newData);\r\n } catch (e) {\r\n console.log(\"Error parsing file \" + newConfiguration);\r\n }\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n (error) => {\r\n console.log(\"Error parsing file \" + newConfiguration, error);\r\n }\r\n );\r\n } else {\r\n //backcompat\r\n processConfigurationCompatibility(newConfiguration);\r\n // update this.configuration with the new data\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, newConfiguration);\r\n\r\n this.sceneManager.updateConfiguration(newConfiguration);\r\n\r\n // observers in configuration\r\n if (newConfiguration.observers) {\r\n this._configureObservers(newConfiguration.observers);\r\n }\r\n\r\n if (newConfiguration.loaderPlugins) {\r\n Object.keys(newConfiguration.loaderPlugins).forEach((name) => {\r\n if (newConfiguration.loaderPlugins && newConfiguration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * this is used to register native functions using the configuration object.\r\n * This will configure the observers.\r\n * @param observersConfiguration observers configuration\r\n */\r\n protected _configureObservers(observersConfiguration: IObserversConfiguration) {\r\n if (observersConfiguration.onEngineInit) {\r\n this.onEngineInitObservable.add((window as any)[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === \"\" && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback((window as any)[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add((window as any)[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === \"\" && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback((window as any)[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add((window as any)[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === \"\" && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback((window as any)[this.configuration.observers!.onModelLoaded!]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n window.removeEventListener(\"resize\", this._resize);\r\n\r\n if (this.sceneManager) {\r\n if (this.sceneManager.scene && this.sceneManager.scene.activeCamera) {\r\n this.sceneManager.scene.activeCamera.detachControl();\r\n }\r\n this.sceneManager.dispose();\r\n }\r\n\r\n this._fpsTimeoutInterval && clearInterval(this._fpsTimeoutInterval);\r\n\r\n this.observablesManager.dispose();\r\n\r\n this.modelLoader.dispose();\r\n\r\n if (this.engine) {\r\n this.engine.dispose();\r\n }\r\n\r\n viewerManager.removeViewer(this);\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * This will prepare the container element for the viewer\r\n */\r\n protected abstract _prepareContainerElement(): void;\r\n\r\n /**\r\n * This function will execute when the HTML templates finished initializing.\r\n * It should initialize the engine and continue execution.\r\n *\r\n * @returns {Promise<AbstractViewer>} The viewer object will be returned after the object was loaded.\r\n */\r\n protected _onTemplatesLoaded(): Promise<AbstractViewer> {\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * This will force the creation of an engine and a scene.\r\n * It will also load a model if preconfigured.\r\n * But first - it will load the extendible onTemplateLoaded()!\r\n */\r\n protected _onTemplateLoaded(): Promise<AbstractViewer> {\r\n // check if viewer was disposed right after created\r\n if (this._isDisposed) {\r\n return Promise.reject(\"viewer was disposed\");\r\n }\r\n return this._onTemplatesLoaded().then(() => {\r\n const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\r\n .catch((e) => {\r\n Tools.Warn(e.toString());\r\n return this;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the engine. Returns a promise in case async calls are needed.\r\n *\r\n * @protected\r\n * @returns {Promise<Engine>}\r\n * @memberof Viewer\r\n */\r\n protected _initEngine(): Promise<Engine> {\r\n // init custom shaders\r\n this._injectCustomShaders();\r\n\r\n //let canvasElement = this.templateManager.getCanvas();\r\n if (!this.canvas) {\r\n return Promise.reject(\"Canvas element not found!\");\r\n }\r\n const config = this.configuration.engine || {};\r\n // TDO enable further configuration\r\n\r\n // check for webgl2 support, force-disable if needed.\r\n if (viewerGlobals.disableWebGL2Support) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.disableWebGL2Support = true;\r\n }\r\n\r\n if (this.configuration[\"3dCommerceCertified\"]) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.forceSRGBBufferSupportState = true;\r\n const loader = SceneLoader.GetPluginForExtension(\".gltf\");\r\n if (loader) {\r\n (loader as GLTFFileLoader).transparencyAsCoverage = true;\r\n }\r\n SceneLoader.OnPluginActivatedObservable.add((plugin) => {\r\n if (plugin.name === \"gltf\") {\r\n const loader = plugin as GLTFFileLoader;\r\n loader.transparencyAsCoverage = true;\r\n }\r\n });\r\n }\r\n\r\n this.engine = new Engine(this.canvas, !!config.antialiasing, config.engineOptions);\r\n\r\n if (!config.disableResize) {\r\n window.addEventListener(\"resize\", this._resize);\r\n }\r\n\r\n if (this.configuration.engine) {\r\n if (this.configuration.engine.adaptiveQuality) {\r\n const scale = Math.max(0.5, 1 / (window.devicePixelRatio || 2));\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n if (this.configuration.engine.hdEnabled) {\r\n this.toggleHD();\r\n }\r\n }\r\n\r\n // create a new template manager for this viewer\r\n this.sceneManager = new SceneManager(this.engine, this._configurationContainer, this.observablesManager);\r\n\r\n return Promise.resolve(this.engine);\r\n }\r\n\r\n private _isLoading: boolean;\r\n\r\n /**\r\n * Initialize a model loading. The returned object (a ViewerModel object) will be loaded in the background.\r\n * The difference between this and loadModel is that loadModel will fulfill the promise when the model finished loading.\r\n *\r\n * @param modelConfig model configuration to use when loading the model.\r\n * @param clearScene should the scene be cleared before loading this model\r\n * @returns a ViewerModel object that is not yet fully loaded.\r\n */\r\n public initModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): ViewerModel {\r\n let configuration: IModelConfiguration;\r\n if (typeof modelConfig === \"string\") {\r\n configuration = {\r\n url: modelConfig,\r\n };\r\n } else if (modelConfig instanceof File) {\r\n configuration = {\r\n file: modelConfig,\r\n root: \"file:\",\r\n };\r\n } else {\r\n configuration = modelConfig;\r\n }\r\n\r\n if (!configuration.url && !configuration.file) {\r\n throw new Error(\"no model provided\");\r\n }\r\n\r\n if (clearScene) {\r\n this.sceneManager.clearScene(true, false);\r\n }\r\n\r\n //merge the configuration for future models:\r\n if (this.configuration.model && typeof this.configuration.model === \"object\") {\r\n const globalConfig = deepmerge({}, this.configuration.model);\r\n configuration = deepmerge(globalConfig, configuration);\r\n if (modelConfig instanceof File) {\r\n configuration.file = modelConfig;\r\n }\r\n } else {\r\n this.configuration.model = configuration;\r\n }\r\n\r\n this._isLoading = true;\r\n\r\n const model = this.modelLoader.load(configuration);\r\n\r\n this.lastUsedLoader = model.loader;\r\n model.onLoadErrorObservable.add((errorObject) => {\r\n this.onModelLoadErrorObservable.notifyObserversWithPromise(errorObject);\r\n });\r\n model.onLoadProgressObservable.add((progressEvent) => {\r\n this.onModelLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n });\r\n this.onLoaderInitObservable.notifyObserversWithPromise(this.lastUsedLoader);\r\n\r\n model.onLoadedObservable.add(() => {\r\n this._isLoading = false;\r\n });\r\n\r\n return model;\r\n }\r\n\r\n /**\r\n * load a model using the provided configuration.\r\n * This function, as opposed to initModel, will return a promise that resolves when the model is loaded, and rejects with error.\r\n * If you want to attach to the observables of the model, use initModel instead.\r\n *\r\n * @param modelConfig the model configuration or URL to load.\r\n * @param clearScene Should the scene be cleared before loading the model\r\n * @returns a Promise the fulfills when the model finished loading successfully.\r\n */\r\n public loadModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): Promise<ViewerModel> {\r\n if (this._isLoading) {\r\n // We can decide here whether or not to cancel the lst load, but the developer can do that.\r\n return Promise.reject(\"another model is curently being loaded.\");\r\n }\r\n\r\n return Promise.resolve(this.sceneManager.scene)\r\n .then((scene) => {\r\n if (!scene) {\r\n return this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n return scene;\r\n })\r\n .then(() => {\r\n const model = this.initModel(modelConfig, clearScene);\r\n return new Promise<ViewerModel>((resolve, reject) => {\r\n // at this point, configuration.model is an object, not a string\r\n model.onLoadedObservable.add(() => {\r\n resolve(model);\r\n });\r\n model.onLoadErrorObservable.add((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private _fpsTimeoutInterval: number;\r\n\r\n protected _initTelemetryEvents() {\r\n telemetryManager.broadcast(\"Engine Capabilities\", this.baseId, this.engine.getCaps());\r\n telemetryManager.broadcast(\"Platform Details\", this.baseId, {\r\n userAgent: navigator.userAgent,\r\n platform: navigator.platform,\r\n });\r\n\r\n telemetryManager.flushWebGLErrors(this.engine, this.baseId);\r\n\r\n const trackFPS: Function = () => {\r\n telemetryManager.broadcast(\"Current FPS\", this.baseId, { fps: this.engine.getFps() });\r\n };\r\n\r\n trackFPS();\r\n // Track the FPS again after 60 seconds\r\n this._fpsTimeoutInterval = window.setInterval(trackFPS, 60 * 1000);\r\n }\r\n\r\n /**\r\n * Injects all the spectre shader in the babylon shader store\r\n */\r\n protected _injectCustomShaders(): void {\r\n const customShaders = this.configuration.customShaders;\r\n // Inject all the spectre shader in the babylon shader store.\r\n if (!customShaders) {\r\n return;\r\n }\r\n if (customShaders.shaders) {\r\n Object.keys(customShaders.shaders).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.ShadersStore[key] = customShaders!.shaders![key];\r\n });\r\n }\r\n if (customShaders.includes) {\r\n Object.keys(customShaders.includes).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.IncludesShadersStore[key] = customShaders!.includes![key];\r\n });\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../tools/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,0CAA4B;AAE7C,OAAO,EAAE,WAAW,EAAE,+CAAiC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,sDAAwC;AAEnE,OAAO,EAAE,KAAK,EAAE,sCAAwB;AACxC,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,uDAAyC;AACzC,OAAO,EAAE,MAAM,EAAE,uCAAyB;AAE1C;;;GAGG;AACH;IA0JI,wBACW,gBAAyB,EAChC,oBAA8C;QAA9C,qCAAA,EAAA,yBAA8C;QAFlD,iBAwCC;QAvCU,qBAAgB,GAAhB,gBAAgB,CAAS;QAvIpC;;WAEG;QACI,kBAAa,GAAY,IAAI,CAAC;QAoGrC;;WAEG;QACO,gBAAW,GAAY,KAAK,CAAC;QAoH7B,eAAU,GAAY,KAAK,CAAC;QAU5B,eAAU,GAAY,KAAK,CAAC;QAC9B,0BAAqB,GAAW,CAAC,CAAC;QAChC,aAAQ,GAAW,CAAC,CAAC;QAErB,YAAO,GAAY,KAAK,CAAC;QAiHnC;;WAEG;QACO,YAAO,GAAG;YAChB,sCAAsC;YACtC,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,OAAO;aACV;YAED,IAAI,KAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,KAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE;gBAC/D,OAAO;aACV;YAED,IAAI,KAAI,CAAC,aAAa,CAAC,MAAM,IAAI,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE;gBACtE,OAAO;aACV;YAED,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC,CAAC;QA0BF;;;WAGG;QACO,YAAO,GAAG,UAAC,KAAsB;YAAtB,sBAAA,EAAA,aAAsB;YACvC,IAAI,KAAK,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBAC5E,IAAI,KAAI,CAAC,aAAa,IAAI,KAAK,EAAE;oBAC7B,KAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;oBACxC,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,KAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC;iBACxD;qBAAM;oBACH,KAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAEzC,qCAAqC;oBACrC,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,IAAI,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;iBACzF;aACJ;QACL,CAAC,CAAC;QAhRE,wEAAwE;QACxE,IAAI,gBAAgB,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC;SACrC;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACvF;QAED,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC;QAE7C,IAAI,CAAC,uBAAuB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAE5D,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEnD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE1F,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC;QAEnC,2BAA2B;QAC3B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC1D,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,UAAC,aAAa;YAC5E,KAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;YAC3B,KAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAC1B,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,wCAAwC;QACxC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAhKD,sBAAW,iDAAqB;QAJhC,cAAc;QACd;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;QACzD,CAAC;;;OAAA;IAID,sBAAW,kDAAsB;QAHjC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC;QAC1D,CAAC;;;OAAA;IAMD,sBAAW,kDAAsB;QAJjC;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC;QAC1D,CAAC;;;OAAA;IAID,sBAAW,mDAAuB;QAHlC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC;QAC3D,CAAC;;;OAAA;IAID,sBAAW,yDAA6B;QAHxC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC;QACjE,CAAC;;;OAAA;IAID,sBAAW,sDAA0B;QAHrC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC;QAC9D,CAAC;;;OAAA;IAID,sBAAW,oDAAwB;QAHnC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;QAC5D,CAAC;;;OAAA;IAKD,sBAAW,kDAAsB;QAJjC;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC;QAC1D,CAAC;;;OAAA;IAID,sBAAW,gDAAoB;QAH/B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC;QAC9D,CAAC;;;OAAA;IAKD,sBAAW,qDAAyB;QAHpC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC;QAC7D,CAAC;;;OAAA;IAKD,sBAAW,kDAAsB;QAHjC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC;QAC1D,CAAC;;;OAAA;IAID,sBAAW,iDAAqB;QAHhC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;QACzD,CAAC;;;OAAA;IAYD,sBAAW,kCAAM;QAHjB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;;;OAAA;IAwBD,sBAAW,kDAAsB;aAAjC;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;;;OAAA;IAED,gEAAgE;IACtD,+CAAsB,GAAhC;QACI,OAAO,IAAI,6BAA6B,EAAE,CAAC;IAC/C,CAAC;IA4CD;;OAEG;IACI,kCAAS,GAAhB;QACI,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,sCAAa,GAApB;QACI,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC1D,CAAC;IAKD,sBAAW,8CAAkB;QAH7B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;QAC7D,CAAC;QAED;;WAEG;aACH,UAA8B,KAAc;YACxC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;aAC9C;QACL,CAAC;;;OATA;IAgBD,sBAAW,yCAAa;QALxB;;;;WAIG;aACH;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;QACtD,CAAC;;;OAAA;IAED;;OAEG;IACI,oCAAW,GAAlB;QACI,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAIM,iCAAQ,GAAf;QACI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAEnC,IAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAQM,iCAAQ,GAAf;QACI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE;YACtE,6BAA6B;YAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBACnF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;aACvF;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAErC,mGAAmG;YACnG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBACvH,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,KAAK,SAAS,EAAE;oBAC7E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAC9D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EACtC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EACtC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CACzC,CAAC;iBACL;qBAAM;oBACH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACpI;gBACc,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAgB,CAAC,kBAAkB;oBAC1D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAgB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7G,yFAAyF;gBACzF,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,qBAAqB,KAAK,SAAS,EAAE;oBACpF,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,qBAAqB,KAAK,QAAQ,EAAE;wBACjE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,qBAAqB,CAAC;qBAC5E;yBAAM,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,qBAAqB,EAAE;wBACpD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;qBAC1F;yBAAM;wBACH,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;qBAClC;iBACJ;gBAED,kBAAkB;gBAClB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;oBACjC,IAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,EAAE,CAAC;oBAC3F,IAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBAClE,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC;oBACjC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,iBAAiB,EAAE;wBAClE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,iBAAiB,CAAC;qBAC5D;oBAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAEzE,wDAAwD;oBACxD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC;oBAC9E,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;iBAClE;gBAED,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;oBACrC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7H,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAChI;gBAED,kBAAkB;gBAClB,IAAI,IAAI,CAAC,YAAY,CAAC,+BAA+B,IAAI,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;oBACjG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,sBAAsB,GAAG,KAAK,CAAC;oBAC1E,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;iBACxD;aACJ;iBAAM;gBACH,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;aAClC;SACJ;aAAM;YACH,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAC5B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACvC;SACJ;IACL,CAAC;IAES,gCAAO,GAAjB;QAAA,iBAiCC;QAhCG,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,CAAC;gBAC9C,IAAI,KAAI,CAAC,UAAU,EAAE;oBACjB,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBAExB,gCAAgC;oBAChC,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;wBACjC,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC;wBAC7E,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAI,CAAC,qBAAqB,CAAC;qBACjF;oBAED,sCAAsC;oBACtC,IAAI,KAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBACrC,KAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,IAAI,KAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC;wBACjI,KAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,IAAI,KAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC;qBACpI;oBAED,kBAAkB;oBAClB,IAAI,KAAI,CAAC,YAAY,CAAC,+BAA+B,IAAI,KAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;wBACjG,KAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,sBAAsB,GAAG,IAAI,CAAC;wBACzE,KAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;qBACxD;oBAED,6BAA6B;oBAC7B,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACtC,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;oBACrC,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;iBACxB;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAsBS,+CAAsB,GAAhC,UAAiC,aAAkC;QAAnE,iBAeC;QAdG,IAAI,CAAC,uBAAuB,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;SAC1D;QACD,sFAAsF;QACtF,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;YAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;gBACvD,IAAI,KAAI,CAAC,aAAa,CAAC,aAAa,IAAI,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;oBAC5E,KAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACpC;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACI,oCAAW,GAAlB;QACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAqBD;;;;;;OAMG;IACI,uCAAc,GAArB,UAAsB,QAAiC,EAAE,KAAS,EAAE,MAAU;QAA9E,iBAiBC;QAjBwD,sBAAA,EAAA,SAAS;QAAE,uBAAA,EAAA,UAAU;QAC1E,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACzC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAE5C,wBAAwB;QACxB,OAAO,IAAI,OAAO,CAAS,UAAC,OAAO,EAAE,MAAM;YACvC,IAAI;gBACA,KAAK,CAAC,gBAAgB,CAAC,KAAI,CAAC,MAAM,EAAE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE,EAAE,UAAC,IAAI;oBAClF,IAAI,QAAQ,EAAE;wBACV,QAAQ,CAAC,IAAI,CAAC,CAAC;qBAClB;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,CAAC,CAAC,CAAC,CAAC;aACb;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACI,4CAAmB,GAA1B,UAA2B,gBAA4E;QAAvG,iBAwCC;QAxC0B,iCAAA,EAAA,mBAA0D,IAAI,CAAC,aAAa;QACnG,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;YACtC,KAAK,CAAC,QAAQ,CACV,gBAAgB,EAChB,UAAC,IAAI;gBACD,IAAI;oBACA,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAwB,CAAC;oBACnE,OAAO,KAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;iBAC5C;gBAAC,OAAO,CAAC,EAAE;oBACR,MAAM,CAAC,GAAG,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;iBACxD;YACL,CAAC,EACD,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAC,KAAK;gBACF,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,GAAG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;YAClE,CAAC,CACJ,CAAC;SACL;aAAM;YACH,YAAY;YACZ,iCAAiC,CAAC,gBAAgB,CAAC,CAAC;YACpD,8CAA8C;YAC9C,IAAI,CAAC,uBAAuB,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAEnG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAExD,6BAA6B;YAC7B,IAAI,gBAAgB,CAAC,SAAS,EAAE;gBAC5B,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;aACxD;YAED,IAAI,gBAAgB,CAAC,aAAa,EAAE;gBAChC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;oBACrD,IAAI,gBAAgB,CAAC,aAAa,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;wBACxE,KAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACpC;gBACL,CAAC,CAAC,CAAC;aACN;SACJ;IACL,CAAC;IAED;;;;OAIG;IACO,4CAAmB,GAA7B,UAA8B,sBAA+C;QACzE,IAAI,sBAAsB,CAAC,YAAY,EAAE;YACrC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAE,MAAc,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC;SACzF;aAAM;YACH,IAAI,sBAAsB,CAAC,YAAY,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,YAAY,EAAE;gBAC1H,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAE,MAAc,CAAC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,YAAa,CAAC,CAAC,CAAC;aAC5G;SACJ;QACD,IAAI,sBAAsB,CAAC,WAAW,EAAE;YACpC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAE,MAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC;SACvF;aAAM;YACH,IAAI,sBAAsB,CAAC,WAAW,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAW,EAAE;gBACxH,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAE,MAAc,CAAC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,WAAY,CAAC,CAAC,CAAC;aAC1G;SACJ;QACD,IAAI,sBAAsB,CAAC,aAAa,EAAE;YACtC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAE,MAAc,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;SAC3F;aAAM;YACH,IAAI,sBAAsB,CAAC,aAAa,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,aAAa,EAAE;gBAC5H,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAE,MAAc,CAAC,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC,aAAc,CAAC,CAAC,CAAC;aAC9G;SACJ;IACL,CAAC;IAED;;OAEG;IACI,gCAAO,GAAd;QACI,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO;SACV;QACD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE;gBACjE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;aACxD;YACD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,mBAAmB,IAAI,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAElC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB;QAED,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAOD;;;;;OAKG;IACO,2CAAkB,GAA5B;QACI,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACO,0CAAiB,GAA3B;QAAA,iBA+BC;QA9BG,mDAAmD;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;SAChD;QACD,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC;YAClC,IAAM,QAAQ,GAAG,OAAO,KAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,IAAI,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5H,OAAO,KAAI,CAAC,WAAW,EAAE;iBACpB,IAAI,CAAC,UAAC,MAAM;gBACT,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC1E,CAAC,CAAC;iBACD,IAAI,CAAC;gBACF,KAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,QAAQ,EAAE;oBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC;yBAC3C,KAAK,CAAC,cAAO,CAAC,CAAC;yBACf,IAAI,CAAC;wBACF,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC;oBACnC,CAAC,CAAC,CAAC;iBACV;qBAAM;oBACH,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;iBAC3F;YACL,CAAC,CAAC;iBACD,IAAI,CAAC;gBACF,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;YACtE,CAAC,CAAC;iBACD,KAAK,CAAC,UAAC,CAAC;gBACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzB,OAAO,KAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACO,oCAAW,GAArB;QACI,sBAAsB;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,uDAAuD;QACvD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;SACtD;QACD,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/C,mCAAmC;QAEnC,qDAAqD;QACrD,IAAI,aAAa,CAAC,oBAAoB,EAAE;YACpC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;YAClD,MAAM,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpD;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;YAC3C,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;YAClD,MAAM,CAAC,aAAa,CAAC,2BAA2B,GAAG,IAAI,CAAC;YACxD,IAAM,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,MAAM,EAAE;gBACP,MAAyB,CAAC,sBAAsB,GAAG,IAAI,CAAC;aAC5D;YACD,WAAW,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAC,MAAM;gBAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;oBACxB,IAAM,QAAM,GAAG,MAAwB,CAAC;oBACxC,QAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;iBACxC;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAEnF,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YACvB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACnD;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,EAAE;gBAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;aAC9C;YACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE;gBACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACnB;SACJ;QAED,gDAAgD;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEzG,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAID;;;;;;;OAOG;IACI,kCAAS,GAAhB,UAAiB,WAAgD,EAAE,UAA0B;QAA7F,iBAoDC;QApDkE,2BAAA,EAAA,iBAA0B;QACzF,IAAI,aAAkC,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACjC,aAAa,GAAG;gBACZ,GAAG,EAAE,WAAW;aACnB,CAAC;SACL;aAAM,IAAI,WAAW,YAAY,IAAI,EAAE;YACpC,aAAa,GAAG;gBACZ,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,OAAO;aAChB,CAAC;SACL;aAAM;YACH,aAAa,GAAG,WAAW,CAAC;SAC/B;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACxC;QAED,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC7C;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC1E,IAAM,YAAY,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7D,aAAa,GAAG,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YACvD,IAAI,WAAW,YAAY,IAAI,EAAE;gBAC7B,aAAa,CAAC,IAAI,GAAG,WAAW,CAAC;aACpC;SACJ;aAAM;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC;SAC5C;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAC,WAAW;YACxC,KAAI,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAC,aAAa;YAC7C,KAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE5E,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACzB,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACI,kCAAS,GAAhB,UAAiB,WAAgD,EAAE,UAA0B;QAA7F,iBAyBC;QAzBkE,2BAAA,EAAA,iBAA0B;QACzF,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,2FAA2F;YAC3F,OAAO,OAAO,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC;SACpE;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;aAC1C,IAAI,CAAC,UAAC,KAAK;YACR,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAChE;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;aACD,IAAI,CAAC;YACF,IAAM,KAAK,GAAG,KAAI,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YACtD,OAAO,IAAI,OAAO,CAAc,UAAC,OAAO,EAAE,MAAM;gBAC5C,gEAAgE;gBAChE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAC,KAAK;oBAClC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACX,CAAC;IAIS,6CAAoB,GAA9B;QAAA,iBAgBC;QAfG,gBAAgB,CAAC,SAAS,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE;YACxD,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC/B,CAAC,CAAC;QAEH,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAM,QAAQ,GAAa;YACvB,gBAAgB,CAAC,SAAS,CAAC,aAAa,EAAE,KAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QACX,uCAAuC;QACvC,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACO,6CAAoB,GAA9B;QACI,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QACvD,6DAA6D;QAC7D,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO;SACV;QACD,IAAI,aAAa,CAAC,OAAO,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;gBAC3C,sDAAsD;gBACtD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,aAAc,CAAC,OAAQ,CAAC,GAAG,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;SACN;QACD,IAAI,aAAa,CAAC,QAAQ,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;gBAC5C,sDAAsD;gBACtD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,aAAc,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACL,qBAAC;AAAD,CAAC,AAvzBD,IAuzBC","sourcesContent":["import { Engine } from \"core/Engines/engine\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport type { TargetCamera } from \"core/Cameras/targetCamera\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Effect } from \"core/Materials/effect\";\r\nimport { processConfigurationCompatibility } from \"../configuration/configurationCompatibility\";\r\nimport { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport { viewerGlobals } from \"../configuration/globals\";\r\nimport { RenderOnlyConfigurationLoader } from \"../configuration/renderOnlyLoader\";\r\n// eslint-disable-next-line import/no-internal-modules\r\nimport { deepmerge } from \"../helper/index\";\r\nimport { ModelLoader } from \"../loader/modelLoader\";\r\nimport { ObservablesManager } from \"../managers/observablesManager\";\r\nimport { SceneManager } from \"../managers/sceneManager\";\r\nimport { telemetryManager } from \"../managers/telemetryManager\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { viewerManager } from \"./viewerManager\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { IObserversConfiguration } from \"../configuration/interfaces/observersConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/glTFFileLoader\";\r\nimport \"core/Misc/observable.extensions\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * The AbstractViewer is the center of Babylon's viewer.\r\n * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates\r\n */\r\nexport abstract class AbstractViewer {\r\n /**\r\n * Babylon Engine corresponding with this viewer\r\n */\r\n public engine: Engine;\r\n /**\r\n * The ID of this viewer. it will be generated randomly or use the HTML Element's ID.\r\n */\r\n public readonly baseId: string;\r\n\r\n /**\r\n * The last loader used to load a model.\r\n * @deprecated\r\n */\r\n public lastUsedLoader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n /**\r\n * The ModelLoader instance connected with this viewer.\r\n */\r\n public modelLoader: ModelLoader;\r\n\r\n /**\r\n * A flag that controls whether or not the render loop should be executed\r\n */\r\n public runRenderLoop: boolean = true;\r\n\r\n /**\r\n * The scene manager connected with this viewer instance\r\n */\r\n public sceneManager: SceneManager;\r\n\r\n // observables\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n public get onSceneInitObservable(): Observable<Scene> {\r\n return this.observablesManager.onSceneInitObservable;\r\n }\r\n /**\r\n * will notify when the engine was initialized\r\n */\r\n public get onEngineInitObservable(): Observable<Engine> {\r\n return this.observablesManager.onEngineInitObservable;\r\n }\r\n\r\n /**\r\n * Will notify when a new model was added to the scene.\r\n * Note that added does not necessarily mean loaded!\r\n */\r\n public get onModelAddedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelAddedObservable;\r\n }\r\n /**\r\n * will notify after every model load\r\n */\r\n public get onModelLoadedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelLoadedObservable;\r\n }\r\n /**\r\n * will notify when any model notify of progress\r\n */\r\n public get onModelLoadProgressObservable(): Observable<ISceneLoaderProgressEvent> {\r\n return this.observablesManager.onModelLoadProgressObservable;\r\n }\r\n /**\r\n * will notify when any model load failed.\r\n */\r\n public get onModelLoadErrorObservable(): Observable<{ message: string; exception: any }> {\r\n return this.observablesManager.onModelLoadErrorObservable;\r\n }\r\n /**\r\n * Will notify when a model was removed from the scene;\r\n */\r\n public get onModelRemovedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelRemovedObservable;\r\n }\r\n /**\r\n * will notify when a new loader was initialized.\r\n * Used mainly to know when a model starts loading.\r\n */\r\n public get onLoaderInitObservable(): Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n return this.observablesManager.onLoaderInitObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when the entire load process has finished.\r\n */\r\n public get onInitDoneObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onViewerInitDoneObservable;\r\n }\r\n\r\n /**\r\n * Functions added to this observable will be executed on each frame rendered.\r\n */\r\n public get onFrameRenderedObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onFrameRenderedObservable;\r\n }\r\n\r\n /**\r\n * Observers registered here will be executed when VR more is entered.\r\n */\r\n public get onEnteringVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onEnteringVRObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when VR mode is exited.\r\n */\r\n public get onExitingVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onExitingVRObservable;\r\n }\r\n\r\n public observablesManager: ObservablesManager;\r\n\r\n /**\r\n * The canvas associated with this viewer\r\n */\r\n protected _canvas: HTMLCanvasElement;\r\n\r\n /**\r\n * The (single) canvas of this viewer\r\n */\r\n public get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n /**\r\n * is this viewer disposed?\r\n */\r\n protected _isDisposed: boolean = false;\r\n\r\n /**\r\n * registered onBeforeRender functions.\r\n * This functions are also registered at the native scene. The reference can be used to unregister them.\r\n */\r\n protected _registeredOnBeforeRenderFunctions: Array<() => void>;\r\n /**\r\n * The configuration loader of this viewer\r\n */\r\n protected _configurationLoader: RenderOnlyConfigurationLoader;\r\n\r\n /**\r\n * Is the viewer already initialized. for internal use.\r\n */\r\n protected _isInit: boolean;\r\n\r\n protected _configurationContainer: ConfigurationContainer;\r\n\r\n public get configurationContainer() {\r\n return this._configurationContainer;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected getConfigurationLoader() {\r\n return new RenderOnlyConfigurationLoader();\r\n }\r\n\r\n constructor(\r\n public containerElement: Element,\r\n initialConfiguration: ViewerConfiguration = {}\r\n ) {\r\n // if exists, use the container id. otherwise, generate a random string.\r\n if (containerElement.id) {\r\n this.baseId = containerElement.id;\r\n } else {\r\n this.baseId = containerElement.id = \"bjs\" + Math.random().toString(32).substr(2, 8);\r\n }\r\n\r\n this._registeredOnBeforeRenderFunctions = [];\r\n\r\n this._configurationContainer = new ConfigurationContainer();\r\n\r\n this.observablesManager = new ObservablesManager();\r\n\r\n this.modelLoader = new ModelLoader(this.observablesManager, this._configurationContainer);\r\n\r\n RenderingManager.AUTOCLEAR = false;\r\n\r\n // extend the configuration\r\n this._configurationLoader = this.getConfigurationLoader();\r\n this._configurationLoader.loadConfiguration(initialConfiguration, (configuration) => {\r\n this._onConfigurationLoaded(configuration);\r\n });\r\n\r\n this.onSceneInitObservable.add(() => {\r\n this.updateConfiguration();\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this._isInit = true;\r\n this.engine.runRenderLoop(this._render);\r\n });\r\n\r\n this._prepareContainerElement();\r\n\r\n // add this viewer to the viewer manager\r\n viewerManager.addViewer(this);\r\n }\r\n\r\n /**\r\n * get the baseId of this viewer\r\n */\r\n public getBaseId(): string {\r\n return this.baseId;\r\n }\r\n\r\n /**\r\n * Do we have a canvas to render on, and is it a part of the scene\r\n */\r\n public isCanvasInDOM(): boolean {\r\n return !!this._canvas && !!this._canvas.parentElement;\r\n }\r\n\r\n /**\r\n * Is the engine currently set to render even when the page is in background\r\n */\r\n public get renderInBackground() {\r\n return this.engine && this.engine.renderEvenInBackground;\r\n }\r\n\r\n /**\r\n * Set the viewer's background rendering flag.\r\n */\r\n public set renderInBackground(value: boolean) {\r\n if (this.engine) {\r\n this.engine.renderEvenInBackground = value;\r\n }\r\n }\r\n\r\n /**\r\n * Get the configuration object. This is a reference only.\r\n * The configuration can ONLY be updated using the updateConfiguration function.\r\n * changing this object will have no direct effect on the scene.\r\n */\r\n public get configuration(): ViewerConfiguration {\r\n return this._configurationContainer.configuration;\r\n }\r\n\r\n /**\r\n * force resizing the engine.\r\n */\r\n public forceResize() {\r\n this._resize();\r\n }\r\n\r\n protected _hdToggled: boolean = false;\r\n\r\n public toggleHD() {\r\n this._hdToggled = !this._hdToggled;\r\n\r\n const scale = this._hdToggled ? Math.max(0.5, 1 / (window.devicePixelRatio || 2)) : 1;\r\n\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n\r\n protected _vrToggled: boolean = false;\r\n private _vrModelRepositioning: number = 0;\r\n protected _vrScale: number = 1;\r\n\r\n protected _vrInit: boolean = false;\r\n\r\n public toggleVR() {\r\n if (!this._vrInit) {\r\n this._initVR();\r\n }\r\n\r\n if (this.sceneManager.vrHelper && !this.sceneManager.vrHelper.isInVRMode) {\r\n // make sure the floor is set\r\n if (this.sceneManager.environmentHelper && this.sceneManager.environmentHelper.ground) {\r\n this.sceneManager.vrHelper.addFloorMesh(this.sceneManager.environmentHelper.ground);\r\n }\r\n\r\n this._vrToggled = true;\r\n this.sceneManager.vrHelper.enterVR();\r\n\r\n // position the vr camera to be in front of the object or wherever the user has configured it to be\r\n if (this.sceneManager.vrHelper.currentVRCamera && this.sceneManager.vrHelper.currentVRCamera !== this.sceneManager.camera) {\r\n if (this.configuration.vr && this.configuration.vr.cameraPosition !== undefined) {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(\r\n this.configuration.vr.cameraPosition.x,\r\n this.configuration.vr.cameraPosition.y,\r\n this.configuration.vr.cameraPosition.z\r\n );\r\n } else {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(0, this.sceneManager.vrHelper.currentVRCamera.position.y, -1);\r\n }\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion &&\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // set the height of the model to be what the user has configured, or floating by default\r\n if (this.configuration.vr && this.configuration.vr.modelHeightCorrection !== undefined) {\r\n if (typeof this.configuration.vr.modelHeightCorrection === \"number\") {\r\n this._vrModelRepositioning = this.configuration.vr.modelHeightCorrection;\r\n } else if (this.configuration.vr.modelHeightCorrection) {\r\n this._vrModelRepositioning = this.sceneManager.vrHelper.currentVRCamera.position.y / 2;\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n }\r\n\r\n // scale the model\r\n if (this.sceneManager.models.length) {\r\n const boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n const sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n const maxDimension = Math.max(sizeVec.x, sizeVec.y, sizeVec.z);\r\n this._vrScale = 1 / maxDimension;\r\n if (this.configuration.vr && this.configuration.vr.objectScaleFactor) {\r\n this._vrScale *= this.configuration.vr.objectScaleFactor;\r\n }\r\n\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(this._vrScale);\r\n\r\n // reposition the object to \"float\" in front of the user\r\n this.sceneManager.models[0].rootMesh.position.y += this._vrModelRepositioning;\r\n this.sceneManager.models[0].rootMesh.rotationQuaternion = null;\r\n }\r\n\r\n // scale the environment to match the model\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = false;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.vrHelper) {\r\n this.sceneManager.vrHelper.exitVR();\r\n }\r\n }\r\n }\r\n\r\n protected _initVR() {\r\n if (this.sceneManager.vrHelper) {\r\n this.observablesManager.onExitingVRObservable.add(() => {\r\n if (this._vrToggled) {\r\n this._vrToggled = false;\r\n\r\n // undo the scaling of the model\r\n if (this.sceneManager.models.length) {\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.models[0].rootMesh.position.y -= this._vrModelRepositioning;\r\n }\r\n\r\n // undo the scaling of the environment\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(1 / this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = true;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n\r\n // clear set height and width\r\n this.canvas.removeAttribute(\"height\");\r\n this.canvas.removeAttribute(\"width\");\r\n this.engine.resize();\r\n }\r\n });\r\n }\r\n\r\n this._vrInit = true;\r\n }\r\n\r\n /**\r\n * The resize function that will be registered with the window object\r\n */\r\n protected _resize = (): void => {\r\n // Only resize if Canvas is in the DOM\r\n if (!this.isCanvasInDOM()) {\r\n return;\r\n }\r\n\r\n if (this.canvas.clientWidth <= 0 || this.canvas.clientHeight <= 0) {\r\n return;\r\n }\r\n\r\n if (this.configuration.engine && this.configuration.engine.disableResize) {\r\n return;\r\n }\r\n\r\n this.engine.resize();\r\n };\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, configuration);\r\n if (this.configuration.observers) {\r\n this._configureObservers(this.configuration.observers);\r\n }\r\n // TODO remove this after testing, as this is done in the updateConfiguration as well.\r\n if (this.configuration.loaderPlugins) {\r\n Object.keys(this.configuration.loaderPlugins).forEach((name) => {\r\n if (this.configuration.loaderPlugins && this.configuration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n });\r\n }\r\n\r\n this.observablesManager.onViewerInitStartedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Force a single render loop execution.\r\n */\r\n public forceRender() {\r\n this._render(true);\r\n }\r\n\r\n /**\r\n * render loop that will be executed by the engine\r\n * @param force\r\n */\r\n protected _render = (force: boolean = false): void => {\r\n if (force || (this.sceneManager.scene && this.sceneManager.scene.activeCamera)) {\r\n if (this.runRenderLoop || force) {\r\n this.engine.performanceMonitor.enable();\r\n this.sceneManager.scene.render();\r\n this.onFrameRenderedObservable.notifyObservers(this);\r\n } else {\r\n this.engine.performanceMonitor.disable();\r\n\r\n // update camera instead of rendering\r\n this.sceneManager.scene.activeCamera && this.sceneManager.scene.activeCamera.update();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Takes a screenshot of the scene and returns it as a base64 encoded png.\r\n * @param callback optional callback that will be triggered when screenshot is done.\r\n * @param width Optional screenshot width (default to 512).\r\n * @param height Optional screenshot height (default to 512).\r\n * @returns a promise with the screenshot data\r\n */\r\n public takeScreenshot(callback?: (data: string) => void, width = 0, height = 0): Promise<string> {\r\n width = width || this.canvas.clientWidth;\r\n height = height || this.canvas.clientHeight;\r\n\r\n // Create the screenshot\r\n return new Promise<string>((resolve, reject) => {\r\n try {\r\n Tools.CreateScreenshot(this.engine, this.sceneManager.camera, { width, height }, (data) => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n resolve(data);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the current viewer configuration with new values.\r\n * Only provided information will be updated, old configuration values will be kept.\r\n * If this.configuration was manually changed, you can trigger this function with no parameters,\r\n * and the entire configuration will be updated.\r\n * @param newConfiguration the partial configuration to update or a URL to a JSON holding the updated configuration\r\n *\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration> | string = this.configuration) {\r\n if (typeof newConfiguration === \"string\") {\r\n Tools.LoadFile(\r\n newConfiguration,\r\n (data) => {\r\n try {\r\n const newData = JSON.parse(data.toString()) as ViewerConfiguration;\r\n return this.updateConfiguration(newData);\r\n } catch (e) {\r\n Logger.Log(\"Error parsing file \" + newConfiguration);\r\n }\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n (error) => {\r\n Logger.Log([\"Error parsing file \" + newConfiguration, error]);\r\n }\r\n );\r\n } else {\r\n //backcompat\r\n processConfigurationCompatibility(newConfiguration);\r\n // update this.configuration with the new data\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, newConfiguration);\r\n\r\n this.sceneManager.updateConfiguration(newConfiguration);\r\n\r\n // observers in configuration\r\n if (newConfiguration.observers) {\r\n this._configureObservers(newConfiguration.observers);\r\n }\r\n\r\n if (newConfiguration.loaderPlugins) {\r\n Object.keys(newConfiguration.loaderPlugins).forEach((name) => {\r\n if (newConfiguration.loaderPlugins && newConfiguration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * this is used to register native functions using the configuration object.\r\n * This will configure the observers.\r\n * @param observersConfiguration observers configuration\r\n */\r\n protected _configureObservers(observersConfiguration: IObserversConfiguration) {\r\n if (observersConfiguration.onEngineInit) {\r\n this.onEngineInitObservable.add((window as any)[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === \"\" && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback((window as any)[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add((window as any)[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === \"\" && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback((window as any)[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add((window as any)[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === \"\" && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback((window as any)[this.configuration.observers!.onModelLoaded!]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n window.removeEventListener(\"resize\", this._resize);\r\n\r\n if (this.sceneManager) {\r\n if (this.sceneManager.scene && this.sceneManager.scene.activeCamera) {\r\n this.sceneManager.scene.activeCamera.detachControl();\r\n }\r\n this.sceneManager.dispose();\r\n }\r\n\r\n this._fpsTimeoutInterval && clearInterval(this._fpsTimeoutInterval);\r\n\r\n this.observablesManager.dispose();\r\n\r\n this.modelLoader.dispose();\r\n\r\n if (this.engine) {\r\n this.engine.dispose();\r\n }\r\n\r\n viewerManager.removeViewer(this);\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * This will prepare the container element for the viewer\r\n */\r\n protected abstract _prepareContainerElement(): void;\r\n\r\n /**\r\n * This function will execute when the HTML templates finished initializing.\r\n * It should initialize the engine and continue execution.\r\n *\r\n * @returns {Promise<AbstractViewer>} The viewer object will be returned after the object was loaded.\r\n */\r\n protected _onTemplatesLoaded(): Promise<AbstractViewer> {\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * This will force the creation of an engine and a scene.\r\n * It will also load a model if preconfigured.\r\n * But first - it will load the extendible onTemplateLoaded()!\r\n */\r\n protected _onTemplateLoaded(): Promise<AbstractViewer> {\r\n // check if viewer was disposed right after created\r\n if (this._isDisposed) {\r\n return Promise.reject(\"viewer was disposed\");\r\n }\r\n return this._onTemplatesLoaded().then(() => {\r\n const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\r\n .catch((e) => {\r\n Tools.Warn(e.toString());\r\n return this;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the engine. Returns a promise in case async calls are needed.\r\n *\r\n * @protected\r\n * @returns {Promise<Engine>}\r\n * @memberof Viewer\r\n */\r\n protected _initEngine(): Promise<Engine> {\r\n // init custom shaders\r\n this._injectCustomShaders();\r\n\r\n //let canvasElement = this.templateManager.getCanvas();\r\n if (!this.canvas) {\r\n return Promise.reject(\"Canvas element not found!\");\r\n }\r\n const config = this.configuration.engine || {};\r\n // TDO enable further configuration\r\n\r\n // check for webgl2 support, force-disable if needed.\r\n if (viewerGlobals.disableWebGL2Support) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.disableWebGL2Support = true;\r\n }\r\n\r\n if (this.configuration[\"3dCommerceCertified\"]) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.forceSRGBBufferSupportState = true;\r\n const loader = SceneLoader.GetPluginForExtension(\".gltf\");\r\n if (loader) {\r\n (loader as GLTFFileLoader).transparencyAsCoverage = true;\r\n }\r\n SceneLoader.OnPluginActivatedObservable.add((plugin) => {\r\n if (plugin.name === \"gltf\") {\r\n const loader = plugin as GLTFFileLoader;\r\n loader.transparencyAsCoverage = true;\r\n }\r\n });\r\n }\r\n\r\n this.engine = new Engine(this.canvas, !!config.antialiasing, config.engineOptions);\r\n\r\n if (!config.disableResize) {\r\n window.addEventListener(\"resize\", this._resize);\r\n }\r\n\r\n if (this.configuration.engine) {\r\n if (this.configuration.engine.adaptiveQuality) {\r\n const scale = Math.max(0.5, 1 / (window.devicePixelRatio || 2));\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n if (this.configuration.engine.hdEnabled) {\r\n this.toggleHD();\r\n }\r\n }\r\n\r\n // create a new template manager for this viewer\r\n this.sceneManager = new SceneManager(this.engine, this._configurationContainer, this.observablesManager);\r\n\r\n return Promise.resolve(this.engine);\r\n }\r\n\r\n private _isLoading: boolean;\r\n\r\n /**\r\n * Initialize a model loading. The returned object (a ViewerModel object) will be loaded in the background.\r\n * The difference between this and loadModel is that loadModel will fulfill the promise when the model finished loading.\r\n *\r\n * @param modelConfig model configuration to use when loading the model.\r\n * @param clearScene should the scene be cleared before loading this model\r\n * @returns a ViewerModel object that is not yet fully loaded.\r\n */\r\n public initModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): ViewerModel {\r\n let configuration: IModelConfiguration;\r\n if (typeof modelConfig === \"string\") {\r\n configuration = {\r\n url: modelConfig,\r\n };\r\n } else if (modelConfig instanceof File) {\r\n configuration = {\r\n file: modelConfig,\r\n root: \"file:\",\r\n };\r\n } else {\r\n configuration = modelConfig;\r\n }\r\n\r\n if (!configuration.url && !configuration.file) {\r\n throw new Error(\"no model provided\");\r\n }\r\n\r\n if (clearScene) {\r\n this.sceneManager.clearScene(true, false);\r\n }\r\n\r\n //merge the configuration for future models:\r\n if (this.configuration.model && typeof this.configuration.model === \"object\") {\r\n const globalConfig = deepmerge({}, this.configuration.model);\r\n configuration = deepmerge(globalConfig, configuration);\r\n if (modelConfig instanceof File) {\r\n configuration.file = modelConfig;\r\n }\r\n } else {\r\n this.configuration.model = configuration;\r\n }\r\n\r\n this._isLoading = true;\r\n\r\n const model = this.modelLoader.load(configuration);\r\n\r\n this.lastUsedLoader = model.loader;\r\n model.onLoadErrorObservable.add((errorObject) => {\r\n this.onModelLoadErrorObservable.notifyObserversWithPromise(errorObject);\r\n });\r\n model.onLoadProgressObservable.add((progressEvent) => {\r\n this.onModelLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n });\r\n this.onLoaderInitObservable.notifyObserversWithPromise(this.lastUsedLoader);\r\n\r\n model.onLoadedObservable.add(() => {\r\n this._isLoading = false;\r\n });\r\n\r\n return model;\r\n }\r\n\r\n /**\r\n * load a model using the provided configuration.\r\n * This function, as opposed to initModel, will return a promise that resolves when the model is loaded, and rejects with error.\r\n * If you want to attach to the observables of the model, use initModel instead.\r\n *\r\n * @param modelConfig the model configuration or URL to load.\r\n * @param clearScene Should the scene be cleared before loading the model\r\n * @returns a Promise the fulfills when the model finished loading successfully.\r\n */\r\n public loadModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): Promise<ViewerModel> {\r\n if (this._isLoading) {\r\n // We can decide here whether or not to cancel the lst load, but the developer can do that.\r\n return Promise.reject(\"another model is curently being loaded.\");\r\n }\r\n\r\n return Promise.resolve(this.sceneManager.scene)\r\n .then((scene) => {\r\n if (!scene) {\r\n return this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n return scene;\r\n })\r\n .then(() => {\r\n const model = this.initModel(modelConfig, clearScene);\r\n return new Promise<ViewerModel>((resolve, reject) => {\r\n // at this point, configuration.model is an object, not a string\r\n model.onLoadedObservable.add(() => {\r\n resolve(model);\r\n });\r\n model.onLoadErrorObservable.add((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private _fpsTimeoutInterval: number;\r\n\r\n protected _initTelemetryEvents() {\r\n telemetryManager.broadcast(\"Engine Capabilities\", this.baseId, this.engine.getCaps());\r\n telemetryManager.broadcast(\"Platform Details\", this.baseId, {\r\n userAgent: navigator.userAgent,\r\n platform: navigator.platform,\r\n });\r\n\r\n telemetryManager.flushWebGLErrors(this.engine, this.baseId);\r\n\r\n const trackFPS: Function = () => {\r\n telemetryManager.broadcast(\"Current FPS\", this.baseId, { fps: this.engine.getFps() });\r\n };\r\n\r\n trackFPS();\r\n // Track the FPS again after 60 seconds\r\n this._fpsTimeoutInterval = window.setInterval(trackFPS, 60 * 1000);\r\n }\r\n\r\n /**\r\n * Injects all the spectre shader in the babylon shader store\r\n */\r\n protected _injectCustomShaders(): void {\r\n const customShaders = this.configuration.customShaders;\r\n // Inject all the spectre shader in the babylon shader store.\r\n if (!customShaders) {\r\n return;\r\n }\r\n if (customShaders.shaders) {\r\n Object.keys(customShaders.shaders).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.ShadersStore[key] = customShaders!.shaders![key];\r\n });\r\n }\r\n if (customShaders.includes) {\r\n Object.keys(customShaders.includes).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.IncludesShadersStore[key] = customShaders!.includes![key];\r\n });\r\n }\r\n }\r\n}\r\n"]}