@colijnit/homedecorator 255.1.4 → 255.1.6

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 (89) 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/model/homedecorator-settings-options.d.ts +2 -0
  4. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  5. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  6. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  7. package/app/core/service/homedecorator-settings.service.d.ts +2 -1
  8. package/app/core/service/presets.service.d.ts +3 -1
  9. package/app/homedecorator.component.d.ts +3 -1
  10. package/app/homedecorator.module.d.ts +2 -1
  11. package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
  12. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
  13. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  14. package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
  15. package/app/plugins/core3d/service/scene.service.d.ts +1 -1
  16. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  17. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
  18. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
  19. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  20. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  21. package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
  22. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  23. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  24. package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
  25. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  26. package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
  27. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
  28. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  29. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  30. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  31. package/assets/icons/dash-button.svg +7 -0
  32. package/assets/icons/pen-ruler.svg +1 -0
  33. package/assets/icons/retry-button.svg +7 -0
  34. package/bundles/colijnit-homedecorator.umd.js +822 -601
  35. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  36. package/esm2015/app/app.version.js +3 -3
  37. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  38. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  39. package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
  40. package/esm2015/app/core/service/3dm-api.js +4 -4
  41. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  42. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  43. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  44. package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
  45. package/esm2015/app/core/service/presets.service.js +13 -5
  46. package/esm2015/app/core/utils/material.utils.js +3 -3
  47. package/esm2015/app/homedecorator.component.js +26 -19
  48. package/esm2015/app/homedecorator.module.js +8 -4
  49. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
  50. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  51. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  52. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  53. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  54. package/esm2015/app/plugins/core3d/items/factory.js +3 -2
  55. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  56. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
  57. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
  58. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  59. package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
  60. package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
  61. package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
  62. package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
  63. package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
  64. package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
  65. package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
  66. package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
  67. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  68. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
  69. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  70. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
  71. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  72. package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
  73. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  74. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  75. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
  76. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  77. package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
  78. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  79. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
  80. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
  81. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
  82. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  83. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  84. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  85. package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
  86. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  87. package/fesm2015/colijnit-homedecorator.js +1656 -1322
  88. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  89. 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/OutputPass'), require('three/examples/jsm/libs/lil-gui.module.min'), require('n8ao'), require('three/examples/jsm/shaders/FXAAShader'), require('three/examples/jsm/postprocessing/ShaderPass'), 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/OutputPass', 'three/examples/jsm/libs/lil-gui.module.min', 'n8ao', 'three/examples/jsm/shaders/FXAAShader', 'three/examples/jsm/postprocessing/ShaderPass', '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.OutputPass, global.GUI, global.n8ao, global.FXAAShader, global.ShaderPass, 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, OutputPass, GUI, n8ao, FXAAShader, ShaderPass, 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, i9, 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);
@@ -55,10 +54,10 @@
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) {
@@ -1514,6 +1544,8 @@
1514
1544
  this.pathTracer = false;
1515
1545
  this.ssrEnabled = false;
1516
1546
  this.maxRenderSamples = 100;
1547
+ this.aoEnabled = true;
1548
+ this.aaEnabled = true;
1517
1549
  }
1518
1550
  return HomedecoratorSettingsOptions;
1519
1551
  }());
@@ -1595,7 +1627,7 @@
1595
1627
  return value === null || value === undefined || value === '';
1596
1628
  }
1597
1629
 
1598
- var __awaiter$1l = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1630
+ var __awaiter$1k = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1599
1631
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1600
1632
  return new (P || (P = Promise))(function (resolve, reject) {
1601
1633
  function fulfilled(value) { try {
@@ -1641,7 +1673,7 @@
1641
1673
  return text ? text : key;
1642
1674
  };
1643
1675
  HomedecoratorDictionaryService.prototype.setDictionary = function (path, client, languageCode, additionalTranslationFile) {
1644
- return __awaiter$1l(this, void 0, void 0, function () {
1676
+ return __awaiter$1k(this, void 0, void 0, function () {
1645
1677
  var dictionaryData, fileName, fileName;
1646
1678
  return __generator(this, function (_a) {
1647
1679
  switch (_a.label) {
@@ -1677,7 +1709,7 @@
1677
1709
  });
1678
1710
  };
1679
1711
  HomedecoratorDictionaryService.prototype._getDictionaryData = function (path) {
1680
- return __awaiter$1l(this, void 0, void 0, function () {
1712
+ return __awaiter$1k(this, void 0, void 0, function () {
1681
1713
  return __generator(this, function (_a) {
1682
1714
  switch (_a.label) {
1683
1715
  case 0: return [4 /*yield*/, this._jsonUtilsService.readJsonFile(path, false)
@@ -1700,7 +1732,7 @@
1700
1732
  }]
1701
1733
  }], ctorParameters: function () { return [{ type: JsonUtilsService }]; } });
1702
1734
 
1703
- var __awaiter$1k = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1735
+ var __awaiter$1j = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1704
1736
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1705
1737
  return new (P || (P = Promise))(function (resolve, reject) {
1706
1738
  function fulfilled(value) { try {
@@ -1725,6 +1757,7 @@
1725
1757
  this._dictionaryService = _dictionaryService;
1726
1758
  this._connectorService = _connectorService;
1727
1759
  this.settingsLoaded = new rxjs.BehaviorSubject(false);
1760
+ this.settingsChanged = new rxjs.Subject();
1728
1761
  this._settings = new HomedecoratorSettings();
1729
1762
  // this._initializeSettings();
1730
1763
  }
@@ -1786,7 +1819,7 @@
1786
1819
  }
1787
1820
  };
1788
1821
  HomedecoratorSettingsService.prototype.initializeSettings = function () {
1789
- return __awaiter$1k(this, void 0, void 0, function () {
1822
+ return __awaiter$1j(this, void 0, void 0, function () {
1790
1823
  var jsonSettings;
1791
1824
  return __generator(this, function (_a) {
1792
1825
  switch (_a.label) {
@@ -1810,7 +1843,7 @@
1810
1843
  });
1811
1844
  };
1812
1845
  HomedecoratorSettingsService.prototype.initialize = function (settings) {
1813
- return __awaiter$1k(this, void 0, void 0, function () {
1846
+ return __awaiter$1j(this, void 0, void 0, function () {
1814
1847
  var path, e_1, path, uploadSetting;
1815
1848
  return __generator(this, function (_a) {
1816
1849
  switch (_a.label) {
@@ -1865,7 +1898,7 @@
1865
1898
  });
1866
1899
  };
1867
1900
  HomedecoratorSettingsService.prototype._checkUrlParameters = function () {
1868
- return __awaiter$1k(this, void 0, void 0, function () {
1901
+ return __awaiter$1j(this, void 0, void 0, function () {
1869
1902
  var urlParams, client, jsonSettings;
1870
1903
  return __generator(this, function (_a) {
1871
1904
  switch (_a.label) {
@@ -1896,7 +1929,7 @@
1896
1929
  }]
1897
1930
  }], ctorParameters: function () { return [{ type: JsonUtilsService }, { type: HomedecoratorDictionaryService }, { type: HomedecoratorConnectorAdapterService }]; } });
1898
1931
 
1899
- var __awaiter$1j = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1932
+ var __awaiter$1i = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1900
1933
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1901
1934
  return new (P || (P = Promise))(function (resolve, reject) {
1902
1935
  function fulfilled(value) { try {
@@ -1940,7 +1973,7 @@
1940
1973
  configurable: true
1941
1974
  });
1942
1975
  SkipButtonInfoService.prototype.getSkipButtonImageAndText = function (goodId) {
1943
- return __awaiter$1j(this, void 0, void 0, function () {
1976
+ return __awaiter$1i(this, void 0, void 0, function () {
1944
1977
  var skipButtonInfo, image;
1945
1978
  return __generator(this, function (_a) {
1946
1979
  switch (_a.label) {
@@ -2031,7 +2064,7 @@
2031
2064
  }]
2032
2065
  }] });
2033
2066
 
2034
- var __awaiter$1i = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2067
+ var __awaiter$1h = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2035
2068
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2036
2069
  return new (P || (P = Promise))(function (resolve, reject) {
2037
2070
  function fulfilled(value) { try {
@@ -2138,7 +2171,7 @@
2138
2171
  configurable: true
2139
2172
  });
2140
2173
  PermanentStoreService.prototype.updateRegisterForm = function (furniture) {
2141
- return __awaiter$1i(this, void 0, void 0, function () {
2174
+ return __awaiter$1h(this, void 0, void 0, function () {
2142
2175
  var collectiveSheetKey, collectiveSheetScriptURL, customSheetScriptURL, sheetKey, postUrl, hostUrl, payLoad;
2143
2176
  var _this = this;
2144
2177
  return __generator(this, function (_a) {
@@ -2270,7 +2303,7 @@
2270
2303
  }]
2271
2304
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: PermanentStoreService }]; } });
2272
2305
 
2273
- var __awaiter$1h = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2306
+ var __awaiter$1g = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2274
2307
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2275
2308
  return new (P || (P = Promise))(function (resolve, reject) {
2276
2309
  function fulfilled(value) { try {
@@ -2303,7 +2336,6 @@
2303
2336
  this.articleReceived = new rxjs.Subject();
2304
2337
  this.selectionsReceived = new rxjs.Subject();
2305
2338
  // public readonly decoNodesReceived: Subject<DecoNode[]> = new Subject<DecoNode[]>();
2306
- this.answerCountReceived = new rxjs.Subject();
2307
2339
  this.answersReceived = new rxjs.Subject();
2308
2340
  this.extraAnswerDataLoaded = new rxjs.Subject();
2309
2341
  // public readonly moodImagesReceived: Subject<{ answerOrSelection: Answer | Selection, imageData: string }> =
@@ -2311,12 +2343,11 @@
2311
2343
  this.selectionsAndDecosLinked = new rxjs.Subject();
2312
2344
  this.connectionReset = new rxjs.Subject();
2313
2345
  this.selectionsToDisplay = [];
2346
+ this.activeAnswers = [];
2314
2347
  this._hideLoaderTimerTimeout = 500;
2315
2348
  this._selections = [];
2316
2349
  this._currentSelections = [];
2317
2350
  this._decoNodes = [];
2318
- // private _activeQuestion: Question;
2319
- this._activeAnswers = [];
2320
2351
  this._articlePrice = 0;
2321
2352
  this._connectorOptions = new options.Options();
2322
2353
  this._subs = [];
@@ -2362,16 +2393,6 @@
2362
2393
  enumerable: false,
2363
2394
  configurable: true
2364
2395
  });
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
2396
  Object.defineProperty(HomedecoratorConnectorService.prototype, "activeSelection", {
2376
2397
  get: function () {
2377
2398
  return this._activeSelection;
@@ -2410,14 +2431,14 @@
2410
2431
  this._imageCache.clear();
2411
2432
  };
2412
2433
  HomedecoratorConnectorService.prototype.getWebViewStartupInfo = function (request) {
2413
- return __awaiter$1h(this, void 0, void 0, function () {
2434
+ return __awaiter$1g(this, void 0, void 0, function () {
2414
2435
  return __generator(this, function (_a) {
2415
2436
  return [2 /*return*/, this._connector.getWebViewStartupInfo(request)];
2416
2437
  });
2417
2438
  });
2418
2439
  };
2419
2440
  HomedecoratorConnectorService.prototype.initNodeInstance = function (sku) {
2420
- return __awaiter$1h(this, void 0, void 0, function () {
2441
+ return __awaiter$1g(this, void 0, void 0, function () {
2421
2442
  var goodId, response;
2422
2443
  return __generator(this, function (_a) {
2423
2444
  switch (_a.label) {
@@ -2433,7 +2454,7 @@
2433
2454
  });
2434
2455
  };
2435
2456
  HomedecoratorConnectorService.prototype.changeConnection = function (instanceId, oldConnection, newConnection) {
2436
- return __awaiter$1h(this, void 0, void 0, function () {
2457
+ return __awaiter$1g(this, void 0, void 0, function () {
2437
2458
  var response;
2438
2459
  return __generator(this, function (_a) {
2439
2460
  switch (_a.label) {
@@ -2450,6 +2471,10 @@
2450
2471
  this.selectionsToDisplay.length = 0;
2451
2472
  this.decoNodes.length = 0;
2452
2473
  };
2474
+ HomedecoratorConnectorService.prototype.emptyAnswersAndQuestion = function () {
2475
+ this.activeAnswers.length = 0;
2476
+ this.activeQuestion = undefined;
2477
+ };
2453
2478
  /**
2454
2479
  * Used for obsolete furniture
2455
2480
  * @param selections
@@ -2468,7 +2493,7 @@
2468
2493
  this._decoNodes = decoNodes;
2469
2494
  };
2470
2495
  HomedecoratorConnectorService.prototype.initConnection = function (forceReload) {
2471
- return __awaiter$1h(this, void 0, void 0, function () {
2496
+ return __awaiter$1g(this, void 0, void 0, function () {
2472
2497
  var settings, e_1;
2473
2498
  var _this = this;
2474
2499
  return __generator(this, function (_a) {
@@ -2516,7 +2541,7 @@
2516
2541
  // return this._connector.getJsonMatchTableArticles();
2517
2542
  // }
2518
2543
  HomedecoratorConnectorService.prototype.setInstance = function (id) {
2519
- return __awaiter$1h(this, void 0, void 0, function () {
2544
+ return __awaiter$1g(this, void 0, void 0, function () {
2520
2545
  var response;
2521
2546
  return __generator(this, function (_a) {
2522
2547
  switch (_a.label) {
@@ -2538,7 +2563,7 @@
2538
2563
  return this._copyInstance(instanceId, false, result);
2539
2564
  };
2540
2565
  HomedecoratorConnectorService.prototype.saveConfigurations = function () {
2541
- return __awaiter$1h(this, void 0, void 0, function () {
2566
+ return __awaiter$1g(this, void 0, void 0, function () {
2542
2567
  var success;
2543
2568
  return __generator(this, function (_a) {
2544
2569
  switch (_a.label) {
@@ -2554,13 +2579,13 @@
2554
2579
  });
2555
2580
  };
2556
2581
  HomedecoratorConnectorService.prototype.getArticle = function (sku, branch) {
2557
- return __awaiter$1h(this, void 0, void 0, function () {
2582
+ return __awaiter$1g(this, void 0, void 0, function () {
2558
2583
  var article;
2559
2584
  return __generator(this, function (_a) {
2560
2585
  switch (_a.label) {
2561
2586
  case 0:
2562
- this.selections = [];
2563
- this._decoNodes = [];
2587
+ this.emptySelections();
2588
+ this.emptyAnswersAndQuestion();
2564
2589
  return [4 /*yield*/, this._connector.getArticle(sku, branch)
2565
2590
  .catch(function (e) {
2566
2591
  return Promise.reject(e);
@@ -2586,7 +2611,7 @@
2586
2611
  // this._connector.getQuestionAndAnswers();
2587
2612
  // }
2588
2613
  HomedecoratorConnectorService.prototype.getQuestionAndAnswersAsync = function () {
2589
- return __awaiter$1h(this, void 0, void 0, function () {
2614
+ return __awaiter$1g(this, void 0, void 0, function () {
2590
2615
  var questionAndAnswers;
2591
2616
  var _this = this;
2592
2617
  return __generator(this, function (_a) {
@@ -2595,13 +2620,24 @@
2595
2620
  case 1:
2596
2621
  questionAndAnswers = _a.sent();
2597
2622
  questionAndAnswers.answers = questionAndAnswers.answers.filter(function (a) { return _this._isAnswerPublished(a); });
2623
+ // if (questionAndAnswers.question && !questionAndAnswers.question.grouped) {
2624
+ this.handleAnswersReceived(questionAndAnswers.answers);
2625
+ // }
2626
+ this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
2627
+ if (questionAndAnswers.answers.length === 0) {
2628
+ this.emptyAnswersAndQuestion();
2629
+ }
2630
+ else {
2631
+ this.activeQuestion = questionAndAnswers.question;
2632
+ this.activeAnswers = questionAndAnswers.answers;
2633
+ }
2598
2634
  return [2 /*return*/, questionAndAnswers];
2599
2635
  }
2600
2636
  });
2601
2637
  });
2602
2638
  };
2603
2639
  HomedecoratorConnectorService.prototype.getSelectionsAsync = function () {
2604
- return __awaiter$1h(this, void 0, void 0, function () {
2640
+ return __awaiter$1g(this, void 0, void 0, function () {
2605
2641
  var selections;
2606
2642
  return __generator(this, function (_a) {
2607
2643
  switch (_a.label) {
@@ -2621,7 +2657,7 @@
2621
2657
  });
2622
2658
  };
2623
2659
  HomedecoratorConnectorService.prototype.getDecosAsync = function () {
2624
- return __awaiter$1h(this, void 0, void 0, function () {
2660
+ return __awaiter$1g(this, void 0, void 0, function () {
2625
2661
  var _a;
2626
2662
  return __generator(this, function (_b) {
2627
2663
  switch (_b.label) {
@@ -2657,7 +2693,7 @@
2657
2693
  return this._connector.replaceSelection(selection);
2658
2694
  };
2659
2695
  HomedecoratorConnectorService.prototype.getAnswerInfo = function (answer) {
2660
- return __awaiter$1h(this, void 0, void 0, function () {
2696
+ return __awaiter$1g(this, void 0, void 0, function () {
2661
2697
  var articleTexts;
2662
2698
  return __generator(this, function (_a) {
2663
2699
  switch (_a.label) {
@@ -2672,7 +2708,7 @@
2672
2708
  };
2673
2709
  HomedecoratorConnectorService.prototype.extendWithAnswerTextAndImage = function (answer, showLoader) {
2674
2710
  if (showLoader === void 0) { showLoader = true; }
2675
- return __awaiter$1h(this, void 0, void 0, function () {
2711
+ return __awaiter$1g(this, void 0, void 0, function () {
2676
2712
  var _this = this;
2677
2713
  return __generator(this, function (_a) {
2678
2714
  if (answer.nodeId) {
@@ -2698,7 +2734,7 @@
2698
2734
  };
2699
2735
  HomedecoratorConnectorService.prototype.extendWithSelectionImage = function (selection, showLoader) {
2700
2736
  if (showLoader === void 0) { showLoader = true; }
2701
- return __awaiter$1h(this, void 0, void 0, function () {
2737
+ return __awaiter$1g(this, void 0, void 0, function () {
2702
2738
  var _this = this;
2703
2739
  return __generator(this, function (_a) {
2704
2740
  if (selection.nodeId) {
@@ -2822,7 +2858,7 @@
2822
2858
  });
2823
2859
  };
2824
2860
  HomedecoratorConnectorService.prototype.addToCart = function (goodId, goodType, quantity, instanceId, externalSource) {
2825
- return __awaiter$1h(this, void 0, void 0, function () {
2861
+ return __awaiter$1g(this, void 0, void 0, function () {
2826
2862
  var json, statistics, frozenArticle$1;
2827
2863
  return __generator(this, function (_a) {
2828
2864
  switch (_a.label) {
@@ -2850,18 +2886,11 @@
2850
2886
  });
2851
2887
  };
2852
2888
  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
- });
2889
+ this._preloadCachedImages(answers);
2890
+ this.answersReceived.next(answers);
2891
+ if (this.activeAnswers && this.activeAnswers.length > 0) {
2892
+ this._loadPricesOfActiveAnswers();
2893
+ }
2865
2894
  };
2866
2895
  HomedecoratorConnectorService.prototype._prepareSelectionsToDisplayImages = function () {
2867
2896
  var _this = this;
@@ -2966,7 +2995,7 @@
2966
2995
  };
2967
2996
  // POSTCONDITION: current activeAnswers have price values.
2968
2997
  HomedecoratorConnectorService.prototype._loadPricesOfActiveAnswers = function () {
2969
- return __awaiter$1h(this, void 0, void 0, function () {
2998
+ return __awaiter$1g(this, void 0, void 0, function () {
2970
2999
  var answerPrices;
2971
3000
  var _this = this;
2972
3001
  return __generator(this, function (_a) {
@@ -2977,7 +3006,7 @@
2977
3006
  if (answerPrices) {
2978
3007
  // paste price data onto our current answer objects; AnswerPrice.selId corresponds to Answer.node
2979
3008
  answerPrices.forEach(function (answerPrice) {
2980
- var answerMatch = _this._activeAnswers.find(function (ans) { return ans.node === answerPrice.selId; });
3009
+ var answerMatch = _this.activeAnswers.find(function (ans) { return ans.node === answerPrice.selId; });
2981
3010
  if (answerMatch) {
2982
3011
  answerMatch.price = // temp fix for price until backend is ready
2983
3012
  answerMatch.nodeLevel === 0 && answerPrice.addRetailPrice && answerMatch.seqO === 1 ?
@@ -2993,7 +3022,7 @@
2993
3022
  });
2994
3023
  };
2995
3024
  HomedecoratorConnectorService.prototype._copyInstance = function (originalInstanceId, shouldSaveCurrentInstanceId, result) {
2996
- return __awaiter$1h(this, void 0, void 0, function () {
3025
+ return __awaiter$1g(this, void 0, void 0, function () {
2997
3026
  var copyInstanceResponse, newInstanceId;
2998
3027
  return __generator(this, function (_a) {
2999
3028
  switch (_a.label) {
@@ -3038,7 +3067,7 @@
3038
3067
  }]
3039
3068
  }], ctorParameters: function () { return [{ type: HomedecoratorConnectorAdapterService }, { type: JsonUtilsService }, { type: HomedecoratorSettingsService }, { type: SkipButtonInfoService }, { type: MessageBusService }, { type: HomedecoratorAppEventService }, { type: GoogleTagManagerService }]; } });
3040
3069
 
3041
- var __awaiter$1g = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3070
+ var __awaiter$1f = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3042
3071
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3043
3072
  return new (P || (P = Promise))(function (resolve, reject) {
3044
3073
  function fulfilled(value) { try {
@@ -3095,7 +3124,7 @@
3095
3124
  window.history.replaceState(data, title, url);
3096
3125
  };
3097
3126
  AppStateService.prototype.undo = function () {
3098
- return __awaiter$1g(this, void 0, void 0, function () {
3127
+ return __awaiter$1f(this, void 0, void 0, function () {
3099
3128
  return __generator(this, function (_a) {
3100
3129
  switch (_a.label) {
3101
3130
  case 0:
@@ -3109,7 +3138,7 @@
3109
3138
  });
3110
3139
  };
3111
3140
  AppStateService.prototype.redo = function () {
3112
- return __awaiter$1g(this, void 0, void 0, function () {
3141
+ return __awaiter$1f(this, void 0, void 0, function () {
3113
3142
  return __generator(this, function (_a) {
3114
3143
  switch (_a.label) {
3115
3144
  case 0:
@@ -3387,7 +3416,7 @@
3387
3416
  }]
3388
3417
  }], ctorParameters: function () { return []; } });
3389
3418
 
3390
- var __awaiter$1f = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3419
+ var __awaiter$1e = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3391
3420
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3392
3421
  return new (P || (P = Promise))(function (resolve, reject) {
3393
3422
  function fulfilled(value) { try {
@@ -3432,7 +3461,7 @@
3432
3461
  }
3433
3462
  };
3434
3463
  LocalStorageService.prototype.getRecoverySaveState = function () {
3435
- return __awaiter$1f(this, void 0, void 0, function () {
3464
+ return __awaiter$1e(this, void 0, void 0, function () {
3436
3465
  var indexedDBSave, localStorageSave;
3437
3466
  return __generator(this, function (_a) {
3438
3467
  switch (_a.label) {
@@ -3455,7 +3484,7 @@
3455
3484
  });
3456
3485
  };
3457
3486
  LocalStorageService.prototype.getIndexedDBSaveState = function () {
3458
- return __awaiter$1f(this, void 0, void 0, function () {
3487
+ return __awaiter$1e(this, void 0, void 0, function () {
3459
3488
  var getMessage;
3460
3489
  return __generator(this, function (_a) {
3461
3490
  switch (_a.label) {
@@ -3468,7 +3497,7 @@
3468
3497
  });
3469
3498
  };
3470
3499
  LocalStorageService.prototype.writeIndexedDBSaveState = function (saveState) {
3471
- return __awaiter$1f(this, void 0, void 0, function () {
3500
+ return __awaiter$1e(this, void 0, void 0, function () {
3472
3501
  var saveMessage;
3473
3502
  return __generator(this, function (_a) {
3474
3503
  switch (_a.label) {
@@ -3485,7 +3514,7 @@
3485
3514
  });
3486
3515
  };
3487
3516
  LocalStorageService.prototype.checkForLocalSave = function () {
3488
- return __awaiter$1f(this, void 0, void 0, function () {
3517
+ return __awaiter$1e(this, void 0, void 0, function () {
3489
3518
  var indexedDBSave;
3490
3519
  return __generator(this, function (_a) {
3491
3520
  switch (_a.label) {
@@ -3517,7 +3546,7 @@
3517
3546
  }]
3518
3547
  }], ctorParameters: function () { return [{ type: WebWorkerService }]; } });
3519
3548
 
3520
- var __awaiter$1e = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3549
+ var __awaiter$1d = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3521
3550
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3522
3551
  return new (P || (P = Promise))(function (resolve, reject) {
3523
3552
  function fulfilled(value) { try {
@@ -3608,7 +3637,7 @@
3608
3637
  }
3609
3638
  };
3610
3639
  FileUtils.SaveGLBFile = function (data, assetPath) {
3611
- return __awaiter$1e(this, void 0, void 0, function () {
3640
+ return __awaiter$1d(this, void 0, void 0, function () {
3612
3641
  return __generator(this, function (_a) {
3613
3642
  return [2 /*return*/, new Promise(function (resolve, reject) {
3614
3643
  var xhr = new XMLHttpRequest();
@@ -3767,7 +3796,7 @@
3767
3796
  }());
3768
3797
  FileUtils._cachedTextureUploads = new Map();
3769
3798
 
3770
- var __awaiter$1d = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3799
+ var __awaiter$1c = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3771
3800
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3772
3801
  return new (P || (P = Promise))(function (resolve, reject) {
3773
3802
  function fulfilled(value) { try {
@@ -3791,7 +3820,7 @@
3791
3820
  this._settingsService = _settingsService;
3792
3821
  }
3793
3822
  FileService.prototype.getTotalDownloadSize = function (files) {
3794
- return __awaiter$1d(this, void 0, void 0, function () {
3823
+ return __awaiter$1c(this, void 0, void 0, function () {
3795
3824
  var url, data, response;
3796
3825
  return __generator(this, function (_a) {
3797
3826
  switch (_a.label) {
@@ -3827,7 +3856,7 @@
3827
3856
  }]
3828
3857
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }]; } });
3829
3858
 
3830
- var __awaiter$1c = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3859
+ var __awaiter$1b = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3831
3860
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3832
3861
  return new (P || (P = Promise))(function (resolve, reject) {
3833
3862
  function fulfilled(value) { try {
@@ -3864,7 +3893,7 @@
3864
3893
  configurable: true
3865
3894
  });
3866
3895
  ProgressService.prototype.prepareDownloads = function (furniture) {
3867
- return __awaiter$1c(this, void 0, void 0, function () {
3896
+ return __awaiter$1b(this, void 0, void 0, function () {
3868
3897
  var files, i, model, realUrl, url, _a;
3869
3898
  return __generator(this, function (_b) {
3870
3899
  switch (_b.label) {
@@ -4785,7 +4814,7 @@
4785
4814
  RelativePositionUtils.appOffsetTop = 0;
4786
4815
  RelativePositionUtils.appOffsetLeft = 0;
4787
4816
 
4788
- var __awaiter$1b = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4817
+ var __awaiter$1a = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4789
4818
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4790
4819
  return new (P || (P = Promise))(function (resolve, reject) {
4791
4820
  function fulfilled(value) { try {
@@ -4994,7 +5023,7 @@
4994
5023
  scope.pan(new THREE__namespace.Vector2(x, y));
4995
5024
  };
4996
5025
  this.animateCamera = function (type, change) {
4997
- return __awaiter$1b(this, void 0, void 0, function () {
5026
+ return __awaiter$1a(this, void 0, void 0, function () {
4998
5027
  var changing, tween;
4999
5028
  var _this = this;
5000
5029
  return __generator(this, function (_a) {
@@ -5010,7 +5039,7 @@
5010
5039
  });
5011
5040
  };
5012
5041
  this.animateCameraMovement = function (endPosition, endTarget, endDuration) {
5013
- return __awaiter$1b(this, void 0, void 0, function () {
5042
+ return __awaiter$1a(this, void 0, void 0, function () {
5014
5043
  var duration, position, target, targetTween, positionTween, targetPromise, positionPromise;
5015
5044
  var _this = this;
5016
5045
  return __generator(this, function (_a) {
@@ -5086,7 +5115,7 @@
5086
5115
  this.updatePositionTarget(this.camera.position, this.target);
5087
5116
  };
5088
5117
  this.animateMoveTo = function (target) {
5089
- return __awaiter$1b(this, void 0, void 0, function () {
5118
+ return __awaiter$1a(this, void 0, void 0, function () {
5090
5119
  var position, distance, tween;
5091
5120
  return __generator(this, function (_a) {
5092
5121
  position = scope.target.clone();
@@ -5277,7 +5306,7 @@
5277
5306
  return event && event.target && event.target === document.body;
5278
5307
  }
5279
5308
  function onMouseMove(event) {
5280
- return __awaiter$1b(this, void 0, void 0, function () {
5309
+ return __awaiter$1a(this, void 0, void 0, function () {
5281
5310
  var mousePos;
5282
5311
  return __generator(this, function (_a) {
5283
5312
  if (!isMouseEventAllowed(event)) {
@@ -5643,7 +5672,7 @@
5643
5672
  }]
5644
5673
  }] });
5645
5674
 
5646
- var __awaiter$1a = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5675
+ var __awaiter$19 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5647
5676
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5648
5677
  return new (P || (P = Promise))(function (resolve, reject) {
5649
5678
  function fulfilled(value) { try {
@@ -5854,7 +5883,7 @@
5854
5883
  this.cameraMovementChanged.next();
5855
5884
  };
5856
5885
  CameraService.prototype.moveCameraToFitObject = function (object, offset) {
5857
- return __awaiter$1a(this, void 0, void 0, function () {
5886
+ return __awaiter$19(this, void 0, void 0, function () {
5858
5887
  var boundingBox, center, size, maxDim, fov, cameraZ, newPosition, tween;
5859
5888
  return __generator(this, function (_a) {
5860
5889
  switch (_a.label) {
@@ -5924,7 +5953,7 @@
5924
5953
  return target.clone().add(new THREE.Vector3(0, targetDistance, targetDistance));
5925
5954
  };
5926
5955
  CameraService.prototype._placeWalkThroughCameraInCorner = function (viewCorner) {
5927
- return __awaiter$1a(this, void 0, void 0, function () {
5956
+ return __awaiter$19(this, void 0, void 0, function () {
5928
5957
  var center2d, center, corner2d, corner, distance, diff, lerpAlpha, nearCorner, tween;
5929
5958
  return __generator(this, function (_a) {
5930
5959
  switch (_a.label) {
@@ -6115,7 +6144,7 @@
6115
6144
  }]
6116
6145
  }], ctorParameters: function () { return []; } });
6117
6146
 
6118
- var __awaiter$19 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6147
+ var __awaiter$18 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6119
6148
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6120
6149
  return new (P || (P = Promise))(function (resolve, reject) {
6121
6150
  function fulfilled(value) { try {
@@ -6141,7 +6170,7 @@
6141
6170
  this.messages = [];
6142
6171
  }
6143
6172
  MessageBoardService.prototype.init = function (scene) {
6144
- return __awaiter$19(this, void 0, void 0, function () {
6173
+ return __awaiter$18(this, void 0, void 0, function () {
6145
6174
  return __generator(this, function (_a) {
6146
6175
  this.scene = scene;
6147
6176
  if (this._settingsService.settings.options.xrDebug) {
@@ -6183,7 +6212,7 @@
6183
6212
  }]
6184
6213
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: FontService }]; } });
6185
6214
 
6186
- var __awaiter$18 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6215
+ var __awaiter$17 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6187
6216
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6188
6217
  return new (P || (P = Promise))(function (resolve, reject) {
6189
6218
  function fulfilled(value) { try {
@@ -6223,7 +6252,7 @@
6223
6252
  this._subs.forEach(function (s) { return s.unsubscribe(); });
6224
6253
  };
6225
6254
  XrService.prototype.init = function (renderer, scene, camera) {
6226
- return __awaiter$18(this, void 0, void 0, function () {
6255
+ return __awaiter$17(this, void 0, void 0, function () {
6227
6256
  var displays;
6228
6257
  var _this = this;
6229
6258
  return __generator(this, function (_a) {
@@ -6508,7 +6537,7 @@
6508
6537
  }]
6509
6538
  }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: DebugService }, { type: MessageBoardService }]; } });
6510
6539
 
6511
- var __awaiter$17 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6540
+ var __awaiter$16 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6512
6541
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6513
6542
  return new (P || (P = Promise))(function (resolve, reject) {
6514
6543
  function fulfilled(value) { try {
@@ -6574,7 +6603,7 @@
6574
6603
  * @param {XRCoordinateSystem} frameOfRef
6575
6604
  */
6576
6605
  Reticle.prototype.update = function (session, camera, frameOfRef) {
6577
- return __awaiter$17(this, void 0, void 0, function () {
6606
+ return __awaiter$16(this, void 0, void 0, function () {
6578
6607
  var ray, origin, direction, hits, hit, hitMatrix;
6579
6608
  return __generator(this, function (_a) {
6580
6609
  this._rayCaster = this._rayCaster || new THREE.Raycaster();
@@ -7196,7 +7225,7 @@
7196
7225
  return ServiceLocator;
7197
7226
  }());
7198
7227
 
7199
- var __awaiter$16 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7228
+ var __awaiter$15 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7200
7229
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7201
7230
  return new (P || (P = Promise))(function (resolve, reject) {
7202
7231
  function fulfilled(value) { try {
@@ -7247,14 +7276,14 @@
7247
7276
  var renderPass = new RenderPass.RenderPass(this._scene, this._camera);
7248
7277
  this._outputPass = new OutputPass.OutputPass();
7249
7278
  this._outlinePass = new OutlinePass.OutlinePass(new THREE.Vector2(width, height), this._scene, this._camera);
7250
- this._fxaaPass = new ShaderPass.ShaderPass(FXAAShader.FXAAShader);
7251
- this._fxaaPass.material.uniforms['resolution'].value.set(1 / width, 1 / height);
7279
+ // this._fxaaPass = new ShaderPass(FXAAShader);
7280
+ // this._fxaaPass.material.uniforms['resolution'].value.set(1 / width, 1 / height);
7252
7281
  // needed for the sRGBEncoding to work
7253
7282
  // https://stackoverflow.com/questions/72936071/srgbencoding-in-not-working-in-three-effectcomposer
7254
7283
  // const gammaCorrectionPass = new ShaderPass(GammaCorrectionShader);
7255
7284
  this._composer.addPass(renderPass);
7256
7285
  this._composer.addPass(this._outlinePass);
7257
- this._composer.addPass(this._fxaaPass);
7286
+ // this._composer.addPass(this._fxaaPass);
7258
7287
  // this._composer.addPass(gammaCorrectionPass);
7259
7288
  this._composer.addPass(this._outputPass);
7260
7289
  this._setSelectionGlowSettings();
@@ -7278,7 +7307,7 @@
7278
7307
  this._outlinePass.selectedObjects = [item];
7279
7308
  };
7280
7309
  OutlineService.prototype.showOutline = function (item) {
7281
- return __awaiter$16(this, void 0, void 0, function () {
7310
+ return __awaiter$15(this, void 0, void 0, function () {
7282
7311
  var _this = this;
7283
7312
  return __generator(this, function (_a) {
7284
7313
  // if (item && (item instanceof FloorPin || item instanceof WallPin)) {
@@ -7301,7 +7330,7 @@
7301
7330
  });
7302
7331
  };
7303
7332
  OutlineService.prototype.hideOutline = function () {
7304
- return __awaiter$16(this, void 0, void 0, function () {
7333
+ return __awaiter$15(this, void 0, void 0, function () {
7305
7334
  return __generator(this, function (_a) {
7306
7335
  if (this._outlinePass.selectedObjects.length > 0) {
7307
7336
  // await this._animatedOutlineStrength(300, 0);
@@ -8198,7 +8227,7 @@
8198
8227
  TextureType[TextureType["PBR"] = 3] = "PBR";
8199
8228
  })(TextureType || (TextureType = {}));
8200
8229
 
8201
- var __awaiter$15 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8230
+ var __awaiter$14 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8202
8231
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8203
8232
  return new (P || (P = Promise))(function (resolve, reject) {
8204
8233
  function fulfilled(value) { try {
@@ -8267,7 +8296,7 @@
8267
8296
  };
8268
8297
  // use canvas to create rotated textures
8269
8298
  MaterialUtils.RotatedCanvasTexture = function (texture, textureURL, dimensions, adjustScale, repeatX, repeatY) {
8270
- return __awaiter$15(this, void 0, void 0, function () {
8299
+ return __awaiter$14(this, void 0, void 0, function () {
8271
8300
  var img;
8272
8301
  return __generator(this, function (_a) {
8273
8302
  switch (_a.label) {
@@ -8280,7 +8309,7 @@
8280
8309
  });
8281
8310
  };
8282
8311
  MaterialUtils.CustomTileMapTexture = function (texture, dimensions) {
8283
- return __awaiter$15(this, void 0, void 0, function () {
8312
+ return __awaiter$14(this, void 0, void 0, function () {
8284
8313
  var img, ratio, tileSizeMax, newTileSize, t, image;
8285
8314
  return __generator(this, function (_a) {
8286
8315
  switch (_a.label) {
@@ -8323,7 +8352,7 @@
8323
8352
  };
8324
8353
  // use canvas to create texture from photo
8325
8354
  MaterialUtils.FromImage = function (texture /*, dimensions: THREE.Vector2*/) {
8326
- return __awaiter$15(this, void 0, void 0, function () {
8355
+ return __awaiter$14(this, void 0, void 0, function () {
8327
8356
  var img, canvas, threeTexture;
8328
8357
  return __generator(this, function (_a) {
8329
8358
  switch (_a.label) {
@@ -8342,7 +8371,7 @@
8342
8371
  });
8343
8372
  };
8344
8373
  MaterialUtils.ReadAndResizePhotoAsDataURL = function (file) {
8345
- return __awaiter$15(this, void 0, void 0, function () {
8374
+ return __awaiter$14(this, void 0, void 0, function () {
8346
8375
  var imageSrc;
8347
8376
  return __generator(this, function (_a) {
8348
8377
  switch (_a.label) {
@@ -8362,7 +8391,8 @@
8362
8391
  var srcKey = src;
8363
8392
  var type = 'image/jpeg';
8364
8393
  if (isDataUri) {
8365
- srcKey = md5__namespace(src);
8394
+ // srcKey = md5(src);
8395
+ srcKey = src;
8366
8396
  if (src.indexOf('image/png') > -1) {
8367
8397
  type = 'image/png';
8368
8398
  }
@@ -8409,7 +8439,7 @@
8409
8439
  });
8410
8440
  };
8411
8441
  MaterialUtils.GetMaterialMaps = function (material, texture, dimensions) {
8412
- return __awaiter$15(this, void 0, void 0, function () {
8442
+ return __awaiter$14(this, void 0, void 0, function () {
8413
8443
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
8414
8444
  return __generator(this, function (_s) {
8415
8445
  switch (_s.label) {
@@ -8524,7 +8554,7 @@
8524
8554
  });
8525
8555
  };
8526
8556
  MaterialUtils.loadMaterializeMaps = function (material, texture) {
8527
- return __awaiter$15(this, void 0, void 0, function () {
8557
+ return __awaiter$14(this, void 0, void 0, function () {
8528
8558
  var _a, _b, _c, _d, _e;
8529
8559
  return __generator(this, function (_f) {
8530
8560
  switch (_f.label) {
@@ -8604,7 +8634,7 @@
8604
8634
  };
8605
8635
  // use canvas to create texture from flipped photo
8606
8636
  MaterialUtils.FromFlippedImage = function (texture, dimensions) {
8607
- return __awaiter$15(this, void 0, void 0, function () {
8637
+ return __awaiter$14(this, void 0, void 0, function () {
8608
8638
  var origImg, canvas, threeTexture;
8609
8639
  return __generator(this, function (_a) {
8610
8640
  switch (_a.label) {
@@ -8642,7 +8672,7 @@
8642
8672
  };
8643
8673
  // use canvas to create custom textures
8644
8674
  MaterialUtils.CustomTileTexture = function (texture) {
8645
- return __awaiter$15(this, void 0, void 0, function () {
8675
+ return __awaiter$14(this, void 0, void 0, function () {
8646
8676
  var img, canvas;
8647
8677
  return __generator(this, function (_a) {
8648
8678
  switch (_a.label) {
@@ -8658,7 +8688,7 @@
8658
8688
  });
8659
8689
  };
8660
8690
  MaterialUtils.RotatedImageTexture = function (texture, textureURL) {
8661
- return __awaiter$15(this, void 0, void 0, function () {
8691
+ return __awaiter$14(this, void 0, void 0, function () {
8662
8692
  var img, canvas;
8663
8693
  return __generator(this, function (_a) {
8664
8694
  switch (_a.label) {
@@ -8674,7 +8704,7 @@
8674
8704
  });
8675
8705
  };
8676
8706
  MaterialUtils.CreateTileDataUrl = function (img, texture) {
8677
- return __awaiter$15(this, void 0, void 0, function () {
8707
+ return __awaiter$14(this, void 0, void 0, function () {
8678
8708
  var canvas, tileUnit, tileCtx;
8679
8709
  return __generator(this, function (_a) {
8680
8710
  switch (_a.label) {
@@ -8697,7 +8727,7 @@
8697
8727
  });
8698
8728
  };
8699
8729
  MaterialUtils.CreateTileMap = function (img, texture, oDimensions, adjustScale, repeatX, repeatY) {
8700
- return __awaiter$15(this, void 0, void 0, function () {
8730
+ return __awaiter$14(this, void 0, void 0, function () {
8701
8731
  var dimensions, canvas, rotation, imgSize, ctx, bbHeight, bbWidth, i, j, threeTexture;
8702
8732
  return __generator(this, function (_a) {
8703
8733
  switch (_a.label) {
@@ -8785,7 +8815,7 @@
8785
8815
  MaterialUtils.imageCache = new Map();
8786
8816
  MaterialUtils.textureCache = new Map();
8787
8817
 
8788
- var __awaiter$14 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8818
+ var __awaiter$13 = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8789
8819
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8790
8820
  return new (P || (P = Promise))(function (resolve, reject) {
8791
8821
  function fulfilled(value) { try {
@@ -8840,7 +8870,7 @@
8840
8870
  Utils$1.DisposeObject(this._pointRepresentation);
8841
8871
  };
8842
8872
  ArService.prototype.resetPlaneDetection = function () {
8843
- return __awaiter$14(this, void 0, void 0, function () {
8873
+ return __awaiter$13(this, void 0, void 0, function () {
8844
8874
  var _this = this;
8845
8875
  return __generator(this, function (_a) {
8846
8876
  switch (_a.label) {
@@ -8868,7 +8898,7 @@
8868
8898
  this._session.end();
8869
8899
  };
8870
8900
  ArService.prototype.arIOSSupported = function () {
8871
- return __awaiter$14(this, void 0, void 0, function () {
8901
+ return __awaiter$13(this, void 0, void 0, function () {
8872
8902
  var isIOS, anchor;
8873
8903
  return __generator(this, function (_a) {
8874
8904
  isIOS = /iPad|iPhone|iPod/.test(navigator.platform) ||
@@ -8885,7 +8915,7 @@
8885
8915
  });
8886
8916
  };
8887
8917
  ArService.prototype.arSupported = function () {
8888
- return __awaiter$14(this, void 0, void 0, function () {
8918
+ return __awaiter$13(this, void 0, void 0, function () {
8889
8919
  return __generator(this, function (_a) {
8890
8920
  switch (_a.label) {
8891
8921
  case 0:
@@ -9057,6 +9087,7 @@
9057
9087
  this._lightProbe.addEventListener('reflectionchange', function () {
9058
9088
  var rawData = _this._glBinding.getReflectionCubeMap(_this._lightProbe);
9059
9089
  var texProps = _this._renderer.properties.get(_this._cubeMapTexture);
9090
+ // @ts-ignore
9060
9091
  texProps.__webglTexture = rawData;
9061
9092
  });
9062
9093
  };
@@ -9257,7 +9288,7 @@
9257
9288
  }
9258
9289
  };
9259
9290
  ArService.prototype._createPlaneMaterial = function () {
9260
- return __awaiter$14(this, void 0, void 0, function () {
9291
+ return __awaiter$13(this, void 0, void 0, function () {
9261
9292
  var pm, _a;
9262
9293
  return __generator(this, function (_b) {
9263
9294
  switch (_b.label) {
@@ -9276,7 +9307,7 @@
9276
9307
  });
9277
9308
  };
9278
9309
  ArService.prototype._onSessionStarted = function (session) {
9279
- return __awaiter$14(this, void 0, void 0, function () {
9310
+ return __awaiter$13(this, void 0, void 0, function () {
9280
9311
  var domOverlay;
9281
9312
  var _this = this;
9282
9313
  return __generator(this, function (_a) {
@@ -9410,7 +9441,7 @@
9410
9441
  }
9411
9442
  };
9412
9443
  ArService.prototype._checkIfHoldTouchEvent = function ($event) {
9413
- return __awaiter$14(this, void 0, void 0, function () {
9444
+ return __awaiter$13(this, void 0, void 0, function () {
9414
9445
  var _this = this;
9415
9446
  return __generator(this, function (_a) {
9416
9447
  setTimeout(function () {
@@ -9737,9 +9768,10 @@
9737
9768
  }], ctorParameters: function () { return [{ type: ViewModeService }, { type: CameraService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorConnectorService }]; } });
9738
9769
 
9739
9770
  var PostProcessingService = /** @class */ (function () {
9740
- function PostProcessingService(_configurationService) {
9771
+ function PostProcessingService(_configurationService, _settingsService) {
9741
9772
  var _this = this;
9742
9773
  this._configurationService = _configurationService;
9774
+ this._settingsService = _settingsService;
9743
9775
  this._effectController = {
9744
9776
  aoSamples: 32.0,
9745
9777
  denoiseSamples: 8.0,
@@ -9755,13 +9787,24 @@
9755
9787
  color: [0, 0, 0],
9756
9788
  colorMultiply: true,
9757
9789
  stencil: true,
9758
- accumulate: false
9790
+ accumulate: false,
9791
+ gammaCorrection: false
9759
9792
  };
9760
9793
  this._subs = [];
9761
9794
  this._subs.push(this._configurationService.onChange.subscribe(function (changed) {
9762
9795
  if (ConfigurationKey.ShowPostProcessingSettings in changed) {
9763
9796
  _this._showHideGui(changed[ConfigurationKey.ShowPostProcessingSettings]);
9764
9797
  }
9798
+ }), this._settingsService.settingsLoaded.subscribe(function () {
9799
+ _this._aoEnabled = _this._settingsService.settings.options.aoEnabled;
9800
+ _this._aaEnabled = _this._settingsService.settings.options.aaEnabled;
9801
+ }), this._settingsService.settingsChanged.subscribe(function () {
9802
+ if (_this._aoEnabled !== _this._settingsService.settings.options.aoEnabled || _this._aaEnabled !== _this._settingsService.settings.options.aaEnabled) {
9803
+ _this._aoEnabled = _this._settingsService.settings.options.aoEnabled;
9804
+ _this._aaEnabled = _this._settingsService.settings.options.aaEnabled;
9805
+ _this._initComposers();
9806
+ _this.render();
9807
+ }
9765
9808
  }));
9766
9809
  }
9767
9810
  PostProcessingService.prototype.ngOnDestroy = function () {
@@ -9771,37 +9814,127 @@
9771
9814
  this._renderer = renderer;
9772
9815
  this._scene = scene;
9773
9816
  this._camera = camera;
9774
- this._renderTarget = new THREE.WebGLRenderTarget(width, height, {
9817
+ this._width = width;
9818
+ this._height = height;
9819
+ this._postProcessingGui = new GUI__default["default"]();
9820
+ this._postProcessingGui.hide();
9821
+ this._renderPass = new RenderPass.RenderPass(this._scene, this._camera);
9822
+ this._outputPass = new OutputPass.OutputPass();
9823
+ this._initComposers();
9824
+ this._createGui();
9825
+ // this._createGuiTaaPass();
9826
+ };
9827
+ PostProcessingService.prototype.setSize = function (width, height) {
9828
+ if (this._aoComposer) {
9829
+ this._aoComposer.setSize(width, height);
9830
+ }
9831
+ if (this._aaComposer) {
9832
+ this._aaComposer.setSize(width, height);
9833
+ }
9834
+ if (this._blendComposer) {
9835
+ this._blendComposer.setSize(width, height);
9836
+ }
9837
+ };
9838
+ PostProcessingService.prototype.render = function () {
9839
+ if (this._settingsService.settings.options.aaEnabled && this._aaComposer) {
9840
+ this._aaComposer.render();
9841
+ }
9842
+ if (this._settingsService.settings.options.aoEnabled && this._aoComposer) {
9843
+ this._aoComposer.render();
9844
+ }
9845
+ if (this._blendComposer) {
9846
+ this._blendComposer.render();
9847
+ }
9848
+ };
9849
+ PostProcessingService.prototype.showGui = function () {
9850
+ this._postProcessingGui.show(true);
9851
+ };
9852
+ PostProcessingService.prototype.hideGui = function () {
9853
+ this._postProcessingGui.hide();
9854
+ };
9855
+ PostProcessingService.prototype._initComposers = function () {
9856
+ this._initAaComposer();
9857
+ this._initAoComposer();
9858
+ this._initBlendComposer();
9859
+ };
9860
+ PostProcessingService.prototype._initAaComposer = function () {
9861
+ if (this._aaComposer) {
9862
+ this._aaComposer.dispose();
9863
+ }
9864
+ if (!this._aaEnabled) {
9865
+ return;
9866
+ }
9867
+ this._aaRenderTarget = new THREE.WebGLRenderTarget(this._width, this._height, {
9868
+ samples: 4,
9869
+ type: THREE.HalfFloatType,
9775
9870
  minFilter: THREE.NearestFilter,
9776
9871
  magFilter: THREE.NearestFilter,
9777
9872
  format: THREE.RGBAFormat,
9778
9873
  colorSpace: THREE.SRGBColorSpace
9779
9874
  });
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);
9875
+ this._aaComposer = new EffectComposer.EffectComposer(this._renderer, this._aaRenderTarget);
9876
+ this._aaComposer.renderToScreen = false;
9877
+ this._fxaaPass = new ShaderPass.ShaderPass(FXAAShader.FXAAShader);
9878
+ var pixelRatio = this._renderer.getPixelRatio();
9879
+ // this._fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (this._width * pixelRatio);
9880
+ // this._fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (this._height * pixelRatio);
9881
+ this._fxaaPass.uniforms['resolution'].value.x = 1 / (this._width * pixelRatio);
9882
+ this._fxaaPass.uniforms['resolution'].value.y = 1 / (this._height * pixelRatio);
9883
+ // this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
9884
+ // this._taaRenderPass.unbiased = true;
9885
+ // this._taaRenderPass.sampleLevel = 4;
9886
+ this._aaComposer.addPass(this._renderPass);
9887
+ // this._aaComposer.addPass(this._taaRenderPass);
9888
+ this._aaComposer.addPass(this._fxaaPass);
9889
+ this._aaComposer.addPass(this._outputPass);
9890
+ };
9891
+ PostProcessingService.prototype._initAoComposer = function () {
9892
+ if (this._aoComposer) {
9893
+ this._aoComposer.dispose();
9894
+ }
9895
+ if (!this._aoEnabled) {
9896
+ return;
9897
+ }
9898
+ this._aoRenderTarget = new THREE.WebGLRenderTarget(this._width, this._height, {
9899
+ samples: 4,
9900
+ type: THREE.HalfFloatType,
9901
+ minFilter: THREE.NearestFilter,
9902
+ magFilter: THREE.NearestFilter,
9903
+ format: THREE.RGBAFormat,
9904
+ colorSpace: THREE.SRGBColorSpace
9905
+ });
9906
+ this._aoComposer = new EffectComposer.EffectComposer(this._renderer, this._aoRenderTarget);
9907
+ this._aoComposer.renderToScreen = false;
9908
+ this._n8aoPass = new n8ao.N8AOPass(this._scene, this._camera, this._width, this._height);
9785
9909
  this._n8aoPass.configuration.gammaCorrection = false;
9786
- this._n8aoPass.debugMode = true;
9787
- // const smaaPass = new SMAAPass(width, height);
9788
- // 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
- // 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);
9803
- this._createGui();
9804
- this._createGuiTaaPass();
9910
+ // this._n8aoPass.debugMode = true;
9911
+ // this._aoComposer.addPass(this._renderPass);
9912
+ this._aoComposer.addPass(this._n8aoPass);
9913
+ this._aoComposer.addPass(this._outputPass);
9914
+ };
9915
+ PostProcessingService.prototype._initBlendComposer = function () {
9916
+ if (this._blendShader) {
9917
+ this._blendShader.dispose();
9918
+ }
9919
+ this._blendShader = new ShaderPass.ShaderPass(BlendShader.BlendShader);
9920
+ if (this._aaEnabled && this._aoEnabled) {
9921
+ this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
9922
+ this._blendShader.uniforms.tDiffuse2.value = this._aoRenderTarget.texture;
9923
+ }
9924
+ else if (this._aoEnabled) {
9925
+ this._blendShader.uniforms.tDiffuse1.value = this._aoRenderTarget.texture;
9926
+ }
9927
+ else if (this._aaEnabled) {
9928
+ this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
9929
+ }
9930
+ this._blendShader.uniforms.mixRatio.value = 0.2;
9931
+ this._blendComposer = new EffectComposer.EffectComposer(this._renderer);
9932
+ this._blendComposer.renderToScreen = true;
9933
+ this._blendComposer.addPass(this._renderPass);
9934
+ if (this._aaEnabled || this._aoEnabled) {
9935
+ this._blendComposer.addPass(this._blendShader);
9936
+ }
9937
+ // this._blendComposer.addPass(this._outputPass);
9805
9938
  };
9806
9939
  PostProcessingService.prototype._updatePass = function () {
9807
9940
  this._n8aoPass.configuration.aoRadius = this._effectController.aoRadius;
@@ -9819,14 +9952,13 @@
9819
9952
  this._n8aoPass.configuration.depthAwareUpsampling = this._effectController.depthAwareUpsampling;
9820
9953
  this._n8aoPass.configuration.colorMultiply = this._effectController.colorMultiply;
9821
9954
  this._n8aoPass.configuration.accumulate = this._effectController.accumulate;
9955
+ this._n8aoPass.configuration.gammaCorrection = this._effectController.gammaCorrection;
9822
9956
  this.render();
9823
9957
  };
9824
9958
  PostProcessingService.prototype._createGuiTaaPass = function () {
9825
9959
  var _this = this;
9826
- this._taaPassGui = new GUI__default["default"]();
9827
- this._taaPassGui.hide();
9828
9960
  var param = { TAAEnabled: '1', TAASampleLevel: 0 };
9829
- this._taaPassGui.add(param, 'TAAEnabled', {
9961
+ this._postProcessingGui.add(param, 'TAAEnabled', {
9830
9962
  'Disabled': '0',
9831
9963
  'Enabled': '1'
9832
9964
  }).onFinishChange(function () {
@@ -9835,7 +9967,7 @@
9835
9967
  }
9836
9968
  _this.render();
9837
9969
  });
9838
- this._taaPassGui.add(param, 'TAASampleLevel', {
9970
+ this._postProcessingGui.add(param, 'TAASampleLevel', {
9839
9971
  'Level 0: 1 Sample': 0,
9840
9972
  'Level 1: 2 Samples': 1,
9841
9973
  'Level 2: 4 Samples': 2,
@@ -9848,27 +9980,12 @@
9848
9980
  }
9849
9981
  _this.render();
9850
9982
  });
9851
- this._taaPassGui.open();
9852
- };
9853
- PostProcessingService.prototype.setSize = function (width, height) {
9854
- this._composer.setSize(width, height);
9855
- };
9856
- PostProcessingService.prototype.render = function () {
9857
- this._composer.render();
9858
- };
9859
- PostProcessingService.prototype.showGui = function () {
9860
- this._postProcessingGui.show(true);
9861
- };
9862
- PostProcessingService.prototype.hideGui = function () {
9863
- this._postProcessingGui.hide();
9864
9983
  };
9865
9984
  PostProcessingService.prototype._showHideGui = function (show) {
9866
9985
  show ? this.showGui() : this.hideGui();
9867
9986
  };
9868
9987
  PostProcessingService.prototype._createGui = function () {
9869
9988
  var _this = this;
9870
- this._postProcessingGui = new GUI__default["default"]();
9871
- this._postProcessingGui.hide();
9872
9989
  this._postProcessingGui.add(this._effectController, 'aoSamples', 1.0, 64.0, 1.0).onChange(function () { return _this._updatePass(); });
9873
9990
  this._postProcessingGui.add(this._effectController, 'denoiseSamples', 1.0, 64.0, 1.0).onChange(function () { return _this._updatePass(); });
9874
9991
  this._postProcessingGui.add(this._effectController, 'denoiseRadius', 0.0, 24.0, 0.01).onChange(function () { return _this._updatePass(); });
@@ -9895,6 +10012,9 @@
9895
10012
  df.updateDisplay();
9896
10013
  _this._updatePass();
9897
10014
  });
10015
+ var blendShaderParams = {
10016
+ mixRatio: 0.5
10017
+ };
9898
10018
  this._postProcessingGui.add(this._effectController, 'halfRes').onChange(function () { return _this._updatePass(); });
9899
10019
  this._postProcessingGui.add(this._effectController, 'transparencyAware').onChange(function () { return _this._updatePass(); });
9900
10020
  this._postProcessingGui.add(this._effectController, 'depthAwareUpsampling').onChange(function () { return _this._updatePass(); });
@@ -9903,38 +10023,24 @@
9903
10023
  this._postProcessingGui.addColor(this._effectController, 'color').onChange(function () { return _this._updatePass(); });
9904
10024
  this._postProcessingGui.add(this._effectController, 'colorMultiply').onChange(function () { return _this._updatePass(); });
9905
10025
  this._postProcessingGui.add(this._effectController, 'accumulate').onChange(function () { return _this._updatePass(); });
10026
+ this._postProcessingGui.add(this._effectController, 'gammaCorrection').onChange(function () { return _this._updatePass(); });
9906
10027
  this._postProcessingGui.add(this._effectController, 'renderMode', ['Combined', 'AO', 'No AO', 'Split', 'Split AO']).onChange(function () { return _this._updatePass(); });
10028
+ this._postProcessingGui.add(blendShaderParams, 'mixRatio', 0.0, 10.0, 0.01).onChange(function () {
10029
+ _this._blendShader.uniforms.mixRatio.value = blendShaderParams.mixRatio;
10030
+ _this.render();
10031
+ });
9907
10032
  };
9908
10033
  return PostProcessingService;
9909
10034
  }());
9910
- PostProcessingService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PostProcessingService, deps: [{ token: ConfigurationService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
10035
+ PostProcessingService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PostProcessingService, deps: [{ token: ConfigurationService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
9911
10036
  PostProcessingService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PostProcessingService, providedIn: 'root' });
9912
10037
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PostProcessingService, decorators: [{
9913
10038
  type: i0.Injectable,
9914
10039
  args: [{
9915
10040
  providedIn: 'root'
9916
10041
  }]
9917
- }], ctorParameters: function () { return [{ type: ConfigurationService }]; } });
10042
+ }], ctorParameters: function () { return [{ type: ConfigurationService }, { type: HomedecoratorSettingsService }]; } });
9918
10043
 
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
10044
  var SsrService = /** @class */ (function () {
9939
10045
  function SsrService(_settingsService) {
9940
10046
  this._settingsService = _settingsService;
@@ -9957,70 +10063,6 @@
9957
10063
  SsrService.prototype.ngOnDestroy = function () {
9958
10064
  this._subs.forEach(function (s) { return s.unsubscribe(); });
9959
10065
  };
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
10066
  SsrService.prototype.sceneChanged = function (scene) {
10025
10067
  if (this._websocket.readyState === WebSocket.OPEN) {
10026
10068
  var sceneClone = scene.clone(true);
@@ -10028,7 +10070,7 @@
10028
10070
  }
10029
10071
  };
10030
10072
  SsrService.prototype._prepareWebsocket = function () {
10031
- if (!this._settingsService.settings.newRenderParameters.websocket) {
10073
+ if (!this._settingsService.settings.options.useRenderWebsocket || !this._settingsService.settings.newRenderParameters.websocket) {
10032
10074
  return;
10033
10075
  }
10034
10076
  var webSocketConnection = this._settingsService.settings.newRenderParameters.websocket;
@@ -10134,56 +10176,63 @@
10134
10176
  configurable: true
10135
10177
  });
10136
10178
  SceneService.prototype.init = function (element) {
10137
- var _this = this;
10138
- this.domElement = element;
10139
- this._initScene();
10140
- this._initRenderer();
10141
- this._initCamera();
10142
- this._initOutline();
10143
- this._initPostProcessing();
10144
- this._animate();
10145
- this._subs.push(this._cameraService.cameraMovementChanged.subscribe(function () {
10146
- _this.needsRender = true;
10147
- }), this._messageBusService.subscribe(MessageType.TakeScreenshot, function () { return __awaiter$12(_this, void 0, void 0, function () {
10148
- var dataUrl;
10179
+ return __awaiter$12(this, void 0, void 0, function () {
10180
+ var _this = this;
10149
10181
  return __generator(this, function (_a) {
10150
- if (this._viewModeService.is3dViewActive() || this._viewModeService.isTopViewActive()) {
10151
- this.renderer.render(this.scene, this._cameraService.camera);
10152
- dataUrl = this.renderer.domElement.toDataURL('image/jpeg');
10153
- FileUtils.DownloadFromDataUri(dataUrl, "MyRoomplan" + new Date().toISOString() + ".jpeg");
10154
- }
10182
+ this.domElement = element;
10183
+ this._initScene();
10184
+ this._initRenderer();
10185
+ this._initCamera();
10186
+ this._initOutline();
10187
+ this._initPostProcessing();
10188
+ this._animate();
10189
+ this._subs.push(this._cameraService.cameraMovementChanged.subscribe(function () {
10190
+ _this.needsRender = true;
10191
+ }), this._messageBusService.subscribe(MessageType.TakeScreenshot, function () { return __awaiter$12(_this, void 0, void 0, function () {
10192
+ var dataUrl;
10193
+ return __generator(this, function (_a) {
10194
+ if (this._viewModeService.is3dViewActive() || this._viewModeService.isTopViewActive()) {
10195
+ this.renderer.render(this.scene, this._cameraService.camera);
10196
+ dataUrl = this.renderer.domElement.toDataURL('image/jpeg');
10197
+ FileUtils.DownloadFromDataUri(dataUrl, "MyRoomplan" + new Date().toISOString() + ".jpeg");
10198
+ }
10199
+ return [2 /*return*/];
10200
+ });
10201
+ }); }), this._arService.shouldAddObjectToScene.subscribe(function (object) {
10202
+ _this.arMode = false;
10203
+ _this.addObject(object);
10204
+ }), this._viewModeService.viewModeChanged.subscribe(function (mode) {
10205
+ // if (this._is3DMode(mode)) {
10206
+ // this._animate();
10207
+ // } else {
10208
+ // this._pauseAnimation();
10209
+ // }
10210
+ if (mode === ViewMode.VR) {
10211
+ _this._vrService.init(_this.scene, _this.renderer);
10212
+ }
10213
+ else {
10214
+ _this._vrService.endSession();
10215
+ }
10216
+ }), this._settingsService.settingsLoaded.subscribe(function (loaded) {
10217
+ if (loaded) {
10218
+ _this._initPathTracer();
10219
+ _this._maxRenderSamples = _this._settingsService.settings.options.maxRenderSamples;
10220
+ _this._ssrService.enabled = _this._settingsService.settings.options.ssrEnabled;
10221
+ }
10222
+ })
10223
+ // this._xrService.sessionStarted.subscribe((mode: XrMode) => {
10224
+ // if (mode === XrMode.ArMode) {
10225
+ // this._animateAr();
10226
+ // }
10227
+ // })
10228
+ );
10229
+ this._xrService.init(this.renderer, this.scene, this._cameraService.camera);
10230
+ // const hdriPath: string = '/assets/hdri/TSStudio3Point.hdr';
10231
+ // await ObjectUtils.LoadHDRI(hdriPath, this.scene);
10232
+ this.sceneInitialized.next(true);
10155
10233
  return [2 /*return*/];
10156
10234
  });
10157
- }); }), this._arService.shouldAddObjectToScene.subscribe(function (object) {
10158
- _this.arMode = false;
10159
- _this.addObject(object);
10160
- }), this._viewModeService.viewModeChanged.subscribe(function (mode) {
10161
- // if (this._is3DMode(mode)) {
10162
- // this._animate();
10163
- // } else {
10164
- // this._pauseAnimation();
10165
- // }
10166
- if (mode === ViewMode.VR) {
10167
- _this._vrService.init(_this.scene, _this.renderer);
10168
- }
10169
- else {
10170
- _this._vrService.endSession();
10171
- }
10172
- }), this._settingsService.settingsLoaded.subscribe(function (loaded) {
10173
- if (loaded) {
10174
- _this._initPathTracer();
10175
- _this._maxRenderSamples = _this._settingsService.settings.options.maxRenderSamples;
10176
- _this._ssrService.enabled = _this._settingsService.settings.options.ssrEnabled;
10177
- }
10178
- })
10179
- // this._xrService.sessionStarted.subscribe((mode: XrMode) => {
10180
- // if (mode === XrMode.ArMode) {
10181
- // this._animateAr();
10182
- // }
10183
- // })
10184
- );
10185
- this._xrService.init(this.renderer, this.scene, this._cameraService.camera);
10186
- this.sceneInitialized.next(true);
10235
+ });
10187
10236
  };
10188
10237
  SceneService.prototype.addObject = function (obj, forceRender) {
10189
10238
  if (forceRender === void 0) { forceRender = true; }
@@ -10295,7 +10344,7 @@
10295
10344
  var canvasElement, context;
10296
10345
  return __generator(this, function (_a) {
10297
10346
  canvasElement = document.createElement('canvas');
10298
- context = canvasElement.getContext('webgl2', { antialias: true });
10347
+ context = canvasElement.getContext('webgl2');
10299
10348
  this.webGL2Available = context !== undefined;
10300
10349
  // this.renderer = new WebGPURenderer({ alpha: true, antialias: true });
10301
10350
  // this.renderer =
@@ -10309,15 +10358,21 @@
10309
10358
  // logarithmicDepthBuffer: true*/
10310
10359
  // });
10311
10360
  // 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
- }*/);
10361
+ this.renderer = new THREE.WebGLRenderer({
10362
+ /*
10363
+ precision: 'highp',
10364
+ powerPreference: 'high-performance',
10365
+ */
10366
+ /*
10367
+ antialias: true,
10368
+ */
10369
+ /*
10370
+ stencil: false,
10371
+ depth: false
10372
+ */
10373
+ });
10319
10374
  this.renderer.outputColorSpace = THREE.SRGBColorSpace;
10320
- this.renderer.autoClear = false;
10375
+ this.renderer.autoClear = true;
10321
10376
  this.renderer.setPixelRatio(window.devicePixelRatio);
10322
10377
  this.renderer.toneMapping = THREE.NoToneMapping; // ACESFilmicToneMapping; // LinearToneMapping;
10323
10378
  this.renderer.shadowMap.enabled = true;
@@ -10367,29 +10422,29 @@
10367
10422
  this._numberOfSamplesRendered = Math.floor(this.pathTracer.samples);
10368
10423
  }
10369
10424
  else {
10370
- if (this._needsRender || this.arMode || this._viewModeService.isVRViewActive() || this._outlineService.needsRender) {
10371
- this.renderer.clear();
10372
- if (this._arMode && frame) {
10373
- this._arService.handleFrame(frame);
10374
- }
10375
- else if (this._viewModeService.isVRViewActive()) {
10376
- this._vrService.render();
10425
+ // if (this._needsRender || this.arMode || this._viewModeService.isVRViewActive() || this._outlineService.needsRender) {
10426
+ this.renderer.clear();
10427
+ if (this._arMode && frame) {
10428
+ this._arService.handleFrame(frame);
10429
+ }
10430
+ else if (this._viewModeService.isVRViewActive()) {
10431
+ this._vrService.render();
10432
+ }
10433
+ else {
10434
+ this.onBeforeRender.next({ renderer: this.renderer, scene: this.scene });
10435
+ if (!this._settingsService.settings.options.aaEnabled && !this._settingsService.settings.options.aoEnabled) {
10436
+ // this.renderer.render(this.scene, this._cameraService.camera);
10437
+ this._outlineService.render();
10377
10438
  }
10378
10439
  else {
10379
- this.onBeforeRender.next({ renderer: this.renderer, scene: this.scene });
10380
- if (!this.renderingThroughPostProcessingPipeline) {
10381
- this.renderer.render(this.scene, this._cameraService.camera);
10382
- }
10383
- else {
10384
- this._postProcessing.render();
10385
- this._outlineService.render();
10386
- }
10387
- // this.renderer.render(this.scene, this._cameraService.camera);
10440
+ this._postProcessing.render();
10441
+ // this._outlineService.render();
10388
10442
  }
10389
- this.onAfterRender.next({ renderer: this.renderer, scene: this.scene });
10390
- this._outlineService.needsRender = false;
10391
- this.needsRender = false;
10392
10443
  }
10444
+ this.onAfterRender.next({ renderer: this.renderer, scene: this.scene });
10445
+ this._outlineService.needsRender = false;
10446
+ this.needsRender = false;
10447
+ // }
10393
10448
  }
10394
10449
  };
10395
10450
  SceneService.prototype._animate = function () {
@@ -10477,7 +10532,7 @@
10477
10532
  // }
10478
10533
  //
10479
10534
  var PresetsService = /** @class */ (function () {
10480
- function PresetsService(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService) {
10535
+ function PresetsService(_appStateService, _permanentStoreService, _jsonUtils, _messageService, _settingsService, _configurationService, _storageService, _progressService, _sceneService, _eventService) {
10481
10536
  var _this = this;
10482
10537
  this._appStateService = _appStateService;
10483
10538
  this._permanentStoreService = _permanentStoreService;
@@ -10488,6 +10543,7 @@
10488
10543
  this._storageService = _storageService;
10489
10544
  this._progressService = _progressService;
10490
10545
  this._sceneService = _sceneService;
10546
+ this._eventService = _eventService;
10491
10547
  // public static presetsPath = '/assets/presets';
10492
10548
  this.isLoading = false;
10493
10549
  this.beforeLoad = new rxjs.Subject();
@@ -10552,6 +10608,9 @@
10552
10608
  _b.label = 2;
10553
10609
  case 2:
10554
10610
  modelObj = JSON.parse(preset.model);
10611
+ if (modelObj.floorplan && modelObj.floorplan.corners && Object.keys(modelObj.floorplan.corners).length > 0) {
10612
+ this._eventService.dirty.next(true);
10613
+ }
10555
10614
  return [2 /*return*/, JSON.stringify(!modelObj.hasOwnProperty('needRescale') ? this._reScaleModel(modelObj) : modelObj)];
10556
10615
  }
10557
10616
  });
@@ -10559,7 +10618,10 @@
10559
10618
  };
10560
10619
  PresetsService.prototype._loadSavedRoomFromCloud = function (code) {
10561
10620
  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)); }); }); });
10621
+ this._loadRoomPlan(function () { return new Promise(function (resolve) {
10622
+ _this._eventService.dirty.next(true);
10623
+ _this._permanentStoreService.load(code).subscribe(function (json) { return resolve(JSON.stringify(json)); });
10624
+ }); });
10563
10625
  };
10564
10626
  PresetsService.prototype._clear = function () {
10565
10627
  return __awaiter$11(this, void 0, void 0, function () {
@@ -10797,14 +10859,14 @@
10797
10859
  };
10798
10860
  return PresetsService;
10799
10861
  }());
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 });
10862
+ 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
10863
  PresetsService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, providedIn: 'root' });
10802
10864
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PresetsService, decorators: [{
10803
10865
  type: i0.Injectable,
10804
10866
  args: [{
10805
10867
  providedIn: 'root'
10806
10868
  }]
10807
- }], ctorParameters: function () { return [{ type: AppStateService }, { type: PermanentStoreService }, { type: JsonUtilsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: ConfigurationService }, { type: LocalStorageService }, { type: ProgressService }, { type: SceneService }]; } });
10869
+ }], ctorParameters: function () { return [{ type: AppStateService }, { type: PermanentStoreService }, { type: JsonUtilsService }, { type: MessageBusService }, { type: HomedecoratorSettingsService }, { type: ConfigurationService }, { type: LocalStorageService }, { type: ProgressService }, { type: SceneService }, { type: HomedecoratorAppEventService }]; } });
10808
10870
 
10809
10871
  var DeviceSizeType;
10810
10872
  (function (DeviceSizeType) {
@@ -11099,7 +11161,9 @@
11099
11161
  });
11100
11162
  };
11101
11163
  LoadingOverlayComponent.prototype.hideLoadingIndicator = function () {
11102
- this.loadingDialogRef.close();
11164
+ if (this.loadingDialogRef) {
11165
+ this.loadingDialogRef.close();
11166
+ }
11103
11167
  };
11104
11168
  return LoadingOverlayComponent;
11105
11169
  }());
@@ -14309,8 +14373,8 @@
14309
14373
  /* tslint:disable */
14310
14374
  var VersionInfo = {
14311
14375
  application: "Homedecorator",
14312
- appVersion: "255.1.2",
14313
- revision: "111849"
14376
+ appVersion: "255.1.6",
14377
+ revision: "112253"
14314
14378
  };
14315
14379
  /* tslint:enable */
14316
14380
 
@@ -15026,7 +15090,7 @@
15026
15090
  });
15027
15091
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
15028
15092
  var metadata = Object.assign({}, this.metadata);
15029
- metadata.skin = this.skin;
15093
+ metadata.skin = Object.assign({}, this.skin);
15030
15094
  var copy = new CustomShapeFloorItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
15031
15095
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
15032
15096
  copy.calculateHalfSize();
@@ -15091,7 +15155,7 @@
15091
15155
  });
15092
15156
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
15093
15157
  var metadata = Object.assign({}, this.metadata);
15094
- metadata.skin = this.skin;
15158
+ metadata.skin = Object.assign({}, this.skin);
15095
15159
  var copy = new CustomCylinderFloorItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
15096
15160
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
15097
15161
  copy.calculateHalfSize();
@@ -15317,7 +15381,8 @@
15317
15381
  case hdecoPlacement_enum.HdecoPlacement.FloorWall:
15318
15382
  return ItemType.CustomWallFloor;
15319
15383
  case hdecoPlacement_enum.HdecoPlacement.Ceiling:
15320
- // return ItemType.Ceiling;
15384
+ // TODO implement ceiling placement the correct way.
15385
+ return ItemType.CustomFloorGroup;
15321
15386
  case hdecoPlacement_enum.HdecoPlacement.WallDecoration:
15322
15387
  return ItemType.WallDecoration;
15323
15388
  case hdecoPlacement_enum.HdecoPlacement.WindowDecoration:
@@ -15577,12 +15642,13 @@
15577
15642
  });
15578
15643
  };
15579
15644
  var FloorService = /** @class */ (function () {
15580
- function FloorService(_sceneService, _outlineService, _itemService, _settingsService) {
15645
+ function FloorService(_sceneService, _outlineService, _itemService, _settingsService, _messageService) {
15581
15646
  var _this = this;
15582
15647
  this._sceneService = _sceneService;
15583
15648
  this._outlineService = _outlineService;
15584
15649
  this._itemService = _itemService;
15585
15650
  this._settingsService = _settingsService;
15651
+ this._messageService = _messageService;
15586
15652
  this._floors = [];
15587
15653
  this._subs = [];
15588
15654
  this._subs.push(this._sceneService.sceneInitialized.subscribe(function (initialized) {
@@ -15636,6 +15702,8 @@
15636
15702
  else {
15637
15703
  this._updateFloorMaterial(this._floors[0], floorMaterial, texture);
15638
15704
  }
15705
+ // emit new texture for appearance-section
15706
+ this._messageService.emit(MessageType.ChangeTexture, texture);
15639
15707
  return [2 /*return*/];
15640
15708
  }
15641
15709
  });
@@ -15813,14 +15881,14 @@
15813
15881
  };
15814
15882
  return FloorService;
15815
15883
  }());
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 });
15884
+ 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
15885
  FloorService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, providedIn: 'root' });
15818
15886
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorService, decorators: [{
15819
15887
  type: i0.Injectable,
15820
15888
  args: [{
15821
15889
  providedIn: 'root'
15822
15890
  }]
15823
- }], ctorParameters: function () { return [{ type: SceneService }, { type: OutlineService }, { type: ItemService }, { type: HomedecoratorSettingsService }]; } });
15891
+ }], ctorParameters: function () { return [{ type: SceneService }, { type: OutlineService }, { type: ItemService }, { type: HomedecoratorSettingsService }, { type: MessageBusService }]; } });
15824
15892
 
15825
15893
  var CeilingService = /** @class */ (function () {
15826
15894
  function CeilingService(_sceneService, _configurationService) {
@@ -15968,7 +16036,7 @@
15968
16036
  this._subs = [];
15969
16037
  this._subs.push(this._appService.floorTexturesLoaded.subscribe(function (floors) {
15970
16038
  if (floors) {
15971
- _this._defaultFloorTexture = floors.find(function (f) { return f.default === true; });
16039
+ _this._defaultFloorTexture = floors.find(function (f) { return f.default === true && !f.useStandalone; });
15972
16040
  }
15973
16041
  }), 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
16042
  return __generator(this, function (_a) {
@@ -16218,6 +16286,9 @@
16218
16286
  }
16219
16287
  });
16220
16288
  };
16289
+ RoomService.prototype.resetAllRooms = function () {
16290
+ this.rooms = [];
16291
+ };
16221
16292
  RoomService.prototype._showHideWalls = function (show) {
16222
16293
  this.walls.forEach(function (w) { return w.showHideWall(show); });
16223
16294
  this._sceneService.needsRender = true;
@@ -17463,7 +17534,7 @@
17463
17534
  });
17464
17535
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
17465
17536
  var metadata = Object.assign({}, this.metadata);
17466
- metadata.skin = this.skin;
17537
+ metadata.skin = Object.assign({}, this.skin);
17467
17538
  var copy = new CustomShapeWallItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
17468
17539
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
17469
17540
  copy.calculateHalfSize();
@@ -17522,7 +17593,7 @@
17522
17593
  });
17523
17594
  var origScale = this.metadata.scale ? new THREE.Vector3(1, 1, 1).divide(this.metadata.scale) : new THREE.Vector3(1, 1, 1);
17524
17595
  var metadata = Object.assign({}, this.metadata);
17525
- metadata.skin = this.skin;
17596
+ metadata.skin = Object.assign({}, this.skin);
17526
17597
  var copy = new CustomCylinderWallItem(metadata, new THREE.Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
17527
17598
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
17528
17599
  copy.calculateHalfSize();
@@ -19631,7 +19702,7 @@
19631
19702
  _this.messageService.emit(MessageType.ShowLoadingIndicator, { title: 'Rendering...' });
19632
19703
  _this.requestRender(filename, camera, standalone, renderParameters);
19633
19704
  }).catch(function (error) {
19634
- console.log(error);
19705
+ _this.messageService.emit(MessageType.RenderError, { title: 'Upload error', message: error.message });
19635
19706
  });
19636
19707
  return [2 /*return*/];
19637
19708
  });
@@ -19675,8 +19746,8 @@
19675
19746
  return dataURL;
19676
19747
  };
19677
19748
  }
19678
- }).catch(function (err) {
19679
- console.log(err);
19749
+ }).catch(function (error) {
19750
+ _this.messageService.emit(MessageType.RenderError, { title: 'Render error', message: error.message });
19680
19751
  })];
19681
19752
  case 1:
19682
19753
  _a.sent();
@@ -21774,19 +21845,16 @@
21774
21845
  case 0:
21775
21846
  this._overrideDefaultCursorStyle('pointer');
21776
21847
  point = this._pointOnFloor(this._mousePosition);
21777
- if (!point) return [3 /*break*/, 3];
21848
+ if (!point) return [3 /*break*/, 2];
21778
21849
  distance = this._camera.position.distanceTo(point);
21779
21850
  this._hudService.exploreFloorHover(this._mousePosition, point, distance);
21780
- if (!!this._mouseMoved) return [3 /*break*/, 3];
21781
- return [4 /*yield*/, this._hudService.confirmExplore()];
21782
- case 1:
21783
- _a.sent();
21851
+ if (!!this._mouseMoved) return [3 /*break*/, 2];
21784
21852
  return [4 /*yield*/, this._cameraService.controls.animateMoveTo(point)];
21785
- case 2:
21853
+ case 1:
21786
21854
  _a.sent();
21787
21855
  this._updateExplorePoint();
21788
- _a.label = 3;
21789
- case 3: return [2 /*return*/];
21856
+ _a.label = 2;
21857
+ case 2: return [2 /*return*/];
21790
21858
  }
21791
21859
  });
21792
21860
  });
@@ -22296,12 +22364,20 @@
22296
22364
  }
22297
22365
  };
22298
22366
  SceneEventService.prototype._addToItemGroup = function (object, prevSelectedObject) {
22299
- var isIntersectWithGroupMember = object instanceof ItemGroup || object.parent instanceof ItemGroup;
22300
- if (!isIntersectWithGroupMember && !object.configuring && this._canGroupItems(object, prevSelectedObject)) {
22301
- if (prevSelectedObject) {
22302
- this._itemGroupService.addIfNotExist(prevSelectedObject);
22367
+ var isIntersectWithGroupMember;
22368
+ if (object && object.parent !== null) {
22369
+ isIntersectWithGroupMember = object instanceof ItemGroup || object.parent instanceof ItemGroup;
22370
+ }
22371
+ else {
22372
+ isIntersectWithGroupMember = object instanceof ItemGroup;
22373
+ }
22374
+ if (object && object.configuring !== null) {
22375
+ if (!isIntersectWithGroupMember && !object.configuring && this._canGroupItems(object, prevSelectedObject)) {
22376
+ if (prevSelectedObject) {
22377
+ this._itemGroupService.addIfNotExist(prevSelectedObject);
22378
+ }
22379
+ this._itemGroupService.addOrRemoveIfExist(object);
22303
22380
  }
22304
- this._itemGroupService.addOrRemoveIfExist(object);
22305
22381
  }
22306
22382
  };
22307
22383
  SceneEventService.prototype._canGroupFloorItem = function (item) {
@@ -24291,8 +24367,9 @@
24291
24367
  var FloorPatternService = /** @class */ (function () {
24292
24368
  function FloorPatternService() {
24293
24369
  }
24294
- FloorPatternService.prototype.generatePattern = function (floorPattern, plankSize, floorSize, direction) {
24370
+ FloorPatternService.prototype.generatePattern = function (floorPattern, plankSize, floorSize, direction, heartLine) {
24295
24371
  if (direction === void 0) { direction = FloorPatternDirection.LYING; }
24372
+ if (heartLine === void 0) { heartLine = 0; }
24296
24373
  var floorRotation = direction === FloorPatternDirection.STANDING ? 90 : 0;
24297
24374
  var floorWidth = floorSize.x;
24298
24375
  var floorLength = floorSize.z;
@@ -24300,15 +24377,18 @@
24300
24377
  floorWidth = floorSize.z;
24301
24378
  floorLength = floorSize.x;
24302
24379
  }
24380
+ if (heartLine < 0)
24381
+ heartLine = heartLine * -1;
24382
+ heartLine = heartLine % 100 / 100;
24303
24383
  switch (floorPattern) {
24304
24384
  case FloorPattern.NORMAL:
24305
- return this._normalPattern(plankSize, floorWidth, floorLength, floorRotation);
24385
+ return this._normalPattern(plankSize, floorWidth, floorLength, floorRotation, heartLine);
24306
24386
  case FloorPattern.HERRINGBONE:
24307
- return this._herringBone(plankSize, floorWidth, floorLength, floorRotation);
24387
+ return this._herringBone(plankSize, floorWidth, floorLength, floorRotation, heartLine);
24308
24388
  case FloorPattern.HON45:
24309
- return this._hon(plankSize, floorWidth, floorLength, floorRotation, 45);
24389
+ return this._hon(plankSize, floorWidth, floorLength, floorRotation, 45, heartLine);
24310
24390
  case FloorPattern.HON60:
24311
- return this._hon(plankSize, floorWidth, floorLength, floorRotation, 60);
24391
+ return this._hon(plankSize, floorWidth, floorLength, floorRotation, 60, heartLine);
24312
24392
  }
24313
24393
  };
24314
24394
  FloorPatternService.prototype._rotatePatternOnZAxis = function (items, floorRotation) {
@@ -24322,14 +24402,15 @@
24322
24402
  });
24323
24403
  }
24324
24404
  };
24325
- FloorPatternService.prototype._normalPattern = function (plankSize, floorWidth, floorLength, floorRotation) {
24405
+ FloorPatternService.prototype._normalPattern = function (plankSize, floorWidth, floorLength, floorRotation, heartLine) {
24326
24406
  var items = [];
24327
24407
  var stepOffsetAmount = .4;
24328
24408
  var plankWidth = plankSize.x;
24329
24409
  var plankLength = plankSize.z;
24330
24410
  var offsetSteps = plankWidth / stepOffsetAmount;
24411
+ var heartLineOffset = plankWidth * heartLine;
24331
24412
  var rows = Math.ceil(floorLength / plankLength);
24332
- var columns = Math.ceil(floorWidth / plankWidth);
24413
+ var columns = Math.ceil(floorWidth / plankWidth + heartLineOffset);
24333
24414
  var centerOffsetX = (floorWidth / 2 * -1) + (plankWidth / 2);
24334
24415
  var centerOffsetZ = (floorLength / 2 * -1) + (plankLength / 2);
24335
24416
  var currentOffsetStep = 0;
@@ -24343,7 +24424,7 @@
24343
24424
  for (var col = 0; col < planks; col++) {
24344
24425
  var plankPosX = (plankWidth * col) - currentOffsetAmount;
24345
24426
  items.push({
24346
- position: new THREE.Vector3(plankPosX + centerOffsetX, 0, plankPosZ + centerOffsetZ),
24427
+ position: new THREE.Vector3(plankPosX + centerOffsetX - heartLineOffset, 0, plankPosZ + centerOffsetZ),
24347
24428
  rotation: new THREE.Vector3(0, THREE.MathUtils.degToRad(floorRotation), 0),
24348
24429
  isLeft: true
24349
24430
  });
@@ -24353,7 +24434,7 @@
24353
24434
  this._rotatePatternOnZAxis(items, floorRotation);
24354
24435
  return items;
24355
24436
  };
24356
- FloorPatternService.prototype._herringBone = function (plankSize, floorWidth, floorLength, floorRotation) {
24437
+ FloorPatternService.prototype._herringBone = function (plankSize, floorWidth, floorLength, floorRotation, heartLine) {
24357
24438
  var items = [];
24358
24439
  var herringBoneAngle = 45;
24359
24440
  var sqrt2 = Math.sqrt(2);
@@ -24361,7 +24442,8 @@
24361
24442
  var plankLength = plankSize.z;
24362
24443
  var offsetPlankPosX = plankWidth * sqrt2;
24363
24444
  var offsetPlankPosZ = plankLength * sqrt2;
24364
- var columns = Math.ceil(floorWidth / (plankWidth * sqrt2));
24445
+ var heartLinePosX = offsetPlankPosX * heartLine;
24446
+ var columns = Math.ceil(floorWidth / (plankWidth * sqrt2) + heartLinePosX);
24365
24447
  var rows = Math.ceil(floorLength / (plankLength * sqrt2) +
24366
24448
  // add extra rows so that there isn't a gap
24367
24449
  offsetPlankPosX * 2);
@@ -24372,12 +24454,12 @@
24372
24454
  for (var row = 0; row < rows; row++) {
24373
24455
  var plankPosZ = offsetPlankPosZ * row;
24374
24456
  var plankLeft = {
24375
- position: new THREE.Vector3(plankPosX + centerOffsetX, 0, plankPosZ + centerOffsetZ),
24457
+ position: new THREE.Vector3(plankPosX + centerOffsetX - heartLinePosX, 0, plankPosZ + centerOffsetZ),
24376
24458
  rotation: new THREE.Vector3(0, THREE.MathUtils.degToRad(floorRotation + herringBoneAngle), 0),
24377
24459
  isLeft: true
24378
24460
  };
24379
24461
  var plankRight = {
24380
- position: new THREE.Vector3(plankPosX + offsetPlankPosX / 2 + centerOffsetX, 0, plankPosZ + offsetPlankPosZ / 2 + centerOffsetZ),
24462
+ position: new THREE.Vector3(plankPosX + offsetPlankPosX / 2 + centerOffsetX - heartLinePosX, 0, plankPosZ + offsetPlankPosZ / 2 + centerOffsetZ),
24381
24463
  rotation: new THREE.Vector3(0, THREE.MathUtils.degToRad(floorRotation - herringBoneAngle), 0),
24382
24464
  isLeft: false
24383
24465
  };
@@ -24387,7 +24469,7 @@
24387
24469
  this._rotatePatternOnZAxis(items, floorRotation);
24388
24470
  return items;
24389
24471
  };
24390
- FloorPatternService.prototype._hon = function (plankSize, floorWidth, floorLength, floorRotation, patternAngle) {
24472
+ FloorPatternService.prototype._hon = function (plankSize, floorWidth, floorLength, floorRotation, patternAngle, heartLine) {
24391
24473
  var items = [];
24392
24474
  var patternAngleRad = THREE.MathUtils.degToRad(patternAngle);
24393
24475
  var plankWidth = plankSize.x;
@@ -24398,21 +24480,22 @@
24398
24480
  var rowExtendValue = plankWidth * cos;
24399
24481
  var offsetZ = plankLength * cos * 2;
24400
24482
  var offsetX = plankWidth * sin;
24401
- var centerOffsetX = (floorWidth - offsetX) / 2 + overlapValue;
24483
+ var heartLinePosX = offsetX * heartLine;
24484
+ var centerOffsetX = ((floorWidth - offsetX) / 2 + overlapValue);
24402
24485
  var centerOffsetZ = (floorLength + rowExtendValue) / 2;
24403
- var columns = Math.ceil(floorWidth / ((offsetX - overlapValue) * 2));
24486
+ var columns = Math.ceil(floorWidth / ((offsetX - overlapValue) * 2) + heartLinePosX);
24404
24487
  var rows = Math.ceil((floorLength + rowExtendValue) / offsetZ);
24405
24488
  for (var column = 0; column < columns; column++) {
24406
24489
  var plankPosX = column * (offsetX - overlapValue) * 2;
24407
24490
  for (var row = 0; row < rows; row++) {
24408
24491
  var plankPosZ = row * offsetZ;
24409
24492
  var plankLeft = {
24410
- position: new THREE.Vector3(plankPosX - centerOffsetX, 0, plankPosZ - centerOffsetZ),
24493
+ position: new THREE.Vector3(plankPosX - centerOffsetX - heartLinePosX, 0, plankPosZ - centerOffsetZ),
24411
24494
  rotation: new THREE.Vector3(0, THREE.MathUtils.degToRad((90 - patternAngle) + floorRotation), 0),
24412
24495
  isLeft: true
24413
24496
  };
24414
24497
  var plankRight = {
24415
- position: new THREE.Vector3(plankPosX + offsetX - overlapValue - centerOffsetX, 0, plankPosZ - centerOffsetZ),
24498
+ position: new THREE.Vector3(plankPosX + offsetX - overlapValue - centerOffsetX - heartLinePosX, 0, plankPosZ - centerOffsetZ),
24416
24499
  rotation: new THREE.Vector3(0, THREE.MathUtils.degToRad((90 + patternAngle) + floorRotation), 0),
24417
24500
  isLeft: false
24418
24501
  };
@@ -24935,16 +25018,17 @@
24935
25018
  FloorTileIntersectionService.prototype.toggleDebug = function () {
24936
25019
  this._debug = !this._debug;
24937
25020
  };
24938
- FloorTileIntersectionService.prototype.countTiles = function (floorMesh, floorPattern, geometry) {
25021
+ FloorTileIntersectionService.prototype.countTiles = function (floorMesh, floorPattern, geometryLeft, geometryRight, addFiltered) {
24939
25022
  var e_1, _a;
25023
+ if (geometryRight === void 0) { geometryRight = null; }
25024
+ if (addFiltered === void 0) { addFiltered = false; }
24940
25025
  var result = {
24941
25026
  left: 0,
24942
25027
  right: 0,
24943
25028
  edge: 0,
24944
- total: 0,
25029
+ total: 0
24945
25030
  };
24946
- console.log(floorMesh.position);
24947
- var _b = this._checkIntersection2(floorMesh, floorPattern, geometry), floorHits = _b.floorHits, edgeHits = _b.edgeHits;
25031
+ var _b = this._checkIntersection2(floorMesh, floorPattern, geometryLeft, geometryRight), floorHits = _b.floorHits, edgeHits = _b.edgeHits;
24948
25032
  try {
24949
25033
  for (var floorHits_1 = __values(floorHits), floorHits_1_1 = floorHits_1.next(); !floorHits_1_1.done; floorHits_1_1 = floorHits_1.next()) {
24950
25034
  var floorHit = floorHits_1_1.value;
@@ -24965,22 +25049,28 @@
24965
25049
  }
24966
25050
  result.edge = edgeHits.length;
24967
25051
  result.total = floorHits.length;
25052
+ if (addFiltered)
25053
+ result.filtered = floorHits;
24968
25054
  return result;
24969
25055
  };
24970
- FloorTileIntersectionService.prototype._checkIntersection2 = function (floorMesh, floorPattern, geometry) {
25056
+ FloorTileIntersectionService.prototype._checkIntersection2 = function (floorMesh, floorPattern, geometryLeft, geometryRight) {
24971
25057
  var e_2, _a;
24972
- // const edgeColliders = this._generateEdgeColliders(floorMesh.geometry);
25058
+ var edgeColliders = this._generateEdgeColliders(floorMesh.geometry);
24973
25059
  var result = {
24974
25060
  floorHits: new Array(),
24975
25061
  edgeHits: new Array()
24976
25062
  };
24977
- var bvh = new threeMeshBvh.MeshBVH(geometry);
25063
+ var bvhLeft = new threeMeshBvh.MeshBVH(geometryLeft);
25064
+ var bvhRight = (geometryRight !== null) ? new threeMeshBvh.MeshBVH(geometryRight) : null;
24978
25065
  var positionReference = new THREE.Object3D();
24979
25066
  try {
24980
25067
  for (var floorPattern_1 = __values(floorPattern), floorPattern_1_1 = floorPattern_1.next(); !floorPattern_1_1.done; floorPattern_1_1 = floorPattern_1.next()) {
24981
25068
  var floorItem = floorPattern_1_1.value;
25069
+ var bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
24982
25070
  var pos = floorItem.position;
25071
+ var rot = floorItem.rotation;
24983
25072
  positionReference.position.set(pos.x, pos.y, pos.z);
25073
+ positionReference.rotation.set(rot.x, rot.y, rot.z);
24984
25074
  positionReference.updateMatrixWorld();
24985
25075
  var floorWorldToBhv = new THREE.Matrix4()
24986
25076
  .copy(positionReference.matrixWorld)
@@ -25136,7 +25226,6 @@
25136
25226
  this.arPlacementUpdate = new rxjs.Subject();
25137
25227
  this.showElementToolbar = false;
25138
25228
  this.isMouseOverObject = false;
25139
- this.activeAnswers = [];
25140
25229
  this.standAloneFirstBuildReady = false;
25141
25230
  this._useNodeIdToLink = true;
25142
25231
  this._standAlone = false;
@@ -25370,7 +25459,7 @@
25370
25459
  if (looseOriginalConfiguration === void 0) { looseOriginalConfiguration = true; }
25371
25460
  if (firstBuild === void 0) { firstBuild = false; }
25372
25461
  return __awaiter$G(this, void 0, void 0, function () {
25373
- var originalInstanceId_1, _a, _b, questionAndAnswers;
25462
+ var originalInstanceId_1, _a, _b;
25374
25463
  return __generator(this, function (_c) {
25375
25464
  switch (_c.label) {
25376
25465
  case 0:
@@ -25413,22 +25502,14 @@
25413
25502
  this.startPosition = result.metaData.position ? result.metaData.position.clone() : new THREE.Vector3();
25414
25503
  return [4 /*yield*/, this._iOne.getQuestionAndAnswersAsync()];
25415
25504
  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;
25505
+ _c.sent(); // see if there is user input needed
25506
+ if (!(this._iOne.activeAnswers.length === 0)) return [3 /*break*/, 9];
25424
25507
  return [4 /*yield*/, this._prepareSelectionsAndDecos(result)
25425
25508
  .catch(function (e) { return Promise.reject(e); })];
25426
25509
  case 8:
25427
25510
  _c.sent();
25428
25511
  return [2 /*return*/, this.build(result)];
25429
25512
  case 9:
25430
- this.activeQuestion = questionAndAnswers.question;
25431
- this.activeAnswers = questionAndAnswers.answers;
25432
25513
  if (!firstBuild) return [3 /*break*/, 11];
25433
25514
  return [4 /*yield*/, this._prepareSelectionsAndDecos(result)
25434
25515
  .catch(function (e) { return Promise.reject(e); })];
@@ -25565,6 +25646,7 @@
25565
25646
  });
25566
25647
  };
25567
25648
  BuildFurnitureService.prototype._generateLayingPattern = function (floor) {
25649
+ var e_1, _a;
25568
25650
  var floorPatternInfo = this._generateFloorPatternInfo(floor);
25569
25651
  floor.restoreFloorObject();
25570
25652
  var meshLeft = this.full3DObjectToUse.children.find(function (m) { return m.name === floorPatternInfo.meshIdLeft; });
@@ -25577,42 +25659,57 @@
25577
25659
  var floorSize = floor.size;
25578
25660
  var plankSize = new THREE.Vector3();
25579
25661
  meshLeft.geometry.boundingBox.getSize(plankSize);
25580
- var items = this._floorPatternService.generatePattern(floorPatternInfo.floorPattern, plankSize, floorSize, floorPatternInfo.floorPatternDirection);
25581
- var itemAmount = (meshRight === null) ? items.length : items.length / 2;
25662
+ var items = this._floorPatternService.generatePattern(floorPatternInfo.floorPattern, plankSize, floorSize, floorPatternInfo.floorPatternDirection, floorPatternInfo.heartLine);
25582
25663
  var material = floor.getMaterial();
25583
- var planksLeft = new THREE.InstancedMesh(meshLeft.geometry, material, itemAmount);
25664
+ this._floorTileIntersectionService.toggleDebug();
25665
+ var floorCountResult = this._floorTileIntersectionService.countTiles(floor.floorMesh, items, meshLeft.geometry, (meshRight) ? meshRight.geometry : null, true);
25666
+ floor.metadata.floorCountResult = floorCountResult;
25667
+ var leftItems = new Array();
25668
+ var rightItems = new Array();
25669
+ try {
25670
+ for (var _b = __values(floorCountResult.filtered), _c = _b.next(); !_c.done; _c = _b.next()) {
25671
+ var item = _c.value;
25672
+ if (item.isLeft) {
25673
+ leftItems.push(item);
25674
+ }
25675
+ else {
25676
+ rightItems.push(item);
25677
+ }
25678
+ }
25679
+ }
25680
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
25681
+ finally {
25682
+ try {
25683
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
25684
+ }
25685
+ finally { if (e_1) throw e_1.error; }
25686
+ }
25687
+ var planksLeft = this._instancedMeshFromFloorPatternTransform(meshLeft.geometry, leftItems, material);
25584
25688
  var planksRight;
25585
25689
  if (meshRight) {
25586
- planksRight = new THREE.InstancedMesh(meshRight.geometry, material, itemAmount);
25690
+ planksRight = this._instancedMeshFromFloorPatternTransform(meshRight.geometry, rightItems, material);
25587
25691
  }
25588
- // assign transform to each item in instanced mesh
25692
+ var customFloorWrapper = new THREE.Object3D();
25693
+ customFloorWrapper.add(planksLeft);
25694
+ if (planksRight)
25695
+ customFloorWrapper.add(planksRight);
25696
+ floor.floorObject = customFloorWrapper;
25697
+ };
25698
+ BuildFurnitureService.prototype._instancedMeshFromFloorPatternTransform = function (geom, pattern, material) {
25699
+ if (pattern.length <= 0)
25700
+ return null;
25701
+ var targetPlankMesh = new THREE.InstancedMesh(geom, material, pattern.length);
25589
25702
  var dummy = new THREE.Object3D();
25590
- var matrixIndex = 0;
25591
- for (var i = 0; i < items.length; i++) {
25592
- var item = items[i];
25593
- var targetPlankMesh = (item.isLeft) ? planksLeft : planksRight;
25703
+ for (var i = 0; i < pattern.length; i++) {
25704
+ var item = pattern[i];
25594
25705
  var position = item.position;
25595
25706
  var rotation = item.rotation;
25596
25707
  dummy.position.set(position.x, position.y, position.z);
25597
25708
  dummy.rotation.set(rotation.x, rotation.y, rotation.z);
25598
25709
  dummy.updateMatrix();
25599
- targetPlankMesh.setMatrixAt(matrixIndex, dummy.matrix);
25600
- if (planksRight) {
25601
- if (i !== 0 && (i % 2 !== 0)) {
25602
- matrixIndex++;
25603
- }
25604
- }
25605
- else {
25606
- matrixIndex++;
25607
- }
25710
+ targetPlankMesh.setMatrixAt(i, dummy.matrix);
25608
25711
  }
25609
- var customFloorWrapper = new THREE.Object3D();
25610
- customFloorWrapper.add(planksLeft);
25611
- if (planksRight)
25612
- customFloorWrapper.add(planksRight);
25613
- floor.floorObject = customFloorWrapper;
25614
- // this._floorTileIntersectionService.toggleDebug();
25615
- floor.metadata.floorCountResult = this._floorTileIntersectionService.countTiles(floor.floorMesh, items, meshLeft.geometry);
25712
+ return targetPlankMesh;
25616
25713
  };
25617
25714
  BuildFurnitureService.prototype._generateFloorPatternInfo = function (item) {
25618
25715
  this._generateSelectedInMetadata(item);
@@ -25620,7 +25717,8 @@
25620
25717
  meshIdLeft: null,
25621
25718
  meshIdRight: null,
25622
25719
  floorPattern: FloorPattern.NORMAL,
25623
- floorPatternDirection: FloorPatternDirection.LYING
25720
+ floorPatternDirection: FloorPatternDirection.LYING,
25721
+ heartLine: 0
25624
25722
  };
25625
25723
  var selected = item.metadata.selections;
25626
25724
  var afmeting = selected.find(function (s) { return s.question.toLowerCase() === 'plank afmeting'; });
@@ -25628,6 +25726,13 @@
25628
25726
  afmetingString = afmetingString.substr(afmetingString.lastIndexOf(' ') + 1);
25629
25727
  var legPatroonAnswer = selected.find(function (s) { return s.question.toLowerCase() === 'leg patroon'; }).answer.toLowerCase();
25630
25728
  var legPatroonString = '';
25729
+ var hartlineType = selected.find(function (s) { return s.question.toLowerCase() === 'hartlijn'; });
25730
+ if (hartlineType && hartlineType.answer.toLowerCase() === 'aangepast') {
25731
+ var hartlineValue = selected.find(function (s) { return s.question.toLowerCase() === 'hartlijn_aangepast'; });
25732
+ if (hartlineValue && hartlineValue.userInputValue !== undefined) {
25733
+ info.heartLine = Number(hartlineValue.userInputValue);
25734
+ }
25735
+ }
25631
25736
  switch (true) {
25632
25737
  case legPatroonAnswer.indexOf('recht') !== -1:
25633
25738
  legPatroonString = '90';
@@ -25732,7 +25837,7 @@
25732
25837
  };
25733
25838
  BuildFurnitureService.prototype._prepareSelectionsAndDecos = function (result) {
25734
25839
  return __awaiter$G(this, void 0, void 0, function () {
25735
- var selectionsAndDecoPromise, e_1, e_2;
25840
+ var selectionsAndDecoPromise, e_2, e_3;
25736
25841
  return __generator(this, function (_a) {
25737
25842
  switch (_a.label) {
25738
25843
  case 0:
@@ -25748,7 +25853,7 @@
25748
25853
  this._preloadMaterials(result.metaData.schema);
25749
25854
  return [3 /*break*/, 4];
25750
25855
  case 3:
25751
- e_1 = _a.sent();
25856
+ e_2 = _a.sent();
25752
25857
  return [3 /*break*/, 4];
25753
25858
  case 4:
25754
25859
  if (!(this._iOne.selections.length < 2)) return [3 /*break*/, 9];
@@ -25767,8 +25872,8 @@
25767
25872
  this._getSelectionsAndDecosFromMetadata(result);
25768
25873
  return [3 /*break*/, 9];
25769
25874
  case 8:
25770
- e_2 = _a.sent();
25771
- return [2 /*return*/, Promise.reject(e_2)];
25875
+ e_3 = _a.sent();
25876
+ return [2 /*return*/, Promise.reject(e_3)];
25772
25877
  case 9:
25773
25878
  this._iOne.selections.forEach(function (s) {
25774
25879
  s.schema = result.metaData.schema;
@@ -26053,7 +26158,6 @@
26053
26158
  if (rebuild === void 0) { rebuild = true; }
26054
26159
  if (getAnswers === void 0) { getAnswers = false; }
26055
26160
  return __awaiter$G(this, void 0, void 0, function () {
26056
- var questionAndAnswers;
26057
26161
  return __generator(this, function (_a) {
26058
26162
  switch (_a.label) {
26059
26163
  case 0: return [4 /*yield*/, this._iOne.cancelAnswer()];
@@ -26066,9 +26170,7 @@
26066
26170
  if (!getAnswers) return [3 /*break*/, 4];
26067
26171
  return [4 /*yield*/, this._iOne.getQuestionAndAnswersAsync()];
26068
26172
  case 3:
26069
- questionAndAnswers = _a.sent();
26070
- this._iOne.handleAnswersReceived(questionAndAnswers.answers);
26071
- this._appEventService.answerCountReceived.next(questionAndAnswers.answers.length);
26173
+ _a.sent(); // see if there is user input needed
26072
26174
  _a.label = 4;
26073
26175
  case 4: return [2 /*return*/];
26074
26176
  }
@@ -27693,12 +27795,19 @@
27693
27795
  if (light instanceof THREE.AmbientLight || light instanceof THREE.HemisphereLight) {
27694
27796
  return;
27695
27797
  }
27798
+ var corners = this._floorplanService.getCorners();
27799
+ if (!corners || corners.length < 1) {
27800
+ return;
27801
+ }
27696
27802
  var ro = light.userData.rotationOffset;
27697
27803
  var wo = light.userData.wallOffset;
27698
27804
  var fc = this._floorplanService.getCenter();
27699
27805
  var size = this._floorplanService.getSize();
27700
27806
  var planHalfWidth = isFinite(size.x) ? size.x / 2.0 : 0;
27701
27807
  var planHalfDepth = isFinite(size.z) ? size.z / 2.0 : 0;
27808
+ if (wo === 0) { // just use position of light
27809
+ return;
27810
+ }
27702
27811
  // Reset position & rotation
27703
27812
  light.position.x = fc.x;
27704
27813
  light.position.z = fc.z;
@@ -28026,7 +28135,7 @@
28026
28135
  else {
28027
28136
  if (!_this._appService.sku) {
28028
28137
  var navigatorType_1 = _this._screenSizeAnalysis.navigatorType();
28029
- var lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.navigatorType === navigatorType_1 && !preset.standalone; });
28138
+ var lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.navigatorType === navigatorType_1 && preset.default && !preset.standalone; });
28030
28139
  if (!lightPreset) {
28031
28140
  lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.default; });
28032
28141
  }
@@ -28037,7 +28146,7 @@
28037
28146
  }
28038
28147
  if (_this._appService.sku) {
28039
28148
  var navigatorType_2 = _this._screenSizeAnalysis.navigatorType();
28040
- var lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.navigatorType === navigatorType_2 && preset.standalone; });
28149
+ var lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.navigatorType === navigatorType_2 && preset.default && preset.standalone; });
28041
28150
  if (!lightPreset) {
28042
28151
  lightPreset = _this.loadedLightPresets.find(function (preset) { return preset.standalone; });
28043
28152
  }
@@ -28243,17 +28352,20 @@
28243
28352
  };
28244
28353
  LightPresetsService.prototype._createLightFromProperties = function (lightProperties) {
28245
28354
  var lightType = lightProperties.type;
28246
- // const light: Light = new (this._lightsMap.get(lightType))();
28247
- var getLights = new LightCreateService();
28248
- var light = getLights.createNewLight(lightType);
28355
+ var lightConstructor = this._lightsMap.get(lightType);
28356
+ var light = new lightConstructor();
28249
28357
  light.userData.wallOffset = lightProperties.wallOffset;
28250
28358
  light.userData.rotationOffset = lightProperties.rotationOffset;
28251
28359
  light.userData.topDownDirectional = lightProperties.topDownDirectional;
28252
28360
  for (var property in lightProperties) {
28253
- if (!light.hasOwnProperty(property)) {
28361
+ if (!(property in light)) {
28254
28362
  continue;
28255
28363
  }
28256
28364
  if (property === 'position') {
28365
+ if (light.userData.wallOffset === 0) {
28366
+ light.position.x = lightProperties.position.x;
28367
+ light.position.z = lightProperties.position.z;
28368
+ }
28257
28369
  light.position.y = lightProperties.position.y;
28258
28370
  }
28259
28371
  else if (property === 'color') {
@@ -28843,7 +28955,7 @@
28843
28955
  this.addRenderOptions(this._sceneService.renderer);
28844
28956
  this.addLights(this._sceneService.scene);
28845
28957
  };
28846
- SceneControlComponent.prototype.addRenderOptions = function (renderer) {
28958
+ SceneControlComponent.prototype.addRenderOptions = function (renderer /*| WebGPURenderer*/) {
28847
28959
  var _this = this;
28848
28960
  var folder = this.gui.addFolder('renderer');
28849
28961
  folder.add(renderer, 'toneMappingExposure', 0, 5).onChange(function () {
@@ -28973,9 +29085,9 @@
28973
29085
  folder.add(light, 'decay', 0, 5).onChange(function (val) {
28974
29086
  _this._updateScene();
28975
29087
  });
28976
- folder.add(light, 'distance', 0, 100).onChange(function (val) {
28977
- _this._updateScene();
28978
- });
29088
+ // folder.add(light, 'distance', 0, 100).onChange((val: any) => {
29089
+ // this._updateScene();
29090
+ // });
28979
29091
  }
28980
29092
  folder.add(light, 'intensity', 0.01, 20).step(0.01).onChange(function () {
28981
29093
  _this._updateScene();
@@ -30547,7 +30659,9 @@
30547
30659
  data.files = {
30548
30660
  glbData: this._arrayBufferToBase64(sceneData)
30549
30661
  };
30550
- this._handleWebSocketRoomRender(data);
30662
+ if (this._settingsService.settings.options.useRenderWebsocket) {
30663
+ this._handleWebSocketRoomRender(data);
30664
+ }
30551
30665
  return [2 /*return*/];
30552
30666
  }
30553
30667
  });
@@ -30849,7 +30963,7 @@
30849
30963
  });
30850
30964
  };
30851
30965
  var RenderDialogComponent = /** @class */ (function () {
30852
- function RenderDialogComponent(cameraService, renderService, messageService, _utilsService, _domSanitizer, _settingsService, _newRenderService, _3dmRenderApi) {
30966
+ function RenderDialogComponent(cameraService, renderService, messageService, _utilsService, _domSanitizer, _settingsService, _newRenderService, _3dmRenderApi, _dialog) {
30853
30967
  var _this = this;
30854
30968
  this.cameraService = cameraService;
30855
30969
  this.renderService = renderService;
@@ -30859,6 +30973,7 @@
30859
30973
  this._settingsService = _settingsService;
30860
30974
  this._newRenderService = _newRenderService;
30861
30975
  this._3dmRenderApi = _3dmRenderApi;
30976
+ this._dialog = _dialog;
30862
30977
  this.renderStatus = RenderStatus;
30863
30978
  this.iconName = IconName;
30864
30979
  this.renderModes = RenderModes;
@@ -31057,6 +31172,10 @@
31057
31172
  this.messageService.emit(MessageType.ShowLoadingIndicator, { title: 'Uploading...' });
31058
31173
  this._utilsService.prepRoomForRender(false, renderInput);
31059
31174
  };
31175
+ RenderDialogComponent.prototype.cancelBlenderRender = function () {
31176
+ this.messageService.emit(MessageType.HideLoadingIndicator);
31177
+ this._dialog.closeAll();
31178
+ };
31060
31179
  RenderDialogComponent.prototype.saveImage = function (url) {
31061
31180
  var link = document.createElement('a');
31062
31181
  link.setAttribute('target', '_blank');
@@ -31129,8 +31248,8 @@
31129
31248
  };
31130
31249
  return RenderDialogComponent;
31131
31250
  }());
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: [
31251
+ 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 });
31252
+ 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 </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:20px;padding:0;width:30px;min-width:0px;line-height:30px}: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:400px;background:#e4edf4;padding:30px;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: 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
31253
  animations.trigger('slideInOut', [
31135
31254
  animations.state('1', animations.style({ 'max-height': '*' })),
31136
31255
  animations.state('0', animations.style({ 'max-height': '0px' })),
@@ -31151,7 +31270,7 @@
31151
31270
  templateUrl: './render-dialog.component.html',
31152
31271
  styleUrls: ['./render-dialog.component.scss']
31153
31272
  }]
31154
- }], ctorParameters: function () { return [{ type: CameraService }, { type: RenderService }, { type: MessageBusService }, { type: UtilsService }, { type: i1__namespace.DomSanitizer }, { type: HomedecoratorSettingsService }, { type: NewRenderService }, { type: ApiServiceModule }]; }, propDecorators: { renderImageField: [{
31273
+ }], 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
31274
  type: i0.ViewChild,
31156
31275
  args: ['render_image', { static: true }]
31157
31276
  }], imageWidthField: [{
@@ -31179,7 +31298,8 @@
31179
31298
  // this.messageService.emit(MessageType.ShowLoadingIndicator, {title: 'Uploading...'});
31180
31299
  // this._utilsService.prepRoomForRender();
31181
31300
  this._dialog.open(RenderDialogComponent, {
31182
- panelClass: 'render-dialog-content'
31301
+ panelClass: 'render-dialog-content',
31302
+ width: '400px'
31183
31303
  });
31184
31304
  // // if (this.settingsService.settings.options.useNewRender) {
31185
31305
  // // this.newRenderService.renderImage();
@@ -32595,12 +32715,17 @@
32595
32715
  });
32596
32716
  };
32597
32717
  AnswersSlideoutComponent.prototype._containsTextParts = function (value) {
32598
- for (var i = 0; i < this.chipTexts.length; i++) {
32599
- if (value.indexOf(this.chipTexts[i].toLowerCase()) < 0) {
32600
- return false;
32718
+ if (this.chipTexts !== undefined) {
32719
+ for (var i = 0; i < this.chipTexts.length; i++) {
32720
+ if (value.indexOf(this.chipTexts[i].toLowerCase()) < 0) {
32721
+ return false;
32722
+ }
32601
32723
  }
32724
+ return true;
32725
+ }
32726
+ else {
32727
+ return true;
32602
32728
  }
32603
- return true;
32604
32729
  };
32605
32730
  AnswersSlideoutComponent.prototype._setArrays = function () {
32606
32731
  var _this = this;
@@ -32832,7 +32957,7 @@
32832
32957
  return LiteSelectorComponent;
32833
32958
  }());
32834
32959
  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: [
32960
+ 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
32961
  animations.trigger('showSelections', [
32837
32962
  animations.state('void', animations.style({ 'transform': 'translateX(100%)', opacity: 0 })),
32838
32963
  animations.state('*', animations.style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -33595,7 +33720,7 @@
33595
33720
  });
33596
33721
  };
33597
33722
  var FloorplannerComponent = /** @class */ (function () {
33598
- function FloorplannerComponent(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService) {
33723
+ function FloorplannerComponent(_floorplanService, _messageBusService, _configurationService, _dimensionService, _viewModeService, _roomService) {
33599
33724
  var _a, _b;
33600
33725
  var _this = this;
33601
33726
  this._floorplanService = _floorplanService;
@@ -33603,6 +33728,7 @@
33603
33728
  this._configurationService = _configurationService;
33604
33729
  this._dimensionService = _dimensionService;
33605
33730
  this._viewModeService = _viewModeService;
33731
+ this._roomService = _roomService;
33606
33732
  this.selectedWallChange = new rxjs.Subject();
33607
33733
  this._viewScaleMin = 50;
33608
33734
  this._viewScaleMax = 300;
@@ -33727,12 +33853,16 @@
33727
33853
  this._context = this.canvasElement.nativeElement.getContext('2d');
33728
33854
  this._offsetX = this._canvas.clientLeft;
33729
33855
  this._offsetY = this._canvas.clientTop;
33730
- this._handleWindowResize();
33731
33856
  this._readyToDraw = true;
33857
+ this._handleWindowResize();
33732
33858
  }
33733
33859
  };
33734
33860
  FloorplannerComponent.prototype.showStartMessage = function () {
33735
- this._diagramBackground.src = '';
33861
+ if (this._diagramBackground) {
33862
+ this._diagramBackground.src = '';
33863
+ }
33864
+ this._floorplanService.reset();
33865
+ this._draw();
33736
33866
  this.showStartingMessages = true;
33737
33867
  };
33738
33868
  FloorplannerComponent.prototype.setMode = function (mode) {
@@ -34203,7 +34333,13 @@
34203
34333
  this.setSelectedMode(value);
34204
34334
  };
34205
34335
  FloorplannerComponent.prototype.setDiagramSettings = function (input) {
34336
+ this.reset();
34337
+ this._resetOrigin();
34338
+ this._viewScale = 100;
34339
+ this._updateCmPerPixel();
34340
+ this._draw();
34206
34341
  this._floorplanService.reset();
34342
+ this._roomService.resetAllRooms();
34207
34343
  this._diagramBackground = input.background;
34208
34344
  this._diagramBackgroundHeight = input.backgroundHeight;
34209
34345
  this._diagramBackgroundWidth = input.backgroundWidth;
@@ -34228,8 +34364,10 @@
34228
34364
  FloorplannerComponent.prototype._handleWindowResize = function () {
34229
34365
  if (this._canvas) {
34230
34366
  var parent = this._canvas.parentElement;
34231
- this._canvas.height = parent.clientHeight;
34232
- this._canvas.width = parent.clientWidth;
34367
+ if (parent && parent.clientHeight > 0) { // don't set dimensions of canvas to 0
34368
+ this._canvas.height = parent.clientHeight;
34369
+ this._canvas.width = parent.clientWidth;
34370
+ }
34233
34371
  this._draw();
34234
34372
  }
34235
34373
  };
@@ -34889,8 +35027,8 @@
34889
35027
  };
34890
35028
  return FloorplannerComponent;
34891
35029
  }());
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 } });
35030
+ 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 });
35031
+ 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
35032
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FloorplannerComponent, decorators: [{
34895
35033
  type: i0.Component,
34896
35034
  args: [{
@@ -34898,7 +35036,7 @@
34898
35036
  templateUrl: './floorplanner.component.html',
34899
35037
  styleUrls: ['./floorplanner.component.scss']
34900
35038
  }]
34901
- }], ctorParameters: function () { return [{ type: FloorplanService }, { type: MessageBusService }, { type: ConfigurationService }, { type: DimensioningService }, { type: ViewModeService }]; }, propDecorators: { canvasElement: [{
35039
+ }], ctorParameters: function () { return [{ type: FloorplanService }, { type: MessageBusService }, { type: ConfigurationService }, { type: DimensioningService }, { type: ViewModeService }, { type: RoomService }]; }, propDecorators: { canvasElement: [{
34902
35040
  type: i0.ViewChild,
34903
35041
  args: ['floorplannerCanvas', { read: i0.ElementRef, static: true }]
34904
35042
  }], selectedWallChange: [{
@@ -35579,7 +35717,7 @@
35579
35717
  });
35580
35718
  };
35581
35719
  var SettingsComponent = /** @class */ (function () {
35582
- function SettingsComponent(settingsService, _snackBar, _messageBus, _configurationService, _sceneService, _itemService, _appService, _fontService) {
35720
+ function SettingsComponent(settingsService, _snackBar, _messageBus, _configurationService, _sceneService, _itemService, _appService, _fontService, _settingsService) {
35583
35721
  this.settingsService = settingsService;
35584
35722
  this._snackBar = _snackBar;
35585
35723
  this._messageBus = _messageBus;
@@ -35588,6 +35726,7 @@
35588
35726
  this._itemService = _itemService;
35589
35727
  this._appService = _appService;
35590
35728
  this._fontService = _fontService;
35729
+ this._settingsService = _settingsService;
35591
35730
  this.configurationKey = ConfigurationKey;
35592
35731
  this.onWallsHeightUpdate = new i0.EventEmitter();
35593
35732
  this.version = 'Version: ' + (VersionInfo.appVersion || 'Unknown')
@@ -35606,6 +35745,8 @@
35606
35745
  this.showCameraControls = this._configurationService.getValue(ConfigurationKey.ShowWalkThroughCameraControls);
35607
35746
  this.showLightControls = this._configurationService.getValue(ConfigurationKey.ShowLightingControls);
35608
35747
  this.showPostProcessingSettings = this._configurationService.getValue(ConfigurationKey.ShowPostProcessingSettings);
35748
+ this.showAA = this._settingsService.settings.options.aaEnabled;
35749
+ this.showAO = this._settingsService.settings.options.aoEnabled;
35609
35750
  this.showWalls = this._configurationService.getValue(ConfigurationKey.ShowWalls);
35610
35751
  this.showCeiling = this._configurationService.getValue(ConfigurationKey.ShowCeiling);
35611
35752
  this.wallSnapping = this._configurationService.getValue(ConfigurationKey.WallSnapping);
@@ -35629,6 +35770,10 @@
35629
35770
  this[key] = checked;
35630
35771
  this._configurationService.setValue(key, checked);
35631
35772
  };
35773
+ SettingsComponent.prototype.toggleOption = function (option, checked) {
35774
+ this._settingsService.settings.options[option] = checked;
35775
+ this._settingsService.settingsChanged.next();
35776
+ };
35632
35777
  SettingsComponent.prototype.setInteriorLightIntensity = function (value) {
35633
35778
  this._configurationService.setValue(ConfigurationKey.InteriorLightIntensity, value);
35634
35779
  };
@@ -35709,8 +35854,8 @@
35709
35854
  };
35710
35855
  return SettingsComponent;
35711
35856
  }());
35712
- SettingsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SettingsComponent, deps: [{ token: HomedecoratorSettingsService }, { token: i2__namespace$4.MatSnackBar }, { token: MessageBusService }, { token: ConfigurationService }, { token: SceneService }, { token: ItemService }, { token: HomedecoratorAppService }, { token: FontService }], target: i0__namespace.ɵɵFactoryTarget.Component });
35713
- SettingsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SettingsComponent, selector: "rp-settings", inputs: { minWallHeight: "minWallHeight", placeCameraDisabled: "placeCameraDisabled" }, outputs: { onWallsHeightUpdate: "onWallsHeightUpdate" }, viewQueries: [{ propertyName: "versionFieldRef", first: true, predicate: ["versionField"], descendants: true, static: true }], ngImport: i0__namespace, template: "\r\n\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_TOUCH' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"enableTouch\"\r\n (change)=\"toggle(configurationKey.EnableTouch, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n\r\n<h3 class=\"mat-subheading-2\">{{'WALLS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <rp-dimension-input\r\n [sourceValue]=\"wallHeight\"\r\n [minValue]=\"minWallHeight\"\r\n title=\"{{'DEFAULT_HEIGHT' | localize}}\"\r\n (dimensionChanged)=\"applyNewHeight($event)\"\r\n >\r\n </rp-dimension-input>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DEFAULT_THICKNESS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{wallThickness}}</span>\r\n</div>\r\n<div *ngIf=\"showDetailedWallMeasurements\" class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DETAILED_WALL_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showDetailedWallMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowDetailedWallMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES_OF_WALL_ITEMS_IN_2D' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWallItemMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowWallItemMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_OF_WALLS_TO_BASIC_ANGLES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"wallSnapping\"\r\n (change)=\"toggle(configurationKey.WallSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_TO_WALL_JOINTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"cornerSnapping\"\r\n (change)=\"toggle(configurationKey.CornerSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'OBJECTS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectDistances\"\r\n (change)=\"toggle(configurationKey.ShowObjectDistances, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowObjectMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_ROTATION_SNAPPING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"rotationSnappingEnabled\"\r\n (change)=\"toggle(configurationKey.RotationSnappingEnabled, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DISPLAY_CUSTOM_SHAPE_NAMES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"displayCustomShapeNames\"\r\n (change)=\"toggle(configurationKey.DisplayCustomShapeNames, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'UNIT_INFO' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'MEASUREMENTS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{dimensioningUnit}}</span>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ANGLES' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{angleUnit}}</span>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'CAMERA' | localize}}</h3>\r\n<b class=\"mat-body-2\">{{'SET_START_POSITION_FOR_WALK_THROUGH_MODE' | localize}}</b>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n [disabled]=\"placeCameraDisabled\"\r\n class=\"place-camera\"\r\n (click)=\"placeCamera()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\r\n {{'PLACE_CAMERA' | localize}}\r\n </button>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CAMERA_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCameraControls\"\r\n (change)=\"toggle(configurationKey.ShowWalkThroughCameraControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'CLEAR_ROOM' | localize}}</h3>\r\n <b class=\"mat-body-2\">{{'CLEAR_ALL_FURNITURE_FROM_ROOM' | localize}}</b>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n class=\"remove-all\"\r\n (click)=\"removeAll()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">delete_sweep</mat-icon>\r\n {{'CLEAR_FURNITURE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"settingsService.settings.options.development\">\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'LIGHTS' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_LIGHTING_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showLightControls\"\r\n (change)=\"toggle(configurationKey.ShowLightingControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"toggle(configurationKey.ShowLightplansDialog, true)\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\r\n {{'MANAGE_LIGHTPLANS' | localize}}\r\n </button>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_INTERIOR_LIGHTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showInteriorLights\"\r\n (change)=\"toggle(configurationKey.ShowInteriorLights, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'INTERIOR_LIGHT_INTENSITY' | localize}}</b>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"1\"\r\n [max]=\"1600\"\r\n [step]=\"1\"\r\n [value]=\"interiorLightIntensity\"\r\n thumbLabel\r\n (input)=\"setInteriorLightIntensity($event.value)\"\r\n fxFlex=\"grow\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_POST_PROCESSING_SETTINGS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showPostProcessingSettings\"\r\n (change)=\"toggle(configurationKey.ShowPostProcessingSettings, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_WALLS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWalls\"\r\n (change)=\"toggle(configurationKey.ShowWalls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CEILING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCeiling\"\r\n (change)=\"toggle(configurationKey.ShowCeiling, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"hideMaterials()\">{{ 'HIDE_MATERIALS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"showConnectors()\">{{ 'SHOW_CONNECTORS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"showSettingsOptions = true\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">settings</mat-icon>\r\n {{'SHOW_SETTINGS_OPTIONS' | localize}}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'APP_VERSION' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #versionField\r\n type=\"text\"\r\n readonly=\"true\"\r\n [value]=\"version\"\r\n (click)=\"selectVersionFieldContent()\"\r\n />\r\n <mat-icon matSuffix (click)=\"copyToClipboard()\">file_copy</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n <h3 class=\"mat-subheading-2\">{{'CONNECTION' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'iONE backend url' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #ioneBackendUrl\r\n type=\"text\"\r\n [value]=\"settingsService.settings?.url\"\r\n (keydown)=\"handleBackendUrlChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n</ng-container>\r\n<div class=\"powered-by-wrapper\">\r\n <span>MyRoomPlans is powered by</span>\r\n <span class=\"powered-logo-wrapper\">\r\n <a href=\"https://www.colijn-it.nl\" target=\"_blank\" alt=\"Colijn IT\" class=\"colijn-it-logo\"><img src=\"assets/images/colijn-logo.webp\"/></a>\r\n <a href=\"https://ione360.com\" target=\"_blank\" alt=\"iONE360\" class=\"ione-360-logo\"><img src=\"assets/images/ione360-logo.webp\"/></a>\r\n </span>\r\n <span>Copyright Colijn IT 2021</span>\r\n</div>\r\n<settings-options *ngIf=\"showSettingsOptions\" (onclose)=\"showSettingsOptions = false\"></settings-options>\r\n", styles: [":host{overflow-y:auto;overflow-x:hidden}:host .powered-by-wrapper{margin-top:20px;font-size:12px}:host .powered-by-wrapper .powered-logo-wrapper{display:flex;align-items:center;justify-content:space-between}:host .powered-by-wrapper .colijn-it-logo{margin:0 5px}:host .powered-by-wrapper .colijn-it-logo img{width:100px}:host .powered-by-wrapper .ione-360-logo{margin:5px}:host .powered-by-wrapper .ione-360-logo img{width:134px}.panel-item{min-height:40px}.panel-item+h3{margin-top:16px}mat-form-field{width:100%}::ng-deep .mat-drawer-content{overflow-y:auto;overflow-x:hidden}\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: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { 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$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: i6__namespace.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: SettingsOptionsComponent, selector: "settings-options", outputs: ["onclose"] }], 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: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.MatSuffix, selector: "[matSuffix]" }], pipes: { "localize": LocalizePipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
35857
+ SettingsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SettingsComponent, deps: [{ token: HomedecoratorSettingsService }, { token: i2__namespace$4.MatSnackBar }, { token: MessageBusService }, { token: ConfigurationService }, { token: SceneService }, { token: ItemService }, { token: HomedecoratorAppService }, { token: FontService }, { token: HomedecoratorSettingsService }], target: i0__namespace.ɵɵFactoryTarget.Component });
35858
+ SettingsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SettingsComponent, selector: "rp-settings", inputs: { minWallHeight: "minWallHeight", placeCameraDisabled: "placeCameraDisabled" }, outputs: { onWallsHeightUpdate: "onWallsHeightUpdate" }, viewQueries: [{ propertyName: "versionFieldRef", first: true, predicate: ["versionField"], descendants: true, static: true }], ngImport: i0__namespace, template: "\r\n\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_TOUCH' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"enableTouch\"\r\n (change)=\"toggle(configurationKey.EnableTouch, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n\r\n<h3 class=\"mat-subheading-2\">{{'WALLS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <rp-dimension-input\r\n [sourceValue]=\"wallHeight\"\r\n [minValue]=\"minWallHeight\"\r\n title=\"{{'DEFAULT_HEIGHT' | localize}}\"\r\n (dimensionChanged)=\"applyNewHeight($event)\"\r\n >\r\n </rp-dimension-input>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DEFAULT_THICKNESS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{wallThickness}}</span>\r\n</div>\r\n<div *ngIf=\"showDetailedWallMeasurements\" class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DETAILED_WALL_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showDetailedWallMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowDetailedWallMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES_OF_WALL_ITEMS_IN_2D' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWallItemMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowWallItemMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_OF_WALLS_TO_BASIC_ANGLES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"wallSnapping\"\r\n (change)=\"toggle(configurationKey.WallSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_TO_WALL_JOINTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"cornerSnapping\"\r\n (change)=\"toggle(configurationKey.CornerSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'OBJECTS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectDistances\"\r\n (change)=\"toggle(configurationKey.ShowObjectDistances, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowObjectMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_ROTATION_SNAPPING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"rotationSnappingEnabled\"\r\n (change)=\"toggle(configurationKey.RotationSnappingEnabled, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DISPLAY_CUSTOM_SHAPE_NAMES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"displayCustomShapeNames\"\r\n (change)=\"toggle(configurationKey.DisplayCustomShapeNames, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'UNIT_INFO' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'MEASUREMENTS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{dimensioningUnit}}</span>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ANGLES' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{angleUnit}}</span>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'CAMERA' | localize}}</h3>\r\n<b class=\"mat-body-2\">{{'SET_START_POSITION_FOR_WALK_THROUGH_MODE' | localize}}</b>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n [disabled]=\"placeCameraDisabled\"\r\n class=\"place-camera\"\r\n (click)=\"placeCamera()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\r\n {{'PLACE_CAMERA' | localize}}\r\n </button>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CAMERA_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCameraControls\"\r\n (change)=\"toggle(configurationKey.ShowWalkThroughCameraControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'CLEAR_ROOM' | localize}}</h3>\r\n <b class=\"mat-body-2\">{{'CLEAR_ALL_FURNITURE_FROM_ROOM' | localize}}</b>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n class=\"remove-all\"\r\n (click)=\"removeAll()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">delete_sweep</mat-icon>\r\n {{'CLEAR_FURNITURE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"settingsService.settings.options.development\">\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'LIGHTS' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_LIGHTING_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showLightControls\"\r\n (change)=\"toggle(configurationKey.ShowLightingControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"toggle(configurationKey.ShowLightplansDialog, true)\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\r\n {{'MANAGE_LIGHTPLANS' | localize}}\r\n </button>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_INTERIOR_LIGHTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showInteriorLights\"\r\n (change)=\"toggle(configurationKey.ShowInteriorLights, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'INTERIOR_LIGHT_INTENSITY' | localize}}</b>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"1\"\r\n [max]=\"1600\"\r\n [step]=\"1\"\r\n [value]=\"interiorLightIntensity\"\r\n thumbLabel\r\n (input)=\"setInteriorLightIntensity($event.value)\"\r\n fxFlex=\"grow\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_POST_PROCESSING_SETTINGS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showPostProcessingSettings\"\r\n (change)=\"toggle(configurationKey.ShowPostProcessingSettings, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_AA' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showAA\"\r\n (change)=\"toggleOption('aaEnabled', $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_AO' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showAO\"\r\n (change)=\"toggleOption('aoEnabled', $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_WALLS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWalls\"\r\n (change)=\"toggle(configurationKey.ShowWalls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CEILING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCeiling\"\r\n (change)=\"toggle(configurationKey.ShowCeiling, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"hideMaterials()\">{{ 'HIDE_MATERIALS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"showConnectors()\">{{ 'SHOW_CONNECTORS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"showSettingsOptions = true\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">settings</mat-icon>\r\n {{'SHOW_SETTINGS_OPTIONS' | localize}}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'APP_VERSION' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #versionField\r\n type=\"text\"\r\n readonly=\"true\"\r\n [value]=\"version\"\r\n (click)=\"selectVersionFieldContent()\"\r\n />\r\n <mat-icon matSuffix (click)=\"copyToClipboard()\">file_copy</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n <h3 class=\"mat-subheading-2\">{{'CONNECTION' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'iONE backend url' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #ioneBackendUrl\r\n type=\"text\"\r\n [value]=\"settingsService.settings?.url\"\r\n (keydown)=\"handleBackendUrlChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n</ng-container>\r\n<div class=\"powered-by-wrapper\">\r\n <span>MyRoomPlans is powered by</span>\r\n <span class=\"powered-logo-wrapper\">\r\n <a href=\"https://www.colijn-it.nl\" target=\"_blank\" alt=\"Colijn IT\" class=\"colijn-it-logo\"><img src=\"assets/images/colijn-logo.webp\"/></a>\r\n <a href=\"https://ione360.com\" target=\"_blank\" alt=\"iONE360\" class=\"ione-360-logo\"><img src=\"assets/images/ione360-logo.webp\"/></a>\r\n </span>\r\n <span>Copyright Colijn IT 2021</span>\r\n</div>\r\n<settings-options *ngIf=\"showSettingsOptions\" (onclose)=\"showSettingsOptions = false\"></settings-options>\r\n", styles: [":host{overflow-y:auto;overflow-x:hidden}:host .powered-by-wrapper{margin-top:20px;font-size:12px}:host .powered-by-wrapper .powered-logo-wrapper{display:flex;align-items:center;justify-content:space-between}:host .powered-by-wrapper .colijn-it-logo{margin:0 5px}:host .powered-by-wrapper .colijn-it-logo img{width:100px}:host .powered-by-wrapper .ione-360-logo{margin:5px}:host .powered-by-wrapper .ione-360-logo img{width:134px}.panel-item{min-height:40px}.panel-item+h3{margin-top:16px}mat-form-field{width:100%}::ng-deep .mat-drawer-content{overflow-y:auto;overflow-x:hidden}\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: DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { 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$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: i6__namespace.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i7__namespace.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: SettingsOptionsComponent, selector: "settings-options", outputs: ["onclose"] }], 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: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.MatSuffix, selector: "[matSuffix]" }], pipes: { "localize": LocalizePipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
35714
35859
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SettingsComponent, decorators: [{
35715
35860
  type: i0.Component,
35716
35861
  args: [{
@@ -35719,7 +35864,7 @@
35719
35864
  styleUrls: ['./settings.component.scss'],
35720
35865
  changeDetection: i0.ChangeDetectionStrategy.OnPush
35721
35866
  }]
35722
- }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: i2__namespace$4.MatSnackBar }, { type: MessageBusService }, { type: ConfigurationService }, { type: SceneService }, { type: ItemService }, { type: HomedecoratorAppService }, { type: FontService }]; }, propDecorators: { versionFieldRef: [{
35867
+ }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }, { type: i2__namespace$4.MatSnackBar }, { type: MessageBusService }, { type: ConfigurationService }, { type: SceneService }, { type: ItemService }, { type: HomedecoratorAppService }, { type: FontService }, { type: HomedecoratorSettingsService }]; }, propDecorators: { versionFieldRef: [{
35723
35868
  type: i0.ViewChild,
35724
35869
  args: ['versionField', { static: true }]
35725
35870
  }], minWallHeight: [{
@@ -35940,9 +36085,10 @@
35940
36085
  TextureEditorOptions[TextureEditorOptions["Both"] = 3] = "Both";
35941
36086
  })(TextureEditorOptions || (TextureEditorOptions = {}));
35942
36087
  var TextureEditorComponent = /** @class */ (function () {
35943
- function TextureEditorComponent(_settingsService) {
36088
+ function TextureEditorComponent(messageService, _settingsService) {
35944
36089
  var _a;
35945
36090
  var _this = this;
36091
+ this.messageService = messageService;
35946
36092
  this._settingsService = _settingsService;
35947
36093
  this.textureType = TextureType;
35948
36094
  this.dragNDropEnforced = false;
@@ -35984,6 +36130,7 @@
35984
36130
  };
35985
36131
  };
35986
36132
  // this.dampSetTexture = this.createDampener(this.setTexture);
36133
+ this._subs.push(this.messageService.subscribe(MessageType.ChangeTexture, function (texture) { return _this.setNewTexture(texture); }));
35987
36134
  }
35988
36135
  TextureEditorComponent.prototype.ngOnInit = function () {
35989
36136
  var _this = this;
@@ -36005,7 +36152,9 @@
36005
36152
  TextureEditorComponent.prototype.ngOnDestroy = function () {
36006
36153
  var _this = this;
36007
36154
  // this.dampSetTexture.release();
36008
- this._subs.forEach(function (s) { s.unsubscribe(); });
36155
+ this._subs.forEach(function (s) {
36156
+ s.unsubscribe();
36157
+ });
36009
36158
  this.canvas.nativeElement.removeEventListener('mousedown', function () { return _this.onMouseDown(); });
36010
36159
  this.canvas.nativeElement.removeEventListener('mouseup', function () { return _this.onMouseUp(); });
36011
36160
  this.canvas.nativeElement.removeEventListener('mousemove', function (e) { return _this.onMouseMove(e); });
@@ -36029,6 +36178,9 @@
36029
36178
  this.initializeTexture();
36030
36179
  }
36031
36180
  };
36181
+ TextureEditorComponent.prototype.setNewTexture = function (texture) {
36182
+ this.plainTexture = texture;
36183
+ };
36032
36184
  TextureEditorComponent.prototype.handleRemoveTextureClick = function (event) {
36033
36185
  this.imageHasBeenResized = false;
36034
36186
  this.removeTexture.emit(event);
@@ -36242,7 +36394,12 @@
36242
36394
  return __generator(this, function (_a) {
36243
36395
  switch (_a.label) {
36244
36396
  case 0:
36245
- texture = this.texturePlane ? this.texturePlane.getTexture() : this.plainTexture;
36397
+ if (this.texturePlane && this.texturePlane.getTexture() !== undefined) {
36398
+ texture = this.texturePlane.getTexture();
36399
+ }
36400
+ else {
36401
+ texture = this.plainTexture;
36402
+ }
36246
36403
  if (!texture) return [3 /*break*/, 2];
36247
36404
  return [4 /*yield*/, this._loadTextureData(texture, false)];
36248
36405
  case 1:
@@ -36600,8 +36757,8 @@
36600
36757
  };
36601
36758
  return TextureEditorComponent;
36602
36759
  }());
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 } });
36760
+ 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 });
36761
+ 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
36762
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: TextureEditorComponent, decorators: [{
36606
36763
  type: i0.Component,
36607
36764
  args: [{
@@ -36609,7 +36766,7 @@
36609
36766
  templateUrl: './texture-editor.component.html',
36610
36767
  styleUrls: ['./texture-editor.component.scss']
36611
36768
  }]
36612
- }], ctorParameters: function () { return [{ type: HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
36769
+ }], ctorParameters: function () { return [{ type: MessageBusService }, { type: HomedecoratorSettingsService }]; }, propDecorators: { fileInput: [{
36613
36770
  type: i0.ViewChild,
36614
36771
  args: ['fileInput', { static: true }]
36615
36772
  }], canvas: [{
@@ -37473,7 +37630,7 @@
37473
37630
  return CustomShapeCreatorComponent;
37474
37631
  }());
37475
37632
  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 } });
37633
+ 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: 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 } });
37477
37634
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomShapeCreatorComponent, decorators: [{
37478
37635
  type: i0.Component,
37479
37636
  args: [{
@@ -37726,6 +37883,8 @@
37726
37883
  return [4 /*yield*/, MaterialUtils.FromImage(texture)];
37727
37884
  case 1:
37728
37885
  _a[_b] = new (_c.apply(THREE.MeshPhongMaterial, [void 0, (_d.map = _e.sent(),
37886
+ _d.transparent = true,
37887
+ _d.alphaTest = 0.5,
37729
37888
  _d)]))();
37730
37889
  _e.label = 2;
37731
37890
  case 2:
@@ -39141,7 +39300,7 @@
39141
39300
  this.showContextMenu = false;
39142
39301
  };
39143
39302
  RoomPlannerComponent.prototype.startGroupSelection = function () {
39144
- this.showContextMenu = false;
39303
+ this.closeContextMenu();
39145
39304
  this.userIsGrouping = true;
39146
39305
  this._messageService.emit(MessageType.StartGroupObject);
39147
39306
  };
@@ -39248,12 +39407,12 @@
39248
39407
  return RoomPlannerComponent;
39249
39408
  }());
39250
39409
  RoomPlannerComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RoomPlannerComponent, deps: [{ token: HomedecoratorIconCacheService }, { token: ViewModeService }, { token: ModelsService }, { token: PresetsService }, { token: HomedecoratorAppService }, { token: ScreenSizeAnalysisService }, { token: i0__namespace.ChangeDetectorRef }, { token: UtilsService }, { token: MessageBusService }, { token: i1__namespace$1.MatDialog }, { token: ConfigurationService }, { token: FloorplanService }, { token: SceneService }, { token: HudService }, { token: RoomService }, { token: CameraService }, { token: ItemService }, { token: ItemSerializationService }, { token: LightsService }, { token: ArService }, { token: ItemService }, { token: HomedecoratorSettingsService }, { token: GoogleTagManagerService }, { token: PermanentStoreService }, { token: HomedecoratorAppEventService }, { token: HomedecoratorConnectorService }, { token: HomedecoratorConnectorAdapterService }], target: i0__namespace.ɵɵFactoryTarget.Component });
39251
- RoomPlannerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: { isLoading: "isLoading" }, outputs: { done: "done", showPlugin: "showPlugin", focusControls: "focusControls" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)" }, properties: { "class": "this.layerClass" } }, viewQueries: [{ propertyName: "floorplanner", first: true, predicate: FloorplannerComponent, descendants: true, static: true }, { propertyName: "toolbarIconLibrary", first: true, predicate: ["toolbarIconLibrary"], descendants: true, static: true }, { propertyName: "toolbarIconAccessoires", first: true, predicate: ["toolbarIconAccessoires"], descendants: true, static: true }, { propertyName: "toolbarIconSettings", first: true, predicate: ["toolbarIconSettings"], descendants: true, static: true }, { propertyName: "toolbarIcon2dView", first: true, predicate: ["toolbarIcon2dView"], descendants: true, static: true }, { propertyName: "toolbarIcon3dView", first: true, predicate: ["toolbarIcon3dView"], descendants: true, static: true }, { propertyName: "categoriesSidebar", first: true, predicate: ["categoriesSidebar"], descendants: true, static: true }, { propertyName: "accessoiresCategoriesSidebar", first: true, predicate: ["accessoiresCategoriesSidebar"], descendants: true, static: true }, { propertyName: "customShapeCreatorSideBar", first: true, predicate: ["customShapeCreatorSideBar"], descendants: true, static: true }, { propertyName: "customCylinderCreatorSideBar", first: true, predicate: ["customCylinderCreatorSideBar"], descendants: true, static: true }, { propertyName: "settingsSidebar", first: true, predicate: ["settingsSidebar"], descendants: true, static: true }, { propertyName: "librarySidebar", first: true, predicate: ["librarySidebar"], descendants: true, static: true }, { propertyName: "selectedObjectSidebar", first: true, predicate: ["selectedObjectSidebar"], descendants: true, static: true }, { propertyName: "selectedWallSidebar", first: true, predicate: ["selectedWallSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectSidebar", first: true, predicate: ["selectedThreedObjectSidebar"], descendants: true, static: true }, { propertyName: "selectedFloorSidebar", first: true, predicate: ["selectedFloorSidebar"], descendants: true, static: true }, { propertyName: "toolbarIconFaq", first: true, predicate: ["toolbarIconFaq"], descendants: true, static: true }, { propertyName: "toolbarIconFeedback", first: true, predicate: ["toolbarIconFeedback"], descendants: true, static: true }, { propertyName: "toolbarIconCart", first: true, predicate: ["toolbarIconCart"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <div class=\"RoomPlanner\">\n <floor-planner\n [class.hidden]=\"!viewModeService.is2dViewActive()\"\n (selectedWallChange)=\"selectWall($event)\"></floor-planner>\n </div>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedWall\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap \">\n <div (click)=\"showSelectedWallSidebar()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedFloor\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap\">\n <div (click)=\"showSelectedFloorSidebar()\" class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-item-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && !showGroupMenu\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div class=\"rp-item-context-menu-close\" (click)=\"closeContextMenu()\">\n <span class=\"close-icon\"><mat-icon class=\"homedecorator-material-icons\">close</mat-icon></span>\n </div>\n <div *ngIf=\"this.selectedObject\" class=\"rp-item-context-menu-header\">\n <p>{{ this.selectedObject.name }}</p>\n </div>\n <div *ngIf=\"showSettingsButton\" (click)=\"showSelectedObjectSidebar()\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n <ng-container *ngIf=\"showConfigurationButton\">\n <div *ngFor=\"let customButton of modelsService.customButtons\" (click)=\"handleConfigurationButtonClick(customButton)\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><co-icon [iconData]=\"iconService.getIcon(icon.MagicWand)\"></co-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </ng-container>\n <div *ngIf=\"showCopyButton\" (click)=\"copySelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">file_copy</mat-icon></span>\n <span class=\"label\">{{ 'COPY' | localize }}</span>\n </div>\n <div *ngIf=\"showDeleteButton\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showConfigurationButton\" (click)=\"showSelectedThreedObjectSidebar()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">settings</mat-icon></span>\n <span class=\"label\">{{ 'SETTINGS' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"startGroupSelection()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n\n <div *ngIf=\"showConversionButton && settingsService.settings.showConversionButtons\"\n (click)=\"sendConversionToTagManager()\"\n class=\"rp-item-context-menu-item\"\n [ngClass]=\"addSelectedClass ? 'conversion-button-selected' : ''\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon></span>\n <span class=\"label\">{{ 'CONVERSION' | localize }}</span>\n <span class=\"icon icon-selected\"><mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon></span>\n </div>\n\n\n <div *ngIf=\"showARButton\" (click)=\"startARSession()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon></span>\n <span class=\"label\">{{ 'AR' | localize }}</span>\n </div>\n <button-elevation\n *ngIf=\"selectedObject && selectedObject.elevationAdjustable\"\n [item]=\"selectedObject\">\n </button-elevation>\n <ng-container *ngIf=\"salableObject\">\n <div class=\"toolbar__divider context-menu\"></div>\n <div (click)=\"addToCart(selectedObject)\" class=\"rp-item-context-menu-item add-to-cart-button\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [svgIcon]=\"'cart-shopping-regular'\"></mat-icon></span>\n <span class=\"label\">{{ 'ADD_TO_CART' | localize }}</span>\n </div>\n </ng-container>\n </div>\n </rp-item-context-menu>\n\n <rp-item-context-menu *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && showGroupMenu && !userIsGrouping\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"onGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"onUnGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link_off</mat-icon></span>\n <span class=\"label\">{{ 'UNGROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject && showGroupEditMenuButtons\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n </div>\n </rp-item-context-menu>\n\n <ng-template #toolbarIconLibrary>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"home\"\n tooltip=\"{{iconName.Architecture | localize}}\"\n (onClick)=\"showLibraryCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconAccessoires>\n <rp-toolbar-icon\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"local_florist\"\n tooltip=\"{{iconName.Accessories | localize}}\"\n (onClick)=\"showAccessoireCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon2dView>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n svgIcon=\"cube-unfolded\"\n tooltip=\"{{iconName.TwodFloorplan | localize}}\"\n [disabled]=\"viewModeService.is2dViewActive() || !desktopSizeScreen\"\n (onClick)=\"updateMode(viewModes.FloorPlan2D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon3dView>\n <rp-toolbar-icon\n svgIcon=\"cube-outline\"\n tooltip=\"{{iconName.ThreedRoomplan | localize}}\"\n [disabled]=\"viewModeService.is3dViewActive()\"\n (onClick)=\"updateMode(viewModes.RoomPlan3D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <rp-zoom-controls\n [visible]=\"viewModeService.is2dViewActive()\"\n (onZoomIn)=\"zoomIn()\"\n (onZoomReset)=\"zoomReset()\"\n (onZoomOut)=\"zoomOut()\"\n ></rp-zoom-controls>\n\n <ng-template #toolbarIconSettings>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n matIcon=\"settings\"\n tooltip=\"{{iconName.Settings | localize}}\"\n (onClick)=\"showSettings()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFaq>\n <rp-toolbar-icon\n *ngIf=\"showFaq()\"\n matIcon=\"help\"\n tooltip=\"{{iconName.Faq | localize}}\"\n (onClick)=\"openFaq(this.settingsService.settings.faqUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFeedback>\n <rp-toolbar-icon\n *ngIf=\"showFeedback()\"\n matIcon=\"chat_bubble\"\n tooltip=\"{{iconName.Feedback | localize}}\"\n (onClick)=\"openFeedback(this.settingsService.settings.feedbackUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n <ng-template #toolbarIconCart>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon class=\"add-to-cart-button\"\n svgIcon=\"cart-shopping-regular\"\n tooltip=\"{{'ADD_TO_CART' | localize}}\"\n (onClick)=\"addAllToCart()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n <span class=\"toolbar__divider\"></span>\n </ng-template>\n\n <ng-template #settingsSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'SETTINGS' | localize }}</h2>\n </header>\n <rp-settings\n [placeCameraDisabled]=\"viewModeService.is2dViewActive() || itemService.getWalkthroughCamera()\"\n [minWallHeight]=\"getMinGlobalWallHeight()\"\n (onWallsHeightUpdate)=\"wallsHeightUpdated($event)\"\n >\n </rp-settings>\n </ng-template>\n\n <ng-template #categoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ARCHITECTURE' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"categories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #accessoiresCategoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ACCESSOIRES' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"accessoireCategories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #customShapeCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <rp-custom-shape-creator [shape]=\"selectedObject\"></rp-custom-shape-creator>\n </ng-template>\n\n <ng-template #customCylinderCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <custom-cylinder-creator [shape]=\"selectedObject\"></custom-cylinder-creator>\n </ng-template>\n\n <ng-template #librarySidebar>\n <div fxLayout=\"column\" class=\"with-scrollable-section\">\n <header class=\"drawer__header\">\n <button mat-icon-button (click)=\"showActiveCategorySidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back_ios</mat-icon>\n </button>\n <h2 class=\"mat-title\">{{ selectedCategory.name | localize }}</h2>\n </header>\n <p class=\"mat-body\" *ngIf=\"selectedCategory.description\">{{ selectedCategory.description | localize }}</p>\n <section fxFlex=\"grow\" *ngIf=\"libraryObjects?.length > 0 || hasCustomObjects()\">\n <ng-container *ngIf=\"hasCustomObjects()\">\n <h3 class=\"mat-subheading-2\">{{ 'CUSTOM' | localize }}</h3>\n <rp-object-library\n [objects]=\"customObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngIf=\"libraryObjects?.length > 0\">\n <h3 class=\"mat-subheading-2\">{{ 'LIBRARY' | localize }}</h3>\n <rp-object-library\n [objects]=\"libraryObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n </ng-container>\n </section>\n </div>\n </ng-template>\n\n <ng-template #selectedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'OBJECT' | localize }}</h2>\n </header>\n <rp-selected-object\n [object]=\"selectedObject\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-object>\n </ng-template>\n\n <ng-template #selectedWallSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'WALL'| localize }}</h2>\n </header>\n <rp-selected-wall\n [wall]=\"selectedWall\"\n [texturePlane]=\"selectedEdges[0]\"\n [minWallHeight]=\"getMinWallHeight(selectedWall)\"\n [maxWallHeight]=\"maxWallHeight\"\n [maxWallThickness]=\"maxWallThickness\"\n [maxWallLength]=\"maxWallLength\"\n [minWallLength]=\"minWallLength\"\n (remove)=\"removeWall($event)\"\n (setLength)=\"setWallLength($event)\"\n (setHeight)=\"setWallHeight($event)\"\n (setThickness)=\"setWallThickness($event)\"\n (selectCorner)=\"selectCorner($event)\"\n (setTexture)=\"setWallTexture($event)\"\n (setColor)=\"setWallColor($event)\"\n >\n </rp-selected-wall>\n </ng-template>\n\n <ng-template #selectedThreedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'SETTINGS' | localize\"></h2>\n </header>\n <rp-selected-threed-object\n [object]=\"selectedObject\"\n [showCopy]=\"showCopyButton\"\n [showDelete]=\"showDeleteButton\"\n [showLock]=\"showLockButton\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-threed-object>\n </ng-template>\n\n <ng-template #selectedFloorSidebar>\n <h2 class=\"mat-title\">{{ 'FLOOR' | localize }}</h2>\n <rp-selected-floor\n [floor]=\"selectedFloor\"\n [texturePlane]=\"selectedFloor\"\n (setTexture)=\"setFloorTexture($event)\"\n (setColor)=\"setFloorColor($event)\"\n (selectedFloorClosed)=\"selectedFloor = undefined\"\n >\n </rp-selected-floor>\n </ng-template>\n\n\n <div class=\"rp-item-context-menu-wrap mrp-save-grouping\" *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-item\" (click)=\"onGroupClick()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">check</mat-icon></span>\n <span class=\"label\">{{ 'GROUPING' | localize }}</span>\n </div>\n <div class=\"rp-item-context-menu-item\" (click)=\"cancelGroupSelection()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon></span>\n <span class=\"label\">{{ 'CANCEL' | localize }}</span>\n </div>\n </div>\n ", isInline: true, styles: [".with-scrollable-section{overflow:hidden;height:100%}.with-scrollable-section section{overflow-y:auto}.RoomPlanner{width:inherit;height:inherit;pointer-events:none}.RoomPlanner>*{pointer-events:all}.sidebar-toggles .mat-raised-button{width:110px;text-align:left}.logo-menu{position:absolute;top:20px;left:20px;z-index:2}.logo-menu-2nd{position:absolute;top:140px;left:84px}.logo-menu-4th{position:absolute;top:180px;left:84px}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.solid-background>canvas{fill:#fff;background:white}.toolbar__divider{border-bottom:1px solid black;width:100%;margin:5px 0}.toolbar__divider.context-menu{border-color:gray}.on-top{z-index:3}.rp-item-context-menu-wrap{color:#fff;background:rgba(0,0,0,.6);border-radius:5px;box-sizing:border-box;padding:5px;position:relative}.rp-item-context-menu-wrap .rp-item-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:5px;border-radius:5px}.rp-item-context-menu-wrap .rp-item-context-menu-item span,.rp-item-context-menu-wrap .rp-item-context-menu-item label{display:flex;flex-direction:column;line-height:20px;font-size:12px;font-weight:lighter;vertical-align:middle}.rp-item-context-menu-wrap .rp-item-context-menu-item .label{width:200px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon{width:20px;margin-right:10px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon svg,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon co-icon,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon .mat-icon{height:15px;width:15px;font-size:18px}.rp-item-context-menu-wrap .rp-item-context-menu-item:hover{background:rgba(220,220,220,.5)}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight{color:#da9803}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight svg{fill:#da9803}.rp-item-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}.rp-item-context-menu-wrap .rp-item-context-menu-header{border-bottom:1px solid #808080;margin-bottom:10px;padding-left:5px;padding-right:25px;max-width:200px;overflow:hidden}.rp-item-context-menu-wrap .rp-item-context-menu-header p{color:#dda73f;font-size:13px}.rp-item-context-menu-wrap .rp-item-context-menu-close{position:absolute;right:15px;top:15px;z-index:2;cursor:pointer;width:10px;height:10px}.rp-item-context-menu-wrap .rp-item-context-menu-close .close-icon .mat-icon{height:15px;width:15px;font-size:18px}.mrp-save-grouping{position:absolute;bottom:10%;left:50%}\n"], components: [{ type: FloorplannerComponent, selector: "floor-planner", outputs: ["selectedWallChange"] }, { type: ContextMenuComponent, selector: "rp-context-menu", inputs: ["openMouseEvent"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ItemContextMenuComponent, selector: "rp-item-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: ButtonElevationComponent, selector: "button-elevation", inputs: ["item"] }, { type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { type: ZoomControlsComponent, selector: "rp-zoom-controls", inputs: ["visible"], outputs: ["onZoomIn", "onZoomReset", "onZoomOut"] }, { type: SettingsComponent, selector: "rp-settings", inputs: ["minWallHeight", "placeCameraDisabled"], outputs: ["onWallsHeightUpdate"] }, { type: CategoryLibraryComponent, selector: "rp-category-library", inputs: ["categories"], outputs: ["categoryClick"] }, { type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: ["shape"] }, { type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: ["shape"] }, { 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: ObjectLibraryComponent, selector: "rp-object-library", inputs: ["objects"], outputs: ["setDragged", "releaseDragged", "onObjectClick"] }, { type: i6__namespace.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: SelectedObjectComponent, selector: "rp-selected-object", inputs: ["object"], outputs: ["onSelectedObjectChange"] }, { type: SelectedWallComponent, selector: "rp-selected-wall", inputs: ["wall", "texturePlane", "color", "minWallHeight", "maxWallHeight", "maxWallThickness", "maxWallLength", "minWallLength"], outputs: ["remove", "setLength", "setHeight", "setThickness", "selectCorner", "setTexture", "setColor"] }, { type: SelectedThreedObjectComponent, selector: "rp-selected-threed-object", inputs: ["object", "showCopy", "showDelete", "showLock"], outputs: ["onSelectedObjectChange"] }, { type: SelectedFloorComponent, selector: "rp-selected-floor", inputs: ["floor", "texturePlane", "color"], outputs: ["setTexture", "setColor"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6__namespace$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { 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.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"] }], pipes: { "localize": LocalizePipe } });
39410
+ RoomPlannerComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: { isLoading: "isLoading" }, outputs: { done: "done", showPlugin: "showPlugin", focusControls: "focusControls" }, host: { listeners: { "document:keydown": "handleDocKeyDown($event)" }, properties: { "class": "this.layerClass" } }, viewQueries: [{ propertyName: "floorplanner", first: true, predicate: FloorplannerComponent, descendants: true, static: true }, { propertyName: "toolbarIconLibrary", first: true, predicate: ["toolbarIconLibrary"], descendants: true, static: true }, { propertyName: "toolbarIconAccessoires", first: true, predicate: ["toolbarIconAccessoires"], descendants: true, static: true }, { propertyName: "toolbarIconSettings", first: true, predicate: ["toolbarIconSettings"], descendants: true, static: true }, { propertyName: "toolbarIcon2dView", first: true, predicate: ["toolbarIcon2dView"], descendants: true, static: true }, { propertyName: "toolbarIcon3dView", first: true, predicate: ["toolbarIcon3dView"], descendants: true, static: true }, { propertyName: "categoriesSidebar", first: true, predicate: ["categoriesSidebar"], descendants: true, static: true }, { propertyName: "accessoiresCategoriesSidebar", first: true, predicate: ["accessoiresCategoriesSidebar"], descendants: true, static: true }, { propertyName: "customShapeCreatorSideBar", first: true, predicate: ["customShapeCreatorSideBar"], descendants: true, static: true }, { propertyName: "customCylinderCreatorSideBar", first: true, predicate: ["customCylinderCreatorSideBar"], descendants: true, static: true }, { propertyName: "settingsSidebar", first: true, predicate: ["settingsSidebar"], descendants: true, static: true }, { propertyName: "librarySidebar", first: true, predicate: ["librarySidebar"], descendants: true, static: true }, { propertyName: "selectedObjectSidebar", first: true, predicate: ["selectedObjectSidebar"], descendants: true, static: true }, { propertyName: "selectedWallSidebar", first: true, predicate: ["selectedWallSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectSidebar", first: true, predicate: ["selectedThreedObjectSidebar"], descendants: true, static: true }, { propertyName: "selectedFloorSidebar", first: true, predicate: ["selectedFloorSidebar"], descendants: true, static: true }, { propertyName: "toolbarIconFaq", first: true, predicate: ["toolbarIconFaq"], descendants: true, static: true }, { propertyName: "toolbarIconFeedback", first: true, predicate: ["toolbarIconFeedback"], descendants: true, static: true }, { propertyName: "toolbarIconCart", first: true, predicate: ["toolbarIconCart"], descendants: true, static: true }], ngImport: i0__namespace, template: "\n <div class=\"RoomPlanner\">\n <floor-planner\n [class.hidden]=\"!viewModeService.is2dViewActive()\"\n (selectedWallChange)=\"selectWall($event)\"></floor-planner>\n </div>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedWall\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap \">\n <div (click)=\"showSelectedWallSidebar()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedFloor\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap\">\n <div (click)=\"showSelectedFloorSidebar()\" class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-item-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && !showGroupMenu\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div class=\"rp-item-context-menu-close\" (click)=\"closeContextMenu()\">\n <span class=\"close-icon\"><mat-icon class=\"homedecorator-material-icons\">close</mat-icon></span>\n </div>\n <div *ngIf=\"this.selectedObject\" class=\"rp-item-context-menu-header\">\n <p>{{ this.selectedObject.name }}</p>\n </div>\n <div *ngIf=\"showSettingsButton\" (click)=\"showSelectedObjectSidebar()\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n <ng-container *ngIf=\"showConfigurationButton\">\n <div *ngFor=\"let customButton of modelsService.customButtons\" (click)=\"handleConfigurationButtonClick(customButton)\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><co-icon [iconData]=\"iconService.getIcon(icon.MagicWand)\"></co-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </ng-container>\n <div *ngIf=\"showCopyButton\" (click)=\"copySelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">file_copy</mat-icon></span>\n <span class=\"label\">{{ 'COPY' | localize }}</span>\n </div>\n <div *ngIf=\"showDeleteButton\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showConfigurationButton\" (click)=\"showSelectedThreedObjectSidebar()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">settings</mat-icon></span>\n <span class=\"label\">{{ 'SETTINGS' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\"\n [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"startGroupSelection()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n\n <div *ngIf=\"showConversionButton && settingsService.settings.showConversionButtons\"\n (click)=\"sendConversionToTagManager()\"\n class=\"rp-item-context-menu-item\"\n [ngClass]=\"addSelectedClass ? 'conversion-button-selected' : ''\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon></span>\n <span class=\"label\">{{ 'CONVERSION' | localize }}</span>\n <span class=\"icon icon-selected\"><mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon></span>\n </div>\n\n\n <div *ngIf=\"showARButton\" (click)=\"startARSession()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon></span>\n <span class=\"label\">{{ 'AR' | localize }}</span>\n </div>\n <button-elevation\n *ngIf=\"selectedObject && selectedObject.elevationAdjustable\"\n [item]=\"selectedObject\">\n </button-elevation>\n <ng-container *ngIf=\"salableObject\">\n <div class=\"toolbar__divider context-menu\"></div>\n <div (click)=\"addToCart(selectedObject)\" class=\"rp-item-context-menu-item add-to-cart-button\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [svgIcon]=\"'cart-shopping-regular'\"></mat-icon></span>\n <span class=\"label\">{{ 'ADD_TO_CART' | localize }}</span>\n </div>\n </ng-container>\n </div>\n </rp-item-context-menu>\n\n <rp-item-context-menu *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && showGroupMenu && !userIsGrouping\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"onGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"onUnGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link_off</mat-icon></span>\n <span class=\"label\">{{ 'UNGROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject && showGroupEditMenuButtons\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\"\n [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n </div>\n </rp-item-context-menu>\n\n <ng-template #toolbarIconLibrary>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"home\"\n tooltip=\"{{iconName.Architecture | localize}}\"\n (onClick)=\"showLibraryCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconAccessoires>\n <rp-toolbar-icon\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"local_florist\"\n tooltip=\"{{iconName.Accessories | localize}}\"\n (onClick)=\"showAccessoireCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon2dView>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n svgIcon=\"cube-unfolded\"\n tooltip=\"{{iconName.TwodFloorplan | localize}}\"\n [disabled]=\"viewModeService.is2dViewActive() || !desktopSizeScreen\"\n (onClick)=\"updateMode(viewModes.FloorPlan2D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon3dView>\n <rp-toolbar-icon\n svgIcon=\"cube-outline\"\n tooltip=\"{{iconName.ThreedRoomplan | localize}}\"\n [disabled]=\"viewModeService.is3dViewActive()\"\n (onClick)=\"updateMode(viewModes.RoomPlan3D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <rp-zoom-controls\n [visible]=\"viewModeService.is2dViewActive()\"\n (onZoomIn)=\"zoomIn()\"\n (onZoomReset)=\"zoomReset()\"\n (onZoomOut)=\"zoomOut()\"\n ></rp-zoom-controls>\n\n <ng-template #toolbarIconSettings>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n matIcon=\"settings\"\n tooltip=\"{{iconName.Settings | localize}}\"\n (onClick)=\"showSettings()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFaq>\n <rp-toolbar-icon\n *ngIf=\"showFaq()\"\n matIcon=\"help\"\n tooltip=\"{{iconName.Faq | localize}}\"\n (onClick)=\"openFaq(this.settingsService.settings.faqUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFeedback>\n <rp-toolbar-icon\n *ngIf=\"showFeedback()\"\n matIcon=\"chat_bubble\"\n tooltip=\"{{iconName.Feedback | localize}}\"\n (onClick)=\"openFeedback(this.settingsService.settings.feedbackUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n <ng-template #toolbarIconCart>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon class=\"add-to-cart-button\"\n svgIcon=\"cart-shopping-regular\"\n tooltip=\"{{'ADD_TO_CART' | localize}}\"\n (onClick)=\"addAllToCart()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n <span class=\"toolbar__divider\"></span>\n </ng-template>\n\n <ng-template #settingsSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'SETTINGS' | localize }}</h2>\n </header>\n <rp-settings\n [placeCameraDisabled]=\"viewModeService.is2dViewActive() || itemService.getWalkthroughCamera()\"\n [minWallHeight]=\"getMinGlobalWallHeight()\"\n (onWallsHeightUpdate)=\"wallsHeightUpdated($event)\"\n >\n </rp-settings>\n </ng-template>\n\n <ng-template #categoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ARCHITECTURE' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"categories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #accessoiresCategoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ACCESSOIRES' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"accessoireCategories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #customShapeCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <rp-custom-shape-creator [shape]=\"selectedObject\"></rp-custom-shape-creator>\n </ng-template>\n\n <ng-template #customCylinderCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <custom-cylinder-creator [shape]=\"selectedObject\"></custom-cylinder-creator>\n </ng-template>\n\n <ng-template #librarySidebar>\n <div fxLayout=\"column\" class=\"with-scrollable-section\">\n <header class=\"drawer__header\">\n <button mat-icon-button (click)=\"showActiveCategorySidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back_ios</mat-icon>\n </button>\n <h2 class=\"mat-title\">{{ selectedCategory.name | localize }}</h2>\n </header>\n <p class=\"mat-body\" *ngIf=\"selectedCategory.description\">{{ selectedCategory.description | localize }}</p>\n <section fxFlex=\"grow\" *ngIf=\"libraryObjects?.length > 0 || hasCustomObjects()\">\n <ng-container *ngIf=\"hasCustomObjects()\">\n <h3 class=\"mat-subheading-2\">{{ 'CUSTOM' | localize }}</h3>\n <rp-object-library\n [objects]=\"customObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngIf=\"libraryObjects?.length > 0\">\n <h3 class=\"mat-subheading-2\">{{ 'LIBRARY' | localize }}</h3>\n <rp-object-library\n [objects]=\"libraryObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n </ng-container>\n </section>\n </div>\n </ng-template>\n\n <ng-template #selectedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'OBJECT' | localize }}</h2>\n </header>\n <rp-selected-object\n [object]=\"selectedObject\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-object>\n </ng-template>\n\n <ng-template #selectedWallSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'WALL'| localize }}</h2>\n </header>\n <rp-selected-wall\n [wall]=\"selectedWall\"\n [texturePlane]=\"selectedEdges[0]\"\n [minWallHeight]=\"getMinWallHeight(selectedWall)\"\n [maxWallHeight]=\"maxWallHeight\"\n [maxWallThickness]=\"maxWallThickness\"\n [maxWallLength]=\"maxWallLength\"\n [minWallLength]=\"minWallLength\"\n (remove)=\"removeWall($event)\"\n (setLength)=\"setWallLength($event)\"\n (setHeight)=\"setWallHeight($event)\"\n (setThickness)=\"setWallThickness($event)\"\n (selectCorner)=\"selectCorner($event)\"\n (setTexture)=\"setWallTexture($event)\"\n (setColor)=\"setWallColor($event)\"\n >\n </rp-selected-wall>\n </ng-template>\n\n <ng-template #selectedThreedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'SETTINGS' | localize\"></h2>\n </header>\n <rp-selected-threed-object\n [object]=\"selectedObject\"\n [showCopy]=\"showCopyButton\"\n [showDelete]=\"showDeleteButton\"\n [showLock]=\"showLockButton\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-threed-object>\n </ng-template>\n\n <ng-template #selectedFloorSidebar>\n <h2 class=\"mat-title\">{{ 'FLOOR' | localize }}</h2>\n <rp-selected-floor\n [floor]=\"selectedFloor\"\n [texturePlane]=\"selectedFloor\"\n (setTexture)=\"setFloorTexture($event)\"\n (setColor)=\"setFloorColor($event)\"\n (selectedFloorClosed)=\"selectedFloor = undefined\"\n >\n </rp-selected-floor>\n </ng-template>\n\n <ng-container *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-wrap mrp-save-grouping\" *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-item\" (click)=\"onGroupClick()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">check</mat-icon></span>\n <span class=\"label\">{{ 'GROUPING' | localize }}</span>\n </div>\n <div class=\"rp-item-context-menu-item\" (click)=\"cancelGroupSelection()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon></span>\n <span class=\"label\">{{ 'CANCEL' | localize }}</span>\n </div>\n </div>\n </ng-container>\n\n ", isInline: true, styles: [".with-scrollable-section{overflow:hidden;height:100%}.with-scrollable-section section{overflow-y:auto}.RoomPlanner{width:inherit;height:inherit;pointer-events:none}.RoomPlanner>*{pointer-events:all}.sidebar-toggles .mat-raised-button{width:110px;text-align:left}.logo-menu{position:absolute;top:20px;left:20px;z-index:2}.logo-menu-2nd{position:absolute;top:140px;left:84px}.logo-menu-4th{position:absolute;top:180px;left:84px}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.solid-background>canvas{fill:#fff;background:white}.toolbar__divider{border-bottom:1px solid black;width:100%;margin:5px 0}.toolbar__divider.context-menu{border-color:gray}.on-top{z-index:3}.rp-item-context-menu-wrap{color:#fff;background:rgba(0,0,0,.6);border-radius:5px;box-sizing:border-box;padding:5px;position:relative}.rp-item-context-menu-wrap .rp-item-context-menu-item{cursor:pointer;flex-direction:row;display:flex;padding:5px;border-radius:5px}.rp-item-context-menu-wrap .rp-item-context-menu-item span,.rp-item-context-menu-wrap .rp-item-context-menu-item label{display:flex;flex-direction:column;line-height:20px;font-size:12px;font-weight:lighter;vertical-align:middle}.rp-item-context-menu-wrap .rp-item-context-menu-item .label{width:200px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon{width:20px;margin-right:10px}.rp-item-context-menu-wrap .rp-item-context-menu-item .icon svg,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon co-icon,.rp-item-context-menu-wrap .rp-item-context-menu-item .icon .mat-icon{height:15px;width:15px;font-size:18px}.rp-item-context-menu-wrap .rp-item-context-menu-item:hover{background:rgba(220,220,220,.5)}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight{color:#da9803}.rp-item-context-menu-wrap .rp-item-context-menu-item-highlight svg{fill:#da9803}.rp-item-context-menu-wrap .conversion-button-selected .icon-selected{color:#009a6d}.rp-item-context-menu-wrap .rp-item-context-menu-header{border-bottom:1px solid #808080;margin-bottom:10px;padding-left:5px;padding-right:25px;max-width:200px;overflow:hidden}.rp-item-context-menu-wrap .rp-item-context-menu-header p{color:#dda73f;font-size:13px}.rp-item-context-menu-wrap .rp-item-context-menu-close{position:absolute;right:15px;top:15px;z-index:2;cursor:pointer;width:10px;height:10px}.rp-item-context-menu-wrap .rp-item-context-menu-close .close-icon .mat-icon{height:15px;width:15px;font-size:18px}.mrp-save-grouping{pointer-events:all;position:absolute;bottom:10%;left:50%}\n"], components: [{ type: FloorplannerComponent, selector: "floor-planner", outputs: ["selectedWallChange"] }, { type: ContextMenuComponent, selector: "rp-context-menu", inputs: ["openMouseEvent"] }, { type: i5__namespace$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ItemContextMenuComponent, selector: "rp-item-context-menu", inputs: ["item"], outputs: ["deletePressed"] }, { type: i4__namespace.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: ButtonElevationComponent, selector: "button-elevation", inputs: ["item"] }, { type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { type: ZoomControlsComponent, selector: "rp-zoom-controls", inputs: ["visible"], outputs: ["onZoomIn", "onZoomReset", "onZoomOut"] }, { type: SettingsComponent, selector: "rp-settings", inputs: ["minWallHeight", "placeCameraDisabled"], outputs: ["onWallsHeightUpdate"] }, { type: CategoryLibraryComponent, selector: "rp-category-library", inputs: ["categories"], outputs: ["categoryClick"] }, { type: CustomShapeCreatorComponent, selector: "rp-custom-shape-creator", inputs: ["shape"] }, { type: CustomCylinderCreatorComponent, selector: "custom-cylinder-creator", inputs: ["shape"] }, { 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: ObjectLibraryComponent, selector: "rp-object-library", inputs: ["objects"], outputs: ["setDragged", "releaseDragged", "onObjectClick"] }, { type: i6__namespace.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: SelectedObjectComponent, selector: "rp-selected-object", inputs: ["object"], outputs: ["onSelectedObjectChange"] }, { type: SelectedWallComponent, selector: "rp-selected-wall", inputs: ["wall", "texturePlane", "color", "minWallHeight", "maxWallHeight", "maxWallThickness", "maxWallLength", "minWallLength"], outputs: ["remove", "setLength", "setHeight", "setThickness", "selectCorner", "setTexture", "setColor"] }, { type: SelectedThreedObjectComponent, selector: "rp-selected-threed-object", inputs: ["object", "showCopy", "showDelete", "showLock"], outputs: ["onSelectedObjectChange"] }, { type: SelectedFloorComponent, selector: "rp-selected-floor", inputs: ["floor", "texturePlane", "color"], outputs: ["setTexture", "setColor"] }], directives: [{ type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5__namespace.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6__namespace$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { 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.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"] }], pipes: { "localize": LocalizePipe } });
39252
39411
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RoomPlannerComponent, decorators: [{
39253
39412
  type: i0.Component,
39254
39413
  args: [{
39255
39414
  selector: 'rp-room-planner',
39256
- template: "\n <div class=\"RoomPlanner\">\n <floor-planner\n [class.hidden]=\"!viewModeService.is2dViewActive()\"\n (selectedWallChange)=\"selectWall($event)\"></floor-planner>\n </div>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedWall\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap \">\n <div (click)=\"showSelectedWallSidebar()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedFloor\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap\">\n <div (click)=\"showSelectedFloorSidebar()\" class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-item-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && !showGroupMenu\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div class=\"rp-item-context-menu-close\" (click)=\"closeContextMenu()\">\n <span class=\"close-icon\"><mat-icon class=\"homedecorator-material-icons\">close</mat-icon></span>\n </div>\n <div *ngIf=\"this.selectedObject\" class=\"rp-item-context-menu-header\">\n <p>{{ this.selectedObject.name }}</p>\n </div>\n <div *ngIf=\"showSettingsButton\" (click)=\"showSelectedObjectSidebar()\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n <ng-container *ngIf=\"showConfigurationButton\">\n <div *ngFor=\"let customButton of modelsService.customButtons\" (click)=\"handleConfigurationButtonClick(customButton)\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><co-icon [iconData]=\"iconService.getIcon(icon.MagicWand)\"></co-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </ng-container>\n <div *ngIf=\"showCopyButton\" (click)=\"copySelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">file_copy</mat-icon></span>\n <span class=\"label\">{{ 'COPY' | localize }}</span>\n </div>\n <div *ngIf=\"showDeleteButton\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showConfigurationButton\" (click)=\"showSelectedThreedObjectSidebar()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">settings</mat-icon></span>\n <span class=\"label\">{{ 'SETTINGS' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"startGroupSelection()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n\n <div *ngIf=\"showConversionButton && settingsService.settings.showConversionButtons\"\n (click)=\"sendConversionToTagManager()\"\n class=\"rp-item-context-menu-item\"\n [ngClass]=\"addSelectedClass ? 'conversion-button-selected' : ''\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon></span>\n <span class=\"label\">{{ 'CONVERSION' | localize }}</span>\n <span class=\"icon icon-selected\"><mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon></span>\n </div>\n\n\n <div *ngIf=\"showARButton\" (click)=\"startARSession()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon></span>\n <span class=\"label\">{{ 'AR' | localize }}</span>\n </div>\n <button-elevation\n *ngIf=\"selectedObject && selectedObject.elevationAdjustable\"\n [item]=\"selectedObject\">\n </button-elevation>\n <ng-container *ngIf=\"salableObject\">\n <div class=\"toolbar__divider context-menu\"></div>\n <div (click)=\"addToCart(selectedObject)\" class=\"rp-item-context-menu-item add-to-cart-button\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [svgIcon]=\"'cart-shopping-regular'\"></mat-icon></span>\n <span class=\"label\">{{ 'ADD_TO_CART' | localize }}</span>\n </div>\n </ng-container>\n </div>\n </rp-item-context-menu>\n\n <rp-item-context-menu *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && showGroupMenu && !userIsGrouping\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"onGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"onUnGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link_off</mat-icon></span>\n <span class=\"label\">{{ 'UNGROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject && showGroupEditMenuButtons\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n </div>\n </rp-item-context-menu>\n\n <ng-template #toolbarIconLibrary>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"home\"\n tooltip=\"{{iconName.Architecture | localize}}\"\n (onClick)=\"showLibraryCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconAccessoires>\n <rp-toolbar-icon\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"local_florist\"\n tooltip=\"{{iconName.Accessories | localize}}\"\n (onClick)=\"showAccessoireCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon2dView>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n svgIcon=\"cube-unfolded\"\n tooltip=\"{{iconName.TwodFloorplan | localize}}\"\n [disabled]=\"viewModeService.is2dViewActive() || !desktopSizeScreen\"\n (onClick)=\"updateMode(viewModes.FloorPlan2D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon3dView>\n <rp-toolbar-icon\n svgIcon=\"cube-outline\"\n tooltip=\"{{iconName.ThreedRoomplan | localize}}\"\n [disabled]=\"viewModeService.is3dViewActive()\"\n (onClick)=\"updateMode(viewModes.RoomPlan3D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <rp-zoom-controls\n [visible]=\"viewModeService.is2dViewActive()\"\n (onZoomIn)=\"zoomIn()\"\n (onZoomReset)=\"zoomReset()\"\n (onZoomOut)=\"zoomOut()\"\n ></rp-zoom-controls>\n\n <ng-template #toolbarIconSettings>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n matIcon=\"settings\"\n tooltip=\"{{iconName.Settings | localize}}\"\n (onClick)=\"showSettings()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFaq>\n <rp-toolbar-icon\n *ngIf=\"showFaq()\"\n matIcon=\"help\"\n tooltip=\"{{iconName.Faq | localize}}\"\n (onClick)=\"openFaq(this.settingsService.settings.faqUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFeedback>\n <rp-toolbar-icon\n *ngIf=\"showFeedback()\"\n matIcon=\"chat_bubble\"\n tooltip=\"{{iconName.Feedback | localize}}\"\n (onClick)=\"openFeedback(this.settingsService.settings.feedbackUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n <ng-template #toolbarIconCart>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon class=\"add-to-cart-button\"\n svgIcon=\"cart-shopping-regular\"\n tooltip=\"{{'ADD_TO_CART' | localize}}\"\n (onClick)=\"addAllToCart()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n <span class=\"toolbar__divider\"></span>\n </ng-template>\n\n <ng-template #settingsSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'SETTINGS' | localize }}</h2>\n </header>\n <rp-settings\n [placeCameraDisabled]=\"viewModeService.is2dViewActive() || itemService.getWalkthroughCamera()\"\n [minWallHeight]=\"getMinGlobalWallHeight()\"\n (onWallsHeightUpdate)=\"wallsHeightUpdated($event)\"\n >\n </rp-settings>\n </ng-template>\n\n <ng-template #categoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ARCHITECTURE' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"categories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #accessoiresCategoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ACCESSOIRES' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"accessoireCategories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #customShapeCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <rp-custom-shape-creator [shape]=\"selectedObject\"></rp-custom-shape-creator>\n </ng-template>\n\n <ng-template #customCylinderCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <custom-cylinder-creator [shape]=\"selectedObject\"></custom-cylinder-creator>\n </ng-template>\n\n <ng-template #librarySidebar>\n <div fxLayout=\"column\" class=\"with-scrollable-section\">\n <header class=\"drawer__header\">\n <button mat-icon-button (click)=\"showActiveCategorySidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back_ios</mat-icon>\n </button>\n <h2 class=\"mat-title\">{{ selectedCategory.name | localize }}</h2>\n </header>\n <p class=\"mat-body\" *ngIf=\"selectedCategory.description\">{{ selectedCategory.description | localize }}</p>\n <section fxFlex=\"grow\" *ngIf=\"libraryObjects?.length > 0 || hasCustomObjects()\">\n <ng-container *ngIf=\"hasCustomObjects()\">\n <h3 class=\"mat-subheading-2\">{{ 'CUSTOM' | localize }}</h3>\n <rp-object-library\n [objects]=\"customObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngIf=\"libraryObjects?.length > 0\">\n <h3 class=\"mat-subheading-2\">{{ 'LIBRARY' | localize }}</h3>\n <rp-object-library\n [objects]=\"libraryObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n </ng-container>\n </section>\n </div>\n </ng-template>\n\n <ng-template #selectedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'OBJECT' | localize }}</h2>\n </header>\n <rp-selected-object\n [object]=\"selectedObject\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-object>\n </ng-template>\n\n <ng-template #selectedWallSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'WALL'| localize }}</h2>\n </header>\n <rp-selected-wall\n [wall]=\"selectedWall\"\n [texturePlane]=\"selectedEdges[0]\"\n [minWallHeight]=\"getMinWallHeight(selectedWall)\"\n [maxWallHeight]=\"maxWallHeight\"\n [maxWallThickness]=\"maxWallThickness\"\n [maxWallLength]=\"maxWallLength\"\n [minWallLength]=\"minWallLength\"\n (remove)=\"removeWall($event)\"\n (setLength)=\"setWallLength($event)\"\n (setHeight)=\"setWallHeight($event)\"\n (setThickness)=\"setWallThickness($event)\"\n (selectCorner)=\"selectCorner($event)\"\n (setTexture)=\"setWallTexture($event)\"\n (setColor)=\"setWallColor($event)\"\n >\n </rp-selected-wall>\n </ng-template>\n\n <ng-template #selectedThreedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'SETTINGS' | localize\"></h2>\n </header>\n <rp-selected-threed-object\n [object]=\"selectedObject\"\n [showCopy]=\"showCopyButton\"\n [showDelete]=\"showDeleteButton\"\n [showLock]=\"showLockButton\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-threed-object>\n </ng-template>\n\n <ng-template #selectedFloorSidebar>\n <h2 class=\"mat-title\">{{ 'FLOOR' | localize }}</h2>\n <rp-selected-floor\n [floor]=\"selectedFloor\"\n [texturePlane]=\"selectedFloor\"\n (setTexture)=\"setFloorTexture($event)\"\n (setColor)=\"setFloorColor($event)\"\n (selectedFloorClosed)=\"selectedFloor = undefined\"\n >\n </rp-selected-floor>\n </ng-template>\n\n\n <div class=\"rp-item-context-menu-wrap mrp-save-grouping\" *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-item\" (click)=\"onGroupClick()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">check</mat-icon></span>\n <span class=\"label\">{{ 'GROUPING' | localize }}</span>\n </div>\n <div class=\"rp-item-context-menu-item\" (click)=\"cancelGroupSelection()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon></span>\n <span class=\"label\">{{ 'CANCEL' | localize }}</span>\n </div>\n </div>\n ",
39415
+ template: "\n <div class=\"RoomPlanner\">\n <floor-planner\n [class.hidden]=\"!viewModeService.is2dViewActive()\"\n (selectedWallChange)=\"selectWall($event)\"></floor-planner>\n </div>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedWall\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap \">\n <div (click)=\"showSelectedWallSidebar()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && selectedFloor\"\n [openMouseEvent]=\"contextMenuMouseEvent\">\n <div class=\"rp-item-context-menu-wrap\">\n <div (click)=\"showSelectedFloorSidebar()\" class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </div>\n </rp-context-menu>\n\n <rp-item-context-menu\n *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && !showGroupMenu\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div class=\"rp-item-context-menu-close\" (click)=\"closeContextMenu()\">\n <span class=\"close-icon\"><mat-icon class=\"homedecorator-material-icons\">close</mat-icon></span>\n </div>\n <div *ngIf=\"this.selectedObject\" class=\"rp-item-context-menu-header\">\n <p>{{ this.selectedObject.name }}</p>\n </div>\n <div *ngIf=\"showSettingsButton\" (click)=\"showSelectedObjectSidebar()\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" svgIcon=\"magic-wand\"></mat-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n <ng-container *ngIf=\"showConfigurationButton\">\n <div *ngFor=\"let customButton of modelsService.customButtons\" (click)=\"handleConfigurationButtonClick(customButton)\"\n class=\"rp-item-context-menu-item \">\n <span class=\"icon\"><co-icon [iconData]=\"iconService.getIcon(icon.MagicWand)\"></co-icon></span>\n <span class=\"label\">{{ 'CONFIGURE' | localize }}</span>\n </div>\n </ng-container>\n <div *ngIf=\"showCopyButton\" (click)=\"copySelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">file_copy</mat-icon></span>\n <span class=\"label\">{{ 'COPY' | localize }}</span>\n </div>\n <div *ngIf=\"showDeleteButton\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showConfigurationButton\" (click)=\"showSelectedThreedObjectSidebar()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">settings</mat-icon></span>\n <span class=\"label\">{{ 'SETTINGS' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\"\n [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"startGroupSelection()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n\n <div *ngIf=\"showConversionButton && settingsService.settings.showConversionButtons\"\n (click)=\"sendConversionToTagManager()\"\n class=\"rp-item-context-menu-item\"\n [ngClass]=\"addSelectedClass ? 'conversion-button-selected' : ''\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">add_shopping_cart</mat-icon></span>\n <span class=\"label\">{{ 'CONVERSION' | localize }}</span>\n <span class=\"icon icon-selected\"><mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon></span>\n </div>\n\n\n <div *ngIf=\"showARButton\" (click)=\"startARSession()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">weekend</mat-icon></span>\n <span class=\"label\">{{ 'AR' | localize }}</span>\n </div>\n <button-elevation\n *ngIf=\"selectedObject && selectedObject.elevationAdjustable\"\n [item]=\"selectedObject\">\n </button-elevation>\n <ng-container *ngIf=\"salableObject\">\n <div class=\"toolbar__divider context-menu\"></div>\n <div (click)=\"addToCart(selectedObject)\" class=\"rp-item-context-menu-item add-to-cart-button\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\" [svgIcon]=\"'cart-shopping-regular'\"></mat-icon></span>\n <span class=\"label\">{{ 'ADD_TO_CART' | localize }}</span>\n </div>\n </ng-container>\n </div>\n </rp-item-context-menu>\n\n <rp-item-context-menu *ngIf=\"!viewModeService.is2dViewActive() && showContextMenu && showGroupMenu && !userIsGrouping\"\n [item]=\"selectedObject\"\n (deletePressed)=\"handleDeleteObject()\">\n <div class=\"rp-item-context-menu-wrap\">\n <div *ngIf=\"!showGroupEditMenuButtons\" (click)=\"onGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link</mat-icon></span>\n <span class=\"label\">{{ 'GROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"onUnGroupClick()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">link_off</mat-icon></span>\n <span class=\"label\">{{ 'UNGROUP' | localize }}</span>\n </div>\n <div *ngIf=\"showGroupEditMenuButtons\" (click)=\"removeSelectedObject()\" class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">delete</mat-icon></span>\n <span class=\"label\">{{ 'REMOVE' | localize }}</span>\n </div>\n <div *ngIf=\"showLockButton && selectedObject && showGroupEditMenuButtons\" (click)=\"toggleLockSelectedObject()\"\n class=\"rp-item-context-menu-item\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\"\n [textContent]=\"selectedObject.locked ? 'lock' : 'lock_open'\"></mat-icon></span>\n <span class=\"label\">{{ (selectedObject.locked ? 'UNLOCK' : 'LOCK') | localize }}</span>\n </div>\n </div>\n </rp-item-context-menu>\n\n <ng-template #toolbarIconLibrary>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"home\"\n tooltip=\"{{iconName.Architecture | localize}}\"\n (onClick)=\"showLibraryCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconAccessoires>\n <rp-toolbar-icon\n [disabled]=\"viewModeService.is2dViewActive() || viewModeService.isWalkThroughViewActive()\"\n matIcon=\"local_florist\"\n tooltip=\"{{iconName.Accessories | localize}}\"\n (onClick)=\"showAccessoireCategories()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon2dView>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n *ngIf=\"!phoneSizeScreen\"\n svgIcon=\"cube-unfolded\"\n tooltip=\"{{iconName.TwodFloorplan | localize}}\"\n [disabled]=\"viewModeService.is2dViewActive() || !desktopSizeScreen\"\n (onClick)=\"updateMode(viewModes.FloorPlan2D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIcon3dView>\n <rp-toolbar-icon\n svgIcon=\"cube-outline\"\n tooltip=\"{{iconName.ThreedRoomplan | localize}}\"\n [disabled]=\"viewModeService.is3dViewActive()\"\n (onClick)=\"updateMode(viewModes.RoomPlan3D, true)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <rp-zoom-controls\n [visible]=\"viewModeService.is2dViewActive()\"\n (onZoomIn)=\"zoomIn()\"\n (onZoomReset)=\"zoomReset()\"\n (onZoomOut)=\"zoomOut()\"\n ></rp-zoom-controls>\n\n <ng-template #toolbarIconSettings>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon\n matIcon=\"settings\"\n tooltip=\"{{iconName.Settings | localize}}\"\n (onClick)=\"showSettings()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFaq>\n <rp-toolbar-icon\n *ngIf=\"showFaq()\"\n matIcon=\"help\"\n tooltip=\"{{iconName.Faq | localize}}\"\n (onClick)=\"openFaq(this.settingsService.settings.faqUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n\n <ng-template #toolbarIconFeedback>\n <rp-toolbar-icon\n *ngIf=\"showFeedback()\"\n matIcon=\"chat_bubble\"\n tooltip=\"{{iconName.Feedback | localize}}\"\n (onClick)=\"openFeedback(this.settingsService.settings.feedbackUrl)\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n </ng-template>\n <ng-template #toolbarIconCart>\n <span class=\"toolbar__divider\"></span>\n <rp-toolbar-icon class=\"add-to-cart-button\"\n svgIcon=\"cart-shopping-regular\"\n tooltip=\"{{'ADD_TO_CART' | localize}}\"\n (onClick)=\"addAllToCart()\"\n [showLabel]=\"phoneSizeScreen\"\n ></rp-toolbar-icon>\n <span class=\"toolbar__divider\"></span>\n </ng-template>\n\n <ng-template #settingsSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'SETTINGS' | localize }}</h2>\n </header>\n <rp-settings\n [placeCameraDisabled]=\"viewModeService.is2dViewActive() || itemService.getWalkthroughCamera()\"\n [minWallHeight]=\"getMinGlobalWallHeight()\"\n (onWallsHeightUpdate)=\"wallsHeightUpdated($event)\"\n >\n </rp-settings>\n </ng-template>\n\n <ng-template #categoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ARCHITECTURE' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"categories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #accessoiresCategoriesSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'ACCESSOIRES' | localize }}</h2>\n </header>\n <rp-category-library\n [categories]=\"accessoireCategories\"\n (categoryClick)=\"showLibraryCategory($event)\"\n >\n </rp-category-library>\n </ng-template>\n\n <ng-template #customShapeCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <rp-custom-shape-creator [shape]=\"selectedObject\"></rp-custom-shape-creator>\n </ng-template>\n\n <ng-template #customCylinderCreatorSideBar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'CUSTOM_SHAPE_CREATOR' | localize }}</h2>\n </header>\n <custom-cylinder-creator [shape]=\"selectedObject\"></custom-cylinder-creator>\n </ng-template>\n\n <ng-template #librarySidebar>\n <div fxLayout=\"column\" class=\"with-scrollable-section\">\n <header class=\"drawer__header\">\n <button mat-icon-button (click)=\"showActiveCategorySidebar()\">\n <mat-icon class=\"homedecorator-material-icons\">arrow_back_ios</mat-icon>\n </button>\n <h2 class=\"mat-title\">{{ selectedCategory.name | localize }}</h2>\n </header>\n <p class=\"mat-body\" *ngIf=\"selectedCategory.description\">{{ selectedCategory.description | localize }}</p>\n <section fxFlex=\"grow\" *ngIf=\"libraryObjects?.length > 0 || hasCustomObjects()\">\n <ng-container *ngIf=\"hasCustomObjects()\">\n <h3 class=\"mat-subheading-2\">{{ 'CUSTOM' | localize }}</h3>\n <rp-object-library\n [objects]=\"customObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngIf=\"libraryObjects?.length > 0\">\n <h3 class=\"mat-subheading-2\">{{ 'LIBRARY' | localize }}</h3>\n <rp-object-library\n [objects]=\"libraryObjects\"\n (setDragged)=\"setDragged($event)\"\n (releaseDragged)=\"releaseDragged()\"\n (onObjectClick)=\"onObjectLibraryClick($event)\"\n >\n </rp-object-library>\n </ng-container>\n </section>\n </div>\n </ng-template>\n\n <ng-template #selectedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'OBJECT' | localize }}</h2>\n </header>\n <rp-selected-object\n [object]=\"selectedObject\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-object>\n </ng-template>\n\n <ng-template #selectedWallSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\">{{ 'WALL'| localize }}</h2>\n </header>\n <rp-selected-wall\n [wall]=\"selectedWall\"\n [texturePlane]=\"selectedEdges[0]\"\n [minWallHeight]=\"getMinWallHeight(selectedWall)\"\n [maxWallHeight]=\"maxWallHeight\"\n [maxWallThickness]=\"maxWallThickness\"\n [maxWallLength]=\"maxWallLength\"\n [minWallLength]=\"minWallLength\"\n (remove)=\"removeWall($event)\"\n (setLength)=\"setWallLength($event)\"\n (setHeight)=\"setWallHeight($event)\"\n (setThickness)=\"setWallThickness($event)\"\n (selectCorner)=\"selectCorner($event)\"\n (setTexture)=\"setWallTexture($event)\"\n (setColor)=\"setWallColor($event)\"\n >\n </rp-selected-wall>\n </ng-template>\n\n <ng-template #selectedThreedObjectSidebar>\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'SETTINGS' | localize\"></h2>\n </header>\n <rp-selected-threed-object\n [object]=\"selectedObject\"\n [showCopy]=\"showCopyButton\"\n [showDelete]=\"showDeleteButton\"\n [showLock]=\"showLockButton\"\n (onSelectedObjectChange)=\"updateSelectedObjectHud()\"\n >\n </rp-selected-threed-object>\n </ng-template>\n\n <ng-template #selectedFloorSidebar>\n <h2 class=\"mat-title\">{{ 'FLOOR' | localize }}</h2>\n <rp-selected-floor\n [floor]=\"selectedFloor\"\n [texturePlane]=\"selectedFloor\"\n (setTexture)=\"setFloorTexture($event)\"\n (setColor)=\"setFloorColor($event)\"\n (selectedFloorClosed)=\"selectedFloor = undefined\"\n >\n </rp-selected-floor>\n </ng-template>\n\n <ng-container *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-wrap mrp-save-grouping\" *ngIf=\"userIsGrouping\">\n <div class=\"rp-item-context-menu-item\" (click)=\"onGroupClick()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">check</mat-icon></span>\n <span class=\"label\">{{ 'GROUPING' | localize }}</span>\n </div>\n <div class=\"rp-item-context-menu-item\" (click)=\"cancelGroupSelection()\">\n <span class=\"icon\"><mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon></span>\n <span class=\"label\">{{ 'CANCEL' | localize }}</span>\n </div>\n </div>\n </ng-container>\n\n ",
39257
39416
  styleUrls: ['./room-planner.component.scss'] /*,
39258
39417
  changeDetection: ChangeDetectionStrategy.OnPush*/
39259
39418
  }]
@@ -40335,7 +40494,7 @@
40335
40494
  return ModelDialogFurnitureListComponent;
40336
40495
  }());
40337
40496
  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: [
40497
+ 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
40498
  animations.trigger('slideInOut', [
40340
40499
  animations.transition(':leave', [
40341
40500
  animations.style({ transform: 'translateY(0%)', opacity: '1' }),
@@ -40352,7 +40511,7 @@
40352
40511
  type: i0.Component,
40353
40512
  args: [{
40354
40513
  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 ",
40514
+ 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
40515
  styleUrls: [
40357
40516
  './model-dialog-furniture-list.component.scss'
40358
40517
  ],
@@ -43840,7 +43999,7 @@
43840
43999
  return SaveDialogComponent;
43841
44000
  }());
43842
44001
  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 } });
44002
+ 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
44003
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: SaveDialogComponent, decorators: [{
43845
44004
  type: i0.Component,
43846
44005
  args: [{
@@ -43886,8 +44045,8 @@
43886
44045
  this.draftingMode = 'movement';
43887
44046
  this.cameraOffset = { x: window.innerWidth / 2, y: window.innerHeight / 2 };
43888
44047
  this.cameraZoom = 1;
43889
- this.maxZoom = 5;
43890
- this.minZoom = 1;
44048
+ this.maxZoom = 10;
44049
+ this.minZoom = 0.1;
43891
44050
  this.scrollSensitivity = 0.005;
43892
44051
  this.isDragging = false;
43893
44052
  this.dragStart = { x: 0, y: 0 };
@@ -43937,6 +44096,17 @@
43937
44096
  _this._context.stroke();
43938
44097
  }
43939
44098
  }
44099
+ if (_this.draftingMode === 'movement') {
44100
+ _this._canvas.style.cursor = 'pointer';
44101
+ }
44102
+ else {
44103
+ if (_this.isDragging) {
44104
+ _this._canvas.style.cursor = 'pointer';
44105
+ }
44106
+ else {
44107
+ _this._canvas.style.cursor = "url(" + drawModeCursorImageUrl + ") 0 " + drawModeCursorHeight + ", auto";
44108
+ }
44109
+ }
43940
44110
  requestAnimationFrame(function () { return _this.draw(); });
43941
44111
  };
43942
44112
  }
@@ -43975,6 +44145,9 @@
43975
44145
  this.hiddenImage.nativeElement.src = url;
43976
44146
  }
43977
44147
  };
44148
+ DrawDialogComponent.prototype.updateUserValue = function () {
44149
+ this.customerInputLenght = this.inputLength.nativeElement.value;
44150
+ };
43978
44151
  DrawDialogComponent.prototype.handleMouseDown = function (event) {
43979
44152
  if (this.draftingMode === 'movement') {
43980
44153
  this.isDragging = true;
@@ -44020,16 +44193,13 @@
44020
44193
  this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
44021
44194
  };
44022
44195
  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);
44196
+ var zoomAmount = event.deltaY * this.scrollSensitivity;
44197
+ if (!this.isDragging) {
44198
+ if (zoomAmount) {
44199
+ this.cameraZoom -= zoomAmount;
44032
44200
  }
44201
+ this.cameraZoom = Math.min(this.cameraZoom, this.maxZoom);
44202
+ this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
44033
44203
  }
44034
44204
  };
44035
44205
  DrawDialogComponent.prototype.getEventLocation = function (e) {
@@ -44042,12 +44212,6 @@
44042
44212
  };
44043
44213
  DrawDialogComponent.prototype.setModus = function (modus) {
44044
44214
  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
44215
  };
44052
44216
  DrawDialogComponent.prototype.submitLength = function () {
44053
44217
  if (this.inputLength.nativeElement.value !== '' && this.measurePoints.length === 2) {
@@ -44071,6 +44235,7 @@
44071
44235
  backgroundWidth: this.hiddenImage.nativeElement.width,
44072
44236
  cameraZoom: this.cameraZoom
44073
44237
  };
44238
+ this._messageService.emit(MessageType.StartWithEmptyRoom);
44074
44239
  this._messageService.emit(MessageType.LoadScaledDiagram, output);
44075
44240
  this._dialog.closeAll();
44076
44241
  }
@@ -44123,7 +44288,7 @@
44123
44288
  return DrawDialogComponent;
44124
44289
  }());
44125
44290
  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 } });
44291
+ 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
44292
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: DrawDialogComponent, decorators: [{
44128
44293
  type: i0.Component,
44129
44294
  args: [{
@@ -44430,9 +44595,10 @@
44430
44595
  });
44431
44596
  };
44432
44597
  var ModelPreviewComponent = /** @class */ (function () {
44433
- function ModelPreviewComponent(data, settingsService, _dialogRef, _thirdPartyModelService, _messageService, _dialog, _adapterService, _lightPresetsService, _dictionaryService, _fontService) {
44598
+ function ModelPreviewComponent(data, settingsService, iconCache, _dialogRef, _thirdPartyModelService, _messageService, _dialog, _adapterService, _lightPresetsService, _dictionaryService, _fontService) {
44434
44599
  this.data = data;
44435
44600
  this.settingsService = settingsService;
44601
+ this.iconCache = iconCache;
44436
44602
  this._dialogRef = _dialogRef;
44437
44603
  this._thirdPartyModelService = _thirdPartyModelService;
44438
44604
  this._messageService = _messageService;
@@ -44442,6 +44608,7 @@
44442
44608
  this._dictionaryService = _dictionaryService;
44443
44609
  this._fontService = _fontService;
44444
44610
  this.unitsOfMeasurement = 'cm';
44611
+ this.units = ['cm', 'inches'];
44445
44612
  this.mathPi = Math.PI;
44446
44613
  this.showReferenceModel = true;
44447
44614
  this.floorSizeHeight = 10;
@@ -44451,16 +44618,23 @@
44451
44618
  this.distanceStep = 1;
44452
44619
  this.stackable = false;
44453
44620
  this.heightAdjustable = false;
44621
+ this.selectedPlacement = 0;
44454
44622
  this._measurements = [];
44623
+ this.icon = IconEnum;
44455
44624
  this.font = this._fontService.hudFont;
44456
44625
  }
44457
44626
  ModelPreviewComponent.prototype.ngOnInit = function () {
44627
+ var _this = this;
44458
44628
  this.initScene();
44459
44629
  this.loadModel(this.data);
44630
+ this._adapterService.getModelPlacementOptions().then(function (result) {
44631
+ _this.placementOptions = result;
44632
+ });
44460
44633
  };
44461
44634
  ModelPreviewComponent.prototype.ngOnDestroy = function () {
44462
44635
  };
44463
44636
  ModelPreviewComponent.prototype.initScene = function () {
44637
+ var viewScale = 1.3;
44464
44638
  // init scene
44465
44639
  this.scenePreview = new THREE.Scene();
44466
44640
  // init renderer
@@ -44484,11 +44658,11 @@
44484
44658
  this.rendererPreview.outputColorSpace = THREE.LinearSRGBColorSpace;
44485
44659
  canvReference.appendChild(this.rendererPreview.domElement);
44486
44660
  this.rendererPreview.domElement.setAttribute('id', 'threed');
44487
- this.rendererPreview.setSize(window.innerWidth / 2, window.innerHeight / 2, true);
44661
+ this.rendererPreview.setSize(window.innerHeight / viewScale, window.innerHeight / viewScale, true);
44488
44662
  // init camera
44489
44663
  this.cameraPreview = new THREE.PerspectiveCamera(45, 1, 0.01, 100000000);
44490
44664
  this.cameraPreview.position.set(0, 2, 10);
44491
- this.cameraPreview.aspect = window.innerWidth / window.innerHeight;
44665
+ this.cameraPreview.aspect = (window.innerHeight / viewScale) / (window.innerHeight / viewScale);
44492
44666
  this.cameraPreview.updateProjectionMatrix();
44493
44667
  this.controls = new OrbitControls.OrbitControls(this.cameraPreview, this.rendererPreview.domElement);
44494
44668
  this.controls.update();
@@ -44618,6 +44792,7 @@
44618
44792
  }, options);
44619
44793
  };
44620
44794
  ModelPreviewComponent.prototype.scaleArticle = function () {
44795
+ var model = this.scenePreview.getObjectByName(this.modelName);
44621
44796
  var inputHeight = this.heightArticle.nativeElement.value;
44622
44797
  var heightInMeter;
44623
44798
  if (this.unitsOfMeasurement === 'cm') {
@@ -44628,7 +44803,8 @@
44628
44803
  }
44629
44804
  // scale = this.bounding / heightInMeter and use Y as up/ height
44630
44805
  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);
44806
+ model.scale.set(model.scale.x / scale, model.scale.y / scale, model.scale.z / scale);
44807
+ this._getBoundingBox(model);
44632
44808
  };
44633
44809
  ModelPreviewComponent.prototype.rotateModel = function (axis, degrees) {
44634
44810
  var model = this.scenePreview.getObjectByName(this.modelName);
@@ -44654,12 +44830,15 @@
44654
44830
  else if (axis === 'z') {
44655
44831
  model.position.z += amount;
44656
44832
  }
44833
+ else if (axis === 'all') {
44834
+ model.position.set(0, 0, 0);
44835
+ }
44657
44836
  this._getBoundingBox(model);
44658
44837
  };
44659
44838
  ModelPreviewComponent.prototype.setUnit = function (event) {
44660
44839
  this.unitsOfMeasurement = event.value;
44661
44840
  };
44662
- ModelPreviewComponent.prototype.toggleShowReferenceModel = function () {
44841
+ ModelPreviewComponent.prototype.toggleShowReferenceModel = function ($event) {
44663
44842
  var model = this.scenePreview.getObjectByName('Reference_model');
44664
44843
  model.visible = !this.showReferenceModel;
44665
44844
  this.showReferenceModel = !this.showReferenceModel;
@@ -44670,6 +44849,9 @@
44670
44849
  ModelPreviewComponent.prototype.setHeightAdjustable = function (event) {
44671
44850
  this.heightAdjustable = event.value;
44672
44851
  };
44852
+ ModelPreviewComponent.prototype.closePreview = function () {
44853
+ this._dialog.closeAll();
44854
+ };
44673
44855
  ModelPreviewComponent.prototype._animate = function () {
44674
44856
  var _this = this;
44675
44857
  setTimeout(function () {
@@ -44723,6 +44905,8 @@
44723
44905
  });
44724
44906
  });
44725
44907
  }
44908
+ }).catch(function (error) {
44909
+ _this._messageService.emit(MessageType.RenderError, { title: 'Upload error', message: error });
44726
44910
  });
44727
44911
  return [2 /*return*/];
44728
44912
  });
@@ -44798,6 +44982,8 @@
44798
44982
  this.boundingBoxSize = boundingBox.getSize(new THREE.Vector3());
44799
44983
  this._setMeasurements(this.boundingBoxSize);
44800
44984
  this._showMeasurements();
44985
+ var modelBoxhelper = this.scenePreview.getObjectByName('modelBoxhelper');
44986
+ this.scenePreview.remove(modelBoxhelper);
44801
44987
  var boxHelper = new THREE.BoxHelper(object);
44802
44988
  boxHelper.material.color.set(0xFF00FF);
44803
44989
  boxHelper.name = 'modelBoxhelper';
@@ -44928,20 +45114,20 @@
44928
45114
  };
44929
45115
  return ModelPreviewComponent;
44930
45116
  }());
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"] }] });
45117
+ 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 });
45118
+ 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-close-preview\" (click)=\"closePreview()\">\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\n </div>\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\n <button (click)=\"closePreview()\" class=\"base-button exportButtonDark\">\n<!-- <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>-->\n <span>Cancel</span>\n </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}.model-close-preview{text-align:right;cursor:pointer}: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: 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: 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.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
44933
45119
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelPreviewComponent, decorators: [{
44934
45120
  type: i0.Component,
44935
45121
  args: [{
44936
45122
  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 ",
45123
+ template: "\n <div class=\"model-close-preview\" (click)=\"closePreview()\">\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\n </div>\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\n <button (click)=\"closePreview()\" class=\"base-button exportButtonDark\">\n<!-- <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>-->\n <span>Cancel</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n ",
44938
45124
  styleUrls: ['./model-preview.component.scss']
44939
45125
  }]
44940
45126
  }], ctorParameters: function () {
44941
45127
  return [{ type: undefined, decorators: [{
44942
45128
  type: i0.Inject,
44943
45129
  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 }];
45130
+ }] }, { 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
45131
  }, propDecorators: { glbExportName: [{
44946
45132
  type: i0.ViewChild,
44947
45133
  args: ['fileName']
@@ -45026,7 +45212,7 @@
45026
45212
  this._subs = [];
45027
45213
  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
45214
  // 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); }));
45215
+ 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
45216
  }
45031
45217
  ToolbarComponent.prototype.handleKeyDown = function (event) {
45032
45218
  if (event.ctrlKey && event.shiftKey && event.key === 'S') {
@@ -45257,6 +45443,12 @@
45257
45443
  data: { file: file }
45258
45444
  });
45259
45445
  };
45446
+ ToolbarComponent.prototype.showRenderError = function (data) {
45447
+ this._dialog.open(ErrorDialogComponent, {
45448
+ data: data
45449
+ });
45450
+ this.messageService.emit(MessageType.HideLoadingIndicator);
45451
+ };
45260
45452
  ToolbarComponent.prototype.testRender = function () {
45261
45453
  this._newRenderService.forceRenderImage();
45262
45454
  };
@@ -45315,7 +45507,7 @@
45315
45507
  return ToolbarComponent;
45316
45508
  }());
45317
45509
  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: [
45510
+ 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
45511
  animations.trigger('showToast', [
45320
45512
  animations.state('void', animations.style({ 'transform-origin': 'top center', transform: 'translate(-50%, -100%)' })),
45321
45513
  animations.state('*', animations.style({ 'transform-origin': 'top center', transform: 'translate(-50%, 0)' })),
@@ -45332,7 +45524,7 @@
45332
45524
  type: i0.Component,
45333
45525
  args: [{
45334
45526
  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 ",
45527
+ 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
45528
  styleUrls: ['./toolbar.component.scss'],
45337
45529
  animations: [
45338
45530
  animations.trigger('showToast', [
@@ -45426,7 +45618,7 @@
45426
45618
  return ProductOwnCollectionComponent;
45427
45619
  }());
45428
45620
  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 } });
45621
+ 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
45622
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionComponent, decorators: [{
45431
45623
  type: i0.Component,
45432
45624
  args: [{
@@ -45858,8 +46050,8 @@
45858
46050
  };
45859
46051
  return ProductCatalogComponent;
45860
46052
  }());
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 } });
46053
+ 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 });
46054
+ 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
46055
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogComponent, decorators: [{
45864
46056
  type: i0.Component,
45865
46057
  args: [{
@@ -45867,7 +46059,7 @@
45867
46059
  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
46060
  styleUrls: ['./product-catalog.component.scss']
45869
46061
  }]
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: [{
46062
+ }], 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
46063
  type: i0.HostBinding,
45872
46064
  args: ['class.shown']
45873
46065
  }], phoneSizeScreen: [{
@@ -46008,7 +46200,7 @@
46008
46200
  });
46009
46201
  };
46010
46202
  var HomedecoratorComponent = /** @class */ (function () {
46011
- function HomedecoratorComponent(controllerService, appState, presetsService, screenAnalysis, _componentFactoryResolver, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService) {
46203
+ function HomedecoratorComponent(controllerService, appState, presetsService, screenAnalysis, _componentFactoryResolver, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _eventService) {
46012
46204
  this.controllerService = controllerService;
46013
46205
  this.appState = appState;
46014
46206
  this.presetsService = presetsService;
@@ -46018,6 +46210,7 @@
46018
46210
  this._domSanitizer = _domSanitizer;
46019
46211
  this._messageService = _messageService;
46020
46212
  this._homedecoratorService = _homedecoratorService;
46213
+ this._eventService = _eventService;
46021
46214
  this.showClass = true;
46022
46215
  this.loaded = false;
46023
46216
  this.title = 'MyRoomPlans';
@@ -46114,26 +46307,32 @@
46114
46307
  return __awaiter(this, void 0, void 0, function () {
46115
46308
  var _this = this;
46116
46309
  return __generator(this, function (_a) {
46117
- this.registerCustomIcons();
46118
- this._subs.push(this.screenAnalysis.screenSizeChanged.subscribe(function (info) {
46119
- _this.phoneSizeScreen = info.isPhoneSize;
46120
- _this.isPortraitMode = info.isPortraitMode;
46121
- _this.shouldShowLandscapeMessage = _this.screenAnalysis.isMobileDevice && _this.isPortraitMode;
46122
- }), this._messageService.subscribe(MessageType.ShowIOneLoadingIndicator, function () {
46123
- _this.showIOneLoader = true;
46124
- }), this._messageService.subscribe(MessageType.HideIOneLoadingIndicator, function () {
46125
- _this.showIOneLoader = false;
46126
- }), this._messageService.subscribe(MessageType.StartWithEmptyRoom, function () {
46127
- _this._startWithEmptyRoom(true);
46128
- }), this._messageService.subscribe(MessageType.StartWithPreset, function (_a) {
46129
- var preset = _a.preset, switchTo2D = _a.switchTo2D;
46130
- _this._startWithPreset(preset, switchTo2D);
46131
- }), this._homedecoratorService.loaded.subscribe(function (loaded) {
46132
- if (loaded) {
46133
- _this.loaded = true;
46134
- }
46135
- }));
46136
- return [2 /*return*/];
46310
+ switch (_a.label) {
46311
+ case 0:
46312
+ this.registerCustomIcons();
46313
+ this._subs.push(this.screenAnalysis.screenSizeChanged.subscribe(function (info) {
46314
+ _this.phoneSizeScreen = info.isPhoneSize;
46315
+ _this.isPortraitMode = info.isPortraitMode;
46316
+ _this.shouldShowLandscapeMessage = _this.screenAnalysis.isMobileDevice && _this.isPortraitMode;
46317
+ }), this._messageService.subscribe(MessageType.ShowIOneLoadingIndicator, function () {
46318
+ _this.showIOneLoader = true;
46319
+ }), this._messageService.subscribe(MessageType.HideIOneLoadingIndicator, function () {
46320
+ _this.showIOneLoader = false;
46321
+ }), this._messageService.subscribe(MessageType.StartWithEmptyRoom, function () {
46322
+ _this._startWithEmptyRoom(true);
46323
+ }), this._messageService.subscribe(MessageType.StartWithPreset, function (_a) {
46324
+ var preset = _a.preset, switchTo2D = _a.switchTo2D;
46325
+ _this._startWithPreset(preset, switchTo2D);
46326
+ }), this._homedecoratorService.loaded.subscribe(function (loaded) {
46327
+ if (loaded) {
46328
+ _this.loaded = true;
46329
+ }
46330
+ }));
46331
+ return [4 /*yield*/, this._startWithEmptyRoom(true)];
46332
+ case 1:
46333
+ _a.sent();
46334
+ return [2 /*return*/];
46335
+ }
46137
46336
  });
46138
46337
  });
46139
46338
  };
@@ -46159,7 +46358,10 @@
46159
46358
  'hand-pointer',
46160
46359
  'check',
46161
46360
  'move-phone-ar',
46162
- 'cart-shopping-regular'
46361
+ 'cart-shopping-regular',
46362
+ 'pen-ruler',
46363
+ 'dash-button',
46364
+ 'retry-button'
46163
46365
  ].map(addIcon);
46164
46366
  };
46165
46367
  HomedecoratorComponent.prototype.keyup = function (event) {
@@ -46190,6 +46392,7 @@
46190
46392
  });
46191
46393
  };
46192
46394
  HomedecoratorComponent.prototype._startWithEmptyRoom = function (switchTo2D) {
46395
+ this._eventService.dirty.next(true);
46193
46396
  var preset = Preset.CreateModelFromInterface({ filename: 'assets/presets/empty.json' });
46194
46397
  this._startWithPreset(preset, switchTo2D);
46195
46398
  };
@@ -46206,7 +46409,7 @@
46206
46409
  };
46207
46410
  return HomedecoratorComponent;
46208
46411
  }());
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 });
46412
+ 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
46413
  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
46414
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorComponent, decorators: [{
46212
46415
  type: i0.Component,
@@ -46215,7 +46418,7 @@
46215
46418
  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
46419
  encapsulation: i0.ViewEncapsulation.None
46217
46420
  }]
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: [{
46421
+ }], 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
46422
  type: i0.Input
46220
46423
  }], showClass: [{
46221
46424
  type: i0.HostBinding,
@@ -46660,7 +46863,7 @@
46660
46863
  i9.MatSelectModule,
46661
46864
  i10$1.MatSlideToggleModule,
46662
46865
  i3$2.MatGridListModule,
46663
- i15.MatProgressSpinnerModule,
46866
+ i16.MatProgressSpinnerModule,
46664
46867
  i8.FormsModule], exports: [RenderDialogComponent,
46665
46868
  RenderControlsComponent] });
46666
46869
  RenderModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderModule, providers: [
@@ -46676,7 +46879,7 @@
46676
46879
  i9.MatSelectModule,
46677
46880
  i10$1.MatSlideToggleModule,
46678
46881
  i3$2.MatGridListModule,
46679
- i15.MatProgressSpinnerModule,
46882
+ i16.MatProgressSpinnerModule,
46680
46883
  i8.FormsModule
46681
46884
  ]] });
46682
46885
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RenderModule, decorators: [{
@@ -46693,7 +46896,7 @@
46693
46896
  i9.MatSelectModule,
46694
46897
  i10$1.MatSlideToggleModule,
46695
46898
  i3$2.MatGridListModule,
46696
- i15.MatProgressSpinnerModule,
46899
+ i16.MatProgressSpinnerModule,
46697
46900
  i8.FormsModule
46698
46901
  ],
46699
46902
  declarations: [
@@ -47108,7 +47311,7 @@
47108
47311
  return EditApplyComponent;
47109
47312
  }());
47110
47313
  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 } });
47314
+ 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
47315
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: EditApplyComponent, decorators: [{
47113
47316
  type: i0.Component,
47114
47317
  args: [{
@@ -47391,7 +47594,7 @@
47391
47594
  i5.CommonModule,
47392
47595
  ContextMenuModule,
47393
47596
  i3$1.MatButtonModule,
47394
- i7$2.MatButtonToggleModule,
47597
+ i8$1.MatButtonToggleModule,
47395
47598
  i23.MatCardModule,
47396
47599
  i1$2.MatCheckboxModule,
47397
47600
  i7.MatFormFieldModule,
@@ -47430,7 +47633,7 @@
47430
47633
  i5.CommonModule,
47431
47634
  ContextMenuModule,
47432
47635
  i3$1.MatButtonModule,
47433
- i7$2.MatButtonToggleModule,
47636
+ i8$1.MatButtonToggleModule,
47434
47637
  i23.MatCardModule,
47435
47638
  i1$2.MatCheckboxModule,
47436
47639
  i7.MatFormFieldModule,
@@ -47467,7 +47670,7 @@
47467
47670
  i5.CommonModule,
47468
47671
  ContextMenuModule,
47469
47672
  i3$1.MatButtonModule,
47470
- i7$2.MatButtonToggleModule,
47673
+ i8$1.MatButtonToggleModule,
47471
47674
  i23.MatCardModule,
47472
47675
  i1$2.MatCheckboxModule,
47473
47676
  i7.MatFormFieldModule,
@@ -47546,7 +47749,7 @@
47546
47749
  i5.CommonModule,
47547
47750
  ContextMenuModule,
47548
47751
  i3$1.MatButtonModule,
47549
- i7$2.MatButtonToggleModule,
47752
+ i8$1.MatButtonToggleModule,
47550
47753
  i26.MatSidenavModule,
47551
47754
  i23.MatCardModule,
47552
47755
  i7$1.MatSliderModule,
@@ -47567,7 +47770,7 @@
47567
47770
  i5.CommonModule,
47568
47771
  ContextMenuModule,
47569
47772
  i3$1.MatButtonModule,
47570
- i7$2.MatButtonToggleModule,
47773
+ i8$1.MatButtonToggleModule,
47571
47774
  i26.MatSidenavModule,
47572
47775
  i23.MatCardModule,
47573
47776
  i7$1.MatSliderModule,
@@ -47587,7 +47790,7 @@
47587
47790
  i5.CommonModule,
47588
47791
  ContextMenuModule,
47589
47792
  i3$1.MatButtonModule,
47590
- i7$2.MatButtonToggleModule,
47793
+ i8$1.MatButtonToggleModule,
47591
47794
  i26.MatSidenavModule,
47592
47795
  i23.MatCardModule,
47593
47796
  i7$1.MatSliderModule,
@@ -47786,7 +47989,7 @@
47786
47989
  ElementSliderComponent], imports: [i5.CommonModule,
47787
47990
  i8.FormsModule,
47788
47991
  i3$1.MatButtonModule,
47789
- i7$2.MatButtonToggleModule,
47992
+ i8$1.MatButtonToggleModule,
47790
47993
  i26.MatSidenavModule,
47791
47994
  i23.MatCardModule,
47792
47995
  i7$1.MatSliderModule,
@@ -47812,7 +48015,7 @@
47812
48015
  i5.CommonModule,
47813
48016
  i8.FormsModule,
47814
48017
  i3$1.MatButtonModule,
47815
- i7$2.MatButtonToggleModule,
48018
+ i8$1.MatButtonToggleModule,
47816
48019
  i26.MatSidenavModule,
47817
48020
  i23.MatCardModule,
47818
48021
  i7$1.MatSliderModule,
@@ -47841,7 +48044,7 @@
47841
48044
  i5.CommonModule,
47842
48045
  i8.FormsModule,
47843
48046
  i3$1.MatButtonModule,
47844
- i7$2.MatButtonToggleModule,
48047
+ i8$1.MatButtonToggleModule,
47845
48048
  i26.MatSidenavModule,
47846
48049
  i23.MatCardModule,
47847
48050
  i7$1.MatSliderModule,
@@ -48208,7 +48411,7 @@
48208
48411
  i26.MatSidenavModule,
48209
48412
  i2$2.MatListModule,
48210
48413
  i1$1.MatDialogModule,
48211
- i7$2.MatButtonToggleModule,
48414
+ i8$1.MatButtonToggleModule,
48212
48415
  i2$4.MatSnackBarModule,
48213
48416
  i19.MatInputModule,
48214
48417
  i7.MatFormFieldModule,
@@ -48238,7 +48441,7 @@
48238
48441
  i26.MatSidenavModule,
48239
48442
  i2$2.MatListModule,
48240
48443
  i1$1.MatDialogModule,
48241
- i7$2.MatButtonToggleModule,
48444
+ i8$1.MatButtonToggleModule,
48242
48445
  i2$4.MatSnackBarModule,
48243
48446
  i19.MatInputModule,
48244
48447
  i7.MatFormFieldModule,
@@ -48272,7 +48475,7 @@
48272
48475
  i26.MatSidenavModule,
48273
48476
  i2$2.MatListModule,
48274
48477
  i1$1.MatDialogModule,
48275
- i7$2.MatButtonToggleModule,
48478
+ i8$1.MatButtonToggleModule,
48276
48479
  i2$4.MatSnackBarModule,
48277
48480
  i19.MatInputModule,
48278
48481
  i7.MatFormFieldModule,
@@ -48329,11 +48532,11 @@
48329
48532
  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
48533
  ProductOwnCollectionModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, declarations: [ProductOwnCollectionComponent], imports: [i5.CommonModule,
48331
48534
  CoreModule,
48332
- i7$3.CatalogSearchModule], exports: [ProductOwnCollectionComponent] });
48535
+ i7$2.CatalogSearchModule], exports: [ProductOwnCollectionComponent] });
48333
48536
  ProductOwnCollectionModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, imports: [[
48334
48537
  i5.CommonModule,
48335
48538
  CoreModule,
48336
- i7$3.CatalogSearchModule
48539
+ i7$2.CatalogSearchModule
48337
48540
  ]] });
48338
48541
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductOwnCollectionModule, decorators: [{
48339
48542
  type: i0.NgModule,
@@ -48341,7 +48544,7 @@
48341
48544
  imports: [
48342
48545
  i5.CommonModule,
48343
48546
  CoreModule,
48344
- i7$3.CatalogSearchModule
48547
+ i7$2.CatalogSearchModule
48345
48548
  ],
48346
48549
  declarations: [
48347
48550
  ProductOwnCollectionComponent
@@ -48365,9 +48568,14 @@
48365
48568
  i3$1.MatButtonModule,
48366
48569
  i4.ButtonModule,
48367
48570
  i4$1.ImageModule,
48368
- i7$3.CatalogExternalSourcesModule,
48369
- i7$3.CatalogExternalSourceModule,
48370
- i9$1.MatRadioModule], exports: [ModelUploaderComponent] });
48571
+ i7$2.CatalogExternalSourcesModule,
48572
+ i7$2.CatalogExternalSourceModule,
48573
+ radio.MatRadioModule,
48574
+ i10$1.MatSlideToggleModule,
48575
+ i7.MatFormFieldModule,
48576
+ i3.MatOptionModule,
48577
+ i9.MatSelectModule,
48578
+ i4.IconModule], exports: [ModelUploaderComponent] });
48371
48579
  ModelUploaderModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelUploaderModule, imports: [[
48372
48580
  i5.CommonModule,
48373
48581
  CoreModule,
@@ -48375,9 +48583,14 @@
48375
48583
  i3$1.MatButtonModule,
48376
48584
  i4.ButtonModule,
48377
48585
  i4$1.ImageModule,
48378
- i7$3.CatalogExternalSourcesModule,
48379
- i7$3.CatalogExternalSourceModule,
48380
- i9$1.MatRadioModule,
48586
+ i7$2.CatalogExternalSourcesModule,
48587
+ i7$2.CatalogExternalSourceModule,
48588
+ radio.MatRadioModule,
48589
+ i10$1.MatSlideToggleModule,
48590
+ i7.MatFormFieldModule,
48591
+ i3.MatOptionModule,
48592
+ i9.MatSelectModule,
48593
+ i4.IconModule,
48381
48594
  ]] });
48382
48595
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ModelUploaderModule, decorators: [{
48383
48596
  type: i0.NgModule,
@@ -48389,9 +48602,14 @@
48389
48602
  i3$1.MatButtonModule,
48390
48603
  i4.ButtonModule,
48391
48604
  i4$1.ImageModule,
48392
- i7$3.CatalogExternalSourcesModule,
48393
- i7$3.CatalogExternalSourceModule,
48394
- i9$1.MatRadioModule,
48605
+ i7$2.CatalogExternalSourcesModule,
48606
+ i7$2.CatalogExternalSourceModule,
48607
+ radio.MatRadioModule,
48608
+ i10$1.MatSlideToggleModule,
48609
+ i7.MatFormFieldModule,
48610
+ i3.MatOptionModule,
48611
+ i9.MatSelectModule,
48612
+ i4.IconModule,
48395
48613
  ],
48396
48614
  exports: [
48397
48615
  ModelUploaderComponent
@@ -48415,9 +48633,9 @@
48415
48633
  i3$1.MatButtonModule,
48416
48634
  i4.ButtonModule,
48417
48635
  i4$1.ImageModule,
48418
- i7$3.CatalogExternalSourcesModule,
48636
+ i7$2.CatalogExternalSourcesModule,
48419
48637
  ProductOwnCollectionModule,
48420
- i7$3.CatalogExternalSourceModule,
48638
+ i7$2.CatalogExternalSourceModule,
48421
48639
  ModelUploaderModule], exports: [ProductCatalogComponent] });
48422
48640
  ProductCatalogModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogModule, imports: [[
48423
48641
  i5.CommonModule,
@@ -48426,9 +48644,9 @@
48426
48644
  i3$1.MatButtonModule,
48427
48645
  i4.ButtonModule,
48428
48646
  i4$1.ImageModule,
48429
- i7$3.CatalogExternalSourcesModule,
48647
+ i7$2.CatalogExternalSourcesModule,
48430
48648
  ProductOwnCollectionModule,
48431
- i7$3.CatalogExternalSourceModule,
48649
+ i7$2.CatalogExternalSourceModule,
48432
48650
  ModelUploaderModule
48433
48651
  ]] });
48434
48652
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: ProductCatalogModule, decorators: [{
@@ -48441,9 +48659,9 @@
48441
48659
  i3$1.MatButtonModule,
48442
48660
  i4.ButtonModule,
48443
48661
  i4$1.ImageModule,
48444
- i7$3.CatalogExternalSourcesModule,
48662
+ i7$2.CatalogExternalSourcesModule,
48445
48663
  ProductOwnCollectionModule,
48446
- i7$3.CatalogExternalSourceModule,
48664
+ i7$2.CatalogExternalSourceModule,
48447
48665
  ModelUploaderModule
48448
48666
  ],
48449
48667
  exports: [
@@ -48611,7 +48829,8 @@
48611
48829
  ExportDialogModule,
48612
48830
  InfoDialogModule,
48613
48831
  PluginsModule,
48614
- DialogModule], exports: [HomedecoratorComponent] });
48832
+ DialogModule,
48833
+ i1$5.LightboxModule], exports: [HomedecoratorComponent] });
48615
48834
  HomedecoratorModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorModule, imports: [[
48616
48835
  i5.CommonModule,
48617
48836
  ProgressBarModule,
@@ -48620,7 +48839,8 @@
48620
48839
  ExportDialogModule,
48621
48840
  InfoDialogModule,
48622
48841
  PluginsModule,
48623
- DialogModule
48842
+ DialogModule,
48843
+ i1$5.LightboxModule
48624
48844
  ]] });
48625
48845
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: HomedecoratorModule, decorators: [{
48626
48846
  type: i0.NgModule,
@@ -48633,7 +48853,8 @@
48633
48853
  ExportDialogModule,
48634
48854
  InfoDialogModule,
48635
48855
  PluginsModule,
48636
- DialogModule
48856
+ DialogModule,
48857
+ i1$5.LightboxModule
48637
48858
  ],
48638
48859
  declarations: [
48639
48860
  HomedecoratorComponent