@colijnit/homedecorator 255.1.4 → 255.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/app/core/enum/message-type.enum.d.ts +3 -1
  2. package/app/core/interface/message-with-payload.interface.d.ts +6 -0
  3. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  4. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  5. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  6. package/app/core/service/presets.service.d.ts +3 -1
  7. package/app/homedecorator.component.d.ts +3 -1
  8. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  9. package/app/plugins/core3d/service/post-processing.service.d.ts +16 -4
  10. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  11. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +10 -2
  12. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +180 -15
  13. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  14. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  15. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  16. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  17. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  18. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +0 -3
  19. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  20. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  21. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  22. package/assets/icons/dash-button.svg +7 -0
  23. package/assets/icons/pen-ruler.svg +1 -0
  24. package/assets/icons/retry-button.svg +7 -0
  25. package/bundles/colijnit-homedecorator.umd.js +514 -423
  26. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  27. package/esm2015/app/app.version.js +3 -3
  28. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  29. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  30. package/esm2015/app/core/service/3dm-api.js +4 -4
  31. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  32. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  33. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  34. package/esm2015/app/core/service/presets.service.js +13 -5
  35. package/esm2015/app/core/utils/material.utils.js +3 -3
  36. package/esm2015/app/homedecorator.component.js +25 -19
  37. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +2 -2
  38. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  39. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  40. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  41. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  42. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  43. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +2 -2
  44. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  45. package/esm2015/app/plugins/core3d/service/post-processing.service.js +96 -35
  46. package/esm2015/app/plugins/core3d/service/scene.service.js +17 -11
  47. package/esm2015/app/plugins/core3d/service/ssr.service.js +1 -52
  48. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  49. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +264 -168
  50. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  51. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  52. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  53. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  54. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +24 -12
  55. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  56. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  57. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +4 -15
  58. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  59. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  60. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  61. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  62. package/fesm2015/colijnit-homedecorator.js +682 -483
  63. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  64. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@colijnit/configuratorapi/build/enum/node-type.enum'), require('@colijnit/configuratorapi/build/model/configurator-statistics-environment'), require('@colijnit/ioneconnector/build/model/options'), require('@colijnit/ioneconnector/build/model/data-service-response-data'), require('@colijnit/configuratorapi/build/model/frozen-article'), require('@colijnit/configuratorapi/build/model/selection'), require('@colijnit/configuratorapi/build/model/answer-price'), require('@colijnit/configuratorapi/build/model/article'), require('@colijnit/configuratorapi/build/model/deco-node'), require('@colijnit/configuratorapi/build/model/skip-button-info'), require('@colijnit/configuratorapi'), require('@colijnit/mainapi'), require('@colijnit/articleapi/build/articles'), require('@colijnit/configuratorapi/build/model/article-text.bo'), require('@colijnit/ioneconnector/build/service/business-object-factory'), require('@colijnit/ioneconnector/build/utils/image-utils'), require('@colijnit/articleapi/build/model/external-catalog-startup-info'), require('@colijnit/articleapi/build/model/catalog-definition.bo'), require('@colijnit/articleapi/build/model/external-source.bo'), require('@colijnit/articleapi/build/model/article-full-object'), require('@colijnit/configuratorapi/build/model/article-category'), require('@colijnit/articleapi/build/model/article-flat.bo'), require('@colijnit/mainapi/build/enum/internal-param.enum'), require('@colijnit/ioneconnector/build/utils/string-utils'), require('@colijnit/configuratorapi/build/utils/image-utils'), require('@angular/common/http'), require('axios'), require('textdiff-patch'), require('three'), require('@tweenjs/tween.js'), require('polygon-tools'), require('three-gpu-pathtracer'), require('three-mesh-bvh/src/workers/ParallelMeshBVHWorker.js'), require('three/examples/jsm/geometries/TextGeometry'), require('three/examples/jsm/loaders/FontLoader'), require('three/examples/jsm/webxr/XRControllerModelFactory'), require('@colijnit/configuratorapi/build/enum/hdeco-positioning.enum'), require('three/examples/jsm/postprocessing/OutlinePass'), require('three/examples/jsm/postprocessing/EffectComposer'), require('three/examples/jsm/postprocessing/RenderPass'), require('three/examples/jsm/postprocessing/ShaderPass'), require('three/examples/jsm/shaders/FXAAShader'), require('three/examples/jsm/postprocessing/OutputPass'), require('md5'), require('three/examples/jsm/libs/lil-gui.module.min'), require('n8ao'), require('three/examples/jsm/postprocessing/TAARenderPass'), require('@angular/platform-browser'), require('ngx-device-detector'), require('@angular/material/icon'), require('@angular/animations'), require('@angular/common'), require('@angular/material/dialog'), require('three/examples/jsm/loaders/RGBELoader'), require('@colijnit/configuratorapi/build/enum/hdeco-placement.enum'), require('rxjs/internal/observable/fromEvent'), require('rxjs/operators'), require('rxjs/internal/observable/of'), require('three/examples/jsm/utils/BufferGeometryUtils.js'), require('three/examples/jsm/loaders/OBJLoader'), require('three/examples/jsm/loaders/MTLLoader'), require('three/examples/jsm/loaders/GLTFLoader'), require('three/examples/jsm/exporters/GLTFExporter'), require('three/examples/jsm/loaders/DRACOLoader'), require('three/examples/jsm/loaders/KTX2Loader'), require('three/examples/jsm/exporters/USDZExporter'), require('@angular/material/list'), require('@angular/material/core'), require('@colijnit/configuratorapi/build/enum/deco-node-type.enum'), require('jszip'), require('@colijnit/configuratorapi/build/enum/deco-node-kind.enum'), require('@angular/material/checkbox'), require('@angular/material/button'), require('@angular/forms'), require('three/examples/jsm/utils/BufferGeometryUtils'), require('three-mesh-bvh'), require('three/src/constants'), require('@colijnit/corecomponents'), require('@angular/material/form-field'), require('@angular/material/select'), require('@angular/material/tooltip'), require('@colijnit/corecomponents_v12'), require('@angular/material/slider'), require('@angular/material/input'), require('dat.gui'), require('@migenius/realityserver-client'), require('@angular/material/grid-list'), require('@angular/material/progress-spinner'), require('@angular/flex-layout/flex'), require('@angular/material/progress-bar'), require('three/examples/jsm/geometries/DecalGeometry'), require('fabric'), require('@angular/material/button-toggle'), require('@angular/material/snack-bar'), require('@angular/material/slide-toggle'), require('@angular/material/divider'), require('browser-image-compression'), require('@angular/material/tabs'), require('@angular/flex-layout/extended'), require('ngx-color/chrome'), require('@angular/router'), require('delaunator'), require('three/examples/jsm/helpers/VertexNormalsHelper'), require('@angular/cdk/portal'), require('file-saver'), require('ng2-pdf-viewer'), require('html2canvas'), require('three/examples/jsm/controls/OrbitControls'), require('three/examples/jsm/loaders/FBXLoader'), require('three/examples/jsm/loaders/TDSLoader'), require('three/examples/jsm/loaders/STLLoader'), require('@angular/material/radio'), require('@angular/material/toolbar'), require('@angular/material/menu'), require('@angular/material/card'), require('@angular/material/sidenav'), require('@angular/material/badge'), require('@colijnit/articleapi/build/model/external-catalog-startup-info-request'), require('@colijnit/catalog'), require('ngx-lightbox'), require('@angular/flex-layout'), require('@angular/cdk/drag-drop'), require('jspdf'), require('jspdf-autotable')) :
3
- typeof define === 'function' && define.amd ? define('@colijnit/homedecorator', ['exports', '@angular/core', 'rxjs', '@colijnit/configuratorapi/build/enum/node-type.enum', '@colijnit/configuratorapi/build/model/configurator-statistics-environment', '@colijnit/ioneconnector/build/model/options', '@colijnit/ioneconnector/build/model/data-service-response-data', '@colijnit/configuratorapi/build/model/frozen-article', '@colijnit/configuratorapi/build/model/selection', '@colijnit/configuratorapi/build/model/answer-price', '@colijnit/configuratorapi/build/model/article', '@colijnit/configuratorapi/build/model/deco-node', '@colijnit/configuratorapi/build/model/skip-button-info', '@colijnit/configuratorapi', '@colijnit/mainapi', '@colijnit/articleapi/build/articles', '@colijnit/configuratorapi/build/model/article-text.bo', '@colijnit/ioneconnector/build/service/business-object-factory', '@colijnit/ioneconnector/build/utils/image-utils', '@colijnit/articleapi/build/model/external-catalog-startup-info', '@colijnit/articleapi/build/model/catalog-definition.bo', '@colijnit/articleapi/build/model/external-source.bo', '@colijnit/articleapi/build/model/article-full-object', '@colijnit/configuratorapi/build/model/article-category', '@colijnit/articleapi/build/model/article-flat.bo', '@colijnit/mainapi/build/enum/internal-param.enum', '@colijnit/ioneconnector/build/utils/string-utils', '@colijnit/configuratorapi/build/utils/image-utils', '@angular/common/http', 'axios', 'textdiff-patch', 'three', '@tweenjs/tween.js', 'polygon-tools', 'three-gpu-pathtracer', 'three-mesh-bvh/src/workers/ParallelMeshBVHWorker.js', 'three/examples/jsm/geometries/TextGeometry', 'three/examples/jsm/loaders/FontLoader', 'three/examples/jsm/webxr/XRControllerModelFactory', '@colijnit/configuratorapi/build/enum/hdeco-positioning.enum', 'three/examples/jsm/postprocessing/OutlinePass', 'three/examples/jsm/postprocessing/EffectComposer', 'three/examples/jsm/postprocessing/RenderPass', 'three/examples/jsm/postprocessing/ShaderPass', 'three/examples/jsm/shaders/FXAAShader', 'three/examples/jsm/postprocessing/OutputPass', 'md5', 'three/examples/jsm/libs/lil-gui.module.min', 'n8ao', 'three/examples/jsm/postprocessing/TAARenderPass', '@angular/platform-browser', 'ngx-device-detector', '@angular/material/icon', '@angular/animations', '@angular/common', '@angular/material/dialog', 'three/examples/jsm/loaders/RGBELoader', '@colijnit/configuratorapi/build/enum/hdeco-placement.enum', 'rxjs/internal/observable/fromEvent', 'rxjs/operators', 'rxjs/internal/observable/of', 'three/examples/jsm/utils/BufferGeometryUtils.js', 'three/examples/jsm/loaders/OBJLoader', 'three/examples/jsm/loaders/MTLLoader', 'three/examples/jsm/loaders/GLTFLoader', 'three/examples/jsm/exporters/GLTFExporter', 'three/examples/jsm/loaders/DRACOLoader', 'three/examples/jsm/loaders/KTX2Loader', 'three/examples/jsm/exporters/USDZExporter', '@angular/material/list', '@angular/material/core', '@colijnit/configuratorapi/build/enum/deco-node-type.enum', 'jszip', '@colijnit/configuratorapi/build/enum/deco-node-kind.enum', '@angular/material/checkbox', '@angular/material/button', '@angular/forms', 'three/examples/jsm/utils/BufferGeometryUtils', 'three-mesh-bvh', 'three/src/constants', '@colijnit/corecomponents', '@angular/material/form-field', '@angular/material/select', '@angular/material/tooltip', '@colijnit/corecomponents_v12', '@angular/material/slider', '@angular/material/input', 'dat.gui', '@migenius/realityserver-client', '@angular/material/grid-list', '@angular/material/progress-spinner', '@angular/flex-layout/flex', '@angular/material/progress-bar', 'three/examples/jsm/geometries/DecalGeometry', 'fabric', '@angular/material/button-toggle', '@angular/material/snack-bar', '@angular/material/slide-toggle', '@angular/material/divider', 'browser-image-compression', '@angular/material/tabs', '@angular/flex-layout/extended', 'ngx-color/chrome', '@angular/router', 'delaunator', 'three/examples/jsm/helpers/VertexNormalsHelper', '@angular/cdk/portal', 'file-saver', 'ng2-pdf-viewer', 'html2canvas', 'three/examples/jsm/controls/OrbitControls', 'three/examples/jsm/loaders/FBXLoader', 'three/examples/jsm/loaders/TDSLoader', 'three/examples/jsm/loaders/STLLoader', '@angular/material/radio', '@angular/material/toolbar', '@angular/material/menu', '@angular/material/card', '@angular/material/sidenav', '@angular/material/badge', '@colijnit/articleapi/build/model/external-catalog-startup-info-request', '@colijnit/catalog', 'ngx-lightbox', '@angular/flex-layout', '@angular/cdk/drag-drop', 'jspdf', 'jspdf-autotable'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.colijnit = global.colijnit || {}, global.colijnit.homedecorator = {}), global.ng.core, global.rxjs, global.nodeType_enum, global.configuratorStatisticsEnvironment, global.options, global.dataServiceResponseData, global.frozenArticle, global.selection, global.answerPrice, global.article, global.decoNode, global.skipButtonInfo, global.configuratorapi, global.mainapi, global.articles, global.articleText_bo, global.businessObjectFactory, global.imageUtils, global.externalCatalogStartupInfo, global.catalogDefinition_bo, global.externalSource_bo, global.articleFullObject, global.articleCategory, global.articleFlat_bo, global.internalParam_enum, global.stringUtils, global.imageUtils$1, global.ng.common.http, global.axios, global.applyPatch, global.THREE, global.TWEEN, global.PolygonTools, global.threeGpuPathtracer, global.ParallelMeshBVHWorker_js, global.TextGeometry, global.FontLoader, global.XRControllerModelFactory, global.hdecoPositioning_enum, global.OutlinePass, global.EffectComposer, global.RenderPass, global.ShaderPass, global.FXAAShader, global.OutputPass, global.md5, global.GUI, global.n8ao, global.TAARenderPass, global.ng.platformBrowser, global.i2$1, global.ng.material.icon, global.ng.animations, global.ng.common, global.ng.material.dialog, global.RGBELoader, global.hdecoPlacement_enum, global.rxjs["internal/observable/fromEvent"], global.rxjs.operators, global.rxjs["internal/observable/of"], global.BufferGeometryUtils, global.OBJLoader, global.MTLLoader, global.GLTFLoader, global.GLTFExporter, global.DRACOLoader, global.KTX2Loader, global.USDZExporter, global.ng.material.list, global.ng.material.core, global.decoNodeType_enum, global.JSZip, global.decoNodeKind_enum, global.ng.material.checkbox, global.ng.material.button, global.ng.forms, global.BufferGeometryUtils$1, global.threeMeshBvh, global.constants, global.i4, global.ng.material.formField, global.ng.material.select, global.ng.material.tooltip, global.i4$1, global.ng.material.slider, global.ng.material.input, global.dat, global.realityserverClient, global.ng.material.gridList, global.ng.material.progressSpinner, global.ng.flexLayout.flex, global.ng.material.progressBar, global.DecalGeometry, global.fabric, global.ng.material.buttonToggle, global.ng.material.snackBar, global.ng.material.slideToggle, global.ng.material.divider, global.imageCompression, global.ng.material.tabs, global.ng.flexLayout.extended, global.i1$3, global.ng.router, global.Delaunator, global.VertexNormalsHelper, global.ng.cdk.portal, global.fileSaver, global.i6$2, global.html2canvas, global.OrbitControls, global.FBXLoader, global.TDSLoader, global.STLLoader, global.ng.material.radio, global.ng.material.toolbar, global.ng.material.menu, global.ng.material.card, global.ng.material.sidenav, global.ng.material.badge, global.externalCatalogStartupInfoRequest, global.i7$3, global.i1$5, global.ng.flexLayout, global.ng.cdk.dragDrop, global.jspdf, global.autoTable));
5
- })(this, (function (exports, i0, rxjs, nodeType_enum, configuratorStatisticsEnvironment, options, dataServiceResponseData, frozenArticle, selection, answerPrice, article, decoNode, skipButtonInfo, configuratorapi, mainapi, articles, articleText_bo, businessObjectFactory, imageUtils, externalCatalogStartupInfo, catalogDefinition_bo, externalSource_bo, articleFullObject, articleCategory, articleFlat_bo, internalParam_enum, stringUtils, imageUtils$1, i2, axios, applyPatch, THREE, TWEEN, PolygonTools, threeGpuPathtracer, ParallelMeshBVHWorker_js, TextGeometry, FontLoader, XRControllerModelFactory, hdecoPositioning_enum, OutlinePass, EffectComposer, RenderPass, ShaderPass, FXAAShader, OutputPass, md5, GUI, n8ao, TAARenderPass, i1, i2$1, i5$1, animations, i5, i1$1, RGBELoader, hdecoPlacement_enum, fromEvent, operators, of, BufferGeometryUtils, OBJLoader, MTLLoader, GLTFLoader, GLTFExporter, DRACOLoader, KTX2Loader, USDZExporter, i2$2, i3, decoNodeType_enum, JSZip, decoNodeKind_enum, i1$2, i3$1, i8, BufferGeometryUtils$1, threeMeshBvh, constants, i4, i7, i9, i10, i4$1, i7$1, i19, dat, realityserverClient, i3$2, i15, i3$3, i2$3, DecalGeometry, fabric, i7$2, i2$4, i10$1, i6, imageCompression, i1$4, i6$1, i1$3, i5$2, Delaunator, VertexNormalsHelper, i28, fileSaver, i6$2, html2canvas, OrbitControls, FBXLoader, TDSLoader, STLLoader, i9$1, i19$1, i22, i23, i26, i30, externalCatalogStartupInfoRequest, i7$3, i1$5, flexLayout, i10$2, jspdf, autoTable) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('@colijnit/configuratorapi/build/enum/node-type.enum'), require('@colijnit/configuratorapi/build/model/configurator-statistics-environment'), require('@colijnit/ioneconnector/build/model/options'), require('@colijnit/ioneconnector/build/model/data-service-response-data'), require('@colijnit/configuratorapi/build/model/frozen-article'), require('@colijnit/configuratorapi/build/model/selection'), require('@colijnit/configuratorapi/build/model/answer-price'), require('@colijnit/configuratorapi/build/model/article'), require('@colijnit/configuratorapi/build/model/deco-node'), require('@colijnit/configuratorapi/build/model/skip-button-info'), require('@colijnit/configuratorapi'), require('@colijnit/mainapi'), require('@colijnit/articleapi/build/articles'), require('@colijnit/configuratorapi/build/model/article-text.bo'), require('@colijnit/ioneconnector/build/service/business-object-factory'), require('@colijnit/ioneconnector/build/utils/image-utils'), require('@colijnit/articleapi/build/model/external-catalog-startup-info'), require('@colijnit/articleapi/build/model/catalog-definition.bo'), require('@colijnit/articleapi/build/model/external-source.bo'), require('@colijnit/articleapi/build/model/article-full-object'), require('@colijnit/configuratorapi/build/model/article-category'), require('@colijnit/articleapi/build/model/article-flat.bo'), require('@colijnit/mainapi/build/model/co-domain-value.bo'), require('@colijnit/mainapi/build/enum/domain-name.enum'), require('@colijnit/mainapi/build/enum/internal-param.enum'), require('@colijnit/ioneconnector/build/utils/string-utils'), require('@colijnit/configuratorapi/build/utils/image-utils'), require('@angular/common/http'), require('axios'), require('textdiff-patch'), require('three'), require('@tweenjs/tween.js'), require('polygon-tools'), require('three-gpu-pathtracer'), require('three-mesh-bvh/src/workers/ParallelMeshBVHWorker.js'), require('three/examples/jsm/geometries/TextGeometry'), require('three/examples/jsm/loaders/FontLoader'), require('three/examples/jsm/webxr/XRControllerModelFactory'), require('@colijnit/configuratorapi/build/enum/hdeco-positioning.enum'), require('three/examples/jsm/postprocessing/OutlinePass'), require('three/examples/jsm/postprocessing/EffectComposer'), require('three/examples/jsm/postprocessing/RenderPass'), require('three/examples/jsm/postprocessing/ShaderPass'), require('three/examples/jsm/shaders/FXAAShader'), require('three/examples/jsm/postprocessing/OutputPass'), require('three/examples/jsm/libs/lil-gui.module.min'), require('n8ao'), require('three/examples/jsm/shaders/BlendShader'), require('@angular/platform-browser'), require('ngx-device-detector'), require('@angular/material/icon'), require('@angular/animations'), require('@angular/common'), require('@angular/material/dialog'), require('three/examples/jsm/loaders/RGBELoader'), require('@colijnit/configuratorapi/build/enum/hdeco-placement.enum'), require('rxjs/internal/observable/fromEvent'), require('rxjs/operators'), require('rxjs/internal/observable/of'), require('three/examples/jsm/utils/BufferGeometryUtils.js'), require('three/examples/jsm/loaders/OBJLoader'), require('three/examples/jsm/loaders/MTLLoader'), require('three/examples/jsm/loaders/GLTFLoader'), require('three/examples/jsm/exporters/GLTFExporter'), require('three/examples/jsm/loaders/DRACOLoader'), require('three/examples/jsm/loaders/KTX2Loader'), require('three/examples/jsm/exporters/USDZExporter'), require('@angular/material/list'), require('@angular/material/core'), require('@colijnit/configuratorapi/build/enum/deco-node-type.enum'), require('jszip'), require('@colijnit/configuratorapi/build/enum/deco-node-kind.enum'), require('@angular/material/checkbox'), require('@angular/material/button'), require('@angular/forms'), require('three/examples/jsm/utils/BufferGeometryUtils'), require('three-mesh-bvh'), require('three/src/constants'), require('@colijnit/corecomponents'), require('@angular/material/form-field'), require('@angular/material/select'), require('@angular/material/tooltip'), require('@colijnit/corecomponents_v12'), require('@angular/material/slider'), require('@angular/material/input'), require('dat.gui'), require('@migenius/realityserver-client'), require('@angular/material/grid-list'), require('@angular/material/progress-spinner'), require('@angular/flex-layout/flex'), require('@angular/material/progress-bar'), require('three/examples/jsm/geometries/DecalGeometry'), require('fabric'), require('@angular/material/button-toggle'), require('@angular/material/snack-bar'), require('@angular/material/slide-toggle'), require('@angular/material/divider'), require('browser-image-compression'), require('@angular/material/tabs'), require('@angular/flex-layout/extended'), require('ngx-color/chrome'), require('@angular/router'), require('delaunator'), require('three/examples/jsm/helpers/VertexNormalsHelper'), require('@angular/cdk/portal'), require('file-saver'), require('ng2-pdf-viewer'), require('html2canvas'), require('three/examples/jsm/controls/OrbitControls'), require('three/examples/jsm/loaders/FBXLoader'), require('three/examples/jsm/loaders/TDSLoader'), require('three/examples/jsm/loaders/STLLoader'), require('@angular/material/toolbar'), require('@angular/material/menu'), require('@angular/material/card'), require('@angular/material/sidenav'), require('@angular/material/badge'), require('@colijnit/articleapi/build/model/external-catalog-startup-info-request'), require('@colijnit/catalog'), require('ngx-lightbox'), require('@angular/flex-layout'), require('@angular/cdk/drag-drop'), require('jspdf'), require('jspdf-autotable'), require('@angular/material/radio')) :
3
+ typeof define === 'function' && define.amd ? define('@colijnit/homedecorator', ['exports', '@angular/core', 'rxjs', '@colijnit/configuratorapi/build/enum/node-type.enum', '@colijnit/configuratorapi/build/model/configurator-statistics-environment', '@colijnit/ioneconnector/build/model/options', '@colijnit/ioneconnector/build/model/data-service-response-data', '@colijnit/configuratorapi/build/model/frozen-article', '@colijnit/configuratorapi/build/model/selection', '@colijnit/configuratorapi/build/model/answer-price', '@colijnit/configuratorapi/build/model/article', '@colijnit/configuratorapi/build/model/deco-node', '@colijnit/configuratorapi/build/model/skip-button-info', '@colijnit/configuratorapi', '@colijnit/mainapi', '@colijnit/articleapi/build/articles', '@colijnit/configuratorapi/build/model/article-text.bo', '@colijnit/ioneconnector/build/service/business-object-factory', '@colijnit/ioneconnector/build/utils/image-utils', '@colijnit/articleapi/build/model/external-catalog-startup-info', '@colijnit/articleapi/build/model/catalog-definition.bo', '@colijnit/articleapi/build/model/external-source.bo', '@colijnit/articleapi/build/model/article-full-object', '@colijnit/configuratorapi/build/model/article-category', '@colijnit/articleapi/build/model/article-flat.bo', '@colijnit/mainapi/build/model/co-domain-value.bo', '@colijnit/mainapi/build/enum/domain-name.enum', '@colijnit/mainapi/build/enum/internal-param.enum', '@colijnit/ioneconnector/build/utils/string-utils', '@colijnit/configuratorapi/build/utils/image-utils', '@angular/common/http', 'axios', 'textdiff-patch', 'three', '@tweenjs/tween.js', 'polygon-tools', 'three-gpu-pathtracer', 'three-mesh-bvh/src/workers/ParallelMeshBVHWorker.js', 'three/examples/jsm/geometries/TextGeometry', 'three/examples/jsm/loaders/FontLoader', 'three/examples/jsm/webxr/XRControllerModelFactory', '@colijnit/configuratorapi/build/enum/hdeco-positioning.enum', 'three/examples/jsm/postprocessing/OutlinePass', 'three/examples/jsm/postprocessing/EffectComposer', 'three/examples/jsm/postprocessing/RenderPass', 'three/examples/jsm/postprocessing/ShaderPass', 'three/examples/jsm/shaders/FXAAShader', 'three/examples/jsm/postprocessing/OutputPass', 'three/examples/jsm/libs/lil-gui.module.min', 'n8ao', 'three/examples/jsm/shaders/BlendShader', '@angular/platform-browser', 'ngx-device-detector', '@angular/material/icon', '@angular/animations', '@angular/common', '@angular/material/dialog', 'three/examples/jsm/loaders/RGBELoader', '@colijnit/configuratorapi/build/enum/hdeco-placement.enum', 'rxjs/internal/observable/fromEvent', 'rxjs/operators', 'rxjs/internal/observable/of', 'three/examples/jsm/utils/BufferGeometryUtils.js', 'three/examples/jsm/loaders/OBJLoader', 'three/examples/jsm/loaders/MTLLoader', 'three/examples/jsm/loaders/GLTFLoader', 'three/examples/jsm/exporters/GLTFExporter', 'three/examples/jsm/loaders/DRACOLoader', 'three/examples/jsm/loaders/KTX2Loader', 'three/examples/jsm/exporters/USDZExporter', '@angular/material/list', '@angular/material/core', '@colijnit/configuratorapi/build/enum/deco-node-type.enum', 'jszip', '@colijnit/configuratorapi/build/enum/deco-node-kind.enum', '@angular/material/checkbox', '@angular/material/button', '@angular/forms', 'three/examples/jsm/utils/BufferGeometryUtils', 'three-mesh-bvh', 'three/src/constants', '@colijnit/corecomponents', '@angular/material/form-field', '@angular/material/select', '@angular/material/tooltip', '@colijnit/corecomponents_v12', '@angular/material/slider', '@angular/material/input', 'dat.gui', '@migenius/realityserver-client', '@angular/material/grid-list', '@angular/material/progress-spinner', '@angular/flex-layout/flex', '@angular/material/progress-bar', 'three/examples/jsm/geometries/DecalGeometry', 'fabric', '@angular/material/button-toggle', '@angular/material/snack-bar', '@angular/material/slide-toggle', '@angular/material/divider', 'browser-image-compression', '@angular/material/tabs', '@angular/flex-layout/extended', 'ngx-color/chrome', '@angular/router', 'delaunator', 'three/examples/jsm/helpers/VertexNormalsHelper', '@angular/cdk/portal', 'file-saver', 'ng2-pdf-viewer', 'html2canvas', 'three/examples/jsm/controls/OrbitControls', 'three/examples/jsm/loaders/FBXLoader', 'three/examples/jsm/loaders/TDSLoader', 'three/examples/jsm/loaders/STLLoader', '@angular/material/toolbar', '@angular/material/menu', '@angular/material/card', '@angular/material/sidenav', '@angular/material/badge', '@colijnit/articleapi/build/model/external-catalog-startup-info-request', '@colijnit/catalog', 'ngx-lightbox', '@angular/flex-layout', '@angular/cdk/drag-drop', 'jspdf', 'jspdf-autotable', '@angular/material/radio'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.colijnit = global.colijnit || {}, global.colijnit.homedecorator = {}), global.ng.core, global.rxjs, global.nodeType_enum, global.configuratorStatisticsEnvironment, global.options, global.dataServiceResponseData, global.frozenArticle, global.selection, global.answerPrice, global.article, global.decoNode, global.skipButtonInfo, global.configuratorapi, global.mainapi, global.articles, global.articleText_bo, global.businessObjectFactory, global.imageUtils, global.externalCatalogStartupInfo, global.catalogDefinition_bo, global.externalSource_bo, global.articleFullObject, global.articleCategory, global.articleFlat_bo, global.coDomainValue_bo, global.domainName_enum, global.internalParam_enum, global.stringUtils, global.imageUtils$1, global.ng.common.http, global.axios, global.applyPatch, global.THREE, global.TWEEN, global.PolygonTools, global.threeGpuPathtracer, global.ParallelMeshBVHWorker_js, global.TextGeometry, global.FontLoader, global.XRControllerModelFactory, global.hdecoPositioning_enum, global.OutlinePass, global.EffectComposer, global.RenderPass, global.ShaderPass, global.FXAAShader, global.OutputPass, global.GUI, global.n8ao, global.BlendShader, global.ng.platformBrowser, global.i2$1, global.ng.material.icon, global.ng.animations, global.ng.common, global.ng.material.dialog, global.RGBELoader, global.hdecoPlacement_enum, global.rxjs["internal/observable/fromEvent"], global.rxjs.operators, global.rxjs["internal/observable/of"], global.BufferGeometryUtils, global.OBJLoader, global.MTLLoader, global.GLTFLoader, global.GLTFExporter, global.DRACOLoader, global.KTX2Loader, global.USDZExporter, global.ng.material.list, global.ng.material.core, global.decoNodeType_enum, global.JSZip, global.decoNodeKind_enum, global.ng.material.checkbox, global.ng.material.button, global.ng.forms, global.BufferGeometryUtils$1, global.threeMeshBvh, global.constants, global.i4, global.ng.material.formField, global.ng.material.select, global.ng.material.tooltip, global.i4$1, global.ng.material.slider, global.ng.material.input, global.dat, global.realityserverClient, global.ng.material.gridList, global.ng.material.progressSpinner, global.ng.flexLayout.flex, global.ng.material.progressBar, global.DecalGeometry, global.fabric, global.ng.material.buttonToggle, global.ng.material.snackBar, global.ng.material.slideToggle, global.ng.material.divider, global.imageCompression, global.ng.material.tabs, global.ng.flexLayout.extended, global.i1$3, global.ng.router, global.Delaunator, global.VertexNormalsHelper, global.ng.cdk.portal, global.fileSaver, global.i6$2, global.html2canvas, global.OrbitControls, global.FBXLoader, global.TDSLoader, global.STLLoader, global.ng.material.toolbar, global.ng.material.menu, global.ng.material.card, global.ng.material.sidenav, global.ng.material.badge, global.externalCatalogStartupInfoRequest, global.i7$2, global.i1$5, global.ng.flexLayout, global.ng.cdk.dragDrop, global.jspdf, global.autoTable, global.ng.material.radio));
5
+ })(this, (function (exports, i0, rxjs, nodeType_enum, configuratorStatisticsEnvironment, options, dataServiceResponseData, frozenArticle, selection, answerPrice, article, decoNode, skipButtonInfo, configuratorapi, mainapi, articles, articleText_bo, businessObjectFactory, imageUtils, externalCatalogStartupInfo, catalogDefinition_bo, externalSource_bo, articleFullObject, articleCategory, articleFlat_bo, coDomainValue_bo, domainName_enum, internalParam_enum, stringUtils, imageUtils$1, i2, axios, applyPatch, THREE, TWEEN, PolygonTools, threeGpuPathtracer, ParallelMeshBVHWorker_js, TextGeometry, FontLoader, XRControllerModelFactory, hdecoPositioning_enum, OutlinePass, EffectComposer, RenderPass, ShaderPass, FXAAShader, OutputPass, GUI, n8ao, BlendShader, i1, i2$1, i5$1, animations, i5, i1$1, RGBELoader, hdecoPlacement_enum, fromEvent, operators, of, BufferGeometryUtils, OBJLoader, MTLLoader, GLTFLoader, GLTFExporter, DRACOLoader, KTX2Loader, USDZExporter, i2$2, i3, decoNodeType_enum, JSZip, decoNodeKind_enum, i1$2, i3$1, i8, BufferGeometryUtils$1, threeMeshBvh, constants, i4, i7, i12, i10, i4$1, i7$1, i19, dat, realityserverClient, i3$2, i16, i3$3, i2$3, DecalGeometry, fabric, i8$1, i2$4, i10$1, i6, imageCompression, i1$4, i6$1, i1$3, i5$2, Delaunator, VertexNormalsHelper, i28, fileSaver, i6$2, html2canvas, OrbitControls, FBXLoader, TDSLoader, STLLoader, i19$1, i22, i23, i26, i30, externalCatalogStartupInfoRequest, i7$2, i1$5, flexLayout, i10$2, jspdf, autoTable, radio) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -31,7 +31,6 @@
31
31
  var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
32
32
  var TWEEN__namespace = /*#__PURE__*/_interopNamespace(TWEEN);
33
33
  var PolygonTools__namespace = /*#__PURE__*/_interopNamespace(PolygonTools);
34
- var md5__namespace = /*#__PURE__*/_interopNamespace(md5);
35
34
  var GUI__default = /*#__PURE__*/_interopDefaultLegacy(GUI);
36
35
  var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
37
36
  var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2$1);
@@ -48,17 +47,17 @@
48
47
  var BufferGeometryUtils__namespace$1 = /*#__PURE__*/_interopNamespace(BufferGeometryUtils$1);
49
48
  var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
50
49
  var i7__namespace = /*#__PURE__*/_interopNamespace(i7);
51
- var i9__namespace = /*#__PURE__*/_interopNamespace(i9);
50
+ var i12__namespace = /*#__PURE__*/_interopNamespace(i12);
52
51
  var i10__namespace = /*#__PURE__*/_interopNamespace(i10);
53
52
  var i4__namespace$1 = /*#__PURE__*/_interopNamespace(i4$1);
54
53
  var i7__namespace$1 = /*#__PURE__*/_interopNamespace(i7$1);
55
54
  var i19__namespace = /*#__PURE__*/_interopNamespace(i19);
56
55
  var dat__namespace = /*#__PURE__*/_interopNamespace(dat);
57
56
  var i3__namespace$2 = /*#__PURE__*/_interopNamespace(i3$2);
58
- var i15__namespace = /*#__PURE__*/_interopNamespace(i15);
57
+ var i16__namespace = /*#__PURE__*/_interopNamespace(i16);
59
58
  var i3__namespace$3 = /*#__PURE__*/_interopNamespace(i3$3);
60
59
  var i2__namespace$3 = /*#__PURE__*/_interopNamespace(i2$3);
61
- var i7__namespace$2 = /*#__PURE__*/_interopNamespace(i7$2);
60
+ var i8__namespace$1 = /*#__PURE__*/_interopNamespace(i8$1);
62
61
  var i2__namespace$4 = /*#__PURE__*/_interopNamespace(i2$4);
63
62
  var i10__namespace$1 = /*#__PURE__*/_interopNamespace(i10$1);
64
63
  var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
@@ -71,13 +70,12 @@
71
70
  var i28__namespace = /*#__PURE__*/_interopNamespace(i28);
72
71
  var i6__namespace$2 = /*#__PURE__*/_interopNamespace(i6$2);
73
72
  var html2canvas__default = /*#__PURE__*/_interopDefaultLegacy(html2canvas);
74
- var i9__namespace$1 = /*#__PURE__*/_interopNamespace(i9$1);
75
73
  var i19__namespace$1 = /*#__PURE__*/_interopNamespace(i19$1);
76
74
  var i22__namespace = /*#__PURE__*/_interopNamespace(i22);
77
75
  var i23__namespace = /*#__PURE__*/_interopNamespace(i23);
78
76
  var i26__namespace = /*#__PURE__*/_interopNamespace(i26);
79
77
  var i30__namespace = /*#__PURE__*/_interopNamespace(i30);
80
- var i7__namespace$3 = /*#__PURE__*/_interopNamespace(i7$3);
78
+ var i7__namespace$2 = /*#__PURE__*/_interopNamespace(i7$2);
81
79
  var i1__namespace$5 = /*#__PURE__*/_interopNamespace(i1$5);
82
80
  var i10__namespace$2 = /*#__PURE__*/_interopNamespace(i10$2);
83
81
  var autoTable__default = /*#__PURE__*/_interopDefaultLegacy(autoTable);
@@ -211,7 +209,7 @@
211
209
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
212
210
  return Reflect.metadata(metadataKey, metadataValue);
213
211
  }
214
- function __awaiter$1o(thisArg, _arguments, P, generator) {
212
+ function __awaiter$1n(thisArg, _arguments, P, generator) {
215
213
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
216
214
  return new (P || (P = Promise))(function (resolve, reject) {
217
215
  function fulfilled(value) { try {
@@ -536,7 +534,7 @@
536
534
  __decorate: __decorate,
537
535
  __param: __param,
538
536
  __metadata: __metadata,
539
- __awaiter: __awaiter$1o,
537
+ __awaiter: __awaiter$1n,
540
538
  __generator: __generator,
541
539
  __createBinding: __createBinding,
542
540
  __exportStar: __exportStar,
@@ -628,6 +626,8 @@
628
626
  MessageType["StartCroppingPDF"] = "StartCroppingPDF";
629
627
  MessageType["BlenderRenderFileReady"] = "BlenderRenderFileReady";
630
628
  MessageType["UserModelUploaded"] = "UserModelUploaded";
629
+ MessageType["ChangeTexture"] = "ChangeTexture";
630
+ MessageType["RenderError"] = "RenderError";
631
631
  })(MessageType || (MessageType = {}));
632
632
 
633
633
  var Preset = /** @class */ (function () {
@@ -734,6 +734,7 @@
734
734
  this.objectMovingOrRotating = new rxjs.Subject();
735
735
  this.addToCart = new rxjs.Subject();
736
736
  this.addExternalSourceToCart = new rxjs.Subject();
737
+ this.dirty = new rxjs.Subject();
737
738
  }
738
739
  return HomedecoratorAppEventService;
739
740
  }());
@@ -746,7 +747,7 @@
746
747
  }]
747
748
  }] });
748
749
 
749
- var __awaiter$1n = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
750
+ var __awaiter$1m = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
750
751
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
751
752
  return new (P || (P = Promise))(function (resolve, reject) {
752
753
  function fulfilled(value) { try {
@@ -822,7 +823,7 @@
822
823
  configurable: true
823
824
  });
824
825
  HomedecoratorConnectorAdapterService.prototype.initConnector = function (options, externalSource, forceReload, externalSourceId) {
825
- return __awaiter$1n(this, void 0, void 0, function () {
826
+ return __awaiter$1m(this, void 0, void 0, function () {
826
827
  var renewConnector, _a, externalSourceData, externalMainApi, externalVersion, catalogSettings, externalConfigurator, loginResponse, externalArticleApi, externalConnector;
827
828
  var _this = this;
828
829
  return __generator(this, function (_b) {
@@ -851,6 +852,8 @@
851
852
  case 3:
852
853
  if (!!this.connectors.hasOwnProperty(externalSource)) return [3 /*break*/, 8];
853
854
  if (!(externalSourceId !== null)) return [3 /*break*/, 5];
855
+ // make sure to set this.externalSource = undefined to get the data of the HOST and not the previous external source
856
+ this.externalSource = undefined;
854
857
  return [4 /*yield*/, this.getExternalSource(externalSourceId)];
855
858
  case 4:
856
859
  externalSourceData = _b.sent();
@@ -899,7 +902,7 @@
899
902
  });
900
903
  };
901
904
  HomedecoratorConnectorAdapterService.prototype.logOut = function () {
902
- return __awaiter$1n(this, void 0, void 0, function () {
905
+ return __awaiter$1m(this, void 0, void 0, function () {
903
906
  return __generator(this, function (_a) {
904
907
  switch (_a.label) {
905
908
  case 0: return [4 /*yield*/, this.connector.logOut()];
@@ -934,7 +937,7 @@
934
937
  return 2;
935
938
  };
936
939
  HomedecoratorConnectorAdapterService.prototype.getWebViewStartupInfo = function (request) {
937
- return __awaiter$1n(this, void 0, void 0, function () {
940
+ return __awaiter$1m(this, void 0, void 0, function () {
938
941
  var response;
939
942
  return __generator(this, function (_a) {
940
943
  switch (_a.label) {
@@ -953,7 +956,7 @@
953
956
  });
954
957
  };
955
958
  HomedecoratorConnectorAdapterService.prototype.getGoodIdFromArticleNr = function (sku) {
956
- return __awaiter$1n(this, void 0, void 0, function () {
959
+ return __awaiter$1m(this, void 0, void 0, function () {
957
960
  var response;
958
961
  return __generator(this, function (_a) {
959
962
  switch (_a.label) {
@@ -981,7 +984,7 @@
981
984
  return this.connector.copyInstance(instanceId, shouldSaveCurrentInstanceId);
982
985
  };
983
986
  HomedecoratorConnectorAdapterService.prototype.saveConfigurations = function () {
984
- return __awaiter$1n(this, void 0, void 0, function () {
987
+ return __awaiter$1m(this, void 0, void 0, function () {
985
988
  var _a, _b, _i, key, connector;
986
989
  return __generator(this, function (_c) {
987
990
  switch (_c.label) {
@@ -1016,7 +1019,7 @@
1016
1019
  };
1017
1020
  // @returns The initial article
1018
1021
  HomedecoratorConnectorAdapterService.prototype.getArticle = function (sku, branch) {
1019
- return __awaiter$1n(this, void 0, void 0, function () {
1022
+ return __awaiter$1m(this, void 0, void 0, function () {
1020
1023
  var goodId;
1021
1024
  return __generator(this, function (_a) {
1022
1025
  switch (_a.label) {
@@ -1032,7 +1035,7 @@
1032
1035
  });
1033
1036
  };
1034
1037
  HomedecoratorConnectorAdapterService.prototype.getArticleQuickSel = function (goodId, branch) {
1035
- return __awaiter$1n(this, void 0, void 0, function () {
1038
+ return __awaiter$1m(this, void 0, void 0, function () {
1036
1039
  var response;
1037
1040
  return __generator(this, function (_a) {
1038
1041
  switch (_a.label) {
@@ -1057,7 +1060,7 @@
1057
1060
  return this.connector.getQuestionAndAnswers();
1058
1061
  };
1059
1062
  HomedecoratorConnectorAdapterService.prototype.getSelectionsAsync = function () {
1060
- return __awaiter$1n(this, void 0, void 0, function () {
1063
+ return __awaiter$1m(this, void 0, void 0, function () {
1061
1064
  var response;
1062
1065
  return __generator(this, function (_a) {
1063
1066
  switch (_a.label) {
@@ -1073,7 +1076,7 @@
1073
1076
  });
1074
1077
  };
1075
1078
  HomedecoratorConnectorAdapterService.prototype.getDecosAsync = function () {
1076
- return __awaiter$1n(this, void 0, void 0, function () {
1079
+ return __awaiter$1m(this, void 0, void 0, function () {
1077
1080
  var response;
1078
1081
  return __generator(this, function (_a) {
1079
1082
  switch (_a.label) {
@@ -1089,7 +1092,7 @@
1089
1092
  });
1090
1093
  };
1091
1094
  HomedecoratorConnectorAdapterService.prototype.getAnswerPrices = function () {
1092
- return __awaiter$1n(this, void 0, void 0, function () {
1095
+ return __awaiter$1m(this, void 0, void 0, function () {
1093
1096
  var response;
1094
1097
  return __generator(this, function (_a) {
1095
1098
  switch (_a.label) {
@@ -1107,13 +1110,14 @@
1107
1110
  HomedecoratorConnectorAdapterService.prototype.getJsonConfiguredArticles = function (goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics) {
1108
1111
  if (externalSource === void 0) { externalSource = false; }
1109
1112
  if (showLoader === void 0) { showLoader = true; }
1110
- return this.articleApi.getJsonArticleFlatTree(goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics);
1113
+ // @ts-ignore
1114
+ return this.articleApi.getJsonArticleFlatTree(goodId, goodType, quantity, externalSource, showLoader, instanceId.toString(), configuratorStatistics);
1111
1115
  };
1112
1116
  // public getJsonMatchTableArticles(): Promise<void> {
1113
1117
  // return this.connector.getJsonMatchTableArticles();
1114
1118
  // }
1115
1119
  HomedecoratorConnectorAdapterService.prototype.setInstanceToConfigure = function (id) {
1116
- return __awaiter$1n(this, void 0, void 0, function () {
1120
+ return __awaiter$1m(this, void 0, void 0, function () {
1117
1121
  return __generator(this, function (_a) {
1118
1122
  if (id !== null) {
1119
1123
  return [2 /*return*/, this.connector.setInstanceToConfigure(id)];
@@ -1126,7 +1130,7 @@
1126
1130
  });
1127
1131
  };
1128
1132
  HomedecoratorConnectorAdapterService.prototype.selectAnswer = function (answer, userInput) {
1129
- return __awaiter$1n(this, void 0, void 0, function () {
1133
+ return __awaiter$1m(this, void 0, void 0, function () {
1130
1134
  return __generator(this, function (_a) {
1131
1135
  return [2 /*return*/, this.connector.selectAnswer(answer, false, userInput)];
1132
1136
  });
@@ -1148,7 +1152,7 @@
1148
1152
  HomedecoratorConnectorAdapterService.prototype.getImageForAnswerOrSelection = function (answerOrSelection, publication, thumbNail, showLoader) {
1149
1153
  if (thumbNail === void 0) { thumbNail = true; }
1150
1154
  if (showLoader === void 0) { showLoader = true; }
1151
- return __awaiter$1n(this, void 0, void 0, function () {
1155
+ return __awaiter$1m(this, void 0, void 0, function () {
1152
1156
  var response;
1153
1157
  return __generator(this, function (_a) {
1154
1158
  switch (_a.label) {
@@ -1172,7 +1176,7 @@
1172
1176
  });
1173
1177
  };
1174
1178
  HomedecoratorConnectorAdapterService.prototype.getSkipButtonImageAndText = function (goodId) {
1175
- return __awaiter$1n(this, void 0, void 0, function () {
1179
+ return __awaiter$1m(this, void 0, void 0, function () {
1176
1180
  var response;
1177
1181
  return __generator(this, function (_a) {
1178
1182
  switch (_a.label) {
@@ -1192,7 +1196,7 @@
1192
1196
  return this.getImageForAnswerOrSelection(answerOrSelection, 32);
1193
1197
  };
1194
1198
  HomedecoratorConnectorAdapterService.prototype.getAnswerInfo = function (answer) {
1195
- return __awaiter$1n(this, void 0, void 0, function () {
1199
+ return __awaiter$1m(this, void 0, void 0, function () {
1196
1200
  var response;
1197
1201
  return __generator(this, function (_a) {
1198
1202
  switch (_a.label) {
@@ -1208,7 +1212,7 @@
1208
1212
  });
1209
1213
  };
1210
1214
  HomedecoratorConnectorAdapterService.prototype.getInternalParameter = function (parameter) {
1211
- return __awaiter$1n(this, void 0, void 0, function () {
1215
+ return __awaiter$1m(this, void 0, void 0, function () {
1212
1216
  var response;
1213
1217
  return __generator(this, function (_a) {
1214
1218
  switch (_a.label) {
@@ -1227,7 +1231,7 @@
1227
1231
  });
1228
1232
  };
1229
1233
  HomedecoratorConnectorAdapterService.prototype.store3DModelCDN = function (filename, fileContents) {
1230
- return __awaiter$1n(this, void 0, void 0, function () {
1234
+ return __awaiter$1m(this, void 0, void 0, function () {
1231
1235
  var response;
1232
1236
  return __generator(this, function (_a) {
1233
1237
  switch (_a.label) {
@@ -1237,6 +1241,9 @@
1237
1241
  if (response && response.validationResult && response.validationResult.success) {
1238
1242
  return [2 /*return*/, response.resultObject];
1239
1243
  }
1244
+ else if (!response.validationResult.success) {
1245
+ return [2 /*return*/, Promise.reject(response.validationResult.messages[0].message)];
1246
+ }
1240
1247
  else {
1241
1248
  return [2 /*return*/, ''];
1242
1249
  }
@@ -1246,13 +1253,17 @@
1246
1253
  });
1247
1254
  };
1248
1255
  HomedecoratorConnectorAdapterService.prototype.getCatalogDefinitionsList = function () {
1249
- return __awaiter$1n(this, void 0, void 0, function () {
1256
+ return __awaiter$1m(this, void 0, void 0, function () {
1250
1257
  var response;
1251
1258
  return __generator(this, function (_a) {
1252
1259
  switch (_a.label) {
1253
- case 0: return [4 /*yield*/, this.articleApi.getCatalogDefinitions().catch(function (e) {
1254
- return new dataServiceResponseData.DataServiceResponseData();
1255
- })];
1260
+ case 0:
1261
+ if (!this.articleApi) {
1262
+ return [2 /*return*/];
1263
+ }
1264
+ return [4 /*yield*/, this.articleApi.getCatalogDefinitions().catch(function (e) {
1265
+ return new dataServiceResponseData.DataServiceResponseData();
1266
+ })];
1256
1267
  case 1:
1257
1268
  response = _a.sent();
1258
1269
  if (response && response.validationResult && response.validationResult.success) {
@@ -1267,7 +1278,7 @@
1267
1278
  });
1268
1279
  };
1269
1280
  HomedecoratorConnectorAdapterService.prototype.getExternalSource = function (externalSourceId) {
1270
- return __awaiter$1n(this, void 0, void 0, function () {
1281
+ return __awaiter$1m(this, void 0, void 0, function () {
1271
1282
  var response;
1272
1283
  return __generator(this, function (_a) {
1273
1284
  switch (_a.label) {
@@ -1295,7 +1306,7 @@
1295
1306
  });
1296
1307
  };
1297
1308
  HomedecoratorConnectorAdapterService.prototype.getArticleFullObject = function (goodId) {
1298
- return __awaiter$1n(this, void 0, void 0, function () {
1309
+ return __awaiter$1m(this, void 0, void 0, function () {
1299
1310
  var result;
1300
1311
  return __generator(this, function (_a) {
1301
1312
  switch (_a.label) {
@@ -1314,7 +1325,7 @@
1314
1325
  });
1315
1326
  };
1316
1327
  HomedecoratorConnectorAdapterService.prototype.getArticleCategories = function (publicationCode) {
1317
- return __awaiter$1n(this, void 0, void 0, function () {
1328
+ return __awaiter$1m(this, void 0, void 0, function () {
1318
1329
  var result;
1319
1330
  return __generator(this, function (_a) {
1320
1331
  switch (_a.label) {
@@ -1334,7 +1345,7 @@
1334
1345
  };
1335
1346
  //
1336
1347
  HomedecoratorConnectorAdapterService.prototype.getArticleFlat = function (sku) {
1337
- return __awaiter$1n(this, void 0, void 0, function () {
1348
+ return __awaiter$1m(this, void 0, void 0, function () {
1338
1349
  var result;
1339
1350
  return __generator(this, function (_a) {
1340
1351
  switch (_a.label) {
@@ -1352,6 +1363,25 @@
1352
1363
  });
1353
1364
  });
1354
1365
  };
1366
+ HomedecoratorConnectorAdapterService.prototype.getModelPlacementOptions = function () {
1367
+ return __awaiter$1m(this, void 0, void 0, function () {
1368
+ var result;
1369
+ return __generator(this, function (_a) {
1370
+ switch (_a.label) {
1371
+ case 0: return [4 /*yield*/, this.mainApi.getDomainCollection('NL', domainName_enum.DomainName.Dom3DPlacement)];
1372
+ case 1:
1373
+ result = _a.sent();
1374
+ if (result.validationResult && result.validationResult.success) {
1375
+ return [2 /*return*/, this._boFactory.makeBOArrayFromRawBackendDataArray(coDomainValue_bo.CoDomainValue, result.resultObjects)];
1376
+ }
1377
+ else {
1378
+ console.error(result.validationMessagesAsString);
1379
+ }
1380
+ return [2 /*return*/];
1381
+ }
1382
+ });
1383
+ });
1384
+ };
1355
1385
  // public async addToCart(goodId: number, goodType: GoodType, instanceId: number, sessionId: string, quantity: number = 1): Promise<void> {
1356
1386
  // const json: string = await this._getJSONFromArticleObject(goodId, goodType, instanceId, sessionId, quantity);
1357
1387
  // this._appEventService.addToCart.next({article: json, quantity: 1});
@@ -1384,7 +1414,7 @@
1384
1414
  }]
1385
1415
  }], ctorParameters: function () { return [{ type: HomedecoratorAppEventService }]; } });
1386
1416
 
1387
- var __awaiter$1m = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1417
+ var __awaiter$1l = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1388
1418
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1389
1419
  return new (P || (P = Promise))(function (resolve, reject) {
1390
1420
  function fulfilled(value) { try {
@@ -1408,10 +1438,10 @@
1408
1438
  }
1409
1439
  JsonUtilsService.prototype.readJsonFile = function (filePath, includeBaseUrl) {
1410
1440
  if (includeBaseUrl === void 0) { includeBaseUrl = true; }
1411
- return __awaiter$1m(this, void 0, void 0, function () {
1441
+ return __awaiter$1l(this, void 0, void 0, function () {
1412
1442
  var _this = this;
1413
1443
  return __generator(this, function (_a) {
1414
- return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter$1m(_this, void 0, void 0, function () {
1444
+ return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter$1l(_this, void 0, void 0, function () {
1415
1445
  var response, empty_1, e_1;
1416
1446
  return __generator(this, function (_a) {
1417
1447
  switch (_a.label) {
@@ -1595,7 +1625,7 @@
1595
1625
  return value === null || value === undefined || value === '';
1596
1626
  }
1597
1627
 
1598
- var __awaiter$1l = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1628
+ var __awaiter$1k = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1599
1629
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1600
1630
  return new (P || (P = Promise))(function (resolve, reject) {
1601
1631
  function fulfilled(value) { try {
@@ -1641,7 +1671,7 @@
1641
1671
  return text ? text : key;
1642
1672
  };
1643
1673
  HomedecoratorDictionaryService.prototype.setDictionary = function (path, client, languageCode, additionalTranslationFile) {
1644
- return __awaiter$1l(this, void 0, void 0, function () {
1674
+ return __awaiter$1k(this, void 0, void 0, function () {
1645
1675
  var dictionaryData, fileName, fileName;
1646
1676
  return __generator(this, function (_a) {
1647
1677
  switch (_a.label) {
@@ -1677,7 +1707,7 @@
1677
1707
  });
1678
1708
  };
1679
1709
  HomedecoratorDictionaryService.prototype._getDictionaryData = function (path) {
1680
- return __awaiter$1l(this, void 0, void 0, function () {
1710
+ return __awaiter$1k(this, void 0, void 0, function () {
1681
1711
  return __generator(this, function (_a) {
1682
1712
  switch (_a.label) {
1683
1713
  case 0: return [4 /*yield*/, this._jsonUtilsService.readJsonFile(path, false)
@@ -1700,7 +1730,7 @@
1700
1730
  }]
1701
1731
  }], ctorParameters: function () { return [{ type: JsonUtilsService }]; } });
1702
1732
 
1703
- var __awaiter$1k = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1733
+ var __awaiter$1j = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1704
1734
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1705
1735
  return new (P || (P = Promise))(function (resolve, reject) {
1706
1736
  function fulfilled(value) { try {
@@ -1786,7 +1816,7 @@
1786
1816
  }
1787
1817
  };
1788
1818
  HomedecoratorSettingsService.prototype.initializeSettings = function () {
1789
- return __awaiter$1k(this, void 0, void 0, function () {
1819
+ return __awaiter$1j(this, void 0, void 0, function () {
1790
1820
  var jsonSettings;
1791
1821
  return __generator(this, function (_a) {
1792
1822
  switch (_a.label) {
@@ -1810,7 +1840,7 @@
1810
1840
  });
1811
1841
  };
1812
1842
  HomedecoratorSettingsService.prototype.initialize = function (settings) {
1813
- return __awaiter$1k(this, void 0, void 0, function () {
1843
+ return __awaiter$1j(this, void 0, void 0, function () {
1814
1844
  var path, e_1, path, uploadSetting;
1815
1845
  return __generator(this, function (_a) {
1816
1846
  switch (_a.label) {
@@ -1865,7 +1895,7 @@
1865
1895
  });
1866
1896
  };
1867
1897
  HomedecoratorSettingsService.prototype._checkUrlParameters = function () {
1868
- return __awaiter$1k(this, void 0, void 0, function () {
1898
+ return __awaiter$1j(this, void 0, void 0, function () {
1869
1899
  var urlParams, client, jsonSettings;
1870
1900
  return __generator(this, function (_a) {
1871
1901
  switch (_a.label) {
@@ -1896,7 +1926,7 @@
1896
1926
  }]
1897
1927
  }], ctorParameters: function () { return [{ type: JsonUtilsService }, { type: HomedecoratorDictionaryService }, { type: HomedecoratorConnectorAdapterService }]; } });
1898
1928
 
1899
- var __awaiter$1j = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1929
+ var __awaiter$1i = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1900
1930
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1901
1931
  return new (P || (P = Promise))(function (resolve, reject) {
1902
1932
  function fulfilled(value) { try {
@@ -1940,7 +1970,7 @@
1940
1970
  configurable: true
1941
1971
  });
1942
1972
  SkipButtonInfoService.prototype.getSkipButtonImageAndText = function (goodId) {
1943
- return __awaiter$1j(this, void 0, void 0, function () {
1973
+ return __awaiter$1i(this, void 0, void 0, function () {
1944
1974
  var skipButtonInfo, image;
1945
1975
  return __generator(this, function (_a) {
1946
1976
  switch (_a.label) {
@@ -2031,7 +2061,7 @@
2031
2061
  }]
2032
2062
  }] });
2033
2063
 
2034
- var __awaiter$1i = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2064
+ var __awaiter$1h = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2035
2065
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2036
2066
  return new (P || (P = Promise))(function (resolve, reject) {
2037
2067
  function fulfilled(value) { try {
@@ -2138,7 +2168,7 @@
2138
2168
  configurable: true
2139
2169
  });
2140
2170
  PermanentStoreService.prototype.updateRegisterForm = function (furniture) {
2141
- return __awaiter$1i(this, void 0, void 0, function () {
2171
+ return __awaiter$1h(this, void 0, void 0, function () {
2142
2172
  var collectiveSheetKey, collectiveSheetScriptURL, customSheetScriptURL, sheetKey, postUrl, hostUrl, payLoad;
2143
2173
  var _this = this;
2144
2174
  return __generator(this, function (_a) {
@@ -2270,7 +2300,7 @@
2270
2300
  }]
2271
2301
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: PermanentStoreService }]; } });
2272
2302
 
2273
- var __awaiter$1h = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2303
+ var __awaiter$1g = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2274
2304
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2275
2305
  return new (P || (P = Promise))(function (resolve, reject) {
2276
2306
  function fulfilled(value) { try {
@@ -2303,7 +2333,6 @@
2303
2333
  this.articleReceived = new rxjs.Subject();
2304
2334
  this.selectionsReceived = new rxjs.Subject();
2305
2335
  // public readonly decoNodesReceived: Subject<DecoNode[]> = new Subject<DecoNode[]>();
2306
- this.answerCountReceived = new rxjs.Subject();
2307
2336
  this.answersReceived = new rxjs.Subject();
2308
2337
  this.extraAnswerDataLoaded = new rxjs.Subject();
2309
2338
  // public readonly moodImagesReceived: Subject<{ answerOrSelection: Answer | Selection, imageData: string }> =
@@ -2311,12 +2340,11 @@
2311
2340
  this.selectionsAndDecosLinked = new rxjs.Subject();
2312
2341
  this.connectionReset = new rxjs.Subject();
2313
2342
  this.selectionsToDisplay = [];
2343
+ this.activeAnswers = [];
2314
2344
  this._hideLoaderTimerTimeout = 500;
2315
2345
  this._selections = [];
2316
2346
  this._currentSelections = [];
2317
2347
  this._decoNodes = [];
2318
- // private _activeQuestion: Question;
2319
- this._activeAnswers = [];
2320
2348
  this._articlePrice = 0;
2321
2349
  this._connectorOptions = new options.Options();
2322
2350
  this._subs = [];
@@ -2362,16 +2390,6 @@
2362
2390
  enumerable: false,
2363
2391
  configurable: true
2364
2392
  });
2365
- Object.defineProperty(HomedecoratorConnectorService.prototype, "activeAnswers", {
2366
- // public get activeQuestion(): Question {
2367
- // return this._activeQuestion;
2368
- // }
2369
- get: function () {
2370
- return this._activeAnswers;
2371
- },
2372
- enumerable: false,
2373
- configurable: true
2374
- });
2375
2393
  Object.defineProperty(HomedecoratorConnectorService.prototype, "activeSelection", {
2376
2394
  get: function () {
2377
2395
  return this._activeSelection;
@@ -2410,14 +2428,14 @@
2410
2428
  this._imageCache.clear();
2411
2429
  };
2412
2430
  HomedecoratorConnectorService.prototype.getWebViewStartupInfo = function (request) {
2413
- return __awaiter$1h(this, void 0, void 0, function () {
2431
+ return __awaiter$1g(this, void 0, void 0, function () {
2414
2432
  return __generator(this, function (_a) {
2415
2433
  return [2 /*return*/, this._connector.getWebViewStartupInfo(request)];
2416
2434
  });
2417
2435
  });
2418
2436
  };
2419
2437
  HomedecoratorConnectorService.prototype.initNodeInstance = function (sku) {
2420
- return __awaiter$1h(this, void 0, void 0, function () {
2438
+ return __awaiter$1g(this, void 0, void 0, function () {
2421
2439
  var goodId, response;
2422
2440
  return __generator(this, function (_a) {
2423
2441
  switch (_a.label) {
@@ -2433,7 +2451,7 @@
2433
2451
  });
2434
2452
  };
2435
2453
  HomedecoratorConnectorService.prototype.changeConnection = function (instanceId, oldConnection, newConnection) {
2436
- return __awaiter$1h(this, void 0, void 0, function () {
2454
+ return __awaiter$1g(this, void 0, void 0, function () {
2437
2455
  var response;
2438
2456
  return __generator(this, function (_a) {
2439
2457
  switch (_a.label) {
@@ -2450,6 +2468,10 @@
2450
2468
  this.selectionsToDisplay.length = 0;
2451
2469
  this.decoNodes.length = 0;
2452
2470
  };
2471
+ HomedecoratorConnectorService.prototype.emptyAnswersAndQuestion = function () {
2472
+ this.activeAnswers.length = 0;
2473
+ this.activeQuestion = undefined;
2474
+ };
2453
2475
  /**
2454
2476
  * Used for obsolete furniture
2455
2477
  * @param selections
@@ -2468,7 +2490,7 @@
2468
2490
  this._decoNodes = decoNodes;
2469
2491
  };
2470
2492
  HomedecoratorConnectorService.prototype.initConnection = function (forceReload) {
2471
- return __awaiter$1h(this, void 0, void 0, function () {
2493
+ return __awaiter$1g(this, void 0, void 0, function () {
2472
2494
  var settings, e_1;
2473
2495
  var _this = this;
2474
2496
  return __generator(this, function (_a) {
@@ -2516,7 +2538,7 @@
2516
2538
  // return this._connector.getJsonMatchTableArticles();
2517
2539
  // }
2518
2540
  HomedecoratorConnectorService.prototype.setInstance = function (id) {
2519
- return __awaiter$1h(this, void 0, void 0, function () {
2541
+ return __awaiter$1g(this, void 0, void 0, function () {
2520
2542
  var response;
2521
2543
  return __generator(this, function (_a) {
2522
2544
  switch (_a.label) {
@@ -2538,7 +2560,7 @@
2538
2560
  return this._copyInstance(instanceId, false, result);
2539
2561
  };
2540
2562
  HomedecoratorConnectorService.prototype.saveConfigurations = function () {
2541
- return __awaiter$1h(this, void 0, void 0, function () {
2563
+ return __awaiter$1g(this, void 0, void 0, function () {
2542
2564
  var success;
2543
2565
  return __generator(this, function (_a) {
2544
2566
  switch (_a.label) {
@@ -2554,13 +2576,13 @@
2554
2576
  });
2555
2577
  };
2556
2578
  HomedecoratorConnectorService.prototype.getArticle = function (sku, branch) {
2557
- return __awaiter$1h(this, void 0, void 0, function () {
2579
+ return __awaiter$1g(this, void 0, void 0, function () {
2558
2580
  var article;
2559
2581
  return __generator(this, function (_a) {
2560
2582
  switch (_a.label) {
2561
2583
  case 0:
2562
- this.selections = [];
2563
- this._decoNodes = [];
2584
+ this.emptySelections();
2585
+ this.emptyAnswersAndQuestion();
2564
2586
  return [4 /*yield*/, this._connector.getArticle(sku, branch)
2565
2587
  .catch(function (e) {
2566
2588
  return Promise.reject(e);
@@ -2586,7 +2608,7 @@
2586
2608
  // this._connector.getQuestionAndAnswers();
2587
2609
  // }
2588
2610
  HomedecoratorConnectorService.prototype.getQuestionAndAnswersAsync = function () {
2589
- return __awaiter$1h(this, void 0, void 0, function () {
2611
+ return __awaiter$1g(this, void 0, void 0, function () {
2590
2612
  var questionAndAnswers;
2591
2613
  var _this = this;
2592
2614
  return __generator(this, function (_a) {
@@ -2595,13 +2617,24 @@
2595
2617
  case 1:
2596
2618
  questionAndAnswers = _a.sent();
2597
2619
  questionAndAnswers.answers = questionAndAnswers.answers.filter(function (a) { return _this._isAnswerPublished(a); });
2620
+ // if (questionAndAnswers.question && !questionAndAnswers.question.grouped) {
2621
+ this.handleAnswersReceived(questionAndAnswers.answers);
2622
+ // }
2623
+ this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
2624
+ if (questionAndAnswers.answers.length === 0) {
2625
+ this.emptyAnswersAndQuestion();
2626
+ }
2627
+ else {
2628
+ this.activeQuestion = questionAndAnswers.question;
2629
+ this.activeAnswers = questionAndAnswers.answers;
2630
+ }
2598
2631
  return [2 /*return*/, questionAndAnswers];
2599
2632
  }
2600
2633
  });
2601
2634
  });
2602
2635
  };
2603
2636
  HomedecoratorConnectorService.prototype.getSelectionsAsync = function () {
2604
- return __awaiter$1h(this, void 0, void 0, function () {
2637
+ return __awaiter$1g(this, void 0, void 0, function () {
2605
2638
  var selections;
2606
2639
  return __generator(this, function (_a) {
2607
2640
  switch (_a.label) {
@@ -2621,7 +2654,7 @@
2621
2654
  });
2622
2655
  };
2623
2656
  HomedecoratorConnectorService.prototype.getDecosAsync = function () {
2624
- return __awaiter$1h(this, void 0, void 0, function () {
2657
+ return __awaiter$1g(this, void 0, void 0, function () {
2625
2658
  var _a;
2626
2659
  return __generator(this, function (_b) {
2627
2660
  switch (_b.label) {
@@ -2657,7 +2690,7 @@
2657
2690
  return this._connector.replaceSelection(selection);
2658
2691
  };
2659
2692
  HomedecoratorConnectorService.prototype.getAnswerInfo = function (answer) {
2660
- return __awaiter$1h(this, void 0, void 0, function () {
2693
+ return __awaiter$1g(this, void 0, void 0, function () {
2661
2694
  var articleTexts;
2662
2695
  return __generator(this, function (_a) {
2663
2696
  switch (_a.label) {
@@ -2672,7 +2705,7 @@
2672
2705
  };
2673
2706
  HomedecoratorConnectorService.prototype.extendWithAnswerTextAndImage = function (answer, showLoader) {
2674
2707
  if (showLoader === void 0) { showLoader = true; }
2675
- return __awaiter$1h(this, void 0, void 0, function () {
2708
+ return __awaiter$1g(this, void 0, void 0, function () {
2676
2709
  var _this = this;
2677
2710
  return __generator(this, function (_a) {
2678
2711
  if (answer.nodeId) {
@@ -2698,7 +2731,7 @@
2698
2731
  };
2699
2732
  HomedecoratorConnectorService.prototype.extendWithSelectionImage = function (selection, showLoader) {
2700
2733
  if (showLoader === void 0) { showLoader = true; }
2701
- return __awaiter$1h(this, void 0, void 0, function () {
2734
+ return __awaiter$1g(this, void 0, void 0, function () {
2702
2735
  var _this = this;
2703
2736
  return __generator(this, function (_a) {
2704
2737
  if (selection.nodeId) {
@@ -2822,7 +2855,7 @@
2822
2855
  });
2823
2856
  };
2824
2857
  HomedecoratorConnectorService.prototype.addToCart = function (goodId, goodType, quantity, instanceId, externalSource) {
2825
- return __awaiter$1h(this, void 0, void 0, function () {
2858
+ return __awaiter$1g(this, void 0, void 0, function () {
2826
2859
  var json, statistics, frozenArticle$1;
2827
2860
  return __generator(this, function (_a) {
2828
2861
  switch (_a.label) {
@@ -2850,18 +2883,11 @@
2850
2883
  });
2851
2884
  };
2852
2885
  HomedecoratorConnectorService.prototype.handleAnswersReceived = function (answers) {
2853
- return __awaiter$1h(this, void 0, void 0, function () {
2854
- return __generator(this, function (_a) {
2855
- this._activeAnswers = answers;
2856
- this.answerCountReceived.next(this._activeAnswers.length);
2857
- this._preloadCachedImages(answers);
2858
- this.answersReceived.next(answers);
2859
- if (this._activeAnswers) {
2860
- this._loadPricesOfActiveAnswers();
2861
- }
2862
- return [2 /*return*/];
2863
- });
2864
- });
2886
+ this._preloadCachedImages(answers);
2887
+ this.answersReceived.next(answers);
2888
+ if (this.activeAnswers && this.activeAnswers.length > 0) {
2889
+ this._loadPricesOfActiveAnswers();
2890
+ }
2865
2891
  };
2866
2892
  HomedecoratorConnectorService.prototype._prepareSelectionsToDisplayImages = function () {
2867
2893
  var _this = this;
@@ -2966,7 +2992,7 @@
2966
2992
  };
2967
2993
  // POSTCONDITION: current activeAnswers have price values.
2968
2994
  HomedecoratorConnectorService.prototype._loadPricesOfActiveAnswers = function () {
2969
- return __awaiter$1h(this, void 0, void 0, function () {
2995
+ return __awaiter$1g(this, void 0, void 0, function () {
2970
2996
  var answerPrices;
2971
2997
  var _this = this;
2972
2998
  return __generator(this, function (_a) {
@@ -2977,7 +3003,7 @@
2977
3003
  if (answerPrices) {
2978
3004
  // paste price data onto our current answer objects; AnswerPrice.selId corresponds to Answer.node
2979
3005
  answerPrices.forEach(function (answerPrice) {
2980
- var answerMatch = _this._activeAnswers.find(function (ans) { return ans.node === answerPrice.selId; });
3006
+ var answerMatch = _this.activeAnswers.find(function (ans) { return ans.node === answerPrice.selId; });
2981
3007
  if (answerMatch) {
2982
3008
  answerMatch.price = // temp fix for price until backend is ready
2983
3009
  answerMatch.nodeLevel === 0 && answerPrice.addRetailPrice && answerMatch.seqO === 1 ?
@@ -2993,7 +3019,7 @@
2993
3019
  });
2994
3020
  };
2995
3021
  HomedecoratorConnectorService.prototype._copyInstance = function (originalInstanceId, shouldSaveCurrentInstanceId, result) {
2996
- return __awaiter$1h(this, void 0, void 0, function () {
3022
+ return __awaiter$1g(this, void 0, void 0, function () {
2997
3023
  var copyInstanceResponse, newInstanceId;
2998
3024
  return __generator(this, function (_a) {
2999
3025
  switch (_a.label) {
@@ -3038,7 +3064,7 @@
3038
3064
  }]
3039
3065
  }], ctorParameters: function () { return [{ type: HomedecoratorConnectorAdapterService }, { type: JsonUtilsService }, { type: HomedecoratorSettingsService }, { type: SkipButtonInfoService }, { type: MessageBusService }, { type: HomedecoratorAppEventService }, { type: GoogleTagManagerService }]; } });
3040
3066
 
3041
- var __awaiter$1g = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3067
+ var __awaiter$1f = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3042
3068
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3043
3069
  return new (P || (P = Promise))(function (resolve, reject) {
3044
3070
  function fulfilled(value) { try {
@@ -3095,7 +3121,7 @@
3095
3121
  window.history.replaceState(data, title, url);
3096
3122
  };
3097
3123
  AppStateService.prototype.undo = function () {
3098
- return __awaiter$1g(this, void 0, void 0, function () {
3124
+ return __awaiter$1f(this, void 0, void 0, function () {
3099
3125
  return __generator(this, function (_a) {
3100
3126
  switch (_a.label) {
3101
3127
  case 0:
@@ -3109,7 +3135,7 @@
3109
3135
  });
3110
3136
  };
3111
3137
  AppStateService.prototype.redo = function () {
3112
- return __awaiter$1g(this, void 0, void 0, function () {
3138
+ return __awaiter$1f(this, void 0, void 0, function () {
3113
3139
  return __generator(this, function (_a) {
3114
3140
  switch (_a.label) {
3115
3141
  case 0:
@@ -3387,7 +3413,7 @@
3387
3413
  }]
3388
3414
  }], ctorParameters: function () { return []; } });
3389
3415
 
3390
- var __awaiter$1f = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3416
+ var __awaiter$1e = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3391
3417
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3392
3418
  return new (P || (P = Promise))(function (resolve, reject) {
3393
3419
  function fulfilled(value) { try {
@@ -3432,7 +3458,7 @@
3432
3458
  }
3433
3459
  };
3434
3460
  LocalStorageService.prototype.getRecoverySaveState = function () {
3435
- return __awaiter$1f(this, void 0, void 0, function () {
3461
+ return __awaiter$1e(this, void 0, void 0, function () {
3436
3462
  var indexedDBSave, localStorageSave;
3437
3463
  return __generator(this, function (_a) {
3438
3464
  switch (_a.label) {
@@ -3455,7 +3481,7 @@
3455
3481
  });
3456
3482
  };
3457
3483
  LocalStorageService.prototype.getIndexedDBSaveState = function () {
3458
- return __awaiter$1f(this, void 0, void 0, function () {
3484
+ return __awaiter$1e(this, void 0, void 0, function () {
3459
3485
  var getMessage;
3460
3486
  return __generator(this, function (_a) {
3461
3487
  switch (_a.label) {
@@ -3468,7 +3494,7 @@
3468
3494
  });
3469
3495
  };
3470
3496
  LocalStorageService.prototype.writeIndexedDBSaveState = function (saveState) {
3471
- return __awaiter$1f(this, void 0, void 0, function () {
3497
+ return __awaiter$1e(this, void 0, void 0, function () {
3472
3498
  var saveMessage;
3473
3499
  return __generator(this, function (_a) {
3474
3500
  switch (_a.label) {
@@ -3485,7 +3511,7 @@
3485
3511
  });
3486
3512
  };
3487
3513
  LocalStorageService.prototype.checkForLocalSave = function () {
3488
- return __awaiter$1f(this, void 0, void 0, function () {
3514
+ return __awaiter$1e(this, void 0, void 0, function () {
3489
3515
  var indexedDBSave;
3490
3516
  return __generator(this, function (_a) {
3491
3517
  switch (_a.label) {
@@ -3517,7 +3543,7 @@
3517
3543
  }]
3518
3544
  }], ctorParameters: function () { return [{ type: WebWorkerService }]; } });
3519
3545
 
3520
- var __awaiter$1e = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3546
+ var __awaiter$1d = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3521
3547
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3522
3548
  return new (P || (P = Promise))(function (resolve, reject) {
3523
3549
  function fulfilled(value) { try {
@@ -3608,7 +3634,7 @@
3608
3634
  }
3609
3635
  };
3610
3636
  FileUtils.SaveGLBFile = function (data, assetPath) {
3611
- return __awaiter$1e(this, void 0, void 0, function () {
3637
+ return __awaiter$1d(this, void 0, void 0, function () {
3612
3638
  return __generator(this, function (_a) {
3613
3639
  return [2 /*return*/, new Promise(function (resolve, reject) {
3614
3640
  var xhr = new XMLHttpRequest();
@@ -3767,7 +3793,7 @@
3767
3793
  }());
3768
3794
  FileUtils._cachedTextureUploads = new Map();
3769
3795
 
3770
- var __awaiter$1d = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3796
+ var __awaiter$1c = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3771
3797
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3772
3798
  return new (P || (P = Promise))(function (resolve, reject) {
3773
3799
  function fulfilled(value) { try {
@@ -3791,7 +3817,7 @@
3791
3817
  this._settingsService = _settingsService;
3792
3818
  }
3793
3819
  FileService.prototype.getTotalDownloadSize = function (files) {
3794
- return __awaiter$1d(this, void 0, void 0, function () {
3820
+ return __awaiter$1c(this, void 0, void 0, function () {
3795
3821
  var url, data, response;
3796
3822
  return __generator(this, function (_a) {
3797
3823
  switch (_a.label) {
@@ -3827,7 +3853,7 @@
3827
3853
  }]
3828
3854
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }]; } });
3829
3855
 
3830
- var __awaiter$1c = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3856
+ var __awaiter$1b = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3831
3857
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3832
3858
  return new (P || (P = Promise))(function (resolve, reject) {
3833
3859
  function fulfilled(value) { try {
@@ -3864,7 +3890,7 @@
3864
3890
  configurable: true
3865
3891
  });
3866
3892
  ProgressService.prototype.prepareDownloads = function (furniture) {
3867
- return __awaiter$1c(this, void 0, void 0, function () {
3893
+ return __awaiter$1b(this, void 0, void 0, function () {
3868
3894
  var files, i, model, realUrl, url, _a;
3869
3895
  return __generator(this, function (_b) {
3870
3896
  switch (_b.label) {
@@ -4785,7 +4811,7 @@
4785
4811
  RelativePositionUtils.appOffsetTop = 0;
4786
4812
  RelativePositionUtils.appOffsetLeft = 0;
4787
4813
 
4788
- var __awaiter$1b = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4814
+ var __awaiter$1a = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4789
4815
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4790
4816
  return new (P || (P = Promise))(function (resolve, reject) {
4791
4817
  function fulfilled(value) { try {
@@ -4994,7 +5020,7 @@
4994
5020
  scope.pan(new THREE__namespace.Vector2(x, y));
4995
5021
  };
4996
5022
  this.animateCamera = function (type, change) {
4997
- return __awaiter$1b(this, void 0, void 0, function () {
5023
+ return __awaiter$1a(this, void 0, void 0, function () {
4998
5024
  var changing, tween;
4999
5025
  var _this = this;
5000
5026
  return __generator(this, function (_a) {
@@ -5010,7 +5036,7 @@
5010
5036
  });
5011
5037
  };
5012
5038
  this.animateCameraMovement = function (endPosition, endTarget, endDuration) {
5013
- return __awaiter$1b(this, void 0, void 0, function () {
5039
+ return __awaiter$1a(this, void 0, void 0, function () {
5014
5040
  var duration, position, target, targetTween, positionTween, targetPromise, positionPromise;
5015
5041
  var _this = this;
5016
5042
  return __generator(this, function (_a) {
@@ -5086,7 +5112,7 @@
5086
5112
  this.updatePositionTarget(this.camera.position, this.target);
5087
5113
  };
5088
5114
  this.animateMoveTo = function (target) {
5089
- return __awaiter$1b(this, void 0, void 0, function () {
5115
+ return __awaiter$1a(this, void 0, void 0, function () {
5090
5116
  var position, distance, tween;
5091
5117
  return __generator(this, function (_a) {
5092
5118
  position = scope.target.clone();
@@ -5277,7 +5303,7 @@
5277
5303
  return event && event.target && event.target === document.body;
5278
5304
  }
5279
5305
  function onMouseMove(event) {
5280
- return __awaiter$1b(this, void 0, void 0, function () {
5306
+ return __awaiter$1a(this, void 0, void 0, function () {
5281
5307
  var mousePos;
5282
5308
  return __generator(this, function (_a) {
5283
5309
  if (!isMouseEventAllowed(event)) {
@@ -5643,7 +5669,7 @@
5643
5669
  }]
5644
5670
  }] });
5645
5671
 
5646
- var __awaiter$1a = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5672
+ var __awaiter$19 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5647
5673
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5648
5674
  return new (P || (P = Promise))(function (resolve, reject) {
5649
5675
  function fulfilled(value) { try {
@@ -5854,7 +5880,7 @@
5854
5880
  this.cameraMovementChanged.next();
5855
5881
  };
5856
5882
  CameraService.prototype.moveCameraToFitObject = function (object, offset) {
5857
- return __awaiter$1a(this, void 0, void 0, function () {
5883
+ return __awaiter$19(this, void 0, void 0, function () {
5858
5884
  var boundingBox, center, size, maxDim, fov, cameraZ, newPosition, tween;
5859
5885
  return __generator(this, function (_a) {
5860
5886
  switch (_a.label) {
@@ -5924,7 +5950,7 @@
5924
5950
  return target.clone().add(new THREE.Vector3(0, targetDistance, targetDistance));
5925
5951
  };
5926
5952
  CameraService.prototype._placeWalkThroughCameraInCorner = function (viewCorner) {
5927
- return __awaiter$1a(this, void 0, void 0, function () {
5953
+ return __awaiter$19(this, void 0, void 0, function () {
5928
5954
  var center2d, center, corner2d, corner, distance, diff, lerpAlpha, nearCorner, tween;
5929
5955
  return __generator(this, function (_a) {
5930
5956
  switch (_a.label) {
@@ -6115,7 +6141,7 @@
6115
6141
  }]
6116
6142
  }], ctorParameters: function () { return []; } });
6117
6143
 
6118
- var __awaiter$19 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6144
+ var __awaiter$18 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6119
6145
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6120
6146
  return new (P || (P = Promise))(function (resolve, reject) {
6121
6147
  function fulfilled(value) { try {
@@ -6141,7 +6167,7 @@
6141
6167
  this.messages = [];
6142
6168
  }
6143
6169
  MessageBoardService.prototype.init = function (scene) {
6144
- return __awaiter$19(this, void 0, void 0, function () {
6170
+ return __awaiter$18(this, void 0, void 0, function () {
6145
6171
  return __generator(this, function (_a) {
6146
6172
  this.scene = scene;
6147
6173
  if (this._settingsService.settings.options.xrDebug) {
@@ -6183,7 +6209,7 @@
6183
6209
  }]
6184
6210
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: FontService }]; } });
6185
6211
 
6186
- var __awaiter$18 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6212
+ var __awaiter$17 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6187
6213
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6188
6214
  return new (P || (P = Promise))(function (resolve, reject) {
6189
6215
  function fulfilled(value) { try {
@@ -6223,7 +6249,7 @@
6223
6249
  this._subs.forEach(function (s) { return s.unsubscribe(); });
6224
6250
  };
6225
6251
  XrService.prototype.init = function (renderer, scene, camera) {
6226
- return __awaiter$18(this, void 0, void 0, function () {
6252
+ return __awaiter$17(this, void 0, void 0, function () {
6227
6253
  var displays;
6228
6254
  var _this = this;
6229
6255
  return __generator(this, function (_a) {
@@ -6508,7 +6534,7 @@
6508
6534
  }]
6509
6535
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: DebugService }, { type: MessageBoardService }]; } });
6510
6536
 
6511
- var __awaiter$17 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6537
+ var __awaiter$16 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6512
6538
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6513
6539
  return new (P || (P = Promise))(function (resolve, reject) {
6514
6540
  function fulfilled(value) { try {
@@ -6574,7 +6600,7 @@
6574
6600
  * @param {XRCoordinateSystem} frameOfRef
6575
6601
  */
6576
6602
  Reticle.prototype.update = function (session, camera, frameOfRef) {
6577
- return __awaiter$17(this, void 0, void 0, function () {
6603
+ return __awaiter$16(this, void 0, void 0, function () {
6578
6604
  var ray, origin, direction, hits, hit, hitMatrix;
6579
6605
  return __generator(this, function (_a) {
6580
6606
  this._rayCaster = this._rayCaster || new THREE.Raycaster();
@@ -7196,7 +7222,7 @@
7196
7222
  return ServiceLocator;
7197
7223
  }());
7198
7224
 
7199
- var __awaiter$16 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7225
+ var __awaiter$15 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7200
7226
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7201
7227
  return new (P || (P = Promise))(function (resolve, reject) {
7202
7228
  function fulfilled(value) { try {
@@ -7278,7 +7304,7 @@
7278
7304
  this._outlinePass.selectedObjects = [item];
7279
7305
  };
7280
7306
  OutlineService.prototype.showOutline = function (item) {
7281
- return __awaiter$16(this, void 0, void 0, function () {
7307
+ return __awaiter$15(this, void 0, void 0, function () {
7282
7308
  var _this = this;
7283
7309
  return __generator(this, function (_a) {
7284
7310
  // if (item && (item instanceof FloorPin || item instanceof WallPin)) {
@@ -7301,7 +7327,7 @@
7301
7327
  });
7302
7328
  };
7303
7329
  OutlineService.prototype.hideOutline = function () {
7304
- return __awaiter$16(this, void 0, void 0, function () {
7330
+ return __awaiter$15(this, void 0, void 0, function () {
7305
7331
  return __generator(this, function (_a) {
7306
7332
  if (this._outlinePass.selectedObjects.length > 0) {
7307
7333
  // await this._animatedOutlineStrength(300, 0);
@@ -8198,7 +8224,7 @@
8198
8224
  TextureType[TextureType["PBR"] = 3] = "PBR";
8199
8225
  })(TextureType || (TextureType = {}));
8200
8226
 
8201
- var __awaiter$15 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8227
+ var __awaiter$14 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8202
8228
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8203
8229
  return new (P || (P = Promise))(function (resolve, reject) {
8204
8230
  function fulfilled(value) { try {
@@ -8267,7 +8293,7 @@
8267
8293
  };
8268
8294
  // use canvas to create rotated textures
8269
8295
  MaterialUtils.RotatedCanvasTexture = function (texture, textureURL, dimensions, adjustScale, repeatX, repeatY) {
8270
- return __awaiter$15(this, void 0, void 0, function () {
8296
+ return __awaiter$14(this, void 0, void 0, function () {
8271
8297
  var img;
8272
8298
  return __generator(this, function (_a) {
8273
8299
  switch (_a.label) {
@@ -8280,7 +8306,7 @@
8280
8306
  });
8281
8307
  };
8282
8308
  MaterialUtils.CustomTileMapTexture = function (texture, dimensions) {
8283
- return __awaiter$15(this, void 0, void 0, function () {
8309
+ return __awaiter$14(this, void 0, void 0, function () {
8284
8310
  var img, ratio, tileSizeMax, newTileSize, t, image;
8285
8311
  return __generator(this, function (_a) {
8286
8312
  switch (_a.label) {
@@ -8323,7 +8349,7 @@
8323
8349
  };
8324
8350
  // use canvas to create texture from photo
8325
8351
  MaterialUtils.FromImage = function (texture /*, dimensions: THREE.Vector2*/) {
8326
- return __awaiter$15(this, void 0, void 0, function () {
8352
+ return __awaiter$14(this, void 0, void 0, function () {
8327
8353
  var img, canvas, threeTexture;
8328
8354
  return __generator(this, function (_a) {
8329
8355
  switch (_a.label) {
@@ -8342,7 +8368,7 @@
8342
8368
  });
8343
8369
  };
8344
8370
  MaterialUtils.ReadAndResizePhotoAsDataURL = function (file) {
8345
- return __awaiter$15(this, void 0, void 0, function () {
8371
+ return __awaiter$14(this, void 0, void 0, function () {
8346
8372
  var imageSrc;
8347
8373
  return __generator(this, function (_a) {
8348
8374
  switch (_a.label) {
@@ -8362,7 +8388,8 @@
8362
8388
  var srcKey = src;
8363
8389
  var type = 'image/jpeg';
8364
8390
  if (isDataUri) {
8365
- srcKey = md5__namespace(src);
8391
+ // srcKey = md5(src);
8392
+ srcKey = src;
8366
8393
  if (src.indexOf('image/png') > -1) {
8367
8394
  type = 'image/png';
8368
8395
  }
@@ -8409,7 +8436,7 @@
8409
8436
  });
8410
8437
  };
8411
8438
  MaterialUtils.GetMaterialMaps = function (material, texture, dimensions) {
8412
- return __awaiter$15(this, void 0, void 0, function () {
8439
+ return __awaiter$14(this, void 0, void 0, function () {
8413
8440
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
8414
8441
  return __generator(this, function (_s) {
8415
8442
  switch (_s.label) {
@@ -8524,7 +8551,7 @@
8524
8551
  });
8525
8552
  };
8526
8553
  MaterialUtils.loadMaterializeMaps = function (material, texture) {
8527
- return __awaiter$15(this, void 0, void 0, function () {
8554
+ return __awaiter$14(this, void 0, void 0, function () {
8528
8555
  var _a, _b, _c, _d, _e;
8529
8556
  return __generator(this, function (_f) {
8530
8557
  switch (_f.label) {
@@ -8604,7 +8631,7 @@
8604
8631
  };
8605
8632
  // use canvas to create texture from flipped photo
8606
8633
  MaterialUtils.FromFlippedImage = function (texture, dimensions) {
8607
- return __awaiter$15(this, void 0, void 0, function () {
8634
+ return __awaiter$14(this, void 0, void 0, function () {
8608
8635
  var origImg, canvas, threeTexture;
8609
8636
  return __generator(this, function (_a) {
8610
8637
  switch (_a.label) {
@@ -8642,7 +8669,7 @@
8642
8669
  };
8643
8670
  // use canvas to create custom textures
8644
8671
  MaterialUtils.CustomTileTexture = function (texture) {
8645
- return __awaiter$15(this, void 0, void 0, function () {
8672
+ return __awaiter$14(this, void 0, void 0, function () {
8646
8673
  var img, canvas;
8647
8674
  return __generator(this, function (_a) {
8648
8675
  switch (_a.label) {
@@ -8658,7 +8685,7 @@
8658
8685
  });
8659
8686
  };
8660
8687
  MaterialUtils.RotatedImageTexture = function (texture, textureURL) {
8661
- return __awaiter$15(this, void 0, void 0, function () {
8688
+ return __awaiter$14(this, void 0, void 0, function () {
8662
8689
  var img, canvas;
8663
8690
  return __generator(this, function (_a) {
8664
8691
  switch (_a.label) {
@@ -8674,7 +8701,7 @@
8674
8701
  });
8675
8702
  };
8676
8703
  MaterialUtils.CreateTileDataUrl = function (img, texture) {
8677
- return __awaiter$15(this, void 0, void 0, function () {
8704
+ return __awaiter$14(this, void 0, void 0, function () {
8678
8705
  var canvas, tileUnit, tileCtx;
8679
8706
  return __generator(this, function (_a) {
8680
8707
  switch (_a.label) {
@@ -8697,7 +8724,7 @@
8697
8724
  });
8698
8725
  };
8699
8726
  MaterialUtils.CreateTileMap = function (img, texture, oDimensions, adjustScale, repeatX, repeatY) {
8700
- return __awaiter$15(this, void 0, void 0, function () {
8727
+ return __awaiter$14(this, void 0, void 0, function () {
8701
8728
  var dimensions, canvas, rotation, imgSize, ctx, bbHeight, bbWidth, i, j, threeTexture;
8702
8729
  return __generator(this, function (_a) {
8703
8730
  switch (_a.label) {
@@ -8785,7 +8812,7 @@
8785
8812
  MaterialUtils.imageCache = new Map();
8786
8813
  MaterialUtils.textureCache = new Map();
8787
8814
 
8788
- var __awaiter$14 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8815
+ var __awaiter$13 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8789
8816
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8790
8817
  return new (P || (P = Promise))(function (resolve, reject) {
8791
8818
  function fulfilled(value) { try {
@@ -8840,7 +8867,7 @@
8840
8867
  Utils$1.DisposeObject(this._pointRepresentation);
8841
8868
  };
8842
8869
  ArService.prototype.resetPlaneDetection = function () {
8843
- return __awaiter$14(this, void 0, void 0, function () {
8870
+ return __awaiter$13(this, void 0, void 0, function () {
8844
8871
  var _this = this;
8845
8872
  return __generator(this, function (_a) {
8846
8873
  switch (_a.label) {
@@ -8868,7 +8895,7 @@
8868
8895
  this._session.end();
8869
8896
  };
8870
8897
  ArService.prototype.arIOSSupported = function () {
8871
- return __awaiter$14(this, void 0, void 0, function () {
8898
+ return __awaiter$13(this, void 0, void 0, function () {
8872
8899
  var isIOS, anchor;
8873
8900
  return __generator(this, function (_a) {
8874
8901
  isIOS = /iPad|iPhone|iPod/.test(navigator.platform) ||
@@ -8885,7 +8912,7 @@
8885
8912
  });
8886
8913
  };
8887
8914
  ArService.prototype.arSupported = function () {
8888
- return __awaiter$14(this, void 0, void 0, function () {
8915
+ return __awaiter$13(this, void 0, void 0, function () {
8889
8916
  return __generator(this, function (_a) {
8890
8917
  switch (_a.label) {
8891
8918
  case 0:
@@ -9057,6 +9084,7 @@
9057
9084
  this._lightProbe.addEventListener('reflectionchange', function () {
9058
9085
  var rawData = _this._glBinding.getReflectionCubeMap(_this._lightProbe);
9059
9086
  var texProps = _this._renderer.properties.get(_this._cubeMapTexture);
9087
+ // @ts-ignore
9060
9088
  texProps.__webglTexture = rawData;
9061
9089
  });
9062
9090
  };
@@ -9257,7 +9285,7 @@
9257
9285
  }
9258
9286
  };
9259
9287
  ArService.prototype._createPlaneMaterial = function () {
9260
- return __awaiter$14(this, void 0, void 0, function () {
9288
+ return __awaiter$13(this, void 0, void 0, function () {
9261
9289
  var pm, _a;
9262
9290
  return __generator(this, function (_b) {
9263
9291
  switch (_b.label) {
@@ -9276,7 +9304,7 @@
9276
9304
  });
9277
9305
  };
9278
9306
  ArService.prototype._onSessionStarted = function (session) {
9279
- return __awaiter$14(this, void 0, void 0, function () {
9307
+ return __awaiter$13(this, void 0, void 0, function () {
9280
9308
  var domOverlay;
9281
9309
  var _this = this;
9282
9310
  return __generator(this, function (_a) {
@@ -9410,7 +9438,7 @@
9410
9438
  }
9411
9439
  };
9412
9440
  ArService.prototype._checkIfHoldTouchEvent = function ($event) {
9413
- return __awaiter$14(this, void 0, void 0, function () {
9441
+ return __awaiter$13(this, void 0, void 0, function () {
9414
9442
  var _this = this;
9415
9443
  return __generator(this, function (_a) {
9416
9444
  setTimeout(function () {
@@ -9771,37 +9799,87 @@
9771
9799
  this._renderer = renderer;
9772
9800
  this._scene = scene;
9773
9801
  this._camera = camera;
9774
- this._renderTarget = new THREE.WebGLRenderTarget(width, height, {
9775
- minFilter: THREE.NearestFilter,
9776
- magFilter: THREE.NearestFilter,
9777
- format: THREE.RGBAFormat,
9778
- colorSpace: THREE.SRGBColorSpace
9779
- });
9780
- this._renderTarget.samples = 4;
9781
- this._renderTarget.depthTexture = new THREE.DepthTexture(width, height, THREE.UnsignedIntType);
9782
- this._renderTarget.depthTexture.format = THREE.DepthFormat;
9783
- this._composer = new EffectComposer.EffectComposer(this._renderer, this._renderTarget);
9784
- this._n8aoPass = new n8ao.N8AOPass(scene, camera, width, height);
9785
- this._n8aoPass.configuration.gammaCorrection = false;
9786
- this._n8aoPass.debugMode = true;
9802
+ this._width = width;
9803
+ this._height = height;
9804
+ this._postProcessingGui = new GUI__default["default"]();
9805
+ this._postProcessingGui.hide();
9806
+ this._renderPass = new RenderPass.RenderPass(this._scene, this._camera);
9807
+ this._outputPass = new OutputPass.OutputPass();
9808
+ this._initAoComposer();
9809
+ this._initAaComposer();
9810
+ this._initBlendComposer();
9811
+ };
9812
+ PostProcessingService.prototype._initAaComposer = function () {
9813
+ this._aaRenderTarget = new THREE.WebGLRenderTarget(this._width, this._height, {
9814
+ samples: 4,
9815
+ type: THREE.HalfFloatType /*,
9816
+ minFilter: NearestFilter,
9817
+ magFilter: NearestFilter,
9818
+ format: RGBAFormat,
9819
+ colorSpace: SRGBColorSpace*/
9820
+ });
9821
+ this._aaComposer = new EffectComposer.EffectComposer(this._renderer, this._aaRenderTarget);
9822
+ this._aaComposer.renderToScreen = false;
9823
+ var fxaaPass = new ShaderPass.ShaderPass(FXAAShader.FXAAShader);
9824
+ var pixelRatio = this._renderer.getPixelRatio();
9825
+ // fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (this._width * pixelRatio);
9826
+ // fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (this._height * pixelRatio);
9827
+ fxaaPass.uniforms['resolution'].value.x = 1 / (this._width * pixelRatio);
9828
+ fxaaPass.uniforms['resolution'].value.y = 1 / (this._height * pixelRatio);
9829
+ // this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
9830
+ // this._taaRenderPass.unbiased = true;
9831
+ // this._taaRenderPass.sampleLevel = 4;
9832
+ // this._renderPass.enabled = false;
9833
+ // sao
9834
+ // this._saoPass = new SAOPass( this._scene, this._camera, new Vector2(2048, 2048));
9835
+ // this._saoPass.resolution.set(2048, 2048);
9836
+ // this._saoPass.renderToScreen = true;
9837
+ // this._saoPass.enabled = true;
9838
+ this._aaComposer.addPass(this._renderPass);
9839
+ // this._aaComposer.addPass(this._taaRenderPass);
9840
+ this._aaComposer.addPass(fxaaPass);
9841
+ this._aaComposer.addPass(this._outputPass);
9842
+ this._createGuiTaaPass();
9843
+ };
9844
+ PostProcessingService.prototype._initAoComposer = function () {
9845
+ this._aoRenderTarget = new THREE.WebGLRenderTarget(this._width, this._height, {
9846
+ samples: 4,
9847
+ type: THREE.HalfFloatType /*,
9848
+ minFilter: NearestFilter,
9849
+ magFilter: NearestFilter,
9850
+ format: RGBAFormat,
9851
+ colorSpace: SRGBColorSpace*/
9852
+ });
9853
+ this._aoComposer = new EffectComposer.EffectComposer(this._renderer, this._aoRenderTarget);
9854
+ this._aoComposer.renderToScreen = false;
9855
+ this._n8aoPass = new n8ao.N8AOPass(this._scene, this._camera, this._width, this._height);
9856
+ // this._n8aoPass.configuration.gammaCorrection = false;
9857
+ // this._n8aoPass.renderToScreen = false;
9858
+ // this._n8aoPass.debugMode = true;
9787
9859
  // const smaaPass = new SMAAPass(width, height);
9788
9860
  // this._composer.addPass(smaaPass);
9789
- // const fxaaPass = new ShaderPass(FXAAShader);
9790
- // const pixelRatio = this._renderer.getPixelRatio();
9791
- // fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (width * pixelRatio);
9792
- // fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (height * pixelRatio);
9793
- this._outputPass = new OutputPass.OutputPass();
9794
- this._taaRenderPass = new TAARenderPass.TAARenderPass(this._scene, this._camera, 0x000000, 0);
9795
- this._taaRenderPass.unbiased = false;
9796
- this._taaRenderPass.sampleLevel = 4;
9797
- this._renderPass = new RenderPass.RenderPass(this._scene, this._camera);
9798
9861
  // this._renderPass.enabled = false;
9799
- this._composer.addPass(this._renderPass);
9800
- this._composer.addPass(this._taaRenderPass);
9801
- this._composer.addPass(this._n8aoPass);
9802
- this._composer.addPass(this._outputPass);
9862
+ // sao
9863
+ // this._saoPass = new SAOPass( this._scene, this._camera, new Vector2(2048, 2048));
9864
+ // this._saoPass.resolution.set(2048, 2048);
9865
+ // this._saoPass.renderToScreen = true;
9866
+ // this._saoPass.enabled = true;
9867
+ this._aoComposer.addPass(this._renderPass);
9868
+ this._aoComposer.addPass(this._n8aoPass);
9869
+ this._aoComposer.addPass(this._outputPass);
9870
+ // this._composer.addPass(this._saoPass);
9871
+ // this._aoComposer.addPass(this._aoOutputPass);
9803
9872
  this._createGui();
9804
- this._createGuiTaaPass();
9873
+ };
9874
+ PostProcessingService.prototype._initBlendComposer = function () {
9875
+ this._blendShader = new ShaderPass.ShaderPass(BlendShader.BlendShader);
9876
+ this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
9877
+ this._blendShader.uniforms.tDiffuse2.value = this._aoRenderTarget.texture;
9878
+ // blendShader.uniforms['mixRatio'].value = 0.9;
9879
+ this._blendComposer = new EffectComposer.EffectComposer(this._renderer);
9880
+ this._blendComposer.renderToScreen = true;
9881
+ this._blendComposer.addPass(this._renderPass);
9882
+ this._blendComposer.addPass(this._blendShader);
9805
9883
  };
9806
9884
  PostProcessingService.prototype._updatePass = function () {
9807
9885
  this._n8aoPass.configuration.aoRadius = this._effectController.aoRadius;
@@ -9823,10 +9901,8 @@
9823
9901
  };
9824
9902
  PostProcessingService.prototype._createGuiTaaPass = function () {
9825
9903
  var _this = this;
9826
- this._taaPassGui = new GUI__default["default"]();
9827
- this._taaPassGui.hide();
9828
9904
  var param = { TAAEnabled: '1', TAASampleLevel: 0 };
9829
- this._taaPassGui.add(param, 'TAAEnabled', {
9905
+ this._postProcessingGui.add(param, 'TAAEnabled', {
9830
9906
  'Disabled': '0',
9831
9907
  'Enabled': '1'
9832
9908
  }).onFinishChange(function () {
@@ -9835,7 +9911,7 @@
9835
9911
  }
9836
9912
  _this.render();
9837
9913
  });
9838
- this._taaPassGui.add(param, 'TAASampleLevel', {
9914
+ this._postProcessingGui.add(param, 'TAASampleLevel', {
9839
9915
  'Level 0: 1 Sample': 0,
9840
9916
  'Level 1: 2 Samples': 1,
9841
9917
  'Level 2: 4 Samples': 2,
@@ -9848,13 +9924,16 @@
9848
9924
  }
9849
9925
  _this.render();
9850
9926
  });
9851
- this._taaPassGui.open();
9852
9927
  };
9853
9928
  PostProcessingService.prototype.setSize = function (width, height) {
9854
- this._composer.setSize(width, height);
9929
+ this._aoComposer.setSize(width, height);
9930
+ this._aaComposer.setSize(width, height);
9931
+ this._blendComposer.setSize(width, height);
9855
9932
  };
9856
9933
  PostProcessingService.prototype.render = function () {
9857
- this._composer.render();
9934
+ this._aaComposer.render();
9935
+ this._aoComposer.render();
9936
+ this._blendComposer.render();
9858
9937
  };
9859
9938
  PostProcessingService.prototype.showGui = function () {
9860
9939
  this._postProcessingGui.show(true);
@@ -9867,8 +9946,16 @@
9867
9946
  };
9868
9947
  PostProcessingService.prototype._createGui = function () {
9869
9948
  var _this = this;
9870
- this._postProcessingGui = new GUI__default["default"]();
9871
- this._postProcessingGui.hide();
9949
+ var param = { Enabled: '1' };
9950
+ this._postProcessingGui.add(param, 'Enabled', {
9951
+ 'Disabled': '0',
9952
+ 'Enabled': '1'
9953
+ }).onFinishChange(function () {
9954
+ if (_this._aoComposer) {
9955
+ _this._aoComposer.renderToScreen = (param.Enabled === '1');
9956
+ }
9957
+ _this.render();
9958
+ });
9872
9959
  this._postProcessingGui.add(this._effectController, 'aoSamples', 1.0, 64.0, 1.0).onChange(function () { return _this._updatePass(); });
9873
9960
  this._postProcessingGui.add(this._effectController, 'denoiseSamples', 1.0, 64.0, 1.0).onChange(function () { return _this._updatePass(); });
9874
9961
  this._postProcessingGui.add(this._effectController, 'denoiseRadius', 0.0, 24.0, 0.01).onChange(function () { return _this._updatePass(); });
@@ -9916,25 +10003,6 @@
9916
10003
  }]
9917
10004
  }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });
9918
10005
 
9919
- var __awaiter$13 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9920
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9921
- return new (P || (P = Promise))(function (resolve, reject) {
9922
- function fulfilled(value) { try {
9923
- step(generator.next(value));
9924
- }
9925
- catch (e) {
9926
- reject(e);
9927
- } }
9928
- function rejected(value) { try {
9929
- step(generator["throw"](value));
9930
- }
9931
- catch (e) {
9932
- reject(e);
9933
- } }
9934
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9935
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9936
- });
9937
- };
9938
10006
  var SsrService = /** @class */ (function () {
9939
10007
  function SsrService(_settingsService) {
9940
10008
  this._settingsService = _settingsService;
@@ -9957,70 +10025,6 @@
9957
10025
  SsrService.prototype.ngOnDestroy = function () {
9958
10026
  this._subs.forEach(function (s) { return s.unsubscribe(); });
9959
10027
  };
9960
- SsrService.prototype.init = function () {
9961
- var _this = this;
9962
- var socket = new WebSocket('ws://localhost:7005');
9963
- var peerConnection = new RTCPeerConnection({
9964
- iceServers: [{ urls: 'stun:stun.1.google.com:19302' }]
9965
- });
9966
- peerConnection.onicecandidate = function (event) {
9967
- if (event.candidate) {
9968
- socket.send(JSON.stringify({ candidate: event.candidate }));
9969
- }
9970
- };
9971
- peerConnection.ontrack = function (event) {
9972
- var remoteVideo = document.getElementById('remoteVideo');
9973
- // @ts-ignore
9974
- if (remoteVideo.srcObject !== event.streams[0]) {
9975
- // @ts-ignore
9976
- remoteVideo.srcObject = event.streams[0];
9977
- }
9978
- };
9979
- socket.onmessage = function (message) { return __awaiter$13(_this, void 0, void 0, function () {
9980
- var text, data, answer, e_1, e_2;
9981
- return __generator(this, function (_a) {
9982
- switch (_a.label) {
9983
- case 0:
9984
- _a.trys.push([0, 10, , 11]);
9985
- return [4 /*yield*/, message.data.text()];
9986
- case 1:
9987
- text = _a.sent();
9988
- data = JSON.parse(text);
9989
- if (!data.offer) return [3 /*break*/, 5];
9990
- return [4 /*yield*/, peerConnection.setRemoteDescription(new RTCSessionDescription(data.offer))];
9991
- case 2:
9992
- _a.sent();
9993
- return [4 /*yield*/, peerConnection.createAnswer()];
9994
- case 3:
9995
- answer = _a.sent();
9996
- return [4 /*yield*/, peerConnection.setLocalDescription(answer)];
9997
- case 4:
9998
- _a.sent();
9999
- socket.send(JSON.stringify({ answer: peerConnection.localDescription }));
10000
- return [3 /*break*/, 9];
10001
- case 5:
10002
- if (!data.candidate) return [3 /*break*/, 9];
10003
- _a.label = 6;
10004
- case 6:
10005
- _a.trys.push([6, 8, , 9]);
10006
- return [4 /*yield*/, peerConnection.addIceCandidate(new RTCIceCandidate(data.candidate))];
10007
- case 7:
10008
- _a.sent();
10009
- return [3 /*break*/, 9];
10010
- case 8:
10011
- e_1 = _a.sent();
10012
- console.error('Error adding ICE-Candidate', e_1);
10013
- return [3 /*break*/, 9];
10014
- case 9: return [3 /*break*/, 11];
10015
- case 10:
10016
- e_2 = _a.sent();
10017
- console.error(e_2);
10018
- return [3 /*break*/, 11];
10019
- case 11: return [2 /*return*/];
10020
- }
10021
- });
10022
- }); };
10023
- };
10024
10028
  SsrService.prototype.sceneChanged = function (scene) {
10025
10029
  if (this._websocket.readyState === WebSocket.OPEN) {
10026
10030
  var sceneClone = scene.clone(true);
@@ -10295,7 +10299,7 @@
10295
10299
  var canvasElement, context;
10296
10300
  return __generator(this, function (_a) {
10297
10301
  canvasElement = document.createElement('canvas');
10298
- context = canvasElement.getContext('webgl2', { antialias: true });
10302
+ context = canvasElement.getContext('webgl2');
10299
10303
  this.webGL2Available = context !== undefined;
10300
10304
  // this.renderer = new WebGPURenderer({ alpha: true, antialias: true });
10301
10305
  // this.renderer =
@@ -10309,15 +10313,21 @@
10309
10313
  // logarithmicDepthBuffer: true*/
10310
10314
  // });
10311
10315
  // this.renderer = new WebGLRenderer({alpha: true, antialias: false, preserveDrawingBuffer: true, premultipliedAlpha: true});
10312
- this.renderer = new THREE.WebGLRenderer( /*{
10313
- precision: 'highp',
10314
- powerPreference: 'high-performance',
10315
- antialias: true,
10316
- stencil: false,
10317
- depth: false
10318
- }*/);
10316
+ this.renderer = new THREE.WebGLRenderer({
10317
+ /*
10318
+ precision: 'highp',
10319
+ powerPreference: 'high-performance',
10320
+ */
10321
+ /*
10322
+ antialias: true,
10323
+ */
10324
+ /*
10325
+ stencil: false,
10326
+ depth: false
10327
+ */
10328
+ });
10319
10329
  this.renderer.outputColorSpace = THREE.SRGBColorSpace;
10320
- this.renderer.autoClear = false;
10330
+ this.renderer.autoClear = true;
10321
10331
  this.renderer.setPixelRatio(window.devicePixelRatio);
10322
10332
  this.renderer.toneMapping = THREE.NoToneMapping; // ACESFilmicToneMapping; // LinearToneMapping;
10323
10333
  this.renderer.shadowMap.enabled = true;
@@ -10382,7 +10392,7 @@
10382
10392
  }
10383
10393
  else {
10384
10394
  this._postProcessing.render();
10385
- this._outlineService.render();
10395
+ // this._outlineService.render();
10386
10396
  }
10387
10397
  // this.renderer.render(this.scene, this._cameraService.camera);
10388
10398
  }
@@ -10477,7 +10487,7 @@
10477
10487
  // }
10478
10488
  //
10479
10489
  var PresetsService = /** @class */ (function () {
10480
- function PresetsService(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService) {
10490
+ function PresetsService(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService, _eventService) {
10481
10491
  var _this = this;
10482
10492
  this._appStateService = _appStateService;
10483
10493
  this._permanentStoreService = _permanentStoreService;
@@ -10488,6 +10498,7 @@
10488
10498
  this._storageService = _storageService;
10489
10499
  this._progressService = _progressService;
10490
10500
  this._sceneService = _sceneService;
10501
+ this._eventService = _eventService;
10491
10502
  // public static presetsPath = '/assets/presets';
10492
10503
  this.isLoading = false;
10493
10504
  this.beforeLoad = new rxjs.Subject();
@@ -10552,6 +10563,9 @@
10552
10563
  _b.label = 2;
10553
10564
  case 2:
10554
10565
  modelObj = JSON.parse(preset.model);
10566
+ if (modelObj.floorplan && modelObj.floorplan.corners && Object.keys(modelObj.floorplan.corners).length > 0) {
10567
+ this._eventService.dirty.next(true);
10568
+ }
10555
10569
  return [2 /*return*/, JSON.stringify(!modelObj.hasOwnProperty('needRescale') ? this._reScaleModel(modelObj) : modelObj)];
10556
10570
  }
10557
10571
  });
@@ -10559,7 +10573,10 @@
10559
10573
  };
10560
10574
  PresetsService.prototype._loadSavedRoomFromCloud = function (code) {
10561
10575
  var _this = this;
10562
- this._loadRoomPlan(function () { return new Promise(function (resolve) { return _this._permanentStoreService.load(code).subscribe(function (json) { return resolve(JSON.stringify(json)); }); }); });
10576
+ this._loadRoomPlan(function () { return new Promise(function (resolve) {
10577
+ _this._eventService.dirty.next(true);
10578
+ _this._permanentStoreService.load(code).subscribe(function (json) { return resolve(JSON.stringify(json)); });
10579
+ }); });
10563
10580
  };
10564
10581
  PresetsService.prototype._clear = function () {
10565
10582
  return __awaiter$11(this, void 0, void 0, function () {
@@ -10797,14 +10814,14 @@
10797
10814
  };
10798
10815
  return PresetsService;
10799
10816
  }());
10800
- PresetsService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, deps: [{ token: AppStateService }, { token: PermanentStoreService }, { token: JsonUtilsService }, { token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: ConfigurationService }, { token: LocalStorageService }, { token: ProgressService }, { token: SceneService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
10817
+ PresetsService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, deps: [{ token: AppStateService }, { token: PermanentStoreService }, { token: JsonUtilsService }, { token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: ConfigurationService }, { token: LocalStorageService }, { token: ProgressService }, { token: SceneService }, { token: HomedecoratorAppEventService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
10801
10818
  PresetsService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, providedIn: 'root' });
10802
10819
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, decorators: [{
10803
10820
  type: i0.Injectable,
10804
10821
  args: [{
10805
10822
  providedIn: 'root'
10806
10823
  }]
10807
- }], ctorParameters: function () { return [{ type: AppStateService }, { type: PermanentStoreService }, { type: JsonUtilsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: ConfigurationService }, { type: LocalStorageService }, { type: ProgressService }, { type: SceneService }]; } });
10824
+ }], ctorParameters: function () { return [{ type: AppStateService }, { type: PermanentStoreService }, { type: JsonUtilsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: ConfigurationService }, { type: LocalStorageService }, { type: ProgressService }, { type: SceneService }, { type: HomedecoratorAppEventService }]; } });
10808
10825
 
10809
10826
  var DeviceSizeType;
10810
10827
  (function (DeviceSizeType) {
@@ -14309,8 +14326,8 @@
14309
14326
  /* tslint:disable */
14310
14327
  var VersionInfo = {
14311
14328
  application: "Homedecorator",
14312
- appVersion: "255.1.2",
14313
- revision: "111849"
14329
+ appVersion: "255.1.4",
14330
+ revision: "112028"
14314
14331
  };
14315
14332
  /* tslint:enable */
14316
14333
 
@@ -15026,7 +15043,7 @@
15026
15043
  });
15027
15044
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
15028
15045
  var metadata = Object.assign({}, this.metadata);
15029
- metadata.skin = this.skin;
15046
+ metadata.skin = Object.assign({}, this.skin);
15030
15047
  var copy = new CustomShapeFloorItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
15031
15048
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
15032
15049
  copy.calculateHalfSize();
@@ -15091,7 +15108,7 @@
15091
15108
  });
15092
15109
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
15093
15110
  var metadata = Object.assign({}, this.metadata);
15094
- metadata.skin = this.skin;
15111
+ metadata.skin = Object.assign({}, this.skin);
15095
15112
  var copy = new CustomCylinderFloorItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
15096
15113
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
15097
15114
  copy.calculateHalfSize();
@@ -15577,12 +15594,13 @@
15577
15594
  });
15578
15595
  };
15579
15596
  var FloorService = /** @class */ (function () {
15580
- function FloorService(_sceneService, _outlineService, _itemService, _settingsService) {
15597
+ function FloorService(_sceneService, _outlineService, _itemService, _settingsService, _messageService) {
15581
15598
  var _this = this;
15582
15599
  this._sceneService = _sceneService;
15583
15600
  this._outlineService = _outlineService;
15584
15601
  this._itemService = _itemService;
15585
15602
  this._settingsService = _settingsService;
15603
+ this._messageService = _messageService;
15586
15604
  this._floors = [];
15587
15605
  this._subs = [];
15588
15606
  this._subs.push(this._sceneService.sceneInitialized.subscribe(function (initialized) {
@@ -15636,6 +15654,8 @@
15636
15654
  else {
15637
15655
  this._updateFloorMaterial(this._floors[0], floorMaterial, texture);
15638
15656
  }
15657
+ // emit new texture for appearance-section
15658
+ this._messageService.emit(MessageType.ChangeTexture, texture);
15639
15659
  return [2 /*return*/];
15640
15660
  }
15641
15661
  });
@@ -15813,14 +15833,14 @@
15813
15833
  };
15814
15834
  return FloorService;
15815
15835
  }());
15816
- FloorService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, deps: [{ token: SceneService }, { token: OutlineService }, { token: ItemService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
15836
+ FloorService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, deps: [{ token: SceneService }, { token: OutlineService }, { token: ItemService }, { token: HomedecoratorSettingsService }, { token: MessageBusService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
15817
15837
  FloorService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, providedIn: 'root' });
15818
15838
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, decorators: [{
15819
15839
  type: i0.Injectable,
15820
15840
  args: [{
15821
15841
  providedIn: 'root'
15822
15842
  }]
15823
- }], ctorParameters: function () { return [{ type: SceneService }, { type: OutlineService }, { type: ItemService }, { type: HomedecoratorSettingsService }]; } });
15843
+ }], ctorParameters: function () { return [{ type: SceneService }, { type: OutlineService }, { type: ItemService }, { type: HomedecoratorSettingsService }, { type: MessageBusService }]; } });
15824
15844
 
15825
15845
  var CeilingService = /** @class */ (function () {
15826
15846
  function CeilingService(_sceneService, _configurationService) {
@@ -15968,7 +15988,7 @@
15968
15988
  this._subs = [];
15969
15989
  this._subs.push(this._appService.floorTexturesLoaded.subscribe(function (floors) {
15970
15990
  if (floors) {
15971
- _this._defaultFloorTexture = floors.find(function (f) { return f.default === true; });
15991
+ _this._defaultFloorTexture = floors.find(function (f) { return f.default === true && !f.useStandalone; });
15972
15992
  }
15973
15993
  }), this._cameraService.cameraMovementChanged.subscribe(function () { return _this._updateEdgeVisibility(_this._cameraService.camera.position); }), this._presetService.afterLoad.subscribe(function () { return _this._updateEdgeVisibility(_this._cameraService.camera.position); }), this._viewModeService.viewModeChanged.subscribe(function (mode) { return __awaiter$W(_this, void 0, void 0, function () {
15974
15994
  return __generator(this, function (_a) {
@@ -16218,6 +16238,9 @@
16218
16238
  }
16219
16239
  });
16220
16240
  };
16241
+ RoomService.prototype.resetAllRooms = function () {
16242
+ this.rooms = [];
16243
+ };
16221
16244
  RoomService.prototype._showHideWalls = function (show) {
16222
16245
  this.walls.forEach(function (w) { return w.showHideWall(show); });
16223
16246
  this._sceneService.needsRender = true;
@@ -17463,7 +17486,7 @@
17463
17486
  });
17464
17487
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
17465
17488
  var metadata = Object.assign({}, this.metadata);
17466
- metadata.skin = this.skin;
17489
+ metadata.skin = Object.assign({}, this.skin);
17467
17490
  var copy = new CustomShapeWallItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
17468
17491
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
17469
17492
  copy.calculateHalfSize();
@@ -17522,7 +17545,7 @@
17522
17545
  });
17523
17546
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
17524
17547
  var metadata = Object.assign({}, this.metadata);
17525
- metadata.skin = this.skin;
17548
+ metadata.skin = Object.assign({}, this.skin);
17526
17549
  var copy = new CustomCylinderWallItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
17527
17550
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
17528
17551
  copy.calculateHalfSize();
@@ -19631,7 +19654,7 @@
19631
19654
  _this.messageService.emit(MessageType.ShowLoadingIndicator, { title: 'Rendering...' });
19632
19655
  _this.requestRender(filename, camera, standalone, renderParameters);
19633
19656
  }).catch(function (error) {
19634
- console.log(error);
19657
+ _this.messageService.emit(MessageType.RenderError, { title: 'Upload error', message: error.message });
19635
19658
  });
19636
19659
  return [2 /*return*/];
19637
19660
  });
@@ -19675,8 +19698,8 @@
19675
19698
  return dataURL;
19676
19699
  };
19677
19700
  }
19678
- }).catch(function (err) {
19679
- console.log(err);
19701
+ }).catch(function (error) {
19702
+ _this.messageService.emit(MessageType.RenderError, { title: 'Render error', message: error.message });
19680
19703
  })];
19681
19704
  case 1:
19682
19705
  _a.sent();
@@ -24943,7 +24966,7 @@
24943
24966
  edge: 0,
24944
24967
  total: 0,
24945
24968
  };
24946
- console.log(floorMesh.position);
24969
+ // console.log(floorMesh.position);
24947
24970
  var _b = this._checkIntersection2(floorMesh, floorPattern, geometry), floorHits = _b.floorHits, edgeHits = _b.edgeHits;
24948
24971
  try {
24949
24972
  for (var floorHits_1 = __values(floorHits), floorHits_1_1 = floorHits_1.next(); !floorHits_1_1.done; floorHits_1_1 = floorHits_1.next()) {
@@ -25136,7 +25159,6 @@
25136
25159
  this.arPlacementUpdate = new rxjs.Subject();
25137
25160
  this.showElementToolbar = false;
25138
25161
  this.isMouseOverObject = false;
25139
- this.activeAnswers = [];
25140
25162
  this.standAloneFirstBuildReady = false;
25141
25163
  this._useNodeIdToLink = true;
25142
25164
  this._standAlone = false;
@@ -25370,7 +25392,7 @@
25370
25392
  if (looseOriginalConfiguration === void 0) { looseOriginalConfiguration = true; }
25371
25393
  if (firstBuild === void 0) { firstBuild = false; }
25372
25394
  return __awaiter$G(this, void 0, void 0, function () {
25373
- var originalInstanceId_1, _a, _b, questionAndAnswers;
25395
+ var originalInstanceId_1, _a, _b;
25374
25396
  return __generator(this, function (_c) {
25375
25397
  switch (_c.label) {
25376
25398
  case 0:
@@ -25413,22 +25435,14 @@
25413
25435
  this.startPosition = result.metaData.position ? result.metaData.position.clone() : new THREE.Vector3();
25414
25436
  return [4 /*yield*/, this._iOne.getQuestionAndAnswersAsync()];
25415
25437
  case 7:
25416
- questionAndAnswers = _c.sent();
25417
- if (questionAndAnswers.question && !questionAndAnswers.question.grouped) {
25418
- this._iOne.handleAnswersReceived(questionAndAnswers.answers);
25419
- }
25420
- this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
25421
- if (!(questionAndAnswers.answers.length === 0)) return [3 /*break*/, 9];
25422
- this.activeAnswers = [];
25423
- this.activeQuestion = undefined;
25438
+ _c.sent(); // see if there is user input needed
25439
+ if (!(this._iOne.activeAnswers.length === 0)) return [3 /*break*/, 9];
25424
25440
  return [4 /*yield*/, this._prepareSelectionsAndDecos(result)
25425
25441
  .catch(function (e) { return Promise.reject(e); })];
25426
25442
  case 8:
25427
25443
  _c.sent();
25428
25444
  return [2 /*return*/, this.build(result)];
25429
25445
  case 9:
25430
- this.activeQuestion = questionAndAnswers.question;
25431
- this.activeAnswers = questionAndAnswers.answers;
25432
25446
  if (!firstBuild) return [3 /*break*/, 11];
25433
25447
  return [4 /*yield*/, this._prepareSelectionsAndDecos(result)
25434
25448
  .catch(function (e) { return Promise.reject(e); })];
@@ -26053,7 +26067,6 @@
26053
26067
  if (rebuild === void 0) { rebuild = true; }
26054
26068
  if (getAnswers === void 0) { getAnswers = false; }
26055
26069
  return __awaiter$G(this, void 0, void 0, function () {
26056
- var questionAndAnswers;
26057
26070
  return __generator(this, function (_a) {
26058
26071
  switch (_a.label) {
26059
26072
  case 0: return [4 /*yield*/, this._iOne.cancelAnswer()];
@@ -26066,9 +26079,7 @@
26066
26079
  if (!getAnswers) return [3 /*break*/, 4];
26067
26080
  return [4 /*yield*/, this._iOne.getQuestionAndAnswersAsync()];
26068
26081
  case 3:
26069
- questionAndAnswers = _a.sent();
26070
- this._iOne.handleAnswersReceived(questionAndAnswers.answers);
26071
- this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
26082
+ _a.sent(); // see if there is user input needed
26072
26083
  _a.label = 4;
26073
26084
  case 4: return [2 /*return*/];
26074
26085
  }
@@ -27264,7 +27275,7 @@
27264
27275
  return SelectedChildMaterialTextureComponent;
27265
27276
  }());
27266
27277
  SelectedChildMaterialTextureComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SelectedChildMaterialTextureComponent, deps: [{ token: HomedecoratorIconCacheService }, { token: SceneService }], target: i0__namespace.ɵɵFactoryTarget.Component });
27267
- SelectedChildMaterialTextureComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectedChildMaterialTextureComponent, selector: "development-selected-child-material-texture", inputs: { map: "map", title: "title" }, outputs: { mapChange: "mapChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["inputFile"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <div class=\"map-title-wrapper\">\n <div class=\"map-title\" [textContent]=\"title\"></div>\n <div class=\"collapse-wrapper\">\n <div class=\"collapse-handle\" [class.expanded]=\"showContent\" *ngIf=\"map\" (click)=\"showContent = !showContent\">\n <co-icon class=\"collapse-handle-icon\" [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\"></co-icon>\n </div>\n <div class=\"zoom-button\" [class.expanded]=\"showContent\" *ngIf=\"map\" (click)=\"showLargeImage()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Magnifier)\"></co-icon>\n </div>\n <div class=\"delete-button\" *ngIf=\"map\" (click)=\"deleteMap()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Cross)\"></co-icon>\n </div>\n <div class=\"map-image\" (click)=\"uploadImage('map')\">\n <div class=\"no-image\" *ngIf=\"!map || !map.image || !map.image.currentSrc\"></div>\n <img class=\"value\" *ngIf=\"map && map.image && map.image.currentSrc\" [src]=\"map.image.currentSrc\">\n </div>\n </div>\n </div>\n <div class=\"map-content\" *ngIf=\"showContent\" @showHideMapContent>\n <div class=\"label\" [textContent]=\"'anisotrophy'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"map.anisotropy\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'center'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.center.x\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.center.y\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'encoding'\"></div>\n<!-- <mat-form-field class=\"value\">-->\n<!-- <mat-select [(value)]=\"map.encoding\">-->\n<!-- <mat-option *ngFor=\"let encoding of textureEncodingList\" [value]=\"encoding.id\" (click)=\"render()\">-->\n<!-- {{ encoding.description }}-->\n<!-- </mat-option>-->\n<!-- </mat-select>-->\n<!-- </mat-form-field>-->\n <div class=\"label\" [textContent]=\"'flipY'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [ngModel]=\"map.flipY\" (ngModelChange)=\"changeFlip($event)\">\n </div>\n <div class=\"label\" [textContent]=\"'format'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.format\">\n <mat-option *ngFor=\"let format of pixelFormatList\" [value]=\"format.id\" (click)=\"render()\">\n {{ format.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'generateMipmaps'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"map.generateMipmaps\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'magFilter'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.magFilter\">\n <mat-option *ngFor=\"let filter of textureFilterList\" [value]=\"filter.id\" (click)=\"render()\">\n {{ filter.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'mapping'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.mapping\">\n <mat-option *ngFor=\"let mapping of mappingList\" [value]=\"mapping.id\" (click)=\"render()\">\n {{ mapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'minFilter'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.minFilter\">\n <mat-option *ngFor=\"let filter of textureFilterList\" [value]=\"filter.id\" (click)=\"render()\">\n {{ filter.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'offset'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.offset.x\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.offset.y\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'premultiplyAlpha'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"map.premultiplyAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'repeat'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.repeat.x\" [min]=\"0\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.repeat.y\" [min]=\"0\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'rotation'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"map.rotation\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'type'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.type\">\n <mat-option *ngFor=\"let type of typeList\" [value]=\"type.id\" (click)=\"render()\">\n {{ type.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'wrapS'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.wrapS\">\n <mat-option *ngFor=\"let wrapping of wrappingList\" [value]=\"wrapping.id\" (click)=\"render()\">\n {{ wrapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'wrapT'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.wrapT\">\n <mat-option *ngFor=\"let wrapping of wrappingList\" [value]=\"wrapping.id\" (click)=\"render()\">\n {{ wrapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"large-image-viewer\" *ngIf=\"showZoomImage && viewImageSrc\" (click)=\"hideZoomImage($event)\">\n <div class=\"large-image-viewer-content\">\n <img [src]=\"viewImageSrc\">\n <div class=\"large-image-viewer-close\" (click)=\"hideZoomImage($event)\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Cross)\"></co-icon>\n </div>\n </div>\n </div>\n <input #inputFile [accept]=\"'image/*'\" (change)=\"handleFileChange($event)\" type=\"file\" hidden/>\n ", isInline: true, styles: [".map-title-wrapper{display:flex;flex-direction:row;justify-content:space-between;height:30px}.map-title-wrapper .map-title{display:flex;align-items:center;font-size:12px}.map-title-wrapper .map-title img{height:30px;width:30px}.map-title-wrapper .collapse-wrapper{display:flex;flex-direction:row;grid-column-gap:10px;column-gap:10px}.map-title-wrapper .collapse-wrapper .collapse-handle.expanded{transition:all .2s}.map-title-wrapper .collapse-wrapper .collapse-handle.expanded .collapse-handle-icon{transform:rotate(180deg)}.map-title-wrapper img{height:30px;width:30px}.map-title-wrapper .no-image,.map-title-wrapper img{cursor:pointer;display:flex;height:30px;width:30px;border:1px solid;position:relative}.map-title-wrapper .no-image:before,.map-title-wrapper .no-image:after,.map-title-wrapper img:before,.map-title-wrapper img:after{content:\"\";position:absolute;width:42px;height:42px}.map-title-wrapper .no-image:after,.map-title-wrapper img:after{border-bottom:1px solid;transform:rotate(135deg);top:8px;left:9px}.map-title-wrapper .no-image:before,.map-title-wrapper img:before{border-top:1px solid;transform:rotate(45deg);top:8px;left:-21px}.map-content{display:grid;grid-template-areas:\"label value\";grid-template-columns:175px 1fr;margin-left:10px}.map-content .label{grid-area:label;grid-row:auto;display:flex;align-items:center;border-bottom:1px solid #d3d3d3}.map-content .value{grid-area:value;grid-row:auto;display:flex;height:35px;align-items:center;border-bottom:1px solid #d3d3d3}.map-content .value>*{display:flex;flex-basis:auto;flex-grow:1;flex-shrink:1;width:100%}.map-content .no-image,.map-content img{height:50px;width:50px;border:1px solid}.large-image-viewer{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:999}.large-image-viewer .large-image-viewer-content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-height:100vh;max-width:100vw}.large-image-viewer .large-image-viewer-content img{border:1px solid white}.large-image-viewer .large-image-viewer-content .large-image-viewer-close{cursor:pointer;position:absolute;top:0;right:0;background:rgba(255,255,255,.5)}\n"], components: [{ type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8__namespace.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }], animations: [
27278
+ SelectedChildMaterialTextureComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectedChildMaterialTextureComponent, selector: "development-selected-child-material-texture", inputs: { map: "map", title: "title" }, outputs: { mapChange: "mapChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["inputFile"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <div class=\"map-title-wrapper\">\n <div class=\"map-title\" [textContent]=\"title\"></div>\n <div class=\"collapse-wrapper\">\n <div class=\"collapse-handle\" [class.expanded]=\"showContent\" *ngIf=\"map\" (click)=\"showContent = !showContent\">\n <co-icon class=\"collapse-handle-icon\" [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\"></co-icon>\n </div>\n <div class=\"zoom-button\" [class.expanded]=\"showContent\" *ngIf=\"map\" (click)=\"showLargeImage()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Magnifier)\"></co-icon>\n </div>\n <div class=\"delete-button\" *ngIf=\"map\" (click)=\"deleteMap()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Cross)\"></co-icon>\n </div>\n <div class=\"map-image\" (click)=\"uploadImage('map')\">\n <div class=\"no-image\" *ngIf=\"!map || !map.image || !map.image.currentSrc\"></div>\n <img class=\"value\" *ngIf=\"map && map.image && map.image.currentSrc\" [src]=\"map.image.currentSrc\">\n </div>\n </div>\n </div>\n <div class=\"map-content\" *ngIf=\"showContent\" @showHideMapContent>\n <div class=\"label\" [textContent]=\"'anisotrophy'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"map.anisotropy\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'center'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.center.x\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.center.y\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'encoding'\"></div>\n<!-- <mat-form-field class=\"value\">-->\n<!-- <mat-select [(value)]=\"map.encoding\">-->\n<!-- <mat-option *ngFor=\"let encoding of textureEncodingList\" [value]=\"encoding.id\" (click)=\"render()\">-->\n<!-- {{ encoding.description }}-->\n<!-- </mat-option>-->\n<!-- </mat-select>-->\n<!-- </mat-form-field>-->\n <div class=\"label\" [textContent]=\"'flipY'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [ngModel]=\"map.flipY\" (ngModelChange)=\"changeFlip($event)\">\n </div>\n <div class=\"label\" [textContent]=\"'format'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.format\">\n <mat-option *ngFor=\"let format of pixelFormatList\" [value]=\"format.id\" (click)=\"render()\">\n {{ format.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'generateMipmaps'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"map.generateMipmaps\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'magFilter'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.magFilter\">\n <mat-option *ngFor=\"let filter of textureFilterList\" [value]=\"filter.id\" (click)=\"render()\">\n {{ filter.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'mapping'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.mapping\">\n <mat-option *ngFor=\"let mapping of mappingList\" [value]=\"mapping.id\" (click)=\"render()\">\n {{ mapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'minFilter'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.minFilter\">\n <mat-option *ngFor=\"let filter of textureFilterList\" [value]=\"filter.id\" (click)=\"render()\">\n {{ filter.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'offset'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.offset.x\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.offset.y\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'premultiplyAlpha'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"map.premultiplyAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'repeat'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"map.repeat.x\" [min]=\"0\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"map.repeat.y\" [min]=\"0\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'rotation'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"map.rotation\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'type'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.type\">\n <mat-option *ngFor=\"let type of typeList\" [value]=\"type.id\" (click)=\"render()\">\n {{ type.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'wrapS'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.wrapS\">\n <mat-option *ngFor=\"let wrapping of wrappingList\" [value]=\"wrapping.id\" (click)=\"render()\">\n {{ wrapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'wrapT'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"map.wrapT\">\n <mat-option *ngFor=\"let wrapping of wrappingList\" [value]=\"wrapping.id\" (click)=\"render()\">\n {{ wrapping.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"large-image-viewer\" *ngIf=\"showZoomImage && viewImageSrc\" (click)=\"hideZoomImage($event)\">\n <div class=\"large-image-viewer-content\">\n <img [src]=\"viewImageSrc\">\n <div class=\"large-image-viewer-close\" (click)=\"hideZoomImage($event)\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Cross)\"></co-icon>\n </div>\n </div>\n </div>\n <input #inputFile [accept]=\"'image/*'\" (change)=\"handleFileChange($event)\" type=\"file\" hidden/>\n ", isInline: true, styles: [".map-title-wrapper{display:flex;flex-direction:row;justify-content:space-between;height:30px}.map-title-wrapper .map-title{display:flex;align-items:center;font-size:12px}.map-title-wrapper .map-title img{height:30px;width:30px}.map-title-wrapper .collapse-wrapper{display:flex;flex-direction:row;grid-column-gap:10px;column-gap:10px}.map-title-wrapper .collapse-wrapper .collapse-handle.expanded{transition:all .2s}.map-title-wrapper .collapse-wrapper .collapse-handle.expanded .collapse-handle-icon{transform:rotate(180deg)}.map-title-wrapper img{height:30px;width:30px}.map-title-wrapper .no-image,.map-title-wrapper img{cursor:pointer;display:flex;height:30px;width:30px;border:1px solid;position:relative}.map-title-wrapper .no-image:before,.map-title-wrapper .no-image:after,.map-title-wrapper img:before,.map-title-wrapper img:after{content:\"\";position:absolute;width:42px;height:42px}.map-title-wrapper .no-image:after,.map-title-wrapper img:after{border-bottom:1px solid;transform:rotate(135deg);top:8px;left:9px}.map-title-wrapper .no-image:before,.map-title-wrapper img:before{border-top:1px solid;transform:rotate(45deg);top:8px;left:-21px}.map-content{display:grid;grid-template-areas:\"label value\";grid-template-columns:175px 1fr;margin-left:10px}.map-content .label{grid-area:label;grid-row:auto;display:flex;align-items:center;border-bottom:1px solid #d3d3d3}.map-content .value{grid-area:value;grid-row:auto;display:flex;height:35px;align-items:center;border-bottom:1px solid #d3d3d3}.map-content .value>*{display:flex;flex-basis:auto;flex-grow:1;flex-shrink:1;width:100%}.map-content .no-image,.map-content img{height:50px;width:50px;border:1px solid}.large-image-viewer{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:999}.large-image-viewer .large-image-viewer-content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-height:100vh;max-width:100vw}.large-image-viewer .large-image-viewer-content img{border:1px solid white}.large-image-viewer .large-image-viewer-content .large-image-viewer-close{cursor:pointer;position:absolute;top:0;right:0;background:rgba(255,255,255,.5)}\n"], components: [{ type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8__namespace.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }], animations: [
27268
27279
  animations.trigger('showHideMapContent', [
27269
27280
  animations.state('void', animations.style({ 'height': '0', opacity: 0 })),
27270
27281
  animations.state('*', animations.style({ 'height': '*', opacity: 1 })),
@@ -27502,7 +27513,7 @@
27502
27513
  return SelectedChildMaterialComponent;
27503
27514
  }());
27504
27515
  SelectedChildMaterialComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SelectedChildMaterialComponent, deps: [{ token: HomedecoratorIconCacheService }, { token: SceneService }], target: i0__namespace.ɵɵFactoryTarget.Component });
27505
- SelectedChildMaterialComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectedChildMaterialComponent, selector: "development-selected-child-material", inputs: { material: "material", title: "title" }, outputs: { materialChange: "materialChange" }, ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"material\">\n <div class=\"development-selected-child-material-wrapper\">\n <div class=\"material-map-wrapper\">\n <div class=\"title-wrapper\">\n <span class=\"title\" [textContent]=\"title\"></span>\n <button class=\"save-button\" mat-mini-fab matTooltip=\"{{'SAVE_MATERIAL' | localize}}\" (click)=\"saveMaterial()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Download)\"></co-icon>\n </button>\n </div>\n <div class=\"selected-child-material-content\">\n <div class=\"label\" [textContent]=\"'alphaToCoverage'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.alphaToCoverage\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'aoMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.aoMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendDst'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendDst\">\n <mat-option *ngFor=\"let blendDstFactor of blendDstFactorList\" [value]=\"blendDstFactor.id\" (click)=\"render()\">\n {{ blendDstFactor.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendDstAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendDstAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendEquation'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendEquation\">\n <mat-option *ngFor=\"let blendingEquation of blendingEquationList\" [value]=\"blendingEquation.id\" (click)=\"render()\">\n {{ blendingEquation.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendEquationAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendEquationAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendSrc'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendSrc\">\n <mat-option *ngFor=\"let blendSrcFactor of blendSrcFactorList\" [value]=\"blendSrcFactor.id\" (click)=\"render()\">\n {{ blendSrcFactor.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendSrcAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendSrcAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blending'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blending\">\n <mat-option *ngFor=\"let blending of blendingList\" [value]=\"blending.id\" (click)=\"render()\">\n {{ blending.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'bumpScale'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.bumpScale\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'clipIntersection'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.clipIntersection\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'clipShadows'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.clipShadows\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'color'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.color)\" (ngModelChange)=\"changeColor('color', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'colorWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.colorWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'depthTest'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.depthTest\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'depthWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.depthWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'displacementBias'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.displacementBias\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'displacementScale'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.displacementScale\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'dithering'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.dithering\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'emissive'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.emissive)\" (ngModelChange)=\"changeColor('emissive', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'emissiveIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.emissiveIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'envMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.envMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'flatShading'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.flatShading\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'fog'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.fog\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'format'\"></div>\n<!-- <mat-form-field class=\"value\">-->\n<!-- <mat-select [(value)]=\"material.format\">-->\n<!-- <mat-option *ngFor=\"let pixelFormat of pixelFormatList\" [value]=\"pixelFormat.id\" (click)=\"render()\">-->\n<!-- {{ pixelFormat.description }}-->\n<!-- </mat-option>-->\n<!-- </mat-select>-->\n<!-- </mat-form-field>-->\n <div class=\"label\" [textContent]=\"'lightMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.lightMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'metalness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.metalness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'normalMapType'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.normalMapType\">\n <mat-option *ngFor=\"let normalMapType of normalMapTypeList\" [value]=\"normalMapType.id\" (click)=\"render()\">\n {{ normalMapType.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'normalScale'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"material.normalScale.x\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"material.normalScale.y\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'opacity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.opacity\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffset'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.polygonOffset\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffsetFactor'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.polygonOffsetFactor\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffsetUnits'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.polygonOffsetUnits\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'precision'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.precision\">\n <mat-option *ngFor=\"let precision of precisionList\" [value]=\"precision.id\" (click)=\"render()\">\n {{ precision.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'premultipliedAlpha'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.premultipliedAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'reflectivity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.reflectivity\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'refractionRatio'\"></div>\n<!-- <div class=\"value\">-->\n<!-- <input type=\"number\" [(ngModel)]=\"material.refractionRatio\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">-->\n<!-- </div>-->\n <div class=\"label\" [textContent]=\"'roughness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.roughness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'shadowSide'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.shadowSide\">\n <mat-option *ngFor=\"let side of sideListWithEmpty\" [value]=\"side.id\" (click)=\"render()\">\n {{ side.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'sheen'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.sheen\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'sheenColor'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.sheenColor)\" (ngModelChange)=\"changeColor('sheenColor', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'sheenRougness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.sheenRoughness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'side'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.side\">\n <mat-option *ngFor=\"let side of sideList\" [value]=\"side.id\" (click)=\"render()\">\n {{ side.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFail'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilFail\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFunc'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilFunc\">\n <mat-option *ngFor=\"let stencilFunc of stencilFuncList\" [value]=\"stencilFunc.id\" (click)=\"render()\">\n {{ stencilFunc.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFuncMask'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilFuncMask\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilRef'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilRef\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.stencilWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilWriteMask'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilWriteMask\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilZFail'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilZFail\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilZPass'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilZPass\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'toneMapped'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.toneMapped\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'transparent'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.transparent\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'type'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.type\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'uuid'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.uuid\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'version'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.version\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'vertexColors'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.vertexColors\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'visible'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.visible\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'wireframe'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.wireframe\" (ngModelChange)=\"render()\">\n </div>\n </div>\n <div class=\"map-wrapper\">\n <development-selected-child-material-texture [title]=\"'alphaMap'\" [(map)]=\"material.alphaMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'aoMap'\" [(map)]=\"material.aoMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'bumpMap'\" [(map)]=\"material.bumpMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'displacementMap'\" [(map)]=\"material.displacementMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'emissiveMap'\" [(map)]=\"material.emissiveMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'envMap'\" [(map)]=\"material.envMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'lightMap'\" [(map)]=\"material.lightMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'map'\" [(map)]=\"material.map\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'metalnessMap'\" [(map)]=\"material.metalnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'normalMap'\" [(map)]=\"material.normalMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'roughnessMap'\" [(map)]=\"material.roughnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'sheenRoughnessMap'\" [(map)]=\"material.sheenRoughnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'sheenColorMap'\" [(map)]=\"material.sheenColorMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n </div>\n </div>\n </div>\n </ng-container>\n ", isInline: true, styles: [".development-selected-child-material-wrapper{font-size:12px;position:fixed;right:0;top:65px;width:400px;height:100%;background:white;box-shadow:0 0 4px #01010180;z-index:10}.development-selected-child-material-wrapper .material-map-wrapper{padding:10px;height:calc(100% - 85px);overflow-y:auto;overflow-x:hidden}.development-selected-child-material-wrapper .selected-child-material-content{display:grid;grid-template-areas:\"label value\";grid-template-columns:175px 1fr}.development-selected-child-material-wrapper .title{font-size:14px;font-weight:bold;margin-bottom:10px}.development-selected-child-material-wrapper .label{grid-area:label;grid-row:auto;display:flex;align-items:center;height:30px;border-bottom:1px solid #9bb0d0;background-color:#e4edf4}.development-selected-child-material-wrapper .value{grid-area:value;grid-row:auto;display:flex;align-items:center;height:30px;border-bottom:1px solid #9bb0d0;background-color:#e4edf4}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: SelectedChildMaterialTextureComponent, selector: "development-selected-child-material-texture", inputs: ["map", "title"], outputs: ["mapChange"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8__namespace.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }], pipes: { "localize": LocalizePipe } });
27516
+ SelectedChildMaterialComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SelectedChildMaterialComponent, selector: "development-selected-child-material", inputs: { material: "material", title: "title" }, outputs: { materialChange: "materialChange" }, ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"material\">\n <div class=\"development-selected-child-material-wrapper\">\n <div class=\"material-map-wrapper\">\n <div class=\"title-wrapper\">\n <span class=\"title\" [textContent]=\"title\"></span>\n <button class=\"save-button\" mat-mini-fab matTooltip=\"{{'SAVE_MATERIAL' | localize}}\" (click)=\"saveMaterial()\">\n <co-icon [iconData]=\"iconService.getIcon(icon.Download)\"></co-icon>\n </button>\n </div>\n <div class=\"selected-child-material-content\">\n <div class=\"label\" [textContent]=\"'alphaToCoverage'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.alphaToCoverage\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'aoMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.aoMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendDst'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendDst\">\n <mat-option *ngFor=\"let blendDstFactor of blendDstFactorList\" [value]=\"blendDstFactor.id\" (click)=\"render()\">\n {{ blendDstFactor.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendDstAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendDstAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendEquation'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendEquation\">\n <mat-option *ngFor=\"let blendingEquation of blendingEquationList\" [value]=\"blendingEquation.id\" (click)=\"render()\">\n {{ blendingEquation.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendEquationAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendEquationAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blendSrc'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blendSrc\">\n <mat-option *ngFor=\"let blendSrcFactor of blendSrcFactorList\" [value]=\"blendSrcFactor.id\" (click)=\"render()\">\n {{ blendSrcFactor.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'blendSrcAlpha'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.blendSrcAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'blending'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.blending\">\n <mat-option *ngFor=\"let blending of blendingList\" [value]=\"blending.id\" (click)=\"render()\">\n {{ blending.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'bumpScale'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.bumpScale\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'clipIntersection'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.clipIntersection\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'clipShadows'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.clipShadows\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'color'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.color)\" (ngModelChange)=\"changeColor('color', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'colorWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.colorWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'depthTest'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.depthTest\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'depthWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.depthWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'displacementBias'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.displacementBias\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'displacementScale'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.displacementScale\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'dithering'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.dithering\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'emissive'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.emissive)\" (ngModelChange)=\"changeColor('emissive', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'emissiveIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.emissiveIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'envMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.envMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'flatShading'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.flatShading\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'fog'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.fog\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'format'\"></div>\n<!-- <mat-form-field class=\"value\">-->\n<!-- <mat-select [(value)]=\"material.format\">-->\n<!-- <mat-option *ngFor=\"let pixelFormat of pixelFormatList\" [value]=\"pixelFormat.id\" (click)=\"render()\">-->\n<!-- {{ pixelFormat.description }}-->\n<!-- </mat-option>-->\n<!-- </mat-select>-->\n<!-- </mat-form-field>-->\n <div class=\"label\" [textContent]=\"'lightMapIntensity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.lightMapIntensity\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'metalness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.metalness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'normalMapType'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.normalMapType\">\n <mat-option *ngFor=\"let normalMapType of normalMapTypeList\" [value]=\"normalMapType.id\" (click)=\"render()\">\n {{ normalMapType.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'normalScale'\"></div>\n <div class=\"value\">\n <span>x:</span><input type=\"number\" [(ngModel)]=\"material.normalScale.x\" (ngModelChange)=\"render()\">\n <span>y:</span><input type=\"number\" [(ngModel)]=\"material.normalScale.y\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'opacity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.opacity\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffset'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.polygonOffset\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffsetFactor'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.polygonOffsetFactor\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'polygonOffsetUnits'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.polygonOffsetUnits\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'precision'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.precision\">\n <mat-option *ngFor=\"let precision of precisionList\" [value]=\"precision.id\" (click)=\"render()\">\n {{ precision.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'premultipliedAlpha'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.premultipliedAlpha\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'reflectivity'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.reflectivity\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'refractionRatio'\"></div>\n<!-- <div class=\"value\">-->\n<!-- <input type=\"number\" [(ngModel)]=\"material.refractionRatio\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">-->\n<!-- </div>-->\n <div class=\"label\" [textContent]=\"'roughness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.roughness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'shadowSide'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.shadowSide\">\n <mat-option *ngFor=\"let side of sideListWithEmpty\" [value]=\"side.id\" (click)=\"render()\">\n {{ side.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'sheen'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.sheen\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'sheenColor'\"></div>\n <div class=\"value\">\n <input type=\"color\" [ngModel]=\"getColor(material.sheenColor)\" (ngModelChange)=\"changeColor('sheenColor', $event)\">\n </div>\n <div class=\"label\" [textContent]=\"'sheenRougness'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.sheenRoughness\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'side'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.side\">\n <mat-option *ngFor=\"let side of sideList\" [value]=\"side.id\" (click)=\"render()\">\n {{ side.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFail'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilFail\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFunc'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilFunc\">\n <mat-option *ngFor=\"let stencilFunc of stencilFuncList\" [value]=\"stencilFunc.id\" (click)=\"render()\">\n {{ stencilFunc.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilFuncMask'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilFuncMask\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilRef'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilRef\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilWrite'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.stencilWrite\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilWriteMask'\"></div>\n <div class=\"value\">\n <input type=\"number\" [(ngModel)]=\"material.stencilWriteMask\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'stencilZFail'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilZFail\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'stencilZPass'\"></div>\n <mat-form-field class=\"value\">\n <mat-select [(value)]=\"material.stencilZPass\">\n <mat-option *ngFor=\"let stencilOp of stencilOpList\" [value]=\"stencilOp.id\" (click)=\"render()\">\n {{ stencilOp.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"label\" [textContent]=\"'toneMapped'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.toneMapped\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'transparent'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.transparent\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'type'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.type\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'uuid'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.uuid\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'version'\"></div>\n <div class=\"value\">\n <input type=\"text\" [(ngModel)]=\"material.version\" readonly>\n </div>\n <div class=\"label\" [textContent]=\"'vertexColors'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.vertexColors\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'visible'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.visible\" (ngModelChange)=\"render()\">\n </div>\n <div class=\"label\" [textContent]=\"'wireframe'\"></div>\n <div class=\"value\">\n <input type=\"checkbox\" [(ngModel)]=\"material.wireframe\" (ngModelChange)=\"render()\">\n </div>\n </div>\n <div class=\"map-wrapper\">\n <development-selected-child-material-texture [title]=\"'alphaMap'\" [(map)]=\"material.alphaMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'aoMap'\" [(map)]=\"material.aoMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'bumpMap'\" [(map)]=\"material.bumpMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'displacementMap'\" [(map)]=\"material.displacementMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'emissiveMap'\" [(map)]=\"material.emissiveMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'envMap'\" [(map)]=\"material.envMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'lightMap'\" [(map)]=\"material.lightMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'map'\" [(map)]=\"material.map\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'metalnessMap'\" [(map)]=\"material.metalnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'normalMap'\" [(map)]=\"material.normalMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'roughnessMap'\" [(map)]=\"material.roughnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'sheenRoughnessMap'\" [(map)]=\"material.sheenRoughnessMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n <development-selected-child-material-texture [title]=\"'sheenColorMap'\" [(map)]=\"material.sheenColorMap\" (mapChange)=\"handleMapChange($event)\"></development-selected-child-material-texture>\n </div>\n </div>\n </div>\n </ng-container>\n ", isInline: true, styles: [".development-selected-child-material-wrapper{font-size:12px;position:fixed;right:0;top:65px;width:400px;height:100%;background:white;box-shadow:0 0 4px #01010180;z-index:10}.development-selected-child-material-wrapper .material-map-wrapper{padding:10px;height:calc(100% - 85px);overflow-y:auto;overflow-x:hidden}.development-selected-child-material-wrapper .selected-child-material-content{display:grid;grid-template-areas:\"label value\";grid-template-columns:175px 1fr}.development-selected-child-material-wrapper .title{font-size:14px;font-weight:bold;margin-bottom:10px}.development-selected-child-material-wrapper .label{grid-area:label;grid-row:auto;display:flex;align-items:center;height:30px;border-bottom:1px solid #9bb0d0;background-color:#e4edf4}.development-selected-child-material-wrapper .value{grid-area:value;grid-row:auto;display:flex;align-items:center;height:30px;border-bottom:1px solid #9bb0d0;background-color:#e4edf4}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: SelectedChildMaterialTextureComponent, selector: "development-selected-child-material-texture", inputs: ["map", "title"], outputs: ["mapChange"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i8__namespace.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }], pipes: { "localize": LocalizePipe } });
27506
27517
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SelectedChildMaterialComponent, decorators: [{
27507
27518
  type: i0.Component,
27508
27519
  args: [{
@@ -28442,7 +28453,7 @@
28442
28453
  return EditLightComponent;
28443
28454
  }());
28444
28455
  EditLightComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditLightComponent, deps: [{ token: SceneService }, { token: LightsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
28445
- EditLightComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditLightComponent, selector: "edit-light", inputs: { light: "light" }, outputs: { okClick: "okClick", cancelClick: "cancelClick" }, host: { listeners: { "document:mousemove": "moveDialog($event)", "document:mouseup": "cancelMoveDialog($event)" } }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialog"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<div class=\"edit-popup\" #dialog @showHideDialog [style.top.px]=\"top\" [style.left.px]=\"left\">\r\n <div class=\"title-bar\">\r\n <div class=\"title-bar-move\" (mousedown)=\"handleTitleMouseMove($event)\">\r\n <div class=\"title-description\" [textContent]=\"'EDIT' | localize\"></div>\r\n </div>\r\n <button mat-icon-button class=\"hide-dialog\" (click)=\"hidePopup()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"edit-popup-wrapper\">\r\n <mat-form-field class=\"full-width\">\r\n <mat-label [textContent]=\"'NAME' | localize\"></mat-label>\r\n <input matInput [(ngModel)]=\"light.name\">\r\n </mat-form-field>\r\n <div class=\"key-value-grid\">\r\n <span class=\"key\" [textContent]=\"'VISIBLE' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.visible\" (ngModelChange)=\"render()\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n\r\n <ng-container *ngIf=\"light.type === 'DirectionalLight'\">\r\n <span class=\"key\" [textContent]=\"'TOP-DOWN-DIRECTIONAL' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.userData.topDownDirectional\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasPosition && !light.userData.topDownDirectional\">\r\n\r\n <span class=\"key\" [textContent]=\"'WALL-OFFSET'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.userData.wallOffset\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.userData.wallOffset\" (ngModelChange)=\"render()\">\r\n\r\n <span class=\"key\" [textContent]=\"'ROTATION-OFFSET'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"359\" step=\"1\" [(ngModel)]=\"light.userData.rotationOffset\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.userData.rotationOffset\" (ngModelChange)=\"render()\">\r\n\r\n <span class=\"key\" [textContent]=\"'Y'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.position.y\" (ngModelChange)=\"render()\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.position.y\" (ngModelChange)=\"render()\">\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('color')\">\r\n <span class=\"key\" [textContent]=\"'COLOR' | localize\"></span>\r\n <input class=\"value\" type=\"color\" matInput [ngModel]=\"lightColor\" (ngModelChange)=\"changeLightColor($event)\">\r\n <span class=\"value-readonly\" [textContent]=\"lightColor\"></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"light.hasOwnProperty('groundColor')\">\r\n <span class=\"key\" [textContent]=\"'GROUND_COLOR' | localize\"></span>\r\n <input class=\"value\" type=\"color\" matInput [ngModel]=\"lightGroundColor\" (ngModelChange)=\"changeGroundLightColor($event)\">\r\n <span class=\"value-readonly\" [textContent]=\"lightGroundColor\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('intensity')\">\r\n <span class=\"key\" [textContent]=\"'INTENSITY' | localize\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.intensity\" (ngModelChange)=\"render()\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.intensity\" (ngModelChange)=\"render()\">\r\n </ng-container>\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('angle')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'ANGLE' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.angle\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.angle\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('power')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'POWER' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.power\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.power\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('decay')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'DECAY' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"4\" step=\"0.001\" [(ngModel)]=\"light.decay\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.decay\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('distance')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'DISTANCE' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.distance\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.distance\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('penumbra')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'PENUMBRA' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"1\" step=\"0.01\" [(ngModel)]=\"light.penumbra\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.penumbra\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('bias')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'BIAS' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.bias\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.bias\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('radius')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'RADIUS' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.radius\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"!light.radius ? 0 : light.radius\" [(ngModel)]=\"light.radius\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('castShadow')\">\r\n <span class=\"key\" [textContent]=\"'CAST_SHADOW' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.castShadow\" (ngModelChange)=\"render()\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('shadow')\">\r\n <span class=\"key\" [textContent]=\"'NEAR' | localize\"></span>\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.shadow.near\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.near\" [(ngModel)]=\"light.shadow.near\" (ngModelChange)=\"render()\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'FAR' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.shadow.far\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.far\" [(ngModel)]=\"light.shadow.far\" (ngModelChange)=\"render()\">-->\r\n <span class=\"key\" [textContent]=\"'SHADOW_MAPSIZE' | localize\"></span>\r\n <mat-select class=\"dropdown-container\" [value]=\"light.shadow.mapSize.x\">\r\n <mat-option *ngFor=\"let mapSize of mapSizes\" [value]=\"mapSize\" (click)=\"updateShadowMapSize(mapSize)\">\r\n {{ mapSize }}\r\n </mat-option>\r\n </mat-select>\r\n <span class=\"value-readonly\"></span>\r\n <span class=\"key\" [textContent]=\"'SHADOW_MAP_RADIUS' | localize\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"5\" step=\"0.1\" [(ngModel)]=\"light.shadow.radius\" (ngModelChange)=\"updateShadowMap()\"></mat-slider>\r\n <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.radius\" [(ngModel)]=\"light.shadow.radius\" (ngModelChange)=\"updateShadowMap()\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasHelper\">\r\n <span class=\"key\" [textContent]=\"'HELPER' | localize\"></span>\r\n <mat-checkbox class=\"value\" [ngModel]=\"lightHelper\" (ngModelChange)=\"showHideHelper($event)\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"button-wrapper\">\r\n <button mat-button class=\"custom-button\" (click)=\"cancel()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">cancel</mat-icon>\r\n {{ 'CANCEL' | localize}}\r\n </button>\r\n <button mat-button class=\"custom-button\" (click)=\"save()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">save</mat-icon>\r\n {{ 'SAVE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host .edit-wrapper{display:flex;flex-direction:row;align-items:center}:host .custom-button{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .edit-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;background:white;min-height:400px;min-width:500px;display:flex;flex-direction:column;z-index:905}:host .edit-popup .title-bar{display:flex;justify-content:space-between;background:#3760a1;color:#fff;padding-left:10px}:host .edit-popup .title-bar .title-bar-move{display:flex;flex-basis:100%;align-items:center}:host .edit-popup .title-bar .title-bar-move .title-description{-webkit-user-select:none;user-select:none}:host .edit-popup .title-bar mat-icon{color:#fff}:host .edit-popup .edit-popup-wrapper{padding:15px;font-size:14px;overflow-y:auto}:host .edit-popup .button-wrapper{display:flex;align-items:center;justify-content:flex-end;height:60px;padding:10px;bottom:0;right:0}:host .edit-popup .button-wrapper .custom-button:not(last-child){margin-right:10px}:host .edit-popup .full-width{width:100%}:host .edit-popup .key-value-grid{display:grid;grid-template-columns:30% 60% 10%;grid-auto-rows:30px}:host .edit-popup .key-value-grid .key,:host .edit-popup .key-value-grid .value,:host .edit-popup .key-value-grid .value-readonly{align-self:center}:host .edit-popup .key-value-grid mat-slider{height:30px}:host .edit-popup .key-value-grid ::ng-deep .mat-slider-horizontal .mat-slider-wrapper{top:50%}:host .dropdown-container{display:flex;flex-direction:column;justify-content:center}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i1__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i7__namespace$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "localize": LocalizePipe }, animations: [
28456
+ EditLightComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditLightComponent, selector: "edit-light", inputs: { light: "light" }, outputs: { okClick: "okClick", cancelClick: "cancelClick" }, host: { listeners: { "document:mousemove": "moveDialog($event)", "document:mouseup": "cancelMoveDialog($event)" } }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialog"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<div class=\"edit-popup\" #dialog @showHideDialog [style.top.px]=\"top\" [style.left.px]=\"left\">\r\n <div class=\"title-bar\">\r\n <div class=\"title-bar-move\" (mousedown)=\"handleTitleMouseMove($event)\">\r\n <div class=\"title-description\" [textContent]=\"'EDIT' | localize\"></div>\r\n </div>\r\n <button mat-icon-button class=\"hide-dialog\" (click)=\"hidePopup()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"edit-popup-wrapper\">\r\n <mat-form-field class=\"full-width\">\r\n <mat-label [textContent]=\"'NAME' | localize\"></mat-label>\r\n <input matInput [(ngModel)]=\"light.name\">\r\n </mat-form-field>\r\n <div class=\"key-value-grid\">\r\n <span class=\"key\" [textContent]=\"'VISIBLE' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.visible\" (ngModelChange)=\"render()\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n\r\n <ng-container *ngIf=\"light.type === 'DirectionalLight'\">\r\n <span class=\"key\" [textContent]=\"'TOP-DOWN-DIRECTIONAL' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.userData.topDownDirectional\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasPosition && !light.userData.topDownDirectional\">\r\n\r\n <span class=\"key\" [textContent]=\"'WALL-OFFSET'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.userData.wallOffset\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.userData.wallOffset\" (ngModelChange)=\"render()\">\r\n\r\n <span class=\"key\" [textContent]=\"'ROTATION-OFFSET'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"359\" step=\"1\" [(ngModel)]=\"light.userData.rotationOffset\" (ngModelChange)=\"this.updateOffsets(light)\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.userData.rotationOffset\" (ngModelChange)=\"render()\">\r\n\r\n <span class=\"key\" [textContent]=\"'Y'\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.position.y\" (ngModelChange)=\"render()\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.position.y\" (ngModelChange)=\"render()\">\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('color')\">\r\n <span class=\"key\" [textContent]=\"'COLOR' | localize\"></span>\r\n <input class=\"value\" type=\"color\" matInput [ngModel]=\"lightColor\" (ngModelChange)=\"changeLightColor($event)\">\r\n <span class=\"value-readonly\" [textContent]=\"lightColor\"></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"light.hasOwnProperty('groundColor')\">\r\n <span class=\"key\" [textContent]=\"'GROUND_COLOR' | localize\"></span>\r\n <input class=\"value\" type=\"color\" matInput [ngModel]=\"lightGroundColor\" (ngModelChange)=\"changeGroundLightColor($event)\">\r\n <span class=\"value-readonly\" [textContent]=\"lightGroundColor\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('intensity')\">\r\n <span class=\"key\" [textContent]=\"'INTENSITY' | localize\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.intensity\" (ngModelChange)=\"render()\"></mat-slider>\r\n <input matInput type=\"number\" [(ngModel)]=\"light.intensity\" (ngModelChange)=\"render()\">\r\n </ng-container>\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('angle')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'ANGLE' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.angle\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.angle\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('power')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'POWER' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.power\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.power\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('decay')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'DECAY' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"4\" step=\"0.001\" [(ngModel)]=\"light.decay\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.decay\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('distance')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'DISTANCE' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.distance\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.distance\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('penumbra')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'PENUMBRA' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"1\" step=\"0.01\" [(ngModel)]=\"light.penumbra\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.penumbra\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('bias')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'BIAS' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.bias\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [(ngModel)]=\"light.bias\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n<!-- <ng-container *ngIf=\"light.hasOwnProperty('radius')\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'RADIUS' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"20\" step=\"0.01\" [(ngModel)]=\"light.radius\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"!light.radius ? 0 : light.radius\" [(ngModel)]=\"light.radius\" (ngModelChange)=\"render()\">-->\r\n<!-- </ng-container>-->\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('castShadow')\">\r\n <span class=\"key\" [textContent]=\"'CAST_SHADOW' | localize\"></span>\r\n <mat-checkbox class=\"value\" [(ngModel)]=\"light.castShadow\" (ngModelChange)=\"render()\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"light.hasOwnProperty('shadow')\">\r\n <span class=\"key\" [textContent]=\"'NEAR' | localize\"></span>\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.shadow.near\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.near\" [(ngModel)]=\"light.shadow.near\" (ngModelChange)=\"render()\">-->\r\n<!-- <span class=\"key\" [textContent]=\"'FAR' | localize\"></span>-->\r\n<!-- <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"50\" step=\"1\" [(ngModel)]=\"light.shadow.far\" (ngModelChange)=\"render()\"></mat-slider>-->\r\n<!-- <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.far\" [(ngModel)]=\"light.shadow.far\" (ngModelChange)=\"render()\">-->\r\n <span class=\"key\" [textContent]=\"'SHADOW_MAPSIZE' | localize\"></span>\r\n <mat-select class=\"dropdown-container\" [value]=\"light.shadow.mapSize.x\">\r\n <mat-option *ngFor=\"let mapSize of mapSizes\" [value]=\"mapSize\" (click)=\"updateShadowMapSize(mapSize)\">\r\n {{ mapSize }}\r\n </mat-option>\r\n </mat-select>\r\n <span class=\"value-readonly\"></span>\r\n <span class=\"key\" [textContent]=\"'SHADOW_MAP_RADIUS' | localize\"></span>\r\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"5\" step=\"0.1\" [(ngModel)]=\"light.shadow.radius\" (ngModelChange)=\"updateShadowMap()\"></mat-slider>\r\n <input matInput type=\"number\" [placeholder]=\"0\" [value]=\"light.shadow.radius\" [(ngModel)]=\"light.shadow.radius\" (ngModelChange)=\"updateShadowMap()\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasHelper\">\r\n <span class=\"key\" [textContent]=\"'HELPER' | localize\"></span>\r\n <mat-checkbox class=\"value\" [ngModel]=\"lightHelper\" (ngModelChange)=\"showHideHelper($event)\"></mat-checkbox>\r\n <span class=\"value-readonly\"></span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"button-wrapper\">\r\n <button mat-button class=\"custom-button\" (click)=\"cancel()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">cancel</mat-icon>\r\n {{ 'CANCEL' | localize}}\r\n </button>\r\n <button mat-button class=\"custom-button\" (click)=\"save()\">\r\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">save</mat-icon>\r\n {{ 'SAVE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [":host .edit-wrapper{display:flex;flex-direction:row;align-items:center}:host .custom-button{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .edit-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;background:white;min-height:400px;min-width:500px;display:flex;flex-direction:column;z-index:905}:host .edit-popup .title-bar{display:flex;justify-content:space-between;background:#3760a1;color:#fff;padding-left:10px}:host .edit-popup .title-bar .title-bar-move{display:flex;flex-basis:100%;align-items:center}:host .edit-popup .title-bar .title-bar-move .title-description{-webkit-user-select:none;user-select:none}:host .edit-popup .title-bar mat-icon{color:#fff}:host .edit-popup .edit-popup-wrapper{padding:15px;font-size:14px;overflow-y:auto}:host .edit-popup .button-wrapper{display:flex;align-items:center;justify-content:flex-end;height:60px;padding:10px;bottom:0;right:0}:host .edit-popup .button-wrapper .custom-button:not(last-child){margin-right:10px}:host .edit-popup .full-width{width:100%}:host .edit-popup .key-value-grid{display:grid;grid-template-columns:30% 60% 10%;grid-auto-rows:30px}:host .edit-popup .key-value-grid .key,:host .edit-popup .key-value-grid .value,:host .edit-popup .key-value-grid .value-readonly{align-self:center}:host .edit-popup .key-value-grid mat-slider{height:30px}:host .edit-popup .key-value-grid ::ng-deep .mat-slider-horizontal .mat-slider-wrapper{top:50%}:host .dropdown-container{display:flex;flex-direction:column;justify-content:center}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i1__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i7__namespace$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "localize": LocalizePipe }, animations: [
28446
28457
  animations.trigger('showHideDialog', [
28447
28458
  animations.state('void', animations.style({ opacity: 0 })),
28448
28459
  animations.state('*', animations.style({ opacity: 1 })),
@@ -28540,7 +28551,7 @@
28540
28551
  return EditLightplanComponent;
28541
28552
  }());
28542
28553
  EditLightplanComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditLightplanComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
28543
- EditLightplanComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditLightplanComponent, selector: "edit-lightplan", inputs: { lightPreset: "lightPreset" }, outputs: { saveClick: "saveClick", cancelClick: "cancelClick" }, ngImport: i0__namespace, template: "\n <div class=\"edit-popup\">\n <div class=\"title-bar\">\n <div class=\"title-description\" [textContent]=\"'EDIT' | localize\"></div>\n </div>\n <div class=\"edit-popup-wrapper\">\n <mat-form-field class=\"full-width\">\n <mat-label [textContent]=\"'NAME' | localize\"></mat-label>\n <input matInput [(ngModel)]=\"lightPresetClone.name\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label [textContent]=\"'GROUP' | localize\"></mat-label>\n <input matInput [(ngModel)]=\"lightPresetClone.group\">\n </mat-form-field>\n <div class=\"key-value-grid\">\n <span class=\"key\" [textContent]=\"'NAVIGATOR_TYPE' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.navigatorType\" (keydown)=\"handleSelectKeyDown($event, 'navigatorType')\">\n <mat-option *ngFor=\"let navigatorType of navigatorTypes | keys\" [value]=\"navigatorType.key\" (click)=\"lightPresetClone.navigatorType = navigatorType.value\">\n {{ navigatorType.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'SHADOW_MAP_TYPE' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.shadowMapType\">\n <mat-option *ngFor=\"let mapType of shadowMapTypes | keys\" [value]=\"mapType.key\" (click)=\"lightPresetClone.shadowMapType = mapType.value\">\n {{ mapType.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'OUTPUT_ENCODING' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.outputEncoding\">\n <mat-option *ngFor=\"let encoding of encodings | keys\" [value]=\"encoding.key\" (click)=\"lightPresetClone.outputEncoding = encoding.value\">\n {{ encoding.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'TONE_MAPPING_EXPOSURE' | localize\"></span>\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"3\" step=\"0.1\" [value]=\"lightPresetClone.toneMappingExposure\" [(ngModel)]=\"lightPresetClone.toneMappingExposure\"></mat-slider>\n <input matInput type=\"number\" [step]=\"0.1\" [placeholder]=\"1\" [value]=\"lightPresetClone.toneMappingExposure\" [(ngModel)]=\"lightPresetClone.toneMappingExposure\">\n\n <span class=\"key\" [textContent]=\"'PHYSICALLY_CORRECT_LIGHTS' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.physicallyCorrectLights\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'DEFAULT' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.default\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'STANDALONE' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.standalone\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n </div>\n </div>\n <div class=\"button-wrapper\">\n <button mat-button class=\"custom-button\" (click)=\"cancel()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">cancel</mat-icon>\n {{ 'CANCEL' | localize}}\n </button>\n <button mat-button class=\"custom-button\" (click)=\"save()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">save</mat-icon>\n {{ 'SAVE' | localize}}\n </button>\n </div>\n </div>\n ", isInline: true, styles: [":host .edit-wrapper{display:flex;flex-direction:row;align-items:center}:host .custom-button{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .edit-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;background:white;display:flex;flex-direction:column;z-index:905}:host .edit-popup .title-bar{display:flex;justify-content:space-between;align-items:center;height:40px;background:#3760a1;color:#fff;padding-left:10px}:host .edit-popup .title-bar .title-bar-move{display:flex;flex-basis:100%;align-items:center}:host .edit-popup .title-bar .title-bar-move .title-description{-webkit-user-select:none;user-select:none}:host .edit-popup .title-bar mat-icon{color:#fff}:host .edit-popup .edit-popup-wrapper{padding:10px;font-size:12px;overflow-y:auto}:host .edit-popup .button-wrapper{display:flex;align-items:center;justify-content:flex-end;height:60px;padding:10px;bottom:0;right:0}:host .edit-popup .button-wrapper .custom-button:not(last-child){margin-right:10px}:host .edit-popup .full-width{width:100%}:host .edit-popup .key-value-grid{display:grid;grid-template-columns:40% 50% 10%;grid-auto-rows:30px}:host .edit-popup .key-value-grid .key,:host .edit-popup .key-value-grid .value,:host .edit-popup .key-value-grid .value-readonly{align-self:center}:host .edit-popup .key-value-grid mat-slider{height:30px}:host .edit-popup .key-value-grid ::ng-deep .mat-slider-horizontal .mat-slider-wrapper{top:50%}:host .dropdown-container{display:flex;flex-direction:column;justify-content:center}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i7__namespace$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i1__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "localize": LocalizePipe, "keys": KeysPipe } });
28554
+ EditLightplanComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditLightplanComponent, selector: "edit-lightplan", inputs: { lightPreset: "lightPreset" }, outputs: { saveClick: "saveClick", cancelClick: "cancelClick" }, ngImport: i0__namespace, template: "\n <div class=\"edit-popup\">\n <div class=\"title-bar\">\n <div class=\"title-description\" [textContent]=\"'EDIT' | localize\"></div>\n </div>\n <div class=\"edit-popup-wrapper\">\n <mat-form-field class=\"full-width\">\n <mat-label [textContent]=\"'NAME' | localize\"></mat-label>\n <input matInput [(ngModel)]=\"lightPresetClone.name\">\n </mat-form-field>\n <mat-form-field class=\"full-width\">\n <mat-label [textContent]=\"'GROUP' | localize\"></mat-label>\n <input matInput [(ngModel)]=\"lightPresetClone.group\">\n </mat-form-field>\n <div class=\"key-value-grid\">\n <span class=\"key\" [textContent]=\"'NAVIGATOR_TYPE' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.navigatorType\" (keydown)=\"handleSelectKeyDown($event, 'navigatorType')\">\n <mat-option *ngFor=\"let navigatorType of navigatorTypes | keys\" [value]=\"navigatorType.key\" (click)=\"lightPresetClone.navigatorType = navigatorType.value\">\n {{ navigatorType.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'SHADOW_MAP_TYPE' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.shadowMapType\">\n <mat-option *ngFor=\"let mapType of shadowMapTypes | keys\" [value]=\"mapType.key\" (click)=\"lightPresetClone.shadowMapType = mapType.value\">\n {{ mapType.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'OUTPUT_ENCODING' | localize\"></span>\n <mat-select class=\"dropdown-container\" [value]=\"lightPresetClone.outputEncoding\">\n <mat-option *ngFor=\"let encoding of encodings | keys\" [value]=\"encoding.key\" (click)=\"lightPresetClone.outputEncoding = encoding.value\">\n {{ encoding.key }}\n </mat-option>\n </mat-select>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'TONE_MAPPING_EXPOSURE' | localize\"></span>\n <mat-slider class=\"value\" thumbLabel min=\"0\" max=\"3\" step=\"0.1\" [value]=\"lightPresetClone.toneMappingExposure\" [(ngModel)]=\"lightPresetClone.toneMappingExposure\"></mat-slider>\n <input matInput type=\"number\" [step]=\"0.1\" [placeholder]=\"1\" [value]=\"lightPresetClone.toneMappingExposure\" [(ngModel)]=\"lightPresetClone.toneMappingExposure\">\n\n <span class=\"key\" [textContent]=\"'PHYSICALLY_CORRECT_LIGHTS' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.physicallyCorrectLights\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'DEFAULT' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.default\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n\n <span class=\"key\" [textContent]=\"'STANDALONE' | localize\"></span>\n <mat-checkbox class=\"value\" [(ngModel)]=\"lightPresetClone.standalone\"></mat-checkbox>\n <span class=\"value-readonly\"></span>\n </div>\n </div>\n <div class=\"button-wrapper\">\n <button mat-button class=\"custom-button\" (click)=\"cancel()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">cancel</mat-icon>\n {{ 'CANCEL' | localize}}\n </button>\n <button mat-button class=\"custom-button\" (click)=\"save()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">save</mat-icon>\n {{ 'SAVE' | localize}}\n </button>\n </div>\n </div>\n ", isInline: true, styles: [":host .edit-wrapper{display:flex;flex-direction:row;align-items:center}:host .custom-button{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .edit-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;background:white;display:flex;flex-direction:column;z-index:905}:host .edit-popup .title-bar{display:flex;justify-content:space-between;align-items:center;height:40px;background:#3760a1;color:#fff;padding-left:10px}:host .edit-popup .title-bar .title-bar-move{display:flex;flex-basis:100%;align-items:center}:host .edit-popup .title-bar .title-bar-move .title-description{-webkit-user-select:none;user-select:none}:host .edit-popup .title-bar mat-icon{color:#fff}:host .edit-popup .edit-popup-wrapper{padding:10px;font-size:12px;overflow-y:auto}:host .edit-popup .button-wrapper{display:flex;align-items:center;justify-content:flex-end;height:60px;padding:10px;bottom:0;right:0}:host .edit-popup .button-wrapper .custom-button:not(last-child){margin-right:10px}:host .edit-popup .full-width{width:100%}:host .edit-popup .key-value-grid{display:grid;grid-template-columns:40% 50% 10%;grid-auto-rows:30px}:host .edit-popup .key-value-grid .key,:host .edit-popup .key-value-grid .value,:host .edit-popup .key-value-grid .value-readonly{align-self:center}:host .edit-popup .key-value-grid mat-slider{height:30px}:host .edit-popup .key-value-grid ::ng-deep .mat-slider-horizontal .mat-slider-wrapper{top:50%}:host .dropdown-container{display:flex;flex-direction:column;justify-content:center}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i7__namespace$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i1__namespace$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8__namespace.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }], pipes: { "localize": LocalizePipe, "keys": KeysPipe } });
28544
28555
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditLightplanComponent, decorators: [{
28545
28556
  type: i0.Component,
28546
28557
  args: [{
@@ -28746,7 +28757,7 @@
28746
28757
  return LightplanComponent;
28747
28758
  }());
28748
28759
  LightplanComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: LightplanComponent, deps: [{ token: LightsService }, { token: ConfigurationService }, { token: DialogService }, { token: HomedecoratorDictionaryService }, { token: i0__namespace.ChangeDetectorRef }, { token: LightPresetsService }, { token: SceneService }], target: i0__namespace.ɵɵFactoryTarget.Component });
28749
- LightplanComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LightplanComponent, selector: "lightplan", host: { listeners: { "document:mousemove": "moveDialog($event)", "document:mouseup": "cancelMoveDialog($event)" }, properties: { "class.show": "this.showDialog", "class.popup-showing": "this.showPlanEditPopup" } }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialog"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"showDialog\">\n <div class=\"lightplan-wrapper\" #dialog @showHideDialog [style.top.px]=\"top\" [style.left.px]=\"left\">\n <div class=\"title-bar\">\n <div class=\"title-bar-move\" (mousedown)=\"handleTitleMouseMove($event)\"></div>\n <button mat-icon-button class=\"hide-dialog\" (click)=\"hideDialog()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n <div class=\"content-wrapper\">\n <div class=\"section\">\n <div class=\"edit-lightplan-wrapper\">\n <h4 [textContent]=\"'LIGHTPLAN' | localize\"></h4>\n <div class=\"edit-button-wrapper\">\n <div matTooltip=\"{{'ADD' | localize}}\">\n <button mat-icon-button (click)=\"newPreset()\">\n <mat-icon class=\"homedecorator-material-icons\">add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"light-preset-selection\">\n <mat-select class=\"dropdown-container\" [ngModel]=\"lightPresetsService.activeLightPreset.name\" panelClass=\"dropdown-container\">\n <mat-select-trigger>\n {{ lightPresetsService.activeLightPreset.name }}\n </mat-select-trigger>\n <div *ngFor=\"let lightPreset of lightPresetsService.loadedLightPresets\">\n <mat-option [value]=\"lightPreset.name\" (click)=\"loadPreset(lightPreset)\">\n {{ lightPreset.name }}\n <mat-icon *ngIf=\"lightPreset.dirty\" class=\"homedecorator-material-icons\" (click)=\"saveAsPreset($event, lightPreset)\">save</mat-icon>\n </mat-option>\n </div>\n </mat-select>\n <div matTooltip=\"{{'EDIT' | localize}}\">\n <button mat-icon-button (click)=\"editPreset(true)\">\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REMOVE' | localize}}\">\n <button mat-icon-button (click)=\"deletePreset()\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'GROUP' | localize\"></h4>\n <span [textContent]=\"lightPresetsService.activeLightPreset.group\"></span>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'NAVIGATOR_TYPE' | localize\"></h4>\n <span [textContent]=\"lightPresetsService.activeLightPreset.navigatorType\"></span>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'RENDER' | localize\"></h4>\n <div class=\"section-row\">\n <span [textContent]=\"'SHADOW_MAP_TYPE' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.shadowMapType\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'OUTPUT_ENCODING' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.outputEncoding\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'TONE_MAPPING_EXPOSURE' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.toneMappingExposure\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'PHYSICALLY_CORRECT_LIGHTS' | localize\"></span>\n <span [textContent]=\"(lightPresetsService.activeLightPreset.physicallyCorrectLights ? 'TRUE' : 'FALSE') | localize\"></span>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'ADD' | localize\"></h4>\n <div class=\"button-row\">\n <button mat-button class=\"add-light\" (click)=\"addLight(light.SpotLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'SPOTLIGHT' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.DirectionalLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'DIRECTIONAL' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.HemisphereLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'HEMISPHERE' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.AmbientLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'AMBIENT' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.PointLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'POINT' | localize }}\n </button>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'EDIT' | localize\"></h4>\n <div class=\"scene-lights\">\n <div class=\"scene-light\" *ngFor=\"let light of getLights(); let index = index\">\n <div class=\"edit-wrapper\">\n <div class=\"light-name\" [textContent]=\"light.name\"></div>\n <div class=\"edit-button-wrapper\">\n <div matTooltip=\"{{'EDIT' | localize}}\">\n <button mat-icon-button (click)=\"editLight(index)\">\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REMOVE' | localize}}\">\n <button mat-icon-button (click)=\"removeLight(index)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"button-wrapper\">\n <div matTooltip=\"{{'SAVE_AS_PRESET' | localize}}\">\n <button mat-icon-button (click)=\"saveAsPreset($event)\">\n <mat-icon class=\"homedecorator-material-icons\">save</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n <edit-light *ngIf=\"showEditPopup\"\n [light]=\"lightToEdit\"\n (okClick)=\"handleSaveLight($event)\"\n (cancelClick)=\"handleCancelLight($event)\"\n ></edit-light>\n <edit-lightplan *ngIf=\"showPlanEditPopup\"\n [lightPreset]=\"lightPresetsService.activeLightPreset\"\n (saveClick)=\"savePreset($event)\"\n (cancelClick)=\"showPlanEditPopup = false\"\n ></edit-lightplan>\n ", isInline: true, styles: [":host.popup-showing .lightplan-wrapper{opacity:.1!important}:host.show{display:flex}:host .lightplan-wrapper{opacity:1;position:fixed;background:white;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;z-index:904}:host .lightplan-wrapper .scene-lights{max-height:300px;overflow-y:auto}:host .title-bar{display:flex;justify-content:flex-end;background:#3760a1}:host .title-bar mat-icon{color:#fff}:host .title-bar .title-bar-move{display:flex;flex-basis:100%}:host .content-wrapper{font-size:14px;padding:15px;background:white;min-height:400px;min-width:500px;display:flex;flex-direction:column;max-height:500px;overflow-y:auto}:host .section:not(last-child){margin-bottom:20px}:host .button-wrapper{display:flex;height:60px;align-items:center;justify-content:flex-end}:host .edit-wrapper{display:flex;flex-direction:row;align-items:center;justify-content:space-between}:host .edit-button-wrapper{display:flex}:host h4{margin:10px 0}:host .edit-lightplan-wrapper{display:flex}:host .light-preset-selection{display:flex}:host .button-row{display:flex}:host .add-light{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .add-light:not(last-child){margin-right:5px}:host .dropdown-container{align-self:center}:host .section-row{display:flex;flex-direction:row;justify-content:space-between}::ng-deep .cdk-overlay-container .mat-select-panel .mat-option-text{display:flex;justify-content:space-between;align-items:center}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: EditLightComponent, selector: "edit-light", inputs: ["light"], outputs: ["okClick", "cancelClick"] }, { type: EditLightplanComponent, selector: "edit-lightplan", inputs: ["lightPreset"], outputs: ["saveClick", "cancelClick"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9__namespace.MatSelectTrigger, selector: "mat-select-trigger" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "localize": LocalizePipe }, animations: [
28760
+ LightplanComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LightplanComponent, selector: "lightplan", host: { listeners: { "document:mousemove": "moveDialog($event)", "document:mouseup": "cancelMoveDialog($event)" }, properties: { "class.show": "this.showDialog", "class.popup-showing": "this.showPlanEditPopup" } }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialog"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"showDialog\">\n <div class=\"lightplan-wrapper\" #dialog @showHideDialog [style.top.px]=\"top\" [style.left.px]=\"left\">\n <div class=\"title-bar\">\n <div class=\"title-bar-move\" (mousedown)=\"handleTitleMouseMove($event)\"></div>\n <button mat-icon-button class=\"hide-dialog\" (click)=\"hideDialog()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n <div class=\"content-wrapper\">\n <div class=\"section\">\n <div class=\"edit-lightplan-wrapper\">\n <h4 [textContent]=\"'LIGHTPLAN' | localize\"></h4>\n <div class=\"edit-button-wrapper\">\n <div matTooltip=\"{{'ADD' | localize}}\">\n <button mat-icon-button (click)=\"newPreset()\">\n <mat-icon class=\"homedecorator-material-icons\">add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"light-preset-selection\">\n <mat-select class=\"dropdown-container\" [ngModel]=\"lightPresetsService.activeLightPreset.name\" panelClass=\"dropdown-container\">\n <mat-select-trigger>\n {{ lightPresetsService.activeLightPreset.name }}\n </mat-select-trigger>\n <div *ngFor=\"let lightPreset of lightPresetsService.loadedLightPresets\">\n <mat-option [value]=\"lightPreset.name\" (click)=\"loadPreset(lightPreset)\">\n {{ lightPreset.name }}\n <mat-icon *ngIf=\"lightPreset.dirty\" class=\"homedecorator-material-icons\" (click)=\"saveAsPreset($event, lightPreset)\">save</mat-icon>\n </mat-option>\n </div>\n </mat-select>\n <div matTooltip=\"{{'EDIT' | localize}}\">\n <button mat-icon-button (click)=\"editPreset(true)\">\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REMOVE' | localize}}\">\n <button mat-icon-button (click)=\"deletePreset()\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'GROUP' | localize\"></h4>\n <span [textContent]=\"lightPresetsService.activeLightPreset.group\"></span>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'NAVIGATOR_TYPE' | localize\"></h4>\n <span [textContent]=\"lightPresetsService.activeLightPreset.navigatorType\"></span>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'RENDER' | localize\"></h4>\n <div class=\"section-row\">\n <span [textContent]=\"'SHADOW_MAP_TYPE' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.shadowMapType\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'OUTPUT_ENCODING' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.outputEncoding\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'TONE_MAPPING_EXPOSURE' | localize\"></span>\n <span [textContent]=\"lightPresetsService.activeLightPreset.toneMappingExposure\"></span>\n </div>\n <div class=\"section-row\">\n <span [textContent]=\"'PHYSICALLY_CORRECT_LIGHTS' | localize\"></span>\n <span [textContent]=\"(lightPresetsService.activeLightPreset.physicallyCorrectLights ? 'TRUE' : 'FALSE') | localize\"></span>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'ADD' | localize\"></h4>\n <div class=\"button-row\">\n <button mat-button class=\"add-light\" (click)=\"addLight(light.SpotLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'SPOTLIGHT' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.DirectionalLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'DIRECTIONAL' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.HemisphereLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'HEMISPHERE' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.AmbientLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'AMBIENT' | localize }}\n </button>\n <button mat-button class=\"add-light\" (click)=\"addLight(light.PointLight)\" fxLayout=\"row\" fxLayoutalign=\"center center\">\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\n {{ 'POINT' | localize }}\n </button>\n </div>\n </div>\n <div class=\"section\">\n <h4 [textContent]=\"'EDIT' | localize\"></h4>\n <div class=\"scene-lights\">\n <div class=\"scene-light\" *ngFor=\"let light of getLights(); let index = index\">\n <div class=\"edit-wrapper\">\n <div class=\"light-name\" [textContent]=\"light.name\"></div>\n <div class=\"edit-button-wrapper\">\n <div matTooltip=\"{{'EDIT' | localize}}\">\n <button mat-icon-button (click)=\"editLight(index)\">\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REMOVE' | localize}}\">\n <button mat-icon-button (click)=\"removeLight(index)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"button-wrapper\">\n <div matTooltip=\"{{'SAVE_AS_PRESET' | localize}}\">\n <button mat-icon-button (click)=\"saveAsPreset($event)\">\n <mat-icon class=\"homedecorator-material-icons\">save</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n <edit-light *ngIf=\"showEditPopup\"\n [light]=\"lightToEdit\"\n (okClick)=\"handleSaveLight($event)\"\n (cancelClick)=\"handleCancelLight($event)\"\n ></edit-light>\n <edit-lightplan *ngIf=\"showPlanEditPopup\"\n [lightPreset]=\"lightPresetsService.activeLightPreset\"\n (saveClick)=\"savePreset($event)\"\n (cancelClick)=\"showPlanEditPopup = false\"\n ></edit-lightplan>\n ", isInline: true, styles: [":host.popup-showing .lightplan-wrapper{opacity:.1!important}:host.show{display:flex}:host .lightplan-wrapper{opacity:1;position:fixed;background:white;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:1px 1px 3px 2px #0101014d;z-index:904}:host .lightplan-wrapper .scene-lights{max-height:300px;overflow-y:auto}:host .title-bar{display:flex;justify-content:flex-end;background:#3760a1}:host .title-bar mat-icon{color:#fff}:host .title-bar .title-bar-move{display:flex;flex-basis:100%}:host .content-wrapper{font-size:14px;padding:15px;background:white;min-height:400px;min-width:500px;display:flex;flex-direction:column;max-height:500px;overflow-y:auto}:host .section:not(last-child){margin-bottom:20px}:host .button-wrapper{display:flex;height:60px;align-items:center;justify-content:flex-end}:host .edit-wrapper{display:flex;flex-direction:row;align-items:center;justify-content:space-between}:host .edit-button-wrapper{display:flex}:host h4{margin:10px 0}:host .edit-lightplan-wrapper{display:flex}:host .light-preset-selection{display:flex}:host .button-row{display:flex}:host .add-light{font-size:11px;border:1px solid #3760a1;border-radius:25px}:host .add-light:not(last-child){margin-right:5px}:host .dropdown-container{align-self:center}:host .section-row{display:flex;flex-direction:row;justify-content:space-between}::ng-deep .cdk-overlay-container .mat-select-panel .mat-option-text{display:flex;justify-content:space-between;align-items:center}\n"], components: [{ type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: EditLightComponent, selector: "edit-light", inputs: ["light"], outputs: ["okClick", "cancelClick"] }, { type: EditLightplanComponent, selector: "edit-lightplan", inputs: ["lightPreset"], outputs: ["saveClick", "cancelClick"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i12__namespace.MatSelectTrigger, selector: "mat-select-trigger" }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "localize": LocalizePipe }, animations: [
28750
28761
  animations.trigger('showHideDialog', [
28751
28762
  animations.state('void', animations.style({ opacity: 0 })),
28752
28763
  animations.state('*', animations.style({ opacity: 1 })),
@@ -28843,7 +28854,7 @@
28843
28854
  this.addRenderOptions(this._sceneService.renderer);
28844
28855
  this.addLights(this._sceneService.scene);
28845
28856
  };
28846
- SceneControlComponent.prototype.addRenderOptions = function (renderer) {
28857
+ SceneControlComponent.prototype.addRenderOptions = function (renderer /*| WebGPURenderer*/) {
28847
28858
  var _this = this;
28848
28859
  var folder = this.gui.addFolder('renderer');
28849
28860
  folder.add(renderer, 'toneMappingExposure', 0, 5).onChange(function () {
@@ -30849,7 +30860,7 @@
30849
30860
  });
30850
30861
  };
30851
30862
  var RenderDialogComponent = /** @class */ (function () {
30852
- function RenderDialogComponent(cameraService, renderService, messageService, _utilsService, _domSanitizer, _settingsService, _newRenderService, _3dmRenderApi) {
30863
+ function RenderDialogComponent(cameraService, renderService, messageService, _utilsService, _domSanitizer, _settingsService, _newRenderService, _3dmRenderApi, _dialog) {
30853
30864
  var _this = this;
30854
30865
  this.cameraService = cameraService;
30855
30866
  this.renderService = renderService;
@@ -30859,6 +30870,7 @@
30859
30870
  this._settingsService = _settingsService;
30860
30871
  this._newRenderService = _newRenderService;
30861
30872
  this._3dmRenderApi = _3dmRenderApi;
30873
+ this._dialog = _dialog;
30862
30874
  this.renderStatus = RenderStatus;
30863
30875
  this.iconName = IconName;
30864
30876
  this.renderModes = RenderModes;
@@ -31057,6 +31069,10 @@
31057
31069
  this.messageService.emit(MessageType.ShowLoadingIndicator, { title: 'Uploading...' });
31058
31070
  this._utilsService.prepRoomForRender(false, renderInput);
31059
31071
  };
31072
+ RenderDialogComponent.prototype.cancelBlenderRender = function () {
31073
+ this.messageService.emit(MessageType.HideLoadingIndicator);
31074
+ this._dialog.closeAll();
31075
+ };
31060
31076
  RenderDialogComponent.prototype.saveImage = function (url) {
31061
31077
  var link = document.createElement('a');
31062
31078
  link.setAttribute('target', '_blank');
@@ -31129,8 +31145,8 @@
31129
31145
  };
31130
31146
  return RenderDialogComponent;
31131
31147
  }());
31132
- RenderDialogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderDialogComponent, deps: [{ token: CameraService }, { token: RenderService }, { token: MessageBusService }, { token: UtilsService }, { token: i1__namespace.DomSanitizer }, { token: HomedecoratorSettingsService }, { token: NewRenderService }, { token: ApiServiceModule }], target: i0__namespace.ɵɵFactoryTarget.Component });
31133
- RenderDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RenderDialogComponent, selector: "rp-render-dialog", viewQueries: [{ propertyName: "renderImageField", first: true, predicate: ["render_image"], descendants: true, static: true }, { propertyName: "imageWidthField", first: true, predicate: ["render_image_width"], descendants: true, static: true }, { propertyName: "imageHeightField", first: true, predicate: ["render_image_height"], descendants: true, static: true }], ngImport: i0__namespace, template: "<ng-container *ngIf=\"renderService.serverData.renderMode === renderModes.RenderIone\">\r\n <div mat-dialog-content>\r\n <div class=\"render-camera-positions\">\r\n <div class=\"render-camera-positions-left\">\r\n <!--\r\n <button mat-raised-button class=\"matrixToggle\" (click)=\"toggleCameraPosition()\">{{ showMatrix ? ('HIDE_MATRIX' | localize) : ('SHOW_MATRIX' | localize) }}</button>\r\n <div class=\"position-matrix-container\" *ngIf=\"showMatrix\">\r\n <mat-grid-list [cols]=\"4\" rowHeight=\"35px\" class=\"camera_position_grid\">\r\n <ng-container *ngFor=\"let item of cameraMatrix; let i = index\">\r\n <mat-grid-tile colspan=\"1\"><b>{{ i }}:</b></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><span>{{item}}</span></mat-grid-tile>\r\n </ng-container>\r\n </mat-grid-list>\r\n </div>\r\n -->\r\n\r\n <h4>{{'LIGHTNING' | localize}}</h4>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-select [(ngModel)]=\"inputLight\">\r\n <mat-option *ngFor=\"let light of renderService.lightnings\" [value]=\"light.id\">{{ light.name }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <h4>{{'SIZE' | localize}}</h4>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-select [(value)]=\"inputSize\">\r\n <mat-option *ngFor=\"let size of renderService.imageSizes\" [value]=\"size.id\">{{ size.name }} | <em>{{ size.width }}x{{ size.height }}</em></mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <p>You selected: {{inputSize}}</p>\r\n <div class=\"position-separator\"></div>\r\n\r\n <h4>{{'NAME' | localize}}</h4>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputName\"\r\n />\r\n </mat-form-field>\r\n\r\n <p>{{ 'ADD_CURRENT_CAMERA_POSITION_TO_RENDER' | localize }}</p>\r\n\r\n <button mat-raised-button class=\"add_camera_position\" color=\"primary\" title=\"{{'ADD_CURRENT_POSITION' | localize}}\" (click)=\"addRenderCustom()\">\r\n {{'ADD_CURRENT_POSITION' | localize}}\r\n </button>\r\n\r\n <ng-container *ngIf=\"this.galleryInfo.items === 0\">\r\n\r\n <div class=\"position-separator\"></div>\r\n\r\n <p>{{ 'ADD_GALLERY_POSITIONS_TO_RENDER_INFO' | localize }}</p>\r\n\r\n <button mat-raised-button class=\"add_gallery_positions\" color=\"primary\" title=\"{{'ADD_GALLERY_POSITIONS' | localize}}\" (click)=\"addRenderGallery()\">\r\n {{'ADD_GALLERY_POSITIONS' | localize}}\r\n </button>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"render-camera-positions-right\">\r\n <mat-grid-list [cols]=\"16\" rowHeight=\"35px\" class=\"camera_positions_grid\">\r\n <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-head\"></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'AVAILABLE' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"5\"><div class=\"grid-tile-head\">{{'NAME' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'LIGHT' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'SIZE' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\"></mat-grid-tile>\r\n </mat-grid-list>\r\n <mat-grid-list [cols]=\"16\" rowHeight=\"55px\" class=\"camera_positions_grid\">\r\n <ng-container *ngFor=\"let render of renderService.renders; index as i\">\r\n <ng-container *ngIf=\"render.cameraPosition.type === 'custom' && render.productHash === renderService.currentProductHash\" class=\"grid_head\">\r\n <mat-grid-tile colspan=\"1\">\r\n <div class=\"grid-tile-content no-padding\" [hidden]=\"render.status === renderStatus.IsWaiting || render.status === renderStatus.IsRunning\">\r\n <input type=\"checkbox\" [(ngModel)]=\"inputReRenderChecked[i]\" [value]=\"render.id\" (change)=\"renderOnChange()\">\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\">\r\n <div class=\"grid-tile-content grid-tile-image\">\r\n <div class=\"image-container\">\r\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"render.url === '' && render.status !== renderStatus.IsRunning\">camera_alt</mat-icon>\r\n <a href=\"{{ render.url }}\" target=\"_blank\" download *ngIf=\"render.url !== '' && render.status !== renderStatus.IsRunning\">\r\n <img src=\"{{ render.url }}\">\r\n </a>\r\n <mat-spinner *ngIf=\"render.status === renderStatus.IsRunning\" [diameter]=\"25\" [mode]=\"'determinate'\" [value]=\"render.progress > 10 ? render.progress : 10\"></mat-spinner>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"5\"><div class=\"grid-tile-content\">{{ render.cameraPosition.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-content\">{{ render.lightning.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-content\">{{ render.imageSize.name }} | <em>{{ render.imageSize.width }}x{{ render.imageSize.height }}</em></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-content no-padding right\"><button (click)=\"removeCameraPosition(render)\" class=\"remove-btn\" [hidden]=\"render.status === renderStatus.IsWaiting || render.status === renderStatus.IsRunning\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div></mat-grid-tile>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"this.galleryInfo.items > 0\">\r\n <ng-container>\r\n <mat-grid-tile colspan=\"1\" class=\"grid_head\">\r\n <div class=\"grid-tile-content no-padding\" [hidden]=\"galleryInfo.renderInfo.status === renderStatus.IsWaiting || galleryInfo.renderInfo.status === renderStatus.IsRunning\">\r\n <input type=\"checkbox\" (change)=\"galleryRenderOnChange($event)\">\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"8\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ 'GALLERY_IMAGES_FROM' | localize }} {{ galleryInfo.items }} {{ 'CAMERA_POSITIONS' | localize }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ galleryInfo.renderInfo.lightning.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ galleryInfo.renderInfo.imageSize.name }} | <em>{{ galleryInfo.renderInfo.imageSize.width }}x{{ galleryInfo.renderInfo.imageSize.height }}</em></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\" class=\"grid_head\"><div class=\"grid-tile-content no-padding right\"><button (click)=\"removeCameraPosition('gallery')\" class=\"remove-btn\" [hidden]=\"galleryInfo.renderInfo.status === renderStatus.IsWaiting || galleryInfo.renderInfo.status === renderStatus.IsRunning\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div></mat-grid-tile>\r\n </ng-container>\r\n <ng-container *ngFor=\"let render of renderService.renders; index as i\">\r\n <ng-container *ngIf=\"render.cameraPosition.type === 'gallery' && render.productHash === renderService.currentProductHash\">\r\n <mat-grid-tile colspan=\"2\">\r\n <div class=\"grid-tile-content\" [hidden]=\"true\"><input type=\"checkbox\" [(ngModel)]=\"inputReRenderChecked[i]\" [value]=\"render.id\" (change)=\"renderOnChange()\"></div>\r\n <div class=\"grid-tile-content small-padding grid-tile-image\">\r\n <div class=\"image-container\">\r\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"render.url === '' && render.status !== renderStatus.IsRunning\">camera_alt</mat-icon>\r\n <a href=\"{{ render.url }}\" target=\"_blank\" download *ngIf=\"render.url !== '' && render.status !== renderStatus.IsRunning\">\r\n <img src=\"{{ render.url }}\">\r\n </a>\r\n <mat-spinner *ngIf=\"render.status === renderStatus.IsRunning\" [diameter]=\"25\" [mode]=\"'determinate'\" [value]=\"render.progress > 10 ? render.progress : 10\"></mat-spinner>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-grid-list>\r\n </div>\r\n </div>\r\n\r\n <button mat-raised-button class=\"render_btn\" (click)=\"addRendersToQueue()\" color=\"primary\" title=\"{{'CREATE_RENDERS' | localize}}\" [disabled]=\"!canRender || renderService.renderQueue.length > 0\">\r\n {{'CREATE_RENDERS' | localize}}\r\n </button>\r\n\r\n </div>\r\n\r\n <button mat-button mat-dialog-close class=\"close_btn\">X</button>\r\n\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n\r\n <div mat-dialog-content>\r\n <div class=\"render-camera-positions\">\r\n <div class=\"render-camera-positions-left large\">\r\n <div *ngIf=\"imageRenderSource != ''\" class=\"render-image-content\">\r\n <img [src]=\"imageRenderSource\" #render_image>\r\n <div class=\"loader\" [ngClass]=\"(renderProgress == 100 ? 'ready' : '')\">\r\n <span class=\"loader_progress\" [style.width.%]=\"(renderProgress ? renderProgress : 0)\">\r\n <span>{{ (renderProgress ? renderProgress : 0) }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"imageRenderSource == ''\" class=\"image_spacer\">\r\n <mat-icon class=\"homedecorator-material-icons\">camera_alt</mat-icon>\r\n </div>\r\n <div class=\"position-separator\"></div>\r\n <mat-form-field class=\"face-select-form\" *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n <mat-label>{{\"IMAGE_SIZE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"renderService.selectedImageSize\">\r\n <mat-option *ngFor=\"let size of renderService.imageSizes\" [value]=\"size.id\">{{ size.name }} {{ size.width }}x{{ size.height }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"renderService.blenderRenderService\">\r\n <mat-form-field\r\n class=\"face-select-form\"\r\n *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n <mat-label>{{ \"ENVIRONMENT\" | localize }}</mat-label>\r\n <mat-select [(ngModel)]=\"renderService.selectedRenderScene\">\r\n <mat-option\r\n *ngFor=\"let scene of renderService.renderScenes\"\r\n [value]=\"scene.sceneAssetId\">{{ scene.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n\r\n\r\n<!-- <mat-form-field class=\"face-select-form\" *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">-->\r\n<!-- <mat-label>{{\"ENVIRONMENT\" | localize}}</mat-label>-->\r\n<!-- <mat-select [(ngModel)]=\"renderService.selectedEnvironment\">-->\r\n<!-- <mat-option *ngFor=\"let renderEnvironment of renderService.renderEnvironments\" [value]=\"renderEnvironment.id\">{{ renderEnvironment.name }}</mat-option>-->\r\n<!-- </mat-select>-->\r\n<!-- </mat-form-field>-->\r\n\r\n <button *ngIf=\"!renderService.blenderRenderService\" mat-raised-button (click)=\"startRenderingRoom()\" color=\"primary\" title=\"{{'MAKE_A_PICTURE' | localize}}\" [disabled]=\"disablePictureButton\">\r\n {{'MAKE_A_PICTURE' | localize}}\r\n </button>\r\n\r\n <button *ngIf=\"renderService.blenderRenderService\" mat-raised-button (click)=\"createBlenderRender()\" color=\"primary\" title=\"{{'MAKE_A_PICTURE' | localize}}\" [disabled]=\"disablePictureButton\">\r\n {{'MAKE_A_PICTURE' | localize}}\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n<!-- <div class=\"render-camera-positions-right small\">-->\r\n<!-- <mat-grid-list [cols]=\"10\" rowHeight=\"35px\" class=\"camera_positions_grid\">-->\r\n<!-- <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'IMAGE' | localize}}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"6\"><div class=\"grid-tile-head\">{{'NAME' | localize}}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-head\"></div></mat-grid-tile>-->\r\n<!-- </mat-grid-list>-->\r\n<!-- <mat-grid-list [cols]=\"11\" rowHeight=\"55px\" class=\"camera_positions_grid\">-->\r\n<!-- <ng-container *ngFor=\"let image of renderedImages; let index = index\">-->\r\n<!-- <mat-grid-tile colspan=\"3\">-->\r\n<!-- <div class=\"grid-tile-content grid-tile-image\">-->\r\n<!-- <div class=\"image-container\">-->\r\n<!-- <a href=\"{{ image }}\" target=\"_blank\" download>-->\r\n<!-- <img src=\"{{ image }}\">-->\r\n<!-- </a>-->\r\n<!-- </div>-->\r\n<!-- </div>-->\r\n<!-- </mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"6\"><div class=\"grid-tile-content\">{{ 'IMAGE' | localize }}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"2\">-->\r\n<!-- <div class=\"grid-tile-content\">-->\r\n<!-- <button mat-icon-button (click)=\"saveImage(image)\" title=\"{{'DOWNLOAD_IMAGE' | localize}}\">-->\r\n<!-- <mat-icon class=\"homedecorator-material-icons\">get_app</mat-icon>-->\r\n<!-- </button>-->\r\n<!-- </div>-->\r\n<!-- <div class=\"grid-tile-content no-padding right\"><button (click)=\"removeRender(image, index)\" class=\"remove-btn\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div>-->\r\n<!-- </mat-grid-tile>-->\r\n<!-- </ng-container>-->\r\n<!-- </mat-grid-list>-->\r\n<!-- </div>-->\r\n </div>\r\n\r\n <button mat-button mat-dialog-close class=\"close_btn\">X</button>\r\n\r\n </div>\r\n\r\n</ng-container>\r\n", styles: ["::ng-deep .render-dialog-content .mat-dialog-container{margin:0;padding:0}::ng-deep .render-dialog-content .mat-dialog-container .mat-dialog-content{margin:0;padding:0}:host{display:block;max-width:100%;position:relative;box-sizing:border-box}:host *{box-sizing:border-box}:host [hidden]{display:none!important}:host .close_btn{position:absolute;top:0;right:0;font-size:30px;padding:0;width:50px;min-width:0px;line-height:45px}:host .render_btn{position:absolute;left:65%;margin:0 0 0 -83px;bottom:15px}:host .render-camera-positions{display:flex;font-size:14px}:host .render-camera-positions .render-camera-positions-left{min-width:300px;background:#e4edf4;padding:15px;text-align:center}:host .render-camera-positions .render-camera-positions-left h3{text-align:left}:host .render-camera-positions .render-camera-positions-left h4{text-align:left;margin:0}:host .render-camera-positions .render-camera-positions-left .position-separator{width:100%;font-size:0;height:1px;background:#fff;margin:15px 0}:host .render-camera-positions .render-camera-positions-left p{font-size:12px;text-align:center;line-height:170%}:host .render-camera-positions .render-camera-positions-left button{font-size:12px;line-height:32px}:host .render-camera-positions .render-camera-positions-left button.matrixToggle{margin:0 0 5px}:host .render-camera-positions .render-camera-positions-left mat-grid-list{text-align:left}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile .mat-figure{justify-content:left}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile b{text-align:left;width:100%}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile span{display:inline-block;text-align:right;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 10px;background:#fff;border-radius:5px;line-height:30px;font-size:90%}:host .render-camera-positions .render-camera-positions-left .mat-form-field{width:100%}:host .render-camera-positions .render-camera-positions-left mat-slide-toggle{float:right}:host .render-camera-positions .render-camera-positions-left .render-image-content{width:100%;align-self:start;position:relative}:host .render-camera-positions .render-camera-positions-left .render-image-content img{width:100%;max-width:100%;align-self:start;border-radius:5px}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader{align-self:start;width:calc(100% - 20px);font-size:0;line-height:0;height:6px;position:absolute;left:10px;bottom:15px;z-index:2;text-align:left}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader.ready .loader_progress{background:#74B77F}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader.ready .loader_progress span{color:#74b77f;border-color:#74b77f}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader .loader_progress{vertical-align:top;display:inline-block;background:#3760a1;height:6px;position:relative;transition:.2s ease-in-out;-moz-transition:.2s ease-in-out;-webkit-transition:.2s ease-in-out;border-radius:5px;min-width:25px}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader .loader_progress span{float:left;width:25px;height:16px;line-height:16px;border-radius:4px;text-align:center;position:absolute;top:-5px;font-size:9px;font-weight:bold;background:#fff;right:0px}:host .render-camera-positions .render-camera-positions-left .image_spacer{position:relative;background:#fafafa;width:100%;height:200px;border-radius:5px}:host .render-camera-positions .render-camera-positions-left .image_spacer .mat-icon{position:absolute;margin:auto;left:0;top:0;right:0;bottom:0;width:60px;height:60px;font-size:60px}:host .render-camera-positions .render-camera-positions-right{width:70%;padding:15px 15px 66px;font-size:12px}:host .render-camera-positions .render-camera-positions-right.large{width:60%}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile{border-bottom:1px solid #e4edf4}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile.grid_head{border-color:#fff}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-head{width:100%;text-align:left;font-weight:bold;padding:0 15px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content{width:100%;text-align:left;padding:0 15px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.no-padding{padding:0}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.small-padding{padding:0 2px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.right{text-align:right}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container{width:100%;height:46px;border:1px solid #e4edf4;border-radius:5px;vertical-align:top;text-align:center;display:table;font-size:0}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container a{display:table-cell;vertical-align:middle}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container a img{max-width:100%;max-height:46px;display:inline-block}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container .mat-icon{height:46px;line-height:46px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container .mat-spinner{margin:11px 0 0;display:inline-block}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn{border:none;background:transparent;color:#0003;cursor:pointer}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn:hover{color:red}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn .mat-icon{height:18px;width:18px;font-size:18px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3__namespace$2.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { type: i3__namespace$2.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i15__namespace.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1__namespace$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }], pipes: { "localize": LocalizePipe }, animations: [
31148
+ RenderDialogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderDialogComponent, deps: [{ token: CameraService }, { token: RenderService }, { token: MessageBusService }, { token: UtilsService }, { token: i1__namespace.DomSanitizer }, { token: HomedecoratorSettingsService }, { token: NewRenderService }, { token: ApiServiceModule }, { token: i1__namespace$1.MatDialog }], target: i0__namespace.ɵɵFactoryTarget.Component });
31149
+ RenderDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RenderDialogComponent, selector: "rp-render-dialog", viewQueries: [{ propertyName: "renderImageField", first: true, predicate: ["render_image"], descendants: true, static: true }, { propertyName: "imageWidthField", first: true, predicate: ["render_image_width"], descendants: true, static: true }, { propertyName: "imageHeightField", first: true, predicate: ["render_image_height"], descendants: true, static: true }], ngImport: i0__namespace, template: "<ng-container *ngIf=\"renderService.serverData.renderMode === renderModes.RenderIone\">\r\n <div mat-dialog-content>\r\n <div class=\"render-camera-positions\">\r\n <div class=\"render-camera-positions-left\">\r\n <!--\r\n <button mat-raised-button class=\"matrixToggle\" (click)=\"toggleCameraPosition()\">{{ showMatrix ? ('HIDE_MATRIX' | localize) : ('SHOW_MATRIX' | localize) }}</button>\r\n <div class=\"position-matrix-container\" *ngIf=\"showMatrix\">\r\n <mat-grid-list [cols]=\"4\" rowHeight=\"35px\" class=\"camera_position_grid\">\r\n <ng-container *ngFor=\"let item of cameraMatrix; let i = index\">\r\n <mat-grid-tile colspan=\"1\"><b>{{ i }}:</b></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><span>{{item}}</span></mat-grid-tile>\r\n </ng-container>\r\n </mat-grid-list>\r\n </div>\r\n -->\r\n\r\n <h4>{{'LIGHTNING' | localize}}</h4>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-select [(ngModel)]=\"inputLight\">\r\n <mat-option *ngFor=\"let light of renderService.lightnings\" [value]=\"light.id\">{{ light.name }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <h4>{{'SIZE' | localize}}</h4>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-select [(value)]=\"inputSize\">\r\n <mat-option *ngFor=\"let size of renderService.imageSizes\" [value]=\"size.id\">{{ size.name }} | <em>{{ size.width }}x{{ size.height }}</em></mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <p>You selected: {{inputSize}}</p>\r\n <div class=\"position-separator\"></div>\r\n\r\n <h4>{{'NAME' | localize}}</h4>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [(ngModel)]=\"inputName\"\r\n />\r\n </mat-form-field>\r\n\r\n <p>{{ 'ADD_CURRENT_CAMERA_POSITION_TO_RENDER' | localize }}</p>\r\n\r\n <button mat-raised-button class=\"add_camera_position\" color=\"primary\" title=\"{{'ADD_CURRENT_POSITION' | localize}}\" (click)=\"addRenderCustom()\">\r\n {{'ADD_CURRENT_POSITION' | localize}}\r\n </button>\r\n\r\n <ng-container *ngIf=\"this.galleryInfo.items === 0\">\r\n\r\n <div class=\"position-separator\"></div>\r\n\r\n <p>{{ 'ADD_GALLERY_POSITIONS_TO_RENDER_INFO' | localize }}</p>\r\n\r\n <button mat-raised-button class=\"add_gallery_positions\" color=\"primary\" title=\"{{'ADD_GALLERY_POSITIONS' | localize}}\" (click)=\"addRenderGallery()\">\r\n {{'ADD_GALLERY_POSITIONS' | localize}}\r\n </button>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"render-camera-positions-right\">\r\n <mat-grid-list [cols]=\"16\" rowHeight=\"35px\" class=\"camera_positions_grid\">\r\n <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-head\"></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'AVAILABLE' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"5\"><div class=\"grid-tile-head\">{{'NAME' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'LIGHT' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'SIZE' | localize}}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\"></mat-grid-tile>\r\n </mat-grid-list>\r\n <mat-grid-list [cols]=\"16\" rowHeight=\"55px\" class=\"camera_positions_grid\">\r\n <ng-container *ngFor=\"let render of renderService.renders; index as i\">\r\n <ng-container *ngIf=\"render.cameraPosition.type === 'custom' && render.productHash === renderService.currentProductHash\" class=\"grid_head\">\r\n <mat-grid-tile colspan=\"1\">\r\n <div class=\"grid-tile-content no-padding\" [hidden]=\"render.status === renderStatus.IsWaiting || render.status === renderStatus.IsRunning\">\r\n <input type=\"checkbox\" [(ngModel)]=\"inputReRenderChecked[i]\" [value]=\"render.id\" (change)=\"renderOnChange()\">\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\">\r\n <div class=\"grid-tile-content grid-tile-image\">\r\n <div class=\"image-container\">\r\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"render.url === '' && render.status !== renderStatus.IsRunning\">camera_alt</mat-icon>\r\n <a href=\"{{ render.url }}\" target=\"_blank\" download *ngIf=\"render.url !== '' && render.status !== renderStatus.IsRunning\">\r\n <img src=\"{{ render.url }}\">\r\n </a>\r\n <mat-spinner *ngIf=\"render.status === renderStatus.IsRunning\" [diameter]=\"25\" [mode]=\"'determinate'\" [value]=\"render.progress > 10 ? render.progress : 10\"></mat-spinner>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"5\"><div class=\"grid-tile-content\">{{ render.cameraPosition.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-content\">{{ render.lightning.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-content\">{{ render.imageSize.name }} | <em>{{ render.imageSize.width }}x{{ render.imageSize.height }}</em></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-content no-padding right\"><button (click)=\"removeCameraPosition(render)\" class=\"remove-btn\" [hidden]=\"render.status === renderStatus.IsWaiting || render.status === renderStatus.IsRunning\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div></mat-grid-tile>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"this.galleryInfo.items > 0\">\r\n <ng-container>\r\n <mat-grid-tile colspan=\"1\" class=\"grid_head\">\r\n <div class=\"grid-tile-content no-padding\" [hidden]=\"galleryInfo.renderInfo.status === renderStatus.IsWaiting || galleryInfo.renderInfo.status === renderStatus.IsRunning\">\r\n <input type=\"checkbox\" (change)=\"galleryRenderOnChange($event)\">\r\n </div>\r\n </mat-grid-tile>\r\n <mat-grid-tile colspan=\"8\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ 'GALLERY_IMAGES_FROM' | localize }} {{ galleryInfo.items }} {{ 'CAMERA_POSITIONS' | localize }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ galleryInfo.renderInfo.lightning.name }}</div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"3\" class=\"grid_head\"><div class=\"grid-tile-content\">{{ galleryInfo.renderInfo.imageSize.name }} | <em>{{ galleryInfo.renderInfo.imageSize.width }}x{{ galleryInfo.renderInfo.imageSize.height }}</em></div></mat-grid-tile>\r\n <mat-grid-tile colspan=\"1\" class=\"grid_head\"><div class=\"grid-tile-content no-padding right\"><button (click)=\"removeCameraPosition('gallery')\" class=\"remove-btn\" [hidden]=\"galleryInfo.renderInfo.status === renderStatus.IsWaiting || galleryInfo.renderInfo.status === renderStatus.IsRunning\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div></mat-grid-tile>\r\n </ng-container>\r\n <ng-container *ngFor=\"let render of renderService.renders; index as i\">\r\n <ng-container *ngIf=\"render.cameraPosition.type === 'gallery' && render.productHash === renderService.currentProductHash\">\r\n <mat-grid-tile colspan=\"2\">\r\n <div class=\"grid-tile-content\" [hidden]=\"true\"><input type=\"checkbox\" [(ngModel)]=\"inputReRenderChecked[i]\" [value]=\"render.id\" (change)=\"renderOnChange()\"></div>\r\n <div class=\"grid-tile-content small-padding grid-tile-image\">\r\n <div class=\"image-container\">\r\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"render.url === '' && render.status !== renderStatus.IsRunning\">camera_alt</mat-icon>\r\n <a href=\"{{ render.url }}\" target=\"_blank\" download *ngIf=\"render.url !== '' && render.status !== renderStatus.IsRunning\">\r\n <img src=\"{{ render.url }}\">\r\n </a>\r\n <mat-spinner *ngIf=\"render.status === renderStatus.IsRunning\" [diameter]=\"25\" [mode]=\"'determinate'\" [value]=\"render.progress > 10 ? render.progress : 10\"></mat-spinner>\r\n </div>\r\n </div>\r\n </mat-grid-tile>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </mat-grid-list>\r\n </div>\r\n </div>\r\n\r\n <button mat-raised-button class=\"render_btn\" (click)=\"addRendersToQueue()\" color=\"primary\" title=\"{{'CREATE_RENDERS' | localize}}\" [disabled]=\"!canRender || renderService.renderQueue.length > 0\">\r\n {{'CREATE_RENDERS' | localize}}\r\n </button>\r\n\r\n </div>\r\n\r\n <button mat-button mat-dialog-close class=\"close_btn\">X</button>\r\n\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n\r\n <div mat-dialog-content>\r\n <div class=\"render-camera-positions\">\r\n <div class=\"render-camera-positions-left large\">\r\n <div *ngIf=\"imageRenderSource != ''\" class=\"render-image-content\">\r\n <img [src]=\"imageRenderSource\" #render_image>\r\n <div class=\"loader\" [ngClass]=\"(renderProgress == 100 ? 'ready' : '')\">\r\n <span class=\"loader_progress\" [style.width.%]=\"(renderProgress ? renderProgress : 0)\">\r\n <span>{{ (renderProgress ? renderProgress : 0) }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"imageRenderSource == ''\" class=\"image_spacer\">\r\n <mat-icon class=\"homedecorator-material-icons\">camera_alt</mat-icon>\r\n </div>\r\n <div class=\"position-separator\"></div>\r\n <mat-form-field class=\"face-select-form\" *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n <mat-label>{{\"IMAGE_SIZE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"renderService.selectedImageSize\">\r\n <mat-option *ngFor=\"let size of renderService.imageSizes\" [value]=\"size.id\">{{ size.name }} {{ size.width }}x{{ size.height }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div *ngIf=\"renderService.blenderRenderService\">\r\n <mat-form-field\r\n class=\"face-select-form\"\r\n *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">\r\n <mat-label>{{ \"ENVIRONMENT\" | localize }}</mat-label>\r\n <mat-select [(ngModel)]=\"renderService.selectedRenderScene\">\r\n <mat-option\r\n *ngFor=\"let scene of renderService.renderScenes\"\r\n [value]=\"scene.sceneAssetId\">{{ scene.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n\r\n\r\n<!-- <mat-form-field class=\"face-select-form\" *ngIf=\"renderService.serverData.renderMode === renderModes.RenderRoom\">-->\r\n<!-- <mat-label>{{\"ENVIRONMENT\" | localize}}</mat-label>-->\r\n<!-- <mat-select [(ngModel)]=\"renderService.selectedEnvironment\">-->\r\n<!-- <mat-option *ngFor=\"let renderEnvironment of renderService.renderEnvironments\" [value]=\"renderEnvironment.id\">{{ renderEnvironment.name }}</mat-option>-->\r\n<!-- </mat-select>-->\r\n<!-- </mat-form-field>-->\r\n\r\n <button *ngIf=\"!renderService.blenderRenderService\" mat-raised-button (click)=\"startRenderingRoom()\" color=\"primary\" title=\"{{'MAKE_A_PICTURE' | localize}}\" [disabled]=\"disablePictureButton\">\r\n {{'MAKE_A_PICTURE' | localize}}\r\n </button>\r\n\r\n <button *ngIf=\"renderService.blenderRenderService\" mat-raised-button (click)=\"createBlenderRender()\" color=\"primary\" title=\"{{'MAKE_A_PICTURE' | localize}}\" [disabled]=\"disablePictureButton\">\r\n {{'MAKE_A_PICTURE' | localize}}\r\n </button>\r\n\r\n <button *ngIf=\"renderService.blenderRenderService\" mat-raised-button (click)=\"cancelBlenderRender()\" color=\"accent\" title=\"{{'CANCEL' | localize}}\" [disabled]=\"disablePictureButton\">\r\n {{'CANCEL' | localize}}\r\n </button>\r\n\r\n </div>\r\n\r\n\r\n<!-- <div class=\"render-camera-positions-right small\">-->\r\n<!-- <mat-grid-list [cols]=\"10\" rowHeight=\"35px\" class=\"camera_positions_grid\">-->\r\n<!-- <mat-grid-tile colspan=\"3\"><div class=\"grid-tile-head\">{{'IMAGE' | localize}}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"6\"><div class=\"grid-tile-head\">{{'NAME' | localize}}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"1\"><div class=\"grid-tile-head\"></div></mat-grid-tile>-->\r\n<!-- </mat-grid-list>-->\r\n<!-- <mat-grid-list [cols]=\"11\" rowHeight=\"55px\" class=\"camera_positions_grid\">-->\r\n<!-- <ng-container *ngFor=\"let image of renderedImages; let index = index\">-->\r\n<!-- <mat-grid-tile colspan=\"3\">-->\r\n<!-- <div class=\"grid-tile-content grid-tile-image\">-->\r\n<!-- <div class=\"image-container\">-->\r\n<!-- <a href=\"{{ image }}\" target=\"_blank\" download>-->\r\n<!-- <img src=\"{{ image }}\">-->\r\n<!-- </a>-->\r\n<!-- </div>-->\r\n<!-- </div>-->\r\n<!-- </mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"6\"><div class=\"grid-tile-content\">{{ 'IMAGE' | localize }}</div></mat-grid-tile>-->\r\n<!-- <mat-grid-tile colspan=\"2\">-->\r\n<!-- <div class=\"grid-tile-content\">-->\r\n<!-- <button mat-icon-button (click)=\"saveImage(image)\" title=\"{{'DOWNLOAD_IMAGE' | localize}}\">-->\r\n<!-- <mat-icon class=\"homedecorator-material-icons\">get_app</mat-icon>-->\r\n<!-- </button>-->\r\n<!-- </div>-->\r\n<!-- <div class=\"grid-tile-content no-padding right\"><button (click)=\"removeRender(image, index)\" class=\"remove-btn\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></button></div>-->\r\n<!-- </mat-grid-tile>-->\r\n<!-- </ng-container>-->\r\n<!-- </mat-grid-list>-->\r\n<!-- </div>-->\r\n </div>\r\n\r\n <button mat-button mat-dialog-close class=\"close_btn\">X</button>\r\n\r\n </div>\r\n\r\n</ng-container>\r\n", styles: ["::ng-deep .render-dialog-content .mat-dialog-container{margin:0;padding:0}::ng-deep .render-dialog-content .mat-dialog-container .mat-dialog-content{margin:0;padding:0}:host{display:block;max-width:100%;position:relative;box-sizing:border-box}:host *{box-sizing:border-box}:host [hidden]{display:none!important}:host .close_btn{position:absolute;top:0;right:0;font-size:30px;padding:0;width:50px;min-width:0px;line-height:45px}:host .render_btn{position:absolute;left:65%;margin:0 0 0 -83px;bottom:15px}:host .render-camera-positions{display:flex;font-size:14px}:host .render-camera-positions .render-camera-positions-left{min-width:300px;background:#e4edf4;padding:15px;text-align:center}:host .render-camera-positions .render-camera-positions-left h3{text-align:left}:host .render-camera-positions .render-camera-positions-left h4{text-align:left;margin:0}:host .render-camera-positions .render-camera-positions-left .position-separator{width:100%;font-size:0;height:1px;background:#fff;margin:15px 0}:host .render-camera-positions .render-camera-positions-left p{font-size:12px;text-align:center;line-height:170%}:host .render-camera-positions .render-camera-positions-left button{font-size:12px;line-height:32px}:host .render-camera-positions .render-camera-positions-left button.matrixToggle{margin:0 0 5px}:host .render-camera-positions .render-camera-positions-left mat-grid-list{text-align:left}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile .mat-figure{justify-content:left}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile b{text-align:left;width:100%}:host .render-camera-positions .render-camera-positions-left mat-grid-list mat-grid-tile span{display:inline-block;text-align:right;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 10px;background:#fff;border-radius:5px;line-height:30px;font-size:90%}:host .render-camera-positions .render-camera-positions-left .mat-form-field{width:100%}:host .render-camera-positions .render-camera-positions-left mat-slide-toggle{float:right}:host .render-camera-positions .render-camera-positions-left .render-image-content{width:100%;align-self:start;position:relative}:host .render-camera-positions .render-camera-positions-left .render-image-content img{width:100%;max-width:100%;align-self:start;border-radius:5px}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader{align-self:start;width:calc(100% - 20px);font-size:0;line-height:0;height:6px;position:absolute;left:10px;bottom:15px;z-index:2;text-align:left}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader.ready .loader_progress{background:#74B77F}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader.ready .loader_progress span{color:#74b77f;border-color:#74b77f}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader .loader_progress{vertical-align:top;display:inline-block;background:#3760a1;height:6px;position:relative;transition:.2s ease-in-out;-moz-transition:.2s ease-in-out;-webkit-transition:.2s ease-in-out;border-radius:5px;min-width:25px}:host .render-camera-positions .render-camera-positions-left .render-image-content .loader .loader_progress span{float:left;width:25px;height:16px;line-height:16px;border-radius:4px;text-align:center;position:absolute;top:-5px;font-size:9px;font-weight:bold;background:#fff;right:0px}:host .render-camera-positions .render-camera-positions-left .image_spacer{position:relative;background:#fafafa;width:100%;height:200px;border-radius:5px}:host .render-camera-positions .render-camera-positions-left .image_spacer .mat-icon{position:absolute;margin:auto;left:0;top:0;right:0;bottom:0;width:60px;height:60px;font-size:60px}:host .render-camera-positions .render-camera-positions-right{width:70%;padding:15px 15px 66px;font-size:12px}:host .render-camera-positions .render-camera-positions-right.large{width:60%}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile{border-bottom:1px solid #e4edf4}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile.grid_head{border-color:#fff}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-head{width:100%;text-align:left;font-weight:bold;padding:0 15px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content{width:100%;text-align:left;padding:0 15px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.no-padding{padding:0}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.small-padding{padding:0 2px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.right{text-align:right}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container{width:100%;height:46px;border:1px solid #e4edf4;border-radius:5px;vertical-align:top;text-align:center;display:table;font-size:0}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container a{display:table-cell;vertical-align:middle}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container a img{max-width:100%;max-height:46px;display:inline-block}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container .mat-icon{height:46px;line-height:46px}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content.grid-tile-image .image-container .mat-spinner{margin:11px 0 0;display:inline-block}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn{border:none;background:transparent;color:#0003;cursor:pointer}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn:hover{color:red}:host .render-camera-positions .render-camera-positions-right .mat-grid-tile .grid-tile-content .remove-btn .mat-icon{height:18px;width:18px;font-size:18px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3__namespace$2.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { type: i3__namespace$2.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i16__namespace.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8__namespace.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1__namespace$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }], pipes: { "localize": LocalizePipe }, animations: [
31134
31150
  animations.trigger('slideInOut', [
31135
31151
  animations.state('1', animations.style({ 'max-height': '*' })),
31136
31152
  animations.state('0', animations.style({ 'max-height': '0px' })),
@@ -31151,7 +31167,7 @@
31151
31167
  templateUrl: './render-dialog.component.html',
31152
31168
  styleUrls: ['./render-dialog.component.scss']
31153
31169
  }]
31154
- }], ctorParameters: function () { return [{ type: CameraService }, { type: RenderService }, { type: MessageBusService }, { type: UtilsService }, { type: i1__namespace.DomSanitizer }, { type: HomedecoratorSettingsService }, { type: NewRenderService }, { type: ApiServiceModule }]; }, propDecorators: { renderImageField: [{
31170
+ }], ctorParameters: function () { return [{ type: CameraService }, { type: RenderService }, { type: MessageBusService }, { type: UtilsService }, { type: i1__namespace.DomSanitizer }, { type: HomedecoratorSettingsService }, { type: NewRenderService }, { type: ApiServiceModule }, { type: i1__namespace$1.MatDialog }]; }, propDecorators: { renderImageField: [{
31155
31171
  type: i0.ViewChild,
31156
31172
  args: ['render_image', { static: true }]
31157
31173
  }], imageWidthField: [{
@@ -32832,7 +32848,7 @@
32832
32848
  return LiteSelectorComponent;
32833
32849
  }());
32834
32850
  LiteSelectorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: LiteSelectorComponent, deps: [{ token: HomedecoratorConnectorService }, { token: BuildFurnitureService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
32835
- LiteSelectorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LiteSelectorComponent, selector: "rp-lite-selector", inputs: { showAnswers: "showAnswers", show: "show", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", metadata: "metadata", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: i0.TemplateRef, static: true }], ngImport: i0__namespace, template: "<ng-container *ngIf=\"show\">\r\n <rp-selections-summary *ngIf=\"showSelections && iOne.selectionsToDisplay.length > 0\" @showSelections [@.disabled]=\"!animateSlideout\"\r\n class=\"rp-selections-summary\"\r\n [showLabel]=\"showLabel\"\r\n [canClose]=\"canClose\"\r\n [customDimensions]=\"customDimensions\"\r\n [answersTemplate]=\"inlineAnswers ? templateAnswers : undefined\"\r\n [answerToShowFromSelectionText]=\"answerToShowFromSelectionText\"\r\n [selections]=\"iOne.selectionsToDisplay\"\r\n (selectSelection)=\"onSelectionsSummarySelectSelection($event)\"\r\n (closeClick)=\"onCloseLiteSelectorButtonClick()\"\r\n >\r\n </rp-selections-summary>\r\n <ng-container *ngIf=\"!inlineAnswers\" [ngTemplateOutlet]=\"templateAnswers\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #templateAnswers>\r\n <rp-answers-slideout\r\n class=\"rp-answers-slideout\"\r\n [metadata]=\"metadata\"\r\n [isShown]=\"showAnswers && buildFurnitureService.activeAnswers.length > 0\"\r\n [showTitle]=\"!inlineAnswers\"\r\n [showFilter]=\"!inlineAnswers\"\r\n [useSlideout]=\"!inlineAnswers\"\r\n [customDimensions]=\"customDimensions\"\r\n [question]=\"buildFurnitureService.activeQuestion\"\r\n [answers]=\"buildFurnitureService.activeAnswers\"\r\n (answerChosen)=\"onAnswersSlideoutAnswerChosen($event)\"\r\n ></rp-answers-slideout>\r\n</ng-template>\r\n", styles: [":host.floating ::ng-deep rp-selections-summary{position:absolute;right:0;max-height:calc(100vh - 120px)}:host:not(.custom-dimensions).floating ::ng-deep rp-selections-summary{top:64px;max-height:calc(100vh - 184px)}\n"], components: [{ type: SelectionsSummaryComponent, selector: "rp-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection"] }, { type: AnswersSlideoutComponent, selector: "rp-answers-slideout", inputs: ["isShown", "question", "showTitle", "showFilter", "metadata", "answers", "useSlideout", "customDimensions"], outputs: ["isShownChange", "answerChosen"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
32851
+ LiteSelectorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: LiteSelectorComponent, selector: "rp-lite-selector", inputs: { showAnswers: "showAnswers", show: "show", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", metadata: "metadata", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: i0.TemplateRef, static: true }], ngImport: i0__namespace, template: "<ng-container *ngIf=\"show\">\r\n <rp-selections-summary *ngIf=\"showSelections && iOne.selectionsToDisplay.length > 0\" @showSelections [@.disabled]=\"!animateSlideout\"\r\n class=\"rp-selections-summary\"\r\n [showLabel]=\"showLabel\"\r\n [canClose]=\"canClose\"\r\n [customDimensions]=\"customDimensions\"\r\n [answersTemplate]=\"inlineAnswers ? templateAnswers : undefined\"\r\n [answerToShowFromSelectionText]=\"answerToShowFromSelectionText\"\r\n [selections]=\"iOne.selectionsToDisplay\"\r\n (selectSelection)=\"onSelectionsSummarySelectSelection($event)\"\r\n (closeClick)=\"onCloseLiteSelectorButtonClick()\"\r\n >\r\n </rp-selections-summary>\r\n <ng-container *ngIf=\"!inlineAnswers\" [ngTemplateOutlet]=\"templateAnswers\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #templateAnswers>\r\n <rp-answers-slideout\r\n class=\"rp-answers-slideout\"\r\n [metadata]=\"metadata\"\r\n [isShown]=\"showAnswers && iOne.activeAnswers.length > 0\"\r\n [showTitle]=\"!inlineAnswers\"\r\n [showFilter]=\"!inlineAnswers\"\r\n [useSlideout]=\"!inlineAnswers\"\r\n [customDimensions]=\"customDimensions\"\r\n [question]=\"iOne.activeQuestion\"\r\n [answers]=\"iOne.activeAnswers\"\r\n (answerChosen)=\"onAnswersSlideoutAnswerChosen($event)\"\r\n ></rp-answers-slideout>\r\n</ng-template>\r\n", styles: [":host.floating ::ng-deep rp-selections-summary{position:absolute;right:0;max-height:calc(100vh - 120px)}:host:not(.custom-dimensions).floating ::ng-deep rp-selections-summary{top:64px;max-height:calc(100vh - 184px)}\n"], components: [{ type: SelectionsSummaryComponent, selector: "rp-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection"] }, { type: AnswersSlideoutComponent, selector: "rp-answers-slideout", inputs: ["isShown", "question", "showTitle", "showFilter", "metadata", "answers", "useSlideout", "customDimensions"], outputs: ["isShownChange", "answerChosen"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
32836
32852
  animations.trigger('showSelections', [
32837
32853
  animations.state('void', animations.style({ 'transform': 'translateX(100%)', opacity: 0 })),
32838
32854
  animations.state('*', animations.style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -33595,7 +33611,7 @@
33595
33611
  });
33596
33612
  };
33597
33613
  var FloorplannerComponent = /** @class */ (function () {
33598
- function FloorplannerComponent(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService) {
33614
+ function FloorplannerComponent(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService, _roomService) {
33599
33615
  var _a, _b;
33600
33616
  var _this = this;
33601
33617
  this._floorplanService = _floorplanService;
@@ -33603,6 +33619,7 @@
33603
33619
  this._configurationService = _configurationService;
33604
33620
  this._dimensionService = _dimensionService;
33605
33621
  this._viewModeService = _viewModeService;
33622
+ this._roomService = _roomService;
33606
33623
  this.selectedWallChange = new rxjs.Subject();
33607
33624
  this._viewScaleMin = 50;
33608
33625
  this._viewScaleMax = 300;
@@ -33732,7 +33749,11 @@
33732
33749
  }
33733
33750
  };
33734
33751
  FloorplannerComponent.prototype.showStartMessage = function () {
33735
- this._diagramBackground.src = '';
33752
+ if (this._diagramBackground) {
33753
+ this._diagramBackground.src = '';
33754
+ }
33755
+ this._floorplanService.reset();
33756
+ this._draw();
33736
33757
  this.showStartingMessages = true;
33737
33758
  };
33738
33759
  FloorplannerComponent.prototype.setMode = function (mode) {
@@ -34203,7 +34224,13 @@
34203
34224
  this.setSelectedMode(value);
34204
34225
  };
34205
34226
  FloorplannerComponent.prototype.setDiagramSettings = function (input) {
34227
+ this.reset();
34228
+ this._resetOrigin();
34229
+ this._viewScale = 100;
34230
+ this._updateCmPerPixel();
34231
+ this._draw();
34206
34232
  this._floorplanService.reset();
34233
+ this._roomService.resetAllRooms();
34207
34234
  this._diagramBackground = input.background;
34208
34235
  this._diagramBackgroundHeight = input.backgroundHeight;
34209
34236
  this._diagramBackgroundWidth = input.backgroundWidth;
@@ -34889,8 +34916,8 @@
34889
34916
  };
34890
34917
  return FloorplannerComponent;
34891
34918
  }());
34892
- FloorplannerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorplannerComponent, deps: [{ token: FloorplanService }, { token: MessageBusService }, { token: ConfigurationService }, { token: DimensioningService }, { token: ViewModeService }], target: i0__namespace.ɵɵFactoryTarget.Component });
34893
- FloorplannerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FloorplannerComponent, selector: "floor-planner", outputs: { selectedWallChange: "selectedWallChange" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)", "document:keyup": "handleDocKeyUp($event)", "window:resize": "resizeGrid()" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["floorplannerCanvas"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<canvas #floorplannerCanvas\r\n (contextmenu)=\"handleContextMenu($event)\"\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n (touchstart)=\"handleTouchStart($event)\"\r\n (touchmove)=\"handleTouchMove($event)\"\r\n (touchend)=\"handleTouchUp($event)\"\r\n (touchcancel)=\"handleTouchEnd($event)\"\r\n></canvas>\r\n\r\n<wall-length-input></wall-length-input>\r\n\r\n<div class=\"controls-top\">\r\n <mat-button-toggle-group class=\"mode-toggle\"\r\n (change)=\"changeFloorplannerMode($event.value)\"\r\n [value]=\"selectedMode\"\r\n >\r\n <mat-button-toggle [value]=\"floorplannerMode.Draw\" [matTooltip]=\"'DRAW_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"floorplannerMode.Move\" [matTooltip]=\"'SELECT_AND_MOVE_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\" svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Drawing\" (click)=\"changeFloorplannerMode(floorplannerMode.Draw)\">\r\n {{ 'CLICK_HERE_TO_EXIT_DRAWING_MODE_OR_PRESS_THE_ESC_KEY' | localize }}\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Draw && this.showStartingMessages\">\r\n {{ 'TAB_ANYWHERE_TO_START' | localize }}\r\n</div>\r\n", styles: [":host{display:flex;height:100%;width:100%;background:#fff}:host.hidden{visibility:hidden}canvas{width:inherit;height:inherit}.controls-top{pointer-events:none;position:absolute;top:80px;width:100%;display:flex;align-items:center;justify-content:center}.controls-top>*{pointer-events:all;background:#fff;margin:0 3px}.hint{position:absolute;bottom:20px;left:50%;margin-left:-200px;padding:10px 20px;background:#74B77F;border:1px solid #cccccc;border-radius:3px;text-align:center}.mode-toggle>.mat-button-toggle-checked{color:#fff;background-color:#3760a1}\n"], components: [{ type: WallLengthInputComponent, selector: "wall-length-input" }, { type: i7__namespace$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7__namespace$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
34919
+ FloorplannerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorplannerComponent, deps: [{ token: FloorplanService }, { token: MessageBusService }, { token: ConfigurationService }, { token: DimensioningService }, { token: ViewModeService }, { token: RoomService }], target: i0__namespace.ɵɵFactoryTarget.Component });
34920
+ FloorplannerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FloorplannerComponent, selector: "floor-planner", outputs: { selectedWallChange: "selectedWallChange" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)", "document:keyup": "handleDocKeyUp($event)", "window:resize": "resizeGrid()" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["floorplannerCanvas"], descendants: true, read: i0.ElementRef, static: true }], ngImport: i0__namespace, template: "<canvas #floorplannerCanvas\r\n (contextmenu)=\"handleContextMenu($event)\"\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n (touchstart)=\"handleTouchStart($event)\"\r\n (touchmove)=\"handleTouchMove($event)\"\r\n (touchend)=\"handleTouchUp($event)\"\r\n (touchcancel)=\"handleTouchEnd($event)\"\r\n></canvas>\r\n\r\n<wall-length-input></wall-length-input>\r\n\r\n<div class=\"controls-top\">\r\n <mat-button-toggle-group class=\"mode-toggle\"\r\n (change)=\"changeFloorplannerMode($event.value)\"\r\n [value]=\"selectedMode\"\r\n >\r\n <mat-button-toggle [value]=\"floorplannerMode.Draw\" [matTooltip]=\"'DRAW_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\">edit</mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"floorplannerMode.Move\" [matTooltip]=\"'SELECT_AND_MOVE_WALLS' | localize\">\r\n <mat-icon class=\"homedecorator-material-icons\" svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Drawing\" (click)=\"changeFloorplannerMode(floorplannerMode.Draw)\">\r\n {{ 'CLICK_HERE_TO_EXIT_DRAWING_MODE_OR_PRESS_THE_ESC_KEY' | localize }}\r\n</div>\r\n\r\n<div class=\"hint\" *ngIf=\"mode === floorplannerMode.Draw && this.showStartingMessages\">\r\n {{ 'TAB_ANYWHERE_TO_START' | localize }}\r\n</div>\r\n", styles: [":host{display:flex;height:100%;width:100%;background:#fff}:host.hidden{visibility:hidden}canvas{width:inherit;height:inherit}.controls-top{pointer-events:none;position:absolute;top:80px;width:100%;display:flex;align-items:center;justify-content:center}.controls-top>*{pointer-events:all;background:#fff;margin:0 3px}.hint{position:absolute;bottom:20px;left:50%;margin-left:-200px;padding:10px 20px;background:#74B77F;border:1px solid #cccccc;border-radius:3px;text-align:center}.mode-toggle>.mat-button-toggle-checked{color:#fff;background-color:#3760a1}\n"], components: [{ type: WallLengthInputComponent, selector: "wall-length-input" }, { type: i8__namespace$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8__namespace$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
34894
34921
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorplannerComponent, decorators: [{
34895
34922
  type: i0.Component,
34896
34923
  args: [{
@@ -34898,7 +34925,7 @@
34898
34925
  templateUrl: './floorplanner.component.html',
34899
34926
  styleUrls: ['./floorplanner.component.scss']
34900
34927
  }]
34901
- }], ctorParameters: function () { return [{ type: FloorplanService }, { type: MessageBusService }, { type: ConfigurationService }, { type: DimensioningService }, { type: ViewModeService }]; }, propDecorators: { canvasElement: [{
34928
+ }], ctorParameters: function () { return [{ type: FloorplanService }, { type: MessageBusService }, { type: ConfigurationService }, { type: DimensioningService }, { type: ViewModeService }, { type: RoomService }]; }, propDecorators: { canvasElement: [{
34902
34929
  type: i0.ViewChild,
34903
34930
  args: ['floorplannerCanvas', { read: i0.ElementRef, static: true }]
34904
34931
  }], selectedWallChange: [{
@@ -35940,9 +35967,10 @@
35940
35967
  TextureEditorOptions[TextureEditorOptions["Both"] = 3] = "Both";
35941
35968
  })(TextureEditorOptions || (TextureEditorOptions = {}));
35942
35969
  var TextureEditorComponent = /** @class */ (function () {
35943
- function TextureEditorComponent(_settingsService) {
35970
+ function TextureEditorComponent(messageService, _settingsService) {
35944
35971
  var _a;
35945
35972
  var _this = this;
35973
+ this.messageService = messageService;
35946
35974
  this._settingsService = _settingsService;
35947
35975
  this.textureType = TextureType;
35948
35976
  this.dragNDropEnforced = false;
@@ -35984,6 +36012,7 @@
35984
36012
  };
35985
36013
  };
35986
36014
  // this.dampSetTexture = this.createDampener(this.setTexture);
36015
+ this._subs.push(this.messageService.subscribe(MessageType.ChangeTexture, function (texture) { return _this.setNewTexture(texture); }));
35987
36016
  }
35988
36017
  TextureEditorComponent.prototype.ngOnInit = function () {
35989
36018
  var _this = this;
@@ -36005,7 +36034,9 @@
36005
36034
  TextureEditorComponent.prototype.ngOnDestroy = function () {
36006
36035
  var _this = this;
36007
36036
  // this.dampSetTexture.release();
36008
- this._subs.forEach(function (s) { s.unsubscribe(); });
36037
+ this._subs.forEach(function (s) {
36038
+ s.unsubscribe();
36039
+ });
36009
36040
  this.canvas.nativeElement.removeEventListener('mousedown', function () { return _this.onMouseDown(); });
36010
36041
  this.canvas.nativeElement.removeEventListener('mouseup', function () { return _this.onMouseUp(); });
36011
36042
  this.canvas.nativeElement.removeEventListener('mousemove', function (e) { return _this.onMouseMove(e); });
@@ -36029,6 +36060,9 @@
36029
36060
  this.initializeTexture();
36030
36061
  }
36031
36062
  };
36063
+ TextureEditorComponent.prototype.setNewTexture = function (texture) {
36064
+ this.plainTexture = texture;
36065
+ };
36032
36066
  TextureEditorComponent.prototype.handleRemoveTextureClick = function (event) {
36033
36067
  this.imageHasBeenResized = false;
36034
36068
  this.removeTexture.emit(event);
@@ -36242,7 +36276,12 @@
36242
36276
  return __generator(this, function (_a) {
36243
36277
  switch (_a.label) {
36244
36278
  case 0:
36245
- texture = this.texturePlane ? this.texturePlane.getTexture() : this.plainTexture;
36279
+ if (this.texturePlane && this.texturePlane.getTexture() !== undefined) {
36280
+ texture = this.texturePlane.getTexture();
36281
+ }
36282
+ else {
36283
+ texture = this.plainTexture;
36284
+ }
36246
36285
  if (!texture) return [3 /*break*/, 2];
36247
36286
  return [4 /*yield*/, this._loadTextureData(texture, false)];
36248
36287
  case 1:
@@ -36600,8 +36639,8 @@
36600
36639
  };
36601
36640
  return TextureEditorComponent;
36602
36641
  }());
36603
- TextureEditorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TextureEditorComponent, deps: [{ token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
36604
- TextureEditorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextureEditorComponent, selector: "rp-texture-editor", inputs: { width: "width", height: "height", texturePlane: "texturePlane", plainTexture: "plainTexture", changedTexture: "changedTexture", options: "options", dragNDropEnforced: "dragNDropEnforced" }, outputs: { setTexture: "setTexture", removeTexture: "removeTexture" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<rp-file-drop\r\n [showDragDrop]=\"((!changedTexture || texture?.type === textureType.Basic) && options !== Options.None) || dragNDropEnforced\"\r\n [showRemove]=\"changedTexture\"\r\n (fileContentChanged)=\"onPhotoDataChange($event)\"\r\n (removeClick)=\"handleRemoveTextureClick($event)\"\r\n>\r\n</rp-file-drop>\r\n\r\n<div class=\"resize-message-wrapper\" *ngIf=\"imageHasBeenResized\">\r\n <span class=\"resize-message\" [textContent]=\"'IMAGE_RESIZED' | localize\"></span>\r\n</div>\r\n\r\n<div class=\"picture-editor\" [hidden]=\"!texture || !changedTexture || dragNDropEnforced\">\r\n <div\r\n class=\"picture-editor-canvas\"\r\n [hidden]=\"options === Options.None || (texture?.type === textureType.Basic)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <div\r\n class=\"canvas-wrapper\"\r\n fxLayout=\"column inline\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <canvas [hidden]=\"texture && texture.stretch\" #canvas></canvas>\r\n <mat-button-toggle-group\r\n *ngIf=\"options === Options.Both\"\r\n (change)=\"tiledChanged($event.value === 'texture')\"\r\n [value]=\"tiled ? 'texture' : 'stretch'\"\r\n >\r\n <mat-button-toggle\r\n value=\"stretch\"\r\n title=\"{{'PICTURE' | localize}}\"\r\n [checked]=\"!tiled\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">photo_size_select_large</mat-icon>\r\n {{'SKIN_FULL_WALL' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n <mat-button-toggle\r\n value=\"texture\"\r\n title=\"{{'TILE' | localize}}\"\r\n [checked]=\"tiled\"\r\n >\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">texture</mat-icon>\r\n {{'CREATE_TEXTURE' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"texture?.type === textureType.CustomPattern\r\n || ((texture?.type === textureType.Basic || texture?.type === textureType.PBR)\r\n && options === Options.None)\r\n\"\r\n >\r\n <rp-slider-input\r\n title=\"{{'TILE_ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"tileRotationDeg\"\r\n (onChange)=\"onTileRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'TILE_SIZE' | localize}}\"\r\n [min]=\"tileSizeMin\"\r\n [max]=\"tileSizeMax\"\r\n step=\"0.1\"\r\n [value]=\"tileSize\"\r\n (onChange)=\"onTileSizeChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"!isBasic(texture) && !isPBR(texture)\">\r\n <rp-slider-input\r\n title=\"{{'ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"textureRotationDeg\"\r\n (onChange)=\"onRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'ZOOM' | localize}}\"\r\n [min]=\"-zoomSliderMax\"\r\n [max]=\"zoomSliderMax\"\r\n step=\"0.1\"\r\n [value]=\"textureScaleSlider\"\r\n (onChange)=\"onScaleChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <!--\r\n <footer class=\"picture-editor-footer\">\r\n <button *ngIf=\"texture?.type !== TextureType.Basic || options === Options.None\"\r\n mat-stroked-button color=\"warn\"\r\n (click)=\"resetTexture()\"\r\n >\r\n {{ 'Remove' | localize }}\r\n </button>\r\n </footer>\r\n -->\r\n</div>\r\n", styles: ["rp-texture-editor{display:block;width:100%}.picture-editor-footer{margin-bottom:16px}.picture-editor-canvas{margin-top:.75em;margin-bottom:1.5em;text-align:center}.canvas-wrapper{position:relative}.canvas-wrapper mat-button-toggle-group{text-align:center;width:320px}.canvas-wrapper mat-button-toggle{flex-basis:50%;padding:4px 0}.resize-message-wrapper{margin:10px 3px 3px;text-align:-webkit-center}.resize-message-wrapper .resize-message{color:red;font-style:italic;font-weight:bold;font-size:.9em}\n"], components: [{ type: FileDropComponent, selector: "rp-file-drop", inputs: ["showDragDrop", "showRemove"], outputs: ["fileContentChanged", "removeClick"] }, { type: i7__namespace$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: SliderInputComponent, selector: "rp-slider-input", inputs: ["title", "min", "max", "step", "value"], outputs: ["onChange"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i7__namespace$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], pipes: { "localize": LocalizePipe } });
36642
+ TextureEditorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TextureEditorComponent, deps: [{ token: MessageBusService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
36643
+ TextureEditorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TextureEditorComponent, selector: "rp-texture-editor", inputs: { width: "width", height: "height", texturePlane: "texturePlane", plainTexture: "plainTexture", changedTexture: "changedTexture", options: "options", dragNDropEnforced: "dragNDropEnforced" }, outputs: { setTexture: "setTexture", removeTexture: "removeTexture" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }, { propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<rp-file-drop\r\n [showDragDrop]=\"((!changedTexture || texture?.type === textureType.Basic) && options !== Options.None) || dragNDropEnforced\"\r\n [showRemove]=\"changedTexture\"\r\n (fileContentChanged)=\"onPhotoDataChange($event)\"\r\n (removeClick)=\"handleRemoveTextureClick($event)\"\r\n>\r\n</rp-file-drop>\r\n\r\n<div class=\"resize-message-wrapper\" *ngIf=\"imageHasBeenResized\">\r\n <span class=\"resize-message\" [textContent]=\"'IMAGE_RESIZED' | localize\"></span>\r\n</div>\r\n\r\n<div class=\"picture-editor\" [hidden]=\"!texture || !changedTexture || dragNDropEnforced\">\r\n <div\r\n class=\"picture-editor-canvas\"\r\n [hidden]=\"options === Options.None || (texture?.type === textureType.Basic)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <div\r\n class=\"canvas-wrapper\"\r\n fxLayout=\"column inline\"\r\n fxLayoutAlign=\"center center\"\r\n >\r\n <canvas [hidden]=\"texture && texture.stretch\" #canvas></canvas>\r\n <mat-button-toggle-group\r\n *ngIf=\"options === Options.Both\"\r\n (change)=\"tiledChanged($event.value === 'texture')\"\r\n [value]=\"tiled ? 'texture' : 'stretch'\"\r\n >\r\n <mat-button-toggle\r\n value=\"stretch\"\r\n title=\"{{'PICTURE' | localize}}\"\r\n [checked]=\"!tiled\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">photo_size_select_large</mat-icon>\r\n {{'SKIN_FULL_WALL' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n <mat-button-toggle\r\n value=\"texture\"\r\n title=\"{{'TILE' | localize}}\"\r\n [checked]=\"tiled\"\r\n >\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon class=\"homedecorator-material-icons\">texture</mat-icon>\r\n {{'CREATE_TEXTURE' | localize}}\r\n </div>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"texture?.type === textureType.CustomPattern\r\n || ((texture?.type === textureType.Basic || texture?.type === textureType.PBR)\r\n && options === Options.None)\r\n\"\r\n >\r\n <rp-slider-input\r\n title=\"{{'TILE_ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"tileRotationDeg\"\r\n (onChange)=\"onTileRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'TILE_SIZE' | localize}}\"\r\n [min]=\"tileSizeMin\"\r\n [max]=\"tileSizeMax\"\r\n step=\"0.1\"\r\n [value]=\"tileSize\"\r\n (onChange)=\"onTileSizeChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <div class=\"sliders\" *ngIf=\"!isBasic(texture) && !isPBR(texture)\">\r\n <rp-slider-input\r\n title=\"{{'ROTATION' | localize}}\"\r\n min=\"-180\"\r\n max=\"180\"\r\n step=\"1\"\r\n [value]=\"textureRotationDeg\"\r\n (onChange)=\"onRotationChange($event)\">\r\n </rp-slider-input>\r\n <rp-slider-input\r\n title=\"{{'ZOOM' | localize}}\"\r\n [min]=\"-zoomSliderMax\"\r\n [max]=\"zoomSliderMax\"\r\n step=\"0.1\"\r\n [value]=\"textureScaleSlider\"\r\n (onChange)=\"onScaleChange($event)\">\r\n </rp-slider-input>\r\n </div>\r\n\r\n <!--\r\n <footer class=\"picture-editor-footer\">\r\n <button *ngIf=\"texture?.type !== TextureType.Basic || options === Options.None\"\r\n mat-stroked-button color=\"warn\"\r\n (click)=\"resetTexture()\"\r\n >\r\n {{ 'Remove' | localize }}\r\n </button>\r\n </footer>\r\n -->\r\n</div>\r\n", styles: ["rp-texture-editor{display:block;width:100%}.picture-editor-footer{margin-bottom:16px}.picture-editor-canvas{margin-top:.75em;margin-bottom:1.5em;text-align:center}.canvas-wrapper{position:relative}.canvas-wrapper mat-button-toggle-group{text-align:center;width:320px}.canvas-wrapper mat-button-toggle{flex-basis:50%;padding:4px 0}.resize-message-wrapper{margin:10px 3px 3px;text-align:-webkit-center}.resize-message-wrapper .resize-message{color:red;font-style:italic;font-weight:bold;font-size:.9em}\n"], components: [{ type: FileDropComponent, selector: "rp-file-drop", inputs: ["showDragDrop", "showRemove"], outputs: ["fileContentChanged", "removeClick"] }, { type: i8__namespace$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: SliderInputComponent, selector: "rp-slider-input", inputs: ["title", "min", "max", "step", "value"], outputs: ["onChange"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i8__namespace$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], pipes: { "localize": LocalizePipe } });
36605
36644
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TextureEditorComponent, decorators: [{
36606
36645
  type: i0.Component,
36607
36646
  args: [{
@@ -36609,7 +36648,7 @@
36609
36648
  templateUrl: './texture-editor.component.html',
36610
36649
  styleUrls: ['./texture-editor.component.scss']
36611
36650
  }]
36612
- }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
36651
+ }], ctorParameters: function () { return [{ type: MessageBusService }, { type: HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
36613
36652
  type: i0.ViewChild,
36614
36653
  args: ['fileInput', { static: true }]
36615
36654
  }], canvas: [{
@@ -37473,7 +37512,7 @@
37473
37512
  return CustomShapeCreatorComponent;
37474
37513
  }());
37475
37514
  CustomShapeCreatorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomShapeCreatorComponent, deps: [{ token: HudService }, { token: SceneService }, { token: RoomService }, { token: ItemService }, { token: SceneEventService }, { token: MessageBusService }], target: i0__namespace.ɵɵFactoryTarget.Component });
37476
- CustomShapeCreatorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: { shape: "shape" }, ngImport: i0__namespace, template: "<section>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"auto center\">\r\n <mat-form-field fxFlex=\"grow\">\r\n <input matInput #nameInputRef\r\n type=\"text\"\r\n placeholder=\"{{'SHAPES_NAME' | localize}}\"\r\n [value]=\"name\"\r\n >\r\n </mat-form-field>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"setName(nameInputRef.value)\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">check</mat-icon>\r\n </button>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"nameInputRef.value = name\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">cancel</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"switcher\">\r\n <h2 class=\"mat-body-2\">{{isFloorType ? ('FLOOR' | localize) : ('WALL' | localize)}}</h2>\r\n <mat-slide-toggle\r\n [checked]=\"isFloorType\"\r\n (change)=\"toggleItemType()\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <h3 class=\"mat-subheading-2\"> {{ 'MEASUREMENTS' | localize}}</h3>\r\n <div>\r\n <rp-dimension-input\r\n title=\"{{'HEIGHT' | localize}}\"\r\n [sourceValue]=\"height * scaleFactor\"\r\n [minValue]=\"10\"\r\n (dimensionChanged)=\"setHeight($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'WIDTH' | localize}}\"\r\n [sourceValue]=\"width * scaleFactor\"\r\n [minValue]=\"10\"\r\n (dimensionChanged)=\"setWidth($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'DEPTH' | localize}}\"\r\n [sourceValue]=\"depth * scaleFactor\"\r\n [minValue]=\"10\"\r\n (dimensionChanged)=\"setDepth($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'ELEVATION' | localize}}\"\r\n [sourceValue]=\"elevation * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setElevation($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n </div>\r\n\r\n <div>\r\n <h3 class=\"mat-subheading-2\"> {{ 'TEXTURES' | localize}}</h3>\r\n <mat-form-field id=\"face-select-form\">\r\n <mat-label>{{\"SELECT_FACE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedFace\">\r\n <mat-option [value]=\"faceRef.All\">{{ 'ALL' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Top\">{{ 'TOP' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Bottom\">{{ 'BOTTOM' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Front\">{{ 'FRONT' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Back\">{{ 'BACK' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Left\">{{ 'LEFT' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Right\">{{ 'RIGHT' | localize }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <rp-appearance-section\r\n type=\"shape\"\r\n [hideTextureTab]=\"true\"\r\n [color]=\"skin[selectedFace].color\"\r\n [plainTexture]=\"skin[selectedFace].texture\"\r\n [textureWidth]=\"skin[selectedFace].width() * 100\"\r\n [textureHeight]=\"skin[selectedFace].height() * 100\"\r\n [photoOptions]=\"textureOptions.Tiles\"\r\n (setTexture)=\"setTexture($event)\"\r\n (setColor)=\"setColor($event)\"\r\n >\r\n </rp-appearance-section>\r\n </div>\r\n</section>\r\n", styles: [":host{overflow:hidden}:host section{overflow-y:auto;height:100%}#face-select-form{width:100%}#create-button{color:#fff;background:#3760a1}::ng-deep .mat-select-panel{max-height:80vh!important}.switcher{margin-right:10px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10__namespace$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: AppearanceSectionComponent, selector: "rp-appearance-section", inputs: ["type", "hideTextureTab", "hideColorTab", "hidePhotoTab", "showGlassOption", "texturePlane", "plainTexture", "color", "textureWidth", "textureHeight", "photoOptions", "glassMaterial"], outputs: ["setTexture", "setColor", "setMaterial"] }], directives: [{ type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3__namespace$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "localize": LocalizePipe } });
37515
+ CustomShapeCreatorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: { shape: "shape" }, ngImport: i0__namespace, template: "<section>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"auto center\">\r\n <mat-form-field fxFlex=\"grow\">\r\n <input matInput #nameInputRef\r\n type=\"text\"\r\n placeholder=\"{{'SHAPES_NAME' | localize}}\"\r\n [value]=\"name\"\r\n >\r\n </mat-form-field>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"setName(nameInputRef.value)\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">check</mat-icon>\r\n </button>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"nameInputRef.value = name\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">cancel</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"switcher\">\r\n <h2 class=\"mat-body-2\">{{isFloorType ? ('FLOOR' | localize) : ('WALL' | localize)}}</h2>\r\n <mat-slide-toggle\r\n [checked]=\"isFloorType\"\r\n (change)=\"toggleItemType()\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <h3 class=\"mat-subheading-2\"> {{ 'MEASUREMENTS' | localize}}</h3>\r\n <div>\r\n <rp-dimension-input\r\n title=\"{{'HEIGHT' | localize}}\"\r\n [sourceValue]=\"height * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setHeight($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'WIDTH' | localize}}\"\r\n [sourceValue]=\"width * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setWidth($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'DEPTH' | localize}}\"\r\n [sourceValue]=\"depth * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setDepth($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'ELEVATION' | localize}}\"\r\n [sourceValue]=\"elevation * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setElevation($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n </div>\r\n\r\n <div>\r\n <h3 class=\"mat-subheading-2\"> {{ 'TEXTURES' | localize}}</h3>\r\n <mat-form-field id=\"face-select-form\">\r\n <mat-label>{{\"SELECT_FACE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedFace\">\r\n <mat-option [value]=\"faceRef.All\">{{ 'ALL' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Top\">{{ 'TOP' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Bottom\">{{ 'BOTTOM' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Front\">{{ 'FRONT' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Back\">{{ 'BACK' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Left\">{{ 'LEFT' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Right\">{{ 'RIGHT' | localize }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <rp-appearance-section\r\n type=\"shape\"\r\n [hideTextureTab]=\"true\"\r\n [color]=\"skin[selectedFace].color\"\r\n [plainTexture]=\"skin[selectedFace].texture\"\r\n [textureWidth]=\"skin[selectedFace].width() * 100\"\r\n [textureHeight]=\"skin[selectedFace].height() * 100\"\r\n [photoOptions]=\"textureOptions.Tiles\"\r\n (setTexture)=\"setTexture($event)\"\r\n (setColor)=\"setColor($event)\"\r\n >\r\n </rp-appearance-section>\r\n </div>\r\n</section>\r\n", styles: [":host{overflow:hidden}:host section{overflow-y:auto;height:100%}#face-select-form{width:100%}#create-button{color:#fff;background:#3760a1}::ng-deep .mat-select-panel{max-height:80vh!important}.switcher{margin-right:10px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10__namespace$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: AppearanceSectionComponent, selector: "rp-appearance-section", inputs: ["type", "hideTextureTab", "hideColorTab", "hidePhotoTab", "showGlassOption", "texturePlane", "plainTexture", "color", "textureWidth", "textureHeight", "photoOptions", "glassMaterial"], outputs: ["setTexture", "setColor", "setMaterial"] }], directives: [{ type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3__namespace$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "localize": LocalizePipe } });
37477
37516
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomShapeCreatorComponent, decorators: [{
37478
37517
  type: i0.Component,
37479
37518
  args: [{
@@ -37726,6 +37765,8 @@
37726
37765
  return [4 /*yield*/, MaterialUtils.FromImage(texture)];
37727
37766
  case 1:
37728
37767
  _a[_b] = new (_c.apply(THREE.MeshPhongMaterial, [void 0, (_d.map = _e.sent(),
37768
+ _d.transparent = true,
37769
+ _d.alphaTest = 0.5,
37729
37770
  _d)]))();
37730
37771
  _e.label = 2;
37731
37772
  case 2:
@@ -37743,7 +37784,7 @@
37743
37784
  return CustomCylinderCreatorComponent;
37744
37785
  }());
37745
37786
  CustomCylinderCreatorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomCylinderCreatorComponent, deps: [{ token: HudService }, { token: SceneService }, { token: ItemService }, { token: RoomService }, { token: SceneEventService }, { token: MessageBusService }], target: i0__namespace.ɵɵFactoryTarget.Component });
37746
- CustomCylinderCreatorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: { shape: "shape" }, ngImport: i0__namespace, template: "<section>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"auto center\">\r\n <mat-form-field fxFlex=\"grow\">\r\n <input matInput #nameInputRef\r\n type=\"text\"\r\n placeholder=\"{{'SHAPES_NAME' | localize}}\"\r\n [value]=\"name\"\r\n >\r\n </mat-form-field>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"setName(nameInputRef.value)\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">check</mat-icon>\r\n </button>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"nameInputRef.value = name\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">cancel</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"switcher\">\r\n <h2 class=\"mat-body-2\">{{isFloorType ? ('FLOOR' | localize) : ('WALL' | localize)}}</h2>\r\n <mat-slide-toggle\r\n [checked]=\"isFloorType\"\r\n (change)=\"toggleItemType()\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <h3 class=\"mat-subheading-2\"> {{ 'MEASUREMENTS' | localize}}</h3>\r\n <div>\r\n <rp-dimension-input\r\n title=\"{{'RADIUS' | localize}}\"\r\n [sourceValue]=\"radius * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setRadius($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'HEIGHT' | localize}}\"\r\n [sourceValue]=\"height * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setHeight($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n *ngIf=\"isFloorType\"\r\n title=\"{{'ELEVATION' | localize}}\"\r\n [sourceValue]=\"elevation * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setElevation($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n </div>\r\n\r\n <div>\r\n <h3 class=\"mat-subheading-2\"> {{ 'TEXTURES' | localize}}</h3>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-label>{{\"SELECT_FACE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedFace\">\r\n <mat-option [value]=\"faceRef.All\">{{ 'ALL' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Top\">{{ 'TOP' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Bottom\">{{ 'BOTTOM' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Front\">{{ 'FRONT' | localize }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <rp-appearance-section\r\n [hideTextureTab]=\"true\"\r\n [color]=\"skin[selectedFace].color\"\r\n [plainTexture]=\"skin[selectedFace].texture\"\r\n [photoOptions]=\"textureOptions.Tiles\"\r\n [textureWidth]=\"skin[selectedFace].width() * 100\"\r\n [textureHeight]=\"skin[selectedFace].height() * 100\"\r\n (setTexture)=\"setTexture($event)\"\r\n (setColor)=\"setColor($event)\"\r\n >\r\n </rp-appearance-section>\r\n </div>\r\n</section>\r\n", styles: [":host{overflow:hidden}:host section{overflow-y:auto;height:100%}.face-select-form{width:100%}::ng-deep .mat-select-panel{max-height:80vh!important}.switcher{margin-right:10px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10__namespace$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i9__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: AppearanceSectionComponent, selector: "rp-appearance-section", inputs: ["type", "hideTextureTab", "hideColorTab", "hidePhotoTab", "showGlassOption", "texturePlane", "plainTexture", "color", "textureWidth", "textureHeight", "photoOptions", "glassMaterial"], outputs: ["setTexture", "setColor", "setMaterial"] }], directives: [{ type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3__namespace$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "localize": LocalizePipe } });
37787
+ CustomCylinderCreatorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: { shape: "shape" }, ngImport: i0__namespace, template: "<section>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"auto center\">\r\n <mat-form-field fxFlex=\"grow\">\r\n <input matInput #nameInputRef\r\n type=\"text\"\r\n placeholder=\"{{'SHAPES_NAME' | localize}}\"\r\n [value]=\"name\"\r\n >\r\n </mat-form-field>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"setName(nameInputRef.value)\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">check</mat-icon>\r\n </button>\r\n <button mat-icon-button\r\n [disabled]=\"name === nameInputRef.value\"\r\n (click)=\"nameInputRef.value = name\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons size-16\">cancel</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"switcher\">\r\n <h2 class=\"mat-body-2\">{{isFloorType ? ('FLOOR' | localize) : ('WALL' | localize)}}</h2>\r\n <mat-slide-toggle\r\n [checked]=\"isFloorType\"\r\n (change)=\"toggleItemType()\"\r\n [labelPosition]=\"'before'\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <h3 class=\"mat-subheading-2\"> {{ 'MEASUREMENTS' | localize}}</h3>\r\n <div>\r\n <rp-dimension-input\r\n title=\"{{'RADIUS' | localize}}\"\r\n [sourceValue]=\"radius * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setRadius($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n title=\"{{'HEIGHT' | localize}}\"\r\n [sourceValue]=\"height * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setHeight($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n\r\n <rp-dimension-input\r\n *ngIf=\"isFloorType\"\r\n title=\"{{'ELEVATION' | localize}}\"\r\n [sourceValue]=\"elevation * scaleFactor\"\r\n [minValue]=\"0\"\r\n (dimensionChanged)=\"setElevation($event / scaleFactor)\"\r\n >\r\n </rp-dimension-input>\r\n </div>\r\n\r\n <div>\r\n <h3 class=\"mat-subheading-2\"> {{ 'TEXTURES' | localize}}</h3>\r\n <mat-form-field class=\"face-select-form\">\r\n <mat-label>{{\"SELECT_FACE\" | localize}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedFace\">\r\n <mat-option [value]=\"faceRef.All\">{{ 'ALL' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Top\">{{ 'TOP' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Bottom\">{{ 'BOTTOM' | localize }}</mat-option>\r\n <mat-option [value]=\"faceRef.Front\">{{ 'FRONT' | localize }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <rp-appearance-section\r\n [hideTextureTab]=\"true\"\r\n [color]=\"skin[selectedFace].color\"\r\n [plainTexture]=\"skin[selectedFace].texture\"\r\n [photoOptions]=\"textureOptions.Tiles\"\r\n [textureWidth]=\"skin[selectedFace].width() * 100\"\r\n [textureHeight]=\"skin[selectedFace].height() * 100\"\r\n (setTexture)=\"setTexture($event)\"\r\n (setColor)=\"setColor($event)\"\r\n >\r\n </rp-appearance-section>\r\n </div>\r\n</section>\r\n", styles: [":host{overflow:hidden}:host section{overflow-y:auto;height:100%}.face-select-form{width:100%}::ng-deep .mat-select-panel{max-height:80vh!important}.switcher{margin-right:10px}\n"], components: [{ type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10__namespace$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: AppearanceSectionComponent, selector: "rp-appearance-section", inputs: ["type", "hideTextureTab", "hideColorTab", "hidePhotoTab", "showGlassOption", "texturePlane", "plainTexture", "color", "textureWidth", "textureHeight", "photoOptions", "glassMaterial"], outputs: ["setTexture", "setColor", "setMaterial"] }], directives: [{ type: i3__namespace$3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3__namespace$3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i3__namespace$3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19__namespace.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7__namespace.MatLabel, selector: "mat-label" }, { type: i8__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "localize": LocalizePipe } });
37747
37788
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomCylinderCreatorComponent, decorators: [{
37748
37789
  type: i0.Component,
37749
37790
  args: [{
@@ -40335,7 +40376,7 @@
40335
40376
  return ModelDialogFurnitureListComponent;
40336
40377
  }());
40337
40378
  ModelDialogFurnitureListComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelDialogFurnitureListComponent, deps: [{ token: HomedecoratorIconCacheService }, { token: HomedecoratorSettingsService }, { token: ItemService }, { token: GoogleTagManagerService }], target: i0__namespace.ɵɵFactoryTarget.Component });
40338
- ModelDialogFurnitureListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModelDialogFurnitureListComponent, selector: "dialog-furniture-list", inputs: { list: "list", label: "label", subLabel: "subLabel", showCopy: "showCopy", showDelete: "showDelete", showTotals: "showTotals" }, ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"list.length > 0\">\n <div class=\"title\">\n <h4 class=\"label\" *ngIf=\"label\" [textContent]=\"label | localize\"></h4>\n <p class=\"sub-label\" *ngIf=\"subLabel\" [textContent]=\"subLabel | localize\"></p>\n </div>\n\n\n <ul class=\"furniture-list\">\n <li *ngFor=\"let item of list; let i = index\" [attr.data-index]=\"i\" class=\"furniture-item\">\n <div class=\"furniture-item-wrap\">\n <div class=\"furniture-item-left\">\n <div class=\"furniture-item-wrapper\">\n <co-icon *ngIf=\"item.errorMessages.length > 0\" class=\"error-expand-handle\" [class.expanded]=\"item.showErrors\"\n [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\" (click)=\"item.showErrors = !item.showErrors\"></co-icon>\n <span class=\"furniture-item-title\" [textContent]=\"item.name\"></span>\n <button *ngIf=showCopy class=\"furniture-item-copy\"\n [textContent]=\"item.toggle ? ('COPIED' | localize) : ('COPY' | localize)\"\n (click)=\"copyFurnitureName(item)\"></button>\n </div>\n <div class=\"error-messages-wrapper\" *ngIf=\"item.showErrors\" @showErrorMessages>\n <error-messages [messages]=\"item.errorMessages\"></error-messages>\n </div>\n </div>\n <div class=\"furniture-item-right\" *ngIf=\"showDelete\">\n <button class=\"furniture-item-delete\" matTooltip=\"{{'REMOVE' | localize}}\"\n (click)=\"removeFurniture(item)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n <!-- add conversionbtn here-->\n <div class=\"furniture-item-conversion-wrap\" *ngIf=\"settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-conversion-row furniture-item-conversion-button-wrap\">\n <button\n (click)=\"sendConversionToTagManager(item)\"\n class=\"furniture-item-button furniture-item-conversion\"\n [ngClass]=\"item.metaData.conversionGTMSend ? 'furniture-item-conversion-highlight':''\">\n <mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon>\n </button>\n </div>\n <div class=\"furniture-item-conversion-row furniture-item-conversion-input-wrap\">\n <label *ngIf=\"item.metaData.conversionGTMSend\" class=\"furniture-item-conversion-input-label\">\n {{ 'SALESPRICE' | localize }}\n </label>\n <input\n type=\"text\"\n [value]=\"item.metaData.conversionSubmittedPrice ? item.metaData.conversionSubmittedPrice : ''\"\n [disabled]=\"!item.metaData.conversionGTMSend\"\n (keydown.enter)=\"getInputValue($event, item)\"\n (keydown.tab)=\"getInputValue($event, item)\"\n [id]=\"item.instanceId\"\n >\n <button\n class=\"input-binded-button\"\n (click)=\"submitInput(item.instanceId, item)\"\n [ngClass]=\"item.metaData.conversionSubmittedPrice && item.metaData.conversionSubmittedPrice !== '' ? 'input-binded-button-highlight' : ''\"\n >\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n </li>\n </ul>\n\n <div class=\"furniture-item-totals\" *ngIf=\"showTotals && settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-total-row furniture-item-total\">\n <span>{{ 'TOTALPRICE' | localize }}: {{ totalPrice }}</span>\n </div>\n <div class=\"furniture-item-total-row furniture-item-total-submit\">\n <button\n name=\"submit project conversion\"\n alt=\"submit project conversion\"\n class=\"furniture-item-button furniture-item-total-button\"\n (click)=\"submitTotalPriceEvent()\"\n [ngClass]=\"totalEventSubmitted ? 'furniture-item-total-button-highlight' : ''\">\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"!totalEventSubmitted\">arrow_upward</mat-icon>\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"totalEventSubmitted\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n\n </ng-container>\n ", isInline: true, styles: [".title{margin-bottom:10px}.label{margin:0}.sub-label{font-size:12px;font-style:italic;margin:0}.furniture-item-button{-webkit-user-select:none;user-select:none;width:36px;height:36px;color:#fff;background:#3760a1;border:none;border-radius:100%;cursor:pointer;flex-shrink:0}.furniture-item-button .mat-icon{font-size:18px;line-height:36px;width:auto;height:auto}.furniture-list{display:flex;flex-direction:column;width:100%;padding:0;overflow:hidden;margin:0 0 10px}.furniture-list .furniture-item{display:flex;align-items:flex-start;width:100%;margin:2px 0 0;overflow:hidden}.furniture-list .furniture-item.furniture-model .furniture-item-left{padding-right:10px}.furniture-list .furniture-item .furniture-item-wrapper{display:flex;align-items:center}.furniture-list .furniture-item .furniture-item-wrapper .error-expand-handle{cursor:pointer;transform:rotate(0);height:40px;width:40px}.furniture-list .furniture-item .furniture-item-wrapper .error-expand-handle.expanded{transform:rotate(180deg);transition:.3s ease-in-out}.furniture-list .furniture-item .furniture-item-wrap{border:1px solid #dce4ea;padding:4px 0 4px 10px;display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left{display:flex;flex-direction:column;width:80%;font-size:13px;margin:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-title{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:32px}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy{float:right;border:none;padding:0 15px;margin:0 0 0 10px;line-height:32px;font-size:12px;text-transform:uppercase;background:transparent;color:#dce4ea;font-weight:600;cursor:pointer}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy:focus{outline:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy:hover{color:#000000de}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right{display:flex;padding-top:4px;width:20%;flex-direction:column;justify-content:center;align-items:center}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right .furniture-item-delete{-webkit-user-select:none;user-select:none;width:36px;height:36px;color:#fff;background:#3760a1;border:none;border-radius:100%;cursor:pointer;flex-shrink:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right .furniture-item-delete .mat-icon{font-size:18px;line-height:36px;width:auto;height:auto}.furniture-list .furniture-item .furniture-item-conversion-wrap{display:flex;flex-direction:row;flex-wrap:wrap;padding-top:9px;box-sizing:border-box}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-row{display:flex;flex-direction:column;justify-content:center;align-items:center}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-button-wrap{width:30%}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap{width:70%;position:relative}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap input{width:90%;border:1px solid #e8eceb;border-radius:3px;box-sizing:border-box;padding:10px 5px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap input:disabled{background:#eee}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .furniture-item-conversion-input-label{font-size:8px;position:absolute;top:2px;left:10px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button{background:none;border:none;cursor:pointer;position:absolute;right:0;top:10px;color:#000}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button .mat-icon{height:14px;width:14px;font-size:14px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button-highlight{color:#009a6d}.furniture-item-conversion-highlight{background:#009a6d}.furniture-item-conversion-highlight svg{fill:#fff}::ng-deep error-messages .error-message{font-weight:bold;font-size:12px}::ng-deep error-messages .error-description{font-size:11px}.furniture-item-totals{display:flex;flex-direction:row;justify-content:right;align-items:center}.furniture-item-totals .furniture-item-total-row{display:flex;flex-direction:column;margin-left:15px}.furniture-item-totals .furniture-item-total-button-highlight{background:#009a6d;color:#fff}\n"], components: [{ type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: ErrorMessageComponent, selector: "error-messages", inputs: ["messages"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "localize": LocalizePipe }, animations: [
40379
+ ModelDialogFurnitureListComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModelDialogFurnitureListComponent, selector: "dialog-furniture-list", inputs: { list: "list", label: "label", subLabel: "subLabel", showCopy: "showCopy", showDelete: "showDelete", showTotals: "showTotals" }, ngImport: i0__namespace, template: "\n <ng-container *ngIf=\"list.length > 0\">\n <div class=\"title\">\n <h4 class=\"label\" *ngIf=\"label\" [textContent]=\"label | localize\"></h4>\n <p class=\"sub-label\" *ngIf=\"subLabel\" [textContent]=\"subLabel | localize\"></p>\n </div>\n\n\n <ul class=\"furniture-list\">\n <li *ngFor=\"let item of list; let i = index\" [attr.data-index]=\"i\" class=\"furniture-item\">\n <div class=\"furniture-item-wrap\">\n <div class=\"furniture-item-left\">\n <div class=\"furniture-item-wrapper\">\n <co-icon *ngIf=\"item.errorMessages.length > 0\" class=\"error-expand-handle\" [class.expanded]=\"item.showErrors\"\n [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\" (click)=\"item.showErrors = !item.showErrors\"></co-icon>\n <span class=\"furniture-item-title\" [textContent]=\"item.name ? item.name : item.sku\"></span>\n <button *ngIf=showCopy class=\"furniture-item-copy\"\n [textContent]=\"item.toggle ? ('COPIED' | localize) : ('COPY' | localize)\"\n (click)=\"copyFurnitureName(item)\"></button>\n </div>\n <div class=\"error-messages-wrapper\" *ngIf=\"item.showErrors\" @showErrorMessages>\n <error-messages [messages]=\"item.errorMessages\"></error-messages>\n </div>\n </div>\n <div class=\"furniture-item-right\" *ngIf=\"showDelete\">\n <button class=\"furniture-item-delete\" matTooltip=\"{{'REMOVE' | localize}}\"\n (click)=\"removeFurniture(item)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n <!-- add conversionbtn here-->\n <div class=\"furniture-item-conversion-wrap\" *ngIf=\"settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-conversion-row furniture-item-conversion-button-wrap\">\n <button\n (click)=\"sendConversionToTagManager(item)\"\n class=\"furniture-item-button furniture-item-conversion\"\n [ngClass]=\"item.metaData.conversionGTMSend ? 'furniture-item-conversion-highlight':''\">\n <mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon>\n </button>\n </div>\n <div class=\"furniture-item-conversion-row furniture-item-conversion-input-wrap\">\n <label *ngIf=\"item.metaData.conversionGTMSend\" class=\"furniture-item-conversion-input-label\">\n {{ 'SALESPRICE' | localize }}\n </label>\n <input\n type=\"text\"\n [value]=\"item.metaData.conversionSubmittedPrice ? item.metaData.conversionSubmittedPrice : ''\"\n [disabled]=\"!item.metaData.conversionGTMSend\"\n (keydown.enter)=\"getInputValue($event, item)\"\n (keydown.tab)=\"getInputValue($event, item)\"\n [id]=\"item.instanceId\"\n >\n <button\n class=\"input-binded-button\"\n (click)=\"submitInput(item.instanceId, item)\"\n [ngClass]=\"item.metaData.conversionSubmittedPrice && item.metaData.conversionSubmittedPrice !== '' ? 'input-binded-button-highlight' : ''\"\n >\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n </li>\n </ul>\n\n <div class=\"furniture-item-totals\" *ngIf=\"showTotals && settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-total-row furniture-item-total\">\n <span>{{ 'TOTALPRICE' | localize }}: {{ totalPrice }}</span>\n </div>\n <div class=\"furniture-item-total-row furniture-item-total-submit\">\n <button\n name=\"submit project conversion\"\n alt=\"submit project conversion\"\n class=\"furniture-item-button furniture-item-total-button\"\n (click)=\"submitTotalPriceEvent()\"\n [ngClass]=\"totalEventSubmitted ? 'furniture-item-total-button-highlight' : ''\">\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"!totalEventSubmitted\">arrow_upward</mat-icon>\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"totalEventSubmitted\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n\n </ng-container>\n ", isInline: true, styles: [".title{margin-bottom:10px}.label{margin:0}.sub-label{font-size:12px;font-style:italic;margin:0}.furniture-item-button{-webkit-user-select:none;user-select:none;width:36px;height:36px;color:#fff;background:#3760a1;border:none;border-radius:100%;cursor:pointer;flex-shrink:0}.furniture-item-button .mat-icon{font-size:18px;line-height:36px;width:auto;height:auto}.furniture-list{display:flex;flex-direction:column;width:100%;padding:0;overflow:hidden;margin:0 0 10px}.furniture-list .furniture-item{display:flex;align-items:flex-start;width:100%;margin:2px 0 0;overflow:hidden}.furniture-list .furniture-item.furniture-model .furniture-item-left{padding-right:10px}.furniture-list .furniture-item .furniture-item-wrapper{display:flex;align-items:center}.furniture-list .furniture-item .furniture-item-wrapper .error-expand-handle{cursor:pointer;transform:rotate(0);height:40px;width:40px}.furniture-list .furniture-item .furniture-item-wrapper .error-expand-handle.expanded{transform:rotate(180deg);transition:.3s ease-in-out}.furniture-list .furniture-item .furniture-item-wrap{border:1px solid #dce4ea;padding:4px 0 4px 10px;display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left{display:flex;flex-direction:column;width:80%;font-size:13px;margin:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-title{display:flex;flex-direction:column;justify-content:center;width:100%;min-height:32px}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy{float:right;border:none;padding:0 15px;margin:0 0 0 10px;line-height:32px;font-size:12px;text-transform:uppercase;background:transparent;color:#dce4ea;font-weight:600;cursor:pointer}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy:focus{outline:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-left .furniture-item-copy:hover{color:#000000de}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right{display:flex;padding-top:4px;width:20%;flex-direction:column;justify-content:center;align-items:center}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right .furniture-item-delete{-webkit-user-select:none;user-select:none;width:36px;height:36px;color:#fff;background:#3760a1;border:none;border-radius:100%;cursor:pointer;flex-shrink:0}.furniture-list .furniture-item .furniture-item-wrap .furniture-item-right .furniture-item-delete .mat-icon{font-size:18px;line-height:36px;width:auto;height:auto}.furniture-list .furniture-item .furniture-item-conversion-wrap{display:flex;flex-direction:row;flex-wrap:wrap;padding-top:9px;box-sizing:border-box}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-row{display:flex;flex-direction:column;justify-content:center;align-items:center}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-button-wrap{width:30%}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap{width:70%;position:relative}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap input{width:90%;border:1px solid #e8eceb;border-radius:3px;box-sizing:border-box;padding:10px 5px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap input:disabled{background:#eee}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .furniture-item-conversion-input-label{font-size:8px;position:absolute;top:2px;left:10px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button{background:none;border:none;cursor:pointer;position:absolute;right:0;top:10px;color:#000}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button .mat-icon{height:14px;width:14px;font-size:14px}.furniture-list .furniture-item .furniture-item-conversion-wrap .furniture-item-conversion-input-wrap .input-binded-button-highlight{color:#009a6d}.furniture-item-conversion-highlight{background:#009a6d}.furniture-item-conversion-highlight svg{fill:#fff}::ng-deep error-messages .error-message{font-weight:bold;font-size:12px}::ng-deep error-messages .error-description{font-size:11px}.furniture-item-totals{display:flex;flex-direction:row;justify-content:right;align-items:center}.furniture-item-totals .furniture-item-total-row{display:flex;flex-direction:column;margin-left:15px}.furniture-item-totals .furniture-item-total-button-highlight{background:#009a6d;color:#fff}\n"], components: [{ type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: ErrorMessageComponent, selector: "error-messages", inputs: ["messages"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "localize": LocalizePipe }, animations: [
40339
40380
  animations.trigger('slideInOut', [
40340
40381
  animations.transition(':leave', [
40341
40382
  animations.style({ transform: 'translateY(0%)', opacity: '1' }),
@@ -40352,7 +40393,7 @@
40352
40393
  type: i0.Component,
40353
40394
  args: [{
40354
40395
  selector: 'dialog-furniture-list',
40355
- template: "\n <ng-container *ngIf=\"list.length > 0\">\n <div class=\"title\">\n <h4 class=\"label\" *ngIf=\"label\" [textContent]=\"label | localize\"></h4>\n <p class=\"sub-label\" *ngIf=\"subLabel\" [textContent]=\"subLabel | localize\"></p>\n </div>\n\n\n <ul class=\"furniture-list\">\n <li *ngFor=\"let item of list; let i = index\" [attr.data-index]=\"i\" class=\"furniture-item\">\n <div class=\"furniture-item-wrap\">\n <div class=\"furniture-item-left\">\n <div class=\"furniture-item-wrapper\">\n <co-icon *ngIf=\"item.errorMessages.length > 0\" class=\"error-expand-handle\" [class.expanded]=\"item.showErrors\"\n [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\" (click)=\"item.showErrors = !item.showErrors\"></co-icon>\n <span class=\"furniture-item-title\" [textContent]=\"item.name\"></span>\n <button *ngIf=showCopy class=\"furniture-item-copy\"\n [textContent]=\"item.toggle ? ('COPIED' | localize) : ('COPY' | localize)\"\n (click)=\"copyFurnitureName(item)\"></button>\n </div>\n <div class=\"error-messages-wrapper\" *ngIf=\"item.showErrors\" @showErrorMessages>\n <error-messages [messages]=\"item.errorMessages\"></error-messages>\n </div>\n </div>\n <div class=\"furniture-item-right\" *ngIf=\"showDelete\">\n <button class=\"furniture-item-delete\" matTooltip=\"{{'REMOVE' | localize}}\"\n (click)=\"removeFurniture(item)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n <!-- add conversionbtn here-->\n <div class=\"furniture-item-conversion-wrap\" *ngIf=\"settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-conversion-row furniture-item-conversion-button-wrap\">\n <button\n (click)=\"sendConversionToTagManager(item)\"\n class=\"furniture-item-button furniture-item-conversion\"\n [ngClass]=\"item.metaData.conversionGTMSend ? 'furniture-item-conversion-highlight':''\">\n <mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon>\n </button>\n </div>\n <div class=\"furniture-item-conversion-row furniture-item-conversion-input-wrap\">\n <label *ngIf=\"item.metaData.conversionGTMSend\" class=\"furniture-item-conversion-input-label\">\n {{ 'SALESPRICE' | localize }}\n </label>\n <input\n type=\"text\"\n [value]=\"item.metaData.conversionSubmittedPrice ? item.metaData.conversionSubmittedPrice : ''\"\n [disabled]=\"!item.metaData.conversionGTMSend\"\n (keydown.enter)=\"getInputValue($event, item)\"\n (keydown.tab)=\"getInputValue($event, item)\"\n [id]=\"item.instanceId\"\n >\n <button\n class=\"input-binded-button\"\n (click)=\"submitInput(item.instanceId, item)\"\n [ngClass]=\"item.metaData.conversionSubmittedPrice && item.metaData.conversionSubmittedPrice !== '' ? 'input-binded-button-highlight' : ''\"\n >\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n </li>\n </ul>\n\n <div class=\"furniture-item-totals\" *ngIf=\"showTotals && settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-total-row furniture-item-total\">\n <span>{{ 'TOTALPRICE' | localize }}: {{ totalPrice }}</span>\n </div>\n <div class=\"furniture-item-total-row furniture-item-total-submit\">\n <button\n name=\"submit project conversion\"\n alt=\"submit project conversion\"\n class=\"furniture-item-button furniture-item-total-button\"\n (click)=\"submitTotalPriceEvent()\"\n [ngClass]=\"totalEventSubmitted ? 'furniture-item-total-button-highlight' : ''\">\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"!totalEventSubmitted\">arrow_upward</mat-icon>\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"totalEventSubmitted\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n\n </ng-container>\n ",
40396
+ template: "\n <ng-container *ngIf=\"list.length > 0\">\n <div class=\"title\">\n <h4 class=\"label\" *ngIf=\"label\" [textContent]=\"label | localize\"></h4>\n <p class=\"sub-label\" *ngIf=\"subLabel\" [textContent]=\"subLabel | localize\"></p>\n </div>\n\n\n <ul class=\"furniture-list\">\n <li *ngFor=\"let item of list; let i = index\" [attr.data-index]=\"i\" class=\"furniture-item\">\n <div class=\"furniture-item-wrap\">\n <div class=\"furniture-item-left\">\n <div class=\"furniture-item-wrapper\">\n <co-icon *ngIf=\"item.errorMessages.length > 0\" class=\"error-expand-handle\" [class.expanded]=\"item.showErrors\"\n [iconData]=\"iconService.getIcon(icon.ArrowPointDown)\" (click)=\"item.showErrors = !item.showErrors\"></co-icon>\n <span class=\"furniture-item-title\" [textContent]=\"item.name ? item.name : item.sku\"></span>\n <button *ngIf=showCopy class=\"furniture-item-copy\"\n [textContent]=\"item.toggle ? ('COPIED' | localize) : ('COPY' | localize)\"\n (click)=\"copyFurnitureName(item)\"></button>\n </div>\n <div class=\"error-messages-wrapper\" *ngIf=\"item.showErrors\" @showErrorMessages>\n <error-messages [messages]=\"item.errorMessages\"></error-messages>\n </div>\n </div>\n <div class=\"furniture-item-right\" *ngIf=\"showDelete\">\n <button class=\"furniture-item-delete\" matTooltip=\"{{'REMOVE' | localize}}\"\n (click)=\"removeFurniture(item)\">\n <mat-icon class=\"homedecorator-material-icons\">delete</mat-icon>\n </button>\n </div>\n </div>\n <!-- add conversionbtn here-->\n <div class=\"furniture-item-conversion-wrap\" *ngIf=\"settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-conversion-row furniture-item-conversion-button-wrap\">\n <button\n (click)=\"sendConversionToTagManager(item)\"\n class=\"furniture-item-button furniture-item-conversion\"\n [ngClass]=\"item.metaData.conversionGTMSend ? 'furniture-item-conversion-highlight':''\">\n <mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon>\n </button>\n </div>\n <div class=\"furniture-item-conversion-row furniture-item-conversion-input-wrap\">\n <label *ngIf=\"item.metaData.conversionGTMSend\" class=\"furniture-item-conversion-input-label\">\n {{ 'SALESPRICE' | localize }}\n </label>\n <input\n type=\"text\"\n [value]=\"item.metaData.conversionSubmittedPrice ? item.metaData.conversionSubmittedPrice : ''\"\n [disabled]=\"!item.metaData.conversionGTMSend\"\n (keydown.enter)=\"getInputValue($event, item)\"\n (keydown.tab)=\"getInputValue($event, item)\"\n [id]=\"item.instanceId\"\n >\n <button\n class=\"input-binded-button\"\n (click)=\"submitInput(item.instanceId, item)\"\n [ngClass]=\"item.metaData.conversionSubmittedPrice && item.metaData.conversionSubmittedPrice !== '' ? 'input-binded-button-highlight' : ''\"\n >\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n </li>\n </ul>\n\n <div class=\"furniture-item-totals\" *ngIf=\"showTotals && settingsService.settings.showConversionButtons\">\n <div class=\"furniture-item-total-row furniture-item-total\">\n <span>{{ 'TOTALPRICE' | localize }}: {{ totalPrice }}</span>\n </div>\n <div class=\"furniture-item-total-row furniture-item-total-submit\">\n <button\n name=\"submit project conversion\"\n alt=\"submit project conversion\"\n class=\"furniture-item-button furniture-item-total-button\"\n (click)=\"submitTotalPriceEvent()\"\n [ngClass]=\"totalEventSubmitted ? 'furniture-item-total-button-highlight' : ''\">\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"!totalEventSubmitted\">arrow_upward</mat-icon>\n <mat-icon class=\"homedecorator-material-icons\" *ngIf=\"totalEventSubmitted\">check_circle</mat-icon>\n </button>\n </div>\n </div>\n\n </ng-container>\n ",
40356
40397
  styleUrls: [
40357
40398
  './model-dialog-furniture-list.component.scss'
40358
40399
  ],
@@ -43840,7 +43881,7 @@
43840
43881
  return SaveDialogComponent;
43841
43882
  }());
43842
43883
  SaveDialogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SaveDialogComponent, deps: [{ token: i1$1.MAT_DIALOG_DATA }, { token: PermanentStoreService }, { token: HomedecoratorIconCacheService }, { token: i1__namespace$1.MatDialog }, { token: i1__namespace$1.MatDialogRef }, { token: MessageBusService }, { token: PresetsService }, { token: HomedecoratorDictionaryService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
43843
- SaveDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SaveDialogComponent, selector: "rp-save-dialog", ngImport: i0__namespace, template: "<h1 mat-dialog-title>{{'SAVE_THE_PLAN' | localize}}</h1>\r\n<div mat-dialog-content class=\"dialog-wrapper\" cdkTrapFocus>\r\n <mat-nav-list>\r\n <mat-list-item (click)=\"saveToCloud()\">\r\n <h4 mat-line><strong>{{'SAVE_TO_CLOUD' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'ACCESS_THE_PLAN_USING_A_UNIQUE_CODE' | localize}}</p>\r\n </mat-list-item>\r\n <mat-list-item *ngIf=\"wasPlanSaved\" (click)=\"saveToCloud(true)\">\r\n <h4 mat-line><strong>{{'SAVE_AS_NEW' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'CREATE_A_COPY_OF_THE_PLAN' | localize}}</p>\r\n </mat-list-item>\r\n <button mat-mini-fab class=\"download-button\" (click)=\"download()\" *ngIf=\"permanentStoreService.code || showLocalSave\">\r\n <co-icon [iconData]=\"iconCache.getIcon(icon.Download)\"></co-icon>\r\n </button>\r\n </mat-nav-list>\r\n</div>\r\n", styles: [":host .mat-dialog-content{margin:0;padding:0;overflow:hidden}:host .mat-nav-list{display:flex;flex-direction:column}:host .mat-nav-list .mat-list-item:not(:last-child){margin-bottom:30px}:host .download-button{box-shadow:none;background-color:#3760a1;display:flex;align-items:center;justify-content:center;align-self:flex-end}:host .download-button ::ng-deep co-icon [fill]{fill:#fff}.mat-dialog-actions{margin-bottom:0}.item-description{white-space:inherit!important}\n"], components: [{ type: i2__namespace$2.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2__namespace$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i1__namespace$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1__namespace$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3__namespace.MatLine, selector: "[mat-line], [matLine]" }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
43884
+ SaveDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SaveDialogComponent, selector: "rp-save-dialog", ngImport: i0__namespace, template: "<h1 mat-dialog-title>{{'SAVE_THE_PLAN' | localize}}</h1>\r\n<div mat-dialog-content class=\"dialog-wrapper\" cdkTrapFocus>\r\n <mat-nav-list>\r\n <mat-list-item (click)=\"saveToCloud()\">\r\n <h4 mat-line><strong>{{'SAVE_TO_CLOUD' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'ACCESS_THE_PLAN_USING_A_UNIQUE_CODE' | localize}}</p>\r\n </mat-list-item>\r\n <mat-list-item *ngIf=\"wasPlanSaved\" (click)=\"saveToCloud(true)\">\r\n <h4 mat-line><strong>{{'SAVE_AS_NEW' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'CREATE_A_COPY_OF_THE_PLAN' | localize}}</p>\r\n </mat-list-item>\r\n <ng-container *ngIf=\"permanentStoreService.code || showLocalSave\">\r\n <button mat-mini-fab class=\"download-button\" (click)=\"download()\">\r\n <co-icon [iconData]=\"iconCache.getIcon(icon.Download)\"></co-icon>\r\n </button>\r\n </ng-container>\r\n </mat-nav-list>\r\n</div>\r\n", styles: [":host .mat-dialog-content{margin:0;padding:0;overflow:hidden}:host .mat-nav-list{display:flex;flex-direction:column}:host .mat-nav-list .mat-list-item:not(:last-child){margin-bottom:30px}:host .download-button{box-shadow:none;background-color:#3760a1;display:flex;align-items:center;justify-content:center;align-self:flex-end}:host .download-button ::ng-deep co-icon [fill]{fill:#fff}.mat-dialog-actions{margin-bottom:0}.item-description{white-space:inherit!important}\n"], components: [{ type: i2__namespace$2.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2__namespace$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i1__namespace$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1__namespace$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3__namespace.MatLine, selector: "[mat-line], [matLine]" }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
43844
43885
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SaveDialogComponent, decorators: [{
43845
43886
  type: i0.Component,
43846
43887
  args: [{
@@ -43886,8 +43927,8 @@
43886
43927
  this.draftingMode = 'movement';
43887
43928
  this.cameraOffset = { x: window.innerWidth / 2, y: window.innerHeight / 2 };
43888
43929
  this.cameraZoom = 1;
43889
- this.maxZoom = 5;
43890
- this.minZoom = 1;
43930
+ this.maxZoom = 10;
43931
+ this.minZoom = 0.1;
43891
43932
  this.scrollSensitivity = 0.005;
43892
43933
  this.isDragging = false;
43893
43934
  this.dragStart = { x: 0, y: 0 };
@@ -43937,6 +43978,17 @@
43937
43978
  _this._context.stroke();
43938
43979
  }
43939
43980
  }
43981
+ if (_this.draftingMode === 'movement') {
43982
+ _this._canvas.style.cursor = 'pointer';
43983
+ }
43984
+ else {
43985
+ if (_this.isDragging) {
43986
+ _this._canvas.style.cursor = 'pointer';
43987
+ }
43988
+ else {
43989
+ _this._canvas.style.cursor = "url(" + drawModeCursorImageUrl + ") 0 " + drawModeCursorHeight + ", auto";
43990
+ }
43991
+ }
43940
43992
  requestAnimationFrame(function () { return _this.draw(); });
43941
43993
  };
43942
43994
  }
@@ -43975,6 +44027,9 @@
43975
44027
  this.hiddenImage.nativeElement.src = url;
43976
44028
  }
43977
44029
  };
44030
+ DrawDialogComponent.prototype.updateUserValue = function () {
44031
+ this.customerInputLenght = this.inputLength.nativeElement.value;
44032
+ };
43978
44033
  DrawDialogComponent.prototype.handleMouseDown = function (event) {
43979
44034
  if (this.draftingMode === 'movement') {
43980
44035
  this.isDragging = true;
@@ -44020,16 +44075,13 @@
44020
44075
  this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
44021
44076
  };
44022
44077
  DrawDialogComponent.prototype.handleMouseWheel = function (event) {
44023
- if (this.draftingMode === 'movement') {
44024
- var zoomAmount = event.deltaY * this.scrollSensitivity;
44025
- console.log(zoomAmount);
44026
- if (!this.isDragging) {
44027
- if (zoomAmount) {
44028
- this.cameraZoom -= zoomAmount;
44029
- }
44030
- this.cameraZoom = Math.min(this.cameraZoom, this.maxZoom);
44031
- this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
44078
+ var zoomAmount = event.deltaY * this.scrollSensitivity;
44079
+ if (!this.isDragging) {
44080
+ if (zoomAmount) {
44081
+ this.cameraZoom -= zoomAmount;
44032
44082
  }
44083
+ this.cameraZoom = Math.min(this.cameraZoom, this.maxZoom);
44084
+ this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
44033
44085
  }
44034
44086
  };
44035
44087
  DrawDialogComponent.prototype.getEventLocation = function (e) {
@@ -44042,12 +44094,6 @@
44042
44094
  };
44043
44095
  DrawDialogComponent.prototype.setModus = function (modus) {
44044
44096
  this.draftingMode = modus;
44045
- if (this.draftingMode === 'scaling') {
44046
- this._canvas.style.cursor = "url(assets/cursors/pencil.png) 0 26}, auto";
44047
- }
44048
- else {
44049
- this._canvas.style.cursor = '';
44050
- }
44051
44097
  };
44052
44098
  DrawDialogComponent.prototype.submitLength = function () {
44053
44099
  if (this.inputLength.nativeElement.value !== '' && this.measurePoints.length === 2) {
@@ -44071,6 +44117,7 @@
44071
44117
  backgroundWidth: this.hiddenImage.nativeElement.width,
44072
44118
  cameraZoom: this.cameraZoom
44073
44119
  };
44120
+ this._messageService.emit(MessageType.StartWithEmptyRoom);
44074
44121
  this._messageService.emit(MessageType.LoadScaledDiagram, output);
44075
44122
  this._dialog.closeAll();
44076
44123
  }
@@ -44123,7 +44170,7 @@
44123
44170
  return DrawDialogComponent;
44124
44171
  }());
44125
44172
  DrawDialogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: DrawDialogComponent, deps: [{ token: i1$1.MAT_DIALOG_DATA }, { token: i1__namespace$1.MatDialogRef }, { token: i1__namespace$1.MatDialog }, { token: MessageBusService }, { token: UtilsService }, { token: PresetsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
44126
- DrawDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DrawDialogComponent, selector: "rp-draw-dialog", viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["drawCanvas"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "inputLength", first: true, predicate: ["inputLength"], descendants: true }, { propertyName: "hiddenImage", first: true, predicate: ["hiddenImage"], descendants: true }], ngImport: i0__namespace, template: "<h1 mat-dialog-title>{{ 'OPEN_A_DIAGRAM' | localize }}</h1>\r\n\r\n\r\n<div class=\"top-bar-container\" >\r\n <div class=\"reference-input-container\" *ngIf=\"draftingMode === 'scaling'\">\r\n <div class=\"input-button-container\">\r\n <input\r\n #inputLength\r\n type=\"number\"\r\n placeholder=\"{{ 'PDF_REFERENCE_PLACEHOLDER' | localize}}\"\r\n [attr.disabled]=\"this.measurePoints.length === 0 ? '' : null\"\r\n >\r\n <button (click)=\"resetPoints()\" title=\"Reset referentie meting\">\r\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"helper-text\">{{ 'PDF_REFERENCE_HELPER' | localize }}</p>\r\n </div>\r\n\r\n<!-- <div class=\"rotation-input-container\" *ngIf=\"draftingMode === 'scaling'\">-->\r\n<!-- rotatiedingen-->\r\n<!-- </div>-->\r\n\r\n <div class=\"zoom-button-containers\" *ngIf=\"draftingMode === 'movement'\">\r\n <button (click)=\"clickingZoom('in')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_in</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('reset')\">\r\n <mat-icon class=\"homedecorator-material-icons\">all_out</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('out')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_out</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"main-button-container\">\r\n <mat-button-toggle-group\r\n class=\"mode-toggle\"\r\n (change)=\"setModus($event.value)\"\r\n [value]=\"draftingMode\">\r\n <mat-button-toggle [value]=\"'movement'\" [matTooltip]=\"'Zoom / verplaats modus'\">\r\n <mat-icon svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'scaling'\" [matTooltip]=\"'Maak referentie meting'\">\r\n <mat-icon svgIcon=\"pen-ruler\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"canvas-wrapper\">\r\n <canvas\r\n #drawCanvas\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n ></canvas>\r\n</div>\r\n\r\n<div class=\"save-cancel-button-container\">\r\n <button (click)=\"cancelAndReset()\">\r\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n <button (click)=\"submitLength()\" title=\"Opslaan\" *ngIf=\"draftingMode === 'scaling'\">\r\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\r\n <span>Ok</span>\r\n </button>\r\n</div>\r\n\r\n<img #hiddenImage src=\"\" style=\"display: none;\">\r\n", styles: ["canvas{position:relative}button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}button:hover{background:#dda73f;color:#fff}.main-button-container{display:flex;justify-content:center;margin-bottom:15px}.main-button-container .mat-button-toggle-checked{background:#dda73f;color:#fff}.reference-input-container .input-button-container{display:flex;align-items:center}.reference-input-container .input-button-container input{min-width:285px;border:1px solid #f7f7f9;border-radius:3px;height:35px;line-height:35px;box-sizing:border-box;padding:10px}.reference-input-container .input-button-container input:disabled{background:#f7f7f9;cursor:default}.reference-input-container .input-button-container button{border:none;display:inline-block}.reference-input-container .helper-text{font-size:13px;font-style:italic;margin:0;padding:0;display:block}.zoom-button-containers{display:flex;justify-items:center;justify-content:right}.zoom-button-containers button{margin:0 5px}.save-cancel-button-container{display:flex;justify-content:center;justify-items:center}.save-cancel-button-container button{margin:3px 10px;padding:8px 15px}.save-cancel-button-container button .homedecorator-material-icons{font-size:18px}.save-cancel-button-container button span{line-height:18px;font-size:15px}.canvas-wrapper{overflow:scroll;max-height:60vh;max-width:80vw}\n"], components: [{ type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7__namespace$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i1__namespace$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7__namespace$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "localize": LocalizePipe } });
44173
+ DrawDialogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DrawDialogComponent, selector: "rp-draw-dialog", viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["drawCanvas"], descendants: true, read: i0.ElementRef, static: true }, { propertyName: "inputLength", first: true, predicate: ["inputLength"], descendants: true }, { propertyName: "hiddenImage", first: true, predicate: ["hiddenImage"], descendants: true }], ngImport: i0__namespace, template: "<h1 mat-dialog-title>{{ 'OPEN_A_DIAGRAM' | localize }}</h1>\r\n\r\n\r\n<div class=\"top-bar-container\" >\r\n <div class=\"reference-input-container\" *ngIf=\"draftingMode === 'scaling'\">\r\n <div class=\"input-button-container\">\r\n <input\r\n (change)=\"updateUserValue()\"\r\n [value]=\"customerInputLenght\"\r\n #inputLength\r\n type=\"number\"\r\n placeholder=\"{{ 'PDF_REFERENCE_PLACEHOLDER' | localize}}\"\r\n [attr.disabled]=\"this.measurePoints.length === 0 ? '' : null\"\r\n >\r\n <button (click)=\"resetPoints()\" title=\"Reset referentie meting\">\r\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"helper-text\">{{ 'PDF_REFERENCE_HELPER' | localize }}</p>\r\n </div>\r\n\r\n<!-- <div class=\"rotation-input-container\" *ngIf=\"draftingMode === 'scaling'\">-->\r\n<!-- rotatiedingen-->\r\n<!-- </div>-->\r\n\r\n <div class=\"zoom-button-containers\" *ngIf=\"draftingMode === 'movement'\">\r\n <button (click)=\"clickingZoom('in')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_in</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('reset')\">\r\n <mat-icon class=\"homedecorator-material-icons\">all_out</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('out')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_out</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"main-button-container\">\r\n <mat-button-toggle-group\r\n class=\"mode-toggle\"\r\n (change)=\"setModus($event.value)\"\r\n [value]=\"draftingMode\">\r\n <mat-button-toggle [value]=\"'movement'\" [matTooltip]=\"'Zoom / verplaats modus'\">\r\n <mat-icon svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'scaling'\" [matTooltip]=\"'Maak referentie meting'\">\r\n <mat-icon svgIcon=\"pen-ruler\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"canvas-wrapper\">\r\n <canvas\r\n #drawCanvas\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n ></canvas>\r\n</div>\r\n\r\n<div class=\"save-cancel-button-container\">\r\n <button (click)=\"cancelAndReset()\">\r\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n <button (click)=\"submitLength()\" title=\"Opslaan\" *ngIf=\"draftingMode === 'scaling'\">\r\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\r\n <span>Ok</span>\r\n </button>\r\n</div>\r\n\r\n<img #hiddenImage src=\"\" style=\"display: none;\">\r\n", styles: ["canvas{position:relative}button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}button:hover{background:#dda73f;color:#fff}.main-button-container{display:flex;justify-content:center;margin-bottom:15px}.main-button-container .mat-button-toggle-checked{background:#dda73f;color:#fff}.reference-input-container .input-button-container{display:flex;align-items:center}.reference-input-container .input-button-container input{min-width:285px;border:1px solid #f7f7f9;border-radius:3px;height:35px;line-height:35px;box-sizing:border-box;padding:10px}.reference-input-container .input-button-container input:disabled{background:#f7f7f9;cursor:default}.reference-input-container .input-button-container button{border:none;display:inline-block}.reference-input-container .helper-text{font-size:13px;font-style:italic;margin:0;padding:0;display:block}.zoom-button-containers{display:flex;justify-items:center;justify-content:right}.zoom-button-containers button{margin:0 5px}.save-cancel-button-container{display:flex;justify-content:center;justify-items:center}.save-cancel-button-container button{margin:3px 10px;padding:8px 15px}.save-cancel-button-container button .homedecorator-material-icons{font-size:18px}.save-cancel-button-container button span{line-height:18px;font-size:15px}.canvas-wrapper{overflow:hidden;max-height:60vh;max-width:80vw}\n"], components: [{ type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8__namespace$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i1__namespace$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "localize": LocalizePipe } });
44127
44174
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: DrawDialogComponent, decorators: [{
44128
44175
  type: i0.Component,
44129
44176
  args: [{
@@ -44430,9 +44477,10 @@
44430
44477
  });
44431
44478
  };
44432
44479
  var ModelPreviewComponent = /** @class */ (function () {
44433
- function ModelPreviewComponent(data, settingsService, _dialogRef, _thirdPartyModelService, _messageService, _dialog, _adapterService, _lightPresetsService, _dictionaryService, _fontService) {
44480
+ function ModelPreviewComponent(data, settingsService, iconCache, _dialogRef, _thirdPartyModelService, _messageService, _dialog, _adapterService, _lightPresetsService, _dictionaryService, _fontService) {
44434
44481
  this.data = data;
44435
44482
  this.settingsService = settingsService;
44483
+ this.iconCache = iconCache;
44436
44484
  this._dialogRef = _dialogRef;
44437
44485
  this._thirdPartyModelService = _thirdPartyModelService;
44438
44486
  this._messageService = _messageService;
@@ -44442,6 +44490,7 @@
44442
44490
  this._dictionaryService = _dictionaryService;
44443
44491
  this._fontService = _fontService;
44444
44492
  this.unitsOfMeasurement = 'cm';
44493
+ this.units = ['cm', 'inches'];
44445
44494
  this.mathPi = Math.PI;
44446
44495
  this.showReferenceModel = true;
44447
44496
  this.floorSizeHeight = 10;
@@ -44451,16 +44500,23 @@
44451
44500
  this.distanceStep = 1;
44452
44501
  this.stackable = false;
44453
44502
  this.heightAdjustable = false;
44503
+ this.selectedPlacement = 0;
44454
44504
  this._measurements = [];
44505
+ this.icon = IconEnum;
44455
44506
  this.font = this._fontService.hudFont;
44456
44507
  }
44457
44508
  ModelPreviewComponent.prototype.ngOnInit = function () {
44509
+ var _this = this;
44458
44510
  this.initScene();
44459
44511
  this.loadModel(this.data);
44512
+ this._adapterService.getModelPlacementOptions().then(function (result) {
44513
+ _this.placementOptions = result;
44514
+ });
44460
44515
  };
44461
44516
  ModelPreviewComponent.prototype.ngOnDestroy = function () {
44462
44517
  };
44463
44518
  ModelPreviewComponent.prototype.initScene = function () {
44519
+ var viewScale = 1.3;
44464
44520
  // init scene
44465
44521
  this.scenePreview = new THREE.Scene();
44466
44522
  // init renderer
@@ -44484,11 +44540,11 @@
44484
44540
  this.rendererPreview.outputColorSpace = THREE.LinearSRGBColorSpace;
44485
44541
  canvReference.appendChild(this.rendererPreview.domElement);
44486
44542
  this.rendererPreview.domElement.setAttribute('id', 'threed');
44487
- this.rendererPreview.setSize(window.innerWidth / 2, window.innerHeight / 2, true);
44543
+ this.rendererPreview.setSize(window.innerHeight / viewScale, window.innerHeight / viewScale, true);
44488
44544
  // init camera
44489
44545
  this.cameraPreview = new THREE.PerspectiveCamera(45, 1, 0.01, 100000000);
44490
44546
  this.cameraPreview.position.set(0, 2, 10);
44491
- this.cameraPreview.aspect = window.innerWidth / window.innerHeight;
44547
+ this.cameraPreview.aspect = (window.innerHeight / viewScale) / (window.innerHeight / viewScale);
44492
44548
  this.cameraPreview.updateProjectionMatrix();
44493
44549
  this.controls = new OrbitControls.OrbitControls(this.cameraPreview, this.rendererPreview.domElement);
44494
44550
  this.controls.update();
@@ -44618,6 +44674,7 @@
44618
44674
  }, options);
44619
44675
  };
44620
44676
  ModelPreviewComponent.prototype.scaleArticle = function () {
44677
+ var model = this.scenePreview.getObjectByName(this.modelName);
44621
44678
  var inputHeight = this.heightArticle.nativeElement.value;
44622
44679
  var heightInMeter;
44623
44680
  if (this.unitsOfMeasurement === 'cm') {
@@ -44628,7 +44685,8 @@
44628
44685
  }
44629
44686
  // scale = this.bounding / heightInMeter and use Y as up/ height
44630
44687
  var scale = this.boundingBoxSize.y / heightInMeter;
44631
- this.scenePreview.getObjectByName(this.modelName).scale.set(this.scenePreview.children[0].scale.x / scale, this.scenePreview.children[0].scale.y / scale, this.scenePreview.children[0].scale.z / scale);
44688
+ model.scale.set(model.scale.x / scale, model.scale.y / scale, model.scale.z / scale);
44689
+ this._getBoundingBox(model);
44632
44690
  };
44633
44691
  ModelPreviewComponent.prototype.rotateModel = function (axis, degrees) {
44634
44692
  var model = this.scenePreview.getObjectByName(this.modelName);
@@ -44654,12 +44712,15 @@
44654
44712
  else if (axis === 'z') {
44655
44713
  model.position.z += amount;
44656
44714
  }
44715
+ else if (axis === 'all') {
44716
+ model.position.set(0, 0, 0);
44717
+ }
44657
44718
  this._getBoundingBox(model);
44658
44719
  };
44659
44720
  ModelPreviewComponent.prototype.setUnit = function (event) {
44660
44721
  this.unitsOfMeasurement = event.value;
44661
44722
  };
44662
- ModelPreviewComponent.prototype.toggleShowReferenceModel = function () {
44723
+ ModelPreviewComponent.prototype.toggleShowReferenceModel = function ($event) {
44663
44724
  var model = this.scenePreview.getObjectByName('Reference_model');
44664
44725
  model.visible = !this.showReferenceModel;
44665
44726
  this.showReferenceModel = !this.showReferenceModel;
@@ -44723,6 +44784,8 @@
44723
44784
  });
44724
44785
  });
44725
44786
  }
44787
+ }).catch(function (error) {
44788
+ _this._messageService.emit(MessageType.RenderError, { title: 'Upload error', message: error });
44726
44789
  });
44727
44790
  return [2 /*return*/];
44728
44791
  });
@@ -44798,6 +44861,8 @@
44798
44861
  this.boundingBoxSize = boundingBox.getSize(new THREE.Vector3());
44799
44862
  this._setMeasurements(this.boundingBoxSize);
44800
44863
  this._showMeasurements();
44864
+ var modelBoxhelper = this.scenePreview.getObjectByName('modelBoxhelper');
44865
+ this.scenePreview.remove(modelBoxhelper);
44801
44866
  var boxHelper = new THREE.BoxHelper(object);
44802
44867
  boxHelper.material.color.set(0xFF00FF);
44803
44868
  boxHelper.name = 'modelBoxhelper';
@@ -44928,20 +44993,20 @@
44928
44993
  };
44929
44994
  return ModelPreviewComponent;
44930
44995
  }());
44931
- ModelPreviewComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelPreviewComponent, deps: [{ token: i1$1.MAT_DIALOG_DATA }, { token: HomedecoratorSettingsService }, { token: i1__namespace$1.MatDialogRef }, { token: ThirdPartyModelService }, { token: MessageBusService }, { token: i1__namespace$1.MatDialog }, { token: HomedecoratorConnectorAdapterService }, { token: LightPresetsService }, { token: HomedecoratorDictionaryService }, { token: FontService }], target: i0__namespace.ɵɵFactoryTarget.Component });
44932
- ModelPreviewComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModelPreviewComponent, selector: "rp-model-preview", viewQueries: [{ propertyName: "glbExportName", first: true, predicate: ["fileName"], descendants: true }, { propertyName: "heightArticle", first: true, predicate: ["heightArticle"], descendants: true }], ngImport: i0__namespace, template: "\n <div class=\"model-preview\">\n <div class=\"model-preview-container\" id=\"canvasContainer\">\n </div>\n <div class=\"model-preview-actions\">\n <div class=\"input-height-container\">\n <p>Centimeters of inches</p>\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setUnit($event)\">\n <mat-radio-button [checked]=\"true\" value=\"cm\">Height in cm</mat-radio-button>\n <mat-radio-button value=\"inches\">Height in inches</mat-radio-button>\n </mat-radio-group>\n </div>\n <div>\n <input type=\"text\" id=\"heightArticle\" #heightArticle>\n <button (click)=\"scaleArticle()\">scale</button>\n </div>\n </div>\n\n <div>\n <button (click)=\"toggleShowReferenceModel()\">Show Reference model</button>\n </div>\n\n <div class=\"rotation-button-container\">\n <p>Rotation</p>\n <div class=\"rotation-x-buttons\">\n <button (click)=\"rotateModel('x', mathPi / 2)\">x-as + 90 graden</button>\n <button (click)=\"rotateModel('x', -mathPi / 2)\">x-as - 90 graden</button>\n </div>\n <div class=\"rotation-y-buttons\">\n <button (click)=\"rotateModel('y', mathPi / 2)\">y-as + 90 graden</button>\n <button (click)=\"rotateModel('y', -mathPi / 2)\">y-as - 90 graden</button>\n </div>\n <div class=\"rotation-z-buttons\">\n <button (click)=\"rotateModel('z', mathPi / 2)\">z-as + 90 graden</button>\n <button (click)=\"rotateModel('z', -mathPi / 2)\">z-as - 90 graden</button>\n </div>\n </div>\n\n\n <div class=\"rotation-button-container\">\n <p>Positie</p>\n <div class=\"rotation-x-buttons\">\n <button (click)=\"moveModel('x', 0.01)\">x-as + 0.01</button>\n <button (click)=\"moveModel('x', -0.01)\">x-as -0.01</button>\n </div>\n <div class=\"rotation-y-buttons\">\n <button (click)=\"moveModel('y', 0.01)\">y-as + 0.01</button>\n <button (click)=\"moveModel('y', -0.01)\">y-as - 0.01</button>\n </div>\n <div class=\"rotation-z-buttons\">\n <button (click)=\"moveModel('z', 0.01)\">z-as + 0.01</button>\n <button (click)=\"moveModel('z', -0.01)\">z-as -0.01</button>\n </div>\n </div>\n\n <div class=\"model-preview-info\" *ngIf=\"this.data\">\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Name</label>\n </div>\n <div class=\"model-preview-info-right\">\n <input type=\"text\" id=\"fileName\" #fileName value=\"{{ this.data.file.file.name }}\">\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Stackable</label>\n </div>\n <div class=\"model-preview-info-right\">\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setStackable($event)\">\n <mat-radio-button [checked]=\"true\" value=\"false\">No</mat-radio-button>\n <mat-radio-button value=\"true\">Yes</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Height adjustable</label>\n </div>\n <div class=\"model-preview-info-right\">\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setHeightAdjustable($event)\">\n <mat-radio-button [checked]=\"true\" value=\"false\">No</mat-radio-button>\n <mat-radio-button value=\"true\">Yes</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Extension</label>\n </div>\n <div class=\"model-preview-info-right\">\n <label>{{ this.data.file.fileType }}</label>\n </div>\n </div>\n <button class=\"exportButton\" (click)=\"exportSceneAsGLB('upload')\">Upload to CDN and add to scene</button>\n <p></p>\n <button class=\"exportButton\" (click)=\"exportSceneAsGLB('download')\">Download model</button>\n </div>\n </div>\n </div>\n ", isInline: true, styles: [".model-preview{display:flex;flex-direction:row}.model-preview .model-preview-actions{min-width:240px;box-sizing:border-box;padding:10px 20px;border-left:1px solid #5b6875}.model-preview .model-preview-actions .model-preview-info-container{margin-bottom:10px}.model-preview .model-preview-actions .model-preview-info-container .model-preview-info-left{font-weight:bolder}.model-preview .exportButton{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}.model-preview .exportButton:hover{background:#dda73f;color:#fff}input{border:1px solid #5b6875;box-sizing:border-box;padding:3px 10px;border-radius:3px}.mat-radio-wrapper{margin:10px 0}mat-radio-group mat-radio-button{display:block}.rotation-button-container div{display:flex;justify-content:space-between;margin-bottom:10px}.rotation-button-container div button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px}.rotation-button-container div button:hover{background:#dda73f;color:#fff}\n"], components: [{ type: i9__namespace$1.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }], directives: [{ type: i9__namespace$1.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
44996
+ ModelPreviewComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelPreviewComponent, deps: [{ token: i1$1.MAT_DIALOG_DATA }, { token: HomedecoratorSettingsService }, { token: HomedecoratorIconCacheService }, { token: i1__namespace$1.MatDialogRef }, { token: ThirdPartyModelService }, { token: MessageBusService }, { token: i1__namespace$1.MatDialog }, { token: HomedecoratorConnectorAdapterService }, { token: LightPresetsService }, { token: HomedecoratorDictionaryService }, { token: FontService }], target: i0__namespace.ɵɵFactoryTarget.Component });
44997
+ ModelPreviewComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ModelPreviewComponent, selector: "rp-model-preview", viewQueries: [{ propertyName: "glbExportName", first: true, predicate: ["fileName"], descendants: true }, { propertyName: "heightArticle", first: true, predicate: ["heightArticle"], descendants: true }], ngImport: i0__namespace, template: "\n <div class=\"model-preview\">\n <div class=\"model-preview-window\">\n <div class=\"model-preview-container\" id=\"canvasContainer\"></div>\n <div class=\"model-preview-window-bottom\">\n <div>\n <mat-slide-toggle\n [checked]=\"showReferenceModel\"\n [labelPosition]=\"'after'\"\n (change)=\"toggleShowReferenceModel($event)\">\n Show Reference model\n </mat-slide-toggle>\n </div>\n <div class=\"disclaimer-text-container\">\n <p class=\"disclaimer-text\">\n Grid scale: 1 tile = 1x1 meter\n </p>\n </div>\n </div>\n </div>\n <div class=\"model-preview-actions\">\n <div class=\"input-height-container\">\n <h2>Model settings</h2>\n <div>\n <h3>Scale:</h3>\n <input type=\"text\" id=\"heightArticle\" #heightArticle placeholder=\"Set model height\">\n <mat-form-field class=\"units-select-form\">\n <mat-select class=\"units-mat-select\" [(value)]=\"unitsOfMeasurement\">\n <mat-option class=\"units-mat-option\" *ngFor=\"let unit of units\" [value]=\"unit\">{{ unit }}</mat-option>\n </mat-select>\n </mat-form-field>\n <button class=\"apply-button base-button\" (click)=\"scaleArticle()\">Apply</button>\n </div>\n </div>\n <div class=\"rotation-button-container\">\n <h3>Rotation:</h3>\n <div>\n <p>Rotate on X axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('x', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('x', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n <div>\n <p>Rotate on Y axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('y', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('y', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n <div>\n <p>Rotate on Z axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('z', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('z', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n </div>\n <div class=\"rotation-button-container\">\n <h3>Position:</h3>\n <div>\n <p>Reset to coordinates 0,0,0</p>\n <p>\n <button class=\"button-as-link\" (click)=\"moveModel('all', 0)\">\n <mat-icon svgIcon=\"retry-button\"></mat-icon>\n Reset\n </button>\n </p>\n </div>\n <div>\n <p>Move on the Y axis (0.01 unit)</p>\n <p>\n <button (click)=\"moveModel('y', -0.01)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"moveModel('y', 0.01)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <h3>Properties:</h3>\n <div>\n <mat-slide-toggle\n [checked]=\"false\"\n [labelPosition]=\"'before'\"\n (change)=\"setStackable($event)\">\n Stackable\n </mat-slide-toggle>\n </div>\n <div>\n <mat-slide-toggle\n [checked]=\"false\"\n [labelPosition]=\"'before'\"\n (change)=\"setHeightAdjustable($event)\">\n Height adjustable\n </mat-slide-toggle>\n </div>\n\n <div class=\"model-placement-container\">\n <div>\n <label>Placement</label>\n\n <mat-form-field *ngIf=\"placementOptions\">\n <mat-select [(value)]=\"selectedPlacement\">\n <mat-option *ngFor=\"let placementOption of placementOptions\"\n [value]=\"placementOption.code\">{{ placementOption.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info\" *ngIf=\"this.data\">\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Save as:</label>\n </div>\n <div class=\"model-preview-info-right\">\n <input type=\"text\" id=\"fileName\" #fileName value=\"{{ this.data.file.file.name }}\">\n </div>\n </div>\n <div>\n <button class=\"base-button exportButton\" (click)=\"exportSceneAsGLB('upload')\">Upload and add to scene</button>\n <button class=\"base-button exportButtonDark\" (click)=\"exportSceneAsGLB('download')\">Download</button>\n </div>\n </div>\n </div>\n </div>\n ", isInline: true, styles: [".model-preview{display:flex;flex-direction:row;font-size:14px}.model-preview .model-preview-window .model-preview-window-bottom{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.model-preview .model-preview-window .model-preview-window-bottom .disclaimer-text-container{padding-right:20px;text-align:right;font-style:italic;font-size:12px}.model-preview .model-preview-actions{min-width:350px;box-sizing:border-box;padding:10px 20px;border-left:1px solid #5b6875}.model-preview .model-preview-actions #heightArticle{max-width:160px}.model-preview .model-preview-actions .units-select-form{width:80px;margin:0 5px}.model-preview .model-preview-actions .model-preview-info-container{margin-bottom:10px}.model-preview .model-preview-actions .model-preview-info-container .model-preview-info-left{font-weight:bolder}.model-preview .model-preview-actions .model-preview-info{margin-top:80px}.model-preview .exportButton{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}.model-preview .exportButton:hover{background:#dda73f;color:#fff}.model-preview input{border:1px solid #5b6875;box-sizing:border-box;padding:3px 10px;border-radius:3px;line-height:30px;width:100%}.mat-radio-wrapper{margin:10px 0}mat-radio-group mat-radio-button{display:block}.base-button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:4px 10px;line-height:30px}.base-button:hover{background:#dda73f;color:#fff}.model-placement-container div{display:flex;justify-content:space-between;margin:5px 0;align-items:center}.rotation-button-container div{display:flex;justify-content:space-between;margin-bottom:5px}.rotation-button-container div p{margin:0;padding:0}.rotation-button-container div button{margin:0 0 0 10px;cursor:pointer;color:#5b6875;background:#fff;border:2px solid #5b6875;border-radius:50%;box-sizing:border-box;padding:0;height:22px;width:22px;font-size:18px;text-align:center}.rotation-button-container div button:hover{background:#dda73f;color:#fff}.rotation-button-container div .button-as-link{color:#dda73f;border:none;width:100%;height:100%;font-size:14px;position:relative;top:-15px}.rotation-button-container div .button-as-link ::ng-deep mat-icon{width:25px;height:25px;position:relative;top:8px}.rotation-button-container div .button-as-link ::ng-deep mat-icon svg path{fill:#dda73f}.rotation-button-container div .button-as-link:hover{background:none;color:#dda73f}.error-container{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid #f5c6cb;border-radius:.25rem;color:#721c24;background-color:#f8d7da;max-width:190px}.exportButton,.exportButtonDark{display:inline-block!important;margin-right:10px}.exportButtonDark{background:#5b6875;border-color:#5b6875}.exportButtonDark:hover{background:#5b6875;color:#fff}:host ::ng-deep .mat-form-field-wrapper{padding-bottom:0;border:1px solid #5b6875;border-radius:4px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-infix{padding:0;border:none}:host ::ng-deep .mat-select-value{padding-left:5px}:host ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{height:0}:host ::ng-deep .mat-select-trigger{line-height:36px}:host ::ng-deep mat-icon{width:18px;height:18px}:host ::ng-deep mat-icon svg path{fill:#5b6875}:host ::ng-deep .mat-slide-toggle-content{width:calc(100% - 36px);min-width:300px}\n"], components: [{ type: i10__namespace$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i12__namespace.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3__namespace.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
44933
44998
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelPreviewComponent, decorators: [{
44934
44999
  type: i0.Component,
44935
45000
  args: [{
44936
45001
  selector: 'rp-model-preview',
44937
- template: "\n <div class=\"model-preview\">\n <div class=\"model-preview-container\" id=\"canvasContainer\">\n </div>\n <div class=\"model-preview-actions\">\n <div class=\"input-height-container\">\n <p>Centimeters of inches</p>\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setUnit($event)\">\n <mat-radio-button [checked]=\"true\" value=\"cm\">Height in cm</mat-radio-button>\n <mat-radio-button value=\"inches\">Height in inches</mat-radio-button>\n </mat-radio-group>\n </div>\n <div>\n <input type=\"text\" id=\"heightArticle\" #heightArticle>\n <button (click)=\"scaleArticle()\">scale</button>\n </div>\n </div>\n\n <div>\n <button (click)=\"toggleShowReferenceModel()\">Show Reference model</button>\n </div>\n\n <div class=\"rotation-button-container\">\n <p>Rotation</p>\n <div class=\"rotation-x-buttons\">\n <button (click)=\"rotateModel('x', mathPi / 2)\">x-as + 90 graden</button>\n <button (click)=\"rotateModel('x', -mathPi / 2)\">x-as - 90 graden</button>\n </div>\n <div class=\"rotation-y-buttons\">\n <button (click)=\"rotateModel('y', mathPi / 2)\">y-as + 90 graden</button>\n <button (click)=\"rotateModel('y', -mathPi / 2)\">y-as - 90 graden</button>\n </div>\n <div class=\"rotation-z-buttons\">\n <button (click)=\"rotateModel('z', mathPi / 2)\">z-as + 90 graden</button>\n <button (click)=\"rotateModel('z', -mathPi / 2)\">z-as - 90 graden</button>\n </div>\n </div>\n\n\n <div class=\"rotation-button-container\">\n <p>Positie</p>\n <div class=\"rotation-x-buttons\">\n <button (click)=\"moveModel('x', 0.01)\">x-as + 0.01</button>\n <button (click)=\"moveModel('x', -0.01)\">x-as -0.01</button>\n </div>\n <div class=\"rotation-y-buttons\">\n <button (click)=\"moveModel('y', 0.01)\">y-as + 0.01</button>\n <button (click)=\"moveModel('y', -0.01)\">y-as - 0.01</button>\n </div>\n <div class=\"rotation-z-buttons\">\n <button (click)=\"moveModel('z', 0.01)\">z-as + 0.01</button>\n <button (click)=\"moveModel('z', -0.01)\">z-as -0.01</button>\n </div>\n </div>\n\n <div class=\"model-preview-info\" *ngIf=\"this.data\">\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Name</label>\n </div>\n <div class=\"model-preview-info-right\">\n <input type=\"text\" id=\"fileName\" #fileName value=\"{{ this.data.file.file.name }}\">\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Stackable</label>\n </div>\n <div class=\"model-preview-info-right\">\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setStackable($event)\">\n <mat-radio-button [checked]=\"true\" value=\"false\">No</mat-radio-button>\n <mat-radio-button value=\"true\">Yes</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Height adjustable</label>\n </div>\n <div class=\"model-preview-info-right\">\n <div class=\"mat-radio-wrapper\">\n <mat-radio-group aria-label=\"Select an unit\" (change)=\"setHeightAdjustable($event)\">\n <mat-radio-button [checked]=\"true\" value=\"false\">No</mat-radio-button>\n <mat-radio-button value=\"true\">Yes</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Extension</label>\n </div>\n <div class=\"model-preview-info-right\">\n <label>{{ this.data.file.fileType }}</label>\n </div>\n </div>\n <button class=\"exportButton\" (click)=\"exportSceneAsGLB('upload')\">Upload to CDN and add to scene</button>\n <p></p>\n <button class=\"exportButton\" (click)=\"exportSceneAsGLB('download')\">Download model</button>\n </div>\n </div>\n </div>\n ",
45002
+ template: "\n <div class=\"model-preview\">\n <div class=\"model-preview-window\">\n <div class=\"model-preview-container\" id=\"canvasContainer\"></div>\n <div class=\"model-preview-window-bottom\">\n <div>\n <mat-slide-toggle\n [checked]=\"showReferenceModel\"\n [labelPosition]=\"'after'\"\n (change)=\"toggleShowReferenceModel($event)\">\n Show Reference model\n </mat-slide-toggle>\n </div>\n <div class=\"disclaimer-text-container\">\n <p class=\"disclaimer-text\">\n Grid scale: 1 tile = 1x1 meter\n </p>\n </div>\n </div>\n </div>\n <div class=\"model-preview-actions\">\n <div class=\"input-height-container\">\n <h2>Model settings</h2>\n <div>\n <h3>Scale:</h3>\n <input type=\"text\" id=\"heightArticle\" #heightArticle placeholder=\"Set model height\">\n <mat-form-field class=\"units-select-form\">\n <mat-select class=\"units-mat-select\" [(value)]=\"unitsOfMeasurement\">\n <mat-option class=\"units-mat-option\" *ngFor=\"let unit of units\" [value]=\"unit\">{{ unit }}</mat-option>\n </mat-select>\n </mat-form-field>\n <button class=\"apply-button base-button\" (click)=\"scaleArticle()\">Apply</button>\n </div>\n </div>\n <div class=\"rotation-button-container\">\n <h3>Rotation:</h3>\n <div>\n <p>Rotate on X axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('x', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('x', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n <div>\n <p>Rotate on Y axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('y', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('y', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n <div>\n <p>Rotate on Z axis (90 degrees)</p>\n <p>\n <button (click)=\"rotateModel('z', -mathPi / 2)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"rotateModel('z', mathPi / 2)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n </div>\n <div class=\"rotation-button-container\">\n <h3>Position:</h3>\n <div>\n <p>Reset to coordinates 0,0,0</p>\n <p>\n <button class=\"button-as-link\" (click)=\"moveModel('all', 0)\">\n <mat-icon svgIcon=\"retry-button\"></mat-icon>\n Reset\n </button>\n </p>\n </div>\n <div>\n <p>Move on the Y axis (0.01 unit)</p>\n <p>\n <button (click)=\"moveModel('y', -0.01)\">\n <mat-icon svgIcon=\"dash-button\"></mat-icon>\n </button>\n <button (click)=\"moveModel('y', 0.01)\">\n <mat-icon svgIcon=\"add-button\"></mat-icon>\n </button>\n </p>\n </div>\n </div>\n\n <div class=\"model-preview-info-container\">\n <h3>Properties:</h3>\n <div>\n <mat-slide-toggle\n [checked]=\"false\"\n [labelPosition]=\"'before'\"\n (change)=\"setStackable($event)\">\n Stackable\n </mat-slide-toggle>\n </div>\n <div>\n <mat-slide-toggle\n [checked]=\"false\"\n [labelPosition]=\"'before'\"\n (change)=\"setHeightAdjustable($event)\">\n Height adjustable\n </mat-slide-toggle>\n </div>\n\n <div class=\"model-placement-container\">\n <div>\n <label>Placement</label>\n\n <mat-form-field *ngIf=\"placementOptions\">\n <mat-select [(value)]=\"selectedPlacement\">\n <mat-option *ngFor=\"let placementOption of placementOptions\"\n [value]=\"placementOption.code\">{{ placementOption.description }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div class=\"model-preview-info\" *ngIf=\"this.data\">\n <div class=\"model-preview-info-container\">\n <div class=\"model-preview-info-left\">\n <label>Save as:</label>\n </div>\n <div class=\"model-preview-info-right\">\n <input type=\"text\" id=\"fileName\" #fileName value=\"{{ this.data.file.file.name }}\">\n </div>\n </div>\n <div>\n <button class=\"base-button exportButton\" (click)=\"exportSceneAsGLB('upload')\">Upload and add to scene</button>\n <button class=\"base-button exportButtonDark\" (click)=\"exportSceneAsGLB('download')\">Download</button>\n </div>\n </div>\n </div>\n </div>\n ",
44938
45003
  styleUrls: ['./model-preview.component.scss']
44939
45004
  }]
44940
45005
  }], ctorParameters: function () {
44941
45006
  return [{ type: undefined, decorators: [{
44942
45007
  type: i0.Inject,
44943
45008
  args: [i1$1.MAT_DIALOG_DATA]
44944
- }] }, { type: HomedecoratorSettingsService }, { type: i1__namespace$1.MatDialogRef }, { type: ThirdPartyModelService }, { type: MessageBusService }, { type: i1__namespace$1.MatDialog }, { type: HomedecoratorConnectorAdapterService }, { type: LightPresetsService }, { type: HomedecoratorDictionaryService }, { type: FontService }];
45009
+ }] }, { type: HomedecoratorSettingsService }, { type: HomedecoratorIconCacheService }, { type: i1__namespace$1.MatDialogRef }, { type: ThirdPartyModelService }, { type: MessageBusService }, { type: i1__namespace$1.MatDialog }, { type: HomedecoratorConnectorAdapterService }, { type: LightPresetsService }, { type: HomedecoratorDictionaryService }, { type: FontService }];
44945
45010
  }, propDecorators: { glbExportName: [{
44946
45011
  type: i0.ViewChild,
44947
45012
  args: ['fileName']
@@ -45026,7 +45091,7 @@
45026
45091
  this._subs = [];
45027
45092
  this._subs.push(this.messageService.subscribe(MessageType.SetLeftSidebar, function (templateRef) { return _this._setLeftSidebar(templateRef); }), this.messageService.subscribe(MessageType.HideLeftSidebar, function () { return _this._closeLeftSidebar({ keepTemplateRef: true }); }), this.messageService.subscribe(MessageType.RegisterToolbarIcon, function (icon) { return _this._registerToolbarIcon(icon); }), this.messageService.subscribe(MessageType.ViewModeChanged, function () { return _this._closeLeftSidebar(); }), this.messageService.subscribe(MessageType.NewRoom, function () { return _this.newRoom(); }), this.messageService.subscribe(MessageType.ShowOpenDialog, function () { return _this.openOpenDialog(); }), this.messageService.subscribe(MessageType.FinishedIOneFurnitureBuild, function () { return _this._hideToast(); }), this.messageService.subscribe(MessageType.UndefinedErrorOccured, function () { return _this._hideToast(); }), this.messageService.subscribe(MessageType.RenderServiceTryToConnect, function () { return _this._hideToast(); }), this.messageService.subscribe(MessageType.RenderServiceConnected, function () { return _this._hideToast(); }), this._toastService.showToastSub.subscribe(function (toast) { return _this._showToast(toast); }), this._screenSizeService.screenSizeChanged.subscribe(function (info) { return _this.phoneSizeScreen = info.isPhoneSize; }),
45028
45093
  // this.messageService.subscribe(MessageType.StartWithDiagram, () => this.openUploadDiagram()),
45029
- this.messageService.subscribe(MessageType.StartDrawingDiagram, function (file) { return _this.openDrawDiagram(file); }), this.messageService.subscribe(MessageType.StartCroppingPDF, function (file) { return _this.openCroppingDiagram(file); }), this.messageService.subscribe(MessageType.UserModelUploaded, function (file) { return _this.openModelPreview(file); }));
45094
+ this.messageService.subscribe(MessageType.StartDrawingDiagram, function (file) { return _this.openDrawDiagram(file); }), this.messageService.subscribe(MessageType.StartCroppingPDF, function (file) { return _this.openCroppingDiagram(file); }), this.messageService.subscribe(MessageType.UserModelUploaded, function (file) { return _this.openModelPreview(file); }), this.messageService.subscribe(MessageType.RenderError, function (data) { return _this.showRenderError(data); }));
45030
45095
  }
45031
45096
  ToolbarComponent.prototype.handleKeyDown = function (event) {
45032
45097
  if (event.ctrlKey && event.shiftKey && event.key === 'S') {
@@ -45257,6 +45322,12 @@
45257
45322
  data: { file: file }
45258
45323
  });
45259
45324
  };
45325
+ ToolbarComponent.prototype.showRenderError = function (data) {
45326
+ this._dialog.open(ErrorDialogComponent, {
45327
+ data: data
45328
+ });
45329
+ this.messageService.emit(MessageType.HideLoadingIndicator);
45330
+ };
45260
45331
  ToolbarComponent.prototype.testRender = function () {
45261
45332
  this._newRenderService.forceRenderImage();
45262
45333
  };
@@ -45315,7 +45386,7 @@
45315
45386
  return ToolbarComponent;
45316
45387
  }());
45317
45388
  ToolbarComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ToolbarComponent, deps: [{ token: AppStateService }, { token: PresetsService }, { token: MessageBusService }, { token: HomedecoratorSettingsService }, { token: LocalStorageService }, { token: ScreenSizeAnalysisService }, { token: i1__namespace$1.MatDialog }, { token: ToastService }, { token: HomedecoratorAppService }, { token: PermanentStoreService }, { token: UtilsService }, { token: ThreedselectorService }, { token: ItemService }, { token: FloorplanService }, { token: FloorService }, { token: AnimationService }, { token: DevelopmentService }, { token: NewRenderService }], target: i0__namespace.ɵɵFactoryTarget.Component });
45318
- ToolbarComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ToolbarComponent, selector: "rp-toolbar", host: { listeners: { "document:keydown": "handleKeyDown($event)" } }, viewQueries: [{ propertyName: "leftSidebar", first: true, predicate: ["leftSidebar"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <!--\n <div class=\"layer layer&#45;&#45;toolbar\">\n -->\n <mat-toolbar class=\"toolbar\" color=\"primary\">\n <button *ngIf=\"phoneSizeScreen\" mat-icon-button class=\"menu-icon\" [matMenuTriggerFor]=\"menu\">\n <mat-icon class=\"homedecorator-material-icons\">menu</mat-icon>\n </button>\n <mat-menu #menu>\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\">\n </ng-container>\n </ng-container>\n </mat-menu>\n\n <img src=\"assets/images/logo.svg\" class=\"toolbar-logo\"/>\n <img *ngIf=\"settingsService.settings.secondaryLogo\" [src]=\"settingsService.settings.secondaryLogo\"\n class=\"toolbar-logo secondary-logo\"/>\n <ng-container *ngIf=\"settingsService.settings.options.development\">\n <mat-card class=\"wip-card\">\n <mat-card-content>\n {{ 'WORK_IN_PROGRESS' | localize }}\n </mat-card-content>\n </mat-card>\n <button mat-icon-button (click)=\"loadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon>\n </button>\n <button mat-icon-button (click)=\"loadResizableRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">camera-control</mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"settingsService.settings.options.showRoomDownloadButton\">\n <button mat-icon-button (click)=\"downloadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\" matTooltip=\"{{'DOWNLOAD_ROOM_AS_GLB' | localize}}\">cloud_download</mat-icon>\n </button>\n </ng-container>\n <div class=\"hd-toolbar-spacer\"></div>\n\n<!-- <ng-container>-->\n<!-- <rp-pdf-export></rp-pdf-export>-->\n<!-- </ng-container>-->\n\n <mat-nav-list class=\"toolbar__nav\" role=\"list\">\n <div matTooltip=\"{{'NEW_ROOM' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"newRoom()\">{{ 'NEW' | localize }}</mat-list-item>\n </div>\n <div matTooltip=\"{{'OPEN_EXISTING_PLAN' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"openOpenDialog()\">{{ 'OPEN' | localize }}</mat-list-item>\n </div>\n <div *ngIf=\"storageService.errorWhenSaving\" class=\"storage-error\"\n [class.blinker]=\"showBlinkError\" matTooltip=\"{{'ERROR_SAVING_LOCALSTORAGE' | localize}}\"\n (mousemove)=\"showBlinkError = false\"\n ><span>!</span></div>\n <div [class.blinker]=\"!showSaveNotification\" matTooltip=\"{{'SAVE_THE_PLAN' | localize}}\">\n <mat-list-item\n matTooltip=\"{{'SAVE_TOOLTIP' | localize}}\"\n [matTooltipDisabled]=\"tooltipDisabled\"\n matTooltipClass=\"tooltip-red\"\n role=\"listitem\"\n (click)=\"openSaveDialog() && stopTimer()\"\n >{{ 'SAVE' | localize }}\n </mat-list-item>\n </div>\n <div\n class=\"badge\"\n matBadge=\"!\"\n matBadgeColor=\"warn\"\n matBadgePosition=\"below before\"\n matBadgeOverlap=\"true\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"badgeDisabled\">\n </div>\n </mat-nav-list>\n <div matTooltip=\"{{'SAVE_IMAGE' | localize}}\">\n <button mat-icon-button (click)=\"onTakeScreenshotClick()\">\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'UNDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Undo)\"\n [disabled]=\"presetsService.isLoading || !appState.canUndo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">undo</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Redo)\"\n [disabled]=\"presetsService.isLoading || !appState.canRedo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">redo</mat-icon>\n </button>\n </div>\n <button mat-icon-button *ngIf=\"!fullscreen\" (click)=\"requestFullscreen()\" matTooltip=\"{{'REQUEST_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen</mat-icon>\n </button>\n <button mat-icon-button *ngIf=\"fullscreen\" (click)=\"exitFullscreen()\" matTooltip=\"{{'EXIT_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen_exit</mat-icon>\n </button>\n </mat-toolbar>\n\n <limited-mode-message\n *ngIf=\"phoneSizeScreen && showLimitedModeMessage\"\n (closeClicked)=\"onCloseLimitedModeMessageClick()\">\n </limited-mode-message>\n\n <div class=\"toast-wrapper\"\n [class.success]=\"toast.type == toastType.Success\"\n [class.warning]=\"toast.type == toastType.Warning\"\n [class.error]=\"toast.type == toastType.Error\"\n *ngIf=\"toast\"\n @showToast\n [textContent]=\"toast.message\">\n </div>\n\n <mat-toolbar-row class=\"toolbar-row\">\n <mat-toolbar class=\"toolbar toolbar--secondary\" *ngIf=\"!phoneSizeScreen\">\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n <span class=\"hd-toolbar-spacer\"></span>\n <ng-container *ngFor=\"let icon of toolbarIconsBottom\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n </mat-toolbar>\n\n <mat-drawer-container class=\"drawer-container\">\n <mat-drawer class=\"drawer\" mode=\"over\" position=\"left\" #leftSidebar>\n <mat-drawer-content class=\"drawer__body\">\n <button class=\"drawer__button\" mat-icon-button (click)=\"clickCloseLeftSidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\n </button>\n <ng-container [cdkPortalOutlet]=\"leftPortal\"></ng-container>\n </mat-drawer-content>\n </mat-drawer>\n </mat-drawer-container>\n </mat-toolbar-row>\n <!--\n </div>\n -->\n ", isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;top:0;z-index:100;height:100%;width:100%;pointer-events:none}:host .hd-toolbar-spacer{display:flex;flex-basis:100%}:host .toast-wrapper{height:auto;position:absolute;top:64px;left:50%;-webkit-user-select:none;user-select:none;pointer-events:none;background:#74B77F;padding:30px;border-radius:0 0 10px 10px;min-width:150px;max-width:90%;color:#fff;text-align:center;transform:translate(-50%,-100%)}:host .toast-wrapper.warning{background:#F17300}:host .toast-wrapper.error{background:#CC2936}:host ::ng-deep .drawer__header{display:flex;align-items:center;min-height:40px;margin-bottom:16px}:host ::ng-deep .drawer__header h2{margin:0 auto 0 0}:host ::ng-deep mat-tab-header,:host ::ng-deep .FileDrop{margin-bottom:16px}:host ::ng-deep .tab--skin ::ng-deep .mat-tab-label{height:52px;min-width:auto}:host ::ng-deep .drawer p{white-space:pre-wrap}:host ::ng-deep .mat-divider{margin:16px 0 24px}:host ::ng-deep .mat-drawer-backdrop{display:none}.storage-error{min-width:30px;height:30px;display:flex;align-items:center;align-self:center;border-radius:50%;justify-content:center;background:white;color:#c00;font-size:25px;font-weight:bold}.layer--toolbar{display:flex;flex-direction:column}.toolbar{z-index:101;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.toolbar .menu-icon{min-width:50px;display:flex;justify-content:center;margin-left:-16px}.toolbar-logo{width:50px}.secondary-logo{margin-left:20px}.toolbar__nav{display:flex;flex-direction:row;padding-top:0}.toolbar__nav .mat-list-item{color:#fff;height:40px}.toolbar-row{flex:auto;display:flex;flex-direction:column;padding:0;pointer-events:none;position:relative;align-items:baseline;height:100%}.toolbar--secondary{width:64px;padding:16px 0;flex-direction:column;background:#fff;height:100%}.toolbar--secondary .drawer{flex:auto;pointer-events:none;background:transparent}.wip-card{margin-left:22px;padding:6px 22px;color:#fff;background-color:#ed912e}.drawer-container{position:static;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d}.drawer{width:420px;padding:16px;display:flex;flex-direction:column;left:65px}.toolbar,.toolbar--secondary>*,.drawer-container>*,.drawer>*{pointer-events:all}.drawer__button{min-width:initial;padding:0;border:none;position:absolute;top:0;right:0;border-radius:50%}.blinker{animation:blinker 1s linear infinite}.mat-badge-content{background-color:#b71c1c;animation:bounce 2s ease-out;animation-iteration-count:infinite;margin-left:5px}.badge{margin-right:20px;margin-bottom:20px}::ng-deep .tooltip-red{background:#b71c1c}@keyframes bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-20px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes blinker{50%{opacity:0}}::ng-deep .mat-menu-panel{width:256px!important}::ng-deep .mat-menu-panel .mat-menu-content{display:flex;flex-direction:column;padding-left:10px;padding-right:10px}::ng-deep mat-drawer-content.mat-drawer-content{display:flex;height:100%;flex-direction:column}\n"], components: [{ type: i19__namespace$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i22__namespace.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i23__namespace.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2__namespace$2.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2__namespace$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: LimitedModeMessageComponent, selector: "limited-mode-message", outputs: ["closeClicked"] }, { type: i26__namespace.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { type: i26__namespace.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { type: i26__namespace.MatDrawerContent, selector: "mat-drawer-content" }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i22__namespace.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i28__namespace.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i23__namespace.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i30__namespace.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i19__namespace$1.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }], pipes: { "localize": LocalizePipe }, animations: [
45389
+ ToolbarComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ToolbarComponent, selector: "rp-toolbar", host: { listeners: { "document:keydown": "handleKeyDown($event)" } }, viewQueries: [{ propertyName: "leftSidebar", first: true, predicate: ["leftSidebar"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <!--\n <div class=\"layer layer&#45;&#45;toolbar\">\n -->\n <mat-toolbar class=\"toolbar\" color=\"primary\">\n <button *ngIf=\"phoneSizeScreen\" mat-icon-button class=\"menu-icon\" [matMenuTriggerFor]=\"menu\">\n <mat-icon class=\"homedecorator-material-icons\">menu</mat-icon>\n </button>\n <mat-menu #menu>\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\">\n </ng-container>\n </ng-container>\n </mat-menu>\n\n <img src=\"assets/images/logo.svg\" class=\"toolbar-logo\"/>\n <img *ngIf=\"settingsService.settings.secondaryLogo\" [src]=\"settingsService.settings.secondaryLogo\"\n class=\"toolbar-logo secondary-logo\"/>\n <ng-container *ngIf=\"settingsService.settings.options.development\">\n <mat-card class=\"wip-card\">\n <mat-card-content>\n {{ 'WORK_IN_PROGRESS' | localize }}\n </mat-card-content>\n </mat-card>\n <button mat-icon-button (click)=\"loadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon>\n </button>\n <button mat-icon-button (click)=\"loadResizableRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">camera-control</mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"settingsService.settings.options.showRoomDownloadButton\">\n <button mat-icon-button (click)=\"downloadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\" matTooltip=\"{{'DOWNLOAD_ROOM_AS_GLB' | localize}}\">cloud_download</mat-icon>\n </button>\n </ng-container>\n <div class=\"hd-toolbar-spacer\"></div>\n\n <!-- <ng-container>-->\n <!-- <rp-pdf-export></rp-pdf-export>-->\n <!-- </ng-container>-->\n\n <mat-nav-list class=\"toolbar__nav\" role=\"list\">\n <div matTooltip=\"{{'NEW_ROOM' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"newRoom()\">{{ 'NEW' | localize }}</mat-list-item>\n </div>\n <div matTooltip=\"{{'OPEN_EXISTING_PLAN' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"openOpenDialog()\">{{ 'OPEN' | localize }}</mat-list-item>\n </div>\n <div *ngIf=\"storageService.errorWhenSaving\" class=\"storage-error\"\n [class.blinker]=\"showBlinkError\" matTooltip=\"{{'ERROR_SAVING_LOCALSTORAGE' | localize}}\"\n (mousemove)=\"showBlinkError = false\"\n ><span>!</span></div>\n <div [class.blinker]=\"!showSaveNotification\" matTooltip=\"{{'SAVE_THE_PLAN' | localize}}\">\n <mat-list-item\n matTooltip=\"{{'SAVE_TOOLTIP' | localize}}\"\n [matTooltipDisabled]=\"tooltipDisabled\"\n matTooltipClass=\"tooltip-red\"\n role=\"listitem\"\n (click)=\"openSaveDialog() && stopTimer()\"\n >{{ 'SAVE' | localize }}\n </mat-list-item>\n </div>\n <div\n class=\"badge\"\n matBadge=\"!\"\n matBadgeColor=\"warn\"\n matBadgePosition=\"below before\"\n matBadgeOverlap=\"true\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"badgeDisabled\">\n </div>\n </mat-nav-list>\n <div matTooltip=\"{{'SAVE_IMAGE' | localize}}\">\n <button mat-icon-button (click)=\"onTakeScreenshotClick()\">\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'UNDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Undo)\"\n [disabled]=\"presetsService.isLoading || !appState.canUndo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">undo</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Redo)\"\n [disabled]=\"presetsService.isLoading || !appState.canRedo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">redo</mat-icon>\n </button>\n </div>\n <button mat-icon-button *ngIf=\"!fullscreen\" (click)=\"requestFullscreen()\" matTooltip=\"{{'REQUEST_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen</mat-icon>\n </button>\n <button mat-icon-button *ngIf=\"fullscreen\" (click)=\"exitFullscreen()\" matTooltip=\"{{'EXIT_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen_exit</mat-icon>\n </button>\n </mat-toolbar>\n\n <limited-mode-message\n *ngIf=\"phoneSizeScreen && showLimitedModeMessage\"\n (closeClicked)=\"onCloseLimitedModeMessageClick()\">\n </limited-mode-message>\n\n <div class=\"toast-wrapper\"\n [class.success]=\"toast.type == toastType.Success\"\n [class.warning]=\"toast.type == toastType.Warning\"\n [class.error]=\"toast.type == toastType.Error\"\n *ngIf=\"toast\"\n @showToast\n [textContent]=\"toast.message\">\n </div>\n\n <mat-toolbar-row class=\"toolbar-row\">\n <mat-toolbar class=\"toolbar toolbar--secondary\" *ngIf=\"!phoneSizeScreen\">\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n <span class=\"hd-toolbar-spacer\"></span>\n <ng-container *ngFor=\"let icon of toolbarIconsBottom\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n </mat-toolbar>\n\n <mat-drawer-container class=\"drawer-container\">\n <mat-drawer class=\"drawer\" mode=\"over\" position=\"left\" #leftSidebar>\n <mat-drawer-content class=\"drawer__body\">\n <button class=\"drawer__button\" mat-icon-button (click)=\"clickCloseLeftSidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\n </button>\n <ng-container [cdkPortalOutlet]=\"leftPortal\"></ng-container>\n </mat-drawer-content>\n </mat-drawer>\n </mat-drawer-container>\n </mat-toolbar-row>\n <!--\n </div>\n -->\n ", isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;top:0;z-index:100;height:100%;width:100%;pointer-events:none}:host .hd-toolbar-spacer{display:flex;flex-basis:100%}:host .toast-wrapper{height:auto;position:absolute;top:64px;left:50%;-webkit-user-select:none;user-select:none;pointer-events:none;background:#74B77F;padding:30px;border-radius:0 0 10px 10px;min-width:150px;max-width:90%;color:#fff;text-align:center;transform:translate(-50%,-100%)}:host .toast-wrapper.warning{background:#F17300}:host .toast-wrapper.error{background:#CC2936}:host ::ng-deep .drawer__header{display:flex;align-items:center;min-height:40px;margin-bottom:16px}:host ::ng-deep .drawer__header h2{margin:0 auto 0 0}:host ::ng-deep mat-tab-header,:host ::ng-deep .FileDrop{margin-bottom:16px}:host ::ng-deep .tab--skin ::ng-deep .mat-tab-label{height:52px;min-width:auto}:host ::ng-deep .drawer p{white-space:pre-wrap}:host ::ng-deep .mat-divider{margin:16px 0 24px}:host ::ng-deep .mat-drawer-backdrop{display:none}.storage-error{min-width:30px;height:30px;display:flex;align-items:center;align-self:center;border-radius:50%;justify-content:center;background:white;color:#c00;font-size:25px;font-weight:bold}.layer--toolbar{display:flex;flex-direction:column}.toolbar{z-index:101;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.toolbar .menu-icon{min-width:50px;display:flex;justify-content:center;margin-left:-16px}.toolbar-logo{width:50px}.secondary-logo{margin-left:20px}.toolbar__nav{display:flex;flex-direction:row;padding-top:0}.toolbar__nav .mat-list-item{color:#fff;height:40px}.toolbar-row{flex:auto;display:flex;flex-direction:column;padding:0;pointer-events:none;position:relative;align-items:baseline;height:100%}.toolbar--secondary{width:64px;padding:16px 0;flex-direction:column;background:#fff;height:100%}.toolbar--secondary .drawer{flex:auto;pointer-events:none;background:transparent}.wip-card{margin-left:22px;padding:6px 22px;color:#fff;background-color:#ed912e}.drawer-container{position:static;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d}.drawer{width:420px;padding:16px;display:flex;flex-direction:column;left:65px}.toolbar,.toolbar--secondary>*,.drawer-container>*,.drawer>*{pointer-events:all}.drawer__button{min-width:initial;padding:0;border:none;position:absolute;top:0;right:0;border-radius:50%}.blinker{animation:blinker 1s linear infinite}.mat-badge-content{background-color:#b71c1c;animation:bounce 2s ease-out;animation-iteration-count:infinite;margin-left:5px}.badge{margin-right:20px;margin-bottom:20px}::ng-deep .tooltip-red{background:#b71c1c}@keyframes bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(1.1,.9) translateY(0)}30%{transform:scale(.9,1.1) translateY(-20px)}50%{transform:scale(1.05,.95) translateY(0)}57%{transform:scale(1) translateY(-7px)}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes blinker{50%{opacity:0}}::ng-deep .mat-menu-panel{width:256px!important}::ng-deep .mat-menu-panel .mat-menu-content{display:flex;flex-direction:column;padding-left:10px;padding-right:10px}::ng-deep mat-drawer-content.mat-drawer-content{display:flex;height:100%;flex-direction:column}\n"], components: [{ type: i19__namespace$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i22__namespace.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i23__namespace.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2__namespace$2.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2__namespace$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: LimitedModeMessageComponent, selector: "limited-mode-message", outputs: ["closeClicked"] }, { type: i26__namespace.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { type: i26__namespace.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { type: i26__namespace.MatDrawerContent, selector: "mat-drawer-content" }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i22__namespace.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i28__namespace.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { type: i23__namespace.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i10__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i30__namespace.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i19__namespace$1.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }], pipes: { "localize": LocalizePipe }, animations: [
45319
45390
  animations.trigger('showToast', [
45320
45391
  animations.state('void', animations.style({ 'transform-origin': 'top center', transform: 'translate(-50%, -100%)' })),
45321
45392
  animations.state('*', animations.style({ 'transform-origin': 'top center', transform: 'translate(-50%, 0)' })),
@@ -45332,7 +45403,7 @@
45332
45403
  type: i0.Component,
45333
45404
  args: [{
45334
45405
  selector: 'rp-toolbar',
45335
- template: "\n <!--\n <div class=\"layer layer&#45;&#45;toolbar\">\n -->\n <mat-toolbar class=\"toolbar\" color=\"primary\">\n <button *ngIf=\"phoneSizeScreen\" mat-icon-button class=\"menu-icon\" [matMenuTriggerFor]=\"menu\">\n <mat-icon class=\"homedecorator-material-icons\">menu</mat-icon>\n </button>\n <mat-menu #menu>\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\">\n </ng-container>\n </ng-container>\n </mat-menu>\n\n <img src=\"assets/images/logo.svg\" class=\"toolbar-logo\"/>\n <img *ngIf=\"settingsService.settings.secondaryLogo\" [src]=\"settingsService.settings.secondaryLogo\"\n class=\"toolbar-logo secondary-logo\"/>\n <ng-container *ngIf=\"settingsService.settings.options.development\">\n <mat-card class=\"wip-card\">\n <mat-card-content>\n {{ 'WORK_IN_PROGRESS' | localize }}\n </mat-card-content>\n </mat-card>\n <button mat-icon-button (click)=\"loadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon>\n </button>\n <button mat-icon-button (click)=\"loadResizableRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">camera-control</mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"settingsService.settings.options.showRoomDownloadButton\">\n <button mat-icon-button (click)=\"downloadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\" matTooltip=\"{{'DOWNLOAD_ROOM_AS_GLB' | localize}}\">cloud_download</mat-icon>\n </button>\n </ng-container>\n <div class=\"hd-toolbar-spacer\"></div>\n\n<!-- <ng-container>-->\n<!-- <rp-pdf-export></rp-pdf-export>-->\n<!-- </ng-container>-->\n\n <mat-nav-list class=\"toolbar__nav\" role=\"list\">\n <div matTooltip=\"{{'NEW_ROOM' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"newRoom()\">{{ 'NEW' | localize }}</mat-list-item>\n </div>\n <div matTooltip=\"{{'OPEN_EXISTING_PLAN' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"openOpenDialog()\">{{ 'OPEN' | localize }}</mat-list-item>\n </div>\n <div *ngIf=\"storageService.errorWhenSaving\" class=\"storage-error\"\n [class.blinker]=\"showBlinkError\" matTooltip=\"{{'ERROR_SAVING_LOCALSTORAGE' | localize}}\"\n (mousemove)=\"showBlinkError = false\"\n ><span>!</span></div>\n <div [class.blinker]=\"!showSaveNotification\" matTooltip=\"{{'SAVE_THE_PLAN' | localize}}\">\n <mat-list-item\n matTooltip=\"{{'SAVE_TOOLTIP' | localize}}\"\n [matTooltipDisabled]=\"tooltipDisabled\"\n matTooltipClass=\"tooltip-red\"\n role=\"listitem\"\n (click)=\"openSaveDialog() && stopTimer()\"\n >{{ 'SAVE' | localize }}\n </mat-list-item>\n </div>\n <div\n class=\"badge\"\n matBadge=\"!\"\n matBadgeColor=\"warn\"\n matBadgePosition=\"below before\"\n matBadgeOverlap=\"true\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"badgeDisabled\">\n </div>\n </mat-nav-list>\n <div matTooltip=\"{{'SAVE_IMAGE' | localize}}\">\n <button mat-icon-button (click)=\"onTakeScreenshotClick()\">\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'UNDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Undo)\"\n [disabled]=\"presetsService.isLoading || !appState.canUndo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">undo</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Redo)\"\n [disabled]=\"presetsService.isLoading || !appState.canRedo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">redo</mat-icon>\n </button>\n </div>\n <button mat-icon-button *ngIf=\"!fullscreen\" (click)=\"requestFullscreen()\" matTooltip=\"{{'REQUEST_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen</mat-icon>\n </button>\n <button mat-icon-button *ngIf=\"fullscreen\" (click)=\"exitFullscreen()\" matTooltip=\"{{'EXIT_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen_exit</mat-icon>\n </button>\n </mat-toolbar>\n\n <limited-mode-message\n *ngIf=\"phoneSizeScreen && showLimitedModeMessage\"\n (closeClicked)=\"onCloseLimitedModeMessageClick()\">\n </limited-mode-message>\n\n <div class=\"toast-wrapper\"\n [class.success]=\"toast.type == toastType.Success\"\n [class.warning]=\"toast.type == toastType.Warning\"\n [class.error]=\"toast.type == toastType.Error\"\n *ngIf=\"toast\"\n @showToast\n [textContent]=\"toast.message\">\n </div>\n\n <mat-toolbar-row class=\"toolbar-row\">\n <mat-toolbar class=\"toolbar toolbar--secondary\" *ngIf=\"!phoneSizeScreen\">\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n <span class=\"hd-toolbar-spacer\"></span>\n <ng-container *ngFor=\"let icon of toolbarIconsBottom\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n </mat-toolbar>\n\n <mat-drawer-container class=\"drawer-container\">\n <mat-drawer class=\"drawer\" mode=\"over\" position=\"left\" #leftSidebar>\n <mat-drawer-content class=\"drawer__body\">\n <button class=\"drawer__button\" mat-icon-button (click)=\"clickCloseLeftSidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\n </button>\n <ng-container [cdkPortalOutlet]=\"leftPortal\"></ng-container>\n </mat-drawer-content>\n </mat-drawer>\n </mat-drawer-container>\n </mat-toolbar-row>\n <!--\n </div>\n -->\n ",
45406
+ template: "\n <!--\n <div class=\"layer layer&#45;&#45;toolbar\">\n -->\n <mat-toolbar class=\"toolbar\" color=\"primary\">\n <button *ngIf=\"phoneSizeScreen\" mat-icon-button class=\"menu-icon\" [matMenuTriggerFor]=\"menu\">\n <mat-icon class=\"homedecorator-material-icons\">menu</mat-icon>\n </button>\n <mat-menu #menu>\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\">\n </ng-container>\n </ng-container>\n </mat-menu>\n\n <img src=\"assets/images/logo.svg\" class=\"toolbar-logo\"/>\n <img *ngIf=\"settingsService.settings.secondaryLogo\" [src]=\"settingsService.settings.secondaryLogo\"\n class=\"toolbar-logo secondary-logo\"/>\n <ng-container *ngIf=\"settingsService.settings.options.development\">\n <mat-card class=\"wip-card\">\n <mat-card-content>\n {{ 'WORK_IN_PROGRESS' | localize }}\n </mat-card-content>\n </mat-card>\n <button mat-icon-button (click)=\"loadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon>\n </button>\n <button mat-icon-button (click)=\"loadResizableRoom()\">\n <mat-icon class=\"homedecorator-material-icons\">camera-control</mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"settingsService.settings.options.showRoomDownloadButton\">\n <button mat-icon-button (click)=\"downloadRoom()\">\n <mat-icon class=\"homedecorator-material-icons\" matTooltip=\"{{'DOWNLOAD_ROOM_AS_GLB' | localize}}\">cloud_download</mat-icon>\n </button>\n </ng-container>\n <div class=\"hd-toolbar-spacer\"></div>\n\n <!-- <ng-container>-->\n <!-- <rp-pdf-export></rp-pdf-export>-->\n <!-- </ng-container>-->\n\n <mat-nav-list class=\"toolbar__nav\" role=\"list\">\n <div matTooltip=\"{{'NEW_ROOM' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"newRoom()\">{{ 'NEW' | localize }}</mat-list-item>\n </div>\n <div matTooltip=\"{{'OPEN_EXISTING_PLAN' | localize}}\">\n <mat-list-item role=\"listitem\" (click)=\"openOpenDialog()\">{{ 'OPEN' | localize }}</mat-list-item>\n </div>\n <div *ngIf=\"storageService.errorWhenSaving\" class=\"storage-error\"\n [class.blinker]=\"showBlinkError\" matTooltip=\"{{'ERROR_SAVING_LOCALSTORAGE' | localize}}\"\n (mousemove)=\"showBlinkError = false\"\n ><span>!</span></div>\n <div [class.blinker]=\"!showSaveNotification\" matTooltip=\"{{'SAVE_THE_PLAN' | localize}}\">\n <mat-list-item\n matTooltip=\"{{'SAVE_TOOLTIP' | localize}}\"\n [matTooltipDisabled]=\"tooltipDisabled\"\n matTooltipClass=\"tooltip-red\"\n role=\"listitem\"\n (click)=\"openSaveDialog() && stopTimer()\"\n >{{ 'SAVE' | localize }}\n </mat-list-item>\n </div>\n <div\n class=\"badge\"\n matBadge=\"!\"\n matBadgeColor=\"warn\"\n matBadgePosition=\"below before\"\n matBadgeOverlap=\"true\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"badgeDisabled\">\n </div>\n </mat-nav-list>\n <div matTooltip=\"{{'SAVE_IMAGE' | localize}}\">\n <button mat-icon-button (click)=\"onTakeScreenshotClick()\">\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'UNDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Undo)\"\n [disabled]=\"presetsService.isLoading || !appState.canUndo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">undo</mat-icon>\n </button>\n </div>\n <div matTooltip=\"{{'REDO' | localize}}\">\n <button mat-icon-button (click)=\"messageService.emit(messageType.Redo)\"\n [disabled]=\"presetsService.isLoading || !appState.canRedo()\"\n >\n <mat-icon class=\"homedecorator-material-icons\">redo</mat-icon>\n </button>\n </div>\n <button mat-icon-button *ngIf=\"!fullscreen\" (click)=\"requestFullscreen()\" matTooltip=\"{{'REQUEST_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen</mat-icon>\n </button>\n <button mat-icon-button *ngIf=\"fullscreen\" (click)=\"exitFullscreen()\" matTooltip=\"{{'EXIT_FULLSCREEN' | localize}}\">\n <mat-icon class=\"homedecorator-material-icons\">fullscreen_exit</mat-icon>\n </button>\n </mat-toolbar>\n\n <limited-mode-message\n *ngIf=\"phoneSizeScreen && showLimitedModeMessage\"\n (closeClicked)=\"onCloseLimitedModeMessageClick()\">\n </limited-mode-message>\n\n <div class=\"toast-wrapper\"\n [class.success]=\"toast.type == toastType.Success\"\n [class.warning]=\"toast.type == toastType.Warning\"\n [class.error]=\"toast.type == toastType.Error\"\n *ngIf=\"toast\"\n @showToast\n [textContent]=\"toast.message\">\n </div>\n\n <mat-toolbar-row class=\"toolbar-row\">\n <mat-toolbar class=\"toolbar toolbar--secondary\" *ngIf=\"!phoneSizeScreen\">\n <ng-container *ngFor=\"let icon of toolbarIconsTop\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n <span class=\"hd-toolbar-spacer\"></span>\n <ng-container *ngFor=\"let icon of toolbarIconsBottom\">\n <ng-container [cdkPortalOutlet]=\"icon.portal\"></ng-container>\n </ng-container>\n </mat-toolbar>\n\n <mat-drawer-container class=\"drawer-container\">\n <mat-drawer class=\"drawer\" mode=\"over\" position=\"left\" #leftSidebar>\n <mat-drawer-content class=\"drawer__body\">\n <button class=\"drawer__button\" mat-icon-button (click)=\"clickCloseLeftSidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\n </button>\n <ng-container [cdkPortalOutlet]=\"leftPortal\"></ng-container>\n </mat-drawer-content>\n </mat-drawer>\n </mat-drawer-container>\n </mat-toolbar-row>\n <!--\n </div>\n -->\n ",
45336
45407
  styleUrls: ['./toolbar.component.scss'],
45337
45408
  animations: [
45338
45409
  animations.trigger('showToast', [
@@ -45426,7 +45497,7 @@
45426
45497
  return ProductOwnCollectionComponent;
45427
45498
  }());
45428
45499
  ProductOwnCollectionComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
45429
- ProductOwnCollectionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductOwnCollectionComponent, selector: "rp-product-own-collection", inputs: { settings: "settings" }, outputs: { articleClick: "articleClick", arButtonClick: "arButtonClick" }, ngImport: i0__namespace, template: "\n <co-catalog-search\n [(settings)]=\"settings\"\n [showNavigation]=\"true\"\n [title]=\"'CATALOG' | localize\"\n [subTitle]=\"'Zoeken op artikelnummer, naam of omschrijving'\"\n [searchPlaceholder]=\"'Zoeken op artikelnummer of omschrijving'\"\n [showFilter]=\"true\"\n (onArticleClick)=\"handleArticleClick($event)\"\n (onArButtonClick)=\"handleArButtonClick($event)\"\n ></co-catalog-search>\n ", isInline: true, styles: [":host{display:block;overflow:auto}\n"], components: [{ type: i7__namespace$3.ɵbf, selector: "co-catalog-search", inputs: ["createFrozenArticle", "showNavigation", "showLandingPage", "showFilter", "showViewModes", "settings", "title", "subTitle", "searchPlaceholder"], outputs: ["settingsChange", "onLookAtArticleButtonClick", "onArButtonClick", "onAddArticleButtonClick", "onArticleClick", "onStockDetailsClick", "onExternalSourceClick"] }], pipes: { "localize": LocalizePipe } });
45500
+ ProductOwnCollectionComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductOwnCollectionComponent, selector: "rp-product-own-collection", inputs: { settings: "settings" }, outputs: { articleClick: "articleClick", arButtonClick: "arButtonClick" }, ngImport: i0__namespace, template: "\n <co-catalog-search\n [(settings)]=\"settings\"\n [showNavigation]=\"true\"\n [title]=\"'CATALOG' | localize\"\n [subTitle]=\"'Zoeken op artikelnummer, naam of omschrijving'\"\n [searchPlaceholder]=\"'Zoeken op artikelnummer of omschrijving'\"\n [showFilter]=\"true\"\n (onArticleClick)=\"handleArticleClick($event)\"\n (onArButtonClick)=\"handleArButtonClick($event)\"\n ></co-catalog-search>\n ", isInline: true, styles: [":host{display:block;overflow:auto}\n"], components: [{ type: i7__namespace$2.ɵbf, selector: "co-catalog-search", inputs: ["createFrozenArticle", "showNavigation", "showLandingPage", "showFilter", "showViewModes", "settings", "title", "subTitle", "searchPlaceholder"], outputs: ["settingsChange", "onLookAtArticleButtonClick", "onArButtonClick", "onAddArticleButtonClick", "onArticleClick", "onStockDetailsClick", "onExternalSourceClick"] }], pipes: { "localize": LocalizePipe } });
45430
45501
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionComponent, decorators: [{
45431
45502
  type: i0.Component,
45432
45503
  args: [{
@@ -45858,8 +45929,8 @@
45858
45929
  };
45859
45930
  return ProductCatalogComponent;
45860
45931
  }());
45861
- ProductCatalogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogComponent, deps: [{ token: HomedecoratorSettingsService }, { token: MessageBusService }, { token: HomedecoratorConnectorService }, { token: ScreenSizeAnalysisService }, { token: SceneService }, { token: FloorplanService }, { token: i0__namespace.Injector }, { token: i7__namespace$3.CatalogService }, { token: DynamicScriptService }, { token: HomedecoratorConnectorAdapterService }, { token: BuildFurnitureService }, { token: ThirdPartyModelService }], target: i0__namespace.ɵɵFactoryTarget.Component });
45862
- ProductCatalogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductCatalogComponent, selector: "rp-product-catalog", host: { properties: { "class.shown": "this.shown", "class.no-offset": "this.phoneSizeScreen" } }, ngImport: i0__namespace, template: "\n <div class=\"product-catalog-wrapper\">\n <div class=\"catalog-button-wrapper\" *ngIf=\"showOwnCollection || showExternalCatalog\">\n <div class=\"back-button\" (click)=\"handleBackClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back</mat-icon>\n <span class=\"back-button-span\">Terug</span>\n </div>\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"handleRefreshClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">Verversen</span>\n </div>\n\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"iframeTest()\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">iframeTest</span>\n </div>\n\n </div>\n <ng-container *ngIf=\"showOwnCollection\">\n <rp-product-own-collection\n [settings]=\"settingsService.settings\"\n (articleClick)=\"handleArticleClick($event)\"\n ></rp-product-own-collection>\n </ng-container>\n\n <ng-container *ngIf=\"homeDecoHub && !showOwnCollection && !showExternalCatalog\">\n <rp-model-uploader>\n\n </rp-model-uploader>\n </ng-container>\n\n\n <ng-container *ngIf=\"!showOwnCollection && loaded\">\n <div class=\"own-collection-button-wrapper\" (click)=\"handleShowOwnCollectionClick($event)\"\n *ngIf=\"!showExternalCatalog && settingsService.settings.options.showOwnCatalogButton\">\n <div class=\"own-collection-description\" [textContent]=\"'OWN_COLLECTION' | localize\"></div>\n <co-image [source]=\"'assets/images/logo.svg'\"></co-image>\n </div>\n <co-catalog-external-sources *ngIf=\"!showExternalCatalog\"\n (externalSourceClick)=\"handleExternalSourceClick($event)\"></co-catalog-external-sources>\n <co-catalog-external-source *ngIf=\"showExternalCatalog\"\n [options]=\"{searchOnStart: true}\"\n [externalCatalogStartupInfo]=\"catalogInfo\"\n [catalogDefinition]=\"catalogDefinition\"\n [title]=\"'CATALOG' | localize | append: ' ' | append: externalCatalogName\"\n [subTitle]=\"'Zoeken naar artikelen'\"\n [searchPlaceholder]=\"'Zoek naar artikelen'\"\n [name]=\"externalCatalogName\"\n [showFilter]=\"false\"\n (articleClick)=\"handleArticleClick($event, catalogInfo)\"\n [class.hide-filter]=\"settingsService.settings.options.showOnlyHomeDecoFilter\"\n (iFrameFeedbackReceived)=\"handleIFrameFeedback($event)\"\n ></co-catalog-external-source>\n </ng-container>\n <button mat-icon-button class=\"hide-catalog\" (click)=\"hideCatalog()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n ", isInline: true, styles: [":host{display:none;z-index:99;overflow:hidden}:host .layer{pointer-events:all!important;overflow-y:hidden;display:flex;flex-direction:column}:host .product-catalog-wrapper{display:flex;flex-direction:column;height:100%;padding:30px}:host .product-catalog-wrapper .catalog-button-wrapper{font-size:16px;margin-bottom:20px}:host .product-catalog-wrapper .co-catalog-external-source{display:flex;flex-basis:100%}:host .own-collection-button-wrapper{cursor:pointer}:host .own-collection-button-wrapper .own-collection-description{font-size:12px;font-weight:bold;text-shadow:none;text-transform:capitalize;margin:10px 0}:host .own-collection-button-wrapper .co-image{padding:25px;background:#3760a1;border-radius:10px}:host.shown{display:inline-block;position:relative;top:64px;left:64px;width:calc(100% - 64px);height:calc(100vh - 64px);background-color:#fff}:host.no-offset{left:0;width:100%;z-index:100}:host .ione-catalog{display:block;overflow:hidden}:host .ione-catalog ::ng-deep app-catalog{overflow:hidden}:host .catalog-button-wrapper .back-button,:host .catalog-button-wrapper .refresh-button{cursor:pointer;display:inline-block;font-weight:bold}:host .catalog-button-wrapper .back-button .refresh-button-span,:host .catalog-button-wrapper .back-button .back-button-span,:host .catalog-button-wrapper .refresh-button .refresh-button-span,:host .catalog-button-wrapper .refresh-button .back-button-span{vertical-align:top;line-height:25px;margin:10px 5px 0}:host .catalog-button-wrapper .button-spacer{display:inline-block;margin:0 10px}:host .product-catalog-wrapper{overflow:auto}:host .hide-catalog{position:absolute;top:6px;right:0px;z-index:100}.co-catalog-external-sources .external-source-item .co-image img{object-fit:cover}::ng-deep .co-catalog-navigation{position:relative}::ng-deep .co-catalog-navigation .navigation-overlay-wrapper{position:absolute!important;left:-40px!important;padding:20px 40px;grid-column-gap:60px}\n"], components: [{ type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ProductOwnCollectionComponent, selector: "rp-product-own-collection", inputs: ["settings"], outputs: ["articleClick", "arButtonClick"] }, { type: ModelUploaderComponent, selector: "rp-model-uploader" }, { type: i4__namespace$1.ImageComponent, selector: "co-image", inputs: ["source", "placeHolder"] }, { type: i7__namespace$3.ɵt, selector: "co-catalog-external-sources", outputs: ["externalSourceClick"] }, { type: i7__namespace$3.ɵbg, selector: "co-catalog-external-source", inputs: ["showFilter", "showNavigation", "externalCatalogStartupInfo", "catalogDefinition", "user", "title", "subTitle", "searchPlaceholder", "options", "name"], outputs: ["articleClick", "addArticleClick", "iFrameFeedbackReceived"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe, "append": AppendPipe } });
45932
+ ProductCatalogComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogComponent, deps: [{ token: HomedecoratorSettingsService }, { token: MessageBusService }, { token: HomedecoratorConnectorService }, { token: ScreenSizeAnalysisService }, { token: SceneService }, { token: FloorplanService }, { token: i0__namespace.Injector }, { token: i7__namespace$2.CatalogService }, { token: DynamicScriptService }, { token: HomedecoratorConnectorAdapterService }, { token: BuildFurnitureService }, { token: ThirdPartyModelService }], target: i0__namespace.ɵɵFactoryTarget.Component });
45933
+ ProductCatalogComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductCatalogComponent, selector: "rp-product-catalog", host: { properties: { "class.shown": "this.shown", "class.no-offset": "this.phoneSizeScreen" } }, ngImport: i0__namespace, template: "\n <div class=\"product-catalog-wrapper\">\n <div class=\"catalog-button-wrapper\" *ngIf=\"showOwnCollection || showExternalCatalog\">\n <div class=\"back-button\" (click)=\"handleBackClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back</mat-icon>\n <span class=\"back-button-span\">Terug</span>\n </div>\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"handleRefreshClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">Verversen</span>\n </div>\n\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"iframeTest()\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">iframeTest</span>\n </div>\n\n </div>\n <ng-container *ngIf=\"showOwnCollection\">\n <rp-product-own-collection\n [settings]=\"settingsService.settings\"\n (articleClick)=\"handleArticleClick($event)\"\n ></rp-product-own-collection>\n </ng-container>\n\n <ng-container *ngIf=\"homeDecoHub && !showOwnCollection && !showExternalCatalog\">\n <rp-model-uploader>\n\n </rp-model-uploader>\n </ng-container>\n\n\n <ng-container *ngIf=\"!showOwnCollection && loaded\">\n <div class=\"own-collection-button-wrapper\" (click)=\"handleShowOwnCollectionClick($event)\"\n *ngIf=\"!showExternalCatalog && settingsService.settings.options.showOwnCatalogButton\">\n <div class=\"own-collection-description\" [textContent]=\"'OWN_COLLECTION' | localize\"></div>\n <co-image [source]=\"'assets/images/logo.svg'\"></co-image>\n </div>\n <co-catalog-external-sources *ngIf=\"!showExternalCatalog\"\n (externalSourceClick)=\"handleExternalSourceClick($event)\"></co-catalog-external-sources>\n <co-catalog-external-source *ngIf=\"showExternalCatalog\"\n [options]=\"{searchOnStart: true}\"\n [externalCatalogStartupInfo]=\"catalogInfo\"\n [catalogDefinition]=\"catalogDefinition\"\n [title]=\"'CATALOG' | localize | append: ' ' | append: externalCatalogName\"\n [subTitle]=\"'Zoeken naar artikelen'\"\n [searchPlaceholder]=\"'Zoek naar artikelen'\"\n [name]=\"externalCatalogName\"\n [showFilter]=\"false\"\n (articleClick)=\"handleArticleClick($event, catalogInfo)\"\n [class.hide-filter]=\"settingsService.settings.options.showOnlyHomeDecoFilter\"\n (iFrameFeedbackReceived)=\"handleIFrameFeedback($event)\"\n ></co-catalog-external-source>\n </ng-container>\n <button mat-icon-button class=\"hide-catalog\" (click)=\"hideCatalog()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n ", isInline: true, styles: [":host{display:none;z-index:99;overflow:hidden}:host .layer{pointer-events:all!important;overflow-y:hidden;display:flex;flex-direction:column}:host .product-catalog-wrapper{display:flex;flex-direction:column;height:100%;padding:30px}:host .product-catalog-wrapper .catalog-button-wrapper{font-size:16px;margin-bottom:20px}:host .product-catalog-wrapper .co-catalog-external-source{display:flex;flex-basis:100%}:host .own-collection-button-wrapper{cursor:pointer}:host .own-collection-button-wrapper .own-collection-description{font-size:12px;font-weight:bold;text-shadow:none;text-transform:capitalize;margin:10px 0}:host .own-collection-button-wrapper .co-image{padding:25px;background:#3760a1;border-radius:10px}:host.shown{display:inline-block;position:relative;top:64px;left:64px;width:calc(100% - 64px);height:calc(100vh - 64px);background-color:#fff}:host.no-offset{left:0;width:100%;z-index:100}:host .ione-catalog{display:block;overflow:hidden}:host .ione-catalog ::ng-deep app-catalog{overflow:hidden}:host .catalog-button-wrapper .back-button,:host .catalog-button-wrapper .refresh-button{cursor:pointer;display:inline-block;font-weight:bold}:host .catalog-button-wrapper .back-button .refresh-button-span,:host .catalog-button-wrapper .back-button .back-button-span,:host .catalog-button-wrapper .refresh-button .refresh-button-span,:host .catalog-button-wrapper .refresh-button .back-button-span{vertical-align:top;line-height:25px;margin:10px 5px 0}:host .catalog-button-wrapper .button-spacer{display:inline-block;margin:0 10px}:host .product-catalog-wrapper{overflow:auto}:host .hide-catalog{position:absolute;top:6px;right:0px;z-index:100}.co-catalog-external-sources .external-source-item .co-image img{object-fit:cover}::ng-deep .co-catalog-navigation{position:relative}::ng-deep .co-catalog-navigation .navigation-overlay-wrapper{position:absolute!important;left:-40px!important;padding:20px 40px;grid-column-gap:60px}\n"], components: [{ type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ProductOwnCollectionComponent, selector: "rp-product-own-collection", inputs: ["settings"], outputs: ["articleClick", "arButtonClick"] }, { type: ModelUploaderComponent, selector: "rp-model-uploader" }, { type: i4__namespace$1.ImageComponent, selector: "co-image", inputs: ["source", "placeHolder"] }, { type: i7__namespace$2.ɵt, selector: "co-catalog-external-sources", outputs: ["externalSourceClick"] }, { type: i7__namespace$2.ɵbg, selector: "co-catalog-external-source", inputs: ["showFilter", "showNavigation", "externalCatalogStartupInfo", "catalogDefinition", "user", "title", "subTitle", "searchPlaceholder", "options", "name"], outputs: ["articleClick", "addArticleClick", "iFrameFeedbackReceived"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe, "append": AppendPipe } });
45863
45934
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogComponent, decorators: [{
45864
45935
  type: i0.Component,
45865
45936
  args: [{
@@ -45867,7 +45938,7 @@
45867
45938
  template: "\n <div class=\"product-catalog-wrapper\">\n <div class=\"catalog-button-wrapper\" *ngIf=\"showOwnCollection || showExternalCatalog\">\n <div class=\"back-button\" (click)=\"handleBackClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back</mat-icon>\n <span class=\"back-button-span\">Terug</span>\n </div>\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"handleRefreshClick($event)\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">Verversen</span>\n </div>\n\n <div class=\"button-spacer\"></div>\n <div class=\"refresh-button\" (click)=\"iframeTest()\">\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\n <span class=\"refresh-button-span\">iframeTest</span>\n </div>\n\n </div>\n <ng-container *ngIf=\"showOwnCollection\">\n <rp-product-own-collection\n [settings]=\"settingsService.settings\"\n (articleClick)=\"handleArticleClick($event)\"\n ></rp-product-own-collection>\n </ng-container>\n\n <ng-container *ngIf=\"homeDecoHub && !showOwnCollection && !showExternalCatalog\">\n <rp-model-uploader>\n\n </rp-model-uploader>\n </ng-container>\n\n\n <ng-container *ngIf=\"!showOwnCollection && loaded\">\n <div class=\"own-collection-button-wrapper\" (click)=\"handleShowOwnCollectionClick($event)\"\n *ngIf=\"!showExternalCatalog && settingsService.settings.options.showOwnCatalogButton\">\n <div class=\"own-collection-description\" [textContent]=\"'OWN_COLLECTION' | localize\"></div>\n <co-image [source]=\"'assets/images/logo.svg'\"></co-image>\n </div>\n <co-catalog-external-sources *ngIf=\"!showExternalCatalog\"\n (externalSourceClick)=\"handleExternalSourceClick($event)\"></co-catalog-external-sources>\n <co-catalog-external-source *ngIf=\"showExternalCatalog\"\n [options]=\"{searchOnStart: true}\"\n [externalCatalogStartupInfo]=\"catalogInfo\"\n [catalogDefinition]=\"catalogDefinition\"\n [title]=\"'CATALOG' | localize | append: ' ' | append: externalCatalogName\"\n [subTitle]=\"'Zoeken naar artikelen'\"\n [searchPlaceholder]=\"'Zoek naar artikelen'\"\n [name]=\"externalCatalogName\"\n [showFilter]=\"false\"\n (articleClick)=\"handleArticleClick($event, catalogInfo)\"\n [class.hide-filter]=\"settingsService.settings.options.showOnlyHomeDecoFilter\"\n (iFrameFeedbackReceived)=\"handleIFrameFeedback($event)\"\n ></co-catalog-external-source>\n </ng-container>\n <button mat-icon-button class=\"hide-catalog\" (click)=\"hideCatalog()\">\n <mat-icon class=\"homedecorator-material-icons\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n ",
45868
45939
  styleUrls: ['./product-catalog.component.scss']
45869
45940
  }]
45870
- }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: MessageBusService }, { type: HomedecoratorConnectorService }, { type: ScreenSizeAnalysisService }, { type: SceneService }, { type: FloorplanService }, { type: i0__namespace.Injector }, { type: i7__namespace$3.CatalogService }, { type: DynamicScriptService }, { type: HomedecoratorConnectorAdapterService }, { type: BuildFurnitureService }, { type: ThirdPartyModelService }]; }, propDecorators: { shown: [{
45941
+ }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: MessageBusService }, { type: HomedecoratorConnectorService }, { type: ScreenSizeAnalysisService }, { type: SceneService }, { type: FloorplanService }, { type: i0__namespace.Injector }, { type: i7__namespace$2.CatalogService }, { type: DynamicScriptService }, { type: HomedecoratorConnectorAdapterService }, { type: BuildFurnitureService }, { type: ThirdPartyModelService }]; }, propDecorators: { shown: [{
45871
45942
  type: i0.HostBinding,
45872
45943
  args: ['class.shown']
45873
45944
  }], phoneSizeScreen: [{
@@ -46008,7 +46079,7 @@
46008
46079
  });
46009
46080
  };
46010
46081
  var HomedecoratorComponent = /** @class */ (function () {
46011
- function HomedecoratorComponent(controllerService, appState, presetsService, screenAnalysis, _componentFactoryResolver, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService) {
46082
+ function HomedecoratorComponent(controllerService, appState, presetsService, screenAnalysis, _componentFactoryResolver, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _eventService) {
46012
46083
  this.controllerService = controllerService;
46013
46084
  this.appState = appState;
46014
46085
  this.presetsService = presetsService;
@@ -46018,6 +46089,7 @@
46018
46089
  this._domSanitizer = _domSanitizer;
46019
46090
  this._messageService = _messageService;
46020
46091
  this._homedecoratorService = _homedecoratorService;
46092
+ this._eventService = _eventService;
46021
46093
  this.showClass = true;
46022
46094
  this.loaded = false;
46023
46095
  this.title = 'MyRoomPlans';
@@ -46159,7 +46231,10 @@
46159
46231
  'hand-pointer',
46160
46232
  'check',
46161
46233
  'move-phone-ar',
46162
- 'cart-shopping-regular'
46234
+ 'cart-shopping-regular',
46235
+ 'pen-ruler',
46236
+ 'dash-button',
46237
+ 'retry-button'
46163
46238
  ].map(addIcon);
46164
46239
  };
46165
46240
  HomedecoratorComponent.prototype.keyup = function (event) {
@@ -46190,6 +46265,7 @@
46190
46265
  });
46191
46266
  };
46192
46267
  HomedecoratorComponent.prototype._startWithEmptyRoom = function (switchTo2D) {
46268
+ this._eventService.dirty.next(true);
46193
46269
  var preset = Preset.CreateModelFromInterface({ filename: 'assets/presets/empty.json' });
46194
46270
  this._startWithPreset(preset, switchTo2D);
46195
46271
  };
@@ -46206,7 +46282,7 @@
46206
46282
  };
46207
46283
  return HomedecoratorComponent;
46208
46284
  }());
46209
- HomedecoratorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorComponent, deps: [{ token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i0__namespace.ComponentFactoryResolver }, { token: i5__namespace$1.MatIconRegistry }, { token: i1__namespace.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }], target: i0__namespace.ɵɵFactoryTarget.Component });
46285
+ HomedecoratorComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorComponent, deps: [{ token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i0__namespace.ComponentFactoryResolver }, { token: i5__namespace$1.MatIconRegistry }, { token: i1__namespace.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService }], target: i0__namespace.ɵɵFactoryTarget.Component });
46210
46286
  HomedecoratorComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: HomedecoratorComponent, selector: "co-homedecorator", inputs: { settings: "settings" }, host: { listeners: { "document:keyup": "keyup($event)" }, properties: { "class.co-homedecorator": "this.showClass" } }, ngImport: i0__namespace, template: "\n <div class=\"viewport\" *ngIf=\"loaded\">\n <progress-bar></progress-bar>\n <rp-loading-overlay>\n <rp-core3d></rp-core3d>\n <rp-room-planner></rp-room-planner>\n <rp-furniture-manager></rp-furniture-manager>\n <rp-presets></rp-presets>\n <rp-threedselector></rp-threedselector>\n <rp-toolbar></rp-toolbar>\n <rp-product-catalog></rp-product-catalog>\n <rp-lite-selector></rp-lite-selector>\n <rp-help></rp-help>\n </rp-loading-overlay>\n </div>\n <rp-loader [show]=\"controllerService.shouldShowLoader\"></rp-loader>\n <div *ngIf=\"shouldShowLandscapeMessage\" class=\"mobile-portrait-overlay\">\n<!--\n <mat-icon svgIcon=\"tilt-phone\" class=\"tilt-phone-icon\"></mat-icon>\n-->\n <div>\n<!--\n {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}\n-->\n </div>\n </div>\n ", isInline: true, components: [{ type: ProgressBarComponent, selector: "progress-bar" }, { type: LoadingOverlayComponent, selector: "rp-loading-overlay" }, { type: Core3dComponent, selector: "rp-core3d" }, { type: RoomPlannerComponent, selector: "rp-room-planner", inputs: ["isLoading"], outputs: ["done", "showPlugin", "focusControls"] }, { type: FurnitureManagerComponent, selector: "rp-furniture-manager" }, { type: PresetsComponent, selector: "rp-presets" }, { type: ThreedselectorComponent, selector: "rp-threedselector", inputs: ["selections"], outputs: ["customizeButtonClicked"] }, { type: ToolbarComponent, selector: "rp-toolbar" }, { type: ProductCatalogComponent, selector: "rp-product-catalog" }, { type: LiteSelectorComponent, selector: "rp-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "metadata", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { type: HelpComponent, selector: "rp-help" }, { type: HdLoaderComponent, selector: "rp-loader", inputs: ["show"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0__namespace.ViewEncapsulation.None });
46211
46287
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorComponent, decorators: [{
46212
46288
  type: i0.Component,
@@ -46215,7 +46291,7 @@
46215
46291
  template: "\n <div class=\"viewport\" *ngIf=\"loaded\">\n <progress-bar></progress-bar>\n <rp-loading-overlay>\n <rp-core3d></rp-core3d>\n <rp-room-planner></rp-room-planner>\n <rp-furniture-manager></rp-furniture-manager>\n <rp-presets></rp-presets>\n <rp-threedselector></rp-threedselector>\n <rp-toolbar></rp-toolbar>\n <rp-product-catalog></rp-product-catalog>\n <rp-lite-selector></rp-lite-selector>\n <rp-help></rp-help>\n </rp-loading-overlay>\n </div>\n <rp-loader [show]=\"controllerService.shouldShowLoader\"></rp-loader>\n <div *ngIf=\"shouldShowLandscapeMessage\" class=\"mobile-portrait-overlay\">\n<!--\n <mat-icon svgIcon=\"tilt-phone\" class=\"tilt-phone-icon\"></mat-icon>\n-->\n <div>\n<!--\n {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}\n-->\n </div>\n </div>\n ",
46216
46292
  encapsulation: i0.ViewEncapsulation.None
46217
46293
  }]
46218
- }], ctorParameters: function () { return [{ type: HomedecoratorConnectorService }, { type: AppStateService }, { type: PresetsService }, { type: ScreenSizeAnalysisService }, { type: i0__namespace.ComponentFactoryResolver }, { type: i5__namespace$1.MatIconRegistry }, { type: i1__namespace.DomSanitizer }, { type: MessageBusService }, { type: HomedecoratorService }]; }, propDecorators: { settings: [{
46294
+ }], ctorParameters: function () { return [{ type: HomedecoratorConnectorService }, { type: AppStateService }, { type: PresetsService }, { type: ScreenSizeAnalysisService }, { type: i0__namespace.ComponentFactoryResolver }, { type: i5__namespace$1.MatIconRegistry }, { type: i1__namespace.DomSanitizer }, { type: MessageBusService }, { type: HomedecoratorService }, { type: HomedecoratorAppEventService }]; }, propDecorators: { settings: [{
46219
46295
  type: i0.Input
46220
46296
  }], showClass: [{
46221
46297
  type: i0.HostBinding,
@@ -46657,10 +46733,10 @@
46657
46733
  i10.MatTooltipModule,
46658
46734
  i19.MatInputModule,
46659
46735
  i5$1.MatIconModule,
46660
- i9.MatSelectModule,
46736
+ i12.MatSelectModule,
46661
46737
  i10$1.MatSlideToggleModule,
46662
46738
  i3$2.MatGridListModule,
46663
- i15.MatProgressSpinnerModule,
46739
+ i16.MatProgressSpinnerModule,
46664
46740
  i8.FormsModule], exports: [RenderDialogComponent,
46665
46741
  RenderControlsComponent] });
46666
46742
  RenderModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderModule, providers: [
@@ -46673,10 +46749,10 @@
46673
46749
  i10.MatTooltipModule,
46674
46750
  i19.MatInputModule,
46675
46751
  i5$1.MatIconModule,
46676
- i9.MatSelectModule,
46752
+ i12.MatSelectModule,
46677
46753
  i10$1.MatSlideToggleModule,
46678
46754
  i3$2.MatGridListModule,
46679
- i15.MatProgressSpinnerModule,
46755
+ i16.MatProgressSpinnerModule,
46680
46756
  i8.FormsModule
46681
46757
  ]] });
46682
46758
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderModule, decorators: [{
@@ -46690,10 +46766,10 @@
46690
46766
  i10.MatTooltipModule,
46691
46767
  i19.MatInputModule,
46692
46768
  i5$1.MatIconModule,
46693
- i9.MatSelectModule,
46769
+ i12.MatSelectModule,
46694
46770
  i10$1.MatSlideToggleModule,
46695
46771
  i3$2.MatGridListModule,
46696
- i15.MatProgressSpinnerModule,
46772
+ i16.MatProgressSpinnerModule,
46697
46773
  i8.FormsModule
46698
46774
  ],
46699
46775
  declarations: [
@@ -46727,7 +46803,7 @@
46727
46803
  DevelopmentDirective], imports: [i5.CommonModule,
46728
46804
  i1$2.MatCheckboxModule,
46729
46805
  i8.FormsModule,
46730
- i9.MatSelectModule,
46806
+ i12.MatSelectModule,
46731
46807
  i4.IconModule,
46732
46808
  CoreModule,
46733
46809
  i3$1.MatButtonModule,
@@ -46740,7 +46816,7 @@
46740
46816
  i5.CommonModule,
46741
46817
  i1$2.MatCheckboxModule,
46742
46818
  i8.FormsModule,
46743
- i9.MatSelectModule,
46819
+ i12.MatSelectModule,
46744
46820
  i4.IconModule,
46745
46821
  CoreModule,
46746
46822
  i3$1.MatButtonModule,
@@ -46753,7 +46829,7 @@
46753
46829
  i5.CommonModule,
46754
46830
  i1$2.MatCheckboxModule,
46755
46831
  i8.FormsModule,
46756
- i9.MatSelectModule,
46832
+ i12.MatSelectModule,
46757
46833
  i4.IconModule,
46758
46834
  CoreModule,
46759
46835
  i3$1.MatButtonModule,
@@ -46936,7 +47012,7 @@
46936
47012
  // MatIconModule,
46937
47013
  i10.MatTooltipModule,
46938
47014
  i7$1.MatSliderModule,
46939
- i9.MatSelectModule,
47015
+ i12.MatSelectModule,
46940
47016
  // MatProgressBarModule,
46941
47017
  // ToolbarIconModule,
46942
47018
  // ZoomControlsModule,
@@ -46981,7 +47057,7 @@
46981
47057
  // MatIconModule,
46982
47058
  i10.MatTooltipModule,
46983
47059
  i7$1.MatSliderModule,
46984
- i9.MatSelectModule,
47060
+ i12.MatSelectModule,
46985
47061
  // MatProgressBarModule,
46986
47062
  // ToolbarIconModule,
46987
47063
  // ZoomControlsModule,
@@ -47020,7 +47096,7 @@
47020
47096
  // MatIconModule,
47021
47097
  i10.MatTooltipModule,
47022
47098
  i7$1.MatSliderModule,
47023
- i9.MatSelectModule,
47099
+ i12.MatSelectModule,
47024
47100
  // MatProgressBarModule,
47025
47101
  // ToolbarIconModule,
47026
47102
  // ZoomControlsModule,
@@ -47108,7 +47184,7 @@
47108
47184
  return EditApplyComponent;
47109
47185
  }());
47110
47186
  EditApplyComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditApplyComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
47111
- EditApplyComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditApplyComponent, selector: "rp-edit-apply", inputs: { watched: "watched", disable: "disable" }, outputs: { cancel: "cancel", apply: "apply", toggleChange: "toggleChange" }, ngImport: i0__namespace, template: "<mat-button-toggle\r\n *ngIf=\"!checked\"\r\n (change)=\"toggle($event)\">\r\n <mat-icon class=\"homedecorator-material-icons\">mode_edit</mat-icon>\r\n <span>{{'EDIT' | localize}}</span>\r\n</mat-button-toggle>\r\n<article *ngIf=\"checked\">\r\n <button mat-raised-button (click)=\"onCancel()\">\r\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\r\n </button>\r\n <button mat-raised-button\r\n [disabled]=\"!watched || disable\"\r\n (click)=\"onApply()\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">done</mat-icon>\r\n </button>\r\n</article>\r\n", styles: [""], components: [{ type: i7__namespace$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
47187
+ EditApplyComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: EditApplyComponent, selector: "rp-edit-apply", inputs: { watched: "watched", disable: "disable" }, outputs: { cancel: "cancel", apply: "apply", toggleChange: "toggleChange" }, ngImport: i0__namespace, template: "<mat-button-toggle\r\n *ngIf=\"!checked\"\r\n (change)=\"toggle($event)\">\r\n <mat-icon class=\"homedecorator-material-icons\">mode_edit</mat-icon>\r\n <span>{{'EDIT' | localize}}</span>\r\n</mat-button-toggle>\r\n<article *ngIf=\"checked\">\r\n <button mat-raised-button (click)=\"onCancel()\">\r\n <mat-icon class=\"homedecorator-material-icons\">clear</mat-icon>\r\n </button>\r\n <button mat-raised-button\r\n [disabled]=\"!watched || disable\"\r\n (click)=\"onApply()\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">done</mat-icon>\r\n </button>\r\n</article>\r\n", styles: [""], components: [{ type: i8__namespace$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": LocalizePipe } });
47112
47188
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditApplyComponent, decorators: [{
47113
47189
  type: i0.Component,
47114
47190
  args: [{
@@ -47391,7 +47467,7 @@
47391
47467
  i5.CommonModule,
47392
47468
  ContextMenuModule,
47393
47469
  i3$1.MatButtonModule,
47394
- i7$2.MatButtonToggleModule,
47470
+ i8$1.MatButtonToggleModule,
47395
47471
  i23.MatCardModule,
47396
47472
  i1$2.MatCheckboxModule,
47397
47473
  i7.MatFormFieldModule,
@@ -47402,7 +47478,7 @@
47402
47478
  i3$2.MatGridListModule,
47403
47479
  i5$1.MatIconModule,
47404
47480
  i1$4.MatTabsModule,
47405
- i9.MatSelectModule,
47481
+ i12.MatSelectModule,
47406
47482
  i6.MatDividerModule,
47407
47483
  i10.MatTooltipModule,
47408
47484
  i2$4.MatSnackBarModule,
@@ -47430,7 +47506,7 @@
47430
47506
  i5.CommonModule,
47431
47507
  ContextMenuModule,
47432
47508
  i3$1.MatButtonModule,
47433
- i7$2.MatButtonToggleModule,
47509
+ i8$1.MatButtonToggleModule,
47434
47510
  i23.MatCardModule,
47435
47511
  i1$2.MatCheckboxModule,
47436
47512
  i7.MatFormFieldModule,
@@ -47441,7 +47517,7 @@
47441
47517
  i3$2.MatGridListModule,
47442
47518
  i5$1.MatIconModule,
47443
47519
  i1$4.MatTabsModule,
47444
- i9.MatSelectModule,
47520
+ i12.MatSelectModule,
47445
47521
  i6.MatDividerModule,
47446
47522
  i10.MatTooltipModule,
47447
47523
  i2$4.MatSnackBarModule,
@@ -47467,7 +47543,7 @@
47467
47543
  i5.CommonModule,
47468
47544
  ContextMenuModule,
47469
47545
  i3$1.MatButtonModule,
47470
- i7$2.MatButtonToggleModule,
47546
+ i8$1.MatButtonToggleModule,
47471
47547
  i23.MatCardModule,
47472
47548
  i1$2.MatCheckboxModule,
47473
47549
  i7.MatFormFieldModule,
@@ -47478,7 +47554,7 @@
47478
47554
  i3$2.MatGridListModule,
47479
47555
  i5$1.MatIconModule,
47480
47556
  i1$4.MatTabsModule,
47481
- i9.MatSelectModule,
47557
+ i12.MatSelectModule,
47482
47558
  i6.MatDividerModule,
47483
47559
  i10.MatTooltipModule,
47484
47560
  i2$4.MatSnackBarModule,
@@ -47546,7 +47622,7 @@
47546
47622
  i5.CommonModule,
47547
47623
  ContextMenuModule,
47548
47624
  i3$1.MatButtonModule,
47549
- i7$2.MatButtonToggleModule,
47625
+ i8$1.MatButtonToggleModule,
47550
47626
  i26.MatSidenavModule,
47551
47627
  i23.MatCardModule,
47552
47628
  i7$1.MatSliderModule,
@@ -47567,7 +47643,7 @@
47567
47643
  i5.CommonModule,
47568
47644
  ContextMenuModule,
47569
47645
  i3$1.MatButtonModule,
47570
- i7$2.MatButtonToggleModule,
47646
+ i8$1.MatButtonToggleModule,
47571
47647
  i26.MatSidenavModule,
47572
47648
  i23.MatCardModule,
47573
47649
  i7$1.MatSliderModule,
@@ -47587,7 +47663,7 @@
47587
47663
  i5.CommonModule,
47588
47664
  ContextMenuModule,
47589
47665
  i3$1.MatButtonModule,
47590
- i7$2.MatButtonToggleModule,
47666
+ i8$1.MatButtonToggleModule,
47591
47667
  i26.MatSidenavModule,
47592
47668
  i23.MatCardModule,
47593
47669
  i7$1.MatSliderModule,
@@ -47786,7 +47862,7 @@
47786
47862
  ElementSliderComponent], imports: [i5.CommonModule,
47787
47863
  i8.FormsModule,
47788
47864
  i3$1.MatButtonModule,
47789
- i7$2.MatButtonToggleModule,
47865
+ i8$1.MatButtonToggleModule,
47790
47866
  i26.MatSidenavModule,
47791
47867
  i23.MatCardModule,
47792
47868
  i7$1.MatSliderModule,
@@ -47812,7 +47888,7 @@
47812
47888
  i5.CommonModule,
47813
47889
  i8.FormsModule,
47814
47890
  i3$1.MatButtonModule,
47815
- i7$2.MatButtonToggleModule,
47891
+ i8$1.MatButtonToggleModule,
47816
47892
  i26.MatSidenavModule,
47817
47893
  i23.MatCardModule,
47818
47894
  i7$1.MatSliderModule,
@@ -47841,7 +47917,7 @@
47841
47917
  i5.CommonModule,
47842
47918
  i8.FormsModule,
47843
47919
  i3$1.MatButtonModule,
47844
- i7$2.MatButtonToggleModule,
47920
+ i8$1.MatButtonToggleModule,
47845
47921
  i26.MatSidenavModule,
47846
47922
  i23.MatCardModule,
47847
47923
  i7$1.MatSliderModule,
@@ -48208,7 +48284,7 @@
48208
48284
  i26.MatSidenavModule,
48209
48285
  i2$2.MatListModule,
48210
48286
  i1$1.MatDialogModule,
48211
- i7$2.MatButtonToggleModule,
48287
+ i8$1.MatButtonToggleModule,
48212
48288
  i2$4.MatSnackBarModule,
48213
48289
  i19.MatInputModule,
48214
48290
  i7.MatFormFieldModule,
@@ -48238,7 +48314,7 @@
48238
48314
  i26.MatSidenavModule,
48239
48315
  i2$2.MatListModule,
48240
48316
  i1$1.MatDialogModule,
48241
- i7$2.MatButtonToggleModule,
48317
+ i8$1.MatButtonToggleModule,
48242
48318
  i2$4.MatSnackBarModule,
48243
48319
  i19.MatInputModule,
48244
48320
  i7.MatFormFieldModule,
@@ -48272,7 +48348,7 @@
48272
48348
  i26.MatSidenavModule,
48273
48349
  i2$2.MatListModule,
48274
48350
  i1$1.MatDialogModule,
48275
- i7$2.MatButtonToggleModule,
48351
+ i8$1.MatButtonToggleModule,
48276
48352
  i2$4.MatSnackBarModule,
48277
48353
  i19.MatInputModule,
48278
48354
  i7.MatFormFieldModule,
@@ -48329,11 +48405,11 @@
48329
48405
  ProductOwnCollectionModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
48330
48406
  ProductOwnCollectionModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, declarations: [ProductOwnCollectionComponent], imports: [i5.CommonModule,
48331
48407
  CoreModule,
48332
- i7$3.CatalogSearchModule], exports: [ProductOwnCollectionComponent] });
48408
+ i7$2.CatalogSearchModule], exports: [ProductOwnCollectionComponent] });
48333
48409
  ProductOwnCollectionModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, imports: [[
48334
48410
  i5.CommonModule,
48335
48411
  CoreModule,
48336
- i7$3.CatalogSearchModule
48412
+ i7$2.CatalogSearchModule
48337
48413
  ]] });
48338
48414
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, decorators: [{
48339
48415
  type: i0.NgModule,
@@ -48341,7 +48417,7 @@
48341
48417
  imports: [
48342
48418
  i5.CommonModule,
48343
48419
  CoreModule,
48344
- i7$3.CatalogSearchModule
48420
+ i7$2.CatalogSearchModule
48345
48421
  ],
48346
48422
  declarations: [
48347
48423
  ProductOwnCollectionComponent
@@ -48365,9 +48441,14 @@
48365
48441
  i3$1.MatButtonModule,
48366
48442
  i4.ButtonModule,
48367
48443
  i4$1.ImageModule,
48368
- i7$3.CatalogExternalSourcesModule,
48369
- i7$3.CatalogExternalSourceModule,
48370
- i9$1.MatRadioModule], exports: [ModelUploaderComponent] });
48444
+ i7$2.CatalogExternalSourcesModule,
48445
+ i7$2.CatalogExternalSourceModule,
48446
+ radio.MatRadioModule,
48447
+ i10$1.MatSlideToggleModule,
48448
+ i7.MatFormFieldModule,
48449
+ i3.MatOptionModule,
48450
+ i12.MatSelectModule,
48451
+ i4.IconModule], exports: [ModelUploaderComponent] });
48371
48452
  ModelUploaderModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelUploaderModule, imports: [[
48372
48453
  i5.CommonModule,
48373
48454
  CoreModule,
@@ -48375,9 +48456,14 @@
48375
48456
  i3$1.MatButtonModule,
48376
48457
  i4.ButtonModule,
48377
48458
  i4$1.ImageModule,
48378
- i7$3.CatalogExternalSourcesModule,
48379
- i7$3.CatalogExternalSourceModule,
48380
- i9$1.MatRadioModule,
48459
+ i7$2.CatalogExternalSourcesModule,
48460
+ i7$2.CatalogExternalSourceModule,
48461
+ radio.MatRadioModule,
48462
+ i10$1.MatSlideToggleModule,
48463
+ i7.MatFormFieldModule,
48464
+ i3.MatOptionModule,
48465
+ i12.MatSelectModule,
48466
+ i4.IconModule,
48381
48467
  ]] });
48382
48468
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelUploaderModule, decorators: [{
48383
48469
  type: i0.NgModule,
@@ -48389,9 +48475,14 @@
48389
48475
  i3$1.MatButtonModule,
48390
48476
  i4.ButtonModule,
48391
48477
  i4$1.ImageModule,
48392
- i7$3.CatalogExternalSourcesModule,
48393
- i7$3.CatalogExternalSourceModule,
48394
- i9$1.MatRadioModule,
48478
+ i7$2.CatalogExternalSourcesModule,
48479
+ i7$2.CatalogExternalSourceModule,
48480
+ radio.MatRadioModule,
48481
+ i10$1.MatSlideToggleModule,
48482
+ i7.MatFormFieldModule,
48483
+ i3.MatOptionModule,
48484
+ i12.MatSelectModule,
48485
+ i4.IconModule,
48395
48486
  ],
48396
48487
  exports: [
48397
48488
  ModelUploaderComponent
@@ -48415,9 +48506,9 @@
48415
48506
  i3$1.MatButtonModule,
48416
48507
  i4.ButtonModule,
48417
48508
  i4$1.ImageModule,
48418
- i7$3.CatalogExternalSourcesModule,
48509
+ i7$2.CatalogExternalSourcesModule,
48419
48510
  ProductOwnCollectionModule,
48420
- i7$3.CatalogExternalSourceModule,
48511
+ i7$2.CatalogExternalSourceModule,
48421
48512
  ModelUploaderModule], exports: [ProductCatalogComponent] });
48422
48513
  ProductCatalogModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogModule, imports: [[
48423
48514
  i5.CommonModule,
@@ -48426,9 +48517,9 @@
48426
48517
  i3$1.MatButtonModule,
48427
48518
  i4.ButtonModule,
48428
48519
  i4$1.ImageModule,
48429
- i7$3.CatalogExternalSourcesModule,
48520
+ i7$2.CatalogExternalSourcesModule,
48430
48521
  ProductOwnCollectionModule,
48431
- i7$3.CatalogExternalSourceModule,
48522
+ i7$2.CatalogExternalSourceModule,
48432
48523
  ModelUploaderModule
48433
48524
  ]] });
48434
48525
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogModule, decorators: [{
@@ -48441,9 +48532,9 @@
48441
48532
  i3$1.MatButtonModule,
48442
48533
  i4.ButtonModule,
48443
48534
  i4$1.ImageModule,
48444
- i7$3.CatalogExternalSourcesModule,
48535
+ i7$2.CatalogExternalSourcesModule,
48445
48536
  ProductOwnCollectionModule,
48446
- i7$3.CatalogExternalSourceModule,
48537
+ i7$2.CatalogExternalSourceModule,
48447
48538
  ModelUploaderModule
48448
48539
  ],
48449
48540
  exports: [