@colijnit/homedecorator 261.20.2 → 261.20.3

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.
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
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';
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
- import { BehaviorSubject, Subject, Observable, throwError, ReplaySubject, combineLatest, from } from 'rxjs';
5
+ import { BehaviorSubject, Subject, Observable, throwError, ReplaySubject, combineLatest, filter as filter$1, from } from 'rxjs';
6
6
  import * as TWEEN from '@tweenjs/tween.js';
7
7
  import { Selection } from '@colijnit/configuratorapi/build/model/selection';
8
8
  import { HdecoPositioning } from '@colijnit/configuratorapi/build/enum/hdeco-positioning.enum';
@@ -41,7 +41,7 @@ import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js';
41
41
  import { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js';
42
42
  import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory.js';
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
- import * as md5 from 'md5';
44
+ import md5 from 'md5';
45
45
  import { NodeType } from '@colijnit/configuratorapi/build/enum/node-type.enum';
46
46
  import { ConfiguratorStatisticsEnvironment } from '@colijnit/configuratorapi/build/model/configurator-statistics-environment';
47
47
  import { Options } from '@colijnit/ioneconnector/build/model/options';
@@ -100,7 +100,6 @@ import * as i3$1 from '@angular/forms';
100
100
  import { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
101
101
  import * as i4 from '@angular/material/icon';
102
102
  import { MatIconModule } from '@angular/material/icon';
103
- import { HdecoType } from '@colijnit/configuratorapi/build/enum/hdeco-type.enum';
104
103
  import Delaunator from 'delaunator';
105
104
  import { VertexNormalsHelper } from 'three/examples/jsm/helpers/VertexNormalsHelper.js';
106
105
  import { trigger, state, style, transition, animate, query, animateChild } from '@angular/animations';
@@ -11111,7 +11110,7 @@ class Dimensioning {
11111
11110
  }
11112
11111
  }
11113
11112
 
11114
- const minSize = 0.05;
11113
+ const minSize = 0.001;
11115
11114
  const xDirection = new Vector3(1, 0, 0);
11116
11115
  const yDirection$1 = new Vector3(0, 1, 0);
11117
11116
  const zDirection$1 = new Vector3(0, 0, 1);
@@ -12620,7 +12619,10 @@ class PresetsService {
12620
12619
  const json = await this._jsonUtils.readJsonFile(path, false);
12621
12620
  preset.model = JSON.stringify(json);
12622
12621
  }
12623
- const modelObj = JSON.parse(preset.model);
12622
+ let modelObj = JSON.parse(preset.model);
12623
+ if (typeof modelObj === 'string') { // multiple escapes...?
12624
+ modelObj = JSON.parse(modelObj);
12625
+ }
12624
12626
  if (!modelObj.hasOwnProperty('version')) {
12625
12627
  modelObj.version = 1.0;
12626
12628
  }
@@ -13728,6 +13730,10 @@ class FloorService {
13728
13730
  _updateFloorMaterial(floor, floorMaterial, texture) {
13729
13731
  ObjectUtils.DisposeMaterial(floor.getMaterial());
13730
13732
  floor.floorMaterial = floorMaterial;
13733
+ if (texture) {
13734
+ // Update the texture as well
13735
+ floor.floorTexture = texture;
13736
+ }
13731
13737
  this._sceneService.needsRender = true;
13732
13738
  this._sceneService.updatePathTracer();
13733
13739
  }
@@ -19031,8 +19037,7 @@ class UtilsService {
19031
19037
  // Now you can use the `imageData` URL for display or download
19032
19038
  // this._downloadImage(`${object.name}_thumbnail.jpg`, imageData);
19033
19039
  }
19034
- _downloadImage(fileName, imageData) {
19035
- // Create a link and trigger the download
19040
+ downloadImage(fileName, imageData) {
19036
19041
  const link = document.createElement('a');
19037
19042
  link.href = imageData;
19038
19043
  link.download = fileName;
@@ -21079,14 +21084,17 @@ class BoundingBoxMeasurement {
21079
21084
  const widthMesh = createTextWithBackground(width, this._font, this.textSize, this.textColor, this.backgroundColor, this.backgroundOpacity, 1.2, widthText);
21080
21085
  const depthMesh = createTextWithBackground(depth, this._font, this.textSize, this.textColor, this.backgroundColor, this.backgroundOpacity, 1.2, depthText);
21081
21086
  // set positions for the meshes
21082
- heightMesh.position.set(0, 0, 0);
21083
- widthMesh.position.set(0, -0.12, 0);
21084
- depthMesh.position.set(0, -0.24, 0);
21087
+ heightMesh.position.set(0, 0.12, 0);
21088
+ widthMesh.position.set(0, 0, 0);
21089
+ depthMesh.position.set(0, -0.12, 0);
21085
21090
  // Create one new mesh
21086
21091
  const allMeasurementMeshes = new Mesh();
21087
21092
  allMeasurementMeshes.add(heightMesh);
21088
21093
  allMeasurementMeshes.add(widthMesh);
21089
21094
  allMeasurementMeshes.add(depthMesh);
21095
+ const box = new Box3().setFromObject(allMeasurementMeshes);
21096
+ const heightBox = box.max.y - box.min.y;
21097
+ allMeasurementMeshes.children.forEach(c => c.translateY(heightBox / 2));
21090
21098
  allMeasurements.textMesh = allMeasurementMeshes;
21091
21099
  allMeasurements.positions = this._calculateAllMeasurementsPositions();
21092
21100
  return allMeasurements;
@@ -22844,7 +22852,7 @@ class SceneEventService {
22844
22852
  this._messageBusService.emit(MessageType.SaveState, { action: `3D ${action}` });
22845
22853
  }), this._debouncedSaveState.pipe(debounceTime(200)).subscribe(() => {
22846
22854
  this._hudService.updateLabelMeasurements();
22847
- }), this._viewModeService.viewModeChanged.subscribe(mode => this.setExploreMode(mode === ViewMode.WalkThrough)), this._itemGroupService.objectAdded.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.grouped.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.ungrouped.subscribe(() => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.ItemRemoved, () => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.StartGroupObject, () => this._setGroupingMode(true)));
22855
+ }), this._viewModeService.viewModeChanged.subscribe(mode => this.setExploreMode(mode === ViewMode.WalkThrough)), this._itemGroupService.objectAdded.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.grouped.subscribe((object) => this.setSelectedObject(object)), this._itemGroupService.ungrouped.subscribe(() => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.ItemRemoved, () => this.setSelectedObject(null)), this._messageBusService.subscribe(MessageType.StartGroupObject, () => this._setGroupingMode(true)), this._messageBusService.subscribe(MessageType.CancelGroupObject, () => this._setGroupingMode(false)));
22848
22856
  }
22849
22857
  setExploreMode(on = true) {
22850
22858
  if (on) {
@@ -23336,7 +23344,9 @@ class SceneEventService {
23336
23344
  }
23337
23345
  _setGroupingMode(enableGrouping) {
23338
23346
  this._groupingMode = enableGrouping;
23339
- this._addToItemGroup(this._intersectedObject, this._prevSelectedObject);
23347
+ if (this._groupingMode) {
23348
+ this._addToItemGroup(this._intersectedObject, this._prevSelectedObject);
23349
+ }
23340
23350
  }
23341
23351
  _getDraggedData() {
23342
23352
  return this._dragAndDropService.draggedData;
@@ -24823,7 +24833,7 @@ class BuildFurnitureBaseService {
24823
24833
  item.canScaleZ = metadata.canScaleZ;
24824
24834
  item.colorable = metadata.colorable;
24825
24835
  item.canDelete = !this.standAlone;
24826
- item.canCopy = !this.standAlone;
24836
+ item.canCopy = !this.standAlone && !metadata.thirdPartyModel;
24827
24837
  item.allwaysConfigureMode = this.standAlone;
24828
24838
  item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
24829
24839
  item.tempObject = true;
@@ -25457,6 +25467,15 @@ class BuildFurnitureBaseService {
25457
25467
  handleSelectionSelected(chosenOption) {
25458
25468
  this._selectionsSelected.push(chosenOption.opvTreeNodeHierarchy);
25459
25469
  }
25470
+ getActiveFurnitureByUuid(uuid) {
25471
+ const furniture = this.itemService.getFurniture();
25472
+ const len = furniture.length;
25473
+ for (let i = 0; i < len; i++) {
25474
+ if (furniture[i].metadata && furniture[i].metadata.objectUUID === uuid) {
25475
+ return furniture[i];
25476
+ }
25477
+ }
25478
+ }
25460
25479
  getActiveFurniture(instanceId) {
25461
25480
  const configurables = this.itemService.getConfigurables();
25462
25481
  const len = configurables.length;
@@ -26165,41 +26184,34 @@ class BuildFurnitureService extends BuildFurnitureBaseService {
26165
26184
  }
26166
26185
  }
26167
26186
  }
26168
- createSimple3DModel(result, standAlone) {
26169
- if (!isNill(standAlone)) {
26170
- this.standAlone = standAlone;
26187
+ createSimple3DModel(metadata, object) {
26188
+ const existingModel = this.getActiveFurnitureByUuid(metadata.objectUUID);
26189
+ if (existingModel) {
26190
+ return existingModel;
26171
26191
  }
26172
- if (!this.full3DObjectToUse) { // there's no 3d model so get out
26173
- return result;
26174
- }
26175
- // there are no selections or decos for simple articles, so empty lists for integration purposes
26176
- this.iOne.emptySelections();
26177
- this.full3DObjectToUse.children.forEach(c => c.visible = true);
26178
- if (!result.metaData.position) {
26179
- result.metaData.position = this.startPosition || this.defaultPosition;
26192
+ if (!metadata.position) {
26193
+ metadata.position = this.startPosition || this.defaultPosition;
26180
26194
  }
26181
- if (!result.metaData.rotation) {
26182
- result.metaData.rotation = result.metaData.default180 ? this.defaultRotation : new Euler();
26195
+ if (!metadata.rotation) {
26196
+ metadata.rotation = metadata.default180 ? this.defaultRotation : new Euler();
26183
26197
  }
26184
- const itemConstructor = Factory.getClass(this.standAlone ? ItemType.FloorGroup : result.metaData.itemType);
26185
- const item = new itemConstructor(result.metaData, this.full3DObjectToUse, {
26198
+ const itemConstructor = Factory.getClass(metadata.itemType);
26199
+ const item = new itemConstructor(metadata, object, {
26186
26200
  showHideOutlineHandler: this.showHideOutline
26187
26201
  });
26188
- result.metaData.objectUUID = item.uuid;
26189
- item.allowRotate = !this.standAlone;
26190
- item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
26191
26202
  this.itemService.addItem(item);
26192
26203
  if (item.itemGroup) {
26193
26204
  this.itemGroupService.reattachToItemGroup(item, item.itemGroup, item.position);
26194
26205
  }
26195
26206
  // For simple articles we use object uuid, because they don't have an instanceId
26196
- this.upsertFurniture(item.uuid, { BrandIdentifier: result.metaData.itemIdentifier }, item);
26207
+ this.upsertFurniture(item.uuid, { BrandIdentifier: metadata.itemIdentifier }, item);
26197
26208
  this.handleIntegration(item.uuid, item);
26198
- this.currentCustomFloorGroup = item;
26199
- this.currentCustomFloorGroup.buildFinished();
26200
- result.furniture = item;
26209
+ // this.currentCustomFloorGroup = item;
26210
+ // this.currentCustomFloorGroup.buildFinished();
26211
+ // result.furniture = item;
26212
+ item.buildFinished();
26201
26213
  this.sceneService.updatePathTracer();
26202
- return result;
26214
+ return item;
26203
26215
  }
26204
26216
  async createNonConfigurableFloor(result) {
26205
26217
  const item = this.floorService.floorToConfigure;
@@ -26301,21 +26313,22 @@ class BuildFurnitureWithoutSceneService extends BuildFurnitureBaseService {
26301
26313
  await this.getSelectionsAndDecos();
26302
26314
  return await this.handlePrepareSelectionsDecos(result);
26303
26315
  }
26304
- createSimple3DModel(result, standAlone) {
26305
- if (!isNill(standAlone)) {
26306
- this.standAlone = standAlone;
26307
- }
26308
- // there are no selections or decos for simple articles, so empty lists for integration purposes
26309
- this.iOne.emptySelections();
26310
- const itemConstructor = Factory.getClass(this.standAlone ? ItemType.FloorGroup : result.metaData.itemType);
26311
- const item = new itemConstructor(result.metaData, null, {
26316
+ createSimple3DModel(metadata, object) {
26317
+ // if (!isNill(standAlone)) {
26318
+ // this.standAlone = standAlone;
26319
+ // }
26320
+ // // there are no selections or decos for simple articles, so empty lists for integration purposes
26321
+ // this.iOne.emptySelections();
26322
+ const itemConstructor = Factory.getClass(this.standAlone ? ItemType.FloorGroup : metadata.itemType);
26323
+ const item = new itemConstructor(metadata, null, {
26312
26324
  showHideOutlineHandler: this.showHideOutline
26313
26325
  });
26314
- result.metaData.objectUUID = item.uuid;
26315
- item.allowRotate = !this.standAlone;
26316
- item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
26317
- result.furniture = item;
26318
- return result;
26326
+ // result.metaData.objectUUID = item.uuid;
26327
+ // item.allowRotate = !this.standAlone;
26328
+ // item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
26329
+ // result.furniture = item;
26330
+ // return result;
26331
+ return item;
26319
26332
  }
26320
26333
  async createNonConfigurableFloor(result) {
26321
26334
  // TODO Right now we do not need this, but we might need to render floors so we just prepared it like this.
@@ -27105,7 +27118,7 @@ class LoadFurnitureBaseService {
27105
27118
  }
27106
27119
  }
27107
27120
  addToList(list, item) {
27108
- if (!item || (!item.instanceId && !item.metaData.objectUUID)) {
27121
+ if (!item || (!item.metaData || (!item.instanceId && !item.metaData.objectUUID))) {
27109
27122
  return;
27110
27123
  }
27111
27124
  if ((item.instanceId && !list.find(l => l.instanceId === item.instanceId)) ||
@@ -27269,60 +27282,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
27269
27282
  }], ctorParameters: () => [{ type: HomedecoratorConnectorService }, { type: HomedecoratorConnectorAdapterService }, { type: ModelsService }, { type: ThreedselectorService }, { type: MessageBusService }, { type: SwitchBuildFurnitureService }, { type: PresetsService }, { type: HomedecoratorSettingsService }] });
27270
27283
 
27271
27284
  class LoadFurnitureService extends LoadFurnitureBaseService {
27272
- async loadFurniture(furnitureData, shouldCopyInstance = false, looseOriginalConfiguration = true, standAlone = false, fromScratch = false, fromPreset = false, loadFromProject = false) {
27273
- const result = new CustomFloorGroupResult(furnitureData.itemIdentifier, furnitureData.itemName ? furnitureData.itemName : furnitureData.itemIdentifier);
27274
- let modelExists = false;
27275
- if (loadFromProject && furnitureData.modelUrl) {
27276
- modelExists = await FileUtils.DoesFileExist(FileUtils.FixUrl(furnitureData.modelUrl));
27277
- }
27278
- if (!modelExists) {
27279
- await this.tryLoadArticle(furnitureData, result, loadFromProject).catch((e) => {
27280
- if (result.resultType === ResultType.Timeout) {
27281
- return Promise.reject(result);
27282
- }
27283
- if (result.metaData.externalSettings.externalSourceId === null || result.metaData.externalSettings.externalSourceId === undefined) {
27284
- result.errorMessages.push(new ErrorMessage(result.metaData.externalSettings.name + ' EXTERNAL_SOURCE_NOT_FOUND', ''));
27285
- result.resultType = ResultType.ExternalSourceNotAvailable;
27286
- return Promise.reject(result);
27287
- }
27288
- // no article found, we can continue if there is instanceId and modelUrl provided in metadata
27289
- if (!this.needs3DModel(result.metaData)) {
27290
- result.resultType = ResultType.No3DModel;
27291
- }
27292
- if (!result.metaData || !result.metaData.modelUrl && result.resultType !== ResultType.No3DModel) {
27293
- // if (result.resultType !== ResultType.ConfigurationNotFixed) {
27294
- result.errorMessages.push(new ErrorMessage('ARTICLE_NOT_FOUND', 'ARTICLE_NOT_FOUND_DESC'));
27295
- result.resultType = ResultType.ArticleNotFound;
27296
- // }
27297
- return Promise.reject(result);
27298
- }
27299
- });
27300
- }
27301
- else {
27302
- result.metaData = furnitureData;
27303
- this.buildFurnitureService.currentActiveService.articleAssetPath = this.getAssetPathFromMetadata(result.metaData);
27304
- }
27305
- if (result.metaData.itemType === ItemType.FloorDecoration && result.metaData.hdecoType === HdecoType.Materials) {
27306
- result.resultType = ResultType.No3DModel;
27307
- }
27308
- else {
27309
- await this.initFull3DObject(result, fromPreset)
27310
- .catch((e) => {
27311
- if (!standAlone) {
27312
- return Promise.reject(result);
27313
- }
27314
- });
27315
- }
27316
- if (!result.metaData.configurable && !isFloorDecoration(result.metaData.itemType)) { // simple 3d article, just load model
27317
- return this.buildFurnitureService.currentActiveService.createSimple3DModel(result, standAlone);
27318
- }
27319
- else if (!result.metaData.configurable && isFloorDecoration(result.metaData.itemType)) {
27320
- return this.buildFurnitureService.currentActiveService.createNonConfigurableFloor(result);
27321
- }
27322
- else {
27323
- this.configurationDirty = true;
27324
- return this.buildFurnitureService.currentActiveService.startToBuild(result, result.metaData, shouldCopyInstance, looseOriginalConfiguration, standAlone, true, fromPreset, loadFromProject);
27325
- }
27285
+ loadFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject) {
27286
+ throw new Error('Method not implemented.');
27326
27287
  }
27327
27288
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
27328
27289
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureService }); }
@@ -27346,7 +27307,7 @@ class DimensionsService {
27346
27307
  this._itemService = _itemService;
27347
27308
  this._sceneService = _sceneService;
27348
27309
  this._fontService = _fontService;
27349
- this._offSet = 0.05;
27310
+ this._offSet = 0;
27350
27311
  this._labelOffSet = 0.05;
27351
27312
  this._nameHeightArrow = 'height_arrow';
27352
27313
  this._nameWidthArrow = 'width_arrow';
@@ -27401,6 +27362,8 @@ class DimensionsService {
27401
27362
  if (!object.hasOwnProperty('halfSize')) {
27402
27363
  return;
27403
27364
  }
27365
+ const yFlipped = Math.abs(object.rotation.y % (2 * Math.PI) - Math.PI) < 0.001;
27366
+ const direction = yFlipped ? -1 : 1;
27404
27367
  const height = object.getHeight();
27405
27368
  const halfHeight = height / 2;
27406
27369
  const width = object.getWidth();
@@ -27412,7 +27375,7 @@ class DimensionsService {
27412
27375
  const heightArrow = dimensionObject.getObjectByName(this._nameHeightArrow);
27413
27376
  if (heightArrow) {
27414
27377
  ObjectUtils.UpdateArrowLength(heightArrow, height, new Vector3(0, 1, 0), this._headLength, this._headWidth, true);
27415
- heightArrow.position.set(-(halfWidth + this._offSet), 0, -(halfDepth + this._offSet));
27378
+ heightArrow.position.set(-direction * ((halfWidth + this._offSet)), 0, -direction * (halfDepth + this._offSet));
27416
27379
  }
27417
27380
  const heightLabel = dimensionObject.getObjectByName('height_label');
27418
27381
  if (heightLabel) {
@@ -27422,33 +27385,36 @@ class DimensionsService {
27422
27385
  // newHeightLabel.geometry.rotateX(object.rotation.x);
27423
27386
  // newHeightLabel.geometry.rotateY(-object.rotation.y);
27424
27387
  // newHeightLabel.geometry.rotateZ(object.rotation.z);
27425
- newHeightLabel.position.set(-(halfWidth + this._offSet), 0, -(halfDepth + this._offSet));
27388
+ const size = this._getBoxSize(newHeightLabel);
27389
+ newHeightLabel.position.set(-direction * (halfWidth + (this._labelOffSet + size.x)), 0, -direction * (halfDepth + this._labelOffSet));
27426
27390
  dimensionObject.add(newHeightLabel);
27427
27391
  }
27428
27392
  const widthArrow = dimensionObject.getObjectByName(this._nameWidthArrow);
27429
27393
  if (widthArrow) {
27430
27394
  ObjectUtils.UpdateArrowLength(widthArrow, width, new Vector3(1, 0, 0), this._headLength, this._headWidth, true);
27431
- widthArrow.position.set(0, halfHeight + this._offSet, halfDepth + this._offSet);
27395
+ widthArrow.position.set(0, halfHeight + this._offSet, direction * (-halfDepth + this._offSet));
27432
27396
  }
27433
27397
  const widthLabel = dimensionObject.getObjectByName('width_label');
27434
27398
  if (widthLabel) {
27435
27399
  dimensionObject.remove(widthLabel);
27436
27400
  const newWidthLabel = this._createLabel(Dimensioning.mToMeasure(width), 'width_label', object.rotation);
27437
27401
  // newWidthLabel.rotation.set(-object.rotation.x, -object.rotation.y, -object.rotation.z);
27438
- newWidthLabel.position.set(0, halfHeight + this._offSet, (halfDepth + this._offSet));
27402
+ const size = this._getBoxSize(newWidthLabel);
27403
+ newWidthLabel.position.set(-direction * (size.x / 2), halfHeight + this._labelOffSet, direction * (-halfDepth + this._labelOffSet));
27439
27404
  dimensionObject.add(newWidthLabel);
27440
27405
  }
27441
27406
  const depthArrow = dimensionObject.getObjectByName(this._nameDepthArrow);
27442
27407
  if (depthArrow) {
27443
27408
  ObjectUtils.UpdateArrowLength(depthArrow, depth, new Vector3(0, 0, 1), this._headLength, this._headWidth, true);
27444
- depthArrow.position.set(-(halfWidth + this._offSet), halfHeight + this._offSet, 0);
27409
+ depthArrow.position.set(-direction * (halfWidth + this._offSet), -halfHeight + this._offSet, 0);
27445
27410
  }
27446
27411
  const depthLabel = dimensionObject.getObjectByName('depth_label');
27447
27412
  if (depthLabel) {
27448
27413
  dimensionObject.remove(depthLabel);
27449
27414
  const newDepthLabel = this._createLabel(Dimensioning.mToMeasure(depth), 'depth_label', object.rotation);
27450
27415
  // newDepthLabel.rotation.set(-object.rotation.x, -object.rotation.y, -object.rotation.z);
27451
- newDepthLabel.position.set(-(halfWidth + this._offSet), halfHeight + this._offSet, 0);
27416
+ const size = this._getBoxSize(newDepthLabel);
27417
+ newDepthLabel.position.set(-direction * (halfWidth + this._labelOffSet + size.x), -halfHeight + this._labelOffSet, 0);
27452
27418
  dimensionObject.add(newDepthLabel);
27453
27419
  }
27454
27420
  }
@@ -27495,6 +27461,12 @@ class DimensionsService {
27495
27461
  // label.quaternion.copy(new Quaternion().fromArray(new Vector4().setAxisAngleFromQuaternion(this._cameraService.camera.quaternion).negate().toArray()));
27496
27462
  return label;
27497
27463
  }
27464
+ _getBoxSize(mesh) {
27465
+ const box = new Box3().setFromObject(mesh);
27466
+ const size = new Vector3();
27467
+ box.getSize(size);
27468
+ return size;
27469
+ }
27498
27470
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DimensionsService, deps: [{ token: ItemService }, { token: SceneService }, { token: FontService }], target: i0.ɵɵFactoryTarget.Injectable }); }
27499
27471
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DimensionsService }); }
27500
27472
  }
@@ -28924,33 +28896,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
28924
28896
  }], ctorParameters: () => [{ type: HomedecoratorSettingsService }, { type: ExportService }, { type: CameraService }, { type: SceneService }, { type: ToastService }, { type: MessageBusService }, { type: GoogleTagManagerService }, { type: RoomService }, { type: FloorService }] });
28925
28897
 
28926
28898
  class LoadFurnitureWithoutSceneService extends LoadFurnitureBaseService {
28927
- async loadFurniture(furnitureData, shouldCopyInstance = false, looseOriginalConfiguration = true, standAlone = false, fromScratch = false, fromPreset = false, loadFromProject = false) {
28928
- const result = new CustomFloorGroupResult(furnitureData.itemIdentifier, furnitureData.itemName ? furnitureData.itemName : furnitureData.itemIdentifier);
28929
- await this.tryLoadArticle(furnitureData, result, loadFromProject).catch((e) => {
28930
- if (result.resultType === ResultType.Timeout) {
28931
- return Promise.reject(result);
28932
- }
28933
- if (result.metaData.externalSettings.externalSourceId === null || result.metaData.externalSettings.externalSourceId === undefined) {
28934
- result.errorMessages.push(new ErrorMessage(result.metaData.externalSettings.name + ' EXTERNAL_SOURCE_NOT_FOUND', ''));
28935
- result.resultType = ResultType.ExternalSourceNotAvailable;
28936
- return Promise.reject(result);
28937
- }
28938
- if (!result.metaData) {
28939
- result.errorMessages.push(new ErrorMessage('ARTICLE_NOT_FOUND', 'ARTICLE_NOT_FOUND_DESC'));
28940
- result.resultType = ResultType.ArticleNotFound;
28941
- return Promise.reject(result);
28942
- }
28943
- });
28944
- if (!result.metaData.configurable && !isFloorDecoration(result.metaData.itemType)) { // simple 3d article, just load model
28945
- return this.buildFurnitureService.currentActiveService.createSimple3DModel(result, standAlone);
28946
- }
28947
- else if (!result.metaData.configurable && isFloorDecoration(result.metaData.itemType)) {
28948
- return this.buildFurnitureService.currentActiveService.createNonConfigurableFloor(result);
28949
- }
28950
- else {
28951
- this.configurationDirty = true;
28952
- return this.buildFurnitureService.currentActiveService.startToBuild(result, result.metaData, shouldCopyInstance, looseOriginalConfiguration, standAlone, true, fromPreset, loadFromProject);
28953
- }
28899
+ loadFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject) {
28900
+ throw new Error('Method not implemented.');
28954
28901
  }
28955
28902
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureWithoutSceneService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
28956
28903
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureWithoutSceneService }); }
@@ -29110,7 +29057,7 @@ class NewRenderService {
29110
29057
  };
29111
29058
  scene.name = 'mrp_room_' + scene.uuid;
29112
29059
  const glb = await this._getGlbFromObject(scene, options);
29113
- this._utilsService.downloadFile(scene.name + '.glb', new Blob([glb], { type: 'model/gltf-binary' }));
29060
+ // this._utilsService.downloadFile(scene.name + '.glb', new Blob([glb], {type: 'model/gltf-binary'}));
29114
29061
  ObjectUtils.DisposeObject(scene);
29115
29062
  scene = null;
29116
29063
  return glb;
@@ -29206,7 +29153,7 @@ class NewRenderService {
29206
29153
  // }
29207
29154
  // }
29208
29155
  async _handleAjaxRender(data) {
29209
- this.blenderRenderStarted.emit();
29156
+ this.blenderRenderStarted.next(true);
29210
29157
  const result = await axios({
29211
29158
  headers: {
29212
29159
  'Content-Type': 'application/json'
@@ -29230,7 +29177,7 @@ class NewRenderService {
29230
29177
  }
29231
29178
  }
29232
29179
  async _handleAjaxGlbRender(data, preview = false) {
29233
- this.blenderRenderStarted.emit();
29180
+ this.blenderRenderStarted.next(true);
29234
29181
  let host = this._settingsService.settings.renderParameters.host;
29235
29182
  if (host) {
29236
29183
  if (!host.endsWith('/')) {
@@ -29255,8 +29202,7 @@ class NewRenderService {
29255
29202
  this.messageService.emit(MessageType.BlenderRenderPreviewReady, result.data.image);
29256
29203
  }
29257
29204
  else {
29258
- const file = new Blob([result.data.image], { type: 'image/jpg' });
29259
- this._utilsService.downloadFile(`test.jpg`, file);
29205
+ this._utilsService.downloadImage(`render.jpg`, result.data.image);
29260
29206
  this.messageService.emit(MessageType.HideLoadingIndicator);
29261
29207
  }
29262
29208
  }
@@ -29264,6 +29210,8 @@ class NewRenderService {
29264
29210
  this.renderImageChanged.next('');
29265
29211
  this.renderImageError.next(this._dictionaryService.get('BLENDER_PRODUCT_RENDER_ERROR'));
29266
29212
  }
29213
+ // Remove the loading indicator.
29214
+ this._messageBusService.emit(MessageType.RenderUploadFinished, true);
29267
29215
  }
29268
29216
  }
29269
29217
  }
@@ -29450,7 +29398,7 @@ class NewRenderService {
29450
29398
  // Get the asset information from the BlenderRenderSettings
29451
29399
  let renderScenes = [];
29452
29400
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
29453
- renderScenes = this._settingsService.settings.blenderSceneSettings.scenes.filter(scene => scene.sceneType === BlenderSceneType.Product
29401
+ renderScenes = this._settingsService.settings.blenderSceneSettings.scenes.filter(scene => scene.sceneType === BlenderSceneType.Room
29454
29402
  && scene.name === assetId);
29455
29403
  }
29456
29404
  let renderScene;
@@ -29500,12 +29448,14 @@ class NewRenderService {
29500
29448
  }
29501
29449
  _getDataForRoomRender(settings) {
29502
29450
  this._cameraService.camera.updateMatrixWorld(true);
29503
- const sceneSettings = this._getSceneRenderSettings(this._settingsService.settings.productRenderSceneAssetId);
29451
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29504
29452
  const options = {
29505
29453
  width: settings.width,
29506
29454
  height: settings.height,
29507
29455
  max_samples: this._settingsService.settings.renderParameters.iterations,
29508
29456
  sceneSettings: sceneSettings,
29457
+ renderType: this._getRenderType(sceneSettings),
29458
+ transparency: false,
29509
29459
  cameraOptions: {
29510
29460
  fov: this._cameraService.camera.fov,
29511
29461
  matrix: Array.from(this._cameraService.camera.matrixWorld.elements)
@@ -29513,7 +29463,8 @@ class NewRenderService {
29513
29463
  environmentOptions: {
29514
29464
  hdri: this._settingsService.settings.renderParameters.hdri,
29515
29465
  hdriIntensity: settings.hdriIntensity
29516
- }
29466
+ },
29467
+ colijnLegacy: true // this is the value to trigger culling.
29517
29468
  };
29518
29469
  const data = {
29519
29470
  assetUrl: this._settingsService.settings.assetPath,
@@ -34281,7 +34232,7 @@ class RenderControlsComponent {
34281
34232
  </div>
34282
34233
  }
34283
34234
  <rp-render-progress
34284
- [title]="'UPLOADING' | localize"
34235
+ [title]="'PREPARE_TO_RENDER' | localize"
34285
34236
  [show]="startUploading"
34286
34237
  >
34287
34238
  </rp-render-progress>
@@ -34511,7 +34462,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
34511
34462
  </div>
34512
34463
  }
34513
34464
  <rp-render-progress
34514
- [title]="'UPLOADING' | localize"
34465
+ [title]="'PREPARE_TO_RENDER' | localize"
34515
34466
  [show]="startUploading"
34516
34467
  >
34517
34468
  </rp-render-progress>
@@ -34852,11 +34803,11 @@ class SliderInputComponent {
34852
34803
  this.onChange = new EventEmitter();
34853
34804
  }
34854
34805
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SliderInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34855
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SliderInputComponent, isStandalone: false, selector: "rp-slider-input", inputs: { title: "title", min: "min", max: "max", step: "step", value: "value" }, outputs: { onChange: "onChange" }, ngImport: i0, template: "<div class=\"slider-group\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field class=\"slider-group-form-field\" fxFlex=\"20%\">\r\n <input\r\n matInput\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n type=\"number\"\r\n [placeholder]=\"title\"\r\n [ngModel]=\"value\"\r\n (change)=\"onChange.emit($event.target.value)\"\r\n >\r\n </mat-form-field>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n thumbLabel\r\n fxFlex=\"grow\" #ngSlider>\r\n <input matSliderThumb [value]=\"value\" (input)=\"onChange.emit({source: ngSliderThumb, parent: ngSlider, value: ngSliderThumb.value}.value)\" #ngSliderThumb=\"matSliderThumb\" />\r\n </mat-slider>\r\n</div>\r\n", styles: [".slider-group{padding:0 1em;box-sizing:border-box}.slider-group input{text-align:right;font-size:14px}.slider-group .mat-mdc-form-field-infix{width:auto}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label{transform:translateY(-1.34369em) scale(.75)}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label span{font-size:12px;color:#000}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-infix{padding:5px 0}\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.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: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { 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: i4$2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i4$2.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] }); }
34806
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SliderInputComponent, isStandalone: false, selector: "rp-slider-input", inputs: { title: "title", min: "min", max: "max", step: "step", value: "value" }, outputs: { onChange: "onChange" }, ngImport: i0, template: "<div class=\"slider-group\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field class=\"slider-group-form-field\" fxFlex=\"20%\">\r\n <mat-label [textContent]=\"title\"></mat-label>\r\n <input\r\n matInput\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n type=\"number\"\r\n [placeholder]=\"title\"\r\n [ngModel]=\"value\"\r\n (change)=\"onChange.emit($event.target.value)\"\r\n >\r\n </mat-form-field>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n thumbLabel\r\n fxFlex=\"grow\" #ngSlider>\r\n <input matSliderThumb [value]=\"value\" (input)=\"onChange.emit({source: ngSliderThumb, parent: ngSlider, value: ngSliderThumb.value}.value)\" #ngSliderThumb=\"matSliderThumb\" />\r\n </mat-slider>\r\n</div>\r\n", styles: [".slider-group{padding:0 1em;box-sizing:border-box}.slider-group input{text-align:right;font-size:14px}.slider-group .mat-mdc-form-field-infix{width:auto}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label{transform:translateY(-1.34369em) scale(.75)}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label span{font-size:12px;color:#000}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-infix{padding:5px 0}\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.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: 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: "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: i4$2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i4$2.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] }); }
34856
34807
  }
34857
34808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SliderInputComponent, decorators: [{
34858
34809
  type: Component,
34859
- args: [{ selector: 'rp-slider-input', standalone: false, template: "<div class=\"slider-group\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field class=\"slider-group-form-field\" fxFlex=\"20%\">\r\n <input\r\n matInput\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n type=\"number\"\r\n [placeholder]=\"title\"\r\n [ngModel]=\"value\"\r\n (change)=\"onChange.emit($event.target.value)\"\r\n >\r\n </mat-form-field>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n thumbLabel\r\n fxFlex=\"grow\" #ngSlider>\r\n <input matSliderThumb [value]=\"value\" (input)=\"onChange.emit({source: ngSliderThumb, parent: ngSlider, value: ngSliderThumb.value}.value)\" #ngSliderThumb=\"matSliderThumb\" />\r\n </mat-slider>\r\n</div>\r\n", styles: [".slider-group{padding:0 1em;box-sizing:border-box}.slider-group input{text-align:right;font-size:14px}.slider-group .mat-mdc-form-field-infix{width:auto}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label{transform:translateY(-1.34369em) scale(.75)}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label span{font-size:12px;color:#000}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-infix{padding:5px 0}\n"] }]
34810
+ args: [{ selector: 'rp-slider-input', standalone: false, template: "<div class=\"slider-group\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field class=\"slider-group-form-field\" fxFlex=\"20%\">\r\n <mat-label [textContent]=\"title\"></mat-label>\r\n <input\r\n matInput\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n type=\"number\"\r\n [placeholder]=\"title\"\r\n [ngModel]=\"value\"\r\n (change)=\"onChange.emit($event.target.value)\"\r\n >\r\n </mat-form-field>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n thumbLabel\r\n fxFlex=\"grow\" #ngSlider>\r\n <input matSliderThumb [value]=\"value\" (input)=\"onChange.emit({source: ngSliderThumb, parent: ngSlider, value: ngSliderThumb.value}.value)\" #ngSliderThumb=\"matSliderThumb\" />\r\n </mat-slider>\r\n</div>\r\n", styles: [".slider-group{padding:0 1em;box-sizing:border-box}.slider-group input{text-align:right;font-size:14px}.slider-group .mat-mdc-form-field-infix{width:auto}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label{transform:translateY(-1.34369em) scale(.75)}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-label-wrapper .mat-mdc-form-field-label span{font-size:12px;color:#000}.slider-group .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-wrapper .mat-mdc-form-field-infix{padding:5px 0}\n"] }]
34860
34811
  }], ctorParameters: () => [], propDecorators: { title: [{
34861
34812
  type: Input
34862
34813
  }], min: [{
@@ -41723,6 +41674,10 @@ class RoomPlannerComponent {
41723
41674
  this.unselectAll();
41724
41675
  this.showGroupMenu = false;
41725
41676
  this.showGroupEditMenuButtons = false;
41677
+ if (this.userIsGrouping) {
41678
+ // When the user was grouping, let everything know that we stopped with that aswell
41679
+ this._messageService.emit(MessageType.CancelGroupObject);
41680
+ }
41726
41681
  }
41727
41682
  updateSelectedObjectHud() {
41728
41683
  this._hudService.updateSelectedItemHud();
@@ -44462,7 +44417,7 @@ class ThreedselectorComponent {
44462
44417
  get loadConfigurator() {
44463
44418
  return this._loadConfigurator;
44464
44419
  }
44465
- constructor(screenSizeService, _dialog, _appService, _iOne, _messageBus, _loadFurnitureService, _buildFurnitureService, _toastService, _messageService, _sceneService, _dialogService, _cameraService, _presetsService, _itemService, _settingsService, _appEventService, _bluePrintService, _wallService, _floorService, _iconCacheService, _googleTagManager, _appStateService, _progressService, _resizeService, _connectorAdapterService, _lightPresetService, _variationService, _configuringService) {
44420
+ constructor(screenSizeService, _dialog, _appService, _iOne, _messageBus, _loadFurnitureService, _buildFurnitureService, _toastService, _messageService, _sceneService, _dialogService, _cameraService, _presetsService, _itemService, _settingsService, _appEventService, _bluePrintService, _wallService, _floorService, _iconCacheService, _googleTagManager, _appStateService, _progressService, _resizeService, _connectorAdapterService, _lightPresetService, _variationService, _configuringService, _configuratorEventService, _changeDetector) {
44466
44421
  this.screenSizeService = screenSizeService;
44467
44422
  this._dialog = _dialog;
44468
44423
  this._appService = _appService;
@@ -44491,6 +44446,8 @@ class ThreedselectorComponent {
44491
44446
  this._lightPresetService = _lightPresetService;
44492
44447
  this._variationService = _variationService;
44493
44448
  this._configuringService = _configuringService;
44449
+ this._configuratorEventService = _configuratorEventService;
44450
+ this._changeDetector = _changeDetector;
44494
44451
  this.iconName = IconName;
44495
44452
  this.customizeButtonClicked = new EventEmitter();
44496
44453
  this.selections = [];
@@ -44515,6 +44472,7 @@ class ThreedselectorComponent {
44515
44472
  this.showProgressText = true; // Show/Hide progress text
44516
44473
  this.showLoaderBar = false;
44517
44474
  this.showFullConfiguration = false;
44475
+ this.firstBuild = false;
44518
44476
  this._loadConfigurator = false;
44519
44477
  this._skuAlreadySet = false;
44520
44478
  this._itemsFromScratch = [];
@@ -44527,7 +44485,9 @@ class ThreedselectorComponent {
44527
44485
  this._presetsService.register(this);
44528
44486
  }
44529
44487
  ngOnInit() {
44530
- this._subs.push(this._appEventService.answerCountReceived.subscribe((answerCount) => this._handleAnswerCountReceived(answerCount)), this._messageBus.subscribe(MessageType.LoadIOneFurnitureIntoSceneBySKU, ({ sku, settings, position }) => this._handleLoadIOneFurnitureIntoSceneBySKU(sku, settings, position)), this._messageBus.subscribe(MessageType.CopyIOneFurnitureIntoSceneBySKU, (original) => this._handleCopyIOneFurnitureIntoSceneBySKU(original)), this._buildFurnitureService.currentActiveService.configureModeChanged.subscribe(configuringModeChange => this._handleConfigureModeChange(configuringModeChange)), this._buildFurnitureService.currentActiveService.toggleSelectedElement.subscribe((element) => this._selectedElementToggle(element)), this._buildFurnitureService.currentActiveService.buildFinished.subscribe((result) => this._handleBuildFinished(result)), this._buildFurnitureService.currentActiveService.answerSelected.subscribe((result) => this._answerSelected(result)), this._sceneService.onAfterRender.subscribe(() => this._handleRender()),
44488
+ this._subs.push(this._appEventService.answerCountReceived.subscribe((answerCount) => this._handleAnswerCountReceived(answerCount)), this._messageBus.subscribe(MessageType.LoadIOneFurnitureIntoSceneBySKU, ({ sku, settings, position }) => this._handleLoadIOneFurnitureIntoSceneBySKU(sku, settings, position)), this._messageBus.subscribe(MessageType.CopyIOneFurnitureIntoSceneBySKU, (original) => this._handleCopyIOneFurnitureIntoSceneBySKU(original)), this._configuratorEventService.buildFinished.subscribe((result) => {
44489
+ this.handleBuildResult(result);
44490
+ }), this._buildFurnitureService.currentActiveService.configureModeChanged.subscribe(configuringModeChange => this._handleConfigureModeChange(configuringModeChange)), this._buildFurnitureService.currentActiveService.toggleSelectedElement.subscribe((element) => this._selectedElementToggle(element)), this._buildFurnitureService.currentActiveService.buildFinished.subscribe((result) => this._handleBuildFinished(result)), this._buildFurnitureService.currentActiveService.answerSelected.subscribe((result) => this._answerSelected(result)), this._sceneService.onAfterRender.subscribe(() => this._handleRender()),
44531
44491
  // this._appService.skuSet.subscribe(sku => this._handleSkuSet(sku)),
44532
44492
  this._appService.materialPreviewSet.subscribe(material => this._handleMaterialSet(material)), this._appService.materialPreviewUpdate.subscribe(material => this._updateMaterialPreview(material)), this._appEventService.articleInfoReceived.subscribe(info => this._handleInfoClick(info)), this._messageService.subscribe(MessageType.UndefinedErrorOccured, () => this._handleUndefinedErrorOccured()), this._presetsService.afterLoad.subscribe(() => this._afterLoadFromPreset()), this._messageBus.subscribe(MessageType.Undo, () => this._clearItems()), this._messageBus.subscribe(MessageType.Redo, () => this._clearItems()), this._messageBus.subscribe(MessageType.StartWithEmptyRoom, () => this._clearItems()), this._messageBus.subscribe(MessageType.StartWithPreset, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadRoomFromPreset, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadRoomFromCloud, () => this._clearItems()), this._messageBus.subscribe(MessageType.NewRoom, () => this._clearItems()), this._messageBus.subscribe(MessageType.ResetRoomplan, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadScaledDiagram, () => this._clearItems()), this._presetsService.beforeLoad.subscribe(() => this._clearItems()), this._messageService.subscribe(MessageType.ItemSelected, (item) => this.objectSelected(item)), this._messageService.subscribe(MessageType.ItemUnselected, () => this._removeButtons()), this.screenSizeService.screenSizeChanged.subscribe((info) => {
44533
44493
  this.shouldShowLabel = info.isPhoneSize;
@@ -44665,6 +44625,9 @@ class ThreedselectorComponent {
44665
44625
  }
44666
44626
  // NEW CONFIGURATOR
44667
44627
  async handleBuildResult(result) {
44628
+ if (!result || this.firstBuild) {
44629
+ return;
44630
+ }
44668
44631
  const customFloorGroupResult = new CustomFloorGroupResult();
44669
44632
  const metaData = this.setMetadateFromObject(result);
44670
44633
  if (result && !isFloorDecoration(result.placement)) {
@@ -44675,14 +44638,20 @@ class ThreedselectorComponent {
44675
44638
  metaData.externalSettings = this._externalSourceData;
44676
44639
  this._externalSourceData = undefined; // clear it.
44677
44640
  }
44678
- const item = this._buildFurnitureService.currentActiveService.createConfigurableItemWithObject(result.instanceId, metaData, result.object);
44679
- const replaceCurrentItem = await this._buildFurnitureService.currentActiveService.replaceCurrentItem(item, metaData, false);
44641
+ let furnitureToAdd;
44642
+ if (!result.configurable) { // simple article
44643
+ furnitureToAdd = await this._buildFurnitureService.currentActiveService.createSimple3DModel(metaData, result.object);
44644
+ }
44645
+ else {
44646
+ const item = this._buildFurnitureService.currentActiveService.createConfigurableItemWithObject(result.instanceId, metaData, result.object);
44647
+ furnitureToAdd = await this._buildFurnitureService.currentActiveService.replaceCurrentItem(item, metaData, false);
44648
+ }
44680
44649
  customFloorGroupResult.metaData = metaData;
44681
44650
  customFloorGroupResult.instanceId = result.instanceId;
44682
44651
  customFloorGroupResult.name = result.articleName;
44683
44652
  customFloorGroupResult.sku = result.sku;
44684
44653
  customFloorGroupResult.resultType = result.resultType;
44685
- customFloorGroupResult.furniture = replaceCurrentItem;
44654
+ customFloorGroupResult.furniture = furnitureToAdd;
44686
44655
  customFloorGroupResult.errorMessages = result.errorMessages;
44687
44656
  customFloorGroupResult.showErrors = false;
44688
44657
  customFloorGroupResult.toggle = false;
@@ -44716,7 +44685,7 @@ class ThreedselectorComponent {
44716
44685
  this._sceneService.needsRender = true;
44717
44686
  }
44718
44687
  else if (result.resultType === ResultType.NeedsUserInput) {
44719
- this._configuringService.isConfiguring = true;
44688
+ // this._configuringService.isConfiguring = true;
44720
44689
  }
44721
44690
  else if (result.resultType === ResultType.BuildFromScratch) {
44722
44691
  // if (this._loadedFromPreset) { // start configuring when loading is done
@@ -44804,10 +44773,10 @@ class ThreedselectorComponent {
44804
44773
  }
44805
44774
  }
44806
44775
  showConfiguratorChange(show) {
44807
- this._configuringService.isConfiguring = show;
44808
44776
  this.loadConfigurator = show;
44809
44777
  }
44810
44778
  async loadFurnitureFromSku(position, sku, settings) {
44779
+ this.firstBuild = true;
44811
44780
  const configuratorSettings = this._settingsService.settings.projectSettings ?
44812
44781
  this._settingsService.settings.projectSettings : this._settingsService.settings;
44813
44782
  const configuratorSettingsClone = Object.assign({}, configuratorSettings);
@@ -44825,34 +44794,46 @@ class ThreedselectorComponent {
44825
44794
  }
44826
44795
  }
44827
44796
  this._configuringService.scene = this._sceneService.scene;
44828
- await this._configuringService.init(configuratorSettingsClone);
44829
- const furnitureData = new ConfigurationResultObject();
44830
- furnitureData.sku = sku;
44831
- this._configuringService.isConfiguring = false;
44832
- await this._configuringService.configure(furnitureData);
44797
+ this._initConfigurator(configuratorSettingsClone, sku);
44833
44798
  this._startPosition = position;
44834
44799
  this.loadConfigurator = true;
44835
- return this.handleBuildResult(this._configuringService.buildResult);
44800
+ this._changeDetector.detectChanges();
44801
+ return this._waitForBuildToFinish();
44836
44802
  }
44837
44803
  async configureFurniture(object) {
44838
44804
  if (object instanceof Item) {
44805
+ this._resetConfigurator();
44839
44806
  const configuratorExternalSourceId = object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ?
44840
44807
  object.metadata.externalSettings.externalSourceId : undefined;
44841
44808
  const configuratorSettingsClone = await this._setSourceSettings(configuratorExternalSourceId);
44842
44809
  if (configuratorExternalSourceId) {
44843
44810
  this._externalSourceData = object.metadata.externalSettings; // set it so we can restore them with the new config.
44844
44811
  }
44845
- // make sure that if the object contains metadata, we set from project true
44846
- await this._configuringService.init(configuratorSettingsClone);
44847
- const furnitureData = new ConfigurationResultObject();
44848
- furnitureData.sku = object.metadata.itemIdentifier;
44849
- furnitureData.instanceId = object.metadata.itemId;
44850
- this._configuringService.isConfiguring = true;
44851
- await this._configuringService.configure(furnitureData);
44812
+ this._initConfigurator(configuratorSettingsClone, object.metadata.itemIdentifier, object.metadata.itemId);
44852
44813
  this._loadFurnitureService.currentActiveService.configurationDirty = true;
44853
44814
  this.loadConfigurator = true;
44854
44815
  }
44855
44816
  }
44817
+ _initConfigurator(settings, sku, instanceId) {
44818
+ this.configuratorSettings = settings;
44819
+ this.configuratorSku = sku;
44820
+ this.configuratorInstanceId = instanceId;
44821
+ }
44822
+ _resetConfigurator() {
44823
+ this.configuratorSettings = undefined;
44824
+ this.configuratorSku = undefined;
44825
+ this.configuratorInstanceId = undefined;
44826
+ this.loadConfigurator = false;
44827
+ this.firstBuild = false;
44828
+ }
44829
+ _waitForBuildToFinish() {
44830
+ return new Promise((resolve, reject) => {
44831
+ this._configuratorEventService.buildFinished.pipe(filter$1(value => value !== undefined && value !== null), take(1)).subscribe((result) => {
44832
+ this._resetConfigurator();
44833
+ resolve(this.handleBuildResult(result));
44834
+ });
44835
+ });
44836
+ }
44856
44837
  async _setSourceSettings(configuratorExternalSourceId) {
44857
44838
  const configuratorSettings = this._settingsService.settings.projectSettings ?
44858
44839
  this._settingsService.settings.projectSettings : this._settingsService.settings;
@@ -44877,7 +44858,6 @@ class ThreedselectorComponent {
44877
44858
  return configuratorSettingsClone;
44878
44859
  }
44879
44860
  _closeConfigurator() {
44880
- this._configuringService.isConfiguring = false;
44881
44861
  this.loadConfigurator = false;
44882
44862
  }
44883
44863
  _clearItems() {
@@ -45322,9 +45302,6 @@ class ThreedselectorComponent {
45322
45302
  }
45323
45303
  this._prepareAddButtons();
45324
45304
  }
45325
- if (this._callBackFnWhenBuildFinished && this.standAlone) {
45326
- this._callBackFnWhenBuildFinished(result.furniture);
45327
- }
45328
45305
  }
45329
45306
  _resetElementPosition() {
45330
45307
  if (this.selectedElement && !this.standAlone) {
@@ -45666,17 +45643,18 @@ class ThreedselectorComponent {
45666
45643
  (metadata.modelUrl && !metadata.configurable)) {
45667
45644
  loadFromProject = true;
45668
45645
  }
45669
- const result = await this._handleLoadAndBuildFurniture(metadata, true, true, true, false, true, false, loadFromProject);
45670
- if (item.materialDiff) {
45671
- if (result.furniture) {
45672
- try {
45673
- await MaterialDiffUtils.ApplyMaterialDiff(result.furniture, item.materialDiff);
45674
- }
45675
- catch (e) {
45676
- }
45677
- }
45678
- }
45679
- return result;
45646
+ await this._handleLoadAndBuildFurniture(metadata, true, true, true, false, true, false, loadFromProject);
45647
+ // const result: any = await this._handleLoadAndBuildFurniture(
45648
+ // metadata, true, true, true, false, true, false, loadFromProject);
45649
+ // if (item.materialDiff) {
45650
+ // if (result.furniture) {
45651
+ // try {
45652
+ // await MaterialDiffUtils.ApplyMaterialDiff(result.furniture, item.materialDiff);
45653
+ // } catch (e) {
45654
+ // }
45655
+ // }
45656
+ // }
45657
+ // return result;
45680
45658
  }
45681
45659
  async _handleLoadAndBuildFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, fromPreset, standAlone, fromScratch, showErrorDialog = true, loadFromProject = false) {
45682
45660
  this._loadedFromPreset = fromPreset; // Set the flag if it was loaded from a preset.
@@ -45694,7 +45672,6 @@ class ThreedselectorComponent {
45694
45672
  this._externalSourceData = furnitureData.externalSettings; // set it so we can restore them with the new config.
45695
45673
  }
45696
45674
  this._configuringService.scene = this._sceneService.scene;
45697
- await this._configuringService.init(configuratorSettingsClone);
45698
45675
  const data = new ConfigurationResultObject();
45699
45676
  data.sku = furnitureData.itemIdentifier;
45700
45677
  data.articleName = furnitureData.itemName;
@@ -45714,7 +45691,6 @@ class ThreedselectorComponent {
45714
45691
  data.rotation = furnitureData.rotation;
45715
45692
  data.originalMetadata = furnitureData;
45716
45693
  await this._configuringService.configure(data, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject);
45717
- this._configuringService.isConfiguring = false;
45718
45694
  this.loadConfigurator = true;
45719
45695
  }
45720
45696
  _answerSelected(result) {
@@ -45763,6 +45739,7 @@ class ThreedselectorComponent {
45763
45739
  else {
45764
45740
  this._appStateService.undoDisabled = false;
45765
45741
  this._appStateService.redoDisabled = false;
45742
+ this.loadConfigurator = false;
45766
45743
  }
45767
45744
  this.showAnswers = false;
45768
45745
  this.showSelections = configuringModeChange.configuring || this.standAlone;
@@ -45843,8 +45820,8 @@ class ThreedselectorComponent {
45843
45820
  });
45844
45821
  }
45845
45822
  }
45846
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThreedselectorComponent, deps: [{ token: ScreenSizeAnalysisService }, { token: i1$2.MatDialog }, { token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: MessageBusService }, { token: SwitchLoadFurnitureService }, { token: SwitchBuildFurnitureService }, { token: ToastService }, { token: MessageBusService }, { token: SceneService }, { token: DialogService }, { token: CameraService }, { token: PresetsService }, { token: ItemService }, { token: HomedecoratorSettingsService }, { token: HomedecoratorAppEventService }, { token: BluePrintService }, { token: WallService }, { token: FloorService }, { token: HomedecoratorIconCacheService }, { token: GoogleTagManagerService }, { token: AppStateService }, { token: ProgressService }, { token: ResizeService }, { token: HomedecoratorConnectorAdapterService }, { token: LightPresetsService }, { token: VariationService }, { token: i27.ConfiguringService }], target: i0.ɵɵFactoryTarget.Component }); }
45847
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ThreedselectorComponent, isStandalone: false, selector: "rp-threedselector", inputs: { selections: "selections" }, outputs: { customizeButtonClicked: "customizeButtonClicked" }, viewQueries: [{ propertyName: "toolbarIconModels", first: true, predicate: ["toolbarIconModels"], descendants: true, static: true }, { propertyName: "selectedThreedObjectCustomizationSidebar", first: true, predicate: ["selectedThreedObjectCustomizationSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectAnimationSidebar", first: true, predicate: ["selectedThreedObjectAnimationSidebar"], descendants: true, static: true }, { propertyName: "customizeButtonClicked", first: true, predicate: ElementToolbarComponent, descendants: true, static: true }], ngImport: i0, template: "@if (loadConfigurator) {\r\n <co-configurator\r\n class=\"floating\"\r\n [showErrorMessages]=\"true\"\r\n [showLoader]=\"true\"\r\n [outputErrorMessages]=\"true\"\r\n (buildResult)=\"handleBuildResult($event)\"\r\n (errorMessages)=\"handleErrorMessages($event)\"\r\n (showChange)=\"showConfiguratorChange($event)\">\r\n </co-configurator>\r\n}\r\n\r\n@if (showElementToolbar) {\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n@if (showCustomizeButtons) {\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host .rp-element-buttons.animate ::ng-deep .element-add-button{animation-name:pulse-add-buttons;animation-duration:.4s;animation-iteration-count:6;animation-direction:alternate}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-mdc-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:#fff}.solid-background>*{fill:#fff;background:#fff}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:Public sans,serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:Public sans,serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}.circular-progress-wrapper{position:absolute;width:90px;height:90px;left:50%;top:50%;transform:translate(-50%,-50%)}.circular-progress{width:90px;height:90px;transform:rotate(-90deg)}.bg{fill:none;stroke:#d1cec5;stroke-width:2}.progress{fill:none;stroke:#979284;stroke-width:2;stroke-linecap:round;transition:stroke-dasharray .3s ease}.percentage{position:absolute;top:0;left:0;width:90px;height:90px;font-size:16px;font-weight:600;line-height:90px;text-align:center;color:#979284}#progress{height:100%;width:0;background:#da9803;transition:width .3s}@keyframes pulse-add-buttons{50%{box-shadow:0 0 20px #ff5c33}}\n"], dependencies: [{ kind: "component", type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { kind: "component", type: i27.ConfiguratorComponent, selector: "co-configurator", inputs: ["showLoader", "showProgressBar", "showErrorMessages", "outputErrorMessages", "canCloseConfigurator", "animateSlideout", "showHeaderInformation"], outputs: ["buildResult", "isLoading", "updateProgressBar", "errorMessages", "showChange"] }, { kind: "component", type: ElementToolbarComponent, selector: "rp-element-toolbar", inputs: ["editMenu", "showPointer", "showSwap"], outputs: ["deleteClicked", "swapClicked", "animationClicked"] }, { kind: "component", type: ElementButtonsComponent, selector: "rp-element-buttons", inputs: ["addButtons", "customizeButtons", "resizeButtons", "elementPointer", "elementPosition"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ElementSliderComponent, selector: "rp-element-slider" }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
45823
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ThreedselectorComponent, deps: [{ token: ScreenSizeAnalysisService }, { token: i1$2.MatDialog }, { token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: MessageBusService }, { token: SwitchLoadFurnitureService }, { token: SwitchBuildFurnitureService }, { token: ToastService }, { token: MessageBusService }, { token: SceneService }, { token: DialogService }, { token: CameraService }, { token: PresetsService }, { token: ItemService }, { token: HomedecoratorSettingsService }, { token: HomedecoratorAppEventService }, { token: BluePrintService }, { token: WallService }, { token: FloorService }, { token: HomedecoratorIconCacheService }, { token: GoogleTagManagerService }, { token: AppStateService }, { token: ProgressService }, { token: ResizeService }, { token: HomedecoratorConnectorAdapterService }, { token: LightPresetsService }, { token: VariationService }, { token: i27.ConfiguringService }, { token: i27.ConfiguratorEventService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
45824
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ThreedselectorComponent, isStandalone: false, selector: "rp-threedselector", inputs: { selections: "selections" }, outputs: { customizeButtonClicked: "customizeButtonClicked" }, viewQueries: [{ propertyName: "toolbarIconModels", first: true, predicate: ["toolbarIconModels"], descendants: true, static: true }, { propertyName: "selectedThreedObjectCustomizationSidebar", first: true, predicate: ["selectedThreedObjectCustomizationSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectAnimationSidebar", first: true, predicate: ["selectedThreedObjectAnimationSidebar"], descendants: true, static: true }, { propertyName: "customizeButtonClicked", first: true, predicate: ElementToolbarComponent, descendants: true, static: true }], ngImport: i0, template: "@if (true) {\r\n <co-configurator\r\n class=\"floating\"\r\n [settings]=\"configuratorSettings\"\r\n [sku]=\"configuratorSku\"\r\n [instanceId]=\"configuratorInstanceId\"\r\n [show]=\"loadConfigurator && !firstBuild\"\r\n [showErrorMessages]=\"true\"\r\n [showLoader]=\"true\"\r\n [outputErrorMessages]=\"true\"\r\n (errorMessages)=\"handleErrorMessages($event)\"\r\n (showChange)=\"showConfiguratorChange($event)\">\r\n </co-configurator>\r\n}\r\n\r\n@if (showElementToolbar) {\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n@if (showCustomizeButtons) {\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host .rp-element-buttons.animate ::ng-deep .element-add-button{animation-name:pulse-add-buttons;animation-duration:.4s;animation-iteration-count:6;animation-direction:alternate}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-mdc-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:#fff}.solid-background>*{fill:#fff;background:#fff}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:Public sans,serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:Public sans,serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}.circular-progress-wrapper{position:absolute;width:90px;height:90px;left:50%;top:50%;transform:translate(-50%,-50%)}.circular-progress{width:90px;height:90px;transform:rotate(-90deg)}.bg{fill:none;stroke:#d1cec5;stroke-width:2}.progress{fill:none;stroke:#979284;stroke-width:2;stroke-linecap:round;transition:stroke-dasharray .3s ease}.percentage{position:absolute;top:0;left:0;width:90px;height:90px;font-size:16px;font-weight:600;line-height:90px;text-align:center;color:#979284}#progress{height:100%;width:0;background:#da9803;transition:width .3s}@keyframes pulse-add-buttons{50%{box-shadow:0 0 20px #ff5c33}}\n"], dependencies: [{ kind: "component", type: ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { kind: "component", type: i27.ConfiguratorComponent, selector: "co-configurator", inputs: ["show", "sku", "instanceId", "settings", "scene", "showLoader", "showProgressBar", "showErrorMessages", "outputErrorMessages", "canCloseConfigurator", "animateSlideout", "showHeaderInformation"], outputs: ["isLoading", "updateProgressBar", "errorMessages", "showChange"] }, { kind: "component", type: ElementToolbarComponent, selector: "rp-element-toolbar", inputs: ["editMenu", "showPointer", "showSwap"], outputs: ["deleteClicked", "swapClicked", "animationClicked"] }, { kind: "component", type: ElementButtonsComponent, selector: "rp-element-buttons", inputs: ["addButtons", "customizeButtons", "resizeButtons", "elementPointer", "elementPosition"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ElementSliderComponent, selector: "rp-element-slider" }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
45848
45825
  trigger('showElementToolbar', [
45849
45826
  state('void', style({ opacity: 0 })),
45850
45827
  state('*', style({ opacity: 1 })),
@@ -45862,8 +45839,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
45862
45839
  transition('void => *', animate('500ms ease'))
45863
45840
  ])
45864
45841
  ] /*,
45865
- changeDetection: ChangeDetectionStrategy.OnPush*/, standalone: false, template: "@if (loadConfigurator) {\r\n <co-configurator\r\n class=\"floating\"\r\n [showErrorMessages]=\"true\"\r\n [showLoader]=\"true\"\r\n [outputErrorMessages]=\"true\"\r\n (buildResult)=\"handleBuildResult($event)\"\r\n (errorMessages)=\"handleErrorMessages($event)\"\r\n (showChange)=\"showConfiguratorChange($event)\">\r\n </co-configurator>\r\n}\r\n\r\n@if (showElementToolbar) {\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n@if (showCustomizeButtons) {\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host .rp-element-buttons.animate ::ng-deep .element-add-button{animation-name:pulse-add-buttons;animation-duration:.4s;animation-iteration-count:6;animation-direction:alternate}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-mdc-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:#fff}.solid-background>*{fill:#fff;background:#fff}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:Public sans,serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:Public sans,serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}.circular-progress-wrapper{position:absolute;width:90px;height:90px;left:50%;top:50%;transform:translate(-50%,-50%)}.circular-progress{width:90px;height:90px;transform:rotate(-90deg)}.bg{fill:none;stroke:#d1cec5;stroke-width:2}.progress{fill:none;stroke:#979284;stroke-width:2;stroke-linecap:round;transition:stroke-dasharray .3s ease}.percentage{position:absolute;top:0;left:0;width:90px;height:90px;font-size:16px;font-weight:600;line-height:90px;text-align:center;color:#979284}#progress{height:100%;width:0;background:#da9803;transition:width .3s}@keyframes pulse-add-buttons{50%{box-shadow:0 0 20px #ff5c33}}\n"] }]
45866
- }], ctorParameters: () => [{ type: ScreenSizeAnalysisService }, { type: i1$2.MatDialog }, { type: HomedecoratorAppService }, { type: HomedecoratorConnectorService }, { type: MessageBusService }, { type: SwitchLoadFurnitureService }, { type: SwitchBuildFurnitureService }, { type: ToastService }, { type: MessageBusService }, { type: SceneService }, { type: DialogService }, { type: CameraService }, { type: PresetsService }, { type: ItemService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorAppEventService }, { type: BluePrintService }, { type: WallService }, { type: FloorService }, { type: HomedecoratorIconCacheService }, { type: GoogleTagManagerService }, { type: AppStateService }, { type: ProgressService }, { type: ResizeService }, { type: HomedecoratorConnectorAdapterService }, { type: LightPresetsService }, { type: VariationService }, { type: i27.ConfiguringService }], propDecorators: { toolbarIconModels: [{
45842
+ changeDetection: ChangeDetectionStrategy.OnPush*/, standalone: false, template: "@if (true) {\r\n <co-configurator\r\n class=\"floating\"\r\n [settings]=\"configuratorSettings\"\r\n [sku]=\"configuratorSku\"\r\n [instanceId]=\"configuratorInstanceId\"\r\n [show]=\"loadConfigurator && !firstBuild\"\r\n [showErrorMessages]=\"true\"\r\n [showLoader]=\"true\"\r\n [outputErrorMessages]=\"true\"\r\n (errorMessages)=\"handleErrorMessages($event)\"\r\n (showChange)=\"showConfiguratorChange($event)\">\r\n </co-configurator>\r\n}\r\n\r\n@if (showElementToolbar) {\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n@if (showCustomizeButtons) {\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n}\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-headline-6\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host .rp-element-buttons.animate ::ng-deep .element-add-button{animation-name:pulse-add-buttons;animation-duration:.4s;animation-iteration-count:6;animation-direction:alternate}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-mdc-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:#fff}.solid-background>*{fill:#fff;background:#fff}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:Public sans,serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:Public sans,serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}.circular-progress-wrapper{position:absolute;width:90px;height:90px;left:50%;top:50%;transform:translate(-50%,-50%)}.circular-progress{width:90px;height:90px;transform:rotate(-90deg)}.bg{fill:none;stroke:#d1cec5;stroke-width:2}.progress{fill:none;stroke:#979284;stroke-width:2;stroke-linecap:round;transition:stroke-dasharray .3s ease}.percentage{position:absolute;top:0;left:0;width:90px;height:90px;font-size:16px;font-weight:600;line-height:90px;text-align:center;color:#979284}#progress{height:100%;width:0;background:#da9803;transition:width .3s}@keyframes pulse-add-buttons{50%{box-shadow:0 0 20px #ff5c33}}\n"] }]
45843
+ }], ctorParameters: () => [{ type: ScreenSizeAnalysisService }, { type: i1$2.MatDialog }, { type: HomedecoratorAppService }, { type: HomedecoratorConnectorService }, { type: MessageBusService }, { type: SwitchLoadFurnitureService }, { type: SwitchBuildFurnitureService }, { type: ToastService }, { type: MessageBusService }, { type: SceneService }, { type: DialogService }, { type: CameraService }, { type: PresetsService }, { type: ItemService }, { type: HomedecoratorSettingsService }, { type: HomedecoratorAppEventService }, { type: BluePrintService }, { type: WallService }, { type: FloorService }, { type: HomedecoratorIconCacheService }, { type: GoogleTagManagerService }, { type: AppStateService }, { type: ProgressService }, { type: ResizeService }, { type: HomedecoratorConnectorAdapterService }, { type: LightPresetsService }, { type: VariationService }, { type: i27.ConfiguringService }, { type: i27.ConfiguratorEventService }, { type: i0.ChangeDetectorRef }], propDecorators: { toolbarIconModels: [{
45867
45844
  type: ViewChild,
45868
45845
  args: ['toolbarIconModels', { static: true }]
45869
45846
  }], selectedThreedObjectCustomizationSidebar: [{
@@ -49595,7 +49572,7 @@ class HomedecoratorComponent {
49595
49572
  </div>
49596
49573
  }
49597
49574
  }
49598
- `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "progress-bar" }, { kind: "component", type: LoadingOverlayComponent, selector: "rp-loading-overlay" }, { kind: "component", type: HdLoaderComponent, selector: "rp-loader", inputs: ["show"] }, { kind: "component", type: Core3dComponent, selector: "rp-core3d" }, { kind: "component", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: ["isLoading"], outputs: ["done", "showPlugin", "focusControls"] }, { kind: "component", type: FurnitureManagerComponent, selector: "rp-furniture-manager" }, { kind: "component", type: PresetsComponent, selector: "rp-presets", inputs: ["openNewRoomDialog"] }, { kind: "component", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: ["selections"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ToolbarComponent, selector: "rp-toolbar", outputs: ["externalSave"] }, { kind: "component", type: ProductCatalogComponent, selector: "rp-product-catalog", inputs: ["generalFilterOrders", "purchaseFilterOrders", "logisticsFilterOrders"] }, { kind: "component", type: HelpComponent, selector: "rp-help" }, { kind: "component", type: i27.LiteSelectorComponent, selector: "co-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "animateSlideout", "customDimensions"], outputs: ["showChange", "answerChosen"] }], encapsulation: i0.ViewEncapsulation.None }); }
49575
+ `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "progress-bar" }, { kind: "component", type: LoadingOverlayComponent, selector: "rp-loading-overlay" }, { kind: "component", type: HdLoaderComponent, selector: "rp-loader", inputs: ["show"] }, { kind: "component", type: Core3dComponent, selector: "rp-core3d" }, { kind: "component", type: RoomPlannerComponent, selector: "rp-room-planner", inputs: ["isLoading"], outputs: ["done", "showPlugin", "focusControls"] }, { kind: "component", type: FurnitureManagerComponent, selector: "rp-furniture-manager" }, { kind: "component", type: PresetsComponent, selector: "rp-presets", inputs: ["openNewRoomDialog"] }, { kind: "component", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: ["selections"], outputs: ["customizeButtonClicked"] }, { kind: "component", type: ToolbarComponent, selector: "rp-toolbar", outputs: ["externalSave"] }, { kind: "component", type: ProductCatalogComponent, selector: "rp-product-catalog", inputs: ["generalFilterOrders", "purchaseFilterOrders", "logisticsFilterOrders"] }, { kind: "component", type: HelpComponent, selector: "rp-help" }, { kind: "component", type: i27.LiteSelectorComponent, selector: "co-lite-selector", inputs: ["show", "showLabel", "canClose", "animateSlideout", "customDimensions"], outputs: ["showChange", "answerChosen"] }], encapsulation: i0.ViewEncapsulation.None }); }
49599
49576
  }
49600
49577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, decorators: [{
49601
49578
  type: Component,