@colijnit/homedecorator 261.20.5 → 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';
@@ -43,9 +43,7 @@ import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerM
43
43
  import { RGBFormat, LinearToneMapping, AgXToneMapping, LinearFilter as LinearFilter$1, LinearSRGBColorSpace as LinearSRGBColorSpace$1, SrcAlphaSaturateFactor, FloatType as FloatType$1 } from 'three/src/constants.js';
44
44
  import md5 from 'md5';
45
45
  import { NodeType } from '@colijnit/configuratorapi/build/enum/node-type.enum';
46
- import { ConfiguratorStatisticsEnvironment } from '@colijnit/configuratorapi/build/model/configurator-statistics-environment';
47
46
  import { Options } from '@colijnit/ioneconnector/build/model/options';
48
- import { FrozenArticle } from '@colijnit/configuratorapi/build/model/frozen-article';
49
47
  import { SelectorWithOptions } from '@colijnit/configuratorapi/build/model/selector-with-options';
50
48
  import { ImageUtils } from '@colijnit/configuratorapi/build/utils/image-utils';
51
49
  import * as i1 from '@angular/common/http';
@@ -106,7 +104,7 @@ import { trigger, state, style, transition, animate, query, animateChild } from
106
104
  import * as i2$2 from '@angular/common';
107
105
  import { CommonModule } from '@angular/common';
108
106
  import * as i5 from '@colijnit/corecomponents_v12';
109
- 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';
110
108
  import * as i2$3 from '@angular/material/form-field';
111
109
  import { MatFormFieldModule } from '@angular/material/form-field';
112
110
  import * as i13 from '@angular/material/select';
@@ -115,11 +113,11 @@ import * as i4$1 from '@angular/material/tooltip';
115
113
  import { MatTooltipModule } from '@angular/material/tooltip';
116
114
  import * as i1$4 from 'ngx-color/sketch';
117
115
  import { ColorSketchModule } from 'ngx-color/sketch';
116
+ import * as dat from 'dat.gui';
118
117
  import * as i3$2 from '@angular/material/input';
119
118
  import { MatInputModule } from '@angular/material/input';
120
119
  import * as i4$2 from '@angular/material/slider';
121
120
  import { MatSliderModule } from '@angular/material/slider';
122
- import * as dat from 'dat.gui';
123
121
  import * as i6 from '@angular/flex-layout/flex';
124
122
  import * as i2$4 from '@angular/material/progress-bar';
125
123
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -3986,6 +3984,18 @@ class HomedecoratorConnectorAdapterService {
3986
3984
  // public getJsonMatchTableArticles(): Promise<void> {
3987
3985
  // return this.connector.getJsonMatchTableArticles();
3988
3986
  // }
3987
+ async prepareArticleForCart(goodId, quantity = 1, shouldGetArticleTree = false, showLoader = true, instanceId = undefined) {
3988
+ const response = await this.articleApi.prepareArticleForCart('Homedecorator', 'Sales', 'Homedecorator', goodId, shouldGetArticleTree, quantity, instanceId, showLoader);
3989
+ if (response && response.validationResult && response.validationResult.success) {
3990
+ if (typeof response.resultObject !== 'string') {
3991
+ return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
3992
+ }
3993
+ return response.resultObject;
3994
+ }
3995
+ else {
3996
+ return null;
3997
+ }
3998
+ }
3989
3999
  async setInstanceToConfigure(id) {
3990
4000
  try {
3991
4001
  if (id !== null) {
@@ -6843,8 +6853,8 @@ class HomedecoratorConnectorService {
6843
6853
  googleTranslateEnabled() {
6844
6854
  return this._connector.googleTranslateEnabled();
6845
6855
  }
6846
- getJsonConfiguredArticles(goodId, goodType, quantity, externalSource = false, showLoader = true, instanceId, configuratorStatistics) {
6847
- return this._connector.getJsonConfiguredArticles(goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics);
6856
+ prepareArticleForCart(goodId, quantity, externalSource = false, showLoader = true, instanceId) {
6857
+ return this._connector.prepareArticleForCart(goodId, quantity, !!externalSource, showLoader, instanceId);
6848
6858
  }
6849
6859
  // public getJsonMatchTableArticles(): Promise<any> {
6850
6860
  // return this._connector.getJsonMatchTableArticles();
@@ -7163,23 +7173,21 @@ class HomedecoratorConnectorService {
7163
7173
  });
7164
7174
  }
7165
7175
  async addToCart(goodId, goodType, quantity, instanceId, externalSource) {
7166
- let json;
7167
- const statistics = new ConfiguratorStatisticsEnvironment();
7168
- statistics.userType = 'Homedecorator';
7169
- statistics.transactionType = 'Sales';
7170
- statistics.actionDomain = 'Homedecorator';
7171
- statistics.sessionId = this._settingsService.settings.session ? this._settingsService.settings.session.sessionId : 'unknown';
7172
- statistics.webHost = window.location.host;
7173
- statistics.bundleHost = window.location.host;
7174
- json = await this.getJsonConfiguredArticles(goodId, goodType, quantity, externalSource, true, instanceId, statistics);
7175
- const frozenArticle = JSON.parse(json);
7176
+ const response = await this.prepareArticleForCart(goodId, quantity, externalSource, true, instanceId);
7177
+ let article;
7178
+ if (typeof response === 'string') {
7179
+ article = JSON.parse(response);
7180
+ }
7181
+ else {
7182
+ article = response;
7183
+ }
7176
7184
  this._googleTagManager.sendEvent(GoogleTagManagerEvent.AddToCart, {
7177
- 'articleNr': frozenArticle.articleNr,
7178
- 'product': frozenArticle.articleName,
7179
- 'composition': frozenArticle instanceof FrozenArticle ? frozenArticle.compositions : frozenArticle.configurationText
7185
+ 'articleNr': article.selectorData ? article.selectorData.articleNr : article.articleNr,
7186
+ 'product': article.selectorData ? article.selectorData.articleName : article.name,
7187
+ 'composition': article.selectorData ? article.selectorData.configurationText : article.configuration
7180
7188
  });
7181
- this._messageService.emit(MessageType.ArticleCreated, json);
7182
- return json;
7189
+ this._messageService.emit(MessageType.ArticleCreated, article);
7190
+ return article;
7183
7191
  }
7184
7192
  handleAnswersReceived() {
7185
7193
  this._preloadCachedImages(this.activeAnswers);
@@ -24734,8 +24742,8 @@ class FloorTileIntersectionService {
24734
24742
  floorHits: new Array(),
24735
24743
  edgeHits: new Array()
24736
24744
  };
24737
- const bvhLeft = new MeshBVH(geometryLeft);
24738
- 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;
24739
24747
  const positionReference = new Object3D();
24740
24748
  for (const floorItem of floorPattern) {
24741
24749
  const bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
@@ -29087,7 +29095,15 @@ class RenderService {
29087
29095
  };
29088
29096
  }
29089
29097
  }
29090
- _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
+ }
29091
29107
  // Get the asset information from the BlenderRenderSettings
29092
29108
  let renderScenes = [];
29093
29109
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
@@ -29117,16 +29133,18 @@ class RenderService {
29117
29133
  compositeScene.sceneAssetId = renderScene.primarySceneName;
29118
29134
  compositeScene.activeCameraId = 1;
29119
29135
  compositeScene.default = true;
29120
- compositeScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29121
- 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;
29122
29139
  compositeScene.id = 600;
29123
29140
  if (renderScene.multiSceneRender) {
29124
29141
  const additionalScene = new SceneSettings();
29125
29142
  additionalScene.sceneAssetId = renderScene.secondarySceneName;
29126
29143
  additionalScene.activeCameraId = 1;
29127
29144
  additionalScene.default = false;
29128
- additionalScene.hdriRotation = this._apiServiceModule.degreesToVector3(renderScene.hdriRotation);
29129
- 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;
29130
29148
  additionalScene.id = 601;
29131
29149
  scenes = [compositeScene, additionalScene];
29132
29150
  }
@@ -29141,7 +29159,7 @@ class RenderService {
29141
29159
  }
29142
29160
  _getDataForRoomRender(settings) {
29143
29161
  this._cameraService.camera.updateMatrixWorld(true);
29144
- const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29162
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name, settings);
29145
29163
  const options = {
29146
29164
  width: settings.width,
29147
29165
  height: settings.height,
@@ -33448,6 +33466,126 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
33448
33466
  class BlenderRenderSettings {
33449
33467
  }
33450
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
+
33451
33589
  // A pipe for appending strings to other strings in view templates.
33452
33590
  class AppendPipe {
33453
33591
  transform(value, append) {
@@ -33762,410 +33900,326 @@ class RenderControlsComponent {
33762
33900
  }
33763
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 }); }
33764
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: `
33765
- <div class="render-container">
33766
- @if (startUploading) {
33767
- <rp-render-progress></rp-render-progress>
33768
- }
33769
- <!-- the Yellow render indicators -->
33770
- @if (inPictureMode) {
33771
- <div class="render-indicators">
33772
- <div class="render-indicator-top-left"></div>
33773
- <div class="render-indicator-top-right"></div>
33774
- <div class="render-indicator-bottom-left"></div>
33775
- <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>
33776
33937
  </div>
33777
- <div class="render-popup-container">
33778
- <div class="render-popup-header">
33779
- <h3>
33780
- <span>{{ 'PICTURE_MODE' | localize }}</span>
33781
- @if (hasError) {
33782
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
33783
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
33784
- }
33785
- </h3>
33786
- <button
33787
- class="close-popup-container"
33788
- (click)="resetBlenderRenderScene()">
33789
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
33790
- </button>
33791
- </div>
33792
- <div class="render-popup-preview">
33793
- @if (blenderPreviewRender) {
33794
- <img [src]="blenderPreviewRender" alt="">
33795
- }
33796
- @if (!blenderPreviewRender) {
33797
- <div class="render-popup-preview-placeholder">
33798
- <span>{{ 'PREVIEW' | localize }}</span>
33799
- </div>
33800
- }
33801
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
33802
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
33803
- </button>
33804
- </div>
33805
- @if (renderService.blendFilesRender) {
33806
- <div class="render-popup-dropdown">
33807
- <div class="toggleable" (click)="toggleRenderSettings()">
33808
- <p>
33809
- @if (!showRenderSettings) {
33810
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
33811
- }
33812
- @if (showRenderSettings) {
33813
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
33814
- }
33815
- </p>
33816
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
33817
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
33818
- </div>
33819
- @if (showRenderSettings) {
33820
- <div class="advanced-render-settings">
33821
- <div class="setting-part-container">
33822
- <mat-form-field
33823
- class="face-select-form"
33824
- >
33825
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
33826
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
33827
- @for (scene of sceneList; track scene) {
33828
- <mat-option
33829
- [value]="scene">{{ scene.name }}
33830
- </mat-option>
33831
- }
33832
- </mat-select>
33833
- </mat-form-field>
33834
- </div>
33835
- <div class="setting-part-container">
33836
- <mat-form-field class="third-width">
33837
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
33838
- <input
33839
- [type]="'number'"
33840
- matInput
33841
- [(ngModel)]="hdriIntensity"
33842
- (ngModelChange)="hdriIntensity = +$event">
33843
- </mat-form-field>
33844
- <div class="setting-part-buttons">
33845
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
33846
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33847
- </button>
33848
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
33849
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33850
- </button>
33851
- </div>
33852
- <div class="setting-part-slider">
33853
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
33854
- </div>
33855
- </div>
33856
- <div class="setting-part-container">
33857
- <mat-form-field class="third-width">
33858
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
33859
- <input
33860
- [type]="'number'"
33861
- matInput
33862
- [(ngModel)]="hdriRotation"
33863
- (ngModelChange)="hdriRotation = +$event">
33864
- </mat-form-field>
33865
- <div class="setting-part-buttons">
33866
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
33867
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33868
- </button>
33869
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
33870
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33871
- </button>
33872
- </div>
33873
- <div class="setting-part-slider">
33874
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
33875
- </div>
33876
- </div>
33877
- <div class="setting-part-container">
33878
- <mat-form-field class="third-width">
33879
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
33880
- <input
33881
- [type]="'number'"
33882
- matInput
33883
- [(ngModel)]="lightingExposure"
33884
- (ngModelChange)="lightingExposure = +$event">
33885
- </mat-form-field>
33886
- <div class="setting-part-buttons">
33887
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
33888
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
33889
- </button>
33890
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
33891
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
33892
- </button>
33893
- </div>
33894
- <div class="setting-part-slider">
33895
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
33896
- </div>
33897
- </div>
33898
- </div>
33899
- }
33900
- </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>
33901
33949
  }
33902
- <div class="render-popup-dropdown">
33903
- <mat-form-field class="face-select-form">
33904
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
33905
- <mat-select [(value)]="selectedImageSize">
33906
- @for (size of imageSizes; track size) {
33907
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
33908
- x{{ size.height }}
33909
- </mat-option>
33910
- }
33911
- </mat-select>
33912
- </mat-form-field>
33913
- </div>
33914
- <div class="render-popup-button-container">
33915
- <button class="render-popup-button photo-button"
33916
- (click)="createBlenderRender()"
33917
- title="{{'MAKE_A_PICTURE' | localize}}"
33918
- [disabled]="disablePictureButton">
33919
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
33920
- {{ 'MAKE_A_PICTURE' | localize }}
33921
- </button>
33922
- <button
33923
- class="render-popup-button cancel-button"
33924
- (click)="resetBlenderRenderScene()">
33925
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
33926
- {{ 'CLOSE_PHOTO_MODE' | localize }}
33927
- </button>
33928
- </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>
33929
33956
  </div>
33930
- }
33931
- @if (showCullingErrorDialog) {
33932
- <div class="render-warning">
33933
- <div class="render-warming-header">
33934
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
33935
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
33936
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
33937
- </div>
33938
- </div>
33939
- <div class="render-warning-body">
33940
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
33941
- </div>
33942
- <div class="render-warning-footer">
33943
- <button
33944
- class="render-popup-button cancel-button"
33945
- (click)="showCullingErrorDialog = false">
33946
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
33947
- {{ 'CLOSE' | localize }}
33948
- </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>
33949
33972
  </div>
33950
- </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>
33951
33997
  }
33952
- <button
33953
- #renderButton
33954
- mat-raised-button
33955
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
33956
- [id]="'standalone_render_picture'"
33957
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
33958
- (click)="showRenderForm($event)">
33959
- <mat-icon class="icon homedecorator-material-icons"
33960
- aria-hidden="true">{{ 'photo_camera' }}
33961
- </mat-icon>
33962
- </button>
33963
- </div>
33964
- `, 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" }] }); }
33965
34061
  }
33966
34062
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderControlsComponent, decorators: [{
33967
34063
  type: Component,
33968
34064
  args: [{ selector: 'rp-render-controls', template: `
33969
- <div class="render-container">
33970
- @if (startUploading) {
33971
- <rp-render-progress></rp-render-progress>
33972
- }
33973
- <!-- the Yellow render indicators -->
33974
- @if (inPictureMode) {
33975
- <div class="render-indicators">
33976
- <div class="render-indicator-top-left"></div>
33977
- <div class="render-indicator-top-right"></div>
33978
- <div class="render-indicator-bottom-left"></div>
33979
- <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>
33980
34099
  </div>
33981
- <div class="render-popup-container">
33982
- <div class="render-popup-header">
33983
- <h3>
33984
- <span>{{ 'PICTURE_MODE' | localize }}</span>
33985
- @if (hasError) {
33986
- <co-icon class="renderErrorIcon" [iconData]="iconService.getIcon(icons.TriangleExclamation)"
33987
- [matTooltip]="'BLENDER_RENDER_ERROR' | localize"></co-icon>
33988
- }
33989
- </h3>
33990
- <button
33991
- class="close-popup-container"
33992
- (click)="resetBlenderRenderScene()">
33993
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
33994
- </button>
33995
- </div>
33996
- <div class="render-popup-preview">
33997
- @if (blenderPreviewRender) {
33998
- <img [src]="blenderPreviewRender" alt="">
33999
- }
34000
- @if (!blenderPreviewRender) {
34001
- <div class="render-popup-preview-placeholder">
34002
- <span>{{ 'PREVIEW' | localize }}</span>
34003
- </div>
34004
- }
34005
- <button class="render-popup-refresh-preview" (click)="createBlenderRender(true)">
34006
- <co-icon [iconData]="iconService.getIcon(icons.RetryButton)"></co-icon>
34007
- </button>
34008
- </div>
34009
- @if (renderService.blendFilesRender) {
34010
- <div class="render-popup-dropdown">
34011
- <div class="toggleable" (click)="toggleRenderSettings()">
34012
- <p>
34013
- @if (!showRenderSettings) {
34014
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_SHOW' | localize"></span>
34015
- }
34016
- @if (showRenderSettings) {
34017
- <span [textContent]="'RENDER_ADVANCED_SETTINGS_HIDE' | localize"></span>
34018
- }
34019
- </p>
34020
- <co-icon [ngClass]="{'icon-rotate': showRenderSettings}"
34021
- [iconData]="iconService.getIcon(icons.ArrowPointDown)"></co-icon>
34022
- </div>
34023
- @if (showRenderSettings) {
34024
- <div class="advanced-render-settings">
34025
- <div class="setting-part-container">
34026
- <mat-form-field
34027
- class="face-select-form"
34028
- >
34029
- <mat-label>{{ "ENVIRONMENT" | localize }}</mat-label>
34030
- <mat-select [(ngModel)]="selectedRenderScene" (selectionChange)="updateBlenderSceneSettings($event)">
34031
- @for (scene of sceneList; track scene) {
34032
- <mat-option
34033
- [value]="scene">{{ scene.name }}
34034
- </mat-option>
34035
- }
34036
- </mat-select>
34037
- </mat-form-field>
34038
- </div>
34039
- <div class="setting-part-container">
34040
- <mat-form-field class="third-width">
34041
- <mat-label [textContent]="'ENVIRONMENT_LIGHT' | localize"></mat-label>
34042
- <input
34043
- [type]="'number'"
34044
- matInput
34045
- [(ngModel)]="hdriIntensity"
34046
- (ngModelChange)="hdriIntensity = +$event">
34047
- </mat-form-field>
34048
- <div class="setting-part-buttons">
34049
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity - 1">
34050
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34051
- </button>
34052
- <button class="amount-button" (click)="hdriIntensity = +hdriIntensity + 1">
34053
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34054
- </button>
34055
- </div>
34056
- <div class="setting-part-slider">
34057
- <mat-slider class="value" min="1" max="20" step="1" [(ngModel)]="hdriIntensity"></mat-slider>
34058
- </div>
34059
- </div>
34060
- <div class="setting-part-container">
34061
- <mat-form-field class="third-width">
34062
- <mat-label [textContent]="'ROTATION' | localize"></mat-label>
34063
- <input
34064
- [type]="'number'"
34065
- matInput
34066
- [(ngModel)]="hdriRotation"
34067
- (ngModelChange)="hdriRotation = +$event">
34068
- </mat-form-field>
34069
- <div class="setting-part-buttons">
34070
- <button class="amount-button" (click)="hdriRotation = +hdriRotation - 1">
34071
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34072
- </button>
34073
- <button class="amount-button" (click)="hdriRotation = +hdriRotation + 1">
34074
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34075
- </button>
34076
- </div>
34077
- <div class="setting-part-slider">
34078
- <mat-slider class="value" min="0" max="360" step="1" [(ngModel)]="hdriRotation"></mat-slider>
34079
- </div>
34080
- </div>
34081
- <div class="setting-part-container">
34082
- <mat-form-field class="third-width">
34083
- <mat-label [textContent]="'LIGHTS' | localize"></mat-label>
34084
- <input
34085
- [type]="'number'"
34086
- matInput
34087
- [(ngModel)]="lightingExposure"
34088
- (ngModelChange)="lightingExposure = +$event">
34089
- </mat-form-field>
34090
- <div class="setting-part-buttons">
34091
- <button class="amount-button" (click)="lightingExposure = +lightingExposure - 1">
34092
- <co-icon [iconData]="iconService.getIcon(icons.CircleMinusLight)"></co-icon>
34093
- </button>
34094
- <button class="amount-button" (click)="lightingExposure = +lightingExposure + 1">
34095
- <co-icon [iconData]="iconService.getIcon(icons.CirclePlusLight)"></co-icon>
34096
- </button>
34097
- </div>
34098
- <div class="setting-part-slider">
34099
- <mat-slider class="value" min="1" max="10" step="1" [(ngModel)]="lightingExposure"></mat-slider>
34100
- </div>
34101
- </div>
34102
- </div>
34103
- }
34104
- </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>
34105
34111
  }
34106
- <div class="render-popup-dropdown">
34107
- <mat-form-field class="face-select-form">
34108
- <mat-label>{{ "IMAGE_SIZE" | localize }}</mat-label>
34109
- <mat-select [(value)]="selectedImageSize">
34110
- @for (size of imageSizes; track size) {
34111
- <mat-option [value]="size">{{ size.name }} {{ size.width }}
34112
- x{{ size.height }}
34113
- </mat-option>
34114
- }
34115
- </mat-select>
34116
- </mat-form-field>
34117
- </div>
34118
- <div class="render-popup-button-container">
34119
- <button class="render-popup-button photo-button"
34120
- (click)="createBlenderRender()"
34121
- title="{{'MAKE_A_PICTURE' | localize}}"
34122
- [disabled]="disablePictureButton">
34123
- <co-icon [iconData]="iconService.getIcon(icons.CircleCheck)"></co-icon>
34124
- {{ 'MAKE_A_PICTURE' | localize }}
34125
- </button>
34126
- <button
34127
- class="render-popup-button cancel-button"
34128
- (click)="resetBlenderRenderScene()">
34129
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34130
- {{ 'CLOSE_PHOTO_MODE' | localize }}
34131
- </button>
34132
- </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>
34133
34118
  </div>
34134
- }
34135
- @if (showCullingErrorDialog) {
34136
- <div class="render-warning">
34137
- <div class="render-warming-header">
34138
- <h2>{{ 'BLENDER_RENDER_ERROR_TITLE' | localize }}</h2>
34139
- <div class="render-warning-close" (click)="showCullingErrorDialog = false">
34140
- <mat-icon class="homedecorator-material-icons">cancel</mat-icon>
34141
- </div>
34142
- </div>
34143
- <div class="render-warning-body">
34144
- <p>{{ 'BLENDER_RENDER_WARNING_CULLING' | localize }}</p>
34145
- </div>
34146
- <div class="render-warning-footer">
34147
- <button
34148
- class="render-popup-button cancel-button"
34149
- (click)="showCullingErrorDialog = false">
34150
- <co-icon [iconData]="iconService.getIcon(icons.CircleXmark)"></co-icon>
34151
- {{ 'CLOSE' | localize }}
34152
- </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>
34153
34134
  </div>
34154
- </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>
34155
34159
  }
34156
- <button
34157
- #renderButton
34158
- mat-raised-button
34159
- matTooltip="{{'RENDER_TAKE_A_PICTURE' | localize}}"
34160
- [id]="'standalone_render_picture'"
34161
- [class.active]="viewModeService.viewMode === viewModes.WalkThrough"
34162
- (click)="showRenderForm($event)">
34163
- <mat-icon class="icon homedecorator-material-icons"
34164
- aria-hidden="true">{{ 'photo_camera' }}
34165
- </mat-icon>
34166
- </button>
34167
- </div>
34168
- `, 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"] }]
34169
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: [{
34170
34224
  type: ViewChild,
34171
34225
  args: ['renderButton']
@@ -41693,10 +41747,10 @@ class RoomPlannerComponent {
41693
41747
  if (object.metadata) {
41694
41748
  this.showContextMenu = false;
41695
41749
  await this._connectorAdapterService.initConnector(object.metadata.externalSettings ? object.metadata.externalSettings.settings : this.settingsService.settings, object.metadata.externalSettings ? object.metadata.externalSettings.name : undefined, false, object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ? object.metadata.externalSettings.externalSourceId : null);
41696
- const json = await this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId));
41750
+ const article = await this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId));
41697
41751
  if (object.metadata.externalSettings) {
41698
41752
  const externalSource = {
41699
- article: json,
41753
+ article: article,
41700
41754
  quantity: 1,
41701
41755
  catalogDefinition: object.metadata.externalSettings.catalogDefinition,
41702
41756
  externalSource: this._connectorAdapterService.getExternalSourceFromId(object.metadata.externalSettings.externalSourceId)
@@ -41704,7 +41758,7 @@ class RoomPlannerComponent {
41704
41758
  this._appEventService.addExternalSourceToCart.next(externalSource);
41705
41759
  }
41706
41760
  else {
41707
- this._appEventService.addToCart.next({ article: json, quantity: 1 });
41761
+ this._appEventService.addToCart.next({ article: article, quantity: 1 });
41708
41762
  }
41709
41763
  }
41710
41764
  }
@@ -50017,6 +50071,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50017
50071
  }]
50018
50072
  }] });
50019
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
+
50020
50103
  class RenderModule {
50021
50104
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
50022
50105
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, declarations: [RenderControlsComponent,
@@ -50035,7 +50118,8 @@ class RenderModule {
50035
50118
  IconModule,
50036
50119
  MatSliderModule,
50037
50120
  TooltipDirectiveModule,
50038
- ProgressBarModule], exports: [RenderControlsComponent,
50121
+ ProgressBarModule,
50122
+ InputSliderModule], exports: [RenderControlsComponent,
50039
50123
  RenderProgressComponent] }); }
50040
50124
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, providers: [
50041
50125
  HomedecoratorIconCacheService
@@ -50054,7 +50138,8 @@ class RenderModule {
50054
50138
  IconModule,
50055
50139
  MatSliderModule,
50056
50140
  TooltipDirectiveModule,
50057
- ProgressBarModule] }); }
50141
+ ProgressBarModule,
50142
+ InputSliderModule] }); }
50058
50143
  }
50059
50144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderModule, decorators: [{
50060
50145
  type: NgModule,
@@ -50075,7 +50160,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
50075
50160
  IconModule,
50076
50161
  MatSliderModule,
50077
50162
  TooltipDirectiveModule,
50078
- ProgressBarModule
50163
+ ProgressBarModule,
50164
+ InputSliderModule
50079
50165
  ],
50080
50166
  declarations: [
50081
50167
  RenderControlsComponent,