@colijnit/configurator 261.20.5 → 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 +987 -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
  }
@@ -10181,11 +10192,6 @@ class LoadFurnitureService extends LoadFurnitureBaseService {
10181
10192
  if (!this.needs3DModel(result.placement)) {
10182
10193
  result.resultType = ResultType.No3DModel;
10183
10194
  }
10184
- if (!result.assetUrl && result.resultType !== ResultType.No3DModel || result.resultType === ResultType.ArticleNotFound) {
10185
- result.errorMessages.push(new ConfiguratorErrorMessage('ARTICLE_NOT_FOUND', 'ARTICLE_NOT_FOUND_DESC'));
10186
- DebugUtils.log('Article not found');
10187
- return Promise.reject(result);
10188
- }
10189
10195
  });
10190
10196
  if (this.article) {
10191
10197
  // Add the data to the result
@@ -12243,6 +12249,7 @@ var IconEnum;
12243
12249
  IconEnum["ArrowTurnRight"] = "arrow_turn_right";
12244
12250
  IconEnum["ArrowTurnRightRegular"] = "arrow_turn_right_regular";
12245
12251
  IconEnum["ArCircle"] = "ar_circle";
12252
+ IconEnum["BarsLightFull"] = "bars_light_full";
12246
12253
  IconEnum["Brush"] = "brush";
12247
12254
  IconEnum["CameraSolid"] = "camera_solid";
12248
12255
  IconEnum["CameraTopdown"] = "camera_topdown";
@@ -12267,6 +12274,7 @@ var IconEnum;
12267
12274
  IconEnum["ConfFrame"] = "conf_frame";
12268
12275
  IconEnum["ConfPlane"] = "conf_plane";
12269
12276
  IconEnum["CopyLight"] = "copy_light";
12277
+ IconEnum["CopyRegularFull"] = "copy_regular_full";
12270
12278
  IconEnum["Couch"] = "couch";
12271
12279
  IconEnum["Cross"] = "cross";
12272
12280
  IconEnum["CubeOutline"] = "cube-outline";
@@ -12279,7 +12287,9 @@ var IconEnum;
12279
12287
  IconEnum["EditButton"] = "edit-button";
12280
12288
  IconEnum["Expand"] = "expand";
12281
12289
  IconEnum["FillDripLight"] = "fill_drip_light";
12290
+ IconEnum["FloppyDiskLightFull"] = "floppy_disk_light_full";
12282
12291
  IconEnum["Flower"] = "flower";
12292
+ IconEnum["FolderOpenLightFull"] = "folder_open_light_full";
12283
12293
  IconEnum["GaugeHighSolidFull"] = "gauge_high_solid_full";
12284
12294
  IconEnum["GaugeLowSolidFull"] = "gauge_low_solid_full";
12285
12295
  IconEnum["GaugeMaxSolidFull"] = "gauge_max_solid_full";
@@ -12333,6 +12343,7 @@ var IconEnum;
12333
12343
  IconEnum["WandMagicSparkles"] = "wand_magic_sparkles";
12334
12344
  IconEnum["WifiSolidFull"] = "wifi_solid_full";
12335
12345
  IconEnum["XmarkLight"] = "xmark_light";
12346
+ IconEnum["XmarkLightFull"] = "xmark_light_full";
12336
12347
  IconEnum["XmarkRegular"] = "xmark_regular";
12337
12348
  })(IconEnum || (IconEnum = {}));
12338
12349
 
@@ -12355,6 +12366,7 @@ const IconSvg = {
12355
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>",
12356
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>",
12357
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>",
12358
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>",
12359
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>",
12360
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>",
@@ -12379,6 +12391,7 @@ const IconSvg = {
12379
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>",
12380
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>",
12381
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>",
12382
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>",
12383
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>",
12384
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>",
@@ -12391,7 +12404,9 @@ const IconSvg = {
12391
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>",
12392
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>",
12393
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>",
12394
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>",
12395
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>",
12396
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>",
12397
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>",
@@ -12445,6 +12460,7 @@ const IconSvg = {
12445
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>",
12446
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>",
12447
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>",
12448
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>"
12449
12465
  };
12450
12466
 
@@ -12861,7 +12877,7 @@ class GoogleTranslateService {
12861
12877
  return input;
12862
12878
  }
12863
12879
  const sourceLang = this._defaultLanguage.toLowerCase();
12864
- const targetLang = this._clientLanguage.toLowerCase();
12880
+ const targetLang = this._clientLanguage ? this._clientLanguage.toLowerCase() : sourceLang;
12865
12881
  const translationList = [input];
12866
12882
  // When we do not need a translation
12867
12883
  if (!input || (sourceLang === targetLang)) {
@@ -14726,6 +14742,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14726
14742
  args: ['class.should-be-hidden']
14727
14743
  }] } });
14728
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
+
14729
14847
  class SelectionsSummaryComponent {
14730
14848
  configuratorConnectorService;
14731
14849
  iconService;
@@ -14738,6 +14856,7 @@ class SelectionsSummaryComponent {
14738
14856
  canClose = true;
14739
14857
  answersTemplate;
14740
14858
  answerToShowFromSelectionText;
14859
+ showSaveAndLoadConfiguration;
14741
14860
  customDimensions = false;
14742
14861
  disableMouse = false;
14743
14862
  handledocumentMouseUp(event) {
@@ -14787,82 +14906,88 @@ class SelectionsSummaryComponent {
14787
14906
  this.selectionToCustomize = sel;
14788
14907
  }
14789
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 });
14790
- 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: `
14791
- @if (showLabel || canClose) {
14792
- <header class="drawer__header">
14793
- @if (showLabel) {
14794
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14795
- }
14796
- @if (canClose) {
14797
- <button class="close-lite-selector" (click)="closeClick.emit()">
14798
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14799
- </button>
14800
- }
14801
- </header>
14802
- }
14803
- @if (selections && selections.length > 0) {
14804
- <div class="selections-content small-scrollbar">
14805
- @for (sel of selections; track sel; let index = $index) {
14806
- <co-selections-summary-line
14807
- [selection]="sel"
14808
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14809
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14810
- [valutaSymbol]="valutaSymbol"
14811
- (summaryLineClick)="handleClick(sel)"
14812
- (summaryLineDelete)="handleDelete($event, sel)"
14813
- (summaryLineRepeat)="handleRepeat($event, sel)"
14814
- (customizeButtonClicked)="toggleElement(sel)"
14815
- ></co-selections-summary-line>
14816
- }
14817
- @if (showAsConfigured) {
14818
- <div class="sum">
14819
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14820
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14821
- </div>
14822
- }
14823
- </div>
14824
- }
14825
- `, 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 });
14826
14948
  }
14827
14949
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryComponent, decorators: [{
14828
14950
  type: Component,
14829
14951
  args: [{
14830
14952
  selector: 'co-selections-summary',
14831
14953
  template: `
14832
- @if (showLabel || canClose) {
14833
- <header class="drawer__header">
14834
- @if (showLabel) {
14835
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14836
- }
14837
- @if (canClose) {
14838
- <button class="close-lite-selector" (click)="closeClick.emit()">
14839
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14840
- </button>
14841
- }
14842
- </header>
14843
- }
14844
- @if (selections && selections.length > 0) {
14845
- <div class="selections-content small-scrollbar">
14846
- @for (sel of selections; track sel; let index = $index) {
14847
- <co-selections-summary-line
14848
- [selection]="sel"
14849
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14850
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14851
- [valutaSymbol]="valutaSymbol"
14852
- (summaryLineClick)="handleClick(sel)"
14853
- (summaryLineDelete)="handleDelete($event, sel)"
14854
- (summaryLineRepeat)="handleRepeat($event, sel)"
14855
- (customizeButtonClicked)="toggleElement(sel)"
14856
- ></co-selections-summary-line>
14857
- }
14858
- @if (showAsConfigured) {
14859
- <div class="sum">
14860
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14861
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14862
- </div>
14863
- }
14864
- </div>
14865
- }
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
+ }
14866
14991
  `,
14867
14992
  encapsulation: ViewEncapsulation.None,
14868
14993
  standalone: false
@@ -14880,6 +15005,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14880
15005
  type: Input
14881
15006
  }], answerToShowFromSelectionText: [{
14882
15007
  type: Input
15008
+ }], showSaveAndLoadConfiguration: [{
15009
+ type: Input
14883
15010
  }], customDimensions: [{
14884
15011
  type: HostBinding,
14885
15012
  args: ['class.custom-dimensions']
@@ -14939,6 +15066,7 @@ class LiteSelectorComponent {
14939
15066
  canClose = true;
14940
15067
  animateSlideout = true;
14941
15068
  customDimensions = false;
15069
+ showSaveAndLoadConfiguration;
14942
15070
  showChange = new EventEmitter();
14943
15071
  answerChosen = new EventEmitter();
14944
15072
  answerToShowFromSelectionText;
@@ -14991,7 +15119,7 @@ class LiteSelectorComponent {
14991
15119
  // this.iOne.getMoodImageForAnswerSelection(answerSelected.answer, false);
14992
15120
  }
14993
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 });
14994
- 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: `
14995
15123
  <ng-container>
14996
15124
  @if (showSelections && configuratorConnectorService.selectionsToDisplay.length > 0) {
14997
15125
  <co-selections-summary
@@ -15003,11 +15131,11 @@ class LiteSelectorComponent {
15003
15131
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15004
15132
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15005
15133
  [selections]="configuratorConnectorService.selectionsToDisplay"
15134
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15006
15135
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15007
15136
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15008
15137
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15009
- (closeClick)="onCloseLiteSelectorButtonClick()"
15010
- >
15138
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15011
15139
  </co-selections-summary>
15012
15140
  }
15013
15141
  @if (!inlineAnswers) {
@@ -15028,7 +15156,7 @@ class LiteSelectorComponent {
15028
15156
  (answerChosen)="onAnswersSlideoutAnswerChosen($event)"
15029
15157
  ></co-answers-slideout>
15030
15158
  </ng-template>
15031
- `, 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: [
15032
15160
  trigger('showSelections', [
15033
15161
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15034
15162
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15052,11 +15180,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15052
15180
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15053
15181
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15054
15182
  [selections]="configuratorConnectorService.selectionsToDisplay"
15183
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15055
15184
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15056
15185
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15057
15186
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15058
- (closeClick)="onCloseLiteSelectorButtonClick()"
15059
- >
15187
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15060
15188
  </co-selections-summary>
15061
15189
  }
15062
15190
  @if (!inlineAnswers) {
@@ -15111,6 +15239,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15111
15239
  args: ['class.custom-dimensions']
15112
15240
  }, {
15113
15241
  type: Input
15242
+ }], showSaveAndLoadConfiguration: [{
15243
+ type: Input
15114
15244
  }], showChange: [{
15115
15245
  type: Output
15116
15246
  }], answerChosen: [{
@@ -15139,6 +15269,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15139
15269
  icons = IconEnum;
15140
15270
  option;
15141
15271
  tileClass = 'small';
15272
+ noLabel = false;
15142
15273
  selectionClicked = new EventEmitter();
15143
15274
  constructor(configuratorConnectorService, iconService, settingsService) {
15144
15275
  this.configuratorConnectorService = configuratorConnectorService;
@@ -15149,7 +15280,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15149
15280
  this.selectionClicked.emit();
15150
15281
  }
15151
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 });
15152
- 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: `
15153
15284
  <!-- When selected show checkmark -->
15154
15285
  <div
15155
15286
  class="configurator-selector-option-tile-container configurator-selector-option-tile-container-{{this.tileClass}}"
@@ -15173,14 +15304,16 @@ class ProductConfiguratorSelectorOptionTileComponent {
15173
15304
  }
15174
15305
  </div>
15175
15306
  <!-- Answer text -->
15176
- <div class="product-configurator-selector-option-tile-description">
15177
- @if (option.nodeText) {
15178
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15179
- }
15180
- @if (!option.nodeText) {
15181
- <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>
15182
15316
  }
15183
- </div>
15184
15317
  </div>
15185
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 });
15186
15319
  }
@@ -15212,14 +15345,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15212
15345
  }
15213
15346
  </div>
15214
15347
  <!-- Answer text -->
15215
- <div class="product-configurator-selector-option-tile-description">
15216
- @if (option.nodeText) {
15217
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15218
- }
15219
- @if (!option.nodeText) {
15220
- <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>
15221
15357
  }
15222
- </div>
15223
15358
  </div>
15224
15359
  `,
15225
15360
  encapsulation: ViewEncapsulation.None,
@@ -15232,6 +15367,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15232
15367
  type: Input
15233
15368
  }], tileClass: [{
15234
15369
  type: Input
15370
+ }], noLabel: [{
15371
+ type: Input
15235
15372
  }], selectionClicked: [{
15236
15373
  type: Output
15237
15374
  }] } });
@@ -15498,13 +15635,24 @@ class ProductConfiguratorSelectorOptionComponent {
15498
15635
  selection;
15499
15636
  listOfChoices;
15500
15637
  markAsException;
15638
+ showGlobalAll = false;
15639
+ groupedSubShow = true;
15501
15640
  configurationDisplayOption = ConfigurationDisplayOption;
15502
15641
  selectionClass = '';
15503
15642
  showAllTiles = false;
15504
15643
  maxVisibleTiles = 10;
15505
- maxVisibleSmallTiles = 24;
15644
+ maxVisibleSmallTiles = 7;
15506
15645
  visibleAnswers = [];
15507
15646
  remainingTilesCount = 0;
15647
+ smallTileOptions = [
15648
+ ConfigurationDisplayOption.TileSmall,
15649
+ ConfigurationDisplayOption.SmallCircle,
15650
+ ConfigurationDisplayOption.SmallSquare
15651
+ ];
15652
+ largeTileOptions = [
15653
+ ConfigurationDisplayOption.TileLarge,
15654
+ ConfigurationDisplayOption.TileRounded
15655
+ ];
15508
15656
  constructor(configuratorConnectorService, settingsService, productConfiguratorService) {
15509
15657
  this.configuratorConnectorService = configuratorConnectorService;
15510
15658
  this.settingsService = settingsService;
@@ -15512,7 +15660,7 @@ class ProductConfiguratorSelectorOptionComponent {
15512
15660
  }
15513
15661
  ngOnInit() {
15514
15662
  if (this.selection && this.selection.displayOptionControl == null) {
15515
- this.selection.displayOptionControl = ConfigurationDisplayOption.Tab;
15663
+ this.selection.displayOptionControl = ConfigurationDisplayOption.TileLarge;
15516
15664
  }
15517
15665
  if (this.markAsException) {
15518
15666
  this.selectionClass = 'selection-exception selection-container-' + this.selection.displayOptionControl;
@@ -15528,8 +15676,23 @@ class ProductConfiguratorSelectorOptionComponent {
15528
15676
  this.configuratorConnectorService.getImageForAnswer(selectionCopy);
15529
15677
  this.listOfChoices.push(selectionCopy);
15530
15678
  }
15679
+ if (this.showGlobalAll) {
15680
+ this.showAllTiles = true;
15681
+ }
15531
15682
  this._calculateVisibleAnswers();
15532
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
+ }
15533
15696
  selectionClicked(answer) {
15534
15697
  this.productConfiguratorService.selectSelection.emit(answer);
15535
15698
  }
@@ -15541,23 +15704,39 @@ class ProductConfiguratorSelectorOptionComponent {
15541
15704
  this.showAllTiles = false;
15542
15705
  this._calculateVisibleAnswers();
15543
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
+ }
15544
15721
  _calculateVisibleAnswers() {
15545
- if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileLarge) {
15546
- if (this.showAllTiles) {
15547
- this.visibleAnswers = this.listOfChoices;
15548
- }
15549
- else {
15550
- this.visibleAnswers = this.listOfChoices.slice(0, this.maxVisibleTiles);
15551
- }
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);
15552
15730
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleTiles);
15553
15731
  }
15554
- else if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileSmall) {
15555
- if (this.showAllTiles) {
15556
- this.visibleAnswers = this.listOfChoices;
15557
- }
15558
- else {
15559
- 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;
15560
15736
  }
15737
+ this.visibleAnswers = this.showAllTiles
15738
+ ? this.listOfChoices
15739
+ : this.listOfChoices.slice(0, this.maxVisibleSmallTiles);
15561
15740
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleSmallTiles);
15562
15741
  }
15563
15742
  else {
@@ -15566,11 +15745,11 @@ class ProductConfiguratorSelectorOptionComponent {
15566
15745
  }
15567
15746
  }
15568
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 });
15569
- 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: `
15570
15749
  <div class="selector-wrapper {{this.selectionClass}}">
15571
15750
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15572
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15573
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15751
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15752
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15574
15753
  @for (child of listOfChoices; track child) {
15575
15754
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15576
15755
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15592,18 +15771,25 @@ class ProductConfiguratorSelectorOptionComponent {
15592
15771
  (selectionClicked)="selectionClicked(child)">
15593
15772
  </co-product-configurator-selector-option-tile>
15594
15773
  }
15595
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15774
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15596
15775
  <co-product-configurator-selector-option-tile
15597
15776
  [option]="child"
15598
- [tileClass]="'small-rounded'"
15777
+ [tileClass]="'horizontal'"
15599
15778
  (selectionClicked)="selectionClicked(child)">
15600
15779
  </co-product-configurator-selector-option-tile>
15601
15780
  }
15602
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15781
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15603
15782
  <co-product-configurator-selector-option-tile
15604
- [option]="child"
15605
- [tileClass]="'horizontal'"
15606
- (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)">
15607
15793
  </co-product-configurator-selector-option-tile>
15608
15794
  }
15609
15795
  </div>
@@ -15611,13 +15797,14 @@ class ProductConfiguratorSelectorOptionComponent {
15611
15797
  }
15612
15798
 
15613
15799
  @if (
15614
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15615
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15800
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15801
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15616
15802
  @for (child of visibleAnswers; track child) {
15617
15803
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15618
15804
  <co-product-configurator-selector-option-tile
15619
15805
  [option]="child"
15620
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15806
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15807
+ [tileClass]="getTileClass()"
15621
15808
  (selectionClicked)="selectionClicked(child)"
15622
15809
  ></co-product-configurator-selector-option-tile>
15623
15810
  </div>
@@ -15625,18 +15812,16 @@ class ProductConfiguratorSelectorOptionComponent {
15625
15812
  }
15626
15813
 
15627
15814
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15628
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15629
- <co-product-configurator-selector-option-dropdown
15630
- [options]="listOfChoices"
15631
- (selectionClicked)="selectionClicked($event)"
15632
- ></co-product-configurator-selector-option-dropdown>
15633
- }
15815
+ <co-product-configurator-selector-option-dropdown
15816
+ [options]="listOfChoices"
15817
+ (selectionClicked)="selectionClicked($event)"
15818
+ ></co-product-configurator-selector-option-dropdown>
15634
15819
  }
15635
15820
  </div>
15636
15821
 
15637
15822
  @if (
15638
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15639
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15823
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15824
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15640
15825
  @if (!showAllTiles && remainingTilesCount > 0) {
15641
15826
  <div class="show-more-container">
15642
15827
  <span (click)="showMore()">
@@ -15653,7 +15838,7 @@ class ProductConfiguratorSelectorOptionComponent {
15653
15838
  }
15654
15839
  }
15655
15840
 
15656
- `, 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: [
15657
15842
  trigger('showSelections', [
15658
15843
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15659
15844
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15668,8 +15853,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15668
15853
  template: `
15669
15854
  <div class="selector-wrapper {{this.selectionClass}}">
15670
15855
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15671
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15672
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15856
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15857
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15673
15858
  @for (child of listOfChoices; track child) {
15674
15859
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15675
15860
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15691,18 +15876,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15691
15876
  (selectionClicked)="selectionClicked(child)">
15692
15877
  </co-product-configurator-selector-option-tile>
15693
15878
  }
15694
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15879
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15695
15880
  <co-product-configurator-selector-option-tile
15696
15881
  [option]="child"
15697
- [tileClass]="'small-rounded'"
15882
+ [tileClass]="'horizontal'"
15698
15883
  (selectionClicked)="selectionClicked(child)">
15699
15884
  </co-product-configurator-selector-option-tile>
15700
15885
  }
15701
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15886
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15702
15887
  <co-product-configurator-selector-option-tile
15703
- [option]="child"
15704
- [tileClass]="'horizontal'"
15705
- (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)">
15706
15898
  </co-product-configurator-selector-option-tile>
15707
15899
  }
15708
15900
  </div>
@@ -15710,13 +15902,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15710
15902
  }
15711
15903
 
15712
15904
  @if (
15713
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15714
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15905
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15906
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15715
15907
  @for (child of visibleAnswers; track child) {
15716
15908
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15717
15909
  <co-product-configurator-selector-option-tile
15718
15910
  [option]="child"
15719
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15911
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15912
+ [tileClass]="getTileClass()"
15720
15913
  (selectionClicked)="selectionClicked(child)"
15721
15914
  ></co-product-configurator-selector-option-tile>
15722
15915
  </div>
@@ -15724,18 +15917,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15724
15917
  }
15725
15918
 
15726
15919
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15727
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15728
- <co-product-configurator-selector-option-dropdown
15729
- [options]="listOfChoices"
15730
- (selectionClicked)="selectionClicked($event)"
15731
- ></co-product-configurator-selector-option-dropdown>
15732
- }
15920
+ <co-product-configurator-selector-option-dropdown
15921
+ [options]="listOfChoices"
15922
+ (selectionClicked)="selectionClicked($event)"
15923
+ ></co-product-configurator-selector-option-dropdown>
15733
15924
  }
15734
15925
  </div>
15735
15926
 
15736
15927
  @if (
15737
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15738
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15928
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15929
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15739
15930
  @if (!showAllTiles && remainingTilesCount > 0) {
15740
15931
  <div class="show-more-container">
15741
15932
  <span (click)="showMore()">
@@ -15772,25 +15963,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15772
15963
  type: Input
15773
15964
  }], markAsException: [{
15774
15965
  type: Input
15966
+ }], showGlobalAll: [{
15967
+ type: Input
15968
+ }], groupedSubShow: [{
15969
+ type: Input
15775
15970
  }] } });
15776
15971
 
15777
15972
  class ProductConfiguratorSelectorComponent {
15778
15973
  configuratorConnectorService;
15779
15974
  settingsService;
15780
15975
  iconService;
15781
- showClass() {
15782
- return true;
15783
- }
15784
- icons = IconEnum;
15785
- exceptionContainer;
15786
15976
  get hostClasses() {
15787
- const classes = [];
15788
- classes.push(`treelevel-${this.treeLevelIndex}`);
15789
- if (this.treeLevelIndex === 2 && !this.isActive) {
15790
- 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');
15791
15983
  }
15792
15984
  return classes.join(' ');
15793
15985
  }
15986
+ icons = IconEnum;
15987
+ exceptionContainer;
15794
15988
  selection;
15795
15989
  options;
15796
15990
  lastNodeWithChildren;
@@ -15798,13 +15992,37 @@ class ProductConfiguratorSelectorComponent {
15798
15992
  treeLevelIndex = 1;
15799
15993
  isActive = true;
15800
15994
  markAsException = false;
15995
+ showAll = false;
15996
+ suppressSubShowMore = false;
15997
+ useGroupedParentVisibility = false;
15801
15998
  activate = new EventEmitter();
15802
- get selectionIndexText() {
15803
- return this.selectionIndex + '. ';
15804
- }
15805
15999
  selectionClass = '';
15806
16000
  listOfChoices = [];
15807
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
+ }
15808
16026
  constructor(configuratorConnectorService, settingsService, iconService) {
15809
16027
  this.configuratorConnectorService = configuratorConnectorService;
15810
16028
  this.settingsService = settingsService;
@@ -15826,6 +16044,15 @@ class ProductConfiguratorSelectorComponent {
15826
16044
  if (this.markAsException) {
15827
16045
  this.showAndScroll();
15828
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
+ }
15829
16056
  }
15830
16057
  showAndScroll() {
15831
16058
  setTimeout(() => {
@@ -15835,8 +16062,128 @@ class ProductConfiguratorSelectorComponent {
15835
16062
  onSubHeaderClick() {
15836
16063
  this.activate.emit();
15837
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
+ }
15838
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 });
15839
- 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: `
15840
16187
  <div class="selector-container">
15841
16188
  <!--
15842
16189
  Based on the threeLevel and the length op options we got a couple of flavours
@@ -15885,7 +16232,9 @@ class ProductConfiguratorSelectorComponent {
15885
16232
  <co-product-configurator-selector-option
15886
16233
  [selection]="selection"
15887
16234
  [listOfChoices]="listOfChoices"
15888
- [markAsException]="markAsException">
16235
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16236
+ [markAsException]="markAsException"
16237
+ [showGlobalAll]="getChildShowAll()">
15889
16238
  </co-product-configurator-selector-option>
15890
16239
  }
15891
16240
  </div>
@@ -15898,13 +16247,29 @@ class ProductConfiguratorSelectorComponent {
15898
16247
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15899
16248
  [selectionIndex]="index + 1"
15900
16249
  [treeLevelIndex]="treeLevelIndex + 1"
15901
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16250
+ [showAll]="getChildShowAll()"
16251
+ [isActive]="getIsChildVisible(index)"
16252
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16253
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15902
16254
  [markAsException]="displaySelection.markForExceptionNotification"
15903
16255
  (activate)="activeChildIndex = index">
15904
16256
  </co-product-configurator-selector>
15905
16257
  }
15906
16258
  }
15907
- `, 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: [
15908
16273
  trigger('showSelections', [
15909
16274
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15910
16275
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15965,7 +16330,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15965
16330
  <co-product-configurator-selector-option
15966
16331
  [selection]="selection"
15967
16332
  [listOfChoices]="listOfChoices"
15968
- [markAsException]="markAsException">
16333
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16334
+ [markAsException]="markAsException"
16335
+ [showGlobalAll]="getChildShowAll()">
15969
16336
  </co-product-configurator-selector-option>
15970
16337
  }
15971
16338
  </div>
@@ -15978,12 +16345,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15978
16345
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15979
16346
  [selectionIndex]="index + 1"
15980
16347
  [treeLevelIndex]="treeLevelIndex + 1"
15981
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16348
+ [showAll]="getChildShowAll()"
16349
+ [isActive]="getIsChildVisible(index)"
16350
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16351
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15982
16352
  [markAsException]="displaySelection.markForExceptionNotification"
15983
16353
  (activate)="activeChildIndex = index">
15984
16354
  </co-product-configurator-selector>
15985
16355
  }
15986
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
+ }
15987
16370
  `,
15988
16371
  encapsulation: ViewEncapsulation.None,
15989
16372
  animations: [
@@ -15995,15 +16378,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15995
16378
  ],
15996
16379
  standalone: false
15997
16380
  }]
15998
- }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { showClass: [{
16381
+ }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { hostClasses: [{
15999
16382
  type: HostBinding,
16000
- args: ['class.co-product-configurator-selector']
16383
+ args: ['class']
16001
16384
  }], exceptionContainer: [{
16002
16385
  type: ViewChild,
16003
16386
  args: ['exceptionContainer']
16004
- }], hostClasses: [{
16005
- type: HostBinding,
16006
- args: ['class']
16007
16387
  }], selection: [{
16008
16388
  type: Input
16009
16389
  }], options: [{
@@ -16018,6 +16398,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16018
16398
  type: Input
16019
16399
  }], markAsException: [{
16020
16400
  type: Input
16401
+ }], showAll: [{
16402
+ type: Input
16403
+ }], suppressSubShowMore: [{
16404
+ type: Input
16405
+ }], useGroupedParentVisibility: [{
16406
+ type: Input
16021
16407
  }], activate: [{
16022
16408
  type: Output
16023
16409
  }] } });
@@ -16050,6 +16436,7 @@ class ProductConfiguratorComponent {
16050
16436
  showLabel = true;
16051
16437
  canClose = true;
16052
16438
  customDimensions = false;
16439
+ showSaveAndLoadConfiguration;
16053
16440
  showChange = new EventEmitter();
16054
16441
  answerChosen = new EventEmitter();
16055
16442
  valutaSymbol = '€'; // TODO this should be a setting
@@ -16103,7 +16490,7 @@ class ProductConfiguratorComponent {
16103
16490
  this.showChange.emit(false);
16104
16491
  }
16105
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 });
16106
- 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: `
16107
16494
  @if (show) {
16108
16495
  <div class="product-configurator-container">
16109
16496
  @if (showHeaderInformation) {
@@ -16112,11 +16499,16 @@ class ProductConfiguratorComponent {
16112
16499
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16113
16500
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16114
16501
  </div>
16115
- @if (canClose) {
16116
- <div class="product-configurator-close" (click)="handleCloseClick()">
16117
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16118
- </div>
16119
- }
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>
16120
16512
  </div>
16121
16513
  }
16122
16514
  <div class="product-configurator-details" #scrollcontainer>
@@ -16144,7 +16536,7 @@ class ProductConfiguratorComponent {
16144
16536
  }
16145
16537
  </div>
16146
16538
  }
16147
- `, 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 });
16148
16540
  }
16149
16541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorComponent, decorators: [{
16150
16542
  type: Component,
@@ -16159,11 +16551,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16159
16551
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16160
16552
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16161
16553
  </div>
16162
- @if (canClose) {
16163
- <div class="product-configurator-close" (click)="handleCloseClick()">
16164
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16165
- </div>
16166
- }
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>
16167
16564
  </div>
16168
16565
  }
16169
16566
  <div class="product-configurator-details" #scrollcontainer>
@@ -16210,12 +16607,225 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16210
16607
  type: Input
16211
16608
  }], customDimensions: [{
16212
16609
  type: Input
16610
+ }], showSaveAndLoadConfiguration: [{
16611
+ type: Input
16213
16612
  }], showChange: [{
16214
16613
  type: Output
16215
16614
  }], answerChosen: [{
16216
16615
  type: Output
16217
16616
  }] } });
16218
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
+
16219
16829
  class ThreedselectorComponent {
16220
16830
  _appEventService;
16221
16831
  _buildFurnitureService;
@@ -16229,6 +16839,7 @@ class ThreedselectorComponent {
16229
16839
  canCloseConfigurator = true;
16230
16840
  animateSlideout = true;
16231
16841
  showHeaderInformation = true;
16842
+ showSaveAndLoadConfiguration;
16232
16843
  buildFinished = new EventEmitter();
16233
16844
  showChange = new EventEmitter();
16234
16845
  showElementToolbar = false;
@@ -16291,29 +16902,34 @@ class ThreedselectorComponent {
16291
16902
  }
16292
16903
  }
16293
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 });
16294
- 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: `
16295
- @if (!showFullConfiguration) {
16296
- <co-lite-selector
16297
- class="floating"
16298
- [showSelections]="showTemplate"
16299
- [showAnswers]="showTemplate"
16300
- [animateSlideout]="animateSlideout"
16301
- [canClose]="canCloseConfigurator"
16302
- (showChange)="handleShowChangeSelector($event)">
16303
- </co-lite-selector>
16304
- }
16305
-
16306
- @if (showFullConfiguration) {
16307
- <co-product-configurator
16308
- class="floating"
16309
- [show]="showTemplate"
16310
- [showSelections]="showSelections"
16311
- [canClose]="canCloseConfigurator"
16312
- [showHeaderInformation]="showHeaderInformation"
16313
- (showChange)="handleShowChangeSelector($event)">
16314
- </co-product-configurator>
16315
- }
16316
- `, 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: [
16317
16933
  trigger('showElementToolbar', [
16318
16934
  state('void', style({ opacity: 0 })),
16319
16935
  state('*', style({ opacity: 1 })),
@@ -16326,27 +16942,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16326
16942
  args: [{
16327
16943
  selector: 'co-threedselector',
16328
16944
  template: `
16329
- @if (!showFullConfiguration) {
16330
- <co-lite-selector
16331
- class="floating"
16332
- [showSelections]="showTemplate"
16333
- [showAnswers]="showTemplate"
16334
- [animateSlideout]="animateSlideout"
16335
- [canClose]="canCloseConfigurator"
16336
- (showChange)="handleShowChangeSelector($event)">
16337
- </co-lite-selector>
16338
- }
16339
-
16340
- @if (showFullConfiguration) {
16341
- <co-product-configurator
16342
- class="floating"
16343
- [show]="showTemplate"
16344
- [showSelections]="showSelections"
16345
- [canClose]="canCloseConfigurator"
16346
- [showHeaderInformation]="showHeaderInformation"
16347
- (showChange)="handleShowChangeSelector($event)">
16348
- </co-product-configurator>
16349
- }
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
+ }
16350
16971
  `,
16351
16972
  encapsulation: ViewEncapsulation.None,
16352
16973
  animations: [
@@ -16371,6 +16992,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16371
16992
  type: Input
16372
16993
  }], showHeaderInformation: [{
16373
16994
  type: Input
16995
+ }], showSaveAndLoadConfiguration: [{
16996
+ type: Input
16374
16997
  }], buildFinished: [{
16375
16998
  type: Output
16376
16999
  }], showChange: [{
@@ -16392,6 +17015,7 @@ class ConfiguratorComponent {
16392
17015
  canCloseConfigurator = true;
16393
17016
  animateSlideout = true;
16394
17017
  showHeaderInformation = true;
17018
+ showSaveAndLoadConfiguration;
16395
17019
  buildResult = new EventEmitter();
16396
17020
  // TODO
16397
17021
  isLoading = new EventEmitter();
@@ -16444,54 +17068,56 @@ class ConfiguratorComponent {
16444
17068
  }
16445
17069
  }
16446
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 });
16447
- 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: `
16448
- @if (showProgressBar) {
16449
- <co-progress-bar></co-progress-bar>
16450
- }
16451
- @if (showLoader) {
16452
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16453
- }
16454
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16455
- <co-configurator-error-dialog
16456
- [errorMessages]="configurationResultObject.errorMessages"
16457
- (closeErrorDialoag)="handleCloseErrorDialog()"
16458
- ></co-configurator-error-dialog>
16459
- }
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
+ }
16460
17084
 
16461
- <co-threedselector
16462
- [canCloseConfigurator]="canCloseConfigurator"
16463
- [animateSlideout]="animateSlideout"
16464
- [showHeaderInformation]="showHeaderInformation"
16465
- (buildFinished)="handleBuildFinished($event)"
16466
- (showChange)="handleShowChange($event)">
16467
- </co-threedselector>
16468
- `, 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 });
16469
17094
  }
16470
17095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, decorators: [{
16471
17096
  type: Component,
16472
17097
  args: [{
16473
17098
  selector: 'co-configurator',
16474
17099
  template: `
16475
- @if (showProgressBar) {
16476
- <co-progress-bar></co-progress-bar>
16477
- }
16478
- @if (showLoader) {
16479
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16480
- }
16481
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16482
- <co-configurator-error-dialog
16483
- [errorMessages]="configurationResultObject.errorMessages"
16484
- (closeErrorDialoag)="handleCloseErrorDialog()"
16485
- ></co-configurator-error-dialog>
16486
- }
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
+ }
16487
17112
 
16488
- <co-threedselector
16489
- [canCloseConfigurator]="canCloseConfigurator"
16490
- [animateSlideout]="animateSlideout"
16491
- [showHeaderInformation]="showHeaderInformation"
16492
- (buildFinished)="handleBuildFinished($event)"
16493
- (showChange)="handleShowChange($event)">
16494
- </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>
16495
17121
  `,
16496
17122
  encapsulation: ViewEncapsulation.None,
16497
17123
  standalone: false
@@ -16513,6 +17139,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16513
17139
  type: Input
16514
17140
  }], showHeaderInformation: [{
16515
17141
  type: Input
17142
+ }], showSaveAndLoadConfiguration: [{
17143
+ type: Input
16516
17144
  }], buildResult: [{
16517
17145
  type: Output
16518
17146
  }], isLoading: [{
@@ -17390,6 +18018,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17390
18018
  }]
17391
18019
  }] });
17392
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
+
17393
18052
  class SelectionsSummaryModule {
17394
18053
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17395
18054
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, declarations: [SelectionsSummaryComponent], imports: [CoSummaryLineModule,
@@ -17397,13 +18056,15 @@ class SelectionsSummaryModule {
17397
18056
  PipesModule,
17398
18057
  PriceDisplayPipeModule,
17399
18058
  SelectionsSummaryLineModule,
17400
- IconModule], exports: [SelectionsSummaryComponent] });
18059
+ IconModule,
18060
+ ConfigurationPresetModule], exports: [SelectionsSummaryComponent] });
17401
18061
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, imports: [CoSummaryLineModule,
17402
18062
  CommonModule,
17403
18063
  PipesModule,
17404
18064
  PriceDisplayPipeModule,
17405
18065
  SelectionsSummaryLineModule,
17406
- IconModule] });
18066
+ IconModule,
18067
+ ConfigurationPresetModule] });
17407
18068
  }
17408
18069
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, decorators: [{
17409
18070
  type: NgModule,
@@ -17414,7 +18075,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17414
18075
  PipesModule,
17415
18076
  PriceDisplayPipeModule,
17416
18077
  SelectionsSummaryLineModule,
17417
- IconModule
18078
+ IconModule,
18079
+ ConfigurationPresetModule
17418
18080
  ],
17419
18081
  declarations: [
17420
18082
  SelectionsSummaryComponent,
@@ -17625,7 +18287,8 @@ class ProductConfiguratorModule {
17625
18287
  PipesModule,
17626
18288
  IconModule,
17627
18289
  TooltipDirectiveModule,
17628
- ProductConfiguratorSelectorModule], exports: [ProductConfiguratorComponent] });
18290
+ ProductConfiguratorSelectorModule,
18291
+ ConfigurationPresetModule], exports: [ProductConfiguratorComponent] });
17629
18292
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, imports: [CommonModule,
17630
18293
  MatIconModule,
17631
18294
  MatButtonModule,
@@ -17638,7 +18301,8 @@ class ProductConfiguratorModule {
17638
18301
  PipesModule,
17639
18302
  IconModule,
17640
18303
  TooltipDirectiveModule,
17641
- ProductConfiguratorSelectorModule] });
18304
+ ProductConfiguratorSelectorModule,
18305
+ ConfigurationPresetModule] });
17642
18306
  }
17643
18307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, decorators: [{
17644
18308
  type: NgModule,
@@ -17656,7 +18320,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17656
18320
  PipesModule,
17657
18321
  IconModule,
17658
18322
  TooltipDirectiveModule,
17659
- ProductConfiguratorSelectorModule
18323
+ ProductConfiguratorSelectorModule,
18324
+ ConfigurationPresetModule
17660
18325
  ],
17661
18326
  schemas: [
17662
18327
  NO_ERRORS_SCHEMA
@@ -17670,14 +18335,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17670
18335
  }]
17671
18336
  }] });
17672
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
+
17673
18369
  class ThreedselectorModule {
17674
18370
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17675
18371
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, declarations: [ThreedselectorComponent], imports: [LiteSelectorModule,
17676
18372
  ProductConfiguratorModule,
17677
- CommonModule], exports: [ThreedselectorComponent] });
18373
+ CommonModule,
18374
+ ConfigurationPresetDialogModule], exports: [ThreedselectorComponent] });
17678
18375
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, imports: [LiteSelectorModule,
17679
18376
  ProductConfiguratorModule,
17680
- CommonModule] });
18377
+ CommonModule,
18378
+ ConfigurationPresetDialogModule] });
17681
18379
  }
17682
18380
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, decorators: [{
17683
18381
  type: NgModule,
@@ -17685,7 +18383,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17685
18383
  imports: [
17686
18384
  LiteSelectorModule,
17687
18385
  ProductConfiguratorModule,
17688
- CommonModule
18386
+ CommonModule,
18387
+ ConfigurationPresetDialogModule
17689
18388
  ],
17690
18389
  declarations: [
17691
18390
  ThreedselectorComponent