@colijnit/homedecorator 261.20.6 → 261.20.7

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, from } from 'rxjs';
@@ -104,7 +104,7 @@ import { trigger, state, style, transition, animate, query, animateChild } from
104
104
  import * as i2$2 from '@angular/common';
105
105
  import { CommonModule } from '@angular/common';
106
106
  import * as i5 from '@colijnit/corecomponents_v12';
107
- import { LoaderModule as LoaderModule$1, IconModule, TooltipDirectiveModule, ListOfValuesModule, ButtonModule, InputTextModule, ImageModule, CoreComponentsTranslationModule } from '@colijnit/corecomponents_v12';
107
+ import { LoaderModule as LoaderModule$1, IconModule, InputTextModule, InputNumberPickerModule, TooltipDirectiveModule, ListOfValuesModule, ButtonModule, ImageModule, CoreComponentsTranslationModule } from '@colijnit/corecomponents_v12';
108
108
  import * as i2$3 from '@angular/material/form-field';
109
109
  import { MatFormFieldModule } from '@angular/material/form-field';
110
110
  import * as i13 from '@angular/material/select';
@@ -113,11 +113,11 @@ import * as i4$1 from '@angular/material/tooltip';
113
113
  import { MatTooltipModule } from '@angular/material/tooltip';
114
114
  import * as i1$4 from 'ngx-color/sketch';
115
115
  import { ColorSketchModule } from 'ngx-color/sketch';
116
+ import * as dat from 'dat.gui';
116
117
  import * as i3$2 from '@angular/material/input';
117
118
  import { MatInputModule } from '@angular/material/input';
118
119
  import * as i4$2 from '@angular/material/slider';
119
120
  import { MatSliderModule } from '@angular/material/slider';
120
- import * as dat from 'dat.gui';
121
121
  import * as i6 from '@angular/flex-layout/flex';
122
122
  import * as i2$4 from '@angular/material/progress-bar';
123
123
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -24742,8 +24742,8 @@ class FloorTileIntersectionService {
24742
24742
  floorHits: new Array(),
24743
24743
  edgeHits: new Array()
24744
24744
  };
24745
- const bvhLeft = new MeshBVH(geometryLeft);
24746
- const bvhRight = (geometryRight !== null) ? new MeshBVH(geometryRight) : null;
24745
+ const bvhLeft = new MeshBVH(geometryLeft, { maxLeafSize: 10 });
24746
+ const bvhRight = (geometryRight !== null) ? new MeshBVH(geometryRight, { maxLeafSize: 10 }) : null;
24747
24747
  const positionReference = new Object3D();
24748
24748
  for (const floorItem of floorPattern) {
24749
24749
  const bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
@@ -29095,7 +29095,15 @@ class RenderService {
29095
29095
  };
29096
29096
  }
29097
29097
  }
29098
- _getSceneRenderSettings(assetId) {
29098
+ _getSceneRenderSettings(assetId, settings) {
29099
+ let hdriIntensityOverwrite;
29100
+ if (settings && settings.hdriIntensity) {
29101
+ hdriIntensityOverwrite = settings.hdriIntensity;
29102
+ }
29103
+ let hdriRotationOverwrite;
29104
+ if (settings && settings.hdriRotation) {
29105
+ hdriRotationOverwrite = settings.hdriRotation;
29106
+ }
29099
29107
  // Get the asset information from the BlenderRenderSettings
29100
29108
  let renderScenes = [];
29101
29109
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
@@ -29125,16 +29133,18 @@ class RenderService {
29125
29133
  compositeScene.sceneAssetId = renderScene.primarySceneName;
29126
29134
  compositeScene.activeCameraId = 1;
29127
29135
  compositeScene.default = true;
29128
- compositeScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29129
- compositeScene.hdriIntensity = renderScene.hdriIntensity;
29136
+ compositeScene.hdriRotation =
29137
+ hdriRotationOverwrite ? this._apiServiceModule.degreesToVector3(hdriRotationOverwrite) : this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29138
+ compositeScene.hdriIntensity = hdriIntensityOverwrite ? hdriIntensityOverwrite : renderScene.hdriIntensity;
29130
29139
  compositeScene.id = 600;
29131
29140
  if (renderScene.multiSceneRender) {
29132
29141
  const additionalScene = new SceneSettings();
29133
29142
  additionalScene.sceneAssetId = renderScene.secondarySceneName;
29134
29143
  additionalScene.activeCameraId = 1;
29135
29144
  additionalScene.default = false;
29136
- additionalScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29137
- additionalScene.hdriIntensity = renderScene.hdriIntensity;
29145
+ additionalScene.hdriRotation =
29146
+ hdriRotationOverwrite ? this._apiServiceModule.degreesToVector3(hdriRotationOverwrite) : this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29147
+ additionalScene.hdriIntensity = hdriIntensityOverwrite ? hdriIntensityOverwrite : renderScene.hdriIntensity;
29138
29148
  additionalScene.id = 601;
29139
29149
  scenes = [compositeScene, additionalScene];
29140
29150
  }
@@ -29149,7 +29159,7 @@ class RenderService {
29149
29159
  }
29150
29160
  _getDataForRoomRender(settings) {
29151
29161
  this._cameraService.camera.updateMatrixWorld(true);
29152
- const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29162
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name, settings);
29153
29163
  const options = {
29154
29164
  width: settings.width,
29155
29165
  height: settings.height,
@@ -33456,6 +33466,126 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33456
33466
  class BlenderRenderSettings {
33457
33467
  }
33458
33468
 
33469
+ class InputSliderComponent {
33470
+ constructor(iconService) {
33471
+ this.iconService = iconService;
33472
+ // TODO we might need to change the inputs to core components ones, but then we need to change the way homedeco looks.
33473
+ // For now just html inputs are fine.
33474
+ this.icons = IconEnum;
33475
+ this.label = '';
33476
+ this.min = 0;
33477
+ this.max = 1000;
33478
+ this.step = 1;
33479
+ this.value = 0;
33480
+ this.valueChange = new EventEmitter();
33481
+ }
33482
+ onValueChange(newValue) {
33483
+ const numeric = +newValue;
33484
+ this.value = numeric;
33485
+ this.valueChange.emit(numeric);
33486
+ }
33487
+ increment() {
33488
+ this.onValueChange(this.value + this.step);
33489
+ }
33490
+ decrement() {
33491
+ this.onValueChange(this.value - this.step);
33492
+ }
33493
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderComponent, deps: [{ token: HomedecoratorIconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
33494
+ 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: `
33495
+ <div class="setting-part-container">
33496
+ <div class="form-field third-width">
33497
+ @if (label) {
33498
+ <label [for]="label" class="form-field-label" [textContent]="label"></label>
33499
+ }
33500
+
33501
+ <input
33502
+ [id]="label"
33503
+ type="number"
33504
+ class="form-field-input"
33505
+ [min]="min"
33506
+ [max]="max"
33507
+ [step]="step"
33508
+ [ngModel]="value"
33509
+ (ngModelChange)="onValueChange($event)">
33510
+ </div>
33511
+
33512
+ <div class="setting-part-buttons">
33513
+ <button class="amount-button" (click)="decrement()">
33514
+ <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33515
+ </button>
33516
+ <button class="amount-button" (click)="increment()">
33517
+ <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33518
+ </button>
33519
+ </div>
33520
+
33521
+ <div class="setting-part-slider">
33522
+ <input
33523
+ type="range"
33524
+ class="value-slider"
33525
+ [min]="min"
33526
+ [max]="max"
33527
+ [step]="step"
33528
+ [ngModel]="value"
33529
+ (ngModelChange)="onValueChange($event)">
33530
+ </div>
33531
+ </div>
33532
+ `, 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.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], encapsulation: i0.ViewEncapsulation.None }); }
33533
+ }
33534
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderComponent, decorators: [{
33535
+ type: Component,
33536
+ args: [{ selector: 'co-input-slider', template: `
33537
+ <div class="setting-part-container">
33538
+ <div class="form-field third-width">
33539
+ @if (label) {
33540
+ <label [for]="label" class="form-field-label" [textContent]="label"></label>
33541
+ }
33542
+
33543
+ <input
33544
+ [id]="label"
33545
+ type="number"
33546
+ class="form-field-input"
33547
+ [min]="min"
33548
+ [max]="max"
33549
+ [step]="step"
33550
+ [ngModel]="value"
33551
+ (ngModelChange)="onValueChange($event)">
33552
+ </div>
33553
+
33554
+ <div class="setting-part-buttons">
33555
+ <button class="amount-button" (click)="decrement()">
33556
+ <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33557
+ </button>
33558
+ <button class="amount-button" (click)="increment()">
33559
+ <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33560
+ </button>
33561
+ </div>
33562
+
33563
+ <div class="setting-part-slider">
33564
+ <input
33565
+ type="range"
33566
+ class="value-slider"
33567
+ [min]="min"
33568
+ [max]="max"
33569
+ [step]="step"
33570
+ [ngModel]="value"
33571
+ (ngModelChange)="onValueChange($event)">
33572
+ </div>
33573
+ </div>
33574
+ `, 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"] }]
33575
+ }], ctorParameters: () => [{ type: HomedecoratorIconCacheService }], propDecorators: { label: [{
33576
+ type: Input
33577
+ }], min: [{
33578
+ type: Input
33579
+ }], max: [{
33580
+ type: Input
33581
+ }], step: [{
33582
+ type: Input
33583
+ }], value: [{
33584
+ type: Input
33585
+ }], valueChange: [{
33586
+ type: Output
33587
+ }] } });
33588
+
33459
33589
  // A pipe for appending strings to other strings in view templates.
33460
33590
  class AppendPipe {
33461
33591
  transform(value, append) {
@@ -33770,410 +33900,326 @@ class RenderControlsComponent {
33770
33900
  }
33771
33901
  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 }); }
33772
33902
  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: `
33773
- <div class="render-container">
33774
- @if (startUploading) {
33775
- <rp-render-progress></rp-render-progress>
33776
- }
33777
- <!-- the Yellow render indicators -->
33778
- @if (inPictureMode) {
33779
- <div class="render-indicators">
33780
- <div class="render-indicator-top-left"></div>
33781
- <div class="render-indicator-top-right"></div>
33782
- <div class="render-indicator-bottom-left"></div>
33783
- <div class="render-indicator-bottom-right"></div>
33903
+ <div class="render-container">
33904
+ @if (startUploading) {
33905
+ <rp-render-progress></rp-render-progress>
33906
+ }
33907
+ <!-- the Yellow render indicators -->
33908
+ @if (inPictureMode) {
33909
+ <div class="render-indicators">
33910
+ <div class="render-indicator-top-left"></div>
33911
+ <div class="render-indicator-top-right"></div>
33912
+ <div class="render-indicator-bottom-left"></div>
33913
+ <div class="render-indicator-bottom-right"></div>
33914
+ </div>
33915
+ <div class="render-popup-container">
33916
+ <div class="render-popup-header">
33917
+ <h3>
33918
+ <span>{{ 'PICTURE_MODE' | localize }}</span>
33919
+ @if (hasError) {
33920
+ <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
33921
+ [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
33922
+ }
33923
+ </h3>
33924
+ <button
33925
+ class="close-popup-container"
33926
+ (click)="resetBlenderRenderScene()">
33927
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
33928
+ </button>
33929
+ </div>
33930
+ <div class="render-popup-preview">
33931
+ @if (blenderPreviewRender) {
33932
+ <img [src]="blenderPreviewRender" alt="">
33933
+ }
33934
+ @if (!blenderPreviewRender) {
33935
+ <div class="render-popup-preview-placeholder">
33936
+ <span>{{ 'PREVIEW' | localize }}</span>
33784
33937
  </div>
33785
- <div class="render-popup-container">
33786
- <div class="render-popup-header">
33787
- <h3>
33788
- <span>{{ 'PICTURE_MODE' | localize }}</span>
33789
- @if (hasError) {
33790
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
33791
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
33792
- }
33793
- </h3>
33794
- <button
33795
- class="close-popup-container"
33796
- (click)="resetBlenderRenderScene()">
33797
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
33798
- </button>
33799
- </div>
33800
- <div class="render-popup-preview">
33801
- @if (blenderPreviewRender) {
33802
- <img [src]="blenderPreviewRender" alt="">
33803
- }
33804
- @if (!blenderPreviewRender) {
33805
- <div class="render-popup-preview-placeholder">
33806
- <span>{{ 'PREVIEW' | localize }}</span>
33807
- </div>
33808
- }
33809
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
33810
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
33811
- </button>
33812
- </div>
33813
- @if (renderService.blendFilesRender) {
33814
- <div class="render-popup-dropdown">
33815
- <div class="toggleable" (click)="toggleRenderSettings()">
33816
- <p>
33817
- @if (!showRenderSettings) {
33818
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
33819
- }
33820
- @if (showRenderSettings) {
33821
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
33822
- }
33823
- </p>
33824
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
33825
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
33826
- </div>
33827
- @if (showRenderSettings) {
33828
- <div class="advanced-render-settings">
33829
- <div class="setting-part-container">
33830
- <mat-form-field
33831
- class="face-select-form"
33832
- >
33833
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
33834
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
33835
- @for (scene of sceneList; track scene) {
33836
- <mat-option
33837
- [value]="scene">{{ scene.name }}
33838
- </mat-option>
33839
- }
33840
- </mat-select>
33841
- </mat-form-field>
33842
- </div>
33843
- <div class="setting-part-container">
33844
- <mat-form-field class="third-width">
33845
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
33846
- <input
33847
- [type]="'number'"
33848
- matInput
33849
- [(ngModel)]="hdriIntensity"
33850
- (ngModelChange)="hdriIntensity = +$event">
33851
- </mat-form-field>
33852
- <div class="setting-part-buttons">
33853
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
33854
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33855
- </button>
33856
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
33857
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33858
- </button>
33859
- </div>
33860
- <div class="setting-part-slider">
33861
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
33862
- </div>
33863
- </div>
33864
- <div class="setting-part-container">
33865
- <mat-form-field class="third-width">
33866
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
33867
- <input
33868
- [type]="'number'"
33869
- matInput
33870
- [(ngModel)]="hdriRotation"
33871
- (ngModelChange)="hdriRotation = +$event">
33872
- </mat-form-field>
33873
- <div class="setting-part-buttons">
33874
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
33875
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33876
- </button>
33877
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
33878
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33879
- </button>
33880
- </div>
33881
- <div class="setting-part-slider">
33882
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
33883
- </div>
33884
- </div>
33885
- <div class="setting-part-container">
33886
- <mat-form-field class="third-width">
33887
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
33888
- <input
33889
- [type]="'number'"
33890
- matInput
33891
- [(ngModel)]="lightingExposure"
33892
- (ngModelChange)="lightingExposure = +$event">
33893
- </mat-form-field>
33894
- <div class="setting-part-buttons">
33895
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
33896
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33897
- </button>
33898
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
33899
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33900
- </button>
33901
- </div>
33902
- <div class="setting-part-slider">
33903
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
33904
- </div>
33905
- </div>
33906
- </div>
33907
- }
33908
- </div>
33938
+ }
33939
+ <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
33940
+ <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
33941
+ </button>
33942
+ </div>
33943
+ @if (renderService.blendFilesRender) {
33944
+ <div class="render-popup-dropdown">
33945
+ <div class="toggleable" (click)="toggleRenderSettings()">
33946
+ <p>
33947
+ @if (!showRenderSettings) {
33948
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
33909
33949
  }
33910
- <div class="render-popup-dropdown">
33911
- <mat-form-field class="face-select-form">
33912
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
33913
- <mat-select [(value)]="selectedImageSize">
33914
- @for (size of imageSizes; track size) {
33915
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
33916
- x{{ size.height }}
33917
- </mat-option>
33918
- }
33919
- </mat-select>
33920
- </mat-form-field>
33921
- </div>
33922
- <div class="render-popup-button-container">
33923
- <button class="render-popup-button photo-button"
33924
- (click)="createBlenderRender()"
33925
- title="{{'MAKE_A_PICTURE' | localize}}"
33926
- [disabled]="disablePictureButton">
33927
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
33928
- {{ 'MAKE_A_PICTURE' | localize }}
33929
- </button>
33930
- <button
33931
- class="render-popup-button cancel-button"
33932
- (click)="resetBlenderRenderScene()">
33933
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
33934
- {{ 'CLOSE_PHOTO_MODE' | localize }}
33935
- </button>
33936
- </div>
33950
+ @if (showRenderSettings) {
33951
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
33952
+ }
33953
+ </p>
33954
+ <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
33955
+ [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
33937
33956
  </div>
33938
- }
33939
- @if (showCullingErrorDialog) {
33940
- <div class="render-warning">
33941
- <div class="render-warming-header">
33942
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
33943
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
33944
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
33945
- </div>
33946
- </div>
33947
- <div class="render-warning-body">
33948
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
33949
- </div>
33950
- <div class="render-warning-footer">
33951
- <button
33952
- class="render-popup-button cancel-button"
33953
- (click)="showCullingErrorDialog = false">
33954
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
33955
- {{ 'CLOSE' | localize }}
33956
- </button>
33957
+ @if (showRenderSettings) {
33958
+ <div class="advanced-render-settings">
33959
+ <div class="setting-part-container">
33960
+ <mat-form-field
33961
+ class="face-select-form"
33962
+ >
33963
+ <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
33964
+ <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
33965
+ @for (scene of sceneList; track scene) {
33966
+ <mat-option
33967
+ [value]="scene">{{ scene.name }}
33968
+ </mat-option>
33969
+ }
33970
+ </mat-select>
33971
+ </mat-form-field>
33957
33972
  </div>
33958
- </div>
33973
+
33974
+ <co-input-slider
33975
+ [label]="'ENVIRONMENT_LIGHT' | localize"
33976
+ [min]="1"
33977
+ [max]="20"
33978
+ [(value)]="hdriIntensity">
33979
+ </co-input-slider>
33980
+
33981
+ <co-input-slider
33982
+ [label]="'ROTATION' | localize"
33983
+ [min]="1"
33984
+ [max]="360"
33985
+ [(value)]="hdriRotation">
33986
+ </co-input-slider>
33987
+
33988
+ <co-input-slider
33989
+ [label]="'LIGHTS' | localize"
33990
+ [min]="1"
33991
+ [max]="10"
33992
+ [(value)]="lightingExposure">
33993
+ </co-input-slider>
33994
+ </div>
33995
+ }
33996
+ </div>
33959
33997
  }
33960
- <button
33961
- #renderButton
33962
- mat-raised-button
33963
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
33964
- [id]="'standalone_render_picture'"
33965
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
33966
- (click)="showRenderForm($event)">
33967
- <mat-icon class="icon homedecorator-material-icons"
33968
- aria-hidden="true">{{ 'photo_camera' }}
33969
- </mat-icon>
33970
- </button>
33971
- </div>
33972
- `, 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$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i3$2.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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.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: i13.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.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i4$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" }] }); }
33998
+ <div class="render-popup-dropdown">
33999
+ <mat-form-field class="face-select-form">
34000
+ <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34001
+ <mat-select [(value)]="selectedImageSize">
34002
+ @for (size of imageSizes; track size) {
34003
+ <mat-option [value]="size">{{ size.name }} {{ size.width }}
34004
+ x{{ size.height }}
34005
+ </mat-option>
34006
+ }
34007
+ </mat-select>
34008
+ </mat-form-field>
34009
+ </div>
34010
+ <div class="render-popup-button-container">
34011
+ <button class="render-popup-button photo-button"
34012
+ (click)="createBlenderRender()"
34013
+ title="{{'MAKE_A_PICTURE' | localize}}"
34014
+ [disabled]="disablePictureButton">
34015
+ <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34016
+ {{ 'MAKE_A_PICTURE' | localize }}
34017
+ </button>
34018
+ <button
34019
+ class="render-popup-button cancel-button"
34020
+ (click)="resetBlenderRenderScene()">
34021
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34022
+ {{ 'CLOSE_PHOTO_MODE' | localize }}
34023
+ </button>
34024
+ </div>
34025
+ </div>
34026
+ }
34027
+ @if (showCullingErrorDialog) {
34028
+ <div class="render-warning">
34029
+ <div class="render-warming-header">
34030
+ <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34031
+ <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34032
+ <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34033
+ </div>
34034
+ </div>
34035
+ <div class="render-warning-body">
34036
+ <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34037
+ </div>
34038
+ <div class="render-warning-footer">
34039
+ <button
34040
+ class="render-popup-button cancel-button"
34041
+ (click)="showCullingErrorDialog = false">
34042
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34043
+ {{ 'CLOSE' | localize }}
34044
+ </button>
34045
+ </div>
34046
+ </div>
34047
+ }
34048
+ <button
34049
+ #renderButton
34050
+ mat-raised-button
34051
+ matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34052
+ [id]="'standalone_render_picture'"
34053
+ [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34054
+ (click)="showRenderForm($event)">
34055
+ <mat-icon class="icon homedecorator-material-icons"
34056
+ aria-hidden="true">{{ 'photo_camera' }}
34057
+ </mat-icon>
34058
+ </button>
34059
+ </div>
34060
+ `, 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$1.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: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.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: i13.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.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" }] }); }
33973
34061
  }
33974
34062
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, decorators: [{
33975
34063
  type: Component,
33976
34064
  args: [{ selector: 'rp-render-controls', template: `
33977
- <div class="render-container">
33978
- @if (startUploading) {
33979
- <rp-render-progress></rp-render-progress>
33980
- }
33981
- <!-- the Yellow render indicators -->
33982
- @if (inPictureMode) {
33983
- <div class="render-indicators">
33984
- <div class="render-indicator-top-left"></div>
33985
- <div class="render-indicator-top-right"></div>
33986
- <div class="render-indicator-bottom-left"></div>
33987
- <div class="render-indicator-bottom-right"></div>
34065
+ <div class="render-container">
34066
+ @if (startUploading) {
34067
+ <rp-render-progress></rp-render-progress>
34068
+ }
34069
+ <!-- the Yellow render indicators -->
34070
+ @if (inPictureMode) {
34071
+ <div class="render-indicators">
34072
+ <div class="render-indicator-top-left"></div>
34073
+ <div class="render-indicator-top-right"></div>
34074
+ <div class="render-indicator-bottom-left"></div>
34075
+ <div class="render-indicator-bottom-right"></div>
34076
+ </div>
34077
+ <div class="render-popup-container">
34078
+ <div class="render-popup-header">
34079
+ <h3>
34080
+ <span>{{ 'PICTURE_MODE' | localize }}</span>
34081
+ @if (hasError) {
34082
+ <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
34083
+ [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
34084
+ }
34085
+ </h3>
34086
+ <button
34087
+ class="close-popup-container"
34088
+ (click)="resetBlenderRenderScene()">
34089
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34090
+ </button>
34091
+ </div>
34092
+ <div class="render-popup-preview">
34093
+ @if (blenderPreviewRender) {
34094
+ <img [src]="blenderPreviewRender" alt="">
34095
+ }
34096
+ @if (!blenderPreviewRender) {
34097
+ <div class="render-popup-preview-placeholder">
34098
+ <span>{{ 'PREVIEW' | localize }}</span>
33988
34099
  </div>
33989
- <div class="render-popup-container">
33990
- <div class="render-popup-header">
33991
- <h3>
33992
- <span>{{ 'PICTURE_MODE' | localize }}</span>
33993
- @if (hasError) {
33994
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
33995
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
33996
- }
33997
- </h3>
33998
- <button
33999
- class="close-popup-container"
34000
- (click)="resetBlenderRenderScene()">
34001
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
34002
- </button>
34003
- </div>
34004
- <div class="render-popup-preview">
34005
- @if (blenderPreviewRender) {
34006
- <img [src]="blenderPreviewRender" alt="">
34007
- }
34008
- @if (!blenderPreviewRender) {
34009
- <div class="render-popup-preview-placeholder">
34010
- <span>{{ 'PREVIEW' | localize }}</span>
34011
- </div>
34012
- }
34013
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34014
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34015
- </button>
34016
- </div>
34017
- @if (renderService.blendFilesRender) {
34018
- <div class="render-popup-dropdown">
34019
- <div class="toggleable" (click)="toggleRenderSettings()">
34020
- <p>
34021
- @if (!showRenderSettings) {
34022
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34023
- }
34024
- @if (showRenderSettings) {
34025
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34026
- }
34027
- </p>
34028
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34029
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34030
- </div>
34031
- @if (showRenderSettings) {
34032
- <div class="advanced-render-settings">
34033
- <div class="setting-part-container">
34034
- <mat-form-field
34035
- class="face-select-form"
34036
- >
34037
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34038
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34039
- @for (scene of sceneList; track scene) {
34040
- <mat-option
34041
- [value]="scene">{{ scene.name }}
34042
- </mat-option>
34043
- }
34044
- </mat-select>
34045
- </mat-form-field>
34046
- </div>
34047
- <div class="setting-part-container">
34048
- <mat-form-field class="third-width">
34049
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34050
- <input
34051
- [type]="'number'"
34052
- matInput
34053
- [(ngModel)]="hdriIntensity"
34054
- (ngModelChange)="hdriIntensity = +$event">
34055
- </mat-form-field>
34056
- <div class="setting-part-buttons">
34057
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34058
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34059
- </button>
34060
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34061
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34062
- </button>
34063
- </div>
34064
- <div class="setting-part-slider">
34065
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34066
- </div>
34067
- </div>
34068
- <div class="setting-part-container">
34069
- <mat-form-field class="third-width">
34070
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34071
- <input
34072
- [type]="'number'"
34073
- matInput
34074
- [(ngModel)]="hdriRotation"
34075
- (ngModelChange)="hdriRotation = +$event">
34076
- </mat-form-field>
34077
- <div class="setting-part-buttons">
34078
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34079
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34080
- </button>
34081
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34082
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34083
- </button>
34084
- </div>
34085
- <div class="setting-part-slider">
34086
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34087
- </div>
34088
- </div>
34089
- <div class="setting-part-container">
34090
- <mat-form-field class="third-width">
34091
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34092
- <input
34093
- [type]="'number'"
34094
- matInput
34095
- [(ngModel)]="lightingExposure"
34096
- (ngModelChange)="lightingExposure = +$event">
34097
- </mat-form-field>
34098
- <div class="setting-part-buttons">
34099
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34100
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34101
- </button>
34102
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34103
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34104
- </button>
34105
- </div>
34106
- <div class="setting-part-slider">
34107
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34108
- </div>
34109
- </div>
34110
- </div>
34111
- }
34112
- </div>
34100
+ }
34101
+ <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34102
+ <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34103
+ </button>
34104
+ </div>
34105
+ @if (renderService.blendFilesRender) {
34106
+ <div class="render-popup-dropdown">
34107
+ <div class="toggleable" (click)="toggleRenderSettings()">
34108
+ <p>
34109
+ @if (!showRenderSettings) {
34110
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34113
34111
  }
34114
- <div class="render-popup-dropdown">
34115
- <mat-form-field class="face-select-form">
34116
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34117
- <mat-select [(value)]="selectedImageSize">
34118
- @for (size of imageSizes; track size) {
34119
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34120
- x{{ size.height }}
34121
- </mat-option>
34122
- }
34123
- </mat-select>
34124
- </mat-form-field>
34125
- </div>
34126
- <div class="render-popup-button-container">
34127
- <button class="render-popup-button photo-button"
34128
- (click)="createBlenderRender()"
34129
- title="{{'MAKE_A_PICTURE' | localize}}"
34130
- [disabled]="disablePictureButton">
34131
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34132
- {{ 'MAKE_A_PICTURE' | localize }}
34133
- </button>
34134
- <button
34135
- class="render-popup-button cancel-button"
34136
- (click)="resetBlenderRenderScene()">
34137
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34138
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34139
- </button>
34140
- </div>
34112
+ @if (showRenderSettings) {
34113
+ <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34114
+ }
34115
+ </p>
34116
+ <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34117
+ [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34141
34118
  </div>
34142
- }
34143
- @if (showCullingErrorDialog) {
34144
- <div class="render-warning">
34145
- <div class="render-warming-header">
34146
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34147
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34148
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34149
- </div>
34150
- </div>
34151
- <div class="render-warning-body">
34152
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34153
- </div>
34154
- <div class="render-warning-footer">
34155
- <button
34156
- class="render-popup-button cancel-button"
34157
- (click)="showCullingErrorDialog = false">
34158
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34159
- {{ 'CLOSE' | localize }}
34160
- </button>
34119
+ @if (showRenderSettings) {
34120
+ <div class="advanced-render-settings">
34121
+ <div class="setting-part-container">
34122
+ <mat-form-field
34123
+ class="face-select-form"
34124
+ >
34125
+ <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34126
+ <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34127
+ @for (scene of sceneList; track scene) {
34128
+ <mat-option
34129
+ [value]="scene">{{ scene.name }}
34130
+ </mat-option>
34131
+ }
34132
+ </mat-select>
34133
+ </mat-form-field>
34161
34134
  </div>
34162
- </div>
34135
+
34136
+ <co-input-slider
34137
+ [label]="'ENVIRONMENT_LIGHT' | localize"
34138
+ [min]="1"
34139
+ [max]="20"
34140
+ [(value)]="hdriIntensity">
34141
+ </co-input-slider>
34142
+
34143
+ <co-input-slider
34144
+ [label]="'ROTATION' | localize"
34145
+ [min]="1"
34146
+ [max]="360"
34147
+ [(value)]="hdriRotation">
34148
+ </co-input-slider>
34149
+
34150
+ <co-input-slider
34151
+ [label]="'LIGHTS' | localize"
34152
+ [min]="1"
34153
+ [max]="10"
34154
+ [(value)]="lightingExposure">
34155
+ </co-input-slider>
34156
+ </div>
34157
+ }
34158
+ </div>
34163
34159
  }
34164
- <button
34165
- #renderButton
34166
- mat-raised-button
34167
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34168
- [id]="'standalone_render_picture'"
34169
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34170
- (click)="showRenderForm($event)">
34171
- <mat-icon class="icon homedecorator-material-icons"
34172
- aria-hidden="true">{{ 'photo_camera' }}
34173
- </mat-icon>
34174
- </button>
34175
- </div>
34176
- `, 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"] }]
34160
+ <div class="render-popup-dropdown">
34161
+ <mat-form-field class="face-select-form">
34162
+ <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34163
+ <mat-select [(value)]="selectedImageSize">
34164
+ @for (size of imageSizes; track size) {
34165
+ <mat-option [value]="size">{{ size.name }} {{ size.width }}
34166
+ x{{ size.height }}
34167
+ </mat-option>
34168
+ }
34169
+ </mat-select>
34170
+ </mat-form-field>
34171
+ </div>
34172
+ <div class="render-popup-button-container">
34173
+ <button class="render-popup-button photo-button"
34174
+ (click)="createBlenderRender()"
34175
+ title="{{'MAKE_A_PICTURE' | localize}}"
34176
+ [disabled]="disablePictureButton">
34177
+ <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34178
+ {{ 'MAKE_A_PICTURE' | localize }}
34179
+ </button>
34180
+ <button
34181
+ class="render-popup-button cancel-button"
34182
+ (click)="resetBlenderRenderScene()">
34183
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34184
+ {{ 'CLOSE_PHOTO_MODE' | localize }}
34185
+ </button>
34186
+ </div>
34187
+ </div>
34188
+ }
34189
+ @if (showCullingErrorDialog) {
34190
+ <div class="render-warning">
34191
+ <div class="render-warming-header">
34192
+ <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34193
+ <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34194
+ <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34195
+ </div>
34196
+ </div>
34197
+ <div class="render-warning-body">
34198
+ <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34199
+ </div>
34200
+ <div class="render-warning-footer">
34201
+ <button
34202
+ class="render-popup-button cancel-button"
34203
+ (click)="showCullingErrorDialog = false">
34204
+ <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34205
+ {{ 'CLOSE' | localize }}
34206
+ </button>
34207
+ </div>
34208
+ </div>
34209
+ }
34210
+ <button
34211
+ #renderButton
34212
+ mat-raised-button
34213
+ matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34214
+ [id]="'standalone_render_picture'"
34215
+ [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34216
+ (click)="showRenderForm($event)">
34217
+ <mat-icon class="icon homedecorator-material-icons"
34218
+ aria-hidden="true">{{ 'photo_camera' }}
34219
+ </mat-icon>
34220
+ </button>
34221
+ </div>
34222
+ `, 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"] }]
34177
34223
  }], 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: [{
34178
34224
  type: ViewChild,
34179
34225
  args: ['renderButton']
@@ -50025,6 +50071,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50025
50071
  }]
50026
50072
  }] });
50027
50073
 
50074
+ class InputSliderModule {
50075
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50076
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, declarations: [InputSliderComponent], imports: [FormsModule,
50077
+ IconModule,
50078
+ InputTextModule,
50079
+ InputNumberPickerModule], exports: [InputSliderComponent] }); }
50080
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, imports: [FormsModule,
50081
+ IconModule,
50082
+ InputTextModule,
50083
+ InputNumberPickerModule] }); }
50084
+ }
50085
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InputSliderModule, decorators: [{
50086
+ type: NgModule,
50087
+ args: [{
50088
+ imports: [
50089
+ FormsModule,
50090
+ IconModule,
50091
+ InputTextModule,
50092
+ InputNumberPickerModule
50093
+ ],
50094
+ exports: [
50095
+ InputSliderComponent
50096
+ ],
50097
+ declarations: [
50098
+ InputSliderComponent
50099
+ ]
50100
+ }]
50101
+ }] });
50102
+
50028
50103
  class RenderModule {
50029
50104
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50030
50105
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, declarations: [RenderControlsComponent,
@@ -50043,7 +50118,8 @@ class RenderModule {
50043
50118
  IconModule,
50044
50119
  MatSliderModule,
50045
50120
  TooltipDirectiveModule,
50046
- ProgressBarModule], exports: [RenderControlsComponent,
50121
+ ProgressBarModule,
50122
+ InputSliderModule], exports: [RenderControlsComponent,
50047
50123
  RenderProgressComponent] }); }
50048
50124
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, providers: [
50049
50125
  HomedecoratorIconCacheService
@@ -50062,7 +50138,8 @@ class RenderModule {
50062
50138
  IconModule,
50063
50139
  MatSliderModule,
50064
50140
  TooltipDirectiveModule,
50065
- ProgressBarModule] }); }
50141
+ ProgressBarModule,
50142
+ InputSliderModule] }); }
50066
50143
  }
50067
50144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, decorators: [{
50068
50145
  type: NgModule,
@@ -50083,7 +50160,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50083
50160
  IconModule,
50084
50161
  MatSliderModule,
50085
50162
  TooltipDirectiveModule,
50086
- ProgressBarModule
50163
+ ProgressBarModule,
50164
+ InputSliderModule
50087
50165
  ],
50088
50166
  declarations: [
50089
50167
  RenderControlsComponent,