@colijnit/homedecorator 262.1.4 → 262.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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Pipe, Component, Inject, Input, HostBinding, Optional, ViewChild, EventEmitter, ElementRef, Output, Directive, ChangeDetectionStrategy, HostListener, ViewEncapsulation, SkipSelf, Self, NgModule, NO_ERRORS_SCHEMA, forwardRef } from '@angular/core';
2
+ import { Injectable, Pipe, Component, Inject, Input, HostBinding, Optional, ViewChild, EventEmitter, ElementRef, Output, Directive, ChangeDetectionStrategy, ViewEncapsulation, HostListener, SkipSelf, Self, NgModule, NO_ERRORS_SCHEMA, forwardRef } from '@angular/core';
3
3
  import * as THREE from 'three';
4
4
  import { Vector2, Mesh, Object3D, PointLight, Matrix4, Box3, Vector3, Euler, BoxGeometry, MeshBasicMaterial, Scene, AxesHelper, Group, BufferGeometry, Float32BufferAttribute, Line, LineBasicMaterial, CylinderGeometry, EquirectangularReflectionMapping, Material as Material$1, Texture as Texture$1, Source, EventDispatcher, Color, PerspectiveCamera, Quaternion, PlaneGeometry, DoubleSide, MeshStandardMaterial, RingGeometry, MathUtils, Raycaster, DataTexture, UnsignedByteType, LinearFilter, Shape, LinearSRGBColorSpace, SRGBColorSpace, SphereGeometry, PCFSoftShadowMap, ShadowMaterial, LightProbe, DirectionalLight, MeshPhongMaterial, BackSide, FrontSide, NoToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, CustomToneMapping, NeutralToneMapping, BasicShadowMap, PCFShadowMap, VSMShadowMap, OrthographicCamera, WebGLRenderer, TextureLoader, EllipseCurve, ArcCurve, NearestFilter, MeshPhysicalMaterial, Path, ShapeGeometry, ConeGeometry, ObjectLoader, Light, Camera as Camera$1, RepeatWrapping, SpotLight, AmbientLight, HemisphereLight, AdditiveBlending, LineSegments, EdgesGeometry, CircleGeometry, ExtrudeGeometry, InstancedMesh, Clock, AnimationMixer, AnimationClip, BufferAttribute, NoColorSpace, ArrowHelper as ArrowHelper$1, UVMapping, CubeReflectionMapping, CubeRefractionMapping, EquirectangularRefractionMapping, CubeUVReflectionMapping, NearestMipmapNearestFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipMapLinearFilter, LinearMipmapNearestFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipMapLinearFilter, AlphaFormat, RGBAFormat, DepthFormat, DepthStencilFormat, RedFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt248Type, ClampToEdgeWrapping, MirroredRepeatWrapping, ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, OneMinusDstAlphaFactor, DstColorFactor, OneMinusDstColorFactor, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, NoBlending, NormalBlending, SubtractiveBlending, MultiplyBlending, CustomBlending, TangentSpaceNormalMap, ObjectSpaceNormalMap, ZeroStencilOp, KeepStencilOp, ReplaceStencilOp, IncrementStencilOp, DecrementStencilOp, IncrementWrapStencilOp, DecrementWrapStencilOp, InvertStencilOp, NeverStencilFunc, LessStencilFunc, EqualStencilFunc, LessEqualStencilFunc, GreaterStencilFunc, NotEqualStencilFunc, GreaterEqualStencilFunc, AlwaysStencilFunc, SpotLightHelper, DirectionalLightHelper, HemisphereLightHelper, PointLightHelper, GridHelper, PMREMGenerator, BoxHelper } from 'three';
5
5
  import { BehaviorSubject, Subject, Observable, throwError, ReplaySubject, combineLatest, filter as filter$1, take as take$1, from } from 'rxjs';
@@ -43,9 +43,7 @@ import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerM
43
43
  import { RGBFormat, LinearToneMapping, AgXToneMapping, LinearFilter as LinearFilter$1, LinearSRGBColorSpace as LinearSRGBColorSpace$1, SrcAlphaSaturateFactor, FloatType as FloatType$1 } from 'three/src/constants.js';
44
44
  import md5 from 'md5';
45
45
  import { NodeType } from '@colijnit/configuratorapi/build/enum/node-type.enum';
46
- import { ConfiguratorStatisticsEnvironment } from '@colijnit/configuratorapi/build/model/configurator-statistics-environment';
47
46
  import { Options } from '@colijnit/ioneconnector/build/model/options';
48
- import { FrozenArticle } from '@colijnit/configuratorapi/build/model/frozen-article';
49
47
  import { SelectorWithOptions } from '@colijnit/configuratorapi/build/model/selector-with-options';
50
48
  import { ImageUtils } from '@colijnit/configuratorapi/build/utils/image-utils';
51
49
  import * as i1 from '@angular/common/http';
@@ -107,7 +105,7 @@ import { trigger, state, style, transition, animate, query, animateChild } from
107
105
  import * as i2$2 from '@angular/common';
108
106
  import { CommonModule } from '@angular/common';
109
107
  import * as i5$1 from '@colijnit/corecomponents_v12';
110
- import { LoaderModule as LoaderModule$1, IconModule, TooltipDirectiveModule, ListOfValuesModule, ButtonModule, InputTextModule, ImageModule, CoreComponentsTranslationModule } from '@colijnit/corecomponents_v12';
108
+ import { LoaderModule as LoaderModule$1, IconModule, InputTextModule, InputNumberPickerModule, TooltipDirectiveModule, ListOfValuesModule, ButtonModule, ImageModule, CoreComponentsTranslationModule } from '@colijnit/corecomponents_v12';
111
109
  import * as i2$3 from '@angular/material/input';
112
110
  import { MatInputModule, MatFormField } from '@angular/material/input';
113
111
  import * as i12 from '@angular/material/select';
@@ -116,9 +114,9 @@ import * as i4 from '@angular/material/tooltip';
116
114
  import { MatTooltipModule } from '@angular/material/tooltip';
117
115
  import * as i1$4 from 'ngx-color/sketch';
118
116
  import { ColorSketchModule } from 'ngx-color/sketch';
117
+ import * as dat from 'dat.gui';
119
118
  import * as i3$2 from '@angular/material/slider';
120
119
  import { MatSliderModule } from '@angular/material/slider';
121
- import * as dat from 'dat.gui';
122
120
  import * as i14 from '@angular/flex-layout/flex';
123
121
  import * as i2$4 from '@angular/material/progress-bar';
124
122
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -3667,7 +3665,7 @@ class HomedecoratorAppEventService {
3667
3665
  this.externalOpen = new Subject();
3668
3666
  this.searchClick = new Subject();
3669
3667
  this.shareProject = new Subject();
3670
- this.configurationFromPresetLoaded = new BehaviorSubject(false);
3668
+ this.configurationFromPresetLoaded = new Subject();
3671
3669
  }
3672
3670
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3673
3671
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, providedIn: 'root' }); }
@@ -4003,6 +4001,18 @@ class HomedecoratorConnectorAdapterService {
4003
4001
  // public getJsonMatchTableArticles(): Promise<void> {
4004
4002
  // return this.connector.getJsonMatchTableArticles();
4005
4003
  // }
4004
+ async prepareArticleForCart(goodId, quantity = 1, shouldGetArticleTree = false, showLoader = true, instanceId = undefined) {
4005
+ const response = await this.articleApi.prepareArticleForCart('Homedecorator', 'Sales', 'Homedecorator', goodId, shouldGetArticleTree, quantity, instanceId, showLoader);
4006
+ if (response && response.validationResult && response.validationResult.success) {
4007
+ if (typeof response.resultObject !== 'string') {
4008
+ return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
4009
+ }
4010
+ return response.resultObject;
4011
+ }
4012
+ else {
4013
+ return null;
4014
+ }
4015
+ }
4006
4016
  async setInstanceToConfigure(id) {
4007
4017
  try {
4008
4018
  if (id !== null) {
@@ -6869,8 +6879,8 @@ class HomedecoratorConnectorService {
6869
6879
  googleTranslateEnabled() {
6870
6880
  return this._connector.googleTranslateEnabled();
6871
6881
  }
6872
- getJsonConfiguredArticles(goodId, goodType, quantity, externalSource = false, showLoader = true, instanceId, configuratorStatistics) {
6873
- return this._connector.getJsonConfiguredArticles(goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics);
6882
+ prepareArticleForCart(goodId, quantity, externalSource = false, showLoader = true, instanceId) {
6883
+ return this._connector.prepareArticleForCart(goodId, quantity, !!externalSource, showLoader, instanceId);
6874
6884
  }
6875
6885
  // public getJsonMatchTableArticles(): Promise<any> {
6876
6886
  // return this._connector.getJsonMatchTableArticles();
@@ -6903,7 +6913,7 @@ class HomedecoratorConnectorService {
6903
6913
  });
6904
6914
  this.articleReceived.next(article);
6905
6915
  this._article = article;
6906
- this._articlePrice = article.price;
6916
+ this._articlePrice = article ? article.price : null;
6907
6917
  // Sometimes the sku is not returned in Article
6908
6918
  this._article.sku = sku;
6909
6919
  return article;
@@ -7189,23 +7199,21 @@ class HomedecoratorConnectorService {
7189
7199
  });
7190
7200
  }
7191
7201
  async addToCart(goodId, goodType, quantity, instanceId, externalSource) {
7192
- let json;
7193
- const statistics = new ConfiguratorStatisticsEnvironment();
7194
- statistics.userType = 'Homedecorator';
7195
- statistics.transactionType = 'Sales';
7196
- statistics.actionDomain = 'Homedecorator';
7197
- statistics.sessionId = this._settingsService.settings.session ? this._settingsService.settings.session.sessionId : 'unknown';
7198
- statistics.webHost = window.location.host;
7199
- statistics.bundleHost = window.location.host;
7200
- json = await this.getJsonConfiguredArticles(goodId, goodType, quantity, externalSource, true, instanceId, statistics);
7201
- const frozenArticle = JSON.parse(json);
7202
+ const response = await this.prepareArticleForCart(goodId, quantity, externalSource, true, instanceId);
7203
+ let article;
7204
+ if (typeof response === 'string') {
7205
+ article = JSON.parse(response);
7206
+ }
7207
+ else {
7208
+ article = response;
7209
+ }
7202
7210
  this._googleTagManager.sendEvent(GoogleTagManagerEvent.AddToCart, {
7203
- 'articleNr': frozenArticle.articleNr,
7204
- 'product': frozenArticle.articleName,
7205
- 'composition': frozenArticle instanceof FrozenArticle ? frozenArticle.compositions : frozenArticle.configurationText
7211
+ 'articleNr': article.selectorData ? article.selectorData.articleNr : article.articleNr,
7212
+ 'product': article.selectorData ? article.selectorData.articleName : article.name,
7213
+ 'composition': article.selectorData ? article.selectorData.configurationText : article.configuration
7206
7214
  });
7207
- this._messageService.emit(MessageType.ArticleCreated, json);
7208
- return json;
7215
+ this._messageService.emit(MessageType.ArticleCreated, article);
7216
+ return article;
7209
7217
  }
7210
7218
  handleAnswersReceived() {
7211
7219
  this._preloadCachedImages(this.activeAnswers);
@@ -17279,10 +17287,9 @@ class WallItem extends Item {
17279
17287
  // if elevation is higher than the wall, use maxY
17280
17288
  // vec3.y = Math.min(this._getMaxY(wall) / 2, this.halfSize.y + this.elevation);
17281
17289
  vec3.y = Math.min(maxY, this.halfSize.y + this.elevation);
17282
- }
17283
- else if (this.elevationAdjustable && this.onWall) {
17284
- // if the item is adjustable & is placed on the wall
17285
- vec3.y = Math.min(this._getMaxY(wall), this.halfSize.y + this.elevation);
17290
+ // } else if (this.elevationAdjustable && this.onWall) { /* no idea why this is done, but it causes problems for positioning items */
17291
+ // // if the item is adjustable & is placed on the wall
17292
+ // vec3.y = Math.min(this._getMaxY(wall), this.halfSize.y + this.elevation);
17286
17293
  }
17287
17294
  else {
17288
17295
  if (vec3.y < minY) {
@@ -24831,8 +24838,8 @@ class FloorTileIntersectionService {
24831
24838
  floorHits: new Array(),
24832
24839
  edgeHits: new Array()
24833
24840
  };
24834
- const bvhLeft = new MeshBVH(geometryLeft);
24835
- const bvhRight = (geometryRight !== null) ? new MeshBVH(geometryRight) : null;
24841
+ const bvhLeft = new MeshBVH(geometryLeft, { maxLeafSize: 10 });
24842
+ const bvhRight = (geometryRight !== null) ? new MeshBVH(geometryRight, { maxLeafSize: 10 }) : null;
24836
24843
  const positionReference = new Object3D();
24837
24844
  for (const floorItem of floorPattern) {
24838
24845
  const bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
@@ -28700,7 +28707,7 @@ class RenderService {
28700
28707
  this._appEventService = _appEventService;
28701
28708
  this._dictionaryService = _dictionaryService;
28702
28709
  this.renderImageChanged = new BehaviorSubject('');
28703
- this.renderImageError = new BehaviorSubject('');
28710
+ this.renderImageError = new Subject();
28704
28711
  this.blenderRenderStarted = new Subject();
28705
28712
  this.renderUpdateImageChanged = new BehaviorSubject(undefined);
28706
28713
  this.renderRoomImageChanged = new BehaviorSubject('');
@@ -29184,7 +29191,15 @@ class RenderService {
29184
29191
  };
29185
29192
  }
29186
29193
  }
29187
- _getSceneRenderSettings(assetId) {
29194
+ _getSceneRenderSettings(assetId, settings) {
29195
+ let hdriIntensityOverwrite;
29196
+ if (settings && settings.hdriIntensity) {
29197
+ hdriIntensityOverwrite = settings.hdriIntensity;
29198
+ }
29199
+ let hdriRotationOverwrite;
29200
+ if (settings && settings.hdriRotation) {
29201
+ hdriRotationOverwrite = settings.hdriRotation;
29202
+ }
29188
29203
  // Get the asset information from the BlenderRenderSettings
29189
29204
  let renderScenes = [];
29190
29205
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
@@ -29214,16 +29229,18 @@ class RenderService {
29214
29229
  compositeScene.sceneAssetId = renderScene.primarySceneName;
29215
29230
  compositeScene.activeCameraId = 1;
29216
29231
  compositeScene.default = true;
29217
- compositeScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29218
- compositeScene.hdriIntensity = renderScene.hdriIntensity;
29232
+ compositeScene.hdriRotation =
29233
+ hdriRotationOverwrite ? this._apiServiceModule.degreesToVector3(hdriRotationOverwrite) : this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29234
+ compositeScene.hdriIntensity = hdriIntensityOverwrite ? hdriIntensityOverwrite : renderScene.hdriIntensity;
29219
29235
  compositeScene.id = 600;
29220
29236
  if (renderScene.multiSceneRender) {
29221
29237
  const additionalScene = new SceneSettings();
29222
29238
  additionalScene.sceneAssetId = renderScene.secondarySceneName;
29223
29239
  additionalScene.activeCameraId = 1;
29224
29240
  additionalScene.default = false;
29225
- additionalScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29226
- additionalScene.hdriIntensity = renderScene.hdriIntensity;
29241
+ additionalScene.hdriRotation =
29242
+ hdriRotationOverwrite ? this._apiServiceModule.degreesToVector3(hdriRotationOverwrite) : this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29243
+ additionalScene.hdriIntensity = hdriIntensityOverwrite ? hdriIntensityOverwrite : renderScene.hdriIntensity;
29227
29244
  additionalScene.id = 601;
29228
29245
  scenes = [compositeScene, additionalScene];
29229
29246
  }
@@ -29238,7 +29255,7 @@ class RenderService {
29238
29255
  }
29239
29256
  _getDataForRoomRender(settings) {
29240
29257
  this._cameraService.camera.updateMatrixWorld(true);
29241
- const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29258
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name, settings);
29242
29259
  const options = {
29243
29260
  width: settings.width,
29244
29261
  height: settings.height,
@@ -31314,7 +31331,7 @@ class ConfigurationPresetLoadService {
31314
31331
  if (initResponse && initResponse.validationResult && initResponse.validationResult.success) {
31315
31332
  this._messageService.emit(MessageType.LoadConfigurationFromPreset, {
31316
31333
  sku: this.sku,
31317
- instanceId: this.instanceId,
31334
+ instanceId: initResponse.resultObject,
31318
31335
  settings: this._externalSourceOptions
31319
31336
  });
31320
31337
  this.reset();
@@ -33670,6 +33687,126 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33670
33687
  class BlenderRenderSettings {
33671
33688
  }
33672
33689
 
33690
+ class InputSliderComponent {
33691
+ constructor(iconService) {
33692
+ this.iconService = iconService;
33693
+ // TODO we might need to change the inputs to core components ones, but then we need to change the way homedeco looks.
33694
+ // For now just html inputs are fine.
33695
+ this.icons = IconEnum;
33696
+ this.label = '';
33697
+ this.min = 0;
33698
+ this.max = 1000;
33699
+ this.step = 1;
33700
+ this.value = 0;
33701
+ this.valueChange = new EventEmitter();
33702
+ }
33703
+ onValueChange(newValue) {
33704
+ const numeric = +newValue;
33705
+ this.value = numeric;
33706
+ this.valueChange.emit(numeric);
33707
+ }
33708
+ increment() {
33709
+ this.onValueChange(this.value + this.step);
33710
+ }
33711
+ decrement() {
33712
+ this.onValueChange(this.value - this.step);
33713
+ }
33714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderComponent, deps: [{ token: HomedecoratorIconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
33715
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: InputSliderComponent, isStandalone: false, selector: "co-input-slider", inputs: { label: "label", min: "min", max: "max", step: "step", value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
33716
+ <div class="setting-part-container">
33717
+ <div class="form-field third-width">
33718
+ @if (label) {
33719
+ <label [for]="label" class="form-field-label" [textContent]="label"></label>
33720
+ }
33721
+
33722
+ <input
33723
+ [id]="label"
33724
+ type="number"
33725
+ class="form-field-input"
33726
+ [min]="min"
33727
+ [max]="max"
33728
+ [step]="step"
33729
+ [ngModel]="value"
33730
+ (ngModelChange)="onValueChange($event)">
33731
+ </div>
33732
+
33733
+ <div class="setting-part-buttons">
33734
+ <button class="amount-button" (click)="decrement()">
33735
+ <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33736
+ </button>
33737
+ <button class="amount-button" (click)="increment()">
33738
+ <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33739
+ </button>
33740
+ </div>
33741
+
33742
+ <div class="setting-part-slider">
33743
+ <input
33744
+ type="range"
33745
+ class="value-slider"
33746
+ [min]="min"
33747
+ [max]="max"
33748
+ [step]="step"
33749
+ [ngModel]="value"
33750
+ (ngModelChange)="onValueChange($event)">
33751
+ </div>
33752
+ </div>
33753
+ `, isInline: true, styles: [".setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.setting-part-container .form-field{position:relative;display:flex;flex-direction:column}.setting-part-container .form-field-label{font-size:10px;color:#171721;margin-bottom:5px}.setting-part-container .form-field-input{border:none;border-bottom:1px solid rgba(0,0,0,.42);background:transparent;font-size:16px;padding:4px 0;outline:none;width:100%;box-sizing:border-box;transition:border-color .2s ease}.setting-part-container .form-field-input:focus{border-bottom:2px solid #da9803;margin-bottom:-1px}.setting-part-container .form-field-input::-webkit-outer-spin-button,.setting-part-container .form-field-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.setting-part-container .form-field-input[type=number]{-moz-appearance:textfield}.setting-part-container .third-width{width:32%}.setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.setting-part-container .setting-part-buttons .amount-button co-icon svg{fill:#171721}.setting-part-container .setting-part-slider .value-slider{width:100%;appearance:none;height:2px;background:#da98034d;outline:none;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-webkit-slider-thumb{appearance:none;width:16px;height:16px;border-radius:50%;background:#da9803;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#da9803;border:none;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-moz-range-track{height:2px;background:#da98034d}\n"], dependencies: [{ kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3$1.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5$1.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], encapsulation: i0.ViewEncapsulation.None }); }
33754
+ }
33755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderComponent, decorators: [{
33756
+ type: Component,
33757
+ args: [{ selector: 'co-input-slider', template: `
33758
+ <div class="setting-part-container">
33759
+ <div class="form-field third-width">
33760
+ @if (label) {
33761
+ <label [for]="label" class="form-field-label" [textContent]="label"></label>
33762
+ }
33763
+
33764
+ <input
33765
+ [id]="label"
33766
+ type="number"
33767
+ class="form-field-input"
33768
+ [min]="min"
33769
+ [max]="max"
33770
+ [step]="step"
33771
+ [ngModel]="value"
33772
+ (ngModelChange)="onValueChange($event)">
33773
+ </div>
33774
+
33775
+ <div class="setting-part-buttons">
33776
+ <button class="amount-button" (click)="decrement()">
33777
+ <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33778
+ </button>
33779
+ <button class="amount-button" (click)="increment()">
33780
+ <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33781
+ </button>
33782
+ </div>
33783
+
33784
+ <div class="setting-part-slider">
33785
+ <input
33786
+ type="range"
33787
+ class="value-slider"
33788
+ [min]="min"
33789
+ [max]="max"
33790
+ [step]="step"
33791
+ [ngModel]="value"
33792
+ (ngModelChange)="onValueChange($event)">
33793
+ </div>
33794
+ </div>
33795
+ `, standalone: false, encapsulation: ViewEncapsulation.None, styles: [".setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.setting-part-container .form-field{position:relative;display:flex;flex-direction:column}.setting-part-container .form-field-label{font-size:10px;color:#171721;margin-bottom:5px}.setting-part-container .form-field-input{border:none;border-bottom:1px solid rgba(0,0,0,.42);background:transparent;font-size:16px;padding:4px 0;outline:none;width:100%;box-sizing:border-box;transition:border-color .2s ease}.setting-part-container .form-field-input:focus{border-bottom:2px solid #da9803;margin-bottom:-1px}.setting-part-container .form-field-input::-webkit-outer-spin-button,.setting-part-container .form-field-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.setting-part-container .form-field-input[type=number]{-moz-appearance:textfield}.setting-part-container .third-width{width:32%}.setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.setting-part-container .setting-part-buttons .amount-button co-icon svg{fill:#171721}.setting-part-container .setting-part-slider .value-slider{width:100%;appearance:none;height:2px;background:#da98034d;outline:none;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-webkit-slider-thumb{appearance:none;width:16px;height:16px;border-radius:50%;background:#da9803;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#da9803;border:none;cursor:pointer}.setting-part-container .setting-part-slider .value-slider::-moz-range-track{height:2px;background:#da98034d}\n"] }]
33796
+ }], ctorParameters: () => [{ type: HomedecoratorIconCacheService }], propDecorators: { label: [{
33797
+ type: Input
33798
+ }], min: [{
33799
+ type: Input
33800
+ }], max: [{
33801
+ type: Input
33802
+ }], step: [{
33803
+ type: Input
33804
+ }], value: [{
33805
+ type: Input
33806
+ }], valueChange: [{
33807
+ type: Output
33808
+ }] } });
33809
+
33673
33810
  // A pipe for appending strings to other strings in view templates.
33674
33811
  class AppendPipe {
33675
33812
  transform(value, append) {
@@ -33984,410 +34121,326 @@ class RenderControlsComponent {
33984
34121
  }
33985
34122
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, deps: [{ token: MessageBusService }, { token: ViewModeService }, { token: HomedecoratorSettingsService }, { token: HomedecoratorIconCacheService }, { token: RenderService }, { token: i1$2.MatDialog }, { token: SceneService }, { token: CameraService }, { token: ConfigurationService }, { token: HomedecoratorSettingsService }, { token: UtilsService }, { token: RoomService }, { token: WallMeasurementsService }, { token: ConnectionHeathService }, { token: HomedecoratorDictionaryService }, { token: DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
33986
34123
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RenderControlsComponent, isStandalone: false, selector: "rp-render-controls", viewQueries: [{ propertyName: "renderButton", first: true, predicate: ["renderButton"], descendants: true }], ngImport: i0, template: `
33987
- <div class="render-container">
33988
- @if (startUploading) {
33989
- <rp-render-progress></rp-render-progress>
33990
- }
33991
- <!-- the Yellow render indicators -->
33992
- @if (inPictureMode) {
33993
- <div class="render-indicators">
33994
- <div class="render-indicator-top-left"></div>
33995
- <div class="render-indicator-top-right"></div>
33996
- <div class="render-indicator-bottom-left"></div>
33997
- <div class="render-indicator-bottom-right"></div>
34124
+ <div class="render-container">
34125
+ @if (startUploading) {
34126
+ <rp-render-progress></rp-render-progress>
34127
+ }
34128
+ <!-- the Yellow render indicators -->
34129
+ @if (inPictureMode) {
34130
+ <div class="render-indicators">
34131
+ <div class="render-indicator-top-left"></div>
34132
+ <div class="render-indicator-top-right"></div>
34133
+ <div class="render-indicator-bottom-left"></div>
34134
+ <div class="render-indicator-bottom-right"></div>
34135
+ </div>
34136
+ <div class="render-popup-container">
34137
+ <div class="render-popup-header">
34138
+ <h3>
34139
+ <span>{{ 'PICTURE_MODE' | localize }}</span>
34140
+ @if (hasError) {
34141
+ <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34142
+ [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34143
+ }
34144
+ </h3>
34145
+ <button
34146
+ class="close-popup-container"
34147
+ (click)="resetBlenderRenderScene()">
34148
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34149
+ </button>
34150
+ </div>
34151
+ <div class="render-popup-preview">
34152
+ @if (blenderPreviewRender) {
34153
+ <img [src]="blenderPreviewRender" alt="">
34154
+ }
34155
+ @if (!blenderPreviewRender) {
34156
+ <div class="render-popup-preview-placeholder">
34157
+ <span>{{ 'PREVIEW' | localize }}</span>
33998
34158
  </div>
33999
- <div class="render-popup-container">
34000
- <div class="render-popup-header">
34001
- <h3>
34002
- <span>{{ 'PICTURE_MODE' | localize }}</span>
34003
- @if (hasError) {
34004
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34005
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34006
- }
34007
- </h3>
34008
- <button
34009
- class="close-popup-container"
34010
- (click)="resetBlenderRenderScene()">
34011
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34012
- </button>
34013
- </div>
34014
- <div class="render-popup-preview">
34015
- @if (blenderPreviewRender) {
34016
- <img [src]="blenderPreviewRender" alt="">
34017
- }
34018
- @if (!blenderPreviewRender) {
34019
- <div class="render-popup-preview-placeholder">
34020
- <span>{{ 'PREVIEW' | localize }}</span>
34021
- </div>
34022
- }
34023
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34024
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34025
- </button>
34026
- </div>
34027
- @if (renderService.blendFilesRender) {
34028
- <div class="render-popup-dropdown">
34029
- <div class="toggleable" (click)="toggleRenderSettings()">
34030
- <p>
34031
- @if (!showRenderSettings) {
34032
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34033
- }
34034
- @if (showRenderSettings) {
34035
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34036
- }
34037
- </p>
34038
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34039
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34040
- </div>
34041
- @if (showRenderSettings) {
34042
- <div class="advanced-render-settings">
34043
- <div class="setting-part-container">
34044
- <mat-form-field
34045
- class="face-select-form"
34046
- >
34047
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34048
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34049
- @for (scene of sceneList; track scene) {
34050
- <mat-option
34051
- [value]="scene">{{ scene.name }}
34052
- </mat-option>
34053
- }
34054
- </mat-select>
34055
- </mat-form-field>
34056
- </div>
34057
- <div class="setting-part-container">
34058
- <mat-form-field class="third-width">
34059
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34060
- <input
34061
- [type]="'number'"
34062
- matInput
34063
- [(ngModel)]="hdriIntensity"
34064
- (ngModelChange)="hdriIntensity = +$event">
34065
- </mat-form-field>
34066
- <div class="setting-part-buttons">
34067
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34068
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34069
- </button>
34070
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34071
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34072
- </button>
34073
- </div>
34074
- <div class="setting-part-slider">
34075
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34076
- </div>
34077
- </div>
34078
- <div class="setting-part-container">
34079
- <mat-form-field class="third-width">
34080
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34081
- <input
34082
- [type]="'number'"
34083
- matInput
34084
- [(ngModel)]="hdriRotation"
34085
- (ngModelChange)="hdriRotation = +$event">
34086
- </mat-form-field>
34087
- <div class="setting-part-buttons">
34088
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34089
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34090
- </button>
34091
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34092
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34093
- </button>
34094
- </div>
34095
- <div class="setting-part-slider">
34096
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34097
- </div>
34098
- </div>
34099
- <div class="setting-part-container">
34100
- <mat-form-field class="third-width">
34101
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34102
- <input
34103
- [type]="'number'"
34104
- matInput
34105
- [(ngModel)]="lightingExposure"
34106
- (ngModelChange)="lightingExposure = +$event">
34107
- </mat-form-field>
34108
- <div class="setting-part-buttons">
34109
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34110
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34111
- </button>
34112
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34113
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34114
- </button>
34115
- </div>
34116
- <div class="setting-part-slider">
34117
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34118
- </div>
34119
- </div>
34120
- </div>
34121
- }
34122
- </div>
34159
+ }
34160
+ <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34161
+ <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34162
+ </button>
34163
+ </div>
34164
+ @if (renderService.blendFilesRender) {
34165
+ <div class="render-popup-dropdown">
34166
+ <div class="toggleable" (click)="toggleRenderSettings()">
34167
+ <p>
34168
+ @if (!showRenderSettings) {
34169
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34123
34170
  }
34124
- <div class="render-popup-dropdown">
34125
- <mat-form-field class="face-select-form">
34126
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34127
- <mat-select [(value)]="selectedImageSize">
34128
- @for (size of imageSizes; track size) {
34129
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34130
- x{{ size.height }}
34131
- </mat-option>
34132
- }
34133
- </mat-select>
34134
- </mat-form-field>
34135
- </div>
34136
- <div class="render-popup-button-container">
34137
- <button class="render-popup-button photo-button"
34138
- (click)="createBlenderRender()"
34139
- title="{{'MAKE_A_PICTURE' | localize}}"
34140
- [disabled]="disablePictureButton">
34141
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34142
- {{ 'MAKE_A_PICTURE' | localize }}
34143
- </button>
34144
- <button
34145
- class="render-popup-button cancel-button"
34146
- (click)="resetBlenderRenderScene()">
34147
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34148
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34149
- </button>
34150
- </div>
34171
+ @if (showRenderSettings) {
34172
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34173
+ }
34174
+ </p>
34175
+ <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34176
+ [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34151
34177
  </div>
34152
- }
34153
- @if (showCullingErrorDialog) {
34154
- <div class="render-warning">
34155
- <div class="render-warming-header">
34156
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34157
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34158
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34159
- </div>
34160
- </div>
34161
- <div class="render-warning-body">
34162
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34163
- </div>
34164
- <div class="render-warning-footer">
34165
- <button
34166
- class="render-popup-button cancel-button"
34167
- (click)="showCullingErrorDialog = false">
34168
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34169
- {{ 'CLOSE' | localize }}
34170
- </button>
34178
+ @if (showRenderSettings) {
34179
+ <div class="advanced-render-settings">
34180
+ <div class="setting-part-container">
34181
+ <mat-form-field
34182
+ class="face-select-form"
34183
+ >
34184
+ <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34185
+ <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34186
+ @for (scene of sceneList; track scene) {
34187
+ <mat-option
34188
+ [value]="scene">{{ scene.name }}
34189
+ </mat-option>
34190
+ }
34191
+ </mat-select>
34192
+ </mat-form-field>
34171
34193
  </div>
34172
- </div>
34194
+
34195
+ <co-input-slider
34196
+ [label]="'ENVIRONMENT_LIGHT' | localize"
34197
+ [min]="1"
34198
+ [max]="20"
34199
+ [(value)]="hdriIntensity">
34200
+ </co-input-slider>
34201
+
34202
+ <co-input-slider
34203
+ [label]="'ROTATION' | localize"
34204
+ [min]="1"
34205
+ [max]="360"
34206
+ [(value)]="hdriRotation">
34207
+ </co-input-slider>
34208
+
34209
+ <co-input-slider
34210
+ [label]="'LIGHTS' | localize"
34211
+ [min]="1"
34212
+ [max]="10"
34213
+ [(value)]="lightingExposure">
34214
+ </co-input-slider>
34215
+ </div>
34216
+ }
34217
+ </div>
34173
34218
  }
34174
- <button
34175
- #renderButton
34176
- mat-raised-button
34177
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34178
- [id]="'standalone_render_picture'"
34179
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34180
- (click)="showRenderForm($event)">
34181
- <mat-icon class="icon homedecorator-material-icons"
34182
- aria-hidden="true">{{ 'photo_camera' }}
34183
- </mat-icon>
34184
- </button>
34185
- </div>
34186
- `, isInline: true, styles: [".render-container{position:relative}.render-container .render-popup-container{background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px 0;position:relative;width:275px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-popup-container .render-popup-dropdown .setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .third-width{width:32%}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon ::ng-deep svg{fill:#5b6875}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-slider .mat-slider-horizontal{min-width:110px;height:28px}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i2$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5$1.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i3$2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: RenderProgressComponent, selector: "rp-render-progress" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
34219
+ <div class="render-popup-dropdown">
34220
+ <mat-form-field class="face-select-form">
34221
+ <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34222
+ <mat-select [(value)]="selectedImageSize">
34223
+ @for (size of imageSizes; track size) {
34224
+ <mat-option [value]="size">{{ size.name }} {{ size.width }}
34225
+ x{{ size.height }}
34226
+ </mat-option>
34227
+ }
34228
+ </mat-select>
34229
+ </mat-form-field>
34230
+ </div>
34231
+ <div class="render-popup-button-container">
34232
+ <button class="render-popup-button photo-button"
34233
+ (click)="createBlenderRender()"
34234
+ title="{{'MAKE_A_PICTURE' | localize}}"
34235
+ [disabled]="disablePictureButton">
34236
+ <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34237
+ {{ 'MAKE_A_PICTURE' | localize }}
34238
+ </button>
34239
+ <button
34240
+ class="render-popup-button cancel-button"
34241
+ (click)="resetBlenderRenderScene()">
34242
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34243
+ {{ 'CLOSE_PHOTO_MODE' | localize }}
34244
+ </button>
34245
+ </div>
34246
+ </div>
34247
+ }
34248
+ @if (showCullingErrorDialog) {
34249
+ <div class="render-warning">
34250
+ <div class="render-warming-header">
34251
+ <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34252
+ <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34253
+ <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34254
+ </div>
34255
+ </div>
34256
+ <div class="render-warning-body">
34257
+ <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34258
+ </div>
34259
+ <div class="render-warning-footer">
34260
+ <button
34261
+ class="render-popup-button cancel-button"
34262
+ (click)="showCullingErrorDialog = false">
34263
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34264
+ {{ 'CLOSE' | localize }}
34265
+ </button>
34266
+ </div>
34267
+ </div>
34268
+ }
34269
+ <button
34270
+ #renderButton
34271
+ mat-raised-button
34272
+ matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34273
+ [id]="'standalone_render_picture'"
34274
+ [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34275
+ (click)="showRenderForm($event)">
34276
+ <mat-icon class="icon homedecorator-material-icons"
34277
+ aria-hidden="true">{{ 'photo_camera' }}
34278
+ </mat-icon>
34279
+ </button>
34280
+ </div>
34281
+ `, isInline: true, styles: [".render-container{position:relative;min-width:375px}.render-container .render-popup-container{box-sizing:border-box;background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px auto;position:relative;width:340px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"], dependencies: [{ kind: "directive", type: i2$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5$1.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: InputSliderComponent, selector: "co-input-slider", inputs: ["label", "min", "max", "step", "value"], outputs: ["valueChange"] }, { kind: "component", type: RenderProgressComponent, selector: "rp-render-progress" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
34187
34282
  }
34188
34283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, decorators: [{
34189
34284
  type: Component,
34190
34285
  args: [{ selector: 'rp-render-controls', template: `
34191
- <div class="render-container">
34192
- @if (startUploading) {
34193
- <rp-render-progress></rp-render-progress>
34194
- }
34195
- <!-- the Yellow render indicators -->
34196
- @if (inPictureMode) {
34197
- <div class="render-indicators">
34198
- <div class="render-indicator-top-left"></div>
34199
- <div class="render-indicator-top-right"></div>
34200
- <div class="render-indicator-bottom-left"></div>
34201
- <div class="render-indicator-bottom-right"></div>
34286
+ <div class="render-container">
34287
+ @if (startUploading) {
34288
+ <rp-render-progress></rp-render-progress>
34289
+ }
34290
+ <!-- the Yellow render indicators -->
34291
+ @if (inPictureMode) {
34292
+ <div class="render-indicators">
34293
+ <div class="render-indicator-top-left"></div>
34294
+ <div class="render-indicator-top-right"></div>
34295
+ <div class="render-indicator-bottom-left"></div>
34296
+ <div class="render-indicator-bottom-right"></div>
34297
+ </div>
34298
+ <div class="render-popup-container">
34299
+ <div class="render-popup-header">
34300
+ <h3>
34301
+ <span>{{ 'PICTURE_MODE' | localize }}</span>
34302
+ @if (hasError) {
34303
+ <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34304
+ [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34305
+ }
34306
+ </h3>
34307
+ <button
34308
+ class="close-popup-container"
34309
+ (click)="resetBlenderRenderScene()">
34310
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34311
+ </button>
34312
+ </div>
34313
+ <div class="render-popup-preview">
34314
+ @if (blenderPreviewRender) {
34315
+ <img [src]="blenderPreviewRender" alt="">
34316
+ }
34317
+ @if (!blenderPreviewRender) {
34318
+ <div class="render-popup-preview-placeholder">
34319
+ <span>{{ 'PREVIEW' | localize }}</span>
34202
34320
  </div>
34203
- <div class="render-popup-container">
34204
- <div class="render-popup-header">
34205
- <h3>
34206
- <span>{{ 'PICTURE_MODE' | localize }}</span>
34207
- @if (hasError) {
34208
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34209
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34210
- }
34211
- </h3>
34212
- <button
34213
- class="close-popup-container"
34214
- (click)="resetBlenderRenderScene()">
34215
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34216
- </button>
34217
- </div>
34218
- <div class="render-popup-preview">
34219
- @if (blenderPreviewRender) {
34220
- <img [src]="blenderPreviewRender" alt="">
34221
- }
34222
- @if (!blenderPreviewRender) {
34223
- <div class="render-popup-preview-placeholder">
34224
- <span>{{ 'PREVIEW' | localize }}</span>
34225
- </div>
34226
- }
34227
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34228
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34229
- </button>
34230
- </div>
34231
- @if (renderService.blendFilesRender) {
34232
- <div class="render-popup-dropdown">
34233
- <div class="toggleable" (click)="toggleRenderSettings()">
34234
- <p>
34235
- @if (!showRenderSettings) {
34236
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34237
- }
34238
- @if (showRenderSettings) {
34239
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34240
- }
34241
- </p>
34242
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34243
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34244
- </div>
34245
- @if (showRenderSettings) {
34246
- <div class="advanced-render-settings">
34247
- <div class="setting-part-container">
34248
- <mat-form-field
34249
- class="face-select-form"
34250
- >
34251
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34252
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34253
- @for (scene of sceneList; track scene) {
34254
- <mat-option
34255
- [value]="scene">{{ scene.name }}
34256
- </mat-option>
34257
- }
34258
- </mat-select>
34259
- </mat-form-field>
34260
- </div>
34261
- <div class="setting-part-container">
34262
- <mat-form-field class="third-width">
34263
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34264
- <input
34265
- [type]="'number'"
34266
- matInput
34267
- [(ngModel)]="hdriIntensity"
34268
- (ngModelChange)="hdriIntensity = +$event">
34269
- </mat-form-field>
34270
- <div class="setting-part-buttons">
34271
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34272
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34273
- </button>
34274
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34275
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34276
- </button>
34277
- </div>
34278
- <div class="setting-part-slider">
34279
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34280
- </div>
34281
- </div>
34282
- <div class="setting-part-container">
34283
- <mat-form-field class="third-width">
34284
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34285
- <input
34286
- [type]="'number'"
34287
- matInput
34288
- [(ngModel)]="hdriRotation"
34289
- (ngModelChange)="hdriRotation = +$event">
34290
- </mat-form-field>
34291
- <div class="setting-part-buttons">
34292
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34293
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34294
- </button>
34295
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34296
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34297
- </button>
34298
- </div>
34299
- <div class="setting-part-slider">
34300
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34301
- </div>
34302
- </div>
34303
- <div class="setting-part-container">
34304
- <mat-form-field class="third-width">
34305
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34306
- <input
34307
- [type]="'number'"
34308
- matInput
34309
- [(ngModel)]="lightingExposure"
34310
- (ngModelChange)="lightingExposure = +$event">
34311
- </mat-form-field>
34312
- <div class="setting-part-buttons">
34313
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34314
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34315
- </button>
34316
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34317
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34318
- </button>
34319
- </div>
34320
- <div class="setting-part-slider">
34321
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34322
- </div>
34323
- </div>
34324
- </div>
34325
- }
34326
- </div>
34321
+ }
34322
+ <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34323
+ <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34324
+ </button>
34325
+ </div>
34326
+ @if (renderService.blendFilesRender) {
34327
+ <div class="render-popup-dropdown">
34328
+ <div class="toggleable" (click)="toggleRenderSettings()">
34329
+ <p>
34330
+ @if (!showRenderSettings) {
34331
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34327
34332
  }
34328
- <div class="render-popup-dropdown">
34329
- <mat-form-field class="face-select-form">
34330
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34331
- <mat-select [(value)]="selectedImageSize">
34332
- @for (size of imageSizes; track size) {
34333
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34334
- x{{ size.height }}
34335
- </mat-option>
34336
- }
34337
- </mat-select>
34338
- </mat-form-field>
34339
- </div>
34340
- <div class="render-popup-button-container">
34341
- <button class="render-popup-button photo-button"
34342
- (click)="createBlenderRender()"
34343
- title="{{'MAKE_A_PICTURE' | localize}}"
34344
- [disabled]="disablePictureButton">
34345
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34346
- {{ 'MAKE_A_PICTURE' | localize }}
34347
- </button>
34348
- <button
34349
- class="render-popup-button cancel-button"
34350
- (click)="resetBlenderRenderScene()">
34351
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34352
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34353
- </button>
34354
- </div>
34333
+ @if (showRenderSettings) {
34334
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34335
+ }
34336
+ </p>
34337
+ <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34338
+ [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34355
34339
  </div>
34356
- }
34357
- @if (showCullingErrorDialog) {
34358
- <div class="render-warning">
34359
- <div class="render-warming-header">
34360
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34361
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34362
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34363
- </div>
34364
- </div>
34365
- <div class="render-warning-body">
34366
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34367
- </div>
34368
- <div class="render-warning-footer">
34369
- <button
34370
- class="render-popup-button cancel-button"
34371
- (click)="showCullingErrorDialog = false">
34372
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34373
- {{ 'CLOSE' | localize }}
34374
- </button>
34340
+ @if (showRenderSettings) {
34341
+ <div class="advanced-render-settings">
34342
+ <div class="setting-part-container">
34343
+ <mat-form-field
34344
+ class="face-select-form"
34345
+ >
34346
+ <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34347
+ <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34348
+ @for (scene of sceneList; track scene) {
34349
+ <mat-option
34350
+ [value]="scene">{{ scene.name }}
34351
+ </mat-option>
34352
+ }
34353
+ </mat-select>
34354
+ </mat-form-field>
34375
34355
  </div>
34376
- </div>
34356
+
34357
+ <co-input-slider
34358
+ [label]="'ENVIRONMENT_LIGHT' | localize"
34359
+ [min]="1"
34360
+ [max]="20"
34361
+ [(value)]="hdriIntensity">
34362
+ </co-input-slider>
34363
+
34364
+ <co-input-slider
34365
+ [label]="'ROTATION' | localize"
34366
+ [min]="1"
34367
+ [max]="360"
34368
+ [(value)]="hdriRotation">
34369
+ </co-input-slider>
34370
+
34371
+ <co-input-slider
34372
+ [label]="'LIGHTS' | localize"
34373
+ [min]="1"
34374
+ [max]="10"
34375
+ [(value)]="lightingExposure">
34376
+ </co-input-slider>
34377
+ </div>
34378
+ }
34379
+ </div>
34377
34380
  }
34378
- <button
34379
- #renderButton
34380
- mat-raised-button
34381
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34382
- [id]="'standalone_render_picture'"
34383
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34384
- (click)="showRenderForm($event)">
34385
- <mat-icon class="icon homedecorator-material-icons"
34386
- aria-hidden="true">{{ 'photo_camera' }}
34387
- </mat-icon>
34388
- </button>
34389
- </div>
34390
- `, standalone: false, styles: [".render-container{position:relative}.render-container .render-popup-container{background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px 0;position:relative;width:275px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-popup-container .render-popup-dropdown .setting-part-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .third-width{width:32%}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button{float:none;box-sizing:border-box;padding:2px;background:none;cursor:pointer;border:none;width:25px;height:25px;margin:0 5px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon{display:block;width:25px;height:25px}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-buttons .amount-button co-icon ::ng-deep svg{fill:#5b6875}.render-container .render-popup-container .render-popup-dropdown .setting-part-container .setting-part-slider .mat-slider-horizontal{min-width:110px;height:28px}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"] }]
34381
+ <div class="render-popup-dropdown">
34382
+ <mat-form-field class="face-select-form">
34383
+ <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34384
+ <mat-select [(value)]="selectedImageSize">
34385
+ @for (size of imageSizes; track size) {
34386
+ <mat-option [value]="size">{{ size.name }} {{ size.width }}
34387
+ x{{ size.height }}
34388
+ </mat-option>
34389
+ }
34390
+ </mat-select>
34391
+ </mat-form-field>
34392
+ </div>
34393
+ <div class="render-popup-button-container">
34394
+ <button class="render-popup-button photo-button"
34395
+ (click)="createBlenderRender()"
34396
+ title="{{'MAKE_A_PICTURE' | localize}}"
34397
+ [disabled]="disablePictureButton">
34398
+ <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34399
+ {{ 'MAKE_A_PICTURE' | localize }}
34400
+ </button>
34401
+ <button
34402
+ class="render-popup-button cancel-button"
34403
+ (click)="resetBlenderRenderScene()">
34404
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34405
+ {{ 'CLOSE_PHOTO_MODE' | localize }}
34406
+ </button>
34407
+ </div>
34408
+ </div>
34409
+ }
34410
+ @if (showCullingErrorDialog) {
34411
+ <div class="render-warning">
34412
+ <div class="render-warming-header">
34413
+ <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34414
+ <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34415
+ <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34416
+ </div>
34417
+ </div>
34418
+ <div class="render-warning-body">
34419
+ <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34420
+ </div>
34421
+ <div class="render-warning-footer">
34422
+ <button
34423
+ class="render-popup-button cancel-button"
34424
+ (click)="showCullingErrorDialog = false">
34425
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34426
+ {{ 'CLOSE' | localize }}
34427
+ </button>
34428
+ </div>
34429
+ </div>
34430
+ }
34431
+ <button
34432
+ #renderButton
34433
+ mat-raised-button
34434
+ matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34435
+ [id]="'standalone_render_picture'"
34436
+ [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34437
+ (click)="showRenderForm($event)">
34438
+ <mat-icon class="icon homedecorator-material-icons"
34439
+ aria-hidden="true">{{ 'photo_camera' }}
34440
+ </mat-icon>
34441
+ </button>
34442
+ </div>
34443
+ `, standalone: false, styles: [".render-container{position:relative;min-width:375px}.render-container .render-popup-container{box-sizing:border-box;background:#ffffffb3;padding:10px 25px 25px;border-radius:5px;box-shadow:0 1px 5px #0000001f}.render-container .render-popup-container .render-popup-header{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-header h3{display:flex;justify-content:space-between}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon{width:20px;height:20px;margin-left:20px}.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg,.render-container .render-popup-container .render-popup-header h3 ::ng-deep .renderErrorIcon svg polygon{fill:#dc143c}.render-container .render-popup-container .render-popup-header .close-popup-container{cursor:pointer;border:none;background:none;float:none;height:auto;width:auto}.render-container .render-popup-container .render-popup-button-container{display:flex;justify-content:space-between;font-family:inherit}.render-container .render-popup-container .render-popup-button-container .render-popup-button{float:none;width:100%;max-width:130px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-container .render-popup-container .render-popup-button-container .render-popup-button ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-button-container .photo-button{color:#fff;background-color:#dda73f}.render-container .render-popup-container .render-popup-button-container .cancel-button{color:#fff;background-color:#5b6875}.render-container .render-popup-container .render-popup-preview{background-color:#fff;min-height:150px;min-width:275px;margin:5px auto;position:relative;width:340px;height:150px}.render-container .render-popup-container .render-popup-preview .render-popup-preview-placeholder{background-color:#fff;display:flex;justify-content:space-around;align-items:center;vertical-align:middle;min-height:150px;border:1px solid #ddd;color:#ddd;font-size:14px}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview{position:absolute;bottom:0;right:0;cursor:pointer;border-radius:0;border:none;height:30px;width:30px;background-color:#dda73f;color:#fff;margin:0}.render-container .render-popup-container .render-popup-preview .render-popup-refresh-preview ::ng-deep co-icon svg path{fill:#fff}.render-container .render-popup-container .render-popup-dropdown{margin:5px 0;width:100%}.render-container .render-popup-container .render-popup-dropdown .toggleable{cursor:pointer;display:flex;justify-content:right;align-content:center}.render-container .render-popup-container .render-popup-dropdown .toggleable p{padding:0;margin:0;font-size:12px;line-height:30px}.render-container .render-popup-container .render-popup-dropdown .toggleable .icon-rotate{transform:rotate(180deg)}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field{width:100%;font-size:14px}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-flex{background-color:#fff;color:#000;padding:3px 6px;border:1px solid #ddd}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-underline{display:none}.render-container .render-popup-container .render-popup-dropdown .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper{padding-bottom:0}.render-container .render-progress{float:left;min-width:50px;border-radius:25px;line-height:50px;text-align:center;padding:0 60px 0 20px;background:#fff;color:#74b77f;font-weight:700;margin:0 -50px 0 0}.render-container .render-input-container{float:right}.render-container .render-input-container input{width:100px;height:24px;margin:5px 0;padding:0 10px;font-size:14px}.render-container button{pointer-events:all;width:50px;height:50px;float:right;border-radius:100%;position:relative;z-index:2;margin-bottom:10px}.render-container button.active{background:#74b77f;color:#fff}.render-container button>*{pointer-events:none}.render-indicators div{position:fixed;width:100px;height:100px}.render-indicators .render-indicator-top-left{left:5vw;top:10vh;border-left:10px solid #dda73f;border-top:10px solid #dda73f;border-top-left-radius:20px}.render-indicators .render-indicator-top-right{right:5vw;top:10vh;border-right:10px solid #dda73f;border-top:10px solid #dda73f;border-top-right-radius:20px}.render-indicators .render-indicator-bottom-left{left:5vw;bottom:5vh;border-left:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-left-radius:20px}.render-indicators .render-indicator-bottom-right{right:5vw;bottom:5vh;border-right:10px solid #dda73f;border-bottom:10px solid #dda73f;border-bottom-right-radius:20px}.render-warning{width:500px;position:fixed;top:20%;left:calc(50% - 250px);border-radius:15px;box-sizing:border-box;background-color:#fff;box-shadow:1px 0 20px #0000001f}.render-warning .render-warming-header{display:flex;justify-content:space-between;border-bottom:1px solid #c5c3c6;padding:20px 20px 10px;align-items:center}.render-warning .render-warming-header h2{padding:0;margin:0}.render-warning .render-warming-header .render-warning-close mat-icon{fill:#c5c3c6;color:#c5c3c6;cursor:pointer;transition:all .2s ease}.render-warning .render-warming-header .render-warning-close:hover mat-icon{fill:#46494c;color:#46494c}.render-warning .render-warning-body{padding:10px 20px}.render-warning .render-warning-footer{display:flex;justify-content:center;padding:0 20px 10px}.render-warning .render-warning-footer .render-popup-button{float:none;width:110px;border-radius:3px;cursor:pointer;border:none;display:flex;height:40px;align-items:center;justify-content:space-evenly;color:#fff;background-color:#5b6875}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon{display:inline-block;height:18px;width:18px}.render-warning .render-warning-footer .render-popup-button ::ng-deep co-icon svg path{fill:#fff}\n"] }]
34391
34444
  }], ctorParameters: () => [{ type: MessageBusService }, { type: ViewModeService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorIconCacheService }, { type: RenderService }, { type: i1$2.MatDialog }, { type: SceneService }, { type: CameraService }, { type: ConfigurationService }, { type: HomedecoratorSettingsService }, { type: UtilsService }, { type: RoomService }, { type: WallMeasurementsService }, { type: ConnectionHeathService }, { type: HomedecoratorDictionaryService }, { type: DialogService }], propDecorators: { renderButton: [{
34392
34445
  type: ViewChild,
34393
34446
  args: ['renderButton']
@@ -42579,30 +42632,18 @@ class ConfigurationPresetLoaderComponent {
42579
42632
  showClass() {
42580
42633
  return true;
42581
42634
  }
42582
- constructor(configurationPresetService, iconService, _homedecoratorConnectorService, _messageService) {
42635
+ constructor(configurationPresetService, iconService) {
42583
42636
  this.configurationPresetService = configurationPresetService;
42584
42637
  this.iconService = iconService;
42585
- this._homedecoratorConnectorService = _homedecoratorConnectorService;
42586
- this._messageService = _messageService;
42587
42638
  this.icon = IconEnum;
42588
42639
  }
42589
- ngOnInit() {
42590
- // TODO REMOVE MOCK
42591
- // Own source, good ol' instanbull
42592
- // this.configurationPresetService.sku = '1000610952';
42593
- // this.configurationPresetService.instanceId = '67483';
42594
- // IMG extern
42595
- // this.configurationPresetService.sku = '70000107';
42596
- // this.configurationPresetService.instanceId = '354490';
42597
- // this.configurationPresetService.externalSourceId = 171;
42598
- }
42599
42640
  handleCloseClick() {
42600
42641
  this.configurationPresetService.reset();
42601
42642
  }
42602
42643
  handleLoadPreset() {
42603
42644
  this.configurationPresetService.LoadPreset();
42604
42645
  }
42605
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoaderComponent, deps: [{ token: ConfigurationPresetLoadService }, { token: HomedecoratorIconCacheService }, { token: HomedecoratorConnectorService }, { token: MessageBusService }], target: i0.ɵɵFactoryTarget.Component }); }
42646
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigurationPresetLoaderComponent, deps: [{ token: ConfigurationPresetLoadService }, { token: HomedecoratorIconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
42606
42647
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ConfigurationPresetLoaderComponent, isStandalone: false, selector: "co-configurator-preset-loader", host: { properties: { "class.co-configurator-preset-loader": "this.showClass" } }, ngImport: i0, template: `
42607
42648
 
42608
42649
  @if (configurationPresetService.showConfigurationLoad) {
@@ -42652,7 +42693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
42652
42693
  }
42653
42694
 
42654
42695
  `, standalone: false, encapsulation: ViewEncapsulation.None, styles: [".co-configurator-preset-loader .configurator-preset-loader-container{position:fixed;background:#fff;right:50px;bottom:50px;width:100%;max-width:400px;min-height:40px;box-sizing:border-box;padding:15px 5px;display:flex;justify-content:space-between;align-items:center;border-radius:15px;box-shadow:1px 1px 4px #0003;pointer-events:all;z-index:102}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon{background:#4e9b7e;border-radius:50%;width:30px;height:30px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-icon .co-icon svg polygon{fill:#fff}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-head{text-transform:uppercase;font-size:12px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-sku{font-size:18px;font-weight:700;margin:5px 0 15px}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link{font-size:14px;cursor:pointer;color:#4e9b7e;text-align:center}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-info .preset-text-link:hover{text-decoration:underline}.co-configurator-preset-loader .configurator-preset-loader-container .configurator-preset-close .co-button{background:none}\n"] }]
42655
- }], ctorParameters: () => [{ type: ConfigurationPresetLoadService }, { type: HomedecoratorIconCacheService }, { type: HomedecoratorConnectorService }, { type: MessageBusService }], propDecorators: { showClass: [{
42696
+ }], ctorParameters: () => [{ type: ConfigurationPresetLoadService }, { type: HomedecoratorIconCacheService }], propDecorators: { showClass: [{
42656
42697
  type: HostBinding,
42657
42698
  args: ['class.co-configurator-preset-loader']
42658
42699
  }] } });
@@ -43305,10 +43346,10 @@ class RoomPlannerComponent {
43305
43346
  if (object.metadata) {
43306
43347
  this.showContextMenu = false;
43307
43348
  await this._connectorAdapterService.initConnector(object.metadata.externalSettings ? object.metadata.externalSettings.settings : this.settingsService.settings, object.metadata.externalSettings ? object.metadata.externalSettings.name : undefined, false, object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ? object.metadata.externalSettings.externalSourceId : null);
43308
- const json = await this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId));
43349
+ const article = await this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId));
43309
43350
  if (object.metadata.externalSettings) {
43310
43351
  const externalSource = {
43311
- article: json,
43352
+ article: article,
43312
43353
  quantity: 1,
43313
43354
  catalogDefinition: object.metadata.externalSettings.catalogDefinition,
43314
43355
  externalSource: this._connectorAdapterService.getExternalSourceFromId(object.metadata.externalSettings.externalSourceId)
@@ -43316,7 +43357,7 @@ class RoomPlannerComponent {
43316
43357
  this._appEventService.addExternalSourceToCart.next(externalSource);
43317
43358
  }
43318
43359
  else {
43319
- this._appEventService.addToCart.next({ article: json, quantity: 1 });
43360
+ this._appEventService.addToCart.next({ article: article, quantity: 1 });
43320
43361
  }
43321
43362
  }
43322
43363
  }
@@ -49699,7 +49740,7 @@ class HomedecoratorComponent {
49699
49740
  return this._settings;
49700
49741
  }
49701
49742
  constructor(appService, // don't remove this, needs to be created on a high level
49702
- controllerService, appState, presetsService, screenAnalysis, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _parentEventService, _ownEventService, _integrationService, _sceneService, _webWorkerService, _configurationPresetLoadService) {
49743
+ controllerService, appState, presetsService, screenAnalysis, _iconRegistry, _domSanitizer, _messageService, _homedecoratorService, _parentEventService, _ownEventService, _integrationService, _sceneService, _webWorkerService, _configurationPresetLoadService, _injector) {
49703
49744
  this.appService = appService;
49704
49745
  this.controllerService = controllerService;
49705
49746
  this.appState = appState;
@@ -49715,6 +49756,7 @@ class HomedecoratorComponent {
49715
49756
  this._sceneService = _sceneService;
49716
49757
  this._webWorkerService = _webWorkerService;
49717
49758
  this._configurationPresetLoadService = _configurationPresetLoadService;
49759
+ this._injector = _injector;
49718
49760
  this.generalFilterOrders = [
49719
49761
  { name: 'CATEGORY', order: 1 },
49720
49762
  { name: 'TURNOVER_GROUP', order: 2 },
@@ -49801,6 +49843,7 @@ class HomedecoratorComponent {
49801
49843
  // };
49802
49844
  this._subs = [];
49803
49845
  this._initCommunication = false;
49846
+ ServiceLocator.injector = this._injector;
49804
49847
  this._eventService = _parentEventService || _ownEventService;
49805
49848
  this._webWorkerService.initWorkers();
49806
49849
  }
@@ -49931,7 +49974,7 @@ class HomedecoratorComponent {
49931
49974
  _initConnection() {
49932
49975
  this._homedecoratorService.init(this._settings);
49933
49976
  }
49934
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, deps: [{ token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i5.MatIconRegistry }, { token: i1$1.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService, optional: true, skipSelf: true }, { token: HomedecoratorAppEventService, optional: true, self: true }, { token: IntegrationService }, { token: SceneService }, { token: WebWorkerService }, { token: ConfigurationPresetLoadService }], target: i0.ɵɵFactoryTarget.Component }); }
49977
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, deps: [{ token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i5.MatIconRegistry }, { token: i1$1.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService, optional: true, skipSelf: true }, { token: HomedecoratorAppEventService, optional: true, self: true }, { token: IntegrationService }, { token: SceneService }, { token: WebWorkerService }, { token: ConfigurationPresetLoadService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
49935
49978
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: HomedecoratorComponent, isStandalone: false, selector: "co-homedecorator", inputs: { generalFilterOrders: "generalFilterOrders", purchaseFilterOrders: "purchaseFilterOrders", logisticsFilterOrders: "logisticsFilterOrders", initCommunication: "initCommunication", projectToLoad: "projectToLoad", shareButton: "shareButton", loadWithConfigurationPreset: "loadWithConfigurationPreset", settings: "settings" }, host: { listeners: { "document:keyup": "keyup($event)" }, properties: { "class.co-homedecorator": "this.showClass" } }, providers: [
49936
49979
  APPLICATION_SERVICES_PROVIDERS
49937
49980
  ], ngImport: i0, template: `
@@ -50033,7 +50076,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50033
50076
  type: Optional
50034
50077
  }, {
50035
50078
  type: Self
50036
- }] }, { type: IntegrationService }, { type: SceneService }, { type: WebWorkerService }, { type: ConfigurationPresetLoadService }], propDecorators: { generalFilterOrders: [{
50079
+ }] }, { type: IntegrationService }, { type: SceneService }, { type: WebWorkerService }, { type: ConfigurationPresetLoadService }, { type: i0.Injector }], propDecorators: { generalFilterOrders: [{
50037
50080
  type: Input
50038
50081
  }], purchaseFilterOrders: [{
50039
50082
  type: Input
@@ -50579,6 +50622,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50579
50622
  }]
50580
50623
  }] });
50581
50624
 
50625
+ class InputSliderModule {
50626
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50627
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, declarations: [InputSliderComponent], imports: [FormsModule,
50628
+ IconModule,
50629
+ InputTextModule,
50630
+ InputNumberPickerModule], exports: [InputSliderComponent] }); }
50631
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, imports: [FormsModule,
50632
+ IconModule,
50633
+ InputTextModule,
50634
+ InputNumberPickerModule] }); }
50635
+ }
50636
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, decorators: [{
50637
+ type: NgModule,
50638
+ args: [{
50639
+ imports: [
50640
+ FormsModule,
50641
+ IconModule,
50642
+ InputTextModule,
50643
+ InputNumberPickerModule
50644
+ ],
50645
+ exports: [
50646
+ InputSliderComponent
50647
+ ],
50648
+ declarations: [
50649
+ InputSliderComponent
50650
+ ]
50651
+ }]
50652
+ }] });
50653
+
50582
50654
  class RenderModule {
50583
50655
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50584
50656
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, declarations: [RenderControlsComponent,
@@ -50597,7 +50669,8 @@ class RenderModule {
50597
50669
  IconModule,
50598
50670
  MatSliderModule,
50599
50671
  TooltipDirectiveModule,
50600
- ProgressBarModule], exports: [RenderControlsComponent,
50672
+ ProgressBarModule,
50673
+ InputSliderModule], exports: [RenderControlsComponent,
50601
50674
  RenderProgressComponent] }); }
50602
50675
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, providers: [
50603
50676
  HomedecoratorIconCacheService
@@ -50616,7 +50689,8 @@ class RenderModule {
50616
50689
  IconModule,
50617
50690
  MatSliderModule,
50618
50691
  TooltipDirectiveModule,
50619
- ProgressBarModule] }); }
50692
+ ProgressBarModule,
50693
+ InputSliderModule] }); }
50620
50694
  }
50621
50695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, decorators: [{
50622
50696
  type: NgModule,
@@ -50637,7 +50711,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50637
50711
  IconModule,
50638
50712
  MatSliderModule,
50639
50713
  TooltipDirectiveModule,
50640
- ProgressBarModule
50714
+ ProgressBarModule,
50715
+ InputSliderModule
50641
50716
  ],
50642
50717
  declarations: [
50643
50718
  RenderControlsComponent,
@@ -52703,11 +52778,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
52703
52778
  }] });
52704
52779
 
52705
52780
  class HomedecoratorModule {
52706
- constructor(_injector) {
52707
- this._injector = _injector;
52708
- ServiceLocator.injector = this._injector;
52709
- }
52710
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorModule, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
52781
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
52711
52782
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorModule, bootstrap: [HomedecoratorComponent], declarations: [HomedecoratorComponent], imports: [CommonModule,
52712
52783
  ProgressBarModule,
52713
52784
  LoadingOverlayModule,
@@ -52756,7 +52827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
52756
52827
  ],
52757
52828
  bootstrap: [HomedecoratorComponent]
52758
52829
  }]
52759
- }], ctorParameters: () => [{ type: i0.Injector }] });
52830
+ }] });
52760
52831
 
52761
52832
  class MaterialBuilderComponent {
52762
52833
  set settings(value) {