@colijnit/homedecorator 262.1.5 → 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';
@@ -105,7 +105,7 @@ import { trigger, state, style, transition, animate, query, animateChild } from
105
105
  import * as i2$2 from '@angular/common';
106
106
  import { CommonModule } from '@angular/common';
107
107
  import * as i5$1 from '@colijnit/corecomponents_v12';
108
- 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';
109
109
  import * as i2$3 from '@angular/material/input';
110
110
  import { MatInputModule, MatFormField } from '@angular/material/input';
111
111
  import * as i12 from '@angular/material/select';
@@ -114,9 +114,9 @@ import * as i4 from '@angular/material/tooltip';
114
114
  import { MatTooltipModule } from '@angular/material/tooltip';
115
115
  import * as i1$4 from 'ngx-color/sketch';
116
116
  import { ColorSketchModule } from 'ngx-color/sketch';
117
+ import * as dat from 'dat.gui';
117
118
  import * as i3$2 from '@angular/material/slider';
118
119
  import { MatSliderModule } from '@angular/material/slider';
119
- import * as dat from 'dat.gui';
120
120
  import * as i14 from '@angular/flex-layout/flex';
121
121
  import * as i2$4 from '@angular/material/progress-bar';
122
122
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -3665,7 +3665,7 @@ class HomedecoratorAppEventService {
3665
3665
  this.externalOpen = new Subject();
3666
3666
  this.searchClick = new Subject();
3667
3667
  this.shareProject = new Subject();
3668
- this.configurationFromPresetLoaded = new BehaviorSubject(false);
3668
+ this.configurationFromPresetLoaded = new Subject();
3669
3669
  }
3670
3670
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3671
3671
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorAppEventService, providedIn: 'root' }); }
@@ -24838,8 +24838,8 @@ class FloorTileIntersectionService {
24838
24838
  floorHits: new Array(),
24839
24839
  edgeHits: new Array()
24840
24840
  };
24841
- const bvhLeft = new MeshBVH(geometryLeft);
24842
- 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;
24843
24843
  const positionReference = new Object3D();
24844
24844
  for (const floorItem of floorPattern) {
24845
24845
  const bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
@@ -29191,7 +29191,15 @@ class RenderService {
29191
29191
  };
29192
29192
  }
29193
29193
  }
29194
- _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
+ }
29195
29203
  // Get the asset information from the BlenderRenderSettings
29196
29204
  let renderScenes = [];
29197
29205
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
@@ -29221,16 +29229,18 @@ class RenderService {
29221
29229
  compositeScene.sceneAssetId = renderScene.primarySceneName;
29222
29230
  compositeScene.activeCameraId = 1;
29223
29231
  compositeScene.default = true;
29224
- compositeScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29225
- 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;
29226
29235
  compositeScene.id = 600;
29227
29236
  if (renderScene.multiSceneRender) {
29228
29237
  const additionalScene = new SceneSettings();
29229
29238
  additionalScene.sceneAssetId = renderScene.secondarySceneName;
29230
29239
  additionalScene.activeCameraId = 1;
29231
29240
  additionalScene.default = false;
29232
- additionalScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29233
- 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;
29234
29244
  additionalScene.id = 601;
29235
29245
  scenes = [compositeScene, additionalScene];
29236
29246
  }
@@ -29245,7 +29255,7 @@ class RenderService {
29245
29255
  }
29246
29256
  _getDataForRoomRender(settings) {
29247
29257
  this._cameraService.camera.updateMatrixWorld(true);
29248
- const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29258
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name, settings);
29249
29259
  const options = {
29250
29260
  width: settings.width,
29251
29261
  height: settings.height,
@@ -31321,7 +31331,7 @@ class ConfigurationPresetLoadService {
31321
31331
  if (initResponse && initResponse.validationResult && initResponse.validationResult.success) {
31322
31332
  this._messageService.emit(MessageType.LoadConfigurationFromPreset, {
31323
31333
  sku: this.sku,
31324
- instanceId: this.instanceId,
31334
+ instanceId: initResponse.resultObject,
31325
31335
  settings: this._externalSourceOptions
31326
31336
  });
31327
31337
  this.reset();
@@ -33677,6 +33687,126 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33677
33687
  class BlenderRenderSettings {
33678
33688
  }
33679
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
+
33680
33810
  // A pipe for appending strings to other strings in view templates.
33681
33811
  class AppendPipe {
33682
33812
  transform(value, append) {
@@ -33991,410 +34121,326 @@ class RenderControlsComponent {
33991
34121
  }
33992
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 }); }
33993
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: `
33994
- <div class="render-container">
33995
- @if (startUploading) {
33996
- <rp-render-progress></rp-render-progress>
33997
- }
33998
- <!-- the Yellow render indicators -->
33999
- @if (inPictureMode) {
34000
- <div class="render-indicators">
34001
- <div class="render-indicator-top-left"></div>
34002
- <div class="render-indicator-top-right"></div>
34003
- <div class="render-indicator-bottom-left"></div>
34004
- <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>
34005
34158
  </div>
34006
- <div class="render-popup-container">
34007
- <div class="render-popup-header">
34008
- <h3>
34009
- <span>{{ 'PICTURE_MODE' | localize }}</span>
34010
- @if (hasError) {
34011
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34012
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34013
- }
34014
- </h3>
34015
- <button
34016
- class="close-popup-container"
34017
- (click)="resetBlenderRenderScene()">
34018
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34019
- </button>
34020
- </div>
34021
- <div class="render-popup-preview">
34022
- @if (blenderPreviewRender) {
34023
- <img [src]="blenderPreviewRender" alt="">
34024
- }
34025
- @if (!blenderPreviewRender) {
34026
- <div class="render-popup-preview-placeholder">
34027
- <span>{{ 'PREVIEW' | localize }}</span>
34028
- </div>
34029
- }
34030
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34031
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34032
- </button>
34033
- </div>
34034
- @if (renderService.blendFilesRender) {
34035
- <div class="render-popup-dropdown">
34036
- <div class="toggleable" (click)="toggleRenderSettings()">
34037
- <p>
34038
- @if (!showRenderSettings) {
34039
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34040
- }
34041
- @if (showRenderSettings) {
34042
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34043
- }
34044
- </p>
34045
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34046
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34047
- </div>
34048
- @if (showRenderSettings) {
34049
- <div class="advanced-render-settings">
34050
- <div class="setting-part-container">
34051
- <mat-form-field
34052
- class="face-select-form"
34053
- >
34054
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34055
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34056
- @for (scene of sceneList; track scene) {
34057
- <mat-option
34058
- [value]="scene">{{ scene.name }}
34059
- </mat-option>
34060
- }
34061
- </mat-select>
34062
- </mat-form-field>
34063
- </div>
34064
- <div class="setting-part-container">
34065
- <mat-form-field class="third-width">
34066
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34067
- <input
34068
- [type]="'number'"
34069
- matInput
34070
- [(ngModel)]="hdriIntensity"
34071
- (ngModelChange)="hdriIntensity = +$event">
34072
- </mat-form-field>
34073
- <div class="setting-part-buttons">
34074
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34075
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34076
- </button>
34077
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34078
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34079
- </button>
34080
- </div>
34081
- <div class="setting-part-slider">
34082
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34083
- </div>
34084
- </div>
34085
- <div class="setting-part-container">
34086
- <mat-form-field class="third-width">
34087
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34088
- <input
34089
- [type]="'number'"
34090
- matInput
34091
- [(ngModel)]="hdriRotation"
34092
- (ngModelChange)="hdriRotation = +$event">
34093
- </mat-form-field>
34094
- <div class="setting-part-buttons">
34095
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34096
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34097
- </button>
34098
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34099
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34100
- </button>
34101
- </div>
34102
- <div class="setting-part-slider">
34103
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34104
- </div>
34105
- </div>
34106
- <div class="setting-part-container">
34107
- <mat-form-field class="third-width">
34108
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34109
- <input
34110
- [type]="'number'"
34111
- matInput
34112
- [(ngModel)]="lightingExposure"
34113
- (ngModelChange)="lightingExposure = +$event">
34114
- </mat-form-field>
34115
- <div class="setting-part-buttons">
34116
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34117
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34118
- </button>
34119
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34120
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34121
- </button>
34122
- </div>
34123
- <div class="setting-part-slider">
34124
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34125
- </div>
34126
- </div>
34127
- </div>
34128
- }
34129
- </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>
34130
34170
  }
34131
- <div class="render-popup-dropdown">
34132
- <mat-form-field class="face-select-form">
34133
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34134
- <mat-select [(value)]="selectedImageSize">
34135
- @for (size of imageSizes; track size) {
34136
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34137
- x{{ size.height }}
34138
- </mat-option>
34139
- }
34140
- </mat-select>
34141
- </mat-form-field>
34142
- </div>
34143
- <div class="render-popup-button-container">
34144
- <button class="render-popup-button photo-button"
34145
- (click)="createBlenderRender()"
34146
- title="{{'MAKE_A_PICTURE' | localize}}"
34147
- [disabled]="disablePictureButton">
34148
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34149
- {{ 'MAKE_A_PICTURE' | localize }}
34150
- </button>
34151
- <button
34152
- class="render-popup-button cancel-button"
34153
- (click)="resetBlenderRenderScene()">
34154
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34155
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34156
- </button>
34157
- </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>
34158
34177
  </div>
34159
- }
34160
- @if (showCullingErrorDialog) {
34161
- <div class="render-warning">
34162
- <div class="render-warming-header">
34163
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34164
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34165
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34166
- </div>
34167
- </div>
34168
- <div class="render-warning-body">
34169
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34170
- </div>
34171
- <div class="render-warning-footer">
34172
- <button
34173
- class="render-popup-button cancel-button"
34174
- (click)="showCullingErrorDialog = false">
34175
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34176
- {{ 'CLOSE' | localize }}
34177
- </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>
34178
34193
  </div>
34179
- </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>
34180
34218
  }
34181
- <button
34182
- #renderButton
34183
- mat-raised-button
34184
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34185
- [id]="'standalone_render_picture'"
34186
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34187
- (click)="showRenderForm($event)">
34188
- <mat-icon class="icon homedecorator-material-icons"
34189
- aria-hidden="true">{{ 'photo_camera' }}
34190
- </mat-icon>
34191
- </button>
34192
- </div>
34193
- `, 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" }] }); }
34194
34282
  }
34195
34283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, decorators: [{
34196
34284
  type: Component,
34197
34285
  args: [{ selector: 'rp-render-controls', template: `
34198
- <div class="render-container">
34199
- @if (startUploading) {
34200
- <rp-render-progress></rp-render-progress>
34201
- }
34202
- <!-- the Yellow render indicators -->
34203
- @if (inPictureMode) {
34204
- <div class="render-indicators">
34205
- <div class="render-indicator-top-left"></div>
34206
- <div class="render-indicator-top-right"></div>
34207
- <div class="render-indicator-bottom-left"></div>
34208
- <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>
34209
34320
  </div>
34210
- <div class="render-popup-container">
34211
- <div class="render-popup-header">
34212
- <h3>
34213
- <span>{{ 'PICTURE_MODE' | localize }}</span>
34214
- @if (hasError) {
34215
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34216
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34217
- }
34218
- </h3>
34219
- <button
34220
- class="close-popup-container"
34221
- (click)="resetBlenderRenderScene()">
34222
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34223
- </button>
34224
- </div>
34225
- <div class="render-popup-preview">
34226
- @if (blenderPreviewRender) {
34227
- <img [src]="blenderPreviewRender" alt="">
34228
- }
34229
- @if (!blenderPreviewRender) {
34230
- <div class="render-popup-preview-placeholder">
34231
- <span>{{ 'PREVIEW' | localize }}</span>
34232
- </div>
34233
- }
34234
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34235
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34236
- </button>
34237
- </div>
34238
- @if (renderService.blendFilesRender) {
34239
- <div class="render-popup-dropdown">
34240
- <div class="toggleable" (click)="toggleRenderSettings()">
34241
- <p>
34242
- @if (!showRenderSettings) {
34243
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34244
- }
34245
- @if (showRenderSettings) {
34246
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34247
- }
34248
- </p>
34249
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34250
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34251
- </div>
34252
- @if (showRenderSettings) {
34253
- <div class="advanced-render-settings">
34254
- <div class="setting-part-container">
34255
- <mat-form-field
34256
- class="face-select-form"
34257
- >
34258
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34259
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34260
- @for (scene of sceneList; track scene) {
34261
- <mat-option
34262
- [value]="scene">{{ scene.name }}
34263
- </mat-option>
34264
- }
34265
- </mat-select>
34266
- </mat-form-field>
34267
- </div>
34268
- <div class="setting-part-container">
34269
- <mat-form-field class="third-width">
34270
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34271
- <input
34272
- [type]="'number'"
34273
- matInput
34274
- [(ngModel)]="hdriIntensity"
34275
- (ngModelChange)="hdriIntensity = +$event">
34276
- </mat-form-field>
34277
- <div class="setting-part-buttons">
34278
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34279
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34280
- </button>
34281
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34282
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34283
- </button>
34284
- </div>
34285
- <div class="setting-part-slider">
34286
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34287
- </div>
34288
- </div>
34289
- <div class="setting-part-container">
34290
- <mat-form-field class="third-width">
34291
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34292
- <input
34293
- [type]="'number'"
34294
- matInput
34295
- [(ngModel)]="hdriRotation"
34296
- (ngModelChange)="hdriRotation = +$event">
34297
- </mat-form-field>
34298
- <div class="setting-part-buttons">
34299
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34300
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34301
- </button>
34302
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34303
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34304
- </button>
34305
- </div>
34306
- <div class="setting-part-slider">
34307
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34308
- </div>
34309
- </div>
34310
- <div class="setting-part-container">
34311
- <mat-form-field class="third-width">
34312
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34313
- <input
34314
- [type]="'number'"
34315
- matInput
34316
- [(ngModel)]="lightingExposure"
34317
- (ngModelChange)="lightingExposure = +$event">
34318
- </mat-form-field>
34319
- <div class="setting-part-buttons">
34320
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34321
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34322
- </button>
34323
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34324
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34325
- </button>
34326
- </div>
34327
- <div class="setting-part-slider">
34328
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34329
- </div>
34330
- </div>
34331
- </div>
34332
- }
34333
- </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>
34334
34332
  }
34335
- <div class="render-popup-dropdown">
34336
- <mat-form-field class="face-select-form">
34337
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34338
- <mat-select [(value)]="selectedImageSize">
34339
- @for (size of imageSizes; track size) {
34340
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34341
- x{{ size.height }}
34342
- </mat-option>
34343
- }
34344
- </mat-select>
34345
- </mat-form-field>
34346
- </div>
34347
- <div class="render-popup-button-container">
34348
- <button class="render-popup-button photo-button"
34349
- (click)="createBlenderRender()"
34350
- title="{{'MAKE_A_PICTURE' | localize}}"
34351
- [disabled]="disablePictureButton">
34352
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34353
- {{ 'MAKE_A_PICTURE' | localize }}
34354
- </button>
34355
- <button
34356
- class="render-popup-button cancel-button"
34357
- (click)="resetBlenderRenderScene()">
34358
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34359
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34360
- </button>
34361
- </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>
34362
34339
  </div>
34363
- }
34364
- @if (showCullingErrorDialog) {
34365
- <div class="render-warning">
34366
- <div class="render-warming-header">
34367
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34368
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34369
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34370
- </div>
34371
- </div>
34372
- <div class="render-warning-body">
34373
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34374
- </div>
34375
- <div class="render-warning-footer">
34376
- <button
34377
- class="render-popup-button cancel-button"
34378
- (click)="showCullingErrorDialog = false">
34379
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34380
- {{ 'CLOSE' | localize }}
34381
- </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>
34382
34355
  </div>
34383
- </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>
34384
34380
  }
34385
- <button
34386
- #renderButton
34387
- mat-raised-button
34388
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34389
- [id]="'standalone_render_picture'"
34390
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34391
- (click)="showRenderForm($event)">
34392
- <mat-icon class="icon homedecorator-material-icons"
34393
- aria-hidden="true">{{ 'photo_camera' }}
34394
- </mat-icon>
34395
- </button>
34396
- </div>
34397
- `, 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"] }]
34398
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: [{
34399
34445
  type: ViewChild,
34400
34446
  args: ['renderButton']
@@ -42586,30 +42632,18 @@ class ConfigurationPresetLoaderComponent {
42586
42632
  showClass() {
42587
42633
  return true;
42588
42634
  }
42589
- constructor(configurationPresetService, iconService, _homedecoratorConnectorService, _messageService) {
42635
+ constructor(configurationPresetService, iconService) {
42590
42636
  this.configurationPresetService = configurationPresetService;
42591
42637
  this.iconService = iconService;
42592
- this._homedecoratorConnectorService = _homedecoratorConnectorService;
42593
- this._messageService = _messageService;
42594
42638
  this.icon = IconEnum;
42595
42639
  }
42596
- ngOnInit() {
42597
- // TODO REMOVE MOCK
42598
- // Own source, good ol' instanbull
42599
- // this.configurationPresetService.sku = '1000610952';
42600
- // this.configurationPresetService.instanceId = '67483';
42601
- // IMG extern
42602
- // this.configurationPresetService.sku = '70000107';
42603
- // this.configurationPresetService.instanceId = '354490';
42604
- // this.configurationPresetService.externalSourceId = 171;
42605
- }
42606
42640
  handleCloseClick() {
42607
42641
  this.configurationPresetService.reset();
42608
42642
  }
42609
42643
  handleLoadPreset() {
42610
42644
  this.configurationPresetService.LoadPreset();
42611
42645
  }
42612
- 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 }); }
42613
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: `
42614
42648
 
42615
42649
  @if (configurationPresetService.showConfigurationLoad) {
@@ -42659,7 +42693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
42659
42693
  }
42660
42694
 
42661
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"] }]
42662
- }], ctorParameters: () => [{ type: ConfigurationPresetLoadService }, { type: HomedecoratorIconCacheService }, { type: HomedecoratorConnectorService }, { type: MessageBusService }], propDecorators: { showClass: [{
42696
+ }], ctorParameters: () => [{ type: ConfigurationPresetLoadService }, { type: HomedecoratorIconCacheService }], propDecorators: { showClass: [{
42663
42697
  type: HostBinding,
42664
42698
  args: ['class.co-configurator-preset-loader']
42665
42699
  }] } });
@@ -50588,6 +50622,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50588
50622
  }]
50589
50623
  }] });
50590
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
+
50591
50654
  class RenderModule {
50592
50655
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50593
50656
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, declarations: [RenderControlsComponent,
@@ -50606,7 +50669,8 @@ class RenderModule {
50606
50669
  IconModule,
50607
50670
  MatSliderModule,
50608
50671
  TooltipDirectiveModule,
50609
- ProgressBarModule], exports: [RenderControlsComponent,
50672
+ ProgressBarModule,
50673
+ InputSliderModule], exports: [RenderControlsComponent,
50610
50674
  RenderProgressComponent] }); }
50611
50675
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, providers: [
50612
50676
  HomedecoratorIconCacheService
@@ -50625,7 +50689,8 @@ class RenderModule {
50625
50689
  IconModule,
50626
50690
  MatSliderModule,
50627
50691
  TooltipDirectiveModule,
50628
- ProgressBarModule] }); }
50692
+ ProgressBarModule,
50693
+ InputSliderModule] }); }
50629
50694
  }
50630
50695
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, decorators: [{
50631
50696
  type: NgModule,
@@ -50646,7 +50711,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50646
50711
  IconModule,
50647
50712
  MatSliderModule,
50648
50713
  TooltipDirectiveModule,
50649
- ProgressBarModule
50714
+ ProgressBarModule,
50715
+ InputSliderModule
50650
50716
  ],
50651
50717
  declarations: [
50652
50718
  RenderControlsComponent,