@babylonjs/viewer 7.26.3 → 7.26.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/viewer",
3
- "version": "7.26.3",
3
+ "version": "7.26.4",
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": "^7.26.3",
22
- "@babylonjs/loaders": "^7.26.3",
23
- "babylonjs-gltf2interface": "^7.26.3",
24
- "babylonjs-viewer-assets": "^7.26.3",
21
+ "@babylonjs/core": "^7.26.4",
22
+ "@babylonjs/loaders": "^7.26.4",
23
+ "babylonjs-gltf2interface": "^7.26.4",
24
+ "babylonjs-viewer-assets": "^7.26.4",
25
25
  "deepmerge": "~4.2.2",
26
26
  "handlebars": "~4.7.7",
27
27
  "pepjs": "~0.5.3",
@@ -211,19 +211,16 @@ var DefaultViewer = /** @class */ (function (_super) {
211
211
  var viewerElement = viewerTemplate && viewerTemplate.parent;
212
212
  var fullscreenElement = _this.fullscreenElement || viewerElement;
213
213
  if (fullscreenElement) {
214
- var currentElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
214
+ var currentElement = document.fullscreenElement || document.webkitFullscreenElement;
215
215
  if (!currentElement) {
216
- var requestFullScreen = fullscreenElement.requestFullscreen ||
217
- fullscreenElement.webkitRequestFullscreen ||
218
- fullscreenElement.msRequestFullscreen ||
219
- fullscreenElement.mozRequestFullScreen;
216
+ var requestFullScreen = fullscreenElement.requestFullscreen || fullscreenElement.webkitRequestFullscreen;
220
217
  requestFullScreen.call(fullscreenElement);
221
218
  if (viewerElement) {
222
219
  viewerElement.classList.add("in-fullscreen");
223
220
  }
224
221
  }
225
222
  else {
226
- var exitFullscreen = document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen || document.mozCancelFullScreen;
223
+ var exitFullscreen = document.exitFullscreen || document.webkitExitFullscreen;
227
224
  exitFullscreen.call(document);
228
225
  if (viewerElement) {
229
226
  viewerElement.classList.remove("in-fullscreen");
@@ -1 +1 @@
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 override 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 * @returns a promise that will be resolved when the templates are loaded\r\n */\r\n protected override _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 override _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 * @returns a promise that will be resolved when the model is loaded\r\n */\r\n public override async 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 try {\r\n return await super.loadModel(model!, true);\r\n } catch (error) {\r\n Logger.Log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return await 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 * @returns a promise that will be resolved when the overlay is shown\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 * @returns a promise that will be resolved when the overlay is hidden\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 * @returns a promise that will be resolved when the viewer is shown\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 * @returns a promise that will be resolved when the viewer is hidden\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 * @returns a promise that will be resolved when the loading screen is shown\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 * @returns a promise that will be resolved when the loading screen is hidden\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 override dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected override _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":";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;AAKtE,OAAO,EAAE,MAAM,EAAE,uCAAyB;AAE1C,yEAA2D;AAE3D;;;GAGG;AACH;IAAmC,iCAA0B;IAQzD;;;;OAIG;IACH,uBACoB,gBAAyB,EACzC,oBAAkE;QAAlE,qCAAA,EAAA,yBAA8C,OAAO,EAAE,SAAS,EAAE;QAFtE,YAII,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAiChD;QApCmB,sBAAgB,GAAhB,gBAAgB,CAAS;QAsCrC,wBAAkB,GAAiC,EAAE,CAAC;QA4ItD,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,GAAS,QAAS,CAAC,iBAAiB,IAAU,QAAS,CAAC,uBAAuB,CAAC;gBACpG,IAAI,CAAC,cAAc,EAAE;oBACjB,IAAM,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,IAAU,iBAAkB,CAAC,uBAAuB,CAAC;oBAClH,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,CAAC;oBACvF,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;QA+EM,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;QAjfE,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;;;OAGG;IACgB,0CAAkB,GAArC;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;IAuMkB,+BAAO,GAA1B;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;IA4BD;;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;;;;;;OAMG;IACmB,iCAAS,GAA/B,UAAgC,KAA2C;;;;;;wBACvE,IAAI,CAAC,KAAK,EAAE;4BACR,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;yBACpC;wBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;;wBAEd,qBAAM,iBAAM,SAAS,YAAC,KAAM,EAAE,IAAI,CAAC,EAAA;4BAA1C,sBAAO,SAAmC,EAAC;;;wBAE3C,MAAM,CAAC,GAAG,CAAC,OAAK,CAAC,CAAC;wBAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACzB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;wBACzB,qBAAM,OAAO,CAAC,MAAM,CAAC,OAAK,CAAC,EAAA;4BAAlC,sBAAO,SAA2B,EAAC;;;;;KAE1C;IAkBD;;;;;OAKG;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;;;OAGG;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;;;;;OAKG;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;;;;;OAKG;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,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;;;OAGG;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;IAEe,+BAAO,GAAvB;QACI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC/B,iBAAM,OAAO,WAAE,CAAC;IACpB,CAAC;IAEkB,8CAAsB,GAAzC,UAA0C,aAAkC;QAA5E,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,AAztBD,CAAmC,0BAA0B,GAytB5D","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 override 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 * @returns a promise that will be resolved when the templates are loaded\r\n */\r\n protected override _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 override _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 = (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement;\r\n if (!currentElement) {\r\n const requestFullScreen = fullscreenElement.requestFullscreen || (<any>fullscreenElement).webkitRequestFullscreen;\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;\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 * @returns a promise that will be resolved when the model is loaded\r\n */\r\n public override async 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 try {\r\n return await super.loadModel(model!, true);\r\n } catch (error) {\r\n Logger.Log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen(\"error\");\r\n return await 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 * @returns a promise that will be resolved when the overlay is shown\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 * @returns a promise that will be resolved when the overlay is hidden\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 * @returns a promise that will be resolved when the viewer is shown\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 * @returns a promise that will be resolved when the viewer is hidden\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 * @returns a promise that will be resolved when the loading screen is shown\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 * @returns a promise that will be resolved when the loading screen is hidden\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 override dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected override _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"]}