@colijnit/configurator 261.20.4 → 261.20.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/colijnit-configurator-261.20.6.tgz +0 -0
  2. package/fesm2022/colijnit-configurator.mjs +988 -288
  3. package/fesm2022/colijnit-configurator.mjs.map +1 -1
  4. package/index.d.ts +139 -36
  5. package/lib/components/answers-slideout/style/_layout.scss +2 -2
  6. package/lib/components/configuration-preset/style/_layout.scss +42 -0
  7. package/lib/components/configuration-preset/style/_material-definition.scss +5 -0
  8. package/lib/components/configuration-preset/style/_theme.scss +20 -0
  9. package/lib/components/configuration-preset/style/material.scss +3 -0
  10. package/lib/components/configuration-preset-dialog/style/_layout.scss +82 -0
  11. package/lib/components/configuration-preset-dialog/style/_material-definition.scss +5 -0
  12. package/lib/components/configuration-preset-dialog/style/_theme.scss +7 -0
  13. package/lib/components/configuration-preset-dialog/style/material.scss +3 -0
  14. package/lib/components/product-configurator/style/_layout.scss +4 -0
  15. package/lib/components/product-configurator/style/_material-definition.scss +1 -0
  16. package/lib/components/product-configurator/style/_theme.scss +7 -1
  17. package/lib/components/product-configurator-selector/style/_layout.scss +26 -1
  18. package/lib/components/product-configurator-selector/style/_theme.scss +20 -3
  19. package/lib/components/product-configurator-selector-option-checkbox/style/_theme.scss +3 -0
  20. package/lib/components/product-configurator-selector-option-tile/style/_layout.scss +12 -4
  21. package/lib/components/product-configurator-selector-option-tile/style/_theme.scss +28 -2
  22. package/lib/style/_variables.scss +20 -7
  23. package/package.json +1 -1
@@ -65,6 +65,8 @@ import { trigger, state, style, transition, animate } from '@angular/animations'
65
65
  import * as i4 from '@colijnit/corecomponents_v12';
66
66
  import { LoaderModule, IconModule, CardModule, InputTextModule, ButtonModule, PriceDisplayPipeModule, ImageModule, TooltipDirectiveModule } from '@colijnit/corecomponents_v12';
67
67
  import { ConfigurationDisplayOption } from '@colijnit/configuratorapi/build/enum/refcode/configuration-display-option.enum';
68
+ import * as i7 from '@angular/cdk/clipboard';
69
+ import { CdkCopyToClipboard } from '@angular/cdk/clipboard';
68
70
  import * as i6$1 from '@angular/forms';
69
71
  import { FormsModule } from '@angular/forms';
70
72
  import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js';
@@ -148,6 +150,9 @@ class SettingOptions {
148
150
  useExternalOpenSave = false;
149
151
  floorFadeStart = 2.0;
150
152
  floorFadeEnd = 6.0;
153
+ maxVisibleTiles = 10;
154
+ maxVisibleSmallTiles = 24;
155
+ groupedShowAllBtn = false;
151
156
  }
152
157
 
153
158
  class RenderParameters {
@@ -509,6 +514,7 @@ class AppEventService {
509
514
  articleInfoReceived = new Subject(); // TODO check; _onAnswerInfoReceived has a todo from 17-06-2024
510
515
  onObjectSelected = new Subject();
511
516
  onObjectUnSelected = new Subject();
517
+ changeConfigurationPresetDialogMode = new Subject();
512
518
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
513
519
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppEventService, providedIn: 'root' });
514
520
  }
@@ -951,14 +957,13 @@ class ConfiguratorService {
951
957
  return this._configuratorApi.copyInstance(instanceId, shouldSaveCurrentInstanceId, showLoader);
952
958
  }
953
959
  async saveConfigurations(showLoader = true) {
954
- try {
955
- await this._configuratorApi.saveConfigurations(showLoader).catch((e) => {
956
- return false;
957
- });
958
- }
959
- catch (e) {
960
- }
961
- return true;
960
+ return await this._configuratorApi.saveConfigurations(showLoader);
961
+ }
962
+ async storePreset(instanceId, showLoader = true) {
963
+ return await this._configuratorApi.storePreset(instanceId, showLoader);
964
+ }
965
+ async initForPreset(presetId, goodId, showLoader = true) {
966
+ return await this._configuratorApi.initForPreset(presetId, goodId, showLoader);
962
967
  }
963
968
  async googleTranslateEnabled() {
964
969
  // this should always be fetched from the mainapi from the client
@@ -1399,6 +1404,12 @@ class ConfiguratorConnectorService {
1399
1404
  console.error('error saving configurations');
1400
1405
  }
1401
1406
  }
1407
+ async storePreset(instanceId, showLoader = true) {
1408
+ return this._configuratorService.storePreset(instanceId, showLoader);
1409
+ }
1410
+ async initForPreset(presetId, goodId, showLoader = true) {
1411
+ return this._configuratorService.initForPreset(presetId, goodId, showLoader);
1412
+ }
1402
1413
  async getDefaultLanguage(upId) {
1403
1414
  return await this._configuratorService.getDefaultLanguage(upId);
1404
1415
  }
@@ -9877,6 +9888,7 @@ class BuildFurnitureService extends BuildFurnitureBaseService {
9877
9888
  this.configuratorConnectorService.emptySelections();
9878
9889
  this.full3DObjectToUse.children.forEach(c => c.visible = true);
9879
9890
  result.object = this.full3DObjectToUse;
9891
+ result.resultType = ResultType.Loaded;
9880
9892
  // Scene3DUtil.updatePivot(result.object);
9881
9893
  if (result.default180) {
9882
9894
  result.object.rotation.set(this.defaultRotation.x, this.defaultRotation.y, this.defaultRotation.z);
@@ -10180,11 +10192,6 @@ class LoadFurnitureService extends LoadFurnitureBaseService {
10180
10192
  if (!this.needs3DModel(result.placement)) {
10181
10193
  result.resultType = ResultType.No3DModel;
10182
10194
  }
10183
- if (!result.assetUrl && result.resultType !== ResultType.No3DModel || result.resultType === ResultType.ArticleNotFound) {
10184
- result.errorMessages.push(new ConfiguratorErrorMessage('ARTICLE_NOT_FOUND', 'ARTICLE_NOT_FOUND_DESC'));
10185
- DebugUtils.log('Article not found');
10186
- return Promise.reject(result);
10187
- }
10188
10195
  });
10189
10196
  if (this.article) {
10190
10197
  // Add the data to the result
@@ -12242,6 +12249,7 @@ var IconEnum;
12242
12249
  IconEnum["ArrowTurnRight"] = "arrow_turn_right";
12243
12250
  IconEnum["ArrowTurnRightRegular"] = "arrow_turn_right_regular";
12244
12251
  IconEnum["ArCircle"] = "ar_circle";
12252
+ IconEnum["BarsLightFull"] = "bars_light_full";
12245
12253
  IconEnum["Brush"] = "brush";
12246
12254
  IconEnum["CameraSolid"] = "camera_solid";
12247
12255
  IconEnum["CameraTopdown"] = "camera_topdown";
@@ -12266,6 +12274,7 @@ var IconEnum;
12266
12274
  IconEnum["ConfFrame"] = "conf_frame";
12267
12275
  IconEnum["ConfPlane"] = "conf_plane";
12268
12276
  IconEnum["CopyLight"] = "copy_light";
12277
+ IconEnum["CopyRegularFull"] = "copy_regular_full";
12269
12278
  IconEnum["Couch"] = "couch";
12270
12279
  IconEnum["Cross"] = "cross";
12271
12280
  IconEnum["CubeOutline"] = "cube-outline";
@@ -12278,7 +12287,9 @@ var IconEnum;
12278
12287
  IconEnum["EditButton"] = "edit-button";
12279
12288
  IconEnum["Expand"] = "expand";
12280
12289
  IconEnum["FillDripLight"] = "fill_drip_light";
12290
+ IconEnum["FloppyDiskLightFull"] = "floppy_disk_light_full";
12281
12291
  IconEnum["Flower"] = "flower";
12292
+ IconEnum["FolderOpenLightFull"] = "folder_open_light_full";
12282
12293
  IconEnum["GaugeHighSolidFull"] = "gauge_high_solid_full";
12283
12294
  IconEnum["GaugeLowSolidFull"] = "gauge_low_solid_full";
12284
12295
  IconEnum["GaugeMaxSolidFull"] = "gauge_max_solid_full";
@@ -12332,6 +12343,7 @@ var IconEnum;
12332
12343
  IconEnum["WandMagicSparkles"] = "wand_magic_sparkles";
12333
12344
  IconEnum["WifiSolidFull"] = "wifi_solid_full";
12334
12345
  IconEnum["XmarkLight"] = "xmark_light";
12346
+ IconEnum["XmarkLightFull"] = "xmark_light_full";
12335
12347
  IconEnum["XmarkRegular"] = "xmark_regular";
12336
12348
  })(IconEnum || (IconEnum = {}));
12337
12349
 
@@ -12354,6 +12366,7 @@ const IconSvg = {
12354
12366
  "arrow_turn_right": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M379.3 363.3c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L457.4 240 80 240c-26.5 0-48 21.5-48 48l0 176c0 8.8-7.2 16-16 16s-16-7.2-16-16L0 288c0-44.2 35.8-80 80-80l377.4 0L356.7 107.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l128 128c6.2 6.2 6.2 16.4 0 22.6l-128 128z\"/></svg>",
12355
12367
  "arrow_turn_right_regular": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M377 369c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87L88 248c-22.1 0-40 17.9-40 40l0 168c0 13.3-10.7 24-24 24s-24-10.7-24-24L0 288c0-48.6 39.4-88 88-88l342.1 0-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L505 207c9.4 9.4 9.4 24.6 0 33.9L377 369z\"/></svg>",
12356
12368
  "ar_circle": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M25,11A14,14,0,1,1,11,25,14,14,0,0,1,25,11m0-1A15,15,0,1,0,40,25,15,15,0,0,0,25,10Z\" fill=\"#484f60\"/><path d=\"M23.23,30.1l-.85-2.2H18.53l-.85,2.2H15.5l4-10.2h2l4,10.2Zm-2.77-7.16-1.15,3h2.3Z\" fill=\"#484f60\"/><path d=\"M33.92,23.29c0,1.63-.58,2.69-1.74,3.16L34.5,30.1H32l-2-3.25H28.53V30.1H26.48V19.9H30a4.65,4.65,0,0,1,3,.8A3.29,3.29,0,0,1,33.92,23.29ZM31.45,24.5a1.64,1.64,0,0,0,.39-1.21,1.38,1.38,0,0,0-.4-1.13,2.35,2.35,0,0,0-1.38-.3H28.53v3H30A2,2,0,0,0,31.45,24.5Z\" fill=\"#484f60\"/></svg>",
12369
+ "bars_light_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M96 144C96 135.2 103.2 128 112 128L528 128C536.8 128 544 135.2 544 144C544 152.8 536.8 160 528 160L112 160C103.2 160 96 152.8 96 144zM96 320C96 311.2 103.2 304 112 304L528 304C536.8 304 544 311.2 544 320C544 328.8 536.8 336 528 336L112 336C103.2 336 96 328.8 96 320zM544 496C544 504.8 536.8 512 528 512L112 512C103.2 512 96 504.8 96 496C96 487.2 103.2 480 112 480L528 480C536.8 480 544 487.2 544 496z\"/></svg>",
12357
12370
  "brush": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M28.16,26a9.71,9.71,0,0,1-4-3.66A.88.88,0,0,0,22.92,22c-1.08.48-2.19.92-3.27,1.43-3.71,1.74-6,4.5-6.23,8.75-.17,2.75-.89,5.32-3.42,7.25,1.18,0,2.12,0,3.05,0,.73,0,1.46-.07,2.18-.12a10.82,10.82,0,0,0,4.86-3.38c1.31-1.61,3.14-3.58,3.95-5.49l-.08.38a22.78,22.78,0,0,1-3.09,5.74A11.79,11.79,0,0,1,18.13,39a22.35,22.35,0,0,0,4.29-1A8.2,8.2,0,0,0,28.06,32c.38-1.62.44-3.31.66-5A1,1,0,0,0,28.16,26Z\" fill=\"#484f60\"/><path d=\"M26.23,20.43l6.57-9.32a1.23,1.23,0,0,1,1.87-.18l4.94,4.7a1.24,1.24,0,0,1-.11,1.9l-9.15,6.78a1.25,1.25,0,0,1-1.58-.08L26.4,22.06A1.23,1.23,0,0,1,26.23,20.43Z\" fill=\"#484f60\"/></svg>",
12358
12371
  "camera_solid": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M149.1 64.8L138.7 96 64 96C28.7 96 0 124.7 0 160L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-256c0-35.3-28.7-64-64-64l-74.7 0L362.9 64.8C356.4 45.2 338.1 32 317.4 32L194.6 32c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"/></svg>",
12359
12372
  "camera_topdown": "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 600 600\" style=\"enable-background:new 0 0 600 600;\" ><g><path d=\"M198.4,473.9c-12.3,0-23.9-6.8-29.4-17.4c-2.4-4.6-3.7-9.8-3.7-15c0-6.7,2-13.1,5.9-18.6l57.5-82.1c3.7-5.2,9.7-8.4,16.1-8.4c4,0,7.9,1.2,11.2,3.5c8.8,6.2,11,18.4,4.8,27.3l-49.9,71.4h178.2l-50-71.4c-3.2-4.7-4.3-10.5-3-16c1.1-5,4-9.1,8.1-11.5c3.3-2.2,7.1-3.4,11-3.4c6.4,0,12.4,3.1,16.1,8.4l57.6,82.1c6.9,9.9,7.8,22.7,2.1,33.6c-5.6,10.8-16.7,17.4-28.7,17.4H198.4z M219.9,320.5c-32,0-58-26-58-58V58c0-32,26-58,58-58h160.2c32,0,58,26,58,58v204.6c0,32-26,58-58,58H219.9z M219.9,39.3c-10.3,0-18.7,8.4-18.7,18.7v204.6c0,10.3,8.4,18.7,18.7,18.7h160.2c10.3,0,18.7-8.4,18.7-18.7V58c0-10.3-8.4-18.7-18.7-18.7H219.9z\"/><path d=\"M300,600c-4,0-7.2-3.2-7.2-7.2v-85.3c0-4,3.2-7.2,7.2-7.2s7.2,3.2,7.2,7.2v85.3C307.2,596.8,304,600,300,600z\"/><path d=\"M179.7,591.6c-1.5,0-2.9-0.5-4.1-1.3c-1.6-1.1-2.6-2.8-3-4.6c-0.3-1.9,0.1-3.8,1.2-5.4l50.6-77c1.3-1.9,3.5-3,5.9-3c1.5,0,2.9,0.5,4.1,1.3c1.6,1.1,2.6,2.8,3,4.6c0.3,1.9-0.1,3.8-1.2,5.4l-50.6,77C184.2,590.5,182,591.6,179.7,591.6z\"/><path d=\"M420.3,591.6c-2.3,0-4.5-1.1-5.9-3l-50.6-77c-2.3-3.3-1.5-7.7,1.8-10c1.2-0.9,2.6-1.3,4.1-1.3c2.3,0,4.5,1.1,5.9,3l50.5,76.9l0,0.1c1.1,1.6,1.5,3.5,1.2,5.4c-0.3,1.9-1.4,3.5-3,4.6C423.2,591.2,421.8,591.6,420.3,591.6z\"/><path d=\"M375.9,65v38.7c0,1.5-1.2,2.8-2.8,2.8h-19.9c-1.5,0-2.8-1.2-2.8-2.8V65c0-1.5,1.2-2.8,2.8-2.8h19.9C374.6,62.2,375.9,63.5,375.9,65z\"/></g></svg>",
@@ -12378,6 +12391,7 @@ const IconSvg = {
12378
12391
  "conf_frame": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><title>conf_frame</title><path d=\"M37,11.5,38.5,10h-27V40L13,38.5v-27H37Z\" fill=\"#484f60\"/><g opacity=\"0.25\"><rect x=\"14.5\" y=\"13\" width=\"21\" height=\"24\" fill=\"#484f60\"/></g><polygon points=\"18.27 15.01 20.28 13 14.5 13 14.5 18.78 16.51 16.77 20.24 20.5 22 18.74 18.27 15.01\" fill=\"#484f60\"/></svg>",
12379
12392
  "conf_plane": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><title>conf_plane</title><g opacity=\"0.25\"><path d=\"M37,11.5,38.5,10h-27V40L13,38.5v-27H37Z\" fill=\"#484f60\"/></g><rect x=\"14.5\" y=\"13\" width=\"21\" height=\"24\" fill=\"#484f60\"/><polygon points=\"19.26 16 17.5 17.76 21.23 21.49 19.22 23.5 25 23.5 25 17.72 22.99 19.73 19.26 16\" fill=\"#fff\"/></svg>",
12380
12393
  "copy_light": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path d=\"M384 352l-160 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l108.1 0c4.2 0 8.3 1.7 11.3 4.7l67.9 67.9c3 3 4.7 7.1 4.7 11.3L416 320c0 17.7-14.3 32-32 32zM433.9 81.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1L224 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-204.1c0-12.7-5.1-24.9-14.1-33.9zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64l0-32-32 0 0 32c0 17.7-14.3 32-32 32L64 480c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0 0-32-64 0z\"/></svg>",
12394
+ "copy_regular_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M480 400L288 400C279.2 400 272 392.8 272 384L272 128C272 119.2 279.2 112 288 112L421.5 112C425.7 112 429.8 113.7 432.8 116.7L491.3 175.2C494.3 178.2 496 182.3 496 186.5L496 384C496 392.8 488.8 400 480 400zM288 448L480 448C515.3 448 544 419.3 544 384L544 186.5C544 169.5 537.3 153.2 525.3 141.2L466.7 82.7C454.7 70.7 438.5 64 421.5 64L288 64C252.7 64 224 92.7 224 128L224 384C224 419.3 252.7 448 288 448zM160 192C124.7 192 96 220.7 96 256L96 512C96 547.3 124.7 576 160 576L352 576C387.3 576 416 547.3 416 512L416 496L368 496L368 512C368 520.8 360.8 528 352 528L160 528C151.2 528 144 520.8 144 512L144 256C144 247.2 151.2 240 160 240L176 240L176 192L160 192z\"/></svg>",
12381
12395
  "couch": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><path d=\"M448 64c53 0 96 43 96 96l0 37.5c10-3.5 20.8-5.5 32-5.5l0-32c0-70.7-57.3-128-128-128L192 32C121.3 32 64 89.3 64 160l0 32c11.2 0 22 1.9 32 5.5L96 160c0-53 43-96 96-96l256 0zM96 320l0 96 0 16c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16l0-144c0-17.7 14.3-32 32-32s32 14.3 32 32l0 32zM80 480c20.9 0 38.7-13.4 45.3-32l389.5 0c6.6 18.6 24.4 32 45.3 32l32 0c26.5 0 48-21.5 48-48l0-144c0-35.3-28.7-64-64-64s-64 28.7-64 64l-384 0c0-35.3-28.7-64-64-64s-64 28.7-64 64L0 432c0 26.5 21.5 48 48 48l32 0zm48-64l0-96 384 0 0 96-384 0zm416 16l0-16 0-96 0-32c0-17.7 14.3-32 32-32s32 14.3 32 32l0 144c0 8.8-7.2 16-16 16l-32 0c-8.8 0-16-7.2-16-16z\"/></svg>",
12382
12396
  "cross": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><polygon points=\"35.35 15.52 34.65 14.81 25 24.46 15.35 14.81 14.65 15.52 24.29 25.17 14.65 34.81 15.35 35.52 25 25.87 34.65 35.52 35.35 34.81 25.71 25.17 35.35 15.52\" fill=\"#484f60\"/></svg>",
12383
12397
  "cube-outline": "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z\" /></svg>",
@@ -12390,7 +12404,9 @@ const IconSvg = {
12390
12404
  "edit-button": "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 43 43\" ><g><rect x=\"13.011\" y=\"20.038\" transform=\"matrix(0.7071 -0.7071 0.7071 0.7071 -8.7899 19.4259)\" fill=\"#FFFFFF\" width=\"12.085\" height=\"0.57\"/><rect x=\"19.341\" y=\"16.641\" transform=\"matrix(0.7072 0.707 -0.707 0.7072 22.3084 -8.4979)\" fill=\"#FFFFFF\" width=\"4.145\" height=\"12.086\"/><path fill=\"#FFFFFF\" d=\"M30.839,14.931l-2.772-2.769c-0.348-0.348-0.91-0.348-1.257,0L25.9,13.069l4.032,4.028l0.905-0.908C31.187,15.841,31.187,15.28,30.839,14.931z\"/><rect x=\"23.68\" y=\"15.743\" transform=\"matrix(-0.7072 -0.7071 0.7071 -0.7072 33.6426 46.8755)\" fill=\"#FFFFFF\" width=\"5.696\" height=\"1.456\"/><polygon fill=\"#FFFFFF\" points=\"11.9,31.099 13.546,30.663 12.337,29.456 \"/><polygon fill=\"#FFFFFF\" points=\"13.579,25.643 12.711,28.079 14.921,30.29 17.356,29.421 \"/></g></svg>",
12391
12405
  "expand": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path d=\"M144 32c8.8 0 16 7.2 16 16s-7.2 16-16 16L32 64l0 112c0 8.8-7.2 16-16 16s-16-7.2-16-16L0 48c0-8.8 7.2-16 16-16l128 0zM0 336c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112 112 0c8.8 0 16 7.2 16 16s-7.2 16-16 16L16 480c-8.8 0-16-7.2-16-16L0 336zM432 32c8.8 0 16 7.2 16 16l0 128c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-112L304 64c-8.8 0-16-7.2-16-16s7.2-16 16-16l128 0zM416 336c0-8.8 7.2-16 16-16s16 7.2 16 16l0 128c0 8.8-7.2 16-16 16l-128 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l112 0 0-112z\"/></svg>",
12392
12406
  "fill_drip_light": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path d=\"M36.7 4.7c6.2-6.2 16.4-6.2 22.6 0l97.4 97.4 64.4-64.4c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L134.1 124.7 36.7 27.3c-6.2-6.2-6.2-16.4 0-22.6zm208 230.6l-88-88L53.3 250.7C42.8 261.2 36.7 274.4 35 288l397 0 19.7-19.7c15.6-15.6 15.6-40.9 0-56.6L300.3 60.3c-15.6-15.6-40.9-15.6-56.6 0l-64.4 64.4 88 88c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0zM39.2 320c3.1 7.7 7.8 15 14.1 21.3L170.7 458.7c25 25 65.5 25 90.5 0L400 320 39.2 320zM544 448s0 0 0 0c0 0 0 0 0 0c0-.1-.1-1.2-.6-3.4c-.6-2.4-1.5-5.4-2.8-9.1c-2.7-7.4-6.8-16.2-11.7-25.8c-5.2-10.2-11.2-20.6-16.9-30.3c-5.8 9.7-11.7 20.1-16.9 30.3c-4.9 9.6-8.9 18.4-11.7 25.8c-1.4 3.7-2.3 6.7-2.8 9.1c-.5 2.2-.6 3.3-.6 3.4c0 0 0 0 0 0c0 17.7 14.3 32 32 32s32-14.3 32-32zm32 0c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448z\"/></svg>",
12407
+ "floppy_disk_light_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M160 128C142.3 128 128 142.3 128 160L128 480C128 497.7 142.3 512 160 512L480 512C497.7 512 512 497.7 512 480L512 237.3C512 228.8 508.6 220.7 502.6 214.7L425.4 137.4C422.7 134.7 419.5 132.5 416 130.9L416 240C416 257.7 401.7 272 384 272L224 272C206.3 272 192 257.7 192 240L192 128L160 128zM224 128L224 240L384 240L384 128L224 128zM96 160C96 124.7 124.7 96 160 96L402.7 96C419.7 96 436 102.7 448 114.7L525.3 192C537.3 204 544 220.3 544 237.3L544 480C544 515.3 515.3 544 480 544L160 544C124.7 544 96 515.3 96 480L96 160zM352 384C352 366.3 337.7 352 320 352C302.3 352 288 366.3 288 384C288 401.7 302.3 416 320 416C337.7 416 352 401.7 352 384zM256 384C256 348.7 284.7 320 320 320C355.3 320 384 348.7 384 384C384 419.3 355.3 448 320 448C284.7 448 256 419.3 256 384z\"/></svg>",
12393
12408
  "flower": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M200 0c-48.6 0-88 39.4-88 88c0 21.3 7.6 40.8 20.1 56c-12.6 15.2-20.1 34.7-20.1 56c0 48.6 39.4 88 88 88c14.4 0 28-3.5 40-9.6l0 118.2C200.8 331.5 129.5 288 48 288l-20 0c-15.5 0-28 12.5-28 28C0 424.2 87.8 512 196 512l44 0 16 0 16 0 44 0c108.2 0 196-87.8 196-196c0-15.5-12.5-28-28-28l-20 0c-81.5 0-152.8 43.5-192 108.6l0-118.2c12 6.1 25.6 9.6 40 9.6c48.6 0 88-39.4 88-88c0-21.3-7.6-40.8-20.1-56c12.6-15.2 20.1-34.7 20.1-56c0-48.6-39.4-88-88-88c-21.3 0-40.8 7.6-56 20.1C240.8 7.6 221.3 0 200 0zM144 88c0-30.9 25.1-56 56-56c17.6 0 33.3 8.1 43.6 20.8c3 3.8 7.6 5.9 12.4 5.9s9.4-2.2 12.4-5.9C278.7 40.1 294.4 32 312 32c30.9 0 56 25.1 56 56c0 17.6-8.1 33.3-20.8 43.6c-3.8 3-5.9 7.6-5.9 12.4s2.2 9.4 5.9 12.4c12.7 10.3 20.8 26 20.8 43.6c0 30.9-25.1 56-56 56c-17.6 0-33.3-8.1-43.6-20.8c-3-3.8-7.6-5.9-12.4-5.9s-9.4 2.2-12.4 5.9c-10.3 12.7-26 20.8-43.6 20.8c-30.9 0-56-25.1-56-56c0-17.6 8.1-33.3 20.8-43.6c3.8-3 5.9-7.6 5.9-12.4s-2.2-9.4-5.9-12.4C152.1 121.3 144 105.6 144 88zM32 320l16 0c95.1 0 174.1 69.2 189.3 160L196 480c-89.2 0-161.8-71.3-164-160zM480 320c-2.1 88.7-74.7 160-164 160l-41.3 0c15.2-90.8 94.2-160 189.3-160l16 0zM288 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/></svg>",
12409
+ "folder_open_light_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M129.5 480C118.7 480 111 469.5 114.2 459.2L164.2 299.2C166.3 292.5 172.5 288 179.5 288L559 288C569.8 288 577.5 298.5 574.3 308.8L524.3 468.8C522.1 475.5 516 480 509 480L129.5 480zM256.2 512L509 512C530 512 548.6 498.4 554.8 478.3L604.8 318.3C614.5 287.4 591.4 256 559 256L179.6 256C158.6 256 140 269.6 133.8 289.7L96.2 409.6L96.2 160C96.2 142.3 110.5 128 128.2 128L266.9 128C273.8 128 280.6 130.2 286.1 134.4L324.5 163.2C335.6 171.5 349.1 176 362.9 176L480.2 176C497.9 176 512.2 190.3 512.2 208L544.2 208C544.2 172.7 515.5 144 480.2 144L362.9 144C356 144 349.2 141.8 343.7 137.6L305.3 108.8C294.2 100.5 280.8 96 266.9 96L128.2 96C92.9 96 64.2 124.7 64.2 160L64.2 448C64.2 483.3 92.9 512 128.2 512L256.2 512z\"/></svg>",
12394
12410
  "gauge_high_solid_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320zM352 160C352 142.3 337.7 128 320 128C302.3 128 288 142.3 288 160C288 177.7 302.3 192 320 192C337.7 192 352 177.7 352 160zM320 480C355.3 480 384 451.3 384 416C384 399.8 378 384.9 368 373.7L437.5 234.8C443.4 222.9 438.6 208.5 426.8 202.6C415 196.7 400.5 201.5 394.6 213.3L325.1 352.2C323.4 352.1 321.7 352 320 352C284.7 352 256 380.7 256 416C256 451.3 284.7 480 320 480zM240 208C240 190.3 225.7 176 208 176C190.3 176 176 190.3 176 208C176 225.7 190.3 240 208 240C225.7 240 240 225.7 240 208zM160 352C177.7 352 192 337.7 192 320C192 302.3 177.7 288 160 288C142.3 288 128 302.3 128 320C128 337.7 142.3 352 160 352zM512 320C512 302.3 497.7 288 480 288C462.3 288 448 302.3 448 320C448 337.7 462.3 352 480 352C497.7 352 512 337.7 512 320z\"/></svg>",
12395
12411
  "gauge_low_solid_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320zM352 160C352 142.3 337.7 128 320 128C302.3 128 288 142.3 288 160C288 177.7 302.3 192 320 192C337.7 192 352 177.7 352 160zM320 480C355.3 480 384 451.3 384 416C384 380.7 355.3 352 320 352C318.3 352 316.6 352.1 314.9 352.2L245.5 213.3C239.6 201.4 225.2 196.6 213.3 202.6C201.4 208.6 196.6 222.9 202.6 234.8L272 373.7C262 385 256 399.8 256 416C256 451.3 284.7 480 320 480zM192 320C192 302.3 177.7 288 160 288C142.3 288 128 302.3 128 320C128 337.7 142.3 352 160 352C177.7 352 192 337.7 192 320zM480 352C497.7 352 512 337.7 512 320C512 302.3 497.7 288 480 288C462.3 288 448 302.3 448 320C448 337.7 462.3 352 480 352zM464 208C464 190.3 449.7 176 432 176C414.3 176 400 190.3 400 208C400 225.7 414.3 240 432 240C449.7 240 464 225.7 464 208z\"/></svg>",
12396
12412
  "gauge_max_solid_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320zM352 160C352 142.3 337.7 128 320 128C302.3 128 288 142.3 288 160C288 177.7 302.3 192 320 192C337.7 192 352 177.7 352 160zM320 480C355.3 480 384 451.3 384 416C384 412.6 383.7 409.3 383.2 406.1L492.3 340.6C503.7 333.8 507.3 319 500.5 307.7C493.7 296.4 478.9 292.6 467.6 299.5L358.5 364.9C347.8 356.8 334.4 352 320 352C284.7 352 256 380.7 256 416C256 451.3 284.7 480 320 480zM240 208C240 190.3 225.7 176 208 176C190.3 176 176 190.3 176 208C176 225.7 190.3 240 208 240C225.7 240 240 225.7 240 208zM160 352C177.7 352 192 337.7 192 320C192 302.3 177.7 288 160 288C142.3 288 128 302.3 128 320C128 337.7 142.3 352 160 352zM464 208C464 190.3 449.7 176 432 176C414.3 176 400 190.3 400 208C400 225.7 414.3 240 432 240C449.7 240 464 225.7 464 208z\"/></svg>",
@@ -12444,6 +12460,7 @@ const IconSvg = {
12444
12460
  "wand_magic_sparkles": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path d=\"M458.3 34.9c3.1-3.1 8.2-3.1 11.3 0l39.4 39.4c3.1 3.1 3.1 8.2 0 11.3L388.7 206.1l-50.7-50.7L458.3 34.9zM66.9 426.3L315.3 177.9l50.7 50.7L117.7 477.1c-3.1 3.1-8.2 3.1-11.3 0L66.9 437.7c-3.1-3.1-3.1-8.2 0-11.3zM435.7 12.3L44.3 403.7c-15.6 15.6-15.6 40.9 0 56.6l39.4 39.4c15.6 15.6 40.9 15.6 56.6 0L531.7 108.3c15.6-15.6 15.6-40.9 0-56.6L492.3 12.3c-15.6-15.6-40.9-15.6-56.6 0zM128 80c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48zM464 320c-8.8 0-16 7.2-16 16l0 48-48 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 0 48c0 8.8 7.2 16 16 16s16-7.2 16-16l0-48 48 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0 0-48c0-8.8-7.2-16-16-16zM252.2 16c0-6.7-5.4-12.2-12.2-12.2s-12.2 5.4-12.2 12.2l0 19.8-19.8 0c-6.7 0-12.2 5.4-12.2 12.2s5.4 12.2 12.2 12.2l19.8 0 0 19.8c0 6.7 5.4 12.2 12.2 12.2s12.2-5.4 12.2-12.2l0-19.8 19.8 0c6.7 0 12.2-5.4 12.2-12.2s-5.4-12.2-12.2-12.2l-19.8 0 0-19.8z\"/></svg>",
12445
12461
  "wifi_solid_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M320 160C229.1 160 146.8 196 86.3 254.6C73.6 266.9 53.3 266.6 41.1 253.9C28.9 241.2 29.1 220.9 41.8 208.7C113.7 138.9 211.9 96 320 96C428.1 96 526.3 138.9 598.3 208.7C611 221 611.3 241.3 599 253.9C586.7 266.5 566.4 266.9 553.8 254.6C493.2 196 410.9 160 320 160zM272 496C272 469.5 293.5 448 320 448C346.5 448 368 469.5 368 496C368 522.5 346.5 544 320 544C293.5 544 272 522.5 272 496zM200 390.2C188.3 403.5 168.1 404.7 154.8 393C141.5 381.3 140.3 361.1 152 347.8C193 301.4 253.1 272 320 272C386.9 272 447 301.4 488 347.8C499.7 361.1 498.4 381.3 485.2 393C472 404.7 451.7 403.4 440 390.2C410.6 356.9 367.8 336 320 336C272.2 336 229.4 356.9 200 390.2z\"/></svg>",
12446
12462
  "xmark_light": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><path d=\"M324.5 411.1c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L214.6 256 347.1 123.5c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L192 233.4 59.6 100.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L169.4 256 36.9 388.5c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L192 278.6 324.5 411.1z\"/></svg>",
12463
+ "xmark_light_full": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><path d=\"M507.3 155.3C513.5 149.1 513.5 138.9 507.3 132.7C501.1 126.5 490.9 126.5 484.7 132.7L320 297.4L155.3 132.7C149.1 126.5 138.9 126.5 132.7 132.7C126.5 138.9 126.5 149.1 132.7 155.3L297.4 320L132.7 484.7C126.5 490.9 126.5 501.1 132.7 507.3C138.9 513.5 149.1 513.5 155.3 507.3L320 342.6L484.7 507.3C490.9 513.5 501.1 513.5 507.3 507.3C513.5 501.1 513.5 490.9 507.3 484.7L342.6 320L507.3 155.3z\"/></svg>",
12447
12464
  "xmark_regular": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><path d=\"M345 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-119 119L73 103c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l119 119L39 375c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l119-119L311 409c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-119-119L345 137z\"/></svg>"
12448
12465
  };
12449
12466
 
@@ -12860,7 +12877,7 @@ class GoogleTranslateService {
12860
12877
  return input;
12861
12878
  }
12862
12879
  const sourceLang = this._defaultLanguage.toLowerCase();
12863
- const targetLang = this._clientLanguage.toLowerCase();
12880
+ const targetLang = this._clientLanguage ? this._clientLanguage.toLowerCase() : sourceLang;
12864
12881
  const translationList = [input];
12865
12882
  // When we do not need a translation
12866
12883
  if (!input || (sourceLang === targetLang)) {
@@ -14725,6 +14742,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14725
14742
  args: ['class.should-be-hidden']
14726
14743
  }] } });
14727
14744
 
14745
+ var PresetDialogMode;
14746
+ (function (PresetDialogMode) {
14747
+ PresetDialogMode[PresetDialogMode["SAVE"] = 0] = "SAVE";
14748
+ PresetDialogMode[PresetDialogMode["LOAD"] = 1] = "LOAD";
14749
+ })(PresetDialogMode || (PresetDialogMode = {}));
14750
+
14751
+ class ConfigurationPresetComponent {
14752
+ iconService;
14753
+ _appEventService;
14754
+ icons = IconEnum;
14755
+ isSaveLoadMenuOpen = false;
14756
+ showClass() {
14757
+ return true;
14758
+ }
14759
+ closeSaveLoadMenu() {
14760
+ this.isSaveLoadMenuOpen = false;
14761
+ }
14762
+ constructor(iconService, _appEventService) {
14763
+ this.iconService = iconService;
14764
+ this._appEventService = _appEventService;
14765
+ }
14766
+ toggleSaveLoadMenu(event) {
14767
+ event.stopPropagation();
14768
+ this.isSaveLoadMenuOpen = !this.isSaveLoadMenuOpen;
14769
+ }
14770
+ handleSavePresetClicked() {
14771
+ this.isSaveLoadMenuOpen = false;
14772
+ this._appEventService.changeConfigurationPresetDialogMode.next(PresetDialogMode.SAVE);
14773
+ }
14774
+ handleLoadPresetClicked() {
14775
+ this.isSaveLoadMenuOpen = false;
14776
+ this._appEventService.changeConfigurationPresetDialogMode.next(PresetDialogMode.LOAD);
14777
+ }
14778
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetComponent, deps: [{ token: IconCacheService }, { token: AppEventService }], target: i0.ɵɵFactoryTarget.Component });
14779
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: ConfigurationPresetComponent, isStandalone: false, selector: "co-configuration-preset", host: { listeners: { "document:click": "closeSaveLoadMenu()" }, properties: { "class.co-configuration-preset": "this.showClass" } }, ngImport: i0, template: `
14780
+ <div class="save-load-config-wrapper">
14781
+ <div class="open-save-load" (click)="toggleSaveLoadMenu($event)">
14782
+ <co-icon [iconData]="iconService.getIcon(icons.BarsLightFull)"></co-icon>
14783
+ </div>
14784
+ <div
14785
+ class="save-load-configuration-buttons"
14786
+ [class.is-open]="isSaveLoadMenuOpen"
14787
+ (click)="$event.stopPropagation()">
14788
+ <co-button
14789
+ class="preset-button save-preset-button"
14790
+ [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"
14791
+ [label]="'SAVE_CONFIGURATION' | localize"
14792
+ (onClick)="handleSavePresetClicked()">
14793
+ </co-button>
14794
+ <co-button
14795
+ class="preset-button load-preset-button"
14796
+ [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"
14797
+ [label]="'LOAD_CONFIGURATION' | localize"
14798
+ (onClick)="handleLoadPresetClicked()">
14799
+ </co-button>
14800
+ </div>
14801
+ </div>
14802
+
14803
+
14804
+ `, isInline: true, dependencies: [{ kind: "component", type: i4.ButtonComponent, selector: "co-button", inputs: ["label", "iconData", "iconDataRight", "isToggleButton", "isToggled", "hidden", "disabled"], outputs: ["onClick", "clickedWhileDisabled", "isToggledChange"] }, { kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
14805
+ }
14806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetComponent, decorators: [{
14807
+ type: Component,
14808
+ args: [{
14809
+ selector: 'co-configuration-preset',
14810
+ template: `
14811
+ <div class="save-load-config-wrapper">
14812
+ <div class="open-save-load" (click)="toggleSaveLoadMenu($event)">
14813
+ <co-icon [iconData]="iconService.getIcon(icons.BarsLightFull)"></co-icon>
14814
+ </div>
14815
+ <div
14816
+ class="save-load-configuration-buttons"
14817
+ [class.is-open]="isSaveLoadMenuOpen"
14818
+ (click)="$event.stopPropagation()">
14819
+ <co-button
14820
+ class="preset-button save-preset-button"
14821
+ [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"
14822
+ [label]="'SAVE_CONFIGURATION' | localize"
14823
+ (onClick)="handleSavePresetClicked()">
14824
+ </co-button>
14825
+ <co-button
14826
+ class="preset-button load-preset-button"
14827
+ [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"
14828
+ [label]="'LOAD_CONFIGURATION' | localize"
14829
+ (onClick)="handleLoadPresetClicked()">
14830
+ </co-button>
14831
+ </div>
14832
+ </div>
14833
+
14834
+
14835
+ `,
14836
+ encapsulation: ViewEncapsulation.None,
14837
+ standalone: false
14838
+ }]
14839
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: AppEventService }], propDecorators: { showClass: [{
14840
+ type: HostBinding,
14841
+ args: ['class.co-configuration-preset']
14842
+ }], closeSaveLoadMenu: [{
14843
+ type: HostListener,
14844
+ args: ['document:click']
14845
+ }] } });
14846
+
14728
14847
  class SelectionsSummaryComponent {
14729
14848
  configuratorConnectorService;
14730
14849
  iconService;
@@ -14737,6 +14856,7 @@ class SelectionsSummaryComponent {
14737
14856
  canClose = true;
14738
14857
  answersTemplate;
14739
14858
  answerToShowFromSelectionText;
14859
+ showSaveAndLoadConfiguration;
14740
14860
  customDimensions = false;
14741
14861
  disableMouse = false;
14742
14862
  handledocumentMouseUp(event) {
@@ -14786,82 +14906,88 @@ class SelectionsSummaryComponent {
14786
14906
  this.selectionToCustomize = sel;
14787
14907
  }
14788
14908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryComponent, deps: [{ token: ConfiguratorConnectorService }, { token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component });
14789
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: SelectionsSummaryComponent, isStandalone: false, selector: "co-selections-summary", inputs: { selections: "selections", showLabel: "showLabel", canClose: "canClose", answersTemplate: "answersTemplate", answerToShowFromSelectionText: "answerToShowFromSelectionText", customDimensions: "customDimensions" }, outputs: { closeClick: "closeClick", cancelAnswers: "cancelAnswers", selectSelection: "selectSelection", repeatSelection: "repeatSelection", deleteSelection: "deleteSelection" }, host: { listeners: { "document:mouseup": "handledocumentMouseUp($event)", "document:mousemove": "handleDocumentMouseDown($event)" }, properties: { "class.co-selections-summary": "this.showClass", "class.custom-dimensions": "this.customDimensions", "class.disable-mouse": "this.disableMouse" } }, ngImport: i0, template: `
14790
- @if (showLabel || canClose) {
14791
- <header class="drawer__header">
14792
- @if (showLabel) {
14793
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14794
- }
14795
- @if (canClose) {
14796
- <button class="close-lite-selector" (click)="closeClick.emit()">
14797
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14798
- </button>
14799
- }
14800
- </header>
14801
- }
14802
- @if (selections && selections.length > 0) {
14803
- <div class="selections-content small-scrollbar">
14804
- @for (sel of selections; track sel; let index = $index) {
14805
- <co-selections-summary-line
14806
- [selection]="sel"
14807
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14808
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14809
- [valutaSymbol]="valutaSymbol"
14810
- (summaryLineClick)="handleClick(sel)"
14811
- (summaryLineDelete)="handleDelete($event, sel)"
14812
- (summaryLineRepeat)="handleRepeat($event, sel)"
14813
- (customizeButtonClicked)="toggleElement(sel)"
14814
- ></co-selections-summary-line>
14815
- }
14816
- @if (showAsConfigured) {
14817
- <div class="sum">
14818
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14819
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14820
- </div>
14821
- }
14822
- </div>
14823
- }
14824
- `, isInline: true, dependencies: [{ kind: "component", type: SelectionsSummaryLineComponent, selector: "co-selections-summary-line", inputs: ["selection", "valutaSymbol", "answersTemplate", "answerToShowFromSelectionText"], outputs: ["customizeButtonClicked", "summaryLineClick", "summaryLineRepeat", "summaryLineDelete"] }, { kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }, { kind: "pipe", type: i4.PriceDisplayPipe, name: "priceDisplay" }], encapsulation: i0.ViewEncapsulation.None });
14909
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: SelectionsSummaryComponent, isStandalone: false, selector: "co-selections-summary", inputs: { selections: "selections", showLabel: "showLabel", canClose: "canClose", answersTemplate: "answersTemplate", answerToShowFromSelectionText: "answerToShowFromSelectionText", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration", customDimensions: "customDimensions" }, outputs: { closeClick: "closeClick", cancelAnswers: "cancelAnswers", selectSelection: "selectSelection", repeatSelection: "repeatSelection", deleteSelection: "deleteSelection" }, host: { listeners: { "document:mouseup": "handledocumentMouseUp($event)", "document:mousemove": "handleDocumentMouseDown($event)" }, properties: { "class.co-selections-summary": "this.showClass", "class.custom-dimensions": "this.customDimensions", "class.disable-mouse": "this.disableMouse" } }, ngImport: i0, template: `
14910
+ @if (showLabel || canClose) {
14911
+ <header class="drawer__header">
14912
+ @if (showLabel) {
14913
+ <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14914
+ }
14915
+ @if (canClose) {
14916
+ <button class="close-lite-selector" (click)="closeClick.emit()">
14917
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14918
+ </button>
14919
+ }
14920
+ </header>
14921
+ }
14922
+ @if (selections && selections.length > 0) {
14923
+ <div class="selections-content small-scrollbar">
14924
+ @for (sel of selections; track sel; let index = $index) {
14925
+ <co-selections-summary-line
14926
+ [selection]="sel"
14927
+ [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14928
+ [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14929
+ [valutaSymbol]="valutaSymbol"
14930
+ (summaryLineClick)="handleClick(sel)"
14931
+ (summaryLineDelete)="handleDelete($event, sel)"
14932
+ (summaryLineRepeat)="handleRepeat($event, sel)"
14933
+ (customizeButtonClicked)="toggleElement(sel)"
14934
+ ></co-selections-summary-line>
14935
+ }
14936
+ @if (showSaveAndLoadConfiguration) {
14937
+ <co-configuration-preset></co-configuration-preset>
14938
+ }
14939
+ @if (showAsConfigured) {
14940
+ <div class="sum">
14941
+ <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14942
+ <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14943
+ </div>
14944
+ }
14945
+ </div>
14946
+ }
14947
+ `, isInline: true, dependencies: [{ kind: "component", type: SelectionsSummaryLineComponent, selector: "co-selections-summary-line", inputs: ["selection", "valutaSymbol", "answersTemplate", "answerToShowFromSelectionText"], outputs: ["customizeButtonClicked", "summaryLineClick", "summaryLineRepeat", "summaryLineDelete"] }, { kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ConfigurationPresetComponent, selector: "co-configuration-preset" }, { kind: "pipe", type: LocalizePipe, name: "localize" }, { kind: "pipe", type: i4.PriceDisplayPipe, name: "priceDisplay" }], encapsulation: i0.ViewEncapsulation.None });
14825
14948
  }
14826
14949
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryComponent, decorators: [{
14827
14950
  type: Component,
14828
14951
  args: [{
14829
14952
  selector: 'co-selections-summary',
14830
14953
  template: `
14831
- @if (showLabel || canClose) {
14832
- <header class="drawer__header">
14833
- @if (showLabel) {
14834
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14835
- }
14836
- @if (canClose) {
14837
- <button class="close-lite-selector" (click)="closeClick.emit()">
14838
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14839
- </button>
14840
- }
14841
- </header>
14842
- }
14843
- @if (selections && selections.length > 0) {
14844
- <div class="selections-content small-scrollbar">
14845
- @for (sel of selections; track sel; let index = $index) {
14846
- <co-selections-summary-line
14847
- [selection]="sel"
14848
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14849
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14850
- [valutaSymbol]="valutaSymbol"
14851
- (summaryLineClick)="handleClick(sel)"
14852
- (summaryLineDelete)="handleDelete($event, sel)"
14853
- (summaryLineRepeat)="handleRepeat($event, sel)"
14854
- (customizeButtonClicked)="toggleElement(sel)"
14855
- ></co-selections-summary-line>
14856
- }
14857
- @if (showAsConfigured) {
14858
- <div class="sum">
14859
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14860
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14861
- </div>
14862
- }
14863
- </div>
14864
- }
14954
+ @if (showLabel || canClose) {
14955
+ <header class="drawer__header">
14956
+ @if (showLabel) {
14957
+ <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14958
+ }
14959
+ @if (canClose) {
14960
+ <button class="close-lite-selector" (click)="closeClick.emit()">
14961
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14962
+ </button>
14963
+ }
14964
+ </header>
14965
+ }
14966
+ @if (selections && selections.length > 0) {
14967
+ <div class="selections-content small-scrollbar">
14968
+ @for (sel of selections; track sel; let index = $index) {
14969
+ <co-selections-summary-line
14970
+ [selection]="sel"
14971
+ [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14972
+ [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14973
+ [valutaSymbol]="valutaSymbol"
14974
+ (summaryLineClick)="handleClick(sel)"
14975
+ (summaryLineDelete)="handleDelete($event, sel)"
14976
+ (summaryLineRepeat)="handleRepeat($event, sel)"
14977
+ (customizeButtonClicked)="toggleElement(sel)"
14978
+ ></co-selections-summary-line>
14979
+ }
14980
+ @if (showSaveAndLoadConfiguration) {
14981
+ <co-configuration-preset></co-configuration-preset>
14982
+ }
14983
+ @if (showAsConfigured) {
14984
+ <div class="sum">
14985
+ <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14986
+ <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14987
+ </div>
14988
+ }
14989
+ </div>
14990
+ }
14865
14991
  `,
14866
14992
  encapsulation: ViewEncapsulation.None,
14867
14993
  standalone: false
@@ -14879,6 +15005,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14879
15005
  type: Input
14880
15006
  }], answerToShowFromSelectionText: [{
14881
15007
  type: Input
15008
+ }], showSaveAndLoadConfiguration: [{
15009
+ type: Input
14882
15010
  }], customDimensions: [{
14883
15011
  type: HostBinding,
14884
15012
  args: ['class.custom-dimensions']
@@ -14938,6 +15066,7 @@ class LiteSelectorComponent {
14938
15066
  canClose = true;
14939
15067
  animateSlideout = true;
14940
15068
  customDimensions = false;
15069
+ showSaveAndLoadConfiguration;
14941
15070
  showChange = new EventEmitter();
14942
15071
  answerChosen = new EventEmitter();
14943
15072
  answerToShowFromSelectionText;
@@ -14990,7 +15119,7 @@ class LiteSelectorComponent {
14990
15119
  // this.iOne.getMoodImageForAnswerSelection(answerSelected.answer, false);
14991
15120
  }
14992
15121
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LiteSelectorComponent, deps: [{ token: SwitchBuildFurnitureService }, { token: ConfiguratorConnectorService }, { token: ConfiguringService }], target: i0.ɵɵFactoryTarget.Component });
14993
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: LiteSelectorComponent, isStandalone: false, selector: "co-lite-selector", inputs: { showAnswers: "showAnswers", show: "show", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", animateSlideout: "animateSlideout", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-lite-selector": "this.showClass", "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
15122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: LiteSelectorComponent, isStandalone: false, selector: "co-lite-selector", inputs: { showAnswers: "showAnswers", show: "show", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", animateSlideout: "animateSlideout", customDimensions: "customDimensions", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-lite-selector": "this.showClass", "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
14994
15123
  <ng-container>
14995
15124
  @if (showSelections && configuratorConnectorService.selectionsToDisplay.length > 0) {
14996
15125
  <co-selections-summary
@@ -15002,11 +15131,11 @@ class LiteSelectorComponent {
15002
15131
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15003
15132
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15004
15133
  [selections]="configuratorConnectorService.selectionsToDisplay"
15134
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15005
15135
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15006
15136
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15007
15137
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15008
- (closeClick)="onCloseLiteSelectorButtonClick()"
15009
- >
15138
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15010
15139
  </co-selections-summary>
15011
15140
  }
15012
15141
  @if (!inlineAnswers) {
@@ -15027,7 +15156,7 @@ class LiteSelectorComponent {
15027
15156
  (answerChosen)="onAnswersSlideoutAnswerChosen($event)"
15028
15157
  ></co-answers-slideout>
15029
15158
  </ng-template>
15030
- `, isInline: true, dependencies: [{ kind: "component", type: AnswersSlideoutComponent, selector: "co-answers-slideout", inputs: ["isShown", "question", "showTitle", "showFilter", "answers", "useSlideout", "customDimensions"], outputs: ["isShownChange", "answerChosen"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectionsSummaryComponent, selector: "co-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection", "repeatSelection", "deleteSelection"] }], animations: [
15159
+ `, isInline: true, dependencies: [{ kind: "component", type: AnswersSlideoutComponent, selector: "co-answers-slideout", inputs: ["isShown", "question", "showTitle", "showFilter", "answers", "useSlideout", "customDimensions"], outputs: ["isShownChange", "answerChosen"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectionsSummaryComponent, selector: "co-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "showSaveAndLoadConfiguration", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection", "repeatSelection", "deleteSelection"] }], animations: [
15031
15160
  trigger('showSelections', [
15032
15161
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15033
15162
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15051,11 +15180,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15051
15180
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15052
15181
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15053
15182
  [selections]="configuratorConnectorService.selectionsToDisplay"
15183
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15054
15184
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15055
15185
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15056
15186
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15057
- (closeClick)="onCloseLiteSelectorButtonClick()"
15058
- >
15187
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15059
15188
  </co-selections-summary>
15060
15189
  }
15061
15190
  @if (!inlineAnswers) {
@@ -15110,6 +15239,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15110
15239
  args: ['class.custom-dimensions']
15111
15240
  }, {
15112
15241
  type: Input
15242
+ }], showSaveAndLoadConfiguration: [{
15243
+ type: Input
15113
15244
  }], showChange: [{
15114
15245
  type: Output
15115
15246
  }], answerChosen: [{
@@ -15138,6 +15269,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15138
15269
  icons = IconEnum;
15139
15270
  option;
15140
15271
  tileClass = 'small';
15272
+ noLabel = false;
15141
15273
  selectionClicked = new EventEmitter();
15142
15274
  constructor(configuratorConnectorService, iconService, settingsService) {
15143
15275
  this.configuratorConnectorService = configuratorConnectorService;
@@ -15148,7 +15280,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15148
15280
  this.selectionClicked.emit();
15149
15281
  }
15150
15282
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorSelectorOptionTileComponent, deps: [{ token: ConfiguratorConnectorService }, { token: IconCacheService }, { token: SettingsService }], target: i0.ɵɵFactoryTarget.Component });
15151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorOptionTileComponent, isStandalone: false, selector: "co-product-configurator-selector-option-tile", inputs: { option: "option", tileClass: "tileClass" }, outputs: { selectionClicked: "selectionClicked" }, host: { properties: { "class.co-product-configurator-selector-option-tile": "this.showClass" } }, ngImport: i0, template: `
15283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorOptionTileComponent, isStandalone: false, selector: "co-product-configurator-selector-option-tile", inputs: { option: "option", tileClass: "tileClass", noLabel: "noLabel" }, outputs: { selectionClicked: "selectionClicked" }, host: { properties: { "class.co-product-configurator-selector-option-tile": "this.showClass" } }, ngImport: i0, template: `
15152
15284
  <!-- When selected show checkmark -->
15153
15285
  <div
15154
15286
  class="configurator-selector-option-tile-container configurator-selector-option-tile-container-{{this.tileClass}}"
@@ -15172,14 +15304,16 @@ class ProductConfiguratorSelectorOptionTileComponent {
15172
15304
  }
15173
15305
  </div>
15174
15306
  <!-- Answer text -->
15175
- <div class="product-configurator-selector-option-tile-description">
15176
- @if (option.nodeText) {
15177
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15178
- }
15179
- @if (!option.nodeText) {
15180
- <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15307
+ @if (!noLabel) {
15308
+ <div class="product-configurator-selector-option-tile-description">
15309
+ @if (option.nodeText) {
15310
+ <p [textContent]="option.nodeText | googleTranslate | async"></p>
15311
+ }
15312
+ @if (!option.nodeText) {
15313
+ <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15314
+ }
15315
+ </div>
15181
15316
  }
15182
- </div>
15183
15317
  </div>
15184
15318
  `, isInline: true, dependencies: [{ kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: GoogleTranslatePipe, name: "googleTranslate" }], encapsulation: i0.ViewEncapsulation.None });
15185
15319
  }
@@ -15211,14 +15345,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15211
15345
  }
15212
15346
  </div>
15213
15347
  <!-- Answer text -->
15214
- <div class="product-configurator-selector-option-tile-description">
15215
- @if (option.nodeText) {
15216
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15217
- }
15218
- @if (!option.nodeText) {
15219
- <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15348
+ @if (!noLabel) {
15349
+ <div class="product-configurator-selector-option-tile-description">
15350
+ @if (option.nodeText) {
15351
+ <p [textContent]="option.nodeText | googleTranslate | async"></p>
15352
+ }
15353
+ @if (!option.nodeText) {
15354
+ <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15355
+ }
15356
+ </div>
15220
15357
  }
15221
- </div>
15222
15358
  </div>
15223
15359
  `,
15224
15360
  encapsulation: ViewEncapsulation.None,
@@ -15231,6 +15367,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15231
15367
  type: Input
15232
15368
  }], tileClass: [{
15233
15369
  type: Input
15370
+ }], noLabel: [{
15371
+ type: Input
15234
15372
  }], selectionClicked: [{
15235
15373
  type: Output
15236
15374
  }] } });
@@ -15497,13 +15635,24 @@ class ProductConfiguratorSelectorOptionComponent {
15497
15635
  selection;
15498
15636
  listOfChoices;
15499
15637
  markAsException;
15638
+ showGlobalAll = false;
15639
+ groupedSubShow = true;
15500
15640
  configurationDisplayOption = ConfigurationDisplayOption;
15501
15641
  selectionClass = '';
15502
15642
  showAllTiles = false;
15503
15643
  maxVisibleTiles = 10;
15504
- maxVisibleSmallTiles = 24;
15644
+ maxVisibleSmallTiles = 7;
15505
15645
  visibleAnswers = [];
15506
15646
  remainingTilesCount = 0;
15647
+ smallTileOptions = [
15648
+ ConfigurationDisplayOption.TileSmall,
15649
+ ConfigurationDisplayOption.SmallCircle,
15650
+ ConfigurationDisplayOption.SmallSquare
15651
+ ];
15652
+ largeTileOptions = [
15653
+ ConfigurationDisplayOption.TileLarge,
15654
+ ConfigurationDisplayOption.TileRounded
15655
+ ];
15507
15656
  constructor(configuratorConnectorService, settingsService, productConfiguratorService) {
15508
15657
  this.configuratorConnectorService = configuratorConnectorService;
15509
15658
  this.settingsService = settingsService;
@@ -15511,7 +15660,7 @@ class ProductConfiguratorSelectorOptionComponent {
15511
15660
  }
15512
15661
  ngOnInit() {
15513
15662
  if (this.selection && this.selection.displayOptionControl == null) {
15514
- this.selection.displayOptionControl = ConfigurationDisplayOption.Tab;
15663
+ this.selection.displayOptionControl = ConfigurationDisplayOption.TileLarge;
15515
15664
  }
15516
15665
  if (this.markAsException) {
15517
15666
  this.selectionClass = 'selection-exception selection-container-' + this.selection.displayOptionControl;
@@ -15527,8 +15676,23 @@ class ProductConfiguratorSelectorOptionComponent {
15527
15676
  this.configuratorConnectorService.getImageForAnswer(selectionCopy);
15528
15677
  this.listOfChoices.push(selectionCopy);
15529
15678
  }
15679
+ if (this.showGlobalAll) {
15680
+ this.showAllTiles = true;
15681
+ }
15530
15682
  this._calculateVisibleAnswers();
15531
15683
  }
15684
+ ngOnChanges(changes) {
15685
+ if (changes.showGlobalAll && !changes.showGlobalAll.firstChange) {
15686
+ this.showAllTiles = !!changes.showGlobalAll.currentValue;
15687
+ this._calculateVisibleAnswers();
15688
+ }
15689
+ if (changes.listOfChoices && !changes.listOfChoices.firstChange) {
15690
+ this._calculateVisibleAnswers();
15691
+ }
15692
+ if (changes.selection && !changes.selection.firstChange) {
15693
+ this._calculateVisibleAnswers();
15694
+ }
15695
+ }
15532
15696
  selectionClicked(answer) {
15533
15697
  this.productConfiguratorService.selectSelection.emit(answer);
15534
15698
  }
@@ -15540,23 +15704,39 @@ class ProductConfiguratorSelectorOptionComponent {
15540
15704
  this.showAllTiles = false;
15541
15705
  this._calculateVisibleAnswers();
15542
15706
  }
15707
+ getTileClass() {
15708
+ switch (this.selection.displayOptionControl) {
15709
+ case this.configurationDisplayOption.TileLarge:
15710
+ return 'large';
15711
+ case this.configurationDisplayOption.TileRounded:
15712
+ return 'rounded';
15713
+ case this.configurationDisplayOption.SmallCircle:
15714
+ return 'small-rounded';
15715
+ case this.configurationDisplayOption.SmallSquare:
15716
+ return 'small-square';
15717
+ default:
15718
+ return 'small';
15719
+ }
15720
+ }
15543
15721
  _calculateVisibleAnswers() {
15544
- if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileLarge) {
15545
- if (this.showAllTiles) {
15546
- this.visibleAnswers = this.listOfChoices;
15547
- }
15548
- else {
15549
- this.visibleAnswers = this.listOfChoices.slice(0, this.maxVisibleTiles);
15550
- }
15722
+ if (this.largeTileOptions.includes(this.selection.displayOptionControl)) {
15723
+ const configuredMaxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleTiles;
15724
+ if (configuredMaxVisibleTiles != null) {
15725
+ this.maxVisibleTiles = configuredMaxVisibleTiles;
15726
+ }
15727
+ this.visibleAnswers = this.showAllTiles
15728
+ ? this.listOfChoices
15729
+ : this.listOfChoices.slice(0, this.maxVisibleTiles);
15551
15730
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleTiles);
15552
15731
  }
15553
- else if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileSmall) {
15554
- if (this.showAllTiles) {
15555
- this.visibleAnswers = this.listOfChoices;
15556
- }
15557
- else {
15558
- this.visibleAnswers = this.listOfChoices.slice(0, this.maxVisibleSmallTiles);
15732
+ else if (this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15733
+ const configuredMaxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleSmallTiles;
15734
+ if (configuredMaxVisibleTiles != null) {
15735
+ this.maxVisibleSmallTiles = configuredMaxVisibleTiles;
15559
15736
  }
15737
+ this.visibleAnswers = this.showAllTiles
15738
+ ? this.listOfChoices
15739
+ : this.listOfChoices.slice(0, this.maxVisibleSmallTiles);
15560
15740
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleSmallTiles);
15561
15741
  }
15562
15742
  else {
@@ -15565,11 +15745,11 @@ class ProductConfiguratorSelectorOptionComponent {
15565
15745
  }
15566
15746
  }
15567
15747
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorSelectorOptionComponent, deps: [{ token: ConfiguratorConnectorService }, { token: SettingsService }, { token: ProductConfiguratorService }], target: i0.ɵɵFactoryTarget.Component });
15568
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorOptionComponent, isStandalone: false, selector: "co-product-configurator-selector-option", inputs: { selection: "selection", listOfChoices: "listOfChoices", markAsException: "markAsException" }, host: { properties: { "class.co-product-configurator-selector-option": "this.showClass" } }, ngImport: i0, template: `
15748
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorOptionComponent, isStandalone: false, selector: "co-product-configurator-selector-option", inputs: { selection: "selection", listOfChoices: "listOfChoices", markAsException: "markAsException", showGlobalAll: "showGlobalAll", groupedSubShow: "groupedSubShow" }, host: { properties: { "class.co-product-configurator-selector-option": "this.showClass" } }, usesOnChanges: true, ngImport: i0, template: `
15569
15749
  <div class="selector-wrapper {{this.selectionClass}}">
15570
15750
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15571
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15572
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15751
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15752
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15573
15753
  @for (child of listOfChoices; track child) {
15574
15754
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15575
15755
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15591,18 +15771,25 @@ class ProductConfiguratorSelectorOptionComponent {
15591
15771
  (selectionClicked)="selectionClicked(child)">
15592
15772
  </co-product-configurator-selector-option-tile>
15593
15773
  }
15594
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15774
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15595
15775
  <co-product-configurator-selector-option-tile
15596
15776
  [option]="child"
15597
- [tileClass]="'small-rounded'"
15777
+ [tileClass]="'horizontal'"
15598
15778
  (selectionClicked)="selectionClicked(child)">
15599
15779
  </co-product-configurator-selector-option-tile>
15600
15780
  }
15601
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15781
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15602
15782
  <co-product-configurator-selector-option-tile
15603
- [option]="child"
15604
- [tileClass]="'horizontal'"
15605
- (selectionClicked)="selectionClicked(child)">
15783
+ [option]="child"
15784
+ [tileClass]="'on-page'"
15785
+ (selectionClicked)="selectionClicked(child)">
15786
+ </co-product-configurator-selector-option-tile>
15787
+ }
15788
+ @if (this.selection.displayOptionControl === configurationDisplayOption.SlideOut) {
15789
+ <co-product-configurator-selector-option-tile
15790
+ [option]="child"
15791
+ [tileClass]="'slide-out'"
15792
+ (selectionClicked)="selectionClicked(child)">
15606
15793
  </co-product-configurator-selector-option-tile>
15607
15794
  }
15608
15795
  </div>
@@ -15610,13 +15797,14 @@ class ProductConfiguratorSelectorOptionComponent {
15610
15797
  }
15611
15798
 
15612
15799
  @if (
15613
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15614
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15800
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15801
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15615
15802
  @for (child of visibleAnswers; track child) {
15616
15803
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15617
15804
  <co-product-configurator-selector-option-tile
15618
15805
  [option]="child"
15619
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15806
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15807
+ [tileClass]="getTileClass()"
15620
15808
  (selectionClicked)="selectionClicked(child)"
15621
15809
  ></co-product-configurator-selector-option-tile>
15622
15810
  </div>
@@ -15624,18 +15812,16 @@ class ProductConfiguratorSelectorOptionComponent {
15624
15812
  }
15625
15813
 
15626
15814
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15627
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15628
- <co-product-configurator-selector-option-dropdown
15629
- [options]="listOfChoices"
15630
- (selectionClicked)="selectionClicked($event)"
15631
- ></co-product-configurator-selector-option-dropdown>
15632
- }
15815
+ <co-product-configurator-selector-option-dropdown
15816
+ [options]="listOfChoices"
15817
+ (selectionClicked)="selectionClicked($event)"
15818
+ ></co-product-configurator-selector-option-dropdown>
15633
15819
  }
15634
15820
  </div>
15635
15821
 
15636
15822
  @if (
15637
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15638
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15823
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15824
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15639
15825
  @if (!showAllTiles && remainingTilesCount > 0) {
15640
15826
  <div class="show-more-container">
15641
15827
  <span (click)="showMore()">
@@ -15652,7 +15838,7 @@ class ProductConfiguratorSelectorOptionComponent {
15652
15838
  }
15653
15839
  }
15654
15840
 
15655
- `, isInline: true, dependencies: [{ kind: "component", type: ProductConfiguratorSelectorOptionTileComponent, selector: "co-product-configurator-selector-option-tile", inputs: ["option", "tileClass"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorOptionCheckboxComponent, selector: "co-product-configurator-option-checkbox", inputs: ["option"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorSelectorOptionButtonComponent, selector: "co-product-configurator-selector-option-button", inputs: ["option"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorSelectorOptionDropDownComponent, selector: "co-product-configurator-selector-option-dropdown", inputs: ["options", "tileClass"], outputs: ["selectionClicked"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
15841
+ `, isInline: true, dependencies: [{ kind: "component", type: ProductConfiguratorSelectorOptionTileComponent, selector: "co-product-configurator-selector-option-tile", inputs: ["option", "tileClass", "noLabel"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorOptionCheckboxComponent, selector: "co-product-configurator-option-checkbox", inputs: ["option"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorSelectorOptionButtonComponent, selector: "co-product-configurator-selector-option-button", inputs: ["option"], outputs: ["selectionClicked"] }, { kind: "component", type: ProductConfiguratorSelectorOptionDropDownComponent, selector: "co-product-configurator-selector-option-dropdown", inputs: ["options", "tileClass"], outputs: ["selectionClicked"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
15656
15842
  trigger('showSelections', [
15657
15843
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15658
15844
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15667,8 +15853,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15667
15853
  template: `
15668
15854
  <div class="selector-wrapper {{this.selectionClass}}">
15669
15855
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15670
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15671
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15856
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15857
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15672
15858
  @for (child of listOfChoices; track child) {
15673
15859
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15674
15860
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15690,18 +15876,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15690
15876
  (selectionClicked)="selectionClicked(child)">
15691
15877
  </co-product-configurator-selector-option-tile>
15692
15878
  }
15693
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15879
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15694
15880
  <co-product-configurator-selector-option-tile
15695
15881
  [option]="child"
15696
- [tileClass]="'small-rounded'"
15882
+ [tileClass]="'horizontal'"
15697
15883
  (selectionClicked)="selectionClicked(child)">
15698
15884
  </co-product-configurator-selector-option-tile>
15699
15885
  }
15700
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15886
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15701
15887
  <co-product-configurator-selector-option-tile
15702
- [option]="child"
15703
- [tileClass]="'horizontal'"
15704
- (selectionClicked)="selectionClicked(child)">
15888
+ [option]="child"
15889
+ [tileClass]="'on-page'"
15890
+ (selectionClicked)="selectionClicked(child)">
15891
+ </co-product-configurator-selector-option-tile>
15892
+ }
15893
+ @if (this.selection.displayOptionControl === configurationDisplayOption.SlideOut) {
15894
+ <co-product-configurator-selector-option-tile
15895
+ [option]="child"
15896
+ [tileClass]="'slide-out'"
15897
+ (selectionClicked)="selectionClicked(child)">
15705
15898
  </co-product-configurator-selector-option-tile>
15706
15899
  }
15707
15900
  </div>
@@ -15709,13 +15902,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15709
15902
  }
15710
15903
 
15711
15904
  @if (
15712
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15713
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15905
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15906
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15714
15907
  @for (child of visibleAnswers; track child) {
15715
15908
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15716
15909
  <co-product-configurator-selector-option-tile
15717
15910
  [option]="child"
15718
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15911
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15912
+ [tileClass]="getTileClass()"
15719
15913
  (selectionClicked)="selectionClicked(child)"
15720
15914
  ></co-product-configurator-selector-option-tile>
15721
15915
  </div>
@@ -15723,18 +15917,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15723
15917
  }
15724
15918
 
15725
15919
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15726
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15727
- <co-product-configurator-selector-option-dropdown
15728
- [options]="listOfChoices"
15729
- (selectionClicked)="selectionClicked($event)"
15730
- ></co-product-configurator-selector-option-dropdown>
15731
- }
15920
+ <co-product-configurator-selector-option-dropdown
15921
+ [options]="listOfChoices"
15922
+ (selectionClicked)="selectionClicked($event)"
15923
+ ></co-product-configurator-selector-option-dropdown>
15732
15924
  }
15733
15925
  </div>
15734
15926
 
15735
15927
  @if (
15736
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15737
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15928
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15929
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15738
15930
  @if (!showAllTiles && remainingTilesCount > 0) {
15739
15931
  <div class="show-more-container">
15740
15932
  <span (click)="showMore()">
@@ -15771,25 +15963,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15771
15963
  type: Input
15772
15964
  }], markAsException: [{
15773
15965
  type: Input
15966
+ }], showGlobalAll: [{
15967
+ type: Input
15968
+ }], groupedSubShow: [{
15969
+ type: Input
15774
15970
  }] } });
15775
15971
 
15776
15972
  class ProductConfiguratorSelectorComponent {
15777
15973
  configuratorConnectorService;
15778
15974
  settingsService;
15779
15975
  iconService;
15780
- showClass() {
15781
- return true;
15782
- }
15783
- icons = IconEnum;
15784
- exceptionContainer;
15785
15976
  get hostClasses() {
15786
- const classes = [];
15787
- classes.push(`treelevel-${this.treeLevelIndex}`);
15788
- if (this.treeLevelIndex === 2 && !this.isActive) {
15789
- classes.push('hidden');
15977
+ const classes = [
15978
+ 'co-product-configurator-selector',
15979
+ `treelevel-${this.treeLevelIndex}`
15980
+ ];
15981
+ if (!this._shouldBeVisible()) {
15982
+ classes.push('hidden-frontend');
15790
15983
  }
15791
15984
  return classes.join(' ');
15792
15985
  }
15986
+ icons = IconEnum;
15987
+ exceptionContainer;
15793
15988
  selection;
15794
15989
  options;
15795
15990
  lastNodeWithChildren;
@@ -15797,13 +15992,37 @@ class ProductConfiguratorSelectorComponent {
15797
15992
  treeLevelIndex = 1;
15798
15993
  isActive = true;
15799
15994
  markAsException = false;
15995
+ showAll = false;
15996
+ suppressSubShowMore = false;
15997
+ useGroupedParentVisibility = false;
15800
15998
  activate = new EventEmitter();
15801
- get selectionIndexText() {
15802
- return this.selectionIndex + '. ';
15803
- }
15804
15999
  selectionClass = '';
15805
16000
  listOfChoices = [];
15806
16001
  activeChildIndex = 0;
16002
+ localShowAll = false;
16003
+ get selectionIndexText() {
16004
+ return this.selectionIndex + '. ';
16005
+ }
16006
+ get expandButtonText() {
16007
+ if (this.getChildShowAll()) {
16008
+ return 'VIEW_LESS';
16009
+ }
16010
+ return this.groupedRemainingTilesCount > 0
16011
+ ? `SHOW_ALL`
16012
+ : 'SHOW_ALL';
16013
+ }
16014
+ get suppressSubShowMoreForChildren() {
16015
+ return this.suppressSubShowMore || this.isGroupedSection();
16016
+ }
16017
+ get groupedRemainingTilesCount() {
16018
+ if (!this.isGroupedSection() || this.getChildShowAll()) {
16019
+ return 0;
16020
+ }
16021
+ return this._countGroupedTilesToReveal(this.options);
16022
+ }
16023
+ get useGroupedVisibilityForChildren() {
16024
+ return this.useGroupedParentVisibility || this.isGroupedSection();
16025
+ }
15807
16026
  constructor(configuratorConnectorService, settingsService, iconService) {
15808
16027
  this.configuratorConnectorService = configuratorConnectorService;
15809
16028
  this.settingsService = settingsService;
@@ -15825,6 +16044,15 @@ class ProductConfiguratorSelectorComponent {
15825
16044
  if (this.markAsException) {
15826
16045
  this.showAndScroll();
15827
16046
  }
16047
+ this._setActiveChildIndexFromSelection();
16048
+ }
16049
+ ngOnChanges(changes) {
16050
+ if (changes.options && !changes.options.firstChange) {
16051
+ this._setActiveChildIndexFromSelection();
16052
+ }
16053
+ if (changes.showAll && !changes.showAll.firstChange) {
16054
+ this._setActiveChildIndexFromSelection();
16055
+ }
15828
16056
  }
15829
16057
  showAndScroll() {
15830
16058
  setTimeout(() => {
@@ -15834,8 +16062,128 @@ class ProductConfiguratorSelectorComponent {
15834
16062
  onSubHeaderClick() {
15835
16063
  this.activate.emit();
15836
16064
  }
16065
+ onShowAllClick() {
16066
+ this.localShowAll = !this.localShowAll;
16067
+ }
16068
+ getIsChildVisible(index) {
16069
+ if (!this.useGroupedVisibilityForChildren) {
16070
+ return true;
16071
+ }
16072
+ if (this.getChildShowAll()) {
16073
+ return true;
16074
+ }
16075
+ return index === this.activeChildIndex;
16076
+ }
16077
+ isGroupedSection() {
16078
+ return this.treeLevelIndex === 1
16079
+ && !this.lastNodeWithChildren
16080
+ && this.settingsService.settings.options.groupedShowAllBtn
16081
+ && Array.isArray(this.options)
16082
+ && this.options.length > 1;
16083
+ }
16084
+ shouldShowExpandButton() {
16085
+ return this.isGroupedSection();
16086
+ }
16087
+ getChildShowAll() {
16088
+ return this.showAll || this.localShowAll;
16089
+ }
16090
+ _shouldBeVisible() {
16091
+ if (!this.useGroupedVisibilityForChildren) {
16092
+ return true;
16093
+ }
16094
+ if (this.getChildShowAll()) {
16095
+ return true;
16096
+ }
16097
+ return this.isActive;
16098
+ }
16099
+ _setActiveChildIndexFromSelection() {
16100
+ if (!Array.isArray(this.options) || this.options.length === 0) {
16101
+ this.activeChildIndex = 0;
16102
+ return;
16103
+ }
16104
+ const selectedIndex = this.options.findIndex(option => this._hasSelectedOption(option));
16105
+ this.activeChildIndex = selectedIndex >= 0 ? selectedIndex : 0;
16106
+ }
16107
+ _hasSelectedOption(option) {
16108
+ if (!option) {
16109
+ return false;
16110
+ }
16111
+ if (option.selector && option.selector.selected === 'F') {
16112
+ return true;
16113
+ }
16114
+ if (!Array.isArray(option.selectorOptions) || option.selectorOptions.length === 0) {
16115
+ return false;
16116
+ }
16117
+ return option.selectorOptions.some(childOption => this._hasSelectedOption(childOption));
16118
+ }
16119
+ _countRemainingTiles(options) {
16120
+ if (!Array.isArray(options) || options.length === 0) {
16121
+ return 0;
16122
+ }
16123
+ let total = 0;
16124
+ for (const option of options) {
16125
+ if (!option) {
16126
+ continue;
16127
+ }
16128
+ if (option.lastNodeWithChildren) {
16129
+ total += this._remainingTilesForLeaf(option);
16130
+ }
16131
+ else if (Array.isArray(option.selectorOptions)) {
16132
+ total += this._countRemainingTiles(option.selectorOptions);
16133
+ }
16134
+ }
16135
+ return total;
16136
+ }
16137
+ _countGroupedTilesToReveal(options) {
16138
+ if (!Array.isArray(options) || options.length === 0) {
16139
+ return 0;
16140
+ }
16141
+ let total = 0;
16142
+ options.forEach((option, index) => {
16143
+ if (index === this.activeChildIndex) {
16144
+ total += this._countRemainingTiles([option]);
16145
+ }
16146
+ else {
16147
+ total += this._countAllTiles(option);
16148
+ }
16149
+ });
16150
+ return total;
16151
+ }
16152
+ _countAllTiles(option) {
16153
+ if (!option) {
16154
+ return 0;
16155
+ }
16156
+ if (option.lastNodeWithChildren) {
16157
+ return Array.isArray(option.selectorOptions)
16158
+ ? option.selectorOptions.length
16159
+ : 0;
16160
+ }
16161
+ if (!Array.isArray(option.selectorOptions)) {
16162
+ return 0;
16163
+ }
16164
+ return option.selectorOptions.reduce((total, childOption) => total + this._countAllTiles(childOption), 0);
16165
+ }
16166
+ _remainingTilesForLeaf(option) {
16167
+ if (!option?.selectorOptions || !option.selector) {
16168
+ return 0;
16169
+ }
16170
+ const displayOption = option.selector.displayOptionControl;
16171
+ const count = option.selectorOptions.length;
16172
+ if (displayOption === ConfigurationDisplayOption.TileLarge
16173
+ || displayOption === ConfigurationDisplayOption.TileRounded) {
16174
+ const maxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleTiles ?? 10;
16175
+ return Math.max(0, count - maxVisibleTiles);
16176
+ }
16177
+ if (displayOption === ConfigurationDisplayOption.TileSmall
16178
+ || displayOption === ConfigurationDisplayOption.SmallCircle
16179
+ || displayOption === ConfigurationDisplayOption.SmallSquare) {
16180
+ const maxVisibleSmallTiles = this.settingsService?.settings?.options?.maxVisibleSmallTiles ?? 24;
16181
+ return Math.max(0, count - maxVisibleSmallTiles);
16182
+ }
16183
+ return 0;
16184
+ }
15837
16185
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorSelectorComponent, deps: [{ token: ConfiguratorConnectorService }, { token: SettingsService }, { token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component });
15838
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorComponent, isStandalone: false, selector: "co-product-configurator-selector", inputs: { selection: "selection", options: "options", lastNodeWithChildren: "lastNodeWithChildren", selectionIndex: "selectionIndex", treeLevelIndex: "treeLevelIndex", isActive: "isActive", markAsException: "markAsException" }, outputs: { activate: "activate" }, host: { properties: { "class.co-product-configurator-selector": "this.showClass", "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "exceptionContainer", first: true, predicate: ["exceptionContainer"], descendants: true }], ngImport: i0, template: `
16186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorSelectorComponent, isStandalone: false, selector: "co-product-configurator-selector", inputs: { selection: "selection", options: "options", lastNodeWithChildren: "lastNodeWithChildren", selectionIndex: "selectionIndex", treeLevelIndex: "treeLevelIndex", isActive: "isActive", markAsException: "markAsException", showAll: "showAll", suppressSubShowMore: "suppressSubShowMore", useGroupedParentVisibility: "useGroupedParentVisibility" }, outputs: { activate: "activate" }, host: { properties: { "class": "this.hostClasses" } }, viewQueries: [{ propertyName: "exceptionContainer", first: true, predicate: ["exceptionContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
15839
16187
  <div class="selector-container">
15840
16188
  <!--
15841
16189
  Based on the threeLevel and the length op options we got a couple of flavours
@@ -15884,7 +16232,9 @@ class ProductConfiguratorSelectorComponent {
15884
16232
  <co-product-configurator-selector-option
15885
16233
  [selection]="selection"
15886
16234
  [listOfChoices]="listOfChoices"
15887
- [markAsException]="markAsException">
16235
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16236
+ [markAsException]="markAsException"
16237
+ [showGlobalAll]="getChildShowAll()">
15888
16238
  </co-product-configurator-selector-option>
15889
16239
  }
15890
16240
  </div>
@@ -15897,13 +16247,29 @@ class ProductConfiguratorSelectorComponent {
15897
16247
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15898
16248
  [selectionIndex]="index + 1"
15899
16249
  [treeLevelIndex]="treeLevelIndex + 1"
15900
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16250
+ [showAll]="getChildShowAll()"
16251
+ [isActive]="getIsChildVisible(index)"
16252
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16253
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15901
16254
  [markAsException]="displaySelection.markForExceptionNotification"
15902
16255
  (activate)="activeChildIndex = index">
15903
16256
  </co-product-configurator-selector>
15904
16257
  }
15905
16258
  }
15906
- `, isInline: true, dependencies: [{ kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductConfiguratorSelectorOptionComponent, selector: "co-product-configurator-selector-option", inputs: ["selection", "listOfChoices", "markAsException"] }, { kind: "component", type: ProductConfiguratorSelectorComponent, selector: "co-product-configurator-selector", inputs: ["selection", "options", "lastNodeWithChildren", "selectionIndex", "treeLevelIndex", "isActive", "markAsException"], outputs: ["activate"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }, { kind: "pipe", type: GoogleTranslatePipe, name: "googleTranslate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], animations: [
16259
+ @if (shouldShowExpandButton()) {
16260
+ <div class="show-more-container" (click)="onShowAllClick()">
16261
+ <span class="show-all-button show-more-text-link"
16262
+ [textContent]="expandButtonText | localize">
16263
+ </span>
16264
+
16265
+ @if (this.groupedRemainingTilesCount > 0) {
16266
+ <span class="show-all-button show-more-text-link counter"
16267
+ [textContent]="'(' + this.groupedRemainingTilesCount + ')'">
16268
+ </span>
16269
+ }
16270
+ </div>
16271
+ }
16272
+ `, isInline: true, dependencies: [{ kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductConfiguratorSelectorOptionComponent, selector: "co-product-configurator-selector-option", inputs: ["selection", "listOfChoices", "markAsException", "showGlobalAll", "groupedSubShow"] }, { kind: "component", type: ProductConfiguratorSelectorComponent, selector: "co-product-configurator-selector", inputs: ["selection", "options", "lastNodeWithChildren", "selectionIndex", "treeLevelIndex", "isActive", "markAsException", "showAll", "suppressSubShowMore", "useGroupedParentVisibility"], outputs: ["activate"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }, { kind: "pipe", type: GoogleTranslatePipe, name: "googleTranslate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], animations: [
15907
16273
  trigger('showSelections', [
15908
16274
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15909
16275
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15964,7 +16330,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15964
16330
  <co-product-configurator-selector-option
15965
16331
  [selection]="selection"
15966
16332
  [listOfChoices]="listOfChoices"
15967
- [markAsException]="markAsException">
16333
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16334
+ [markAsException]="markAsException"
16335
+ [showGlobalAll]="getChildShowAll()">
15968
16336
  </co-product-configurator-selector-option>
15969
16337
  }
15970
16338
  </div>
@@ -15977,12 +16345,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15977
16345
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15978
16346
  [selectionIndex]="index + 1"
15979
16347
  [treeLevelIndex]="treeLevelIndex + 1"
15980
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16348
+ [showAll]="getChildShowAll()"
16349
+ [isActive]="getIsChildVisible(index)"
16350
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16351
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15981
16352
  [markAsException]="displaySelection.markForExceptionNotification"
15982
16353
  (activate)="activeChildIndex = index">
15983
16354
  </co-product-configurator-selector>
15984
16355
  }
15985
16356
  }
16357
+ @if (shouldShowExpandButton()) {
16358
+ <div class="show-more-container" (click)="onShowAllClick()">
16359
+ <span class="show-all-button show-more-text-link"
16360
+ [textContent]="expandButtonText | localize">
16361
+ </span>
16362
+
16363
+ @if (this.groupedRemainingTilesCount > 0) {
16364
+ <span class="show-all-button show-more-text-link counter"
16365
+ [textContent]="'(' + this.groupedRemainingTilesCount + ')'">
16366
+ </span>
16367
+ }
16368
+ </div>
16369
+ }
15986
16370
  `,
15987
16371
  encapsulation: ViewEncapsulation.None,
15988
16372
  animations: [
@@ -15994,15 +16378,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15994
16378
  ],
15995
16379
  standalone: false
15996
16380
  }]
15997
- }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { showClass: [{
16381
+ }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { hostClasses: [{
15998
16382
  type: HostBinding,
15999
- args: ['class.co-product-configurator-selector']
16383
+ args: ['class']
16000
16384
  }], exceptionContainer: [{
16001
16385
  type: ViewChild,
16002
16386
  args: ['exceptionContainer']
16003
- }], hostClasses: [{
16004
- type: HostBinding,
16005
- args: ['class']
16006
16387
  }], selection: [{
16007
16388
  type: Input
16008
16389
  }], options: [{
@@ -16017,6 +16398,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16017
16398
  type: Input
16018
16399
  }], markAsException: [{
16019
16400
  type: Input
16401
+ }], showAll: [{
16402
+ type: Input
16403
+ }], suppressSubShowMore: [{
16404
+ type: Input
16405
+ }], useGroupedParentVisibility: [{
16406
+ type: Input
16020
16407
  }], activate: [{
16021
16408
  type: Output
16022
16409
  }] } });
@@ -16049,6 +16436,7 @@ class ProductConfiguratorComponent {
16049
16436
  showLabel = true;
16050
16437
  canClose = true;
16051
16438
  customDimensions = false;
16439
+ showSaveAndLoadConfiguration;
16052
16440
  showChange = new EventEmitter();
16053
16441
  answerChosen = new EventEmitter();
16054
16442
  valutaSymbol = '€'; // TODO this should be a setting
@@ -16102,7 +16490,7 @@ class ProductConfiguratorComponent {
16102
16490
  this.showChange.emit(false);
16103
16491
  }
16104
16492
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorComponent, deps: [{ token: ConfiguratorConnectorService }, { token: SwitchBuildFurnitureService }, { token: SettingsService }, { token: ProductConfiguratorService }, { token: IconCacheService }, { token: i1.DomSanitizer }, { token: ConfiguringService }], target: i0.ɵɵFactoryTarget.Component });
16105
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorComponent, isStandalone: false, selector: "co-product-configurator", inputs: { show: "show", showHeaderInformation: "showHeaderInformation", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-product-configurator": "this.showClass" } }, ngImport: i0, template: `
16493
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorComponent, isStandalone: false, selector: "co-product-configurator", inputs: { show: "show", showHeaderInformation: "showHeaderInformation", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", customDimensions: "customDimensions", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-product-configurator": "this.showClass" } }, ngImport: i0, template: `
16106
16494
  @if (show) {
16107
16495
  <div class="product-configurator-container">
16108
16496
  @if (showHeaderInformation) {
@@ -16111,11 +16499,16 @@ class ProductConfiguratorComponent {
16111
16499
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16112
16500
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16113
16501
  </div>
16114
- @if (canClose) {
16115
- <div class="product-configurator-close" (click)="handleCloseClick()">
16116
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16117
- </div>
16118
- }
16502
+ <div class="product-configurator-header-actions">
16503
+ @if (showSaveAndLoadConfiguration) {
16504
+ <co-configuration-preset></co-configuration-preset>
16505
+ }
16506
+ @if (canClose) {
16507
+ <div class="product-configurator-close" (click)="handleCloseClick()">
16508
+ <co-icon [iconData]="iconService.getIcon(icons.XmarkLightFull)"></co-icon>
16509
+ </div>
16510
+ }
16511
+ </div>
16119
16512
  </div>
16120
16513
  }
16121
16514
  <div class="product-configurator-details" #scrollcontainer>
@@ -16143,7 +16536,7 @@ class ProductConfiguratorComponent {
16143
16536
  }
16144
16537
  </div>
16145
16538
  }
16146
- `, isInline: true, dependencies: [{ kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductConfiguratorSelectorComponent, selector: "co-product-configurator-selector", inputs: ["selection", "options", "lastNodeWithChildren", "selectionIndex", "treeLevelIndex", "isActive", "markAsException"], outputs: ["activate"] }, { kind: "pipe", type: i4.PriceDisplayPipe, name: "priceDisplay" }, { kind: "pipe", type: LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
16539
+ `, isInline: true, dependencies: [{ kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductConfiguratorSelectorComponent, selector: "co-product-configurator-selector", inputs: ["selection", "options", "lastNodeWithChildren", "selectionIndex", "treeLevelIndex", "isActive", "markAsException", "showAll", "suppressSubShowMore", "useGroupedParentVisibility"], outputs: ["activate"] }, { kind: "component", type: ConfigurationPresetComponent, selector: "co-configuration-preset" }, { kind: "pipe", type: i4.PriceDisplayPipe, name: "priceDisplay" }, { kind: "pipe", type: LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
16147
16540
  }
16148
16541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorComponent, decorators: [{
16149
16542
  type: Component,
@@ -16158,11 +16551,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16158
16551
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16159
16552
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16160
16553
  </div>
16161
- @if (canClose) {
16162
- <div class="product-configurator-close" (click)="handleCloseClick()">
16163
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16164
- </div>
16165
- }
16554
+ <div class="product-configurator-header-actions">
16555
+ @if (showSaveAndLoadConfiguration) {
16556
+ <co-configuration-preset></co-configuration-preset>
16557
+ }
16558
+ @if (canClose) {
16559
+ <div class="product-configurator-close" (click)="handleCloseClick()">
16560
+ <co-icon [iconData]="iconService.getIcon(icons.XmarkLightFull)"></co-icon>
16561
+ </div>
16562
+ }
16563
+ </div>
16166
16564
  </div>
16167
16565
  }
16168
16566
  <div class="product-configurator-details" #scrollcontainer>
@@ -16209,12 +16607,225 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16209
16607
  type: Input
16210
16608
  }], customDimensions: [{
16211
16609
  type: Input
16610
+ }], showSaveAndLoadConfiguration: [{
16611
+ type: Input
16212
16612
  }], showChange: [{
16213
16613
  type: Output
16214
16614
  }], answerChosen: [{
16215
16615
  type: Output
16216
16616
  }] } });
16217
16617
 
16618
+ class ConfigurationPresetDialogComponent {
16619
+ iconService;
16620
+ _configuringService;
16621
+ _configuratorConnectorService;
16622
+ _dictionaryService;
16623
+ _appEventService;
16624
+ icons = IconEnum;
16625
+ presetDialogMode = PresetDialogMode;
16626
+ showClass() {
16627
+ return true;
16628
+ }
16629
+ showDialog = false;
16630
+ instanceIdInput;
16631
+ dialogMode = PresetDialogMode.SAVE;
16632
+ showValidationErrors = false;
16633
+ validationError;
16634
+ _subs = [];
16635
+ constructor(iconService, _configuringService, _configuratorConnectorService, _dictionaryService, _appEventService) {
16636
+ this.iconService = iconService;
16637
+ this._configuringService = _configuringService;
16638
+ this._configuratorConnectorService = _configuratorConnectorService;
16639
+ this._dictionaryService = _dictionaryService;
16640
+ this._appEventService = _appEventService;
16641
+ this._subs.push(this._appEventService.changeConfigurationPresetDialogMode.subscribe((mode) => {
16642
+ this.handleOpenDialog(mode);
16643
+ }));
16644
+ }
16645
+ ngOnDestroy() {
16646
+ this._subs.forEach((sub) => sub.unsubscribe());
16647
+ }
16648
+ handleOpenDialog(mode) {
16649
+ if (mode === PresetDialogMode.SAVE) {
16650
+ const instanceId = this._configuringService.buildResult.instanceId;
16651
+ this._configuratorConnectorService.storePreset(instanceId).then((response) => {
16652
+ if (response && response.validationResult && response.validationResult.success) {
16653
+ this.instanceIdInput = response.resultObject;
16654
+ this.dialogMode = mode;
16655
+ this.showDialog = true;
16656
+ }
16657
+ });
16658
+ }
16659
+ else if (mode === PresetDialogMode.LOAD) {
16660
+ this.dialogMode = mode;
16661
+ this.showDialog = true;
16662
+ }
16663
+ }
16664
+ handleCloseClick() {
16665
+ this.showDialog = false;
16666
+ }
16667
+ handleCopySuccess() {
16668
+ this.instanceIdInput = this._dictionaryService.get('COPIED');
16669
+ }
16670
+ loadConfiguration() {
16671
+ const goodId = +this._configuringService.buildResult.goodId;
16672
+ this._configuratorConnectorService.initForPreset(this.instanceIdInput, goodId).then((response) => {
16673
+ if (response && response.validationResult && response.validationResult.success) {
16674
+ this.showDialog = false;
16675
+ const resultObject = this._configuringService.buildResult;
16676
+ resultObject.instanceId = response.resultObject;
16677
+ this._configuringService.configure(resultObject);
16678
+ }
16679
+ else {
16680
+ // error, shit not found
16681
+ if (response.validationResult && response.validationResult.messages && response.validationResult.messages.length > 0) {
16682
+ const firstMessage = response.validationResult.messages[0].message;
16683
+ this.showValidationErrors = true;
16684
+ this.validationError = firstMessage;
16685
+ }
16686
+ }
16687
+ });
16688
+ }
16689
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogComponent, deps: [{ token: IconCacheService }, { token: ConfiguringService }, { token: ConfiguratorConnectorService }, { token: DictionaryService }, { token: AppEventService }], target: i0.ɵɵFactoryTarget.Component });
16690
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfigurationPresetDialogComponent, isStandalone: false, selector: "co-configuration-preset-dialog", host: { properties: { "class.co-configuration-preset-dialog": "this.showClass" } }, ngImport: i0, template: `
16691
+ @if (showDialog) {
16692
+ <div class="configuration-preset-dialog">
16693
+ <div class="configuration-preset-dialog-container">
16694
+ <div class="configuration-preset-dialog-container-header">
16695
+ @if (dialogMode === presetDialogMode.SAVE) {
16696
+ <co-icon [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"></co-icon>
16697
+ <h3 [textContent]="'SAVE_CONFIGURATION' | localize"></h3>
16698
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16699
+ <co-icon [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"></co-icon>
16700
+ <h3 [textContent]="'LOAD_CONFIGURATION' | localize"></h3>
16701
+ }
16702
+ </div>
16703
+ <div class="configuration-preset-dialog-container-body">
16704
+ @if (dialogMode === presetDialogMode.SAVE) {
16705
+ <div class="save-success">
16706
+ <p class="save-success-text" [textContent]="instanceIdInput"></p>
16707
+ <co-button
16708
+ class="save-success-button"
16709
+ [cdkCopyToClipboard]="instanceIdInput"
16710
+ [iconData]="iconService.getIcon(icons.CopyRegularFull)"
16711
+ (onClick)="handleCopySuccess()">
16712
+ </co-button>
16713
+ </div>
16714
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16715
+ <co-input-text
16716
+ [placeholder]="'CONFIGURATION_CODE' | localize"
16717
+ [(model)]="instanceIdInput"
16718
+ ></co-input-text>
16719
+
16720
+ @if (showValidationErrors) {
16721
+ <div class="validation-error">
16722
+ <p [textContent]="validationError"></p>
16723
+ </div>
16724
+ }
16725
+ }
16726
+ </div>
16727
+ <div class="configuration-preset-dialog-container-footer">
16728
+ @if (dialogMode === presetDialogMode.LOAD) {
16729
+ <co-button
16730
+ class="button-as-link"
16731
+ [label]="'CANCEL' | localize"
16732
+ (onClick)="handleCloseClick()"
16733
+ ></co-button>
16734
+ }
16735
+ @if (dialogMode === presetDialogMode.SAVE) {
16736
+ <co-button
16737
+ class="save-preset-button"
16738
+ [label]="'OK' | localize"
16739
+ (onClick)="handleCloseClick()">
16740
+ </co-button>
16741
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16742
+ <co-button
16743
+ class="open-preset-button"
16744
+ [label]="'OPEN' | localize"
16745
+ (onClick)="loadConfiguration()">
16746
+ </co-button>
16747
+ }
16748
+ </div>
16749
+ </div>
16750
+ </div>
16751
+ }
16752
+ `, isInline: true, dependencies: [{ kind: "component", type: i4.ButtonComponent, selector: "co-button", inputs: ["label", "iconData", "iconDataRight", "isToggleButton", "isToggled", "hidden", "disabled"], outputs: ["onClick", "clickedWhileDisabled", "isToggledChange"] }, { kind: "component", type: i4.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: i4.InputTextComponent, selector: "co-input-text", inputs: ["useContent", "placeholder", "align", "type", "formatPipe", "min", "max", "pattern", "digitsOnly", "excludePlusMinus", "showClearButton", "keyDownWhiteList", "showPlaceholderOnFocus", "leftIcon", "rightIcon", "leftIconData", "rightIconData", "selectOnFocus", "emptyPlace", "firstDayOfWeek", "noStyle", "hideArrowButtons", "model"], outputs: ["leftIconClick", "leftIconMouseDown", "leftIconMouseUp", "rightIconClick", "rightIconMouseDown", "rightIconMouseUp", "clearIconClick", "isFocused"] }, { kind: "directive", type: i7.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None });
16753
+ }
16754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogComponent, decorators: [{
16755
+ type: Component,
16756
+ args: [{
16757
+ selector: 'co-configuration-preset-dialog',
16758
+ template: `
16759
+ @if (showDialog) {
16760
+ <div class="configuration-preset-dialog">
16761
+ <div class="configuration-preset-dialog-container">
16762
+ <div class="configuration-preset-dialog-container-header">
16763
+ @if (dialogMode === presetDialogMode.SAVE) {
16764
+ <co-icon [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"></co-icon>
16765
+ <h3 [textContent]="'SAVE_CONFIGURATION' | localize"></h3>
16766
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16767
+ <co-icon [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"></co-icon>
16768
+ <h3 [textContent]="'LOAD_CONFIGURATION' | localize"></h3>
16769
+ }
16770
+ </div>
16771
+ <div class="configuration-preset-dialog-container-body">
16772
+ @if (dialogMode === presetDialogMode.SAVE) {
16773
+ <div class="save-success">
16774
+ <p class="save-success-text" [textContent]="instanceIdInput"></p>
16775
+ <co-button
16776
+ class="save-success-button"
16777
+ [cdkCopyToClipboard]="instanceIdInput"
16778
+ [iconData]="iconService.getIcon(icons.CopyRegularFull)"
16779
+ (onClick)="handleCopySuccess()">
16780
+ </co-button>
16781
+ </div>
16782
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16783
+ <co-input-text
16784
+ [placeholder]="'CONFIGURATION_CODE' | localize"
16785
+ [(model)]="instanceIdInput"
16786
+ ></co-input-text>
16787
+
16788
+ @if (showValidationErrors) {
16789
+ <div class="validation-error">
16790
+ <p [textContent]="validationError"></p>
16791
+ </div>
16792
+ }
16793
+ }
16794
+ </div>
16795
+ <div class="configuration-preset-dialog-container-footer">
16796
+ @if (dialogMode === presetDialogMode.LOAD) {
16797
+ <co-button
16798
+ class="button-as-link"
16799
+ [label]="'CANCEL' | localize"
16800
+ (onClick)="handleCloseClick()"
16801
+ ></co-button>
16802
+ }
16803
+ @if (dialogMode === presetDialogMode.SAVE) {
16804
+ <co-button
16805
+ class="save-preset-button"
16806
+ [label]="'OK' | localize"
16807
+ (onClick)="handleCloseClick()">
16808
+ </co-button>
16809
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16810
+ <co-button
16811
+ class="open-preset-button"
16812
+ [label]="'OPEN' | localize"
16813
+ (onClick)="loadConfiguration()">
16814
+ </co-button>
16815
+ }
16816
+ </div>
16817
+ </div>
16818
+ </div>
16819
+ }
16820
+ `,
16821
+ encapsulation: ViewEncapsulation.None,
16822
+ standalone: false
16823
+ }]
16824
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: ConfiguringService }, { type: ConfiguratorConnectorService }, { type: DictionaryService }, { type: AppEventService }], propDecorators: { showClass: [{
16825
+ type: HostBinding,
16826
+ args: ['class.co-configuration-preset-dialog']
16827
+ }] } });
16828
+
16218
16829
  class ThreedselectorComponent {
16219
16830
  _appEventService;
16220
16831
  _buildFurnitureService;
@@ -16228,6 +16839,7 @@ class ThreedselectorComponent {
16228
16839
  canCloseConfigurator = true;
16229
16840
  animateSlideout = true;
16230
16841
  showHeaderInformation = true;
16842
+ showSaveAndLoadConfiguration;
16231
16843
  buildFinished = new EventEmitter();
16232
16844
  showChange = new EventEmitter();
16233
16845
  showElementToolbar = false;
@@ -16290,29 +16902,34 @@ class ThreedselectorComponent {
16290
16902
  }
16291
16903
  }
16292
16904
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorComponent, deps: [{ token: AppEventService }, { token: SwitchBuildFurnitureService }, { token: ConfiguringService }, { token: ConfiguratorService }], target: i0.ɵɵFactoryTarget.Component });
16293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ThreedselectorComponent, isStandalone: false, selector: "co-threedselector", inputs: { selections: "selections", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation" }, outputs: { customizeButtonClicked: "customizeButtonClicked", buildFinished: "buildFinished", showChange: "showChange" }, host: { properties: { "class.co-threedselector": "this.showClass" } }, ngImport: i0, template: `
16294
- @if (!showFullConfiguration) {
16295
- <co-lite-selector
16296
- class="floating"
16297
- [showSelections]="showTemplate"
16298
- [showAnswers]="showTemplate"
16299
- [animateSlideout]="animateSlideout"
16300
- [canClose]="canCloseConfigurator"
16301
- (showChange)="handleShowChangeSelector($event)">
16302
- </co-lite-selector>
16303
- }
16304
-
16305
- @if (showFullConfiguration) {
16306
- <co-product-configurator
16307
- class="floating"
16308
- [show]="showTemplate"
16309
- [showSelections]="showSelections"
16310
- [canClose]="canCloseConfigurator"
16311
- [showHeaderInformation]="showHeaderInformation"
16312
- (showChange)="handleShowChangeSelector($event)">
16313
- </co-product-configurator>
16314
- }
16315
- `, isInline: true, dependencies: [{ kind: "component", type: LiteSelectorComponent, selector: "co-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "animateSlideout", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { kind: "component", type: ProductConfiguratorComponent, selector: "co-product-configurator", inputs: ["show", "showHeaderInformation", "showSelections", "showLabel", "canClose", "customDimensions"], outputs: ["showChange", "answerChosen"] }], animations: [
16905
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ThreedselectorComponent, isStandalone: false, selector: "co-threedselector", inputs: { selections: "selections", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { customizeButtonClicked: "customizeButtonClicked", buildFinished: "buildFinished", showChange: "showChange" }, host: { properties: { "class.co-threedselector": "this.showClass" } }, ngImport: i0, template: `
16906
+ @if (!showFullConfiguration) {
16907
+ <co-lite-selector
16908
+ class="floating"
16909
+ [showSelections]="showTemplate"
16910
+ [showAnswers]="showTemplate"
16911
+ [animateSlideout]="animateSlideout"
16912
+ [canClose]="canCloseConfigurator"
16913
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16914
+ (showChange)="handleShowChangeSelector($event)">
16915
+ </co-lite-selector>
16916
+ }
16917
+
16918
+ @if (showFullConfiguration) {
16919
+ <co-product-configurator
16920
+ class="floating"
16921
+ [show]="showTemplate"
16922
+ [showSelections]="showSelections"
16923
+ [canClose]="canCloseConfigurator"
16924
+ [showHeaderInformation]="showHeaderInformation"
16925
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16926
+ (showChange)="handleShowChangeSelector($event)">
16927
+ </co-product-configurator>
16928
+ }
16929
+ @if (showSaveAndLoadConfiguration) {
16930
+ <co-configuration-preset-dialog></co-configuration-preset-dialog>
16931
+ }
16932
+ `, isInline: true, dependencies: [{ kind: "component", type: LiteSelectorComponent, selector: "co-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "animateSlideout", "customDimensions", "showSaveAndLoadConfiguration"], outputs: ["showChange", "answerChosen"] }, { kind: "component", type: ProductConfiguratorComponent, selector: "co-product-configurator", inputs: ["show", "showHeaderInformation", "showSelections", "showLabel", "canClose", "customDimensions", "showSaveAndLoadConfiguration"], outputs: ["showChange", "answerChosen"] }, { kind: "component", type: ConfigurationPresetDialogComponent, selector: "co-configuration-preset-dialog" }], animations: [
16316
16933
  trigger('showElementToolbar', [
16317
16934
  state('void', style({ opacity: 0 })),
16318
16935
  state('*', style({ opacity: 1 })),
@@ -16325,27 +16942,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16325
16942
  args: [{
16326
16943
  selector: 'co-threedselector',
16327
16944
  template: `
16328
- @if (!showFullConfiguration) {
16329
- <co-lite-selector
16330
- class="floating"
16331
- [showSelections]="showTemplate"
16332
- [showAnswers]="showTemplate"
16333
- [animateSlideout]="animateSlideout"
16334
- [canClose]="canCloseConfigurator"
16335
- (showChange)="handleShowChangeSelector($event)">
16336
- </co-lite-selector>
16337
- }
16338
-
16339
- @if (showFullConfiguration) {
16340
- <co-product-configurator
16341
- class="floating"
16342
- [show]="showTemplate"
16343
- [showSelections]="showSelections"
16344
- [canClose]="canCloseConfigurator"
16345
- [showHeaderInformation]="showHeaderInformation"
16346
- (showChange)="handleShowChangeSelector($event)">
16347
- </co-product-configurator>
16348
- }
16945
+ @if (!showFullConfiguration) {
16946
+ <co-lite-selector
16947
+ class="floating"
16948
+ [showSelections]="showTemplate"
16949
+ [showAnswers]="showTemplate"
16950
+ [animateSlideout]="animateSlideout"
16951
+ [canClose]="canCloseConfigurator"
16952
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16953
+ (showChange)="handleShowChangeSelector($event)">
16954
+ </co-lite-selector>
16955
+ }
16956
+
16957
+ @if (showFullConfiguration) {
16958
+ <co-product-configurator
16959
+ class="floating"
16960
+ [show]="showTemplate"
16961
+ [showSelections]="showSelections"
16962
+ [canClose]="canCloseConfigurator"
16963
+ [showHeaderInformation]="showHeaderInformation"
16964
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16965
+ (showChange)="handleShowChangeSelector($event)">
16966
+ </co-product-configurator>
16967
+ }
16968
+ @if (showSaveAndLoadConfiguration) {
16969
+ <co-configuration-preset-dialog></co-configuration-preset-dialog>
16970
+ }
16349
16971
  `,
16350
16972
  encapsulation: ViewEncapsulation.None,
16351
16973
  animations: [
@@ -16370,6 +16992,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16370
16992
  type: Input
16371
16993
  }], showHeaderInformation: [{
16372
16994
  type: Input
16995
+ }], showSaveAndLoadConfiguration: [{
16996
+ type: Input
16373
16997
  }], buildFinished: [{
16374
16998
  type: Output
16375
16999
  }], showChange: [{
@@ -16391,6 +17015,7 @@ class ConfiguratorComponent {
16391
17015
  canCloseConfigurator = true;
16392
17016
  animateSlideout = true;
16393
17017
  showHeaderInformation = true;
17018
+ showSaveAndLoadConfiguration;
16394
17019
  buildResult = new EventEmitter();
16395
17020
  // TODO
16396
17021
  isLoading = new EventEmitter();
@@ -16443,54 +17068,56 @@ class ConfiguratorComponent {
16443
17068
  }
16444
17069
  }
16445
17070
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, deps: [{ token: SettingsService }, { token: LoaderService }, { token: AppEventService }, { token: ConfiguringService }], target: i0.ɵɵFactoryTarget.Component });
16446
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorComponent, isStandalone: false, selector: "co-configurator", inputs: { showLoader: "showLoader", showProgressBar: "showProgressBar", showErrorMessages: "showErrorMessages", outputErrorMessages: "outputErrorMessages", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation" }, outputs: { buildResult: "buildResult", isLoading: "isLoading", updateProgressBar: "updateProgressBar", errorMessages: "errorMessages", showChange: "showChange" }, host: { properties: { "class.co-configurator": "this.showClass" } }, ngImport: i0, template: `
16447
- @if (showProgressBar) {
16448
- <co-progress-bar></co-progress-bar>
16449
- }
16450
- @if (showLoader) {
16451
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16452
- }
16453
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16454
- <co-configurator-error-dialog
16455
- [errorMessages]="configurationResultObject.errorMessages"
16456
- (closeErrorDialoag)="handleCloseErrorDialog()"
16457
- ></co-configurator-error-dialog>
16458
- }
17071
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorComponent, isStandalone: false, selector: "co-configurator", inputs: { showLoader: "showLoader", showProgressBar: "showProgressBar", showErrorMessages: "showErrorMessages", outputErrorMessages: "outputErrorMessages", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { buildResult: "buildResult", isLoading: "isLoading", updateProgressBar: "updateProgressBar", errorMessages: "errorMessages", showChange: "showChange" }, host: { properties: { "class.co-configurator": "this.showClass" } }, ngImport: i0, template: `
17072
+ @if (showProgressBar) {
17073
+ <co-progress-bar></co-progress-bar>
17074
+ }
17075
+ @if (showLoader) {
17076
+ <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
17077
+ }
17078
+ @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
17079
+ <co-configurator-error-dialog
17080
+ [errorMessages]="configurationResultObject.errorMessages"
17081
+ (closeErrorDialoag)="handleCloseErrorDialog()"
17082
+ ></co-configurator-error-dialog>
17083
+ }
16459
17084
 
16460
- <co-threedselector
16461
- [canCloseConfigurator]="canCloseConfigurator"
16462
- [animateSlideout]="animateSlideout"
16463
- [showHeaderInformation]="showHeaderInformation"
16464
- (buildFinished)="handleBuildFinished($event)"
16465
- (showChange)="handleShowChange($event)">
16466
- </co-threedselector>
16467
- `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "co-progress-bar" }, { kind: "component", type: ConfiguratorLoaderComponent, selector: "co-configurator-loader", inputs: ["show"] }, { kind: "component", type: ConfiguratorErrorDialogComponent, selector: "co-configurator-error-dialog", inputs: ["errorMessages"], outputs: ["closeErrorDialoag"] }, { kind: "component", type: ThreedselectorComponent, selector: "co-threedselector", inputs: ["selections", "canCloseConfigurator", "animateSlideout", "showHeaderInformation"], outputs: ["customizeButtonClicked", "buildFinished", "showChange"] }], encapsulation: i0.ViewEncapsulation.None });
17085
+ <co-threedselector
17086
+ [canCloseConfigurator]="canCloseConfigurator"
17087
+ [animateSlideout]="animateSlideout"
17088
+ [showHeaderInformation]="showHeaderInformation"
17089
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
17090
+ (buildFinished)="handleBuildFinished($event)"
17091
+ (showChange)="handleShowChange($event)">
17092
+ </co-threedselector>
17093
+ `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "co-progress-bar" }, { kind: "component", type: ConfiguratorLoaderComponent, selector: "co-configurator-loader", inputs: ["show"] }, { kind: "component", type: ConfiguratorErrorDialogComponent, selector: "co-configurator-error-dialog", inputs: ["errorMessages"], outputs: ["closeErrorDialoag"] }, { kind: "component", type: ThreedselectorComponent, selector: "co-threedselector", inputs: ["selections", "canCloseConfigurator", "animateSlideout", "showHeaderInformation", "showSaveAndLoadConfiguration"], outputs: ["customizeButtonClicked", "buildFinished", "showChange"] }], encapsulation: i0.ViewEncapsulation.None });
16468
17094
  }
16469
17095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, decorators: [{
16470
17096
  type: Component,
16471
17097
  args: [{
16472
17098
  selector: 'co-configurator',
16473
17099
  template: `
16474
- @if (showProgressBar) {
16475
- <co-progress-bar></co-progress-bar>
16476
- }
16477
- @if (showLoader) {
16478
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16479
- }
16480
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16481
- <co-configurator-error-dialog
16482
- [errorMessages]="configurationResultObject.errorMessages"
16483
- (closeErrorDialoag)="handleCloseErrorDialog()"
16484
- ></co-configurator-error-dialog>
16485
- }
17100
+ @if (showProgressBar) {
17101
+ <co-progress-bar></co-progress-bar>
17102
+ }
17103
+ @if (showLoader) {
17104
+ <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
17105
+ }
17106
+ @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
17107
+ <co-configurator-error-dialog
17108
+ [errorMessages]="configurationResultObject.errorMessages"
17109
+ (closeErrorDialoag)="handleCloseErrorDialog()"
17110
+ ></co-configurator-error-dialog>
17111
+ }
16486
17112
 
16487
- <co-threedselector
16488
- [canCloseConfigurator]="canCloseConfigurator"
16489
- [animateSlideout]="animateSlideout"
16490
- [showHeaderInformation]="showHeaderInformation"
16491
- (buildFinished)="handleBuildFinished($event)"
16492
- (showChange)="handleShowChange($event)">
16493
- </co-threedselector>
17113
+ <co-threedselector
17114
+ [canCloseConfigurator]="canCloseConfigurator"
17115
+ [animateSlideout]="animateSlideout"
17116
+ [showHeaderInformation]="showHeaderInformation"
17117
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
17118
+ (buildFinished)="handleBuildFinished($event)"
17119
+ (showChange)="handleShowChange($event)">
17120
+ </co-threedselector>
16494
17121
  `,
16495
17122
  encapsulation: ViewEncapsulation.None,
16496
17123
  standalone: false
@@ -16512,6 +17139,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16512
17139
  type: Input
16513
17140
  }], showHeaderInformation: [{
16514
17141
  type: Input
17142
+ }], showSaveAndLoadConfiguration: [{
17143
+ type: Input
16515
17144
  }], buildResult: [{
16516
17145
  type: Output
16517
17146
  }], isLoading: [{
@@ -17389,6 +18018,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17389
18018
  }]
17390
18019
  }] });
17391
18020
 
18021
+ class ConfigurationPresetModule {
18022
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18023
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, declarations: [ConfigurationPresetComponent], imports: [PipesModule,
18024
+ ButtonModule,
18025
+ IconModule,
18026
+ InputTextModule,
18027
+ CdkCopyToClipboard], exports: [ConfigurationPresetComponent] });
18028
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, imports: [PipesModule,
18029
+ ButtonModule,
18030
+ IconModule,
18031
+ InputTextModule] });
18032
+ }
18033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, decorators: [{
18034
+ type: NgModule,
18035
+ args: [{
18036
+ imports: [
18037
+ PipesModule,
18038
+ ButtonModule,
18039
+ IconModule,
18040
+ InputTextModule,
18041
+ CdkCopyToClipboard
18042
+ ],
18043
+ declarations: [
18044
+ ConfigurationPresetComponent
18045
+ ],
18046
+ exports: [
18047
+ ConfigurationPresetComponent
18048
+ ]
18049
+ }]
18050
+ }] });
18051
+
17392
18052
  class SelectionsSummaryModule {
17393
18053
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17394
18054
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, declarations: [SelectionsSummaryComponent], imports: [CoSummaryLineModule,
@@ -17396,13 +18056,15 @@ class SelectionsSummaryModule {
17396
18056
  PipesModule,
17397
18057
  PriceDisplayPipeModule,
17398
18058
  SelectionsSummaryLineModule,
17399
- IconModule], exports: [SelectionsSummaryComponent] });
18059
+ IconModule,
18060
+ ConfigurationPresetModule], exports: [SelectionsSummaryComponent] });
17400
18061
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, imports: [CoSummaryLineModule,
17401
18062
  CommonModule,
17402
18063
  PipesModule,
17403
18064
  PriceDisplayPipeModule,
17404
18065
  SelectionsSummaryLineModule,
17405
- IconModule] });
18066
+ IconModule,
18067
+ ConfigurationPresetModule] });
17406
18068
  }
17407
18069
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, decorators: [{
17408
18070
  type: NgModule,
@@ -17413,7 +18075,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17413
18075
  PipesModule,
17414
18076
  PriceDisplayPipeModule,
17415
18077
  SelectionsSummaryLineModule,
17416
- IconModule
18078
+ IconModule,
18079
+ ConfigurationPresetModule
17417
18080
  ],
17418
18081
  declarations: [
17419
18082
  SelectionsSummaryComponent,
@@ -17624,7 +18287,8 @@ class ProductConfiguratorModule {
17624
18287
  PipesModule,
17625
18288
  IconModule,
17626
18289
  TooltipDirectiveModule,
17627
- ProductConfiguratorSelectorModule], exports: [ProductConfiguratorComponent] });
18290
+ ProductConfiguratorSelectorModule,
18291
+ ConfigurationPresetModule], exports: [ProductConfiguratorComponent] });
17628
18292
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, imports: [CommonModule,
17629
18293
  MatIconModule,
17630
18294
  MatButtonModule,
@@ -17637,7 +18301,8 @@ class ProductConfiguratorModule {
17637
18301
  PipesModule,
17638
18302
  IconModule,
17639
18303
  TooltipDirectiveModule,
17640
- ProductConfiguratorSelectorModule] });
18304
+ ProductConfiguratorSelectorModule,
18305
+ ConfigurationPresetModule] });
17641
18306
  }
17642
18307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, decorators: [{
17643
18308
  type: NgModule,
@@ -17655,7 +18320,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17655
18320
  PipesModule,
17656
18321
  IconModule,
17657
18322
  TooltipDirectiveModule,
17658
- ProductConfiguratorSelectorModule
18323
+ ProductConfiguratorSelectorModule,
18324
+ ConfigurationPresetModule
17659
18325
  ],
17660
18326
  schemas: [
17661
18327
  NO_ERRORS_SCHEMA
@@ -17669,14 +18335,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17669
18335
  }]
17670
18336
  }] });
17671
18337
 
18338
+ class ConfigurationPresetDialogModule {
18339
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18340
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, declarations: [ConfigurationPresetDialogComponent], imports: [PipesModule,
18341
+ ButtonModule,
18342
+ IconModule,
18343
+ InputTextModule,
18344
+ CdkCopyToClipboard], exports: [ConfigurationPresetDialogComponent] });
18345
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, imports: [PipesModule,
18346
+ ButtonModule,
18347
+ IconModule,
18348
+ InputTextModule] });
18349
+ }
18350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, decorators: [{
18351
+ type: NgModule,
18352
+ args: [{
18353
+ imports: [
18354
+ PipesModule,
18355
+ ButtonModule,
18356
+ IconModule,
18357
+ InputTextModule,
18358
+ CdkCopyToClipboard
18359
+ ],
18360
+ declarations: [
18361
+ ConfigurationPresetDialogComponent
18362
+ ],
18363
+ exports: [
18364
+ ConfigurationPresetDialogComponent
18365
+ ]
18366
+ }]
18367
+ }] });
18368
+
17672
18369
  class ThreedselectorModule {
17673
18370
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17674
18371
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, declarations: [ThreedselectorComponent], imports: [LiteSelectorModule,
17675
18372
  ProductConfiguratorModule,
17676
- CommonModule], exports: [ThreedselectorComponent] });
18373
+ CommonModule,
18374
+ ConfigurationPresetDialogModule], exports: [ThreedselectorComponent] });
17677
18375
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, imports: [LiteSelectorModule,
17678
18376
  ProductConfiguratorModule,
17679
- CommonModule] });
18377
+ CommonModule,
18378
+ ConfigurationPresetDialogModule] });
17680
18379
  }
17681
18380
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, decorators: [{
17682
18381
  type: NgModule,
@@ -17684,7 +18383,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17684
18383
  imports: [
17685
18384
  LiteSelectorModule,
17686
18385
  ProductConfiguratorModule,
17687
- CommonModule
18386
+ CommonModule,
18387
+ ConfigurationPresetDialogModule
17688
18388
  ],
17689
18389
  declarations: [
17690
18390
  ThreedselectorComponent