@colijnit/homedecorator 261.20.2 → 261.20.4

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';
@@ -4158,6 +4157,17 @@ class HomedecoratorConnectorAdapterService {
4158
4157
  }
4159
4158
  return 'nl'; // just to be safe
4160
4159
  }
4160
+ async getPublicParams(url, upId) {
4161
+ const tempSettings = new HomedecoratorSettings();
4162
+ tempSettings.url = url;
4163
+ tempSettings.schema = upId.toString();
4164
+ // @ts-ignore
4165
+ const tempMainConnector = new MainApi(tempSettings);
4166
+ const response = await tempMainConnector.getPublicParams(upId);
4167
+ if (response) {
4168
+ return response;
4169
+ }
4170
+ }
4161
4171
  async store3DModelCDN(filename, fileContents) {
4162
4172
  try {
4163
4173
  const response = await this.mainApi.uploadModelToCDN(filename, fileContents);
@@ -4315,6 +4325,10 @@ class HomedecoratorConnectorAdapterService {
4315
4325
  }
4316
4326
  }
4317
4327
  }
4328
+ getCatalogDefinition(id) {
4329
+ return this._catalogDefinitions && this._catalogDefinitions.length > 0 ?
4330
+ this._catalogDefinitions.find(c => c.id === id) : null;
4331
+ }
4318
4332
  async getArticleExtended(articleNumber) {
4319
4333
  const requestObject = new ArticleExtendedRequest();
4320
4334
  requestObject.articleNumber = articleNumber;
@@ -11111,7 +11125,7 @@ class Dimensioning {
11111
11125
  }
11112
11126
  }
11113
11127
 
11114
- const minSize = 0.05;
11128
+ const minSize = 0.001;
11115
11129
  const xDirection = new Vector3(1, 0, 0);
11116
11130
  const yDirection$1 = new Vector3(0, 1, 0);
11117
11131
  const zDirection$1 = new Vector3(0, 0, 1);
@@ -12620,7 +12634,10 @@ class PresetsService {
12620
12634
  const json = await this._jsonUtils.readJsonFile(path, false);
12621
12635
  preset.model = JSON.stringify(json);
12622
12636
  }
12623
- const modelObj = JSON.parse(preset.model);
12637
+ let modelObj = JSON.parse(preset.model);
12638
+ if (typeof modelObj === 'string') { // multiple escapes...?
12639
+ modelObj = JSON.parse(modelObj);
12640
+ }
12624
12641
  if (!modelObj.hasOwnProperty('version')) {
12625
12642
  modelObj.version = 1.0;
12626
12643
  }
@@ -13728,6 +13745,10 @@ class FloorService {
13728
13745
  _updateFloorMaterial(floor, floorMaterial, texture) {
13729
13746
  ObjectUtils.DisposeMaterial(floor.getMaterial());
13730
13747
  floor.floorMaterial = floorMaterial;
13748
+ if (texture) {
13749
+ // Update the texture as well
13750
+ floor.floorTexture = texture;
13751
+ }
13731
13752
  this._sceneService.needsRender = true;
13732
13753
  this._sceneService.updatePathTracer();
13733
13754
  }
@@ -19031,8 +19052,7 @@ class UtilsService {
19031
19052
  // Now you can use the `imageData` URL for display or download
19032
19053
  // this._downloadImage(`${object.name}_thumbnail.jpg`, imageData);
19033
19054
  }
19034
- _downloadImage(fileName, imageData) {
19035
- // Create a link and trigger the download
19055
+ downloadImage(fileName, imageData) {
19036
19056
  const link = document.createElement('a');
19037
19057
  link.href = imageData;
19038
19058
  link.download = fileName;
@@ -19602,6 +19622,9 @@ class BluePrintService extends BluePrintFloorplanService {
19602
19622
  }
19603
19623
  await this.loadTheFloorplan(floorplan);
19604
19624
  }
19625
+ getRoomCenter() {
19626
+ return this.roomService.getRoomCenter();
19627
+ }
19605
19628
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BluePrintService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
19606
19629
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BluePrintService, providedIn: 'root' }); }
19607
19630
  }
@@ -21079,14 +21102,17 @@ class BoundingBoxMeasurement {
21079
21102
  const widthMesh = createTextWithBackground(width, this._font, this.textSize, this.textColor, this.backgroundColor, this.backgroundOpacity, 1.2, widthText);
21080
21103
  const depthMesh = createTextWithBackground(depth, this._font, this.textSize, this.textColor, this.backgroundColor, this.backgroundOpacity, 1.2, depthText);
21081
21104
  // 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);
21105
+ heightMesh.position.set(0, 0.12, 0);
21106
+ widthMesh.position.set(0, 0, 0);
21107
+ depthMesh.position.set(0, -0.12, 0);
21085
21108
  // Create one new mesh
21086
21109
  const allMeasurementMeshes = new Mesh();
21087
21110
  allMeasurementMeshes.add(heightMesh);
21088
21111
  allMeasurementMeshes.add(widthMesh);
21089
21112
  allMeasurementMeshes.add(depthMesh);
21113
+ const box = new Box3().setFromObject(allMeasurementMeshes);
21114
+ const heightBox = box.max.y - box.min.y;
21115
+ allMeasurementMeshes.children.forEach(c => c.translateY(heightBox / 2));
21090
21116
  allMeasurements.textMesh = allMeasurementMeshes;
21091
21117
  allMeasurements.positions = this._calculateAllMeasurementsPositions();
21092
21118
  return allMeasurements;
@@ -22844,7 +22870,7 @@ class SceneEventService {
22844
22870
  this._messageBusService.emit(MessageType.SaveState, { action: `3D ${action}` });
22845
22871
  }), this._debouncedSaveState.pipe(debounceTime(200)).subscribe(() => {
22846
22872
  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)));
22873
+ }), 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
22874
  }
22849
22875
  setExploreMode(on = true) {
22850
22876
  if (on) {
@@ -22989,7 +23015,9 @@ class SceneEventService {
22989
23015
  let intersection = null;
22990
23016
  if (isWallType(draggedData.type) || (isWallFloorType(draggedData.type) && this._intersectedWall)) {
22991
23017
  intersection = this._intersectedWall;
22992
- position = this._intersectedWall.object.localToWorld(this._intersectedWall.point);
23018
+ if (this._intersectedWall.object) {
23019
+ position = this._intersectedWall.object.localToWorld(this._intersectedWall.point);
23020
+ }
22993
23021
  // position = this._intersectedWall && this._intersectedWall.point;
22994
23022
  }
22995
23023
  else if (isFloorType(draggedData.type) || isFloorDecoration(draggedData.type) || (isWallFloorType(draggedData.type) && this._intersectedFloor)) {
@@ -23336,7 +23364,9 @@ class SceneEventService {
23336
23364
  }
23337
23365
  _setGroupingMode(enableGrouping) {
23338
23366
  this._groupingMode = enableGrouping;
23339
- this._addToItemGroup(this._intersectedObject, this._prevSelectedObject);
23367
+ if (this._groupingMode) {
23368
+ this._addToItemGroup(this._intersectedObject, this._prevSelectedObject);
23369
+ }
23340
23370
  }
23341
23371
  _getDraggedData() {
23342
23372
  return this._dragAndDropService.draggedData;
@@ -24823,7 +24853,7 @@ class BuildFurnitureBaseService {
24823
24853
  item.canScaleZ = metadata.canScaleZ;
24824
24854
  item.colorable = metadata.colorable;
24825
24855
  item.canDelete = !this.standAlone;
24826
- item.canCopy = !this.standAlone;
24856
+ item.canCopy = !this.standAlone && !metadata.thirdPartyModel;
24827
24857
  item.allwaysConfigureMode = this.standAlone;
24828
24858
  item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
24829
24859
  item.tempObject = true;
@@ -25457,6 +25487,15 @@ class BuildFurnitureBaseService {
25457
25487
  handleSelectionSelected(chosenOption) {
25458
25488
  this._selectionsSelected.push(chosenOption.opvTreeNodeHierarchy);
25459
25489
  }
25490
+ getActiveFurnitureByUuid(uuid) {
25491
+ const furniture = this.itemService.getFurniture();
25492
+ const len = furniture.length;
25493
+ for (let i = 0; i < len; i++) {
25494
+ if (furniture[i].metadata && furniture[i].metadata.objectUUID === uuid) {
25495
+ return furniture[i];
25496
+ }
25497
+ }
25498
+ }
25460
25499
  getActiveFurniture(instanceId) {
25461
25500
  const configurables = this.itemService.getConfigurables();
25462
25501
  const len = configurables.length;
@@ -26165,41 +26204,34 @@ class BuildFurnitureService extends BuildFurnitureBaseService {
26165
26204
  }
26166
26205
  }
26167
26206
  }
26168
- createSimple3DModel(result, standAlone) {
26169
- if (!isNill(standAlone)) {
26170
- this.standAlone = standAlone;
26207
+ createSimple3DModel(metadata, object) {
26208
+ const existingModel = this.getActiveFurnitureByUuid(metadata.objectUUID);
26209
+ if (existingModel) {
26210
+ return existingModel;
26171
26211
  }
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;
26212
+ if (!metadata.position) {
26213
+ metadata.position = this.startPosition || this.defaultPosition;
26180
26214
  }
26181
- if (!result.metaData.rotation) {
26182
- result.metaData.rotation = result.metaData.default180 ? this.defaultRotation : new Euler();
26215
+ if (!metadata.rotation) {
26216
+ metadata.rotation = metadata.default180 ? this.defaultRotation : new Euler();
26183
26217
  }
26184
- const itemConstructor = Factory.getClass(this.standAlone ? ItemType.FloorGroup : result.metaData.itemType);
26185
- const item = new itemConstructor(result.metaData, this.full3DObjectToUse, {
26218
+ const itemConstructor = Factory.getClass(metadata.itemType);
26219
+ const item = new itemConstructor(metadata, object, {
26186
26220
  showHideOutlineHandler: this.showHideOutline
26187
26221
  });
26188
- result.metaData.objectUUID = item.uuid;
26189
- item.allowRotate = !this.standAlone;
26190
- item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
26191
26222
  this.itemService.addItem(item);
26192
26223
  if (item.itemGroup) {
26193
26224
  this.itemGroupService.reattachToItemGroup(item, item.itemGroup, item.position);
26194
26225
  }
26195
26226
  // For simple articles we use object uuid, because they don't have an instanceId
26196
- this.upsertFurniture(item.uuid, { BrandIdentifier: result.metaData.itemIdentifier }, item);
26227
+ this.upsertFurniture(item.uuid, { BrandIdentifier: metadata.itemIdentifier }, item);
26197
26228
  this.handleIntegration(item.uuid, item);
26198
- this.currentCustomFloorGroup = item;
26199
- this.currentCustomFloorGroup.buildFinished();
26200
- result.furniture = item;
26229
+ // this.currentCustomFloorGroup = item;
26230
+ // this.currentCustomFloorGroup.buildFinished();
26231
+ // result.furniture = item;
26232
+ item.buildFinished();
26201
26233
  this.sceneService.updatePathTracer();
26202
- return result;
26234
+ return item;
26203
26235
  }
26204
26236
  async createNonConfigurableFloor(result) {
26205
26237
  const item = this.floorService.floorToConfigure;
@@ -26301,21 +26333,22 @@ class BuildFurnitureWithoutSceneService extends BuildFurnitureBaseService {
26301
26333
  await this.getSelectionsAndDecos();
26302
26334
  return await this.handlePrepareSelectionsDecos(result);
26303
26335
  }
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, {
26336
+ createSimple3DModel(metadata, object) {
26337
+ // if (!isNill(standAlone)) {
26338
+ // this.standAlone = standAlone;
26339
+ // }
26340
+ // // there are no selections or decos for simple articles, so empty lists for integration purposes
26341
+ // this.iOne.emptySelections();
26342
+ const itemConstructor = Factory.getClass(this.standAlone ? ItemType.FloorGroup : metadata.itemType);
26343
+ const item = new itemConstructor(metadata, null, {
26312
26344
  showHideOutlineHandler: this.showHideOutline
26313
26345
  });
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;
26346
+ // result.metaData.objectUUID = item.uuid;
26347
+ // item.allowRotate = !this.standAlone;
26348
+ // item.highLightDisabled = !this.settingsService.settings.options.useStandaloneHighLight;
26349
+ // result.furniture = item;
26350
+ // return result;
26351
+ return item;
26319
26352
  }
26320
26353
  async createNonConfigurableFloor(result) {
26321
26354
  // TODO Right now we do not need this, but we might need to render floors so we just prepared it like this.
@@ -27105,7 +27138,7 @@ class LoadFurnitureBaseService {
27105
27138
  }
27106
27139
  }
27107
27140
  addToList(list, item) {
27108
- if (!item || (!item.instanceId && !item.metaData.objectUUID)) {
27141
+ if (!item || (!item.metaData || (!item.instanceId && !item.metaData.objectUUID))) {
27109
27142
  return;
27110
27143
  }
27111
27144
  if ((item.instanceId && !list.find(l => l.instanceId === item.instanceId)) ||
@@ -27269,60 +27302,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
27269
27302
  }], ctorParameters: () => [{ type: HomedecoratorConnectorService }, { type: HomedecoratorConnectorAdapterService }, { type: ModelsService }, { type: ThreedselectorService }, { type: MessageBusService }, { type: SwitchBuildFurnitureService }, { type: PresetsService }, { type: HomedecoratorSettingsService }] });
27270
27303
 
27271
27304
  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
- }
27305
+ loadFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject) {
27306
+ throw new Error('Method not implemented.');
27326
27307
  }
27327
27308
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
27328
27309
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureService }); }
@@ -27346,7 +27327,7 @@ class DimensionsService {
27346
27327
  this._itemService = _itemService;
27347
27328
  this._sceneService = _sceneService;
27348
27329
  this._fontService = _fontService;
27349
- this._offSet = 0.05;
27330
+ this._offSet = 0;
27350
27331
  this._labelOffSet = 0.05;
27351
27332
  this._nameHeightArrow = 'height_arrow';
27352
27333
  this._nameWidthArrow = 'width_arrow';
@@ -27401,6 +27382,8 @@ class DimensionsService {
27401
27382
  if (!object.hasOwnProperty('halfSize')) {
27402
27383
  return;
27403
27384
  }
27385
+ const yFlipped = Math.abs(object.rotation.y % (2 * Math.PI) - Math.PI) < 0.001;
27386
+ const direction = yFlipped ? -1 : 1;
27404
27387
  const height = object.getHeight();
27405
27388
  const halfHeight = height / 2;
27406
27389
  const width = object.getWidth();
@@ -27412,7 +27395,7 @@ class DimensionsService {
27412
27395
  const heightArrow = dimensionObject.getObjectByName(this._nameHeightArrow);
27413
27396
  if (heightArrow) {
27414
27397
  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));
27398
+ heightArrow.position.set(-direction * ((halfWidth + this._offSet)), 0, -direction * (halfDepth + this._offSet));
27416
27399
  }
27417
27400
  const heightLabel = dimensionObject.getObjectByName('height_label');
27418
27401
  if (heightLabel) {
@@ -27422,33 +27405,36 @@ class DimensionsService {
27422
27405
  // newHeightLabel.geometry.rotateX(object.rotation.x);
27423
27406
  // newHeightLabel.geometry.rotateY(-object.rotation.y);
27424
27407
  // newHeightLabel.geometry.rotateZ(object.rotation.z);
27425
- newHeightLabel.position.set(-(halfWidth + this._offSet), 0, -(halfDepth + this._offSet));
27408
+ const size = this._getBoxSize(newHeightLabel);
27409
+ newHeightLabel.position.set(-direction * (halfWidth + (this._labelOffSet + size.x)), 0, -direction * (halfDepth + this._labelOffSet));
27426
27410
  dimensionObject.add(newHeightLabel);
27427
27411
  }
27428
27412
  const widthArrow = dimensionObject.getObjectByName(this._nameWidthArrow);
27429
27413
  if (widthArrow) {
27430
27414
  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);
27415
+ widthArrow.position.set(0, halfHeight + this._offSet, direction * (-halfDepth + this._offSet));
27432
27416
  }
27433
27417
  const widthLabel = dimensionObject.getObjectByName('width_label');
27434
27418
  if (widthLabel) {
27435
27419
  dimensionObject.remove(widthLabel);
27436
27420
  const newWidthLabel = this._createLabel(Dimensioning.mToMeasure(width), 'width_label', object.rotation);
27437
27421
  // newWidthLabel.rotation.set(-object.rotation.x, -object.rotation.y, -object.rotation.z);
27438
- newWidthLabel.position.set(0, halfHeight + this._offSet, (halfDepth + this._offSet));
27422
+ const size = this._getBoxSize(newWidthLabel);
27423
+ newWidthLabel.position.set(-direction * (size.x / 2), halfHeight + this._labelOffSet, direction * (-halfDepth + this._labelOffSet));
27439
27424
  dimensionObject.add(newWidthLabel);
27440
27425
  }
27441
27426
  const depthArrow = dimensionObject.getObjectByName(this._nameDepthArrow);
27442
27427
  if (depthArrow) {
27443
27428
  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);
27429
+ depthArrow.position.set(-direction * (halfWidth + this._offSet), -halfHeight + this._offSet, 0);
27445
27430
  }
27446
27431
  const depthLabel = dimensionObject.getObjectByName('depth_label');
27447
27432
  if (depthLabel) {
27448
27433
  dimensionObject.remove(depthLabel);
27449
27434
  const newDepthLabel = this._createLabel(Dimensioning.mToMeasure(depth), 'depth_label', object.rotation);
27450
27435
  // newDepthLabel.rotation.set(-object.rotation.x, -object.rotation.y, -object.rotation.z);
27451
- newDepthLabel.position.set(-(halfWidth + this._offSet), halfHeight + this._offSet, 0);
27436
+ const size = this._getBoxSize(newDepthLabel);
27437
+ newDepthLabel.position.set(-direction * (halfWidth + this._labelOffSet + size.x), -halfHeight + this._labelOffSet, 0);
27452
27438
  dimensionObject.add(newDepthLabel);
27453
27439
  }
27454
27440
  }
@@ -27495,6 +27481,12 @@ class DimensionsService {
27495
27481
  // label.quaternion.copy(new Quaternion().fromArray(new Vector4().setAxisAngleFromQuaternion(this._cameraService.camera.quaternion).negate().toArray()));
27496
27482
  return label;
27497
27483
  }
27484
+ _getBoxSize(mesh) {
27485
+ const box = new Box3().setFromObject(mesh);
27486
+ const size = new Vector3();
27487
+ box.getSize(size);
27488
+ return size;
27489
+ }
27498
27490
  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
27491
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DimensionsService }); }
27500
27492
  }
@@ -28924,33 +28916,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
28924
28916
  }], ctorParameters: () => [{ type: HomedecoratorSettingsService }, { type: ExportService }, { type: CameraService }, { type: SceneService }, { type: ToastService }, { type: MessageBusService }, { type: GoogleTagManagerService }, { type: RoomService }, { type: FloorService }] });
28925
28917
 
28926
28918
  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
- }
28919
+ loadFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject) {
28920
+ throw new Error('Method not implemented.');
28954
28921
  }
28955
28922
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureWithoutSceneService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
28956
28923
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LoadFurnitureWithoutSceneService }); }
@@ -29110,7 +29077,7 @@ class NewRenderService {
29110
29077
  };
29111
29078
  scene.name = 'mrp_room_' + scene.uuid;
29112
29079
  const glb = await this._getGlbFromObject(scene, options);
29113
- this._utilsService.downloadFile(scene.name + '.glb', new Blob([glb], { type: 'model/gltf-binary' }));
29080
+ // this._utilsService.downloadFile(scene.name + '.glb', new Blob([glb], {type: 'model/gltf-binary'}));
29114
29081
  ObjectUtils.DisposeObject(scene);
29115
29082
  scene = null;
29116
29083
  return glb;
@@ -29206,7 +29173,7 @@ class NewRenderService {
29206
29173
  // }
29207
29174
  // }
29208
29175
  async _handleAjaxRender(data) {
29209
- this.blenderRenderStarted.emit();
29176
+ this.blenderRenderStarted.next(true);
29210
29177
  const result = await axios({
29211
29178
  headers: {
29212
29179
  'Content-Type': 'application/json'
@@ -29230,7 +29197,7 @@ class NewRenderService {
29230
29197
  }
29231
29198
  }
29232
29199
  async _handleAjaxGlbRender(data, preview = false) {
29233
- this.blenderRenderStarted.emit();
29200
+ this.blenderRenderStarted.next(true);
29234
29201
  let host = this._settingsService.settings.renderParameters.host;
29235
29202
  if (host) {
29236
29203
  if (!host.endsWith('/')) {
@@ -29255,8 +29222,7 @@ class NewRenderService {
29255
29222
  this.messageService.emit(MessageType.BlenderRenderPreviewReady, result.data.image);
29256
29223
  }
29257
29224
  else {
29258
- const file = new Blob([result.data.image], { type: 'image/jpg' });
29259
- this._utilsService.downloadFile(`test.jpg`, file);
29225
+ this._utilsService.downloadImage(`render.jpg`, result.data.image);
29260
29226
  this.messageService.emit(MessageType.HideLoadingIndicator);
29261
29227
  }
29262
29228
  }
@@ -29264,6 +29230,8 @@ class NewRenderService {
29264
29230
  this.renderImageChanged.next('');
29265
29231
  this.renderImageError.next(this._dictionaryService.get('BLENDER_PRODUCT_RENDER_ERROR'));
29266
29232
  }
29233
+ // Remove the loading indicator.
29234
+ this._messageBusService.emit(MessageType.RenderUploadFinished, true);
29267
29235
  }
29268
29236
  }
29269
29237
  }
@@ -29450,7 +29418,7 @@ class NewRenderService {
29450
29418
  // Get the asset information from the BlenderRenderSettings
29451
29419
  let renderScenes = [];
29452
29420
  if (this._settingsService.settings.blenderSceneSettings && this._settingsService.settings.blenderSceneSettings.scenes) {
29453
- renderScenes = this._settingsService.settings.blenderSceneSettings.scenes.filter(scene => scene.sceneType === BlenderSceneType.Product
29421
+ renderScenes = this._settingsService.settings.blenderSceneSettings.scenes.filter(scene => scene.sceneType === BlenderSceneType.Room
29454
29422
  && scene.name === assetId);
29455
29423
  }
29456
29424
  let renderScene;
@@ -29500,12 +29468,14 @@ class NewRenderService {
29500
29468
  }
29501
29469
  _getDataForRoomRender(settings) {
29502
29470
  this._cameraService.camera.updateMatrixWorld(true);
29503
- const sceneSettings = this._getSceneRenderSettings(this._settingsService.settings.productRenderSceneAssetId);
29471
+ const sceneSettings = this._getSceneRenderSettings(settings.sceneAsset.name);
29504
29472
  const options = {
29505
29473
  width: settings.width,
29506
29474
  height: settings.height,
29507
29475
  max_samples: this._settingsService.settings.renderParameters.iterations,
29508
29476
  sceneSettings: sceneSettings,
29477
+ renderType: this._getRenderType(sceneSettings),
29478
+ transparency: false,
29509
29479
  cameraOptions: {
29510
29480
  fov: this._cameraService.camera.fov,
29511
29481
  matrix: Array.from(this._cameraService.camera.matrixWorld.elements)
@@ -29513,7 +29483,8 @@ class NewRenderService {
29513
29483
  environmentOptions: {
29514
29484
  hdri: this._settingsService.settings.renderParameters.hdri,
29515
29485
  hdriIntensity: settings.hdriIntensity
29516
- }
29486
+ },
29487
+ colijnLegacy: true // this is the value to trigger culling.
29517
29488
  };
29518
29489
  const data = {
29519
29490
  assetUrl: this._settingsService.settings.assetPath,
@@ -34281,7 +34252,7 @@ class RenderControlsComponent {
34281
34252
  </div>
34282
34253
  }
34283
34254
  <rp-render-progress
34284
- [title]="'UPLOADING' | localize"
34255
+ [title]="'PREPARE_TO_RENDER' | localize"
34285
34256
  [show]="startUploading"
34286
34257
  >
34287
34258
  </rp-render-progress>
@@ -34511,7 +34482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
34511
34482
  </div>
34512
34483
  }
34513
34484
  <rp-render-progress
34514
- [title]="'UPLOADING' | localize"
34485
+ [title]="'PREPARE_TO_RENDER' | localize"
34515
34486
  [show]="startUploading"
34516
34487
  >
34517
34488
  </rp-render-progress>
@@ -34852,11 +34823,11 @@ class SliderInputComponent {
34852
34823
  this.onChange = new EventEmitter();
34853
34824
  }
34854
34825
  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"] }] }); }
34826
+ 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
34827
  }
34857
34828
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SliderInputComponent, decorators: [{
34858
34829
  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"] }]
34830
+ 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
34831
  }], ctorParameters: () => [], propDecorators: { title: [{
34861
34832
  type: Input
34862
34833
  }], min: [{
@@ -41723,6 +41694,10 @@ class RoomPlannerComponent {
41723
41694
  this.unselectAll();
41724
41695
  this.showGroupMenu = false;
41725
41696
  this.showGroupEditMenuButtons = false;
41697
+ if (this.userIsGrouping) {
41698
+ // When the user was grouping, let everything know that we stopped with that aswell
41699
+ this._messageService.emit(MessageType.CancelGroupObject);
41700
+ }
41726
41701
  }
41727
41702
  updateSelectedObjectHud() {
41728
41703
  this._hudService.updateSelectedItemHud();
@@ -44462,7 +44437,7 @@ class ThreedselectorComponent {
44462
44437
  get loadConfigurator() {
44463
44438
  return this._loadConfigurator;
44464
44439
  }
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) {
44440
+ 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
44441
  this.screenSizeService = screenSizeService;
44467
44442
  this._dialog = _dialog;
44468
44443
  this._appService = _appService;
@@ -44491,6 +44466,8 @@ class ThreedselectorComponent {
44491
44466
  this._lightPresetService = _lightPresetService;
44492
44467
  this._variationService = _variationService;
44493
44468
  this._configuringService = _configuringService;
44469
+ this._configuratorEventService = _configuratorEventService;
44470
+ this._changeDetector = _changeDetector;
44494
44471
  this.iconName = IconName;
44495
44472
  this.customizeButtonClicked = new EventEmitter();
44496
44473
  this.selections = [];
@@ -44515,6 +44492,7 @@ class ThreedselectorComponent {
44515
44492
  this.showProgressText = true; // Show/Hide progress text
44516
44493
  this.showLoaderBar = false;
44517
44494
  this.showFullConfiguration = false;
44495
+ this.firstBuild = false;
44518
44496
  this._loadConfigurator = false;
44519
44497
  this._skuAlreadySet = false;
44520
44498
  this._itemsFromScratch = [];
@@ -44527,9 +44505,11 @@ class ThreedselectorComponent {
44527
44505
  this._presetsService.register(this);
44528
44506
  }
44529
44507
  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()),
44508
+ 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) => {
44509
+ this.handleBuildResult(result);
44510
+ }), 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
44511
  // this._appService.skuSet.subscribe(sku => this._handleSkuSet(sku)),
44532
- 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) => {
44512
+ 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._messageService.subscribe(MessageType.UserModelUploaded, (data) => this._addUploadedItem(data)), this.screenSizeService.screenSizeChanged.subscribe((info) => {
44533
44513
  this.shouldShowLabel = info.isPhoneSize;
44534
44514
  }), this._messageService.subscribe(MessageType.ChangeArticleConfigurationType, (showFullConfig) => this._setTemplateType(showFullConfig)), this._settingsService.settingsLoaded.subscribe((loaded) => {
44535
44515
  if (loaded) {
@@ -44605,6 +44585,9 @@ class ThreedselectorComponent {
44605
44585
  getObjects() {
44606
44586
  // return {furniture: this.threeService.model.saveFurniture()};
44607
44587
  }
44588
+ async saveObjects() {
44589
+ return Promise.resolve();
44590
+ }
44608
44591
  objectSelected(object) {
44609
44592
  this._removeCustomButtons();
44610
44593
  this.showCustomizeButtons = true;
@@ -44665,6 +44648,9 @@ class ThreedselectorComponent {
44665
44648
  }
44666
44649
  // NEW CONFIGURATOR
44667
44650
  async handleBuildResult(result) {
44651
+ if (!result || this.firstBuild || !this._sceneService.scene) {
44652
+ return;
44653
+ }
44668
44654
  const customFloorGroupResult = new CustomFloorGroupResult();
44669
44655
  const metaData = this.setMetadateFromObject(result);
44670
44656
  if (result && !isFloorDecoration(result.placement)) {
@@ -44675,14 +44661,20 @@ class ThreedselectorComponent {
44675
44661
  metaData.externalSettings = this._externalSourceData;
44676
44662
  this._externalSourceData = undefined; // clear it.
44677
44663
  }
44678
- const item = this._buildFurnitureService.currentActiveService.createConfigurableItemWithObject(result.instanceId, metaData, result.object);
44679
- const replaceCurrentItem = await this._buildFurnitureService.currentActiveService.replaceCurrentItem(item, metaData, false);
44664
+ let furnitureToAdd;
44665
+ if (!result.configurable) { // simple article
44666
+ furnitureToAdd = await this._buildFurnitureService.currentActiveService.createSimple3DModel(metaData, result.object);
44667
+ }
44668
+ else {
44669
+ const item = this._buildFurnitureService.currentActiveService.createConfigurableItemWithObject(result.instanceId, metaData, result.object);
44670
+ furnitureToAdd = await this._buildFurnitureService.currentActiveService.replaceCurrentItem(item, metaData, false);
44671
+ }
44680
44672
  customFloorGroupResult.metaData = metaData;
44681
44673
  customFloorGroupResult.instanceId = result.instanceId;
44682
44674
  customFloorGroupResult.name = result.articleName;
44683
44675
  customFloorGroupResult.sku = result.sku;
44684
44676
  customFloorGroupResult.resultType = result.resultType;
44685
- customFloorGroupResult.furniture = replaceCurrentItem;
44677
+ customFloorGroupResult.furniture = furnitureToAdd;
44686
44678
  customFloorGroupResult.errorMessages = result.errorMessages;
44687
44679
  customFloorGroupResult.showErrors = false;
44688
44680
  customFloorGroupResult.toggle = false;
@@ -44693,10 +44685,12 @@ class ThreedselectorComponent {
44693
44685
  if (customFloorGroupResult.furniture) {
44694
44686
  const closestWall = this._wallService.getClosestWall(customFloorGroupResult.furniture.position.x, customFloorGroupResult.furniture.position.z);
44695
44687
  if (customFloorGroupResult.furniture instanceof CustomWallFloorItem && customFloorGroupResult.furniture.onWall) {
44688
+ this._itemService.removeItem(customFloorGroupResult.furniture, false, false);
44696
44689
  customFloorGroupResult.furniture.placeOnWall(closestWall);
44697
44690
  customFloorGroupResult.furniture.moveFromFloorToWall();
44698
44691
  }
44699
44692
  else if (customFloorGroupResult.furniture instanceof WallItem && !(customFloorGroupResult.furniture instanceof CustomWallFloorItem)) {
44693
+ this._itemService.removeItem(customFloorGroupResult.furniture, false, false);
44700
44694
  customFloorGroupResult.furniture.placeOnWall(closestWall);
44701
44695
  }
44702
44696
  if (customFloorGroupResult.metaData.configurable) {
@@ -44716,7 +44710,7 @@ class ThreedselectorComponent {
44716
44710
  this._sceneService.needsRender = true;
44717
44711
  }
44718
44712
  else if (result.resultType === ResultType.NeedsUserInput) {
44719
- this._configuringService.isConfiguring = true;
44713
+ // this._configuringService.isConfiguring = true;
44720
44714
  }
44721
44715
  else if (result.resultType === ResultType.BuildFromScratch) {
44722
44716
  // if (this._loadedFromPreset) { // start configuring when loading is done
@@ -44766,7 +44760,7 @@ class ThreedselectorComponent {
44766
44760
  this._messageBus.emit(MessageType.FinishedIOneFurnitureBuild);
44767
44761
  }
44768
44762
  setMetadateFromObject(result) {
44769
- if (result.originalMetadata) {
44763
+ if (result && result.originalMetadata) {
44770
44764
  const metadata = Object.assign({}, result.originalMetadata);
44771
44765
  metadata.decos = result.decos;
44772
44766
  metadata.selections = result.selections;
@@ -44804,10 +44798,10 @@ class ThreedselectorComponent {
44804
44798
  }
44805
44799
  }
44806
44800
  showConfiguratorChange(show) {
44807
- this._configuringService.isConfiguring = show;
44808
44801
  this.loadConfigurator = show;
44809
44802
  }
44810
44803
  async loadFurnitureFromSku(position, sku, settings) {
44804
+ this.firstBuild = true;
44811
44805
  const configuratorSettings = this._settingsService.settings.projectSettings ?
44812
44806
  this._settingsService.settings.projectSettings : this._settingsService.settings;
44813
44807
  const configuratorSettingsClone = Object.assign({}, configuratorSettings);
@@ -44815,27 +44809,33 @@ class ThreedselectorComponent {
44815
44809
  if (configuratorExternalSourceId) {
44816
44810
  if (settings.hasOwnProperty('settings')) {
44817
44811
  const settingsInterface = settings['settings'];
44812
+ configuratorSettingsClone.externalSourceId = configuratorExternalSourceId;
44818
44813
  configuratorSettingsClone.username = settingsInterface.username;
44819
- configuratorSettingsClone.password = settingsInterface.password;
44820
44814
  configuratorSettingsClone.url = settingsInterface.url;
44821
44815
  configuratorSettingsClone.version = settingsInterface.version;
44822
44816
  configuratorSettingsClone.schema = settingsInterface.schema;
44817
+ configuratorSettingsClone.mainUrl = settings.mainUrl;
44818
+ configuratorSettingsClone.mainSchema = settings.mainSchema;
44819
+ configuratorSettingsClone.mainVersion = settings.mainVersion;
44823
44820
  // Set here to just save it, when it comes back from the configurator, we need to add it to the metadata.
44824
44821
  this._externalSourceData = settings;
44825
44822
  }
44826
44823
  }
44827
44824
  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);
44825
+ this._initConfigurator(configuratorSettingsClone, sku, !!configuratorExternalSourceId);
44826
+ // await this._configuringService.init(configuratorSettingsClone);
44827
+ // const furnitureData: ConfigurationResultObject = new ConfigurationResultObject();
44828
+ // furnitureData.sku = sku;
44829
+ // this._configuringService.isConfiguring = false;
44830
+ // await this._configuringService.configure(furnitureData);
44833
44831
  this._startPosition = position;
44834
44832
  this.loadConfigurator = true;
44835
- return this.handleBuildResult(this._configuringService.buildResult);
44833
+ this._changeDetector.detectChanges();
44834
+ return this._waitForBuildToFinish(); // handleBuildResult(this._configuringService.buildResult);
44836
44835
  }
44837
44836
  async configureFurniture(object) {
44838
44837
  if (object instanceof Item) {
44838
+ this._resetConfigurator();
44839
44839
  const configuratorExternalSourceId = object.metadata.externalSettings && object.metadata.externalSettings.externalSourceId ?
44840
44840
  object.metadata.externalSettings.externalSourceId : undefined;
44841
44841
  const configuratorSettingsClone = await this._setSourceSettings(configuratorExternalSourceId);
@@ -44843,16 +44843,47 @@ class ThreedselectorComponent {
44843
44843
  this._externalSourceData = object.metadata.externalSettings; // set it so we can restore them with the new config.
44844
44844
  }
44845
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);
44846
+ // await this._configuringService.init(configuratorSettingsClone);
44847
+ this._initConfigurator(configuratorSettingsClone, object.metadata.itemIdentifier, !!configuratorExternalSourceId, object.metadata.itemId);
44848
+ // const furnitureData: ConfigurationResultObject = new ConfigurationResultObject();
44849
+ // furnitureData.sku = object.metadata.itemIdentifier;
44850
+ // furnitureData.instanceId = object.metadata.itemId;
44851
+ // this._configuringService.isConfiguring = true;
44852
+ // await this._configuringService.configure(furnitureData);
44852
44853
  this._loadFurnitureService.currentActiveService.configurationDirty = true;
44853
44854
  this.loadConfigurator = true;
44854
44855
  }
44855
44856
  }
44857
+ _initConfigurator(settings, sku, external, instanceId) {
44858
+ this.configuratorSettings = this._prepareSettings(settings, external);
44859
+ this.configuratorSku = sku;
44860
+ this.configuratorInstanceId = instanceId;
44861
+ }
44862
+ _prepareSettings(settings, external = false) {
44863
+ if (external) {
44864
+ // no pre-defined stuff for external sources
44865
+ settings.password = undefined;
44866
+ settings.dataSessionId = undefined;
44867
+ settings.sessionId = undefined;
44868
+ settings.getAccessTokenFunction = undefined;
44869
+ }
44870
+ return settings;
44871
+ }
44872
+ _resetConfigurator() {
44873
+ this.configuratorSettings = undefined;
44874
+ this.configuratorSku = undefined;
44875
+ this.configuratorInstanceId = undefined;
44876
+ this.loadConfigurator = false;
44877
+ this.firstBuild = false;
44878
+ }
44879
+ _waitForBuildToFinish() {
44880
+ return new Promise((resolve, reject) => {
44881
+ this._configuratorEventService.buildFinished.pipe(filter$1(value => value !== undefined && value !== null), take(1)).subscribe((result) => {
44882
+ this._resetConfigurator();
44883
+ resolve(this.handleBuildResult(result));
44884
+ });
44885
+ });
44886
+ }
44856
44887
  async _setSourceSettings(configuratorExternalSourceId) {
44857
44888
  const configuratorSettings = this._settingsService.settings.projectSettings ?
44858
44889
  this._settingsService.settings.projectSettings : this._settingsService.settings;
@@ -44877,7 +44908,7 @@ class ThreedselectorComponent {
44877
44908
  return configuratorSettingsClone;
44878
44909
  }
44879
44910
  _closeConfigurator() {
44880
- this._configuringService.isConfiguring = false;
44911
+ // this._configuringService.isConfiguring = false;
44881
44912
  this.loadConfigurator = false;
44882
44913
  }
44883
44914
  _clearItems() {
@@ -45322,9 +45353,7 @@ class ThreedselectorComponent {
45322
45353
  }
45323
45354
  this._prepareAddButtons();
45324
45355
  }
45325
- if (this._callBackFnWhenBuildFinished && this.standAlone) {
45326
- this._callBackFnWhenBuildFinished(result.furniture);
45327
- }
45356
+ // this.handleBuildResult(result);
45328
45357
  }
45329
45358
  _resetElementPosition() {
45330
45359
  if (this.selectedElement && !this.standAlone) {
@@ -45534,6 +45563,38 @@ class ThreedselectorComponent {
45534
45563
  }
45535
45564
  }*/
45536
45565
  }
45566
+ _addUploadedItem(data) {
45567
+ if (!data) {
45568
+ return;
45569
+ }
45570
+ const result = new ConfigurationResultObject();
45571
+ result.object = data.object;
45572
+ result.placement = data.placement;
45573
+ result.resultType = ResultType.Loaded;
45574
+ const type = itemTypeFromPlacement(result.placement);
45575
+ result.position = isFloorType(type) ? this._bluePrintService.getRoomCenter() : new Vector3();
45576
+ result.originalMetadata = {
45577
+ itemName: data.object.name,
45578
+ itemType: type,
45579
+ configurable: false,
45580
+ ione: false,
45581
+ // rotation?: number | Euler;
45582
+ // scale?: Vector3;
45583
+ // centerPivot?: boolean;
45584
+ thirdPartyModel: true,
45585
+ // canElevate?: boolean;
45586
+ // modelUrl?: string;
45587
+ // scalable?: boolean;
45588
+ // elevation?: number;
45589
+ // elevationFixed?: boolean;
45590
+ // elevationAdjustable?: boolean;
45591
+ canScaleX: true,
45592
+ canScaleY: true,
45593
+ canScaleZ: true,
45594
+ colorable: true
45595
+ };
45596
+ this.handleBuildResult(result);
45597
+ }
45537
45598
  async _handleLoadIOneFurnitureIntoSceneBySKU(sku, settings, position) {
45538
45599
  const toast = new Toast();
45539
45600
  toast.message = 'MODEL_LOADING';
@@ -45544,6 +45605,32 @@ class ThreedselectorComponent {
45544
45605
  if (article.placement === HdecoPlacement.FloorDecoration) {
45545
45606
  this._floorService.selectedFloorArticle = article;
45546
45607
  }
45608
+ if (article.externalCatalogId && article.externalSourceKey) {
45609
+ try {
45610
+ sku = article.externalSourceKey;
45611
+ const catalogDefinition = this._connectorAdapterService.getCatalogDefinition(article.externalCatalogId);
45612
+ const externalSource = this._connectorAdapterService.getExternalSourceFromId(catalogDefinition.externalSourceId);
45613
+ const params = await this._connectorAdapterService.getPublicParams(externalSource.url, parseInt(externalSource.schema));
45614
+ const homeDecoSettings = Object.assign(JSON.parse(params.homeDecoSettings ? params.homeDecoSettings : params.catalogSettings), new HomedecoratorSettings());
45615
+ settings = {
45616
+ name: catalogDefinition.name,
45617
+ settings: homeDecoSettings,
45618
+ externalSourceId: externalSource.sourceId,
45619
+ catalogDefinition: catalogDefinition,
45620
+ schema: externalSource.schema,
45621
+ mainUrl: this._settingsService.settings.url,
45622
+ mainSchema: this._settingsService.settings.schema,
45623
+ mainVersion: this._settingsService.settings.version
45624
+ };
45625
+ settings.settings.password = '';
45626
+ settings.settings.username = 'external';
45627
+ }
45628
+ catch (e) {
45629
+ console.error(e);
45630
+ this._messageBus.emit(MessageType.UndefinedErrorOccured);
45631
+ return;
45632
+ }
45633
+ }
45547
45634
  const draggedData = {
45548
45635
  name: sku,
45549
45636
  constructFn: async (pos) => this.loadFurnitureFromSku(pos, sku, settings),
@@ -45570,7 +45657,8 @@ class ThreedselectorComponent {
45570
45657
  async _loadIOneFurnitureFromOriginal(md, pos, rot) {
45571
45658
  const newMetaData = { ...md };
45572
45659
  newMetaData.rotation = new Euler().copy(rot);
45573
- return this._handleLoadAndBuildFurniture(newMetaData, true, false, false, false, false);
45660
+ await this._handleLoadAndBuildFurniture(newMetaData, true, false, false, false, false);
45661
+ return this.handleBuildResult(this._configuringService.buildResult);
45574
45662
  }
45575
45663
  _loadIOneFurnitureFromSku(pos, sku, settings, standAlone = false) {
45576
45664
  const md = {
@@ -45666,17 +45754,18 @@ class ThreedselectorComponent {
45666
45754
  (metadata.modelUrl && !metadata.configurable)) {
45667
45755
  loadFromProject = true;
45668
45756
  }
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;
45757
+ await this._handleLoadAndBuildFurniture(metadata, true, true, true, false, true, false, loadFromProject);
45758
+ // const result: any = await this._handleLoadAndBuildFurniture(
45759
+ // metadata, true, true, true, false, true, false, loadFromProject);
45760
+ // if (item.materialDiff) {
45761
+ // if (result.furniture) {
45762
+ // try {
45763
+ // await MaterialDiffUtils.ApplyMaterialDiff(result.furniture, item.materialDiff);
45764
+ // } catch (e) {
45765
+ // }
45766
+ // }
45767
+ // }
45768
+ // return result;
45680
45769
  }
45681
45770
  async _handleLoadAndBuildFurniture(furnitureData, shouldCopyInstance, looseOriginalConfiguration, fromPreset, standAlone, fromScratch, showErrorDialog = true, loadFromProject = false) {
45682
45771
  this._loadedFromPreset = fromPreset; // Set the flag if it was loaded from a preset.
@@ -45694,7 +45783,7 @@ class ThreedselectorComponent {
45694
45783
  this._externalSourceData = furnitureData.externalSettings; // set it so we can restore them with the new config.
45695
45784
  }
45696
45785
  this._configuringService.scene = this._sceneService.scene;
45697
- await this._configuringService.init(configuratorSettingsClone);
45786
+ // await this._configuringService.init(configuratorSettingsClone);
45698
45787
  const data = new ConfigurationResultObject();
45699
45788
  data.sku = furnitureData.itemIdentifier;
45700
45789
  data.articleName = furnitureData.itemName;
@@ -45714,7 +45803,7 @@ class ThreedselectorComponent {
45714
45803
  data.rotation = furnitureData.rotation;
45715
45804
  data.originalMetadata = furnitureData;
45716
45805
  await this._configuringService.configure(data, shouldCopyInstance, looseOriginalConfiguration, standAlone, fromScratch, fromPreset, loadFromProject);
45717
- this._configuringService.isConfiguring = false;
45806
+ // this._configuringService.isConfiguring = false;
45718
45807
  this.loadConfigurator = true;
45719
45808
  }
45720
45809
  _answerSelected(result) {
@@ -45763,6 +45852,7 @@ class ThreedselectorComponent {
45763
45852
  else {
45764
45853
  this._appStateService.undoDisabled = false;
45765
45854
  this._appStateService.redoDisabled = false;
45855
+ this.loadConfigurator = false;
45766
45856
  }
45767
45857
  this.showAnswers = false;
45768
45858
  this.showSelections = configuringModeChange.configuring || this.standAlone;
@@ -45843,8 +45933,8 @@ class ThreedselectorComponent {
45843
45933
  });
45844
45934
  }
45845
45935
  }
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: [
45936
+ 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 }); }
45937
+ 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
45938
  trigger('showElementToolbar', [
45849
45939
  state('void', style({ opacity: 0 })),
45850
45940
  state('*', style({ opacity: 1 })),
@@ -45862,8 +45952,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
45862
45952
  transition('void => *', animate('500ms ease'))
45863
45953
  ])
45864
45954
  ] /*,
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: [{
45955
+ 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"] }]
45956
+ }], 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
45957
  type: ViewChild,
45868
45958
  args: ['toolbarIconModels', { static: true }]
45869
45959
  }], selectedThreedObjectCustomizationSidebar: [{
@@ -49559,84 +49649,82 @@ class HomedecoratorComponent {
49559
49649
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, deps: [{ token: HomedecoratorAppService }, { token: HomedecoratorConnectorService }, { token: AppStateService }, { token: PresetsService }, { token: ScreenSizeAnalysisService }, { token: i4.MatIconRegistry }, { token: i1$1.DomSanitizer }, { token: MessageBusService }, { token: HomedecoratorService }, { token: HomedecoratorAppEventService, optional: true, skipSelf: true }, { token: HomedecoratorAppEventService, optional: true, self: true }, { token: IntegrationService }, { token: SceneService }, { token: WebWorkerService }], target: i0.ɵɵFactoryTarget.Component }); }
49560
49650
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: HomedecoratorComponent, isStandalone: false, selector: "co-homedecorator", inputs: { generalFilterOrders: "generalFilterOrders", purchaseFilterOrders: "purchaseFilterOrders", logisticsFilterOrders: "logisticsFilterOrders", initCommunication: "initCommunication", projectToLoad: "projectToLoad", settings: "settings" }, host: { listeners: { "document:keyup": "keyup($event)" }, properties: { "class.co-homedecorator": "this.showClass" } }, providers: [
49561
49651
  APPLICATION_SERVICES_PROVIDERS
49562
- ], ngImport: i0, template: `
49563
- @if (loaded) {
49564
- @if (loaded) {
49565
- <div class="viewport">
49566
- <progress-bar></progress-bar>
49567
- <rp-loading-overlay>
49568
- <rp-core3d></rp-core3d>
49569
- <rp-room-planner></rp-room-planner>
49570
- <rp-furniture-manager></rp-furniture-manager>
49571
- <rp-presets [openNewRoomDialog]="!projectToLoad"></rp-presets>
49572
- <rp-threedselector></rp-threedselector>
49573
- <rp-toolbar (externalSave)="handleExternalSave()"></rp-toolbar>
49574
- <rp-product-catalog
49575
- [generalFilterOrders]="generalFilterOrders"
49576
- [purchaseFilterOrders]="purchaseFilterOrders"
49577
- [logisticsFilterOrders]="logisticsFilterOrders"
49578
- ></rp-product-catalog>
49579
- <co-lite-selector></co-lite-selector>
49580
- <rp-help></rp-help>
49581
- </rp-loading-overlay>
49582
- </div>
49583
- }
49584
- <rp-loader [show]="controllerService.shouldShowLoader"></rp-loader>
49585
- @if (shouldShowLandscapeMessage) {
49586
- <div class="mobile-portrait-overlay">
49587
- <!--
49588
- <mat-icon svgIcon="tilt-phone" class="tilt-phone-icon"></mat-icon>
49589
- -->
49590
- <div>
49591
- <!--
49592
- {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}
49593
- -->
49594
- </div>
49595
- </div>
49596
- }
49597
- }
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 }); }
49652
+ ], ngImport: i0, template: `
49653
+ @if (loaded) {
49654
+ @if (loaded) {
49655
+ <div class="viewport">
49656
+ <progress-bar></progress-bar>
49657
+ <rp-loading-overlay>
49658
+ <rp-core3d></rp-core3d>
49659
+ <rp-room-planner></rp-room-planner>
49660
+ <rp-furniture-manager></rp-furniture-manager>
49661
+ <rp-presets [openNewRoomDialog]="!projectToLoad"></rp-presets>
49662
+ <rp-threedselector></rp-threedselector>
49663
+ <rp-toolbar (externalSave)="handleExternalSave()"></rp-toolbar>
49664
+ <rp-product-catalog
49665
+ [generalFilterOrders]="generalFilterOrders"
49666
+ [purchaseFilterOrders]="purchaseFilterOrders"
49667
+ [logisticsFilterOrders]="logisticsFilterOrders"
49668
+ ></rp-product-catalog>
49669
+ <rp-help></rp-help>
49670
+ </rp-loading-overlay>
49671
+ </div>
49672
+ }
49673
+ <rp-loader [show]="controllerService.shouldShowLoader"></rp-loader>
49674
+ @if (shouldShowLandscapeMessage) {
49675
+ <div class="mobile-portrait-overlay">
49676
+ <!--
49677
+ <mat-icon svgIcon="tilt-phone" class="tilt-phone-icon"></mat-icon>
49678
+ -->
49679
+ <div>
49680
+ <!--
49681
+ {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}
49682
+ -->
49683
+ </div>
49684
+ </div>
49685
+ }
49686
+ }
49687
+ `, 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" }], encapsulation: i0.ViewEncapsulation.None }); }
49599
49688
  }
49600
49689
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HomedecoratorComponent, decorators: [{
49601
49690
  type: Component,
49602
49691
  args: [{
49603
49692
  selector: 'co-homedecorator',
49604
- template: `
49605
- @if (loaded) {
49606
- @if (loaded) {
49607
- <div class="viewport">
49608
- <progress-bar></progress-bar>
49609
- <rp-loading-overlay>
49610
- <rp-core3d></rp-core3d>
49611
- <rp-room-planner></rp-room-planner>
49612
- <rp-furniture-manager></rp-furniture-manager>
49613
- <rp-presets [openNewRoomDialog]="!projectToLoad"></rp-presets>
49614
- <rp-threedselector></rp-threedselector>
49615
- <rp-toolbar (externalSave)="handleExternalSave()"></rp-toolbar>
49616
- <rp-product-catalog
49617
- [generalFilterOrders]="generalFilterOrders"
49618
- [purchaseFilterOrders]="purchaseFilterOrders"
49619
- [logisticsFilterOrders]="logisticsFilterOrders"
49620
- ></rp-product-catalog>
49621
- <co-lite-selector></co-lite-selector>
49622
- <rp-help></rp-help>
49623
- </rp-loading-overlay>
49624
- </div>
49625
- }
49626
- <rp-loader [show]="controllerService.shouldShowLoader"></rp-loader>
49627
- @if (shouldShowLandscapeMessage) {
49628
- <div class="mobile-portrait-overlay">
49629
- <!--
49630
- <mat-icon svgIcon="tilt-phone" class="tilt-phone-icon"></mat-icon>
49631
- -->
49632
- <div>
49633
- <!--
49634
- {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}
49635
- -->
49636
- </div>
49637
- </div>
49638
- }
49639
- }
49693
+ template: `
49694
+ @if (loaded) {
49695
+ @if (loaded) {
49696
+ <div class="viewport">
49697
+ <progress-bar></progress-bar>
49698
+ <rp-loading-overlay>
49699
+ <rp-core3d></rp-core3d>
49700
+ <rp-room-planner></rp-room-planner>
49701
+ <rp-furniture-manager></rp-furniture-manager>
49702
+ <rp-presets [openNewRoomDialog]="!projectToLoad"></rp-presets>
49703
+ <rp-threedselector></rp-threedselector>
49704
+ <rp-toolbar (externalSave)="handleExternalSave()"></rp-toolbar>
49705
+ <rp-product-catalog
49706
+ [generalFilterOrders]="generalFilterOrders"
49707
+ [purchaseFilterOrders]="purchaseFilterOrders"
49708
+ [logisticsFilterOrders]="logisticsFilterOrders"
49709
+ ></rp-product-catalog>
49710
+ <rp-help></rp-help>
49711
+ </rp-loading-overlay>
49712
+ </div>
49713
+ }
49714
+ <rp-loader [show]="controllerService.shouldShowLoader"></rp-loader>
49715
+ @if (shouldShowLandscapeMessage) {
49716
+ <div class="mobile-portrait-overlay">
49717
+ <!--
49718
+ <mat-icon svgIcon="tilt-phone" class="tilt-phone-icon"></mat-icon>
49719
+ -->
49720
+ <div>
49721
+ <!--
49722
+ {{'PLEASE_USE_PHONE_IN_LANDSCAPE_MODE' | localize}}
49723
+ -->
49724
+ </div>
49725
+ </div>
49726
+ }
49727
+ }
49640
49728
  `,
49641
49729
  encapsulation: ViewEncapsulation.None,
49642
49730
  providers: [