@colijnit/configurator 262.1.2 → 262.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/colijnit-configurator-262.1.2.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/configuration-preset/style/_layout.scss +42 -0
  6. package/lib/components/configuration-preset/style/_material-definition.scss +5 -0
  7. package/lib/components/configuration-preset/style/_theme.scss +20 -0
  8. package/lib/components/configuration-preset/style/material.scss +3 -0
  9. package/lib/components/configuration-preset-dialog/style/_layout.scss +82 -0
  10. package/lib/components/configuration-preset-dialog/style/_material-definition.scss +5 -0
  11. package/lib/components/configuration-preset-dialog/style/_theme.scss +7 -0
  12. package/lib/components/configuration-preset-dialog/style/material.scss +3 -0
  13. package/lib/components/product-configurator/style/_layout.scss +4 -0
  14. package/lib/components/product-configurator/style/_material-definition.scss +1 -0
  15. package/lib/components/product-configurator/style/_theme.scss +7 -1
  16. package/lib/components/product-configurator-selector/style/_layout.scss +26 -1
  17. package/lib/components/product-configurator-selector/style/_theme.scss +20 -3
  18. package/lib/components/product-configurator-selector-option-checkbox/style/_theme.scss +3 -0
  19. package/lib/components/product-configurator-selector-option-tile/style/_layout.scss +12 -4
  20. package/lib/components/product-configurator-selector-option-tile/style/_theme.scss +28 -2
  21. package/lib/style/_variables.scss +20 -7
  22. 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 {
@@ -512,6 +517,7 @@ class AppEventService {
512
517
  articleInfoReceived = new Subject(); // TODO check; _onAnswerInfoReceived has a todo from 17-06-2024
513
518
  onObjectSelected = new Subject();
514
519
  onObjectUnSelected = new Subject();
520
+ changeConfigurationPresetDialogMode = new Subject();
515
521
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
516
522
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: AppEventService, providedIn: 'root' });
517
523
  }
@@ -954,14 +960,13 @@ class ConfiguratorService {
954
960
  return this._configuratorApi.copyInstance(instanceId, shouldSaveCurrentInstanceId, showLoader);
955
961
  }
956
962
  async saveConfigurations(showLoader = true) {
957
- try {
958
- await this._configuratorApi.saveConfigurations(showLoader).catch((e) => {
959
- return false;
960
- });
961
- }
962
- catch (e) {
963
- }
964
- return true;
963
+ return await this._configuratorApi.saveConfigurations(showLoader);
964
+ }
965
+ async storePreset(instanceId, showLoader = true) {
966
+ return await this._configuratorApi.storePreset(instanceId, showLoader);
967
+ }
968
+ async initForPreset(presetId, goodId, showLoader = true) {
969
+ return await this._configuratorApi.initForPreset(presetId, goodId, showLoader);
965
970
  }
966
971
  async googleTranslateEnabled() {
967
972
  // this should always be fetched from the mainapi from the client
@@ -1402,6 +1407,12 @@ class ConfiguratorConnectorService {
1402
1407
  console.error('error saving configurations');
1403
1408
  }
1404
1409
  }
1410
+ async storePreset(instanceId, showLoader = true) {
1411
+ return this._configuratorService.storePreset(instanceId, showLoader);
1412
+ }
1413
+ async initForPreset(presetId, goodId, showLoader = true) {
1414
+ return this._configuratorService.initForPreset(presetId, goodId, showLoader);
1415
+ }
1405
1416
  async getDefaultLanguage(upId) {
1406
1417
  return await this._configuratorService.getDefaultLanguage(upId);
1407
1418
  }
@@ -10184,11 +10195,6 @@ class LoadFurnitureService extends LoadFurnitureBaseService {
10184
10195
  if (!this.needs3DModel(result.placement)) {
10185
10196
  result.resultType = ResultType.No3DModel;
10186
10197
  }
10187
- if (!result.assetUrl && result.resultType !== ResultType.No3DModel || result.resultType === ResultType.ArticleNotFound) {
10188
- result.errorMessages.push(new ConfiguratorErrorMessage('ARTICLE_NOT_FOUND', 'ARTICLE_NOT_FOUND_DESC'));
10189
- DebugUtils.log('Article not found');
10190
- return Promise.reject(result);
10191
- }
10192
10198
  });
10193
10199
  if (this.article) {
10194
10200
  // Add the data to the result
@@ -12246,6 +12252,7 @@ var IconEnum;
12246
12252
  IconEnum["ArrowTurnRight"] = "arrow_turn_right";
12247
12253
  IconEnum["ArrowTurnRightRegular"] = "arrow_turn_right_regular";
12248
12254
  IconEnum["ArCircle"] = "ar_circle";
12255
+ IconEnum["BarsLightFull"] = "bars_light_full";
12249
12256
  IconEnum["Brush"] = "brush";
12250
12257
  IconEnum["CameraSolid"] = "camera_solid";
12251
12258
  IconEnum["CameraTopdown"] = "camera_topdown";
@@ -12270,6 +12277,7 @@ var IconEnum;
12270
12277
  IconEnum["ConfFrame"] = "conf_frame";
12271
12278
  IconEnum["ConfPlane"] = "conf_plane";
12272
12279
  IconEnum["CopyLight"] = "copy_light";
12280
+ IconEnum["CopyRegularFull"] = "copy_regular_full";
12273
12281
  IconEnum["Couch"] = "couch";
12274
12282
  IconEnum["Cross"] = "cross";
12275
12283
  IconEnum["CubeOutline"] = "cube-outline";
@@ -12282,7 +12290,9 @@ var IconEnum;
12282
12290
  IconEnum["EditButton"] = "edit-button";
12283
12291
  IconEnum["Expand"] = "expand";
12284
12292
  IconEnum["FillDripLight"] = "fill_drip_light";
12293
+ IconEnum["FloppyDiskLightFull"] = "floppy_disk_light_full";
12285
12294
  IconEnum["Flower"] = "flower";
12295
+ IconEnum["FolderOpenLightFull"] = "folder_open_light_full";
12286
12296
  IconEnum["GaugeHighSolidFull"] = "gauge_high_solid_full";
12287
12297
  IconEnum["GaugeLowSolidFull"] = "gauge_low_solid_full";
12288
12298
  IconEnum["GaugeMaxSolidFull"] = "gauge_max_solid_full";
@@ -12336,6 +12346,7 @@ var IconEnum;
12336
12346
  IconEnum["WandMagicSparkles"] = "wand_magic_sparkles";
12337
12347
  IconEnum["WifiSolidFull"] = "wifi_solid_full";
12338
12348
  IconEnum["XmarkLight"] = "xmark_light";
12349
+ IconEnum["XmarkLightFull"] = "xmark_light_full";
12339
12350
  IconEnum["XmarkRegular"] = "xmark_regular";
12340
12351
  })(IconEnum || (IconEnum = {}));
12341
12352
 
@@ -12358,6 +12369,7 @@ const IconSvg = {
12358
12369
  "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>",
12359
12370
  "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>",
12360
12371
  "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>",
12372
+ "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>",
12361
12373
  "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>",
12362
12374
  "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>",
12363
12375
  "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>",
@@ -12382,6 +12394,7 @@ const IconSvg = {
12382
12394
  "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>",
12383
12395
  "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>",
12384
12396
  "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>",
12397
+ "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>",
12385
12398
  "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>",
12386
12399
  "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>",
12387
12400
  "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>",
@@ -12394,7 +12407,9 @@ const IconSvg = {
12394
12407
  "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>",
12395
12408
  "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>",
12396
12409
  "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>",
12410
+ "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>",
12397
12411
  "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>",
12412
+ "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>",
12398
12413
  "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>",
12399
12414
  "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>",
12400
12415
  "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>",
@@ -12448,6 +12463,7 @@ const IconSvg = {
12448
12463
  "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>",
12449
12464
  "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>",
12450
12465
  "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>",
12466
+ "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>",
12451
12467
  "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>"
12452
12468
  };
12453
12469
 
@@ -12864,7 +12880,7 @@ class GoogleTranslateService {
12864
12880
  return input;
12865
12881
  }
12866
12882
  const sourceLang = this._defaultLanguage.toLowerCase();
12867
- const targetLang = this._clientLanguage.toLowerCase();
12883
+ const targetLang = this._clientLanguage ? this._clientLanguage.toLowerCase() : sourceLang;
12868
12884
  const translationList = [input];
12869
12885
  // When we do not need a translation
12870
12886
  if (!input || (sourceLang === targetLang)) {
@@ -14729,6 +14745,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14729
14745
  args: ['class.should-be-hidden']
14730
14746
  }] } });
14731
14747
 
14748
+ var PresetDialogMode;
14749
+ (function (PresetDialogMode) {
14750
+ PresetDialogMode[PresetDialogMode["SAVE"] = 0] = "SAVE";
14751
+ PresetDialogMode[PresetDialogMode["LOAD"] = 1] = "LOAD";
14752
+ })(PresetDialogMode || (PresetDialogMode = {}));
14753
+
14754
+ class ConfigurationPresetComponent {
14755
+ iconService;
14756
+ _appEventService;
14757
+ icons = IconEnum;
14758
+ isSaveLoadMenuOpen = false;
14759
+ showClass() {
14760
+ return true;
14761
+ }
14762
+ closeSaveLoadMenu() {
14763
+ this.isSaveLoadMenuOpen = false;
14764
+ }
14765
+ constructor(iconService, _appEventService) {
14766
+ this.iconService = iconService;
14767
+ this._appEventService = _appEventService;
14768
+ }
14769
+ toggleSaveLoadMenu(event) {
14770
+ event.stopPropagation();
14771
+ this.isSaveLoadMenuOpen = !this.isSaveLoadMenuOpen;
14772
+ }
14773
+ handleSavePresetClicked() {
14774
+ this.isSaveLoadMenuOpen = false;
14775
+ this._appEventService.changeConfigurationPresetDialogMode.next(PresetDialogMode.SAVE);
14776
+ }
14777
+ handleLoadPresetClicked() {
14778
+ this.isSaveLoadMenuOpen = false;
14779
+ this._appEventService.changeConfigurationPresetDialogMode.next(PresetDialogMode.LOAD);
14780
+ }
14781
+ 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 });
14782
+ 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: `
14783
+ <div class="save-load-config-wrapper">
14784
+ <div class="open-save-load" (click)="toggleSaveLoadMenu($event)">
14785
+ <co-icon [iconData]="iconService.getIcon(icons.BarsLightFull)"></co-icon>
14786
+ </div>
14787
+ <div
14788
+ class="save-load-configuration-buttons"
14789
+ [class.is-open]="isSaveLoadMenuOpen"
14790
+ (click)="$event.stopPropagation()">
14791
+ <co-button
14792
+ class="preset-button save-preset-button"
14793
+ [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"
14794
+ [label]="'SAVE_CONFIGURATION' | localize"
14795
+ (onClick)="handleSavePresetClicked()">
14796
+ </co-button>
14797
+ <co-button
14798
+ class="preset-button load-preset-button"
14799
+ [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"
14800
+ [label]="'LOAD_CONFIGURATION' | localize"
14801
+ (onClick)="handleLoadPresetClicked()">
14802
+ </co-button>
14803
+ </div>
14804
+ </div>
14805
+
14806
+
14807
+ `, 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 });
14808
+ }
14809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetComponent, decorators: [{
14810
+ type: Component,
14811
+ args: [{
14812
+ selector: 'co-configuration-preset',
14813
+ template: `
14814
+ <div class="save-load-config-wrapper">
14815
+ <div class="open-save-load" (click)="toggleSaveLoadMenu($event)">
14816
+ <co-icon [iconData]="iconService.getIcon(icons.BarsLightFull)"></co-icon>
14817
+ </div>
14818
+ <div
14819
+ class="save-load-configuration-buttons"
14820
+ [class.is-open]="isSaveLoadMenuOpen"
14821
+ (click)="$event.stopPropagation()">
14822
+ <co-button
14823
+ class="preset-button save-preset-button"
14824
+ [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"
14825
+ [label]="'SAVE_CONFIGURATION' | localize"
14826
+ (onClick)="handleSavePresetClicked()">
14827
+ </co-button>
14828
+ <co-button
14829
+ class="preset-button load-preset-button"
14830
+ [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"
14831
+ [label]="'LOAD_CONFIGURATION' | localize"
14832
+ (onClick)="handleLoadPresetClicked()">
14833
+ </co-button>
14834
+ </div>
14835
+ </div>
14836
+
14837
+
14838
+ `,
14839
+ encapsulation: ViewEncapsulation.None,
14840
+ standalone: false
14841
+ }]
14842
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: AppEventService }], propDecorators: { showClass: [{
14843
+ type: HostBinding,
14844
+ args: ['class.co-configuration-preset']
14845
+ }], closeSaveLoadMenu: [{
14846
+ type: HostListener,
14847
+ args: ['document:click']
14848
+ }] } });
14849
+
14732
14850
  class SelectionsSummaryComponent {
14733
14851
  configuratorConnectorService;
14734
14852
  iconService;
@@ -14741,6 +14859,7 @@ class SelectionsSummaryComponent {
14741
14859
  canClose = true;
14742
14860
  answersTemplate;
14743
14861
  answerToShowFromSelectionText;
14862
+ showSaveAndLoadConfiguration;
14744
14863
  customDimensions = false;
14745
14864
  disableMouse = false;
14746
14865
  handledocumentMouseUp(event) {
@@ -14790,82 +14909,88 @@ class SelectionsSummaryComponent {
14790
14909
  this.selectionToCustomize = sel;
14791
14910
  }
14792
14911
  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 });
14793
- 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: `
14794
- @if (showLabel || canClose) {
14795
- <header class="drawer__header">
14796
- @if (showLabel) {
14797
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14798
- }
14799
- @if (canClose) {
14800
- <button class="close-lite-selector" (click)="closeClick.emit()">
14801
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14802
- </button>
14803
- }
14804
- </header>
14805
- }
14806
- @if (selections && selections.length > 0) {
14807
- <div class="selections-content small-scrollbar">
14808
- @for (sel of selections; track sel; let index = $index) {
14809
- <co-selections-summary-line
14810
- [selection]="sel"
14811
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14812
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14813
- [valutaSymbol]="valutaSymbol"
14814
- (summaryLineClick)="handleClick(sel)"
14815
- (summaryLineDelete)="handleDelete($event, sel)"
14816
- (summaryLineRepeat)="handleRepeat($event, sel)"
14817
- (customizeButtonClicked)="toggleElement(sel)"
14818
- ></co-selections-summary-line>
14819
- }
14820
- @if (showAsConfigured) {
14821
- <div class="sum">
14822
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14823
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14824
- </div>
14825
- }
14826
- </div>
14827
- }
14828
- `, 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 });
14912
+ 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: `
14913
+ @if (showLabel || canClose) {
14914
+ <header class="drawer__header">
14915
+ @if (showLabel) {
14916
+ <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14917
+ }
14918
+ @if (canClose) {
14919
+ <button class="close-lite-selector" (click)="closeClick.emit()">
14920
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14921
+ </button>
14922
+ }
14923
+ </header>
14924
+ }
14925
+ @if (selections && selections.length > 0) {
14926
+ <div class="selections-content small-scrollbar">
14927
+ @for (sel of selections; track sel; let index = $index) {
14928
+ <co-selections-summary-line
14929
+ [selection]="sel"
14930
+ [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14931
+ [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14932
+ [valutaSymbol]="valutaSymbol"
14933
+ (summaryLineClick)="handleClick(sel)"
14934
+ (summaryLineDelete)="handleDelete($event, sel)"
14935
+ (summaryLineRepeat)="handleRepeat($event, sel)"
14936
+ (customizeButtonClicked)="toggleElement(sel)"
14937
+ ></co-selections-summary-line>
14938
+ }
14939
+ @if (showSaveAndLoadConfiguration) {
14940
+ <co-configuration-preset></co-configuration-preset>
14941
+ }
14942
+ @if (showAsConfigured) {
14943
+ <div class="sum">
14944
+ <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14945
+ <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14946
+ </div>
14947
+ }
14948
+ </div>
14949
+ }
14950
+ `, 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 });
14829
14951
  }
14830
14952
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryComponent, decorators: [{
14831
14953
  type: Component,
14832
14954
  args: [{
14833
14955
  selector: 'co-selections-summary',
14834
14956
  template: `
14835
- @if (showLabel || canClose) {
14836
- <header class="drawer__header">
14837
- @if (showLabel) {
14838
- <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14839
- }
14840
- @if (canClose) {
14841
- <button class="close-lite-selector" (click)="closeClick.emit()">
14842
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14843
- </button>
14844
- }
14845
- </header>
14846
- }
14847
- @if (selections && selections.length > 0) {
14848
- <div class="selections-content small-scrollbar">
14849
- @for (sel of selections; track sel; let index = $index) {
14850
- <co-selections-summary-line
14851
- [selection]="sel"
14852
- [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14853
- [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14854
- [valutaSymbol]="valutaSymbol"
14855
- (summaryLineClick)="handleClick(sel)"
14856
- (summaryLineDelete)="handleDelete($event, sel)"
14857
- (summaryLineRepeat)="handleRepeat($event, sel)"
14858
- (customizeButtonClicked)="toggleElement(sel)"
14859
- ></co-selections-summary-line>
14860
- }
14861
- @if (showAsConfigured) {
14862
- <div class="sum">
14863
- <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14864
- <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14865
- </div>
14866
- }
14867
- </div>
14868
- }
14957
+ @if (showLabel || canClose) {
14958
+ <header class="drawer__header">
14959
+ @if (showLabel) {
14960
+ <h2 class="mat-title">{{ 'CONFIGURATION' | localize }}</h2>
14961
+ }
14962
+ @if (canClose) {
14963
+ <button class="close-lite-selector" (click)="closeClick.emit()">
14964
+ <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
14965
+ </button>
14966
+ }
14967
+ </header>
14968
+ }
14969
+ @if (selections && selections.length > 0) {
14970
+ <div class="selections-content small-scrollbar">
14971
+ @for (sel of selections; track sel; let index = $index) {
14972
+ <co-selections-summary-line
14973
+ [selection]="sel"
14974
+ [answersTemplate]="answersTemplate ? answersTemplate : undefined"
14975
+ [answerToShowFromSelectionText]="answerToShowFromSelectionText"
14976
+ [valutaSymbol]="valutaSymbol"
14977
+ (summaryLineClick)="handleClick(sel)"
14978
+ (summaryLineDelete)="handleDelete($event, sel)"
14979
+ (summaryLineRepeat)="handleRepeat($event, sel)"
14980
+ (customizeButtonClicked)="toggleElement(sel)"
14981
+ ></co-selections-summary-line>
14982
+ }
14983
+ @if (showSaveAndLoadConfiguration) {
14984
+ <co-configuration-preset></co-configuration-preset>
14985
+ }
14986
+ @if (showAsConfigured) {
14987
+ <div class="sum">
14988
+ <label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
14989
+ <div class="price"> {{ configuratorConnectorService.totalPrice | priceDisplay }}</div>
14990
+ </div>
14991
+ }
14992
+ </div>
14993
+ }
14869
14994
  `,
14870
14995
  encapsulation: ViewEncapsulation.None,
14871
14996
  standalone: false
@@ -14883,6 +15008,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
14883
15008
  type: Input
14884
15009
  }], answerToShowFromSelectionText: [{
14885
15010
  type: Input
15011
+ }], showSaveAndLoadConfiguration: [{
15012
+ type: Input
14886
15013
  }], customDimensions: [{
14887
15014
  type: HostBinding,
14888
15015
  args: ['class.custom-dimensions']
@@ -14942,6 +15069,7 @@ class LiteSelectorComponent {
14942
15069
  canClose = true;
14943
15070
  animateSlideout = true;
14944
15071
  customDimensions = false;
15072
+ showSaveAndLoadConfiguration;
14945
15073
  showChange = new EventEmitter();
14946
15074
  answerChosen = new EventEmitter();
14947
15075
  answerToShowFromSelectionText;
@@ -14994,7 +15122,7 @@ class LiteSelectorComponent {
14994
15122
  // this.iOne.getMoodImageForAnswerSelection(answerSelected.answer, false);
14995
15123
  }
14996
15124
  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 });
14997
- 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: `
15125
+ 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: `
14998
15126
  <ng-container>
14999
15127
  @if (showSelections && configuratorConnectorService.selectionsToDisplay.length > 0) {
15000
15128
  <co-selections-summary
@@ -15006,11 +15134,11 @@ class LiteSelectorComponent {
15006
15134
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15007
15135
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15008
15136
  [selections]="configuratorConnectorService.selectionsToDisplay"
15137
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15009
15138
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15010
15139
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15011
15140
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15012
- (closeClick)="onCloseLiteSelectorButtonClick()"
15013
- >
15141
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15014
15142
  </co-selections-summary>
15015
15143
  }
15016
15144
  @if (!inlineAnswers) {
@@ -15031,7 +15159,7 @@ class LiteSelectorComponent {
15031
15159
  (answerChosen)="onAnswersSlideoutAnswerChosen($event)"
15032
15160
  ></co-answers-slideout>
15033
15161
  </ng-template>
15034
- `, 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: [
15162
+ `, 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: [
15035
15163
  trigger('showSelections', [
15036
15164
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15037
15165
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15055,11 +15183,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15055
15183
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
15056
15184
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
15057
15185
  [selections]="configuratorConnectorService.selectionsToDisplay"
15186
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
15058
15187
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
15059
15188
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
15060
15189
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
15061
- (closeClick)="onCloseLiteSelectorButtonClick()"
15062
- >
15190
+ (closeClick)="onCloseLiteSelectorButtonClick()">
15063
15191
  </co-selections-summary>
15064
15192
  }
15065
15193
  @if (!inlineAnswers) {
@@ -15114,6 +15242,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15114
15242
  args: ['class.custom-dimensions']
15115
15243
  }, {
15116
15244
  type: Input
15245
+ }], showSaveAndLoadConfiguration: [{
15246
+ type: Input
15117
15247
  }], showChange: [{
15118
15248
  type: Output
15119
15249
  }], answerChosen: [{
@@ -15142,6 +15272,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15142
15272
  icons = IconEnum;
15143
15273
  option;
15144
15274
  tileClass = 'small';
15275
+ noLabel = false;
15145
15276
  selectionClicked = new EventEmitter();
15146
15277
  constructor(configuratorConnectorService, iconService, settingsService) {
15147
15278
  this.configuratorConnectorService = configuratorConnectorService;
@@ -15152,7 +15283,7 @@ class ProductConfiguratorSelectorOptionTileComponent {
15152
15283
  this.selectionClicked.emit();
15153
15284
  }
15154
15285
  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 });
15155
- 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: `
15286
+ 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: `
15156
15287
  <!-- When selected show checkmark -->
15157
15288
  <div
15158
15289
  class="configurator-selector-option-tile-container configurator-selector-option-tile-container-{{this.tileClass}}"
@@ -15176,14 +15307,16 @@ class ProductConfiguratorSelectorOptionTileComponent {
15176
15307
  }
15177
15308
  </div>
15178
15309
  <!-- Answer text -->
15179
- <div class="product-configurator-selector-option-tile-description">
15180
- @if (option.nodeText) {
15181
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15182
- }
15183
- @if (!option.nodeText) {
15184
- <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15310
+ @if (!noLabel) {
15311
+ <div class="product-configurator-selector-option-tile-description">
15312
+ @if (option.nodeText) {
15313
+ <p [textContent]="option.nodeText | googleTranslate | async"></p>
15314
+ }
15315
+ @if (!option.nodeText) {
15316
+ <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15317
+ }
15318
+ </div>
15185
15319
  }
15186
- </div>
15187
15320
  </div>
15188
15321
  `, 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 });
15189
15322
  }
@@ -15215,14 +15348,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15215
15348
  }
15216
15349
  </div>
15217
15350
  <!-- Answer text -->
15218
- <div class="product-configurator-selector-option-tile-description">
15219
- @if (option.nodeText) {
15220
- <p [textContent]="option.nodeText | googleTranslate | async"></p>
15221
- }
15222
- @if (!option.nodeText) {
15223
- <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15351
+ @if (!noLabel) {
15352
+ <div class="product-configurator-selector-option-tile-description">
15353
+ @if (option.nodeText) {
15354
+ <p [textContent]="option.nodeText | googleTranslate | async"></p>
15355
+ }
15356
+ @if (!option.nodeText) {
15357
+ <p [textContent]="'Skip / Cancel' | googleTranslate | async"></p>
15358
+ }
15359
+ </div>
15224
15360
  }
15225
- </div>
15226
15361
  </div>
15227
15362
  `,
15228
15363
  encapsulation: ViewEncapsulation.None,
@@ -15235,6 +15370,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15235
15370
  type: Input
15236
15371
  }], tileClass: [{
15237
15372
  type: Input
15373
+ }], noLabel: [{
15374
+ type: Input
15238
15375
  }], selectionClicked: [{
15239
15376
  type: Output
15240
15377
  }] } });
@@ -15501,13 +15638,24 @@ class ProductConfiguratorSelectorOptionComponent {
15501
15638
  selection;
15502
15639
  listOfChoices;
15503
15640
  markAsException;
15641
+ showGlobalAll = false;
15642
+ groupedSubShow = true;
15504
15643
  configurationDisplayOption = ConfigurationDisplayOption;
15505
15644
  selectionClass = '';
15506
15645
  showAllTiles = false;
15507
15646
  maxVisibleTiles = 10;
15508
- maxVisibleSmallTiles = 24;
15647
+ maxVisibleSmallTiles = 7;
15509
15648
  visibleAnswers = [];
15510
15649
  remainingTilesCount = 0;
15650
+ smallTileOptions = [
15651
+ ConfigurationDisplayOption.TileSmall,
15652
+ ConfigurationDisplayOption.SmallCircle,
15653
+ ConfigurationDisplayOption.SmallSquare
15654
+ ];
15655
+ largeTileOptions = [
15656
+ ConfigurationDisplayOption.TileLarge,
15657
+ ConfigurationDisplayOption.TileRounded
15658
+ ];
15511
15659
  constructor(configuratorConnectorService, settingsService, productConfiguratorService) {
15512
15660
  this.configuratorConnectorService = configuratorConnectorService;
15513
15661
  this.settingsService = settingsService;
@@ -15515,7 +15663,7 @@ class ProductConfiguratorSelectorOptionComponent {
15515
15663
  }
15516
15664
  ngOnInit() {
15517
15665
  if (this.selection && this.selection.displayOptionControl == null) {
15518
- this.selection.displayOptionControl = ConfigurationDisplayOption.Tab;
15666
+ this.selection.displayOptionControl = ConfigurationDisplayOption.TileLarge;
15519
15667
  }
15520
15668
  if (this.markAsException) {
15521
15669
  this.selectionClass = 'selection-exception selection-container-' + this.selection.displayOptionControl;
@@ -15531,8 +15679,23 @@ class ProductConfiguratorSelectorOptionComponent {
15531
15679
  this.configuratorConnectorService.getImageForAnswer(selectionCopy);
15532
15680
  this.listOfChoices.push(selectionCopy);
15533
15681
  }
15682
+ if (this.showGlobalAll) {
15683
+ this.showAllTiles = true;
15684
+ }
15534
15685
  this._calculateVisibleAnswers();
15535
15686
  }
15687
+ ngOnChanges(changes) {
15688
+ if (changes.showGlobalAll && !changes.showGlobalAll.firstChange) {
15689
+ this.showAllTiles = !!changes.showGlobalAll.currentValue;
15690
+ this._calculateVisibleAnswers();
15691
+ }
15692
+ if (changes.listOfChoices && !changes.listOfChoices.firstChange) {
15693
+ this._calculateVisibleAnswers();
15694
+ }
15695
+ if (changes.selection && !changes.selection.firstChange) {
15696
+ this._calculateVisibleAnswers();
15697
+ }
15698
+ }
15536
15699
  selectionClicked(answer) {
15537
15700
  this.productConfiguratorService.selectSelection.emit(answer);
15538
15701
  }
@@ -15544,23 +15707,39 @@ class ProductConfiguratorSelectorOptionComponent {
15544
15707
  this.showAllTiles = false;
15545
15708
  this._calculateVisibleAnswers();
15546
15709
  }
15710
+ getTileClass() {
15711
+ switch (this.selection.displayOptionControl) {
15712
+ case this.configurationDisplayOption.TileLarge:
15713
+ return 'large';
15714
+ case this.configurationDisplayOption.TileRounded:
15715
+ return 'rounded';
15716
+ case this.configurationDisplayOption.SmallCircle:
15717
+ return 'small-rounded';
15718
+ case this.configurationDisplayOption.SmallSquare:
15719
+ return 'small-square';
15720
+ default:
15721
+ return 'small';
15722
+ }
15723
+ }
15547
15724
  _calculateVisibleAnswers() {
15548
- if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileLarge) {
15549
- if (this.showAllTiles) {
15550
- this.visibleAnswers = this.listOfChoices;
15551
- }
15552
- else {
15553
- this.visibleAnswers = this.listOfChoices.slice(0, this.maxVisibleTiles);
15554
- }
15725
+ if (this.largeTileOptions.includes(this.selection.displayOptionControl)) {
15726
+ const configuredMaxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleTiles;
15727
+ if (configuredMaxVisibleTiles != null) {
15728
+ this.maxVisibleTiles = configuredMaxVisibleTiles;
15729
+ }
15730
+ this.visibleAnswers = this.showAllTiles
15731
+ ? this.listOfChoices
15732
+ : this.listOfChoices.slice(0, this.maxVisibleTiles);
15555
15733
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleTiles);
15556
15734
  }
15557
- else if (this.selection.displayOptionControl === ConfigurationDisplayOption.TileSmall) {
15558
- if (this.showAllTiles) {
15559
- this.visibleAnswers = this.listOfChoices;
15560
- }
15561
- else {
15562
- this.visibleAnswers = this.listOfChoices.slice(0, this.maxVisibleSmallTiles);
15735
+ else if (this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15736
+ const configuredMaxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleSmallTiles;
15737
+ if (configuredMaxVisibleTiles != null) {
15738
+ this.maxVisibleSmallTiles = configuredMaxVisibleTiles;
15563
15739
  }
15740
+ this.visibleAnswers = this.showAllTiles
15741
+ ? this.listOfChoices
15742
+ : this.listOfChoices.slice(0, this.maxVisibleSmallTiles);
15564
15743
  this.remainingTilesCount = Math.max(0, this.listOfChoices.length - this.maxVisibleSmallTiles);
15565
15744
  }
15566
15745
  else {
@@ -15569,11 +15748,11 @@ class ProductConfiguratorSelectorOptionComponent {
15569
15748
  }
15570
15749
  }
15571
15750
  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 });
15572
- 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: `
15751
+ 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: `
15573
15752
  <div class="selector-wrapper {{this.selectionClass}}">
15574
15753
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15575
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15576
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15754
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15755
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15577
15756
  @for (child of listOfChoices; track child) {
15578
15757
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15579
15758
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15595,18 +15774,25 @@ class ProductConfiguratorSelectorOptionComponent {
15595
15774
  (selectionClicked)="selectionClicked(child)">
15596
15775
  </co-product-configurator-selector-option-tile>
15597
15776
  }
15598
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15777
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15599
15778
  <co-product-configurator-selector-option-tile
15600
15779
  [option]="child"
15601
- [tileClass]="'small-rounded'"
15780
+ [tileClass]="'horizontal'"
15602
15781
  (selectionClicked)="selectionClicked(child)">
15603
15782
  </co-product-configurator-selector-option-tile>
15604
15783
  }
15605
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15784
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15606
15785
  <co-product-configurator-selector-option-tile
15607
- [option]="child"
15608
- [tileClass]="'horizontal'"
15609
- (selectionClicked)="selectionClicked(child)">
15786
+ [option]="child"
15787
+ [tileClass]="'on-page'"
15788
+ (selectionClicked)="selectionClicked(child)">
15789
+ </co-product-configurator-selector-option-tile>
15790
+ }
15791
+ @if (this.selection.displayOptionControl === configurationDisplayOption.SlideOut) {
15792
+ <co-product-configurator-selector-option-tile
15793
+ [option]="child"
15794
+ [tileClass]="'slide-out'"
15795
+ (selectionClicked)="selectionClicked(child)">
15610
15796
  </co-product-configurator-selector-option-tile>
15611
15797
  }
15612
15798
  </div>
@@ -15614,13 +15800,14 @@ class ProductConfiguratorSelectorOptionComponent {
15614
15800
  }
15615
15801
 
15616
15802
  @if (
15617
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15618
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15803
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15804
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15619
15805
  @for (child of visibleAnswers; track child) {
15620
15806
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15621
15807
  <co-product-configurator-selector-option-tile
15622
15808
  [option]="child"
15623
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15809
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15810
+ [tileClass]="getTileClass()"
15624
15811
  (selectionClicked)="selectionClicked(child)"
15625
15812
  ></co-product-configurator-selector-option-tile>
15626
15813
  </div>
@@ -15628,18 +15815,16 @@ class ProductConfiguratorSelectorOptionComponent {
15628
15815
  }
15629
15816
 
15630
15817
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15631
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15632
- <co-product-configurator-selector-option-dropdown
15633
- [options]="listOfChoices"
15634
- (selectionClicked)="selectionClicked($event)"
15635
- ></co-product-configurator-selector-option-dropdown>
15636
- }
15818
+ <co-product-configurator-selector-option-dropdown
15819
+ [options]="listOfChoices"
15820
+ (selectionClicked)="selectionClicked($event)"
15821
+ ></co-product-configurator-selector-option-dropdown>
15637
15822
  }
15638
15823
  </div>
15639
15824
 
15640
15825
  @if (
15641
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15642
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15826
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15827
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15643
15828
  @if (!showAllTiles && remainingTilesCount > 0) {
15644
15829
  <div class="show-more-container">
15645
15830
  <span (click)="showMore()">
@@ -15656,7 +15841,7 @@ class ProductConfiguratorSelectorOptionComponent {
15656
15841
  }
15657
15842
  }
15658
15843
 
15659
- `, 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: [
15844
+ `, 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: [
15660
15845
  trigger('showSelections', [
15661
15846
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15662
15847
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15671,8 +15856,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15671
15856
  template: `
15672
15857
  <div class="selector-wrapper {{this.selectionClass}}">
15673
15858
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
15674
- && this.selection.displayOptionControl !== configurationDisplayOption.TileLarge
15675
- && this.selection.displayOptionControl !== configurationDisplayOption.TileSmall) {
15859
+ && !this.largeTileOptions.includes(this.selection.displayOptionControl)
15860
+ && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15676
15861
  @for (child of listOfChoices; track child) {
15677
15862
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15678
15863
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
@@ -15694,18 +15879,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15694
15879
  (selectionClicked)="selectionClicked(child)">
15695
15880
  </co-product-configurator-selector-option-tile>
15696
15881
  }
15697
- @if (this.selection.displayOptionControl === configurationDisplayOption.Tab) {
15882
+ @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15698
15883
  <co-product-configurator-selector-option-tile
15699
15884
  [option]="child"
15700
- [tileClass]="'small-rounded'"
15885
+ [tileClass]="'horizontal'"
15701
15886
  (selectionClicked)="selectionClicked(child)">
15702
15887
  </co-product-configurator-selector-option-tile>
15703
15888
  }
15704
- @if (this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles) {
15889
+ @if (this.selection.displayOptionControl === configurationDisplayOption.OnPage) {
15705
15890
  <co-product-configurator-selector-option-tile
15706
- [option]="child"
15707
- [tileClass]="'horizontal'"
15708
- (selectionClicked)="selectionClicked(child)">
15891
+ [option]="child"
15892
+ [tileClass]="'on-page'"
15893
+ (selectionClicked)="selectionClicked(child)">
15894
+ </co-product-configurator-selector-option-tile>
15895
+ }
15896
+ @if (this.selection.displayOptionControl === configurationDisplayOption.SlideOut) {
15897
+ <co-product-configurator-selector-option-tile
15898
+ [option]="child"
15899
+ [tileClass]="'slide-out'"
15900
+ (selectionClicked)="selectionClicked(child)">
15709
15901
  </co-product-configurator-selector-option-tile>
15710
15902
  }
15711
15903
  </div>
@@ -15713,13 +15905,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15713
15905
  }
15714
15906
 
15715
15907
  @if (
15716
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15717
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15908
+ this.largeTileOptions.includes(this.selection.displayOptionControl)
15909
+ || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
15718
15910
  @for (child of visibleAnswers; track child) {
15719
15911
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
15720
15912
  <co-product-configurator-selector-option-tile
15721
15913
  [option]="child"
15722
- [tileClass]="this.selection.displayOptionControl === configurationDisplayOption.TileLarge ? 'large' : 'small'"
15914
+ [noLabel]="this.selection.displayOptionControl === configurationDisplayOption.SmallCircle || this.selection.displayOptionControl === configurationDisplayOption.SmallSquare"
15915
+ [tileClass]="getTileClass()"
15723
15916
  (selectionClicked)="selectionClicked(child)"
15724
15917
  ></co-product-configurator-selector-option-tile>
15725
15918
  </div>
@@ -15727,18 +15920,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15727
15920
  }
15728
15921
 
15729
15922
  @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15730
- @if (this.selection.displayOptionControl === configurationDisplayOption.DropDown) {
15731
- <co-product-configurator-selector-option-dropdown
15732
- [options]="listOfChoices"
15733
- (selectionClicked)="selectionClicked($event)"
15734
- ></co-product-configurator-selector-option-dropdown>
15735
- }
15923
+ <co-product-configurator-selector-option-dropdown
15924
+ [options]="listOfChoices"
15925
+ (selectionClicked)="selectionClicked($event)"
15926
+ ></co-product-configurator-selector-option-dropdown>
15736
15927
  }
15737
15928
  </div>
15738
15929
 
15739
15930
  @if (
15740
- this.selection.displayOptionControl === configurationDisplayOption.TileLarge ||
15741
- this.selection.displayOptionControl === configurationDisplayOption.TileSmall) {
15931
+ (this.largeTileOptions.includes(this.selection.displayOptionControl) ||
15932
+ this.smallTileOptions.includes(this.selection.displayOptionControl)) && groupedSubShow) {
15742
15933
  @if (!showAllTiles && remainingTilesCount > 0) {
15743
15934
  <div class="show-more-container">
15744
15935
  <span (click)="showMore()">
@@ -15775,25 +15966,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15775
15966
  type: Input
15776
15967
  }], markAsException: [{
15777
15968
  type: Input
15969
+ }], showGlobalAll: [{
15970
+ type: Input
15971
+ }], groupedSubShow: [{
15972
+ type: Input
15778
15973
  }] } });
15779
15974
 
15780
15975
  class ProductConfiguratorSelectorComponent {
15781
15976
  configuratorConnectorService;
15782
15977
  settingsService;
15783
15978
  iconService;
15784
- showClass() {
15785
- return true;
15786
- }
15787
- icons = IconEnum;
15788
- exceptionContainer;
15789
15979
  get hostClasses() {
15790
- const classes = [];
15791
- classes.push(`treelevel-${this.treeLevelIndex}`);
15792
- if (this.treeLevelIndex === 2 && !this.isActive) {
15793
- classes.push('hidden');
15980
+ const classes = [
15981
+ 'co-product-configurator-selector',
15982
+ `treelevel-${this.treeLevelIndex}`
15983
+ ];
15984
+ if (!this._shouldBeVisible()) {
15985
+ classes.push('hidden-frontend');
15794
15986
  }
15795
15987
  return classes.join(' ');
15796
15988
  }
15989
+ icons = IconEnum;
15990
+ exceptionContainer;
15797
15991
  selection;
15798
15992
  options;
15799
15993
  lastNodeWithChildren;
@@ -15801,13 +15995,37 @@ class ProductConfiguratorSelectorComponent {
15801
15995
  treeLevelIndex = 1;
15802
15996
  isActive = true;
15803
15997
  markAsException = false;
15998
+ showAll = false;
15999
+ suppressSubShowMore = false;
16000
+ useGroupedParentVisibility = false;
15804
16001
  activate = new EventEmitter();
15805
- get selectionIndexText() {
15806
- return this.selectionIndex + '. ';
15807
- }
15808
16002
  selectionClass = '';
15809
16003
  listOfChoices = [];
15810
16004
  activeChildIndex = 0;
16005
+ localShowAll = false;
16006
+ get selectionIndexText() {
16007
+ return this.selectionIndex + '. ';
16008
+ }
16009
+ get expandButtonText() {
16010
+ if (this.getChildShowAll()) {
16011
+ return 'VIEW_LESS';
16012
+ }
16013
+ return this.groupedRemainingTilesCount > 0
16014
+ ? `SHOW_ALL`
16015
+ : 'SHOW_ALL';
16016
+ }
16017
+ get suppressSubShowMoreForChildren() {
16018
+ return this.suppressSubShowMore || this.isGroupedSection();
16019
+ }
16020
+ get groupedRemainingTilesCount() {
16021
+ if (!this.isGroupedSection() || this.getChildShowAll()) {
16022
+ return 0;
16023
+ }
16024
+ return this._countGroupedTilesToReveal(this.options);
16025
+ }
16026
+ get useGroupedVisibilityForChildren() {
16027
+ return this.useGroupedParentVisibility || this.isGroupedSection();
16028
+ }
15811
16029
  constructor(configuratorConnectorService, settingsService, iconService) {
15812
16030
  this.configuratorConnectorService = configuratorConnectorService;
15813
16031
  this.settingsService = settingsService;
@@ -15829,6 +16047,15 @@ class ProductConfiguratorSelectorComponent {
15829
16047
  if (this.markAsException) {
15830
16048
  this.showAndScroll();
15831
16049
  }
16050
+ this._setActiveChildIndexFromSelection();
16051
+ }
16052
+ ngOnChanges(changes) {
16053
+ if (changes.options && !changes.options.firstChange) {
16054
+ this._setActiveChildIndexFromSelection();
16055
+ }
16056
+ if (changes.showAll && !changes.showAll.firstChange) {
16057
+ this._setActiveChildIndexFromSelection();
16058
+ }
15832
16059
  }
15833
16060
  showAndScroll() {
15834
16061
  setTimeout(() => {
@@ -15838,8 +16065,128 @@ class ProductConfiguratorSelectorComponent {
15838
16065
  onSubHeaderClick() {
15839
16066
  this.activate.emit();
15840
16067
  }
16068
+ onShowAllClick() {
16069
+ this.localShowAll = !this.localShowAll;
16070
+ }
16071
+ getIsChildVisible(index) {
16072
+ if (!this.useGroupedVisibilityForChildren) {
16073
+ return true;
16074
+ }
16075
+ if (this.getChildShowAll()) {
16076
+ return true;
16077
+ }
16078
+ return index === this.activeChildIndex;
16079
+ }
16080
+ isGroupedSection() {
16081
+ return this.treeLevelIndex === 1
16082
+ && !this.lastNodeWithChildren
16083
+ && this.settingsService.settings.options.groupedShowAllBtn
16084
+ && Array.isArray(this.options)
16085
+ && this.options.length > 1;
16086
+ }
16087
+ shouldShowExpandButton() {
16088
+ return this.isGroupedSection();
16089
+ }
16090
+ getChildShowAll() {
16091
+ return this.showAll || this.localShowAll;
16092
+ }
16093
+ _shouldBeVisible() {
16094
+ if (!this.useGroupedVisibilityForChildren) {
16095
+ return true;
16096
+ }
16097
+ if (this.getChildShowAll()) {
16098
+ return true;
16099
+ }
16100
+ return this.isActive;
16101
+ }
16102
+ _setActiveChildIndexFromSelection() {
16103
+ if (!Array.isArray(this.options) || this.options.length === 0) {
16104
+ this.activeChildIndex = 0;
16105
+ return;
16106
+ }
16107
+ const selectedIndex = this.options.findIndex(option => this._hasSelectedOption(option));
16108
+ this.activeChildIndex = selectedIndex >= 0 ? selectedIndex : 0;
16109
+ }
16110
+ _hasSelectedOption(option) {
16111
+ if (!option) {
16112
+ return false;
16113
+ }
16114
+ if (option.selector && option.selector.selected === 'F') {
16115
+ return true;
16116
+ }
16117
+ if (!Array.isArray(option.selectorOptions) || option.selectorOptions.length === 0) {
16118
+ return false;
16119
+ }
16120
+ return option.selectorOptions.some(childOption => this._hasSelectedOption(childOption));
16121
+ }
16122
+ _countRemainingTiles(options) {
16123
+ if (!Array.isArray(options) || options.length === 0) {
16124
+ return 0;
16125
+ }
16126
+ let total = 0;
16127
+ for (const option of options) {
16128
+ if (!option) {
16129
+ continue;
16130
+ }
16131
+ if (option.lastNodeWithChildren) {
16132
+ total += this._remainingTilesForLeaf(option);
16133
+ }
16134
+ else if (Array.isArray(option.selectorOptions)) {
16135
+ total += this._countRemainingTiles(option.selectorOptions);
16136
+ }
16137
+ }
16138
+ return total;
16139
+ }
16140
+ _countGroupedTilesToReveal(options) {
16141
+ if (!Array.isArray(options) || options.length === 0) {
16142
+ return 0;
16143
+ }
16144
+ let total = 0;
16145
+ options.forEach((option, index) => {
16146
+ if (index === this.activeChildIndex) {
16147
+ total += this._countRemainingTiles([option]);
16148
+ }
16149
+ else {
16150
+ total += this._countAllTiles(option);
16151
+ }
16152
+ });
16153
+ return total;
16154
+ }
16155
+ _countAllTiles(option) {
16156
+ if (!option) {
16157
+ return 0;
16158
+ }
16159
+ if (option.lastNodeWithChildren) {
16160
+ return Array.isArray(option.selectorOptions)
16161
+ ? option.selectorOptions.length
16162
+ : 0;
16163
+ }
16164
+ if (!Array.isArray(option.selectorOptions)) {
16165
+ return 0;
16166
+ }
16167
+ return option.selectorOptions.reduce((total, childOption) => total + this._countAllTiles(childOption), 0);
16168
+ }
16169
+ _remainingTilesForLeaf(option) {
16170
+ if (!option?.selectorOptions || !option.selector) {
16171
+ return 0;
16172
+ }
16173
+ const displayOption = option.selector.displayOptionControl;
16174
+ const count = option.selectorOptions.length;
16175
+ if (displayOption === ConfigurationDisplayOption.TileLarge
16176
+ || displayOption === ConfigurationDisplayOption.TileRounded) {
16177
+ const maxVisibleTiles = this.settingsService?.settings?.options?.maxVisibleTiles ?? 10;
16178
+ return Math.max(0, count - maxVisibleTiles);
16179
+ }
16180
+ if (displayOption === ConfigurationDisplayOption.TileSmall
16181
+ || displayOption === ConfigurationDisplayOption.SmallCircle
16182
+ || displayOption === ConfigurationDisplayOption.SmallSquare) {
16183
+ const maxVisibleSmallTiles = this.settingsService?.settings?.options?.maxVisibleSmallTiles ?? 24;
16184
+ return Math.max(0, count - maxVisibleSmallTiles);
16185
+ }
16186
+ return 0;
16187
+ }
15841
16188
  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 });
15842
- 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: `
16189
+ 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: `
15843
16190
  <div class="selector-container">
15844
16191
  <!--
15845
16192
  Based on the threeLevel and the length op options we got a couple of flavours
@@ -15888,7 +16235,9 @@ class ProductConfiguratorSelectorComponent {
15888
16235
  <co-product-configurator-selector-option
15889
16236
  [selection]="selection"
15890
16237
  [listOfChoices]="listOfChoices"
15891
- [markAsException]="markAsException">
16238
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16239
+ [markAsException]="markAsException"
16240
+ [showGlobalAll]="getChildShowAll()">
15892
16241
  </co-product-configurator-selector-option>
15893
16242
  }
15894
16243
  </div>
@@ -15901,13 +16250,29 @@ class ProductConfiguratorSelectorComponent {
15901
16250
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15902
16251
  [selectionIndex]="index + 1"
15903
16252
  [treeLevelIndex]="treeLevelIndex + 1"
15904
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16253
+ [showAll]="getChildShowAll()"
16254
+ [isActive]="getIsChildVisible(index)"
16255
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16256
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15905
16257
  [markAsException]="displaySelection.markForExceptionNotification"
15906
16258
  (activate)="activeChildIndex = index">
15907
16259
  </co-product-configurator-selector>
15908
16260
  }
15909
16261
  }
15910
- `, 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: [
16262
+ @if (shouldShowExpandButton()) {
16263
+ <div class="show-more-container" (click)="onShowAllClick()">
16264
+ <span class="show-all-button show-more-text-link"
16265
+ [textContent]="expandButtonText | localize">
16266
+ </span>
16267
+
16268
+ @if (this.groupedRemainingTilesCount > 0) {
16269
+ <span class="show-all-button show-more-text-link counter"
16270
+ [textContent]="'(' + this.groupedRemainingTilesCount + ')'">
16271
+ </span>
16272
+ }
16273
+ </div>
16274
+ }
16275
+ `, 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: [
15911
16276
  trigger('showSelections', [
15912
16277
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
15913
16278
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -15968,7 +16333,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15968
16333
  <co-product-configurator-selector-option
15969
16334
  [selection]="selection"
15970
16335
  [listOfChoices]="listOfChoices"
15971
- [markAsException]="markAsException">
16336
+ [groupedSubShow]="!suppressSubShowMoreForChildren"
16337
+ [markAsException]="markAsException"
16338
+ [showGlobalAll]="getChildShowAll()">
15972
16339
  </co-product-configurator-selector-option>
15973
16340
  }
15974
16341
  </div>
@@ -15981,12 +16348,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15981
16348
  [lastNodeWithChildren]="displaySelection.lastNodeWithChildren"
15982
16349
  [selectionIndex]="index + 1"
15983
16350
  [treeLevelIndex]="treeLevelIndex + 1"
15984
- [isActive]="treeLevelIndex !== 1 || index === activeChildIndex"
16351
+ [showAll]="getChildShowAll()"
16352
+ [isActive]="getIsChildVisible(index)"
16353
+ [suppressSubShowMore]="suppressSubShowMoreForChildren"
16354
+ [useGroupedParentVisibility]="useGroupedVisibilityForChildren"
15985
16355
  [markAsException]="displaySelection.markForExceptionNotification"
15986
16356
  (activate)="activeChildIndex = index">
15987
16357
  </co-product-configurator-selector>
15988
16358
  }
15989
16359
  }
16360
+ @if (shouldShowExpandButton()) {
16361
+ <div class="show-more-container" (click)="onShowAllClick()">
16362
+ <span class="show-all-button show-more-text-link"
16363
+ [textContent]="expandButtonText | localize">
16364
+ </span>
16365
+
16366
+ @if (this.groupedRemainingTilesCount > 0) {
16367
+ <span class="show-all-button show-more-text-link counter"
16368
+ [textContent]="'(' + this.groupedRemainingTilesCount + ')'">
16369
+ </span>
16370
+ }
16371
+ </div>
16372
+ }
15990
16373
  `,
15991
16374
  encapsulation: ViewEncapsulation.None,
15992
16375
  animations: [
@@ -15998,15 +16381,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15998
16381
  ],
15999
16382
  standalone: false
16000
16383
  }]
16001
- }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { showClass: [{
16384
+ }], ctorParameters: () => [{ type: ConfiguratorConnectorService }, { type: SettingsService }, { type: IconCacheService }], propDecorators: { hostClasses: [{
16002
16385
  type: HostBinding,
16003
- args: ['class.co-product-configurator-selector']
16386
+ args: ['class']
16004
16387
  }], exceptionContainer: [{
16005
16388
  type: ViewChild,
16006
16389
  args: ['exceptionContainer']
16007
- }], hostClasses: [{
16008
- type: HostBinding,
16009
- args: ['class']
16010
16390
  }], selection: [{
16011
16391
  type: Input
16012
16392
  }], options: [{
@@ -16021,6 +16401,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16021
16401
  type: Input
16022
16402
  }], markAsException: [{
16023
16403
  type: Input
16404
+ }], showAll: [{
16405
+ type: Input
16406
+ }], suppressSubShowMore: [{
16407
+ type: Input
16408
+ }], useGroupedParentVisibility: [{
16409
+ type: Input
16024
16410
  }], activate: [{
16025
16411
  type: Output
16026
16412
  }] } });
@@ -16053,6 +16439,7 @@ class ProductConfiguratorComponent {
16053
16439
  showLabel = true;
16054
16440
  canClose = true;
16055
16441
  customDimensions = false;
16442
+ showSaveAndLoadConfiguration;
16056
16443
  showChange = new EventEmitter();
16057
16444
  answerChosen = new EventEmitter();
16058
16445
  valutaSymbol = '€'; // TODO this should be a setting
@@ -16106,7 +16493,7 @@ class ProductConfiguratorComponent {
16106
16493
  this.showChange.emit(false);
16107
16494
  }
16108
16495
  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 });
16109
- 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: `
16496
+ 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: `
16110
16497
  @if (show) {
16111
16498
  <div class="product-configurator-container">
16112
16499
  @if (showHeaderInformation) {
@@ -16115,11 +16502,16 @@ class ProductConfiguratorComponent {
16115
16502
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16116
16503
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16117
16504
  </div>
16118
- @if (canClose) {
16119
- <div class="product-configurator-close" (click)="handleCloseClick()">
16120
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16121
- </div>
16122
- }
16505
+ <div class="product-configurator-header-actions">
16506
+ @if (showSaveAndLoadConfiguration) {
16507
+ <co-configuration-preset></co-configuration-preset>
16508
+ }
16509
+ @if (canClose) {
16510
+ <div class="product-configurator-close" (click)="handleCloseClick()">
16511
+ <co-icon [iconData]="iconService.getIcon(icons.XmarkLightFull)"></co-icon>
16512
+ </div>
16513
+ }
16514
+ </div>
16123
16515
  </div>
16124
16516
  }
16125
16517
  <div class="product-configurator-details" #scrollcontainer>
@@ -16147,7 +16539,7 @@ class ProductConfiguratorComponent {
16147
16539
  }
16148
16540
  </div>
16149
16541
  }
16150
- `, 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 });
16542
+ `, 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 });
16151
16543
  }
16152
16544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorComponent, decorators: [{
16153
16545
  type: Component,
@@ -16162,11 +16554,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16162
16554
  <h2 class="product-configurator-header-text" [textContent]="article.name"></h2>
16163
16555
  <p class="product-configurator-text" [innerHTML]="safeDescription"></p>
16164
16556
  </div>
16165
- @if (canClose) {
16166
- <div class="product-configurator-close" (click)="handleCloseClick()">
16167
- <co-icon [iconData]="iconService.getIcon(icons.Cross)"></co-icon>
16168
- </div>
16169
- }
16557
+ <div class="product-configurator-header-actions">
16558
+ @if (showSaveAndLoadConfiguration) {
16559
+ <co-configuration-preset></co-configuration-preset>
16560
+ }
16561
+ @if (canClose) {
16562
+ <div class="product-configurator-close" (click)="handleCloseClick()">
16563
+ <co-icon [iconData]="iconService.getIcon(icons.XmarkLightFull)"></co-icon>
16564
+ </div>
16565
+ }
16566
+ </div>
16170
16567
  </div>
16171
16568
  }
16172
16569
  <div class="product-configurator-details" #scrollcontainer>
@@ -16213,12 +16610,225 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16213
16610
  type: Input
16214
16611
  }], customDimensions: [{
16215
16612
  type: Input
16613
+ }], showSaveAndLoadConfiguration: [{
16614
+ type: Input
16216
16615
  }], showChange: [{
16217
16616
  type: Output
16218
16617
  }], answerChosen: [{
16219
16618
  type: Output
16220
16619
  }] } });
16221
16620
 
16621
+ class ConfigurationPresetDialogComponent {
16622
+ iconService;
16623
+ _configuringService;
16624
+ _configuratorConnectorService;
16625
+ _dictionaryService;
16626
+ _appEventService;
16627
+ icons = IconEnum;
16628
+ presetDialogMode = PresetDialogMode;
16629
+ showClass() {
16630
+ return true;
16631
+ }
16632
+ showDialog = false;
16633
+ instanceIdInput;
16634
+ dialogMode = PresetDialogMode.SAVE;
16635
+ showValidationErrors = false;
16636
+ validationError;
16637
+ _subs = [];
16638
+ constructor(iconService, _configuringService, _configuratorConnectorService, _dictionaryService, _appEventService) {
16639
+ this.iconService = iconService;
16640
+ this._configuringService = _configuringService;
16641
+ this._configuratorConnectorService = _configuratorConnectorService;
16642
+ this._dictionaryService = _dictionaryService;
16643
+ this._appEventService = _appEventService;
16644
+ this._subs.push(this._appEventService.changeConfigurationPresetDialogMode.subscribe((mode) => {
16645
+ this.handleOpenDialog(mode);
16646
+ }));
16647
+ }
16648
+ ngOnDestroy() {
16649
+ this._subs.forEach((sub) => sub.unsubscribe());
16650
+ }
16651
+ handleOpenDialog(mode) {
16652
+ if (mode === PresetDialogMode.SAVE) {
16653
+ const instanceId = this._configuringService.buildResult.instanceId;
16654
+ this._configuratorConnectorService.storePreset(instanceId).then((response) => {
16655
+ if (response && response.validationResult && response.validationResult.success) {
16656
+ this.instanceIdInput = response.resultObject;
16657
+ this.dialogMode = mode;
16658
+ this.showDialog = true;
16659
+ }
16660
+ });
16661
+ }
16662
+ else if (mode === PresetDialogMode.LOAD) {
16663
+ this.dialogMode = mode;
16664
+ this.showDialog = true;
16665
+ }
16666
+ }
16667
+ handleCloseClick() {
16668
+ this.showDialog = false;
16669
+ }
16670
+ handleCopySuccess() {
16671
+ this.instanceIdInput = this._dictionaryService.get('COPIED');
16672
+ }
16673
+ loadConfiguration() {
16674
+ const goodId = +this._configuringService.buildResult.goodId;
16675
+ this._configuratorConnectorService.initForPreset(this.instanceIdInput, goodId).then((response) => {
16676
+ if (response && response.validationResult && response.validationResult.success) {
16677
+ this.showDialog = false;
16678
+ const resultObject = this._configuringService.buildResult;
16679
+ resultObject.instanceId = response.resultObject;
16680
+ this._configuringService.configure(resultObject);
16681
+ }
16682
+ else {
16683
+ // error, shit not found
16684
+ if (response.validationResult && response.validationResult.messages && response.validationResult.messages.length > 0) {
16685
+ const firstMessage = response.validationResult.messages[0].message;
16686
+ this.showValidationErrors = true;
16687
+ this.validationError = firstMessage;
16688
+ }
16689
+ }
16690
+ });
16691
+ }
16692
+ 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 });
16693
+ 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: `
16694
+ @if (showDialog) {
16695
+ <div class="configuration-preset-dialog">
16696
+ <div class="configuration-preset-dialog-container">
16697
+ <div class="configuration-preset-dialog-container-header">
16698
+ @if (dialogMode === presetDialogMode.SAVE) {
16699
+ <co-icon [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"></co-icon>
16700
+ <h3 [textContent]="'SAVE_CONFIGURATION' | localize"></h3>
16701
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16702
+ <co-icon [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"></co-icon>
16703
+ <h3 [textContent]="'LOAD_CONFIGURATION' | localize"></h3>
16704
+ }
16705
+ </div>
16706
+ <div class="configuration-preset-dialog-container-body">
16707
+ @if (dialogMode === presetDialogMode.SAVE) {
16708
+ <div class="save-success">
16709
+ <p class="save-success-text" [textContent]="instanceIdInput"></p>
16710
+ <co-button
16711
+ class="save-success-button"
16712
+ [cdkCopyToClipboard]="instanceIdInput"
16713
+ [iconData]="iconService.getIcon(icons.CopyRegularFull)"
16714
+ (onClick)="handleCopySuccess()">
16715
+ </co-button>
16716
+ </div>
16717
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16718
+ <co-input-text
16719
+ [placeholder]="'CONFIGURATION_CODE' | localize"
16720
+ [(model)]="instanceIdInput"
16721
+ ></co-input-text>
16722
+
16723
+ @if (showValidationErrors) {
16724
+ <div class="validation-error">
16725
+ <p [textContent]="validationError"></p>
16726
+ </div>
16727
+ }
16728
+ }
16729
+ </div>
16730
+ <div class="configuration-preset-dialog-container-footer">
16731
+ @if (dialogMode === presetDialogMode.LOAD) {
16732
+ <co-button
16733
+ class="button-as-link"
16734
+ [label]="'CANCEL' | localize"
16735
+ (onClick)="handleCloseClick()"
16736
+ ></co-button>
16737
+ }
16738
+ @if (dialogMode === presetDialogMode.SAVE) {
16739
+ <co-button
16740
+ class="save-preset-button"
16741
+ [label]="'OK' | localize"
16742
+ (onClick)="handleCloseClick()">
16743
+ </co-button>
16744
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16745
+ <co-button
16746
+ class="open-preset-button"
16747
+ [label]="'OPEN' | localize"
16748
+ (onClick)="loadConfiguration()">
16749
+ </co-button>
16750
+ }
16751
+ </div>
16752
+ </div>
16753
+ </div>
16754
+ }
16755
+ `, 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 });
16756
+ }
16757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogComponent, decorators: [{
16758
+ type: Component,
16759
+ args: [{
16760
+ selector: 'co-configuration-preset-dialog',
16761
+ template: `
16762
+ @if (showDialog) {
16763
+ <div class="configuration-preset-dialog">
16764
+ <div class="configuration-preset-dialog-container">
16765
+ <div class="configuration-preset-dialog-container-header">
16766
+ @if (dialogMode === presetDialogMode.SAVE) {
16767
+ <co-icon [iconData]="iconService.getIcon(icons.FloppyDiskLightFull)"></co-icon>
16768
+ <h3 [textContent]="'SAVE_CONFIGURATION' | localize"></h3>
16769
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16770
+ <co-icon [iconData]="iconService.getIcon(icons.FolderOpenLightFull)"></co-icon>
16771
+ <h3 [textContent]="'LOAD_CONFIGURATION' | localize"></h3>
16772
+ }
16773
+ </div>
16774
+ <div class="configuration-preset-dialog-container-body">
16775
+ @if (dialogMode === presetDialogMode.SAVE) {
16776
+ <div class="save-success">
16777
+ <p class="save-success-text" [textContent]="instanceIdInput"></p>
16778
+ <co-button
16779
+ class="save-success-button"
16780
+ [cdkCopyToClipboard]="instanceIdInput"
16781
+ [iconData]="iconService.getIcon(icons.CopyRegularFull)"
16782
+ (onClick)="handleCopySuccess()">
16783
+ </co-button>
16784
+ </div>
16785
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16786
+ <co-input-text
16787
+ [placeholder]="'CONFIGURATION_CODE' | localize"
16788
+ [(model)]="instanceIdInput"
16789
+ ></co-input-text>
16790
+
16791
+ @if (showValidationErrors) {
16792
+ <div class="validation-error">
16793
+ <p [textContent]="validationError"></p>
16794
+ </div>
16795
+ }
16796
+ }
16797
+ </div>
16798
+ <div class="configuration-preset-dialog-container-footer">
16799
+ @if (dialogMode === presetDialogMode.LOAD) {
16800
+ <co-button
16801
+ class="button-as-link"
16802
+ [label]="'CANCEL' | localize"
16803
+ (onClick)="handleCloseClick()"
16804
+ ></co-button>
16805
+ }
16806
+ @if (dialogMode === presetDialogMode.SAVE) {
16807
+ <co-button
16808
+ class="save-preset-button"
16809
+ [label]="'OK' | localize"
16810
+ (onClick)="handleCloseClick()">
16811
+ </co-button>
16812
+ } @else if (dialogMode === presetDialogMode.LOAD) {
16813
+ <co-button
16814
+ class="open-preset-button"
16815
+ [label]="'OPEN' | localize"
16816
+ (onClick)="loadConfiguration()">
16817
+ </co-button>
16818
+ }
16819
+ </div>
16820
+ </div>
16821
+ </div>
16822
+ }
16823
+ `,
16824
+ encapsulation: ViewEncapsulation.None,
16825
+ standalone: false
16826
+ }]
16827
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: ConfiguringService }, { type: ConfiguratorConnectorService }, { type: DictionaryService }, { type: AppEventService }], propDecorators: { showClass: [{
16828
+ type: HostBinding,
16829
+ args: ['class.co-configuration-preset-dialog']
16830
+ }] } });
16831
+
16222
16832
  class ThreedselectorComponent {
16223
16833
  _appEventService;
16224
16834
  _buildFurnitureService;
@@ -16232,6 +16842,7 @@ class ThreedselectorComponent {
16232
16842
  canCloseConfigurator = true;
16233
16843
  animateSlideout = true;
16234
16844
  showHeaderInformation = true;
16845
+ showSaveAndLoadConfiguration;
16235
16846
  buildFinished = new EventEmitter();
16236
16847
  showChange = new EventEmitter();
16237
16848
  showElementToolbar = false;
@@ -16294,29 +16905,34 @@ class ThreedselectorComponent {
16294
16905
  }
16295
16906
  }
16296
16907
  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 });
16297
- 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: `
16298
- @if (!showFullConfiguration) {
16299
- <co-lite-selector
16300
- class="floating"
16301
- [showSelections]="showTemplate"
16302
- [showAnswers]="showTemplate"
16303
- [animateSlideout]="animateSlideout"
16304
- [canClose]="canCloseConfigurator"
16305
- (showChange)="handleShowChangeSelector($event)">
16306
- </co-lite-selector>
16307
- }
16308
-
16309
- @if (showFullConfiguration) {
16310
- <co-product-configurator
16311
- class="floating"
16312
- [show]="showTemplate"
16313
- [showSelections]="showSelections"
16314
- [canClose]="canCloseConfigurator"
16315
- [showHeaderInformation]="showHeaderInformation"
16316
- (showChange)="handleShowChangeSelector($event)">
16317
- </co-product-configurator>
16318
- }
16319
- `, 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: [
16908
+ 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: `
16909
+ @if (!showFullConfiguration) {
16910
+ <co-lite-selector
16911
+ class="floating"
16912
+ [showSelections]="showTemplate"
16913
+ [showAnswers]="showTemplate"
16914
+ [animateSlideout]="animateSlideout"
16915
+ [canClose]="canCloseConfigurator"
16916
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16917
+ (showChange)="handleShowChangeSelector($event)">
16918
+ </co-lite-selector>
16919
+ }
16920
+
16921
+ @if (showFullConfiguration) {
16922
+ <co-product-configurator
16923
+ class="floating"
16924
+ [show]="showTemplate"
16925
+ [showSelections]="showSelections"
16926
+ [canClose]="canCloseConfigurator"
16927
+ [showHeaderInformation]="showHeaderInformation"
16928
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16929
+ (showChange)="handleShowChangeSelector($event)">
16930
+ </co-product-configurator>
16931
+ }
16932
+ @if (showSaveAndLoadConfiguration) {
16933
+ <co-configuration-preset-dialog></co-configuration-preset-dialog>
16934
+ }
16935
+ `, 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: [
16320
16936
  trigger('showElementToolbar', [
16321
16937
  state('void', style({ opacity: 0 })),
16322
16938
  state('*', style({ opacity: 1 })),
@@ -16329,27 +16945,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16329
16945
  args: [{
16330
16946
  selector: 'co-threedselector',
16331
16947
  template: `
16332
- @if (!showFullConfiguration) {
16333
- <co-lite-selector
16334
- class="floating"
16335
- [showSelections]="showTemplate"
16336
- [showAnswers]="showTemplate"
16337
- [animateSlideout]="animateSlideout"
16338
- [canClose]="canCloseConfigurator"
16339
- (showChange)="handleShowChangeSelector($event)">
16340
- </co-lite-selector>
16341
- }
16342
-
16343
- @if (showFullConfiguration) {
16344
- <co-product-configurator
16345
- class="floating"
16346
- [show]="showTemplate"
16347
- [showSelections]="showSelections"
16348
- [canClose]="canCloseConfigurator"
16349
- [showHeaderInformation]="showHeaderInformation"
16350
- (showChange)="handleShowChangeSelector($event)">
16351
- </co-product-configurator>
16352
- }
16948
+ @if (!showFullConfiguration) {
16949
+ <co-lite-selector
16950
+ class="floating"
16951
+ [showSelections]="showTemplate"
16952
+ [showAnswers]="showTemplate"
16953
+ [animateSlideout]="animateSlideout"
16954
+ [canClose]="canCloseConfigurator"
16955
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16956
+ (showChange)="handleShowChangeSelector($event)">
16957
+ </co-lite-selector>
16958
+ }
16959
+
16960
+ @if (showFullConfiguration) {
16961
+ <co-product-configurator
16962
+ class="floating"
16963
+ [show]="showTemplate"
16964
+ [showSelections]="showSelections"
16965
+ [canClose]="canCloseConfigurator"
16966
+ [showHeaderInformation]="showHeaderInformation"
16967
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
16968
+ (showChange)="handleShowChangeSelector($event)">
16969
+ </co-product-configurator>
16970
+ }
16971
+ @if (showSaveAndLoadConfiguration) {
16972
+ <co-configuration-preset-dialog></co-configuration-preset-dialog>
16973
+ }
16353
16974
  `,
16354
16975
  encapsulation: ViewEncapsulation.None,
16355
16976
  animations: [
@@ -16374,6 +16995,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16374
16995
  type: Input
16375
16996
  }], showHeaderInformation: [{
16376
16997
  type: Input
16998
+ }], showSaveAndLoadConfiguration: [{
16999
+ type: Input
16377
17000
  }], buildFinished: [{
16378
17001
  type: Output
16379
17002
  }], showChange: [{
@@ -16395,6 +17018,7 @@ class ConfiguratorComponent {
16395
17018
  canCloseConfigurator = true;
16396
17019
  animateSlideout = true;
16397
17020
  showHeaderInformation = true;
17021
+ showSaveAndLoadConfiguration;
16398
17022
  buildResult = new EventEmitter();
16399
17023
  // TODO
16400
17024
  isLoading = new EventEmitter();
@@ -16447,54 +17071,56 @@ class ConfiguratorComponent {
16447
17071
  }
16448
17072
  }
16449
17073
  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 });
16450
- 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: `
16451
- @if (showProgressBar) {
16452
- <co-progress-bar></co-progress-bar>
16453
- }
16454
- @if (showLoader) {
16455
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16456
- }
16457
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16458
- <co-configurator-error-dialog
16459
- [errorMessages]="configurationResultObject.errorMessages"
16460
- (closeErrorDialoag)="handleCloseErrorDialog()"
16461
- ></co-configurator-error-dialog>
16462
- }
17074
+ 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: `
17075
+ @if (showProgressBar) {
17076
+ <co-progress-bar></co-progress-bar>
17077
+ }
17078
+ @if (showLoader) {
17079
+ <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
17080
+ }
17081
+ @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
17082
+ <co-configurator-error-dialog
17083
+ [errorMessages]="configurationResultObject.errorMessages"
17084
+ (closeErrorDialoag)="handleCloseErrorDialog()"
17085
+ ></co-configurator-error-dialog>
17086
+ }
16463
17087
 
16464
- <co-threedselector
16465
- [canCloseConfigurator]="canCloseConfigurator"
16466
- [animateSlideout]="animateSlideout"
16467
- [showHeaderInformation]="showHeaderInformation"
16468
- (buildFinished)="handleBuildFinished($event)"
16469
- (showChange)="handleShowChange($event)">
16470
- </co-threedselector>
16471
- `, 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 });
17088
+ <co-threedselector
17089
+ [canCloseConfigurator]="canCloseConfigurator"
17090
+ [animateSlideout]="animateSlideout"
17091
+ [showHeaderInformation]="showHeaderInformation"
17092
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
17093
+ (buildFinished)="handleBuildFinished($event)"
17094
+ (showChange)="handleShowChange($event)">
17095
+ </co-threedselector>
17096
+ `, 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 });
16472
17097
  }
16473
17098
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, decorators: [{
16474
17099
  type: Component,
16475
17100
  args: [{
16476
17101
  selector: 'co-configurator',
16477
17102
  template: `
16478
- @if (showProgressBar) {
16479
- <co-progress-bar></co-progress-bar>
16480
- }
16481
- @if (showLoader) {
16482
- <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
16483
- }
16484
- @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
16485
- <co-configurator-error-dialog
16486
- [errorMessages]="configurationResultObject.errorMessages"
16487
- (closeErrorDialoag)="handleCloseErrorDialog()"
16488
- ></co-configurator-error-dialog>
16489
- }
17103
+ @if (showProgressBar) {
17104
+ <co-progress-bar></co-progress-bar>
17105
+ }
17106
+ @if (showLoader) {
17107
+ <co-configurator-loader [show]="loaderService.showLoader"></co-configurator-loader>
17108
+ }
17109
+ @if (showErrorMessages && resultHasErrors && showErrorDiagram) {
17110
+ <co-configurator-error-dialog
17111
+ [errorMessages]="configurationResultObject.errorMessages"
17112
+ (closeErrorDialoag)="handleCloseErrorDialog()"
17113
+ ></co-configurator-error-dialog>
17114
+ }
16490
17115
 
16491
- <co-threedselector
16492
- [canCloseConfigurator]="canCloseConfigurator"
16493
- [animateSlideout]="animateSlideout"
16494
- [showHeaderInformation]="showHeaderInformation"
16495
- (buildFinished)="handleBuildFinished($event)"
16496
- (showChange)="handleShowChange($event)">
16497
- </co-threedselector>
17116
+ <co-threedselector
17117
+ [canCloseConfigurator]="canCloseConfigurator"
17118
+ [animateSlideout]="animateSlideout"
17119
+ [showHeaderInformation]="showHeaderInformation"
17120
+ [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
17121
+ (buildFinished)="handleBuildFinished($event)"
17122
+ (showChange)="handleShowChange($event)">
17123
+ </co-threedselector>
16498
17124
  `,
16499
17125
  encapsulation: ViewEncapsulation.None,
16500
17126
  standalone: false
@@ -16516,6 +17142,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
16516
17142
  type: Input
16517
17143
  }], showHeaderInformation: [{
16518
17144
  type: Input
17145
+ }], showSaveAndLoadConfiguration: [{
17146
+ type: Input
16519
17147
  }], buildResult: [{
16520
17148
  type: Output
16521
17149
  }], isLoading: [{
@@ -17393,6 +18021,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17393
18021
  }]
17394
18022
  }] });
17395
18023
 
18024
+ class ConfigurationPresetModule {
18025
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18026
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, declarations: [ConfigurationPresetComponent], imports: [PipesModule,
18027
+ ButtonModule,
18028
+ IconModule,
18029
+ InputTextModule,
18030
+ CdkCopyToClipboard], exports: [ConfigurationPresetComponent] });
18031
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, imports: [PipesModule,
18032
+ ButtonModule,
18033
+ IconModule,
18034
+ InputTextModule] });
18035
+ }
18036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetModule, decorators: [{
18037
+ type: NgModule,
18038
+ args: [{
18039
+ imports: [
18040
+ PipesModule,
18041
+ ButtonModule,
18042
+ IconModule,
18043
+ InputTextModule,
18044
+ CdkCopyToClipboard
18045
+ ],
18046
+ declarations: [
18047
+ ConfigurationPresetComponent
18048
+ ],
18049
+ exports: [
18050
+ ConfigurationPresetComponent
18051
+ ]
18052
+ }]
18053
+ }] });
18054
+
17396
18055
  class SelectionsSummaryModule {
17397
18056
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17398
18057
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, declarations: [SelectionsSummaryComponent], imports: [CoSummaryLineModule,
@@ -17400,13 +18059,15 @@ class SelectionsSummaryModule {
17400
18059
  PipesModule,
17401
18060
  PriceDisplayPipeModule,
17402
18061
  SelectionsSummaryLineModule,
17403
- IconModule], exports: [SelectionsSummaryComponent] });
18062
+ IconModule,
18063
+ ConfigurationPresetModule], exports: [SelectionsSummaryComponent] });
17404
18064
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, imports: [CoSummaryLineModule,
17405
18065
  CommonModule,
17406
18066
  PipesModule,
17407
18067
  PriceDisplayPipeModule,
17408
18068
  SelectionsSummaryLineModule,
17409
- IconModule] });
18069
+ IconModule,
18070
+ ConfigurationPresetModule] });
17410
18071
  }
17411
18072
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryModule, decorators: [{
17412
18073
  type: NgModule,
@@ -17417,7 +18078,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17417
18078
  PipesModule,
17418
18079
  PriceDisplayPipeModule,
17419
18080
  SelectionsSummaryLineModule,
17420
- IconModule
18081
+ IconModule,
18082
+ ConfigurationPresetModule
17421
18083
  ],
17422
18084
  declarations: [
17423
18085
  SelectionsSummaryComponent,
@@ -17628,7 +18290,8 @@ class ProductConfiguratorModule {
17628
18290
  PipesModule,
17629
18291
  IconModule,
17630
18292
  TooltipDirectiveModule,
17631
- ProductConfiguratorSelectorModule], exports: [ProductConfiguratorComponent] });
18293
+ ProductConfiguratorSelectorModule,
18294
+ ConfigurationPresetModule], exports: [ProductConfiguratorComponent] });
17632
18295
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, imports: [CommonModule,
17633
18296
  MatIconModule,
17634
18297
  MatButtonModule,
@@ -17641,7 +18304,8 @@ class ProductConfiguratorModule {
17641
18304
  PipesModule,
17642
18305
  IconModule,
17643
18306
  TooltipDirectiveModule,
17644
- ProductConfiguratorSelectorModule] });
18307
+ ProductConfiguratorSelectorModule,
18308
+ ConfigurationPresetModule] });
17645
18309
  }
17646
18310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorModule, decorators: [{
17647
18311
  type: NgModule,
@@ -17659,7 +18323,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17659
18323
  PipesModule,
17660
18324
  IconModule,
17661
18325
  TooltipDirectiveModule,
17662
- ProductConfiguratorSelectorModule
18326
+ ProductConfiguratorSelectorModule,
18327
+ ConfigurationPresetModule
17663
18328
  ],
17664
18329
  schemas: [
17665
18330
  NO_ERRORS_SCHEMA
@@ -17673,14 +18338,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17673
18338
  }]
17674
18339
  }] });
17675
18340
 
18341
+ class ConfigurationPresetDialogModule {
18342
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18343
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, declarations: [ConfigurationPresetDialogComponent], imports: [PipesModule,
18344
+ ButtonModule,
18345
+ IconModule,
18346
+ InputTextModule,
18347
+ CdkCopyToClipboard], exports: [ConfigurationPresetDialogComponent] });
18348
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, imports: [PipesModule,
18349
+ ButtonModule,
18350
+ IconModule,
18351
+ InputTextModule] });
18352
+ }
18353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfigurationPresetDialogModule, decorators: [{
18354
+ type: NgModule,
18355
+ args: [{
18356
+ imports: [
18357
+ PipesModule,
18358
+ ButtonModule,
18359
+ IconModule,
18360
+ InputTextModule,
18361
+ CdkCopyToClipboard
18362
+ ],
18363
+ declarations: [
18364
+ ConfigurationPresetDialogComponent
18365
+ ],
18366
+ exports: [
18367
+ ConfigurationPresetDialogComponent
18368
+ ]
18369
+ }]
18370
+ }] });
18371
+
17676
18372
  class ThreedselectorModule {
17677
18373
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17678
18374
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, declarations: [ThreedselectorComponent], imports: [LiteSelectorModule,
17679
18375
  ProductConfiguratorModule,
17680
- CommonModule], exports: [ThreedselectorComponent] });
18376
+ CommonModule,
18377
+ ConfigurationPresetDialogModule], exports: [ThreedselectorComponent] });
17681
18378
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, imports: [LiteSelectorModule,
17682
18379
  ProductConfiguratorModule,
17683
- CommonModule] });
18380
+ CommonModule,
18381
+ ConfigurationPresetDialogModule] });
17684
18382
  }
17685
18383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ThreedselectorModule, decorators: [{
17686
18384
  type: NgModule,
@@ -17688,7 +18386,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
17688
18386
  imports: [
17689
18387
  LiteSelectorModule,
17690
18388
  ProductConfiguratorModule,
17691
- CommonModule
18389
+ CommonModule,
18390
+ ConfigurationPresetDialogModule
17692
18391
  ],
17693
18392
  declarations: [
17694
18393
  ThreedselectorComponent