@colijnit/product 261.20.0 → 261.20.2

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.
@@ -16,12 +16,14 @@ import { ImageContent } from '@colijnit/mainapi/build/model/image-content.bo';
16
16
  import { StringUtils } from '@colijnit/ioneconnector/build/utils/string-utils';
17
17
  import { trigger, state, transition, style, animate } from '@angular/animations';
18
18
  import * as i1 from '@angular/platform-browser';
19
+ import * as i5 from '@angular/common';
20
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
19
21
  import * as i6 from '@colijnit/corecomponents_v12';
20
22
  import { IconModule, LoaderModule, ScrollContainerModule, InputNumberPickerModule, ButtonModule, ArticleTileModule, TileModule, IconCollapseHandleModule } from '@colijnit/corecomponents_v12';
21
23
  import { CoDocument } from '@colijnit/mainapi/build/model/co-document.bo';
24
+ import * as i6$1 from '@angular/cdk/overlay';
25
+ import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
22
26
  import { ConfiguratorStatisticsEnvironment } from '@colijnit/articleapi/build/model/configurator-statistics-environment';
23
- import * as i5 from '@angular/common';
24
- import { CommonModule, isPlatformBrowser } from '@angular/common';
25
27
  import * as i3 from '@colijnit/sharedcomponents';
26
28
  import { FilesUploadModule } from '@colijnit/sharedcomponents';
27
29
 
@@ -30,8 +32,8 @@ class Version {
30
32
  constructor() {
31
33
  this.name = "@colijnit/product";
32
34
  this.description = "Product detail page project for iOne";
33
- this.symVer = "261.20.0";
34
- this.publishDate = "23-1-2026, 15:54:32";
35
+ this.symVer = "261.20.2";
36
+ this.publishDate = "24-3-2026, 15:30:44";
35
37
  }
36
38
  }
37
39
 
@@ -45,6 +47,7 @@ class SettingsOptions {
45
47
  this.showArButton = false;
46
48
  this.arEnabled = false;
47
49
  this.vrEnabled = false;
50
+ this.showSaveAsPresetButton = false;
48
51
  }
49
52
  }
50
53
 
@@ -247,6 +250,15 @@ class ProductConnectorAdapterService {
247
250
  return this._boFactory.makeWithRawBackendData(ImageContent, response.resultObject);
248
251
  }
249
252
  }
253
+ async savePreset() {
254
+ const response = await this.articleConnector.storePreset();
255
+ if (response && response.validationResult && response.validationResult.success) {
256
+ return Promise.resolve(true);
257
+ }
258
+ else {
259
+ return Promise.resolve(false);
260
+ }
261
+ }
250
262
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductConnectorAdapterService, deps: [{ token: ProductEventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
251
263
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductConnectorAdapterService }); }
252
264
  }
@@ -322,6 +334,9 @@ class Dictionary {
322
334
  "VARIANTS": "Variations",
323
335
  "WIDTH": "Width",
324
336
  "SUGGESTION": "Suggestion",
337
+ "PRESET_SAVE_AS": "Save as preset",
338
+ "PRESET_OVERWRITE_TEXT": "This article already has a preset. Do you want to overwrite it?",
339
+ "PRESET_SAVED_TEXT": "Preset saved"
325
340
  },
326
341
  "nl": {
327
342
  "ADDITIONAL_DATA": "Extra informatie",
@@ -354,6 +369,9 @@ class Dictionary {
354
369
  "VARIANTS": "Varianten",
355
370
  "WIDTH": "Breedte",
356
371
  "SUGGESTION": "Suggesties bij",
372
+ "PRESET_SAVE_AS": "Opslaan als preset",
373
+ "PRESET_OVERWRITE_TEXT": "Dit artikel heeft al een preset, wilt u deze overschrijven?",
374
+ "PRESET_SAVED_TEXT": "Preset opgeslagen"
357
375
  },
358
376
  "de": {
359
377
  "ADDITIONAL_DATA": "Extra informatie",
@@ -625,6 +643,9 @@ class ProductConnectorService {
625
643
  async getImageForCoDocument(document, thumb = false) {
626
644
  return this._adapterService.getImageForCoDocument(document, thumb);
627
645
  }
646
+ async savePreset() {
647
+ return await this._adapterService.savePreset();
648
+ }
628
649
  onShowLoaderChange(showLoader) {
629
650
  this._shouldShowLoader = showLoader;
630
651
  }
@@ -703,6 +724,7 @@ var IconEnum;
703
724
  IconEnum["NormalScreen"] = "normal_screen";
704
725
  IconEnum["Quote"] = "quote";
705
726
  IconEnum["Refresh"] = "refresh";
727
+ IconEnum["SaveDisk"] = "save_disk";
706
728
  IconEnum["SaveSkinny"] = "save_skinny";
707
729
  IconEnum["ThreeD"] = "three_d";
708
730
  IconEnum["Truck"] = "truck";
@@ -710,6 +732,13 @@ var IconEnum;
710
732
  IconEnum["Warehouse"] = "warehouse";
711
733
  })(IconEnum || (IconEnum = {}));
712
734
 
735
+ var PresetDialogType;
736
+ (function (PresetDialogType) {
737
+ PresetDialogType[PresetDialogType["info"] = 0] = "info";
738
+ PresetDialogType[PresetDialogType["warning"] = 1] = "warning";
739
+ PresetDialogType[PresetDialogType["success"] = 2] = "success";
740
+ })(PresetDialogType || (PresetDialogType = {}));
741
+
713
742
  /** AUTO GENERATED FILE. DO NOT CHANGE.. **/
714
743
  const IconSvg = {
715
744
  "add_to_cart_drop": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M16.58,34.84a1.8,1.8,0,1,0,1.8,1.8A1.79,1.79,0,0,0,16.58,34.84Z\" fill=\"#484f60\"/><path d=\"M31.49,34.84a1.8,1.8,0,1,0,1.8,1.8A1.79,1.79,0,0,0,31.49,34.84Z\" fill=\"#484f60\"/><path d=\"M35.6,17.9l-1.51.18L31.88,20.3l1.31-.17a.88.88,0,0,1,1,1.08L32.35,29.5a1.52,1.52,0,0,1-1.44,1.2H16.51a1.75,1.75,0,0,1-1.57-1.17l-2.31-5.6a1,1,0,0,1,.85-1.29l4.43-.56-1.86-1.86-5.13.61a1,1,0,0,0-.87,1.28l3.34,9.44A1.73,1.73,0,0,0,15,32.72H32.64a1.51,1.51,0,0,0,1.43-1.2L36.6,19A.89.89,0,0,0,35.6,17.9Z\" fill=\"#484f60\"/><path d=\"M39,17a1.87,1.87,0,0,0-1.36,1.46l-.42,2.89c-.1.67.31,1,.9.7a2.75,2.75,0,0,0,1.33-1.7L40,18A.73.73,0,0,0,39,17Z\" fill=\"#484f60\"/><polygon points=\"24 25.35 32.04 17.3 27.04 17.3 27.04 10 20.95 10 20.95 17.3 15.96 17.3 24 25.35\" fill=\"#484f60\"/></svg>",
@@ -726,6 +755,7 @@ const IconSvg = {
726
755
  "normal_screen": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M38,38.17H12v-26H38ZM13.24,36.93H36.76V13.4H13.24Z\" fill=\"#484f60\"/><polygon points=\"22.18 29.83 24.29 31.93 24.29 25.87 18.23 25.87 20.34 27.98 16.43 31.89 18.28 33.73 22.18 29.83\" fill=\"#484f60\"/><polygon points=\"33.57 18.44 31.73 16.6 27.82 20.51 25.71 18.4 25.71 24.46 31.77 24.46 29.66 22.35 33.57 18.44\" fill=\"#484f60\"/></svg>",
727
756
  "quote": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M14.5,31.51V12a.5.5,0,0,1,.5-.5H35a.5.5,0,0,1,.5.5V38a.5.5,0,0,1-.5.5H21.27V40H35a2,2,0,0,0,2-2V12a2,2,0,0,0-2-2H15a2,2,0,0,0-2,2V31.51Z\" fill=\"#484f60\"/><path d=\"M21.27,40V33.56c0-1.78-.27-2.05-2.05-2.05H13Z\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"18.5\" width=\"6\" height=\"4\" fill=\"#484f60\"/><rect x=\"25.5\" y=\"21.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"25.5\" y=\"18.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"26.5\" y=\"25.5\" width=\"6\" height=\"4\" transform=\"translate(59 55) rotate(-180)\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"28.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"25.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"14.5\" width=\"6\" height=\"1\" fill=\"#484f60\"/><rect x=\"26.5\" y=\"34.5\" width=\"6\" height=\"1\" fill=\"#484f60\"/></svg>",
728
757
  "refresh": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"refresh.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"9.44\" inkscape:cx=\"13.990693\" inkscape:cy=\"13.961336\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg6\" /><g transform=\"matrix(0.05356365,0,0,0.05356365,11.44076,11.82465)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 414.32892,173.53368 397.86852,58.29997 c -1.3534,-9.447409 -12.96516,-13.373353 -19.75699,-6.581524 l -23.97472,23.97472 C 323.3074,57.095569 288.30682,47.308258 252.3168,47.308258 c -108.23157,0 -195.126154,84.711612 -197.8314,192.852392 -0.147446,5.91103 4.149441,10.98085 9.992183,11.82206 l 46.516107,6.64982 c 6.93462,1.01194 13.38577,-4.43269 13.28954,-11.68548 -0.9646,-71.37163 56.68057,-129.79595 128.03357,-129.79595 17.27835,0 34.3526,3.51232 50.13165,10.23043 l -23.11022,23.11022 c -6.74915,6.74915 -2.91866,18.3966 6.58152,19.75699 l 115.23371,16.4604 c 7.59269,1.14465 14.26423,-5.4586 13.17546,-13.17546 z\" style=\"fill:#484f60;fill-opacity:1;stroke-width:0.77603161\" /></g></g><path inkscape:connector-curvature=\"0\" d=\"m 35.105827,24.725982 -2.489742,-0.355606 c -0.321647,-0.04073 -0.711797,0.234897 -0.711797,0.671018 0,3.781814 -3.076753,6.858567 -6.858567,6.858567 -0.920628,0 -1.830946,-0.186303 -2.673013,-0.542533 l 1.198298,-1.198297 c 0.361507,-0.361507 0.156331,-0.985389 -0.352533,-1.058254 l -6.172336,-0.882302 c -0.405403,-0.05792 -0.764422,0.289765 -0.705726,0.705725 l 0.881637,6.172381 c 0.07258,0.506577 0.694003,0.71545 1.058254,0.352527 l 1.315225,-1.314599 c 1.643397,0.987012 3.516951,1.506391 5.450194,1.506391 5.769264,0 10.423029,-4.514936 10.595325,-10.27871 0.0091,-0.317237 -0.221012,-0.591248 -0.535219,-0.636308 z\" style=\"fill:#484f60;fill-opacity:1;stroke-width:0.04156709\" /></svg>",
758
+ "save_disk": "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"-288 379 35 35\" enable-background=\"new -288 379 35 35\" ><g opacity=\"0.95\"><path fill=\"#29363E\" d=\"M-259.5,384.4h-2.1v6.8c0,0.4-0.3,0.7-0.7,0.7h-16.6c-0.4,0-0.7-0.3-0.7-0.7v-6.8h-2c-0.6,0-1.1,0.5-1.1,1.1v22.4c0,0.6,0.5,1.1,1.1,1.1h2v-14c0-0.4,0.3-0.7,0.7-0.7h16.7c0.4,0,0.7,0.3,0.7,0.7v14h2c0.6,0,1.1-0.5,1.1-1.1v-22.4C-258.4,384.9-258.9,384.4-259.5,384.4z M-280.1,406.6h-1.7V405h1.7V406.6z M-259.2,406.6h-1.7V405h1.7V406.6z\"/><rect x=\"-278.4\" y=\"395.4\" fill=\"#29363E\" width=\"15.8\" height=\"13.5\"/><path fill=\"#29363E\" d=\"M-263.4,384h-12c-0.1,0-0.3,0.1-0.3,0.3v6.5c0,0.1,0.1,0.3,0.3,0.3h12c0.1,0,0.2-0.1,0.2-0.3v-6.5C-263.1,384.1-263.2,384-263.4,384z M-265.6,390c0,0.1-0.1,0.3-0.3,0.3h-2.4c-0.1,0-0.2-0.1-0.2-0.3v-4.8c0-0.1,0.1-0.3,0.2-0.3h2.4c0.1,0,0.3,0.1,0.3,0.3V390z\"/></g></svg>",
729
759
  "save_skinny": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 51 51\"><polygon points=\"23.8 38.1 14.9 25.6 15.7 25 23.6 36.2 35.2 12.9 36.1 13.4 23.8 38.1\" fill=\"#fff\"/></svg>",
730
760
  "three_d": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M16.08,30.77a4.85,4.85,0,0,1-3-.8,4,4,0,0,0-2.49-.15,6.21,6.21,0,0,0,2.53,1.09,12.84,12.84,0,0,0,2.93-.14\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M14.27,19.68A4.71,4.71,0,0,0,11,20.78l2,.14c.31,0,1.2-.69,1.55-.81a3.88,3.88,0,0,1,1.65-.24l-1.94-.19\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M21.64,28.79a4.13,4.13,0,0,0-3.1-4c.89-.7,1.77-1.09,2.26-2.21a5.12,5.12,0,0,0,.35-1.9c-.13-3.24-2.64-3.73-5.29-4.15a4,4,0,0,1,3.44,3.7,4.61,4.61,0,0,1-.83,3.12,9.7,9.7,0,0,1-1.82,1.43,4.3,4.3,0,0,1,3.17,4.34,4.9,4.9,0,0,1-4.21,5c2.09-.34,4.37-.64,5.46-2.69a5,5,0,0,0,.57-2.58\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M28.44,18.88l.38-.07.48-.06.57,0h.75l.36,0,.35.05c-.2,0-.42-.08-1.57-.25l-.36-.05-.37,0h-.77l-.59,0-.49.07a3.08,3.08,0,0,0-.39.07l-.3.07V31.38H27l.13,0h1.63l.21,0h.2l.2,0h.05l1.55-.24h0l-.34.05-.33,0H29.12l-.36,0-.33,0a1.15,1.15,0,0,1-.28-.06V19Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M40,24.34a9,9,0,0,0-3-7.1,11.06,11.06,0,0,0-4.47-1.86c4.38,1.13,6.23,5.31,6.13,9.54-.12,4.5-2.27,8.55-6.86,9.66,2.59-.63,5-1.41,6.52-3.78A12,12,0,0,0,40,24.34\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M35.38,16.71A7.32,7.32,0,0,1,36.74,18a7.82,7.82,0,0,1,1,1.73,10.32,10.32,0,0,1,.68,2.16,13.86,13.86,0,0,1,.23,2.59,15,15,0,0,1-.25,2.78,11.39,11.39,0,0,1-.68,2.31,9.34,9.34,0,0,1-1,1.85,8.23,8.23,0,0,1-1.28,1.4,7.76,7.76,0,0,1-1.7,1.07,9.07,9.07,0,0,1-2,.69,13.36,13.36,0,0,1-2.26.33,18.25,18.25,0,0,1-2.45,0c-.5,0-1-.08-1.39-.12l-1.17-.14c-.36,0-.68-.11-1-.16l-.77-.15V15.86c.34-.09.71-.18,1.09-.26s.81-.15,1.24-.21.88-.12,1.34-.17.95-.1,1.44-.13a20.57,20.57,0,0,1,2.33,0,12,12,0,0,1,2,.24,8.24,8.24,0,0,1,1.72.55A7.1,7.1,0,0,1,35.38,16.71ZM27.92,31.53a6.53,6.53,0,0,0,2.46-.32A4.81,4.81,0,0,0,32.32,30a5.82,5.82,0,0,0,1.27-2.18A10.11,10.11,0,0,0,34,24.67a8.65,8.65,0,0,0-.42-2.85,4.94,4.94,0,0,0-1.18-2,4.45,4.45,0,0,0-1.83-1.11,6.55,6.55,0,0,0-2.35-.28l-.59,0-.49.07a3.08,3.08,0,0,0-.39.07l-.3.07V31.38a2.11,2.11,0,0,0,.29.06l.34,0,.37,0,.36,0h.07\" fill=\"#484f60\"/><path d=\"M14.57,16.47a5.49,5.49,0,0,1,2,.22,3.89,3.89,0,0,1,1.49.84A3.66,3.66,0,0,1,19,18.89a4.29,4.29,0,0,1,.33,1.7,5.29,5.29,0,0,1-.17,1.34,4.29,4.29,0,0,1-.5,1.16,4.17,4.17,0,0,1-.84.94,4.88,4.88,0,0,1-1.16.69v.05a3.7,3.7,0,0,1,1.22.5,4,4,0,0,1,1,.92,4.61,4.61,0,0,1,.69,1.3,5.24,5.24,0,0,1,.25,1.62,5.36,5.36,0,0,1-.42,2.15,4.44,4.44,0,0,1-1.2,1.64,4.84,4.84,0,0,1-1.86,1,6.78,6.78,0,0,1-2.39.23,7.69,7.69,0,0,1-2.36-.52,6.89,6.89,0,0,1-.9-.42,4.36,4.36,0,0,1-.69-.47l.62-2.9a4.12,4.12,0,0,0,.53.34,6.21,6.21,0,0,0,.73.36,5.69,5.69,0,0,0,.88.31,5.19,5.19,0,0,0,1,.15,3.11,3.11,0,0,0,1.1-.13,2,2,0,0,0,.8-.45,1.93,1.93,0,0,0,.49-.71,2.35,2.35,0,0,0,.17-.89A2.48,2.48,0,0,0,16,27.67a2.23,2.23,0,0,0-.63-.79,2.9,2.9,0,0,0-.89-.46,3.5,3.5,0,0,0-1-.15H12.2V23.44l1.23,0a3.44,3.44,0,0,0,.83-.11,2.83,2.83,0,0,0,.79-.36,2,2,0,0,0,.6-.62,2,2,0,0,0,.23-.94,1.8,1.8,0,0,0-.13-.71,1.36,1.36,0,0,0-.38-.56,1.58,1.58,0,0,0-.64-.35,2.79,2.79,0,0,0-.9-.1,4.07,4.07,0,0,0-.84.13c-.27.08-.53.18-.78.28a6.56,6.56,0,0,0-1.17.7L10.42,18a5,5,0,0,1,.72-.51,7.82,7.82,0,0,1,2.12-.82A8,8,0,0,1,14.57,16.47Z\" fill=\"#484f60\"/></svg>",
731
761
  "truck": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"truck.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"9.44\" inkscape:cx=\"31.555563\" inkscape:cy=\"21.585628\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg8\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 119.467,337.067 c -28.237,0 -51.2,22.963 -51.2,51.2 0,28.237 22.963,51.2 51.2,51.2 28.237,0 51.2,-22.963 51.2,-51.2 0,-28.237 -22.964,-51.2 -51.2,-51.2 z m 0,85.333 c -18.825,0 -34.133,-15.309 -34.133,-34.133 0,-18.825 15.309,-34.133 34.133,-34.133 18.824,0 34.133,15.309 34.133,34.133 0,18.824 -15.309,34.133 -34.133,34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 409.6,337.067 c -28.237,0 -51.2,22.963 -51.2,51.2 0,28.237 22.963,51.2 51.2,51.2 28.237,0 51.2,-22.963 51.2,-51.2 0,-28.237 -22.963,-51.2 -51.2,-51.2 z m 0,85.333 c -18.825,0 -34.133,-15.309 -34.133,-34.133 0,-18.825 15.309,-34.133 34.133,-34.133 18.825,0 34.133,15.309 34.133,34.133 0,18.824 -15.308,34.133 -34.133,34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 510.643,289.784 -76.8,-119.467 c -1.57,-2.441 -4.275,-3.917 -7.177,-3.917 H 332.8 c -4.719,0 -8.533,3.823 -8.533,8.533 v 213.333 c 0,4.719 3.814,8.533 8.533,8.533 h 34.133 v -17.067 h -25.6 V 183.467 h 80.674 l 72.926,113.442 v 82.825 H 452.266 V 396.8 h 51.2 c 4.719,0 8.533,-3.814 8.533,-8.533 V 294.4 c 10e-4,-1.63 -0.468,-3.243 -1.356,-4.616 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 375.467,277.333 V 217.6 h 68.267 v -17.067 h -76.8 c -4.719,0 -8.533,3.823 -8.533,8.533 v 76.8 c 0,4.719 3.814,8.533 8.533,8.533 h 128 V 277.332 H 375.467 Z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 332.8,106.667 H 8.533 C 3.823,106.667 0,110.49 0,115.2 v 273.067 c 0,4.719 3.823,8.533 8.533,8.533 H 76.8 V 379.733 H 17.067 v -256 h 307.2 v 256 H 162.133 V 396.8 H 332.8 c 4.719,0 8.533,-3.814 8.533,-8.533 V 115.2 c 0,-4.71 -3.814,-8.533 -8.533,-8.533 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"8.533\" y=\"345.60001\" width=\"51.200001\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"179.2\" y=\"345.60001\" width=\"145.067\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"469.33301\" y=\"345.60001\" width=\"34.132999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"34.132999\" y=\"140.8\" width=\"298.66699\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"110.933\" y=\"379.733\" width=\"17.066999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"401.06699\" y=\"379.733\" width=\"17.066999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /></svg>",
@@ -929,11 +959,13 @@ class ImageCarouselComponent {
929
959
  this._currentIndex = value;
930
960
  this._scrollCarouselToIndex();
931
961
  }
932
- constructor(_ione, _appEventService, _changeDetector, _domSanitizer) {
962
+ constructor(iconCacheService, _ione, _appEventService, _changeDetector, _domSanitizer) {
963
+ this.iconCacheService = iconCacheService;
933
964
  this._ione = _ione;
934
965
  this._appEventService = _appEventService;
935
966
  this._changeDetector = _changeDetector;
936
967
  this._domSanitizer = _domSanitizer;
968
+ this.icons = IconEnum;
937
969
  this.isPopupOpen = false;
938
970
  this.showRefresh = false;
939
971
  this.resizing = false;
@@ -1031,51 +1063,63 @@ class ImageCarouselComponent {
1031
1063
  const ctx = resizeCanvas.getContext('2d');
1032
1064
  const img = document.createElement('img');
1033
1065
  img.crossOrigin = 'anonymous';
1066
+ const handleFallback = () => {
1067
+ // When a CDN does not accept our tainted canvas, we fallback to the original source.
1068
+ imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(source);
1069
+ imageViewModel.originalSource = source;
1070
+ this._changeDetector.detectChanges();
1071
+ };
1072
+ img.onerror = () => {
1073
+ handleFallback();
1074
+ };
1034
1075
  img.onload = () => {
1035
- ctx.imageSmoothingEnabled = true;
1036
- ctx.imageSmoothingQuality = 'high';
1037
- const ow = img.width;
1038
- const oh = img.height;
1039
- const aspect = ow / oh;
1040
- let newW = this._resizeCanvasHeight;
1041
- let newH = this._resizeCanvasHeight;
1042
- if (ow > oh) {
1043
- newH = this._resizeCanvasHeight / aspect;
1076
+ try {
1077
+ ctx.imageSmoothingEnabled = true;
1078
+ ctx.imageSmoothingQuality = 'high';
1079
+ const aspect = img.width / img.height;
1080
+ let newW = this._resizeCanvasHeight;
1081
+ let newH = this._resizeCanvasHeight;
1082
+ if (img.width > img.height) {
1083
+ newH = this._resizeCanvasHeight / aspect;
1084
+ }
1085
+ else {
1086
+ newW = this._resizeCanvasHeight * aspect;
1087
+ }
1088
+ resizeCanvas.width = Math.round(newW);
1089
+ resizeCanvas.height = Math.round(newH);
1090
+ ctx.clearRect(0, 0, resizeCanvas.width, resizeCanvas.height);
1091
+ ctx.drawImage(img, 0, 0, resizeCanvas.width, resizeCanvas.height);
1092
+ const mime = this._handleMimeTypes(source);
1093
+ const resizedSource = resizeCanvas.toDataURL(mime);
1094
+ imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
1095
+ imageViewModel.originalSource = source;
1096
+ this._changeDetector.detectChanges();
1044
1097
  }
1045
- else {
1046
- newW = this._resizeCanvasHeight * aspect;
1098
+ catch (error) {
1099
+ handleFallback();
1047
1100
  }
1048
- resizeCanvas.width = Math.round(newW);
1049
- resizeCanvas.height = Math.round(newH);
1050
- // Ensure transparent background before drawing
1051
- ctx.clearRect(0, 0, resizeCanvas.width, resizeCanvas.height);
1052
- ctx.drawImage(img, 0, 0, resizeCanvas.width, resizeCanvas.height);
1053
- const mime = this._detectPreferredMime(source);
1054
- const resizedSource = mime === 'image/jpeg'
1055
- ? resizeCanvas.toDataURL('image/jpeg', 0.92) // only if original was JPEG
1056
- : resizeCanvas.toDataURL(mime); // PNG/WebP keep alpha
1057
- imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
1058
- imageViewModel.originalSource = source;
1059
- this._changeDetector.detectChanges();
1060
1101
  };
1061
1102
  img.src = source;
1062
1103
  }
1063
- _detectPreferredMime(source) {
1064
- // Data URI check
1065
- const m = source.match(/^data:(image\/[a-zA-Z+.-]+);base64,/);
1066
- if (m) {
1067
- const t = m[1].toLowerCase();
1068
- if (t === 'image/png' || t === 'image/webp' || t === 'image/jpeg')
1069
- return t;
1104
+ _handleMimeTypes(imageSource) {
1105
+ // When we got base64 data
1106
+ if (imageSource.startsWith('data:')) {
1107
+ const match = imageSource.match(/^data:(image\/(png|webp|jpeg|jpg))/i);
1108
+ return match ? match[1].toLowerCase() : 'image/png';
1109
+ }
1110
+ // when we got an URL.
1111
+ const extension = imageSource.substring(imageSource.lastIndexOf('.') + 1).toLowerCase();
1112
+ switch (extension) {
1113
+ case 'png':
1114
+ return 'image/png';
1115
+ case 'webp':
1116
+ return 'image/webp';
1117
+ case 'jpg':
1118
+ case 'jpeg':
1119
+ return 'image/jpeg';
1120
+ default:
1121
+ return 'image/png';
1070
1122
  }
1071
- const lower = source.toLowerCase();
1072
- if (lower.endsWith('.png'))
1073
- return 'image/png';
1074
- if (lower.endsWith('.webp'))
1075
- return 'image/webp';
1076
- if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
1077
- return 'image/jpeg';
1078
- return 'image/png';
1079
1123
  }
1080
1124
  _scrollCarouselToIndex() {
1081
1125
  if (this.currentIndex > -1 && this.currentIndex <= this.images.length) {
@@ -1089,147 +1133,137 @@ class ImageCarouselComponent {
1089
1133
  }
1090
1134
  }
1091
1135
  }
1092
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselComponent, deps: [{ token: ProductConnectorService }, { token: ProductEventService }, { token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselComponent, deps: [{ token: IconCacheService }, { token: ProductConnectorService }, { token: ProductEventService }, { token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
1093
1137
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ImageCarouselComponent, isStandalone: false, selector: "app-image-carousel", inputs: { showRefresh: "showRefresh", images: "images" }, host: { listeners: { "document:keydown.escape": "onEsc()", "window:resize": "handleWindowResize()", "swipeleft": "gotoNextSlide()", "swiperight": "gotoPrevSlide()" }, properties: { "class.resizing": "this.resizing" } }, viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true, read: ElementRef }], ngImport: i0, template: `
1094
- <div id="product_page_carousel">
1095
- <div id="product_page_carousel_items">
1096
- @if (showLoader) {
1097
- <co-loader></co-loader>
1138
+ <div id="product_page_carousel">
1139
+ <div id="product_page_carousel_items">
1140
+ @if (showLoader) {
1141
+ <co-loader></co-loader>
1142
+ }
1143
+ <div #carousel class="inner-carousel">
1144
+ <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1145
+ @if (imageViewModels[0]) {
1146
+ <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1147
+ <img [src]="imageViewModels[0].source">
1148
+ </div>
1149
+ }
1150
+ @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1151
+ <div class="carousel-item"
1152
+ [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1153
+ <img [src]="imageViewModel.source">
1154
+ </div>
1098
1155
  }
1099
- <div #carousel class="inner-carousel">
1100
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1101
- @if (imageViewModels[0]) {
1102
- <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1103
- <img [src]="imageViewModels[0].source">
1104
- </div>
1105
- }
1106
- @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1107
- <div class="carousel-item"
1108
- [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1109
- <img [src]="imageViewModel.source">
1110
- </div>
1111
- }
1112
- @if (imageViewModels && imageViewModels.length > 1) {
1113
- <div class="carousel-scroller-layer">
1114
- @if (currentIndex > 0) {
1115
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1116
- }
1117
- @if (currentIndex < images.length - 1) {
1118
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1119
- }
1120
- </div>
1121
- }
1122
- </div>
1123
- </div>
1124
-
1125
- <div id="product_page_carousel_thumbs">
1126
1156
  @if (imageViewModels && imageViewModels.length > 1) {
1127
- <co-scroll-container class="scroll-container">
1128
- @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1129
- <div class="carousel-thumb"
1130
- [class.active]="index === currentIndex">
1131
- <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1132
- </div>
1157
+ <div class="carousel-scroller-layer">
1158
+ @if (currentIndex > 0) {
1159
+ <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1133
1160
  }
1134
- </co-scroll-container>
1161
+ @if (currentIndex < images.length - 1) {
1162
+ <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1163
+ }
1164
+ </div>
1135
1165
  }
1136
1166
  </div>
1137
1167
  </div>
1138
- <!-- Modal (real popup) -->
1139
- @if (isPopupOpen) {
1140
- <div
1141
- class="image-modal"
1142
- (click)="closePopup()"
1143
- role="dialog"
1144
- aria-modal="true"
1145
- aria-label="Image preview"
1146
- >
1147
- <div class="image-modal__content" (click)="$event.stopPropagation()">
1148
- <button
1149
- class="image-modal__close"
1150
- type="button"
1151
- aria-label="Close"
1152
- (click)="closePopup()"
1153
- >
1154
- ×
1155
- </button>
1156
- <img [src]="selectedImage?.originalSource" alt="Image preview" />
1157
- </div>
1168
+
1169
+ <div id="product_page_carousel_thumbs">
1170
+ @if (imageViewModels && imageViewModels.length > 1) {
1171
+ <co-scroll-container class="scroll-container">
1172
+ @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1173
+ <div class="carousel-thumb"
1174
+ [class.active]="index === currentIndex">
1175
+ <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1176
+ </div>
1177
+ }
1178
+ </co-scroll-container>
1179
+ }
1180
+ </div>
1181
+ </div>
1182
+
1183
+ <div cdkOverlayOrigin #trigger="cdkOverlayOrigin"></div>
1184
+ <ng-template
1185
+ cdkConnectedOverlay
1186
+ [cdkConnectedOverlayOrigin]="trigger"
1187
+ [cdkConnectedOverlayOpen]="isPopupOpen"
1188
+ [cdkConnectedOverlayHasBackdrop]="true"
1189
+ (backdropClick)="closePopup()">
1190
+ <div class="image-modal" role="dialog" aria-modal="true" aria-label="Image preview">
1191
+ <div class="image-modal__content">
1192
+ <button class="image-modal__close" type="button" aria-label="Close" (click)="closePopup()">
1193
+ <co-icon [iconData]="iconCacheService.getIcon(icons.CrossSkinny)"></co-icon>
1194
+ </button>
1195
+ <img [src]="selectedImage?.originalSource" alt="Image preview"/>
1158
1196
  </div>
1159
- }
1160
- `, isInline: true, styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74b77f;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}.image-modal{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.image-modal__content{position:relative;max-width:90vw;max-height:90vh}.image-modal__content img{max-width:90vw;max-height:90vh;object-fit:contain;display:block}.image-modal__close{position:fixed;top:15px;right:30px;background:transparent;border:none;color:#fff;font-size:60px;line-height:1;cursor:pointer}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "component", type: i6.LoaderComponent, selector: "co-loader" }, { kind: "component", type: i6.ScrollContainerComponent, selector: "co-scroll-container", inputs: ["vertical"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1197
+ </div>
1198
+ </ng-template>
1199
+ `, isInline: true, styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74b77f;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}.image-modal{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.image-modal__content{position:relative;max-width:90vw;max-height:90vh}.image-modal__content img{max-width:90vw;max-height:90vh;object-fit:contain;display:block}.image-modal__close{position:fixed;top:15px;right:30px;background:transparent;border:none;color:#fff;font-size:60px;line-height:1;cursor:pointer}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "component", type: i6.LoaderComponent, selector: "co-loader" }, { kind: "component", type: i6.ScrollContainerComponent, selector: "co-scroll-container", inputs: ["vertical"] }, { kind: "directive", type: i6$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1161
1200
  }
1162
1201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselComponent, decorators: [{
1163
1202
  type: Component,
1164
1203
  args: [{ selector: 'app-image-carousel', template: `
1165
- <div id="product_page_carousel">
1166
- <div id="product_page_carousel_items">
1167
- @if (showLoader) {
1168
- <co-loader></co-loader>
1204
+ <div id="product_page_carousel">
1205
+ <div id="product_page_carousel_items">
1206
+ @if (showLoader) {
1207
+ <co-loader></co-loader>
1208
+ }
1209
+ <div #carousel class="inner-carousel">
1210
+ <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1211
+ @if (imageViewModels[0]) {
1212
+ <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1213
+ <img [src]="imageViewModels[0].source">
1214
+ </div>
1215
+ }
1216
+ @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1217
+ <div class="carousel-item"
1218
+ [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1219
+ <img [src]="imageViewModel.source">
1220
+ </div>
1169
1221
  }
1170
- <div #carousel class="inner-carousel">
1171
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1172
- @if (imageViewModels[0]) {
1173
- <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1174
- <img [src]="imageViewModels[0].source">
1175
- </div>
1176
- }
1177
- @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1178
- <div class="carousel-item"
1179
- [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1180
- <img [src]="imageViewModel.source">
1181
- </div>
1182
- }
1183
- @if (imageViewModels && imageViewModels.length > 1) {
1184
- <div class="carousel-scroller-layer">
1185
- @if (currentIndex > 0) {
1186
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1187
- }
1188
- @if (currentIndex < images.length - 1) {
1189
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1190
- }
1191
- </div>
1192
- }
1193
- </div>
1194
- </div>
1195
-
1196
- <div id="product_page_carousel_thumbs">
1197
1222
  @if (imageViewModels && imageViewModels.length > 1) {
1198
- <co-scroll-container class="scroll-container">
1199
- @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1200
- <div class="carousel-thumb"
1201
- [class.active]="index === currentIndex">
1202
- <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1203
- </div>
1223
+ <div class="carousel-scroller-layer">
1224
+ @if (currentIndex > 0) {
1225
+ <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1204
1226
  }
1205
- </co-scroll-container>
1227
+ @if (currentIndex < images.length - 1) {
1228
+ <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1229
+ }
1230
+ </div>
1206
1231
  }
1207
1232
  </div>
1208
1233
  </div>
1209
- <!-- Modal (real popup) -->
1210
- @if (isPopupOpen) {
1211
- <div
1212
- class="image-modal"
1213
- (click)="closePopup()"
1214
- role="dialog"
1215
- aria-modal="true"
1216
- aria-label="Image preview"
1217
- >
1218
- <div class="image-modal__content" (click)="$event.stopPropagation()">
1219
- <button
1220
- class="image-modal__close"
1221
- type="button"
1222
- aria-label="Close"
1223
- (click)="closePopup()"
1224
- >
1225
- ×
1226
- </button>
1227
- <img [src]="selectedImage?.originalSource" alt="Image preview" />
1228
- </div>
1234
+
1235
+ <div id="product_page_carousel_thumbs">
1236
+ @if (imageViewModels && imageViewModels.length > 1) {
1237
+ <co-scroll-container class="scroll-container">
1238
+ @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1239
+ <div class="carousel-thumb"
1240
+ [class.active]="index === currentIndex">
1241
+ <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1242
+ </div>
1243
+ }
1244
+ </co-scroll-container>
1245
+ }
1246
+ </div>
1247
+ </div>
1248
+
1249
+ <div cdkOverlayOrigin #trigger="cdkOverlayOrigin"></div>
1250
+ <ng-template
1251
+ cdkConnectedOverlay
1252
+ [cdkConnectedOverlayOrigin]="trigger"
1253
+ [cdkConnectedOverlayOpen]="isPopupOpen"
1254
+ [cdkConnectedOverlayHasBackdrop]="true"
1255
+ (backdropClick)="closePopup()">
1256
+ <div class="image-modal" role="dialog" aria-modal="true" aria-label="Image preview">
1257
+ <div class="image-modal__content">
1258
+ <button class="image-modal__close" type="button" aria-label="Close" (click)="closePopup()">
1259
+ <co-icon [iconData]="iconCacheService.getIcon(icons.CrossSkinny)"></co-icon>
1260
+ </button>
1261
+ <img [src]="selectedImage?.originalSource" alt="Image preview"/>
1229
1262
  </div>
1230
- }
1231
- `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74b77f;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}.image-modal{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.image-modal__content{position:relative;max-width:90vw;max-height:90vh}.image-modal__content img{max-width:90vw;max-height:90vh;object-fit:contain;display:block}.image-modal__close{position:fixed;top:15px;right:30px;background:transparent;border:none;color:#fff;font-size:60px;line-height:1;cursor:pointer}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
1232
- }], ctorParameters: () => [{ type: ProductConnectorService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { carousel: [{
1263
+ </div>
1264
+ </ng-template>
1265
+ `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74b77f;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}.image-modal{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.image-modal__content{position:relative;max-width:90vw;max-height:90vh}.image-modal__content img{max-width:90vw;max-height:90vh;object-fit:contain;display:block}.image-modal__close{position:fixed;top:15px;right:30px;background:transparent;border:none;color:#fff;font-size:60px;line-height:1;cursor:pointer}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
1266
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: ProductConnectorService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { carousel: [{
1233
1267
  type: ViewChild,
1234
1268
  args: ['carousel', { read: ElementRef }]
1235
1269
  }], onEsc: [{
@@ -1808,10 +1842,15 @@ class ProductRelatedComponent {
1808
1842
  async _loadImages() {
1809
1843
  this.articleViewModels.forEach(avm => {
1810
1844
  if (avm.article.image) {
1811
- this._iOne.getImageForCoDocument(avm.article.image, false).then(imageContent => avm.imageData = imageContent.image);
1845
+ this._iOne.getImageForCoDocument(avm.article.image, false).then(imageContent => this._handleImageData(avm, imageContent));
1812
1846
  }
1813
1847
  });
1814
1848
  }
1849
+ _handleImageData(avm, imageContent) {
1850
+ if (imageContent && imageContent.image) {
1851
+ avm.imageData = imageContent.image;
1852
+ }
1853
+ }
1815
1854
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductRelatedComponent, deps: [{ token: ProductConnectorService }, { token: ProductEventService }, { token: ProductConnectorAdapterService }, { token: ProductSettingsService }], target: i0.ɵɵFactoryTarget.Component }); }
1816
1855
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ProductRelatedComponent, isStandalone: false, selector: "app-product-related", inputs: { refType: "refType", label: "label", externalSource: "externalSource", isSmallModus: "isSmallModus", createFrozenArticle: "createFrozenArticle", articles: "articles" }, ngImport: i0, template: `
1817
1856
  @if (articles && articles.length > 0) {
@@ -2659,6 +2698,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2659
2698
  args: ['class.resizing']
2660
2699
  }] } });
2661
2700
 
2701
+ class PresetDialogComponent {
2702
+ showClass() {
2703
+ return true;
2704
+ }
2705
+ constructor(iconCache) {
2706
+ this.iconCache = iconCache;
2707
+ this.icon = IconEnum;
2708
+ this.presetId = undefined;
2709
+ this.cancelSavePreset = new EventEmitter();
2710
+ this.overwritePreset = new EventEmitter();
2711
+ this.PresetDialogType = PresetDialogType;
2712
+ }
2713
+ closeAndCancelPreset() {
2714
+ this.cancelSavePreset.emit(true);
2715
+ }
2716
+ closeAndOverwritePreset() {
2717
+ this.overwritePreset.emit(true);
2718
+ }
2719
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogComponent, deps: [{ token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
2720
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: PresetDialogComponent, isStandalone: false, selector: "co-preset-dialog", inputs: { type: "type", presetId: "presetId" }, outputs: { cancelSavePreset: "cancelSavePreset", overwritePreset: "overwritePreset" }, host: { properties: { "class.co-preset-dialog": "this.showClass" } }, ngImport: i0, template: `
2721
+ <div class="preset-dialog-wrap">
2722
+ <div class="preset-dialog-container">
2723
+ <div class="container-header">
2724
+ <div class="header-info">
2725
+ <h3 [textContent]="'PRESET_SAVE_AS' | localize"></h3>
2726
+ </div>
2727
+ <div class="close-icon" (click)="closeAndCancelPreset()">
2728
+ <co-icon class="fullscreen-button"
2729
+ [iconData]="iconCache.getIcon(icon.CrossSkinny)"
2730
+ (click)="closeAndCancelPreset()"></co-icon>
2731
+ </div>
2732
+ </div>
2733
+
2734
+ <div class="body">
2735
+ @if (presetId !== undefined && type === PresetDialogType.warning) {
2736
+ <p [textContent]="'PRESET_OVERWRITE_TEXT' | localize"></p>
2737
+ }
2738
+ @if (presetId !== undefined && type === PresetDialogType.success) {
2739
+ <p [textContent]="'PRESET_SAVED_TEXT' | localize"></p>
2740
+ }
2741
+ </div>
2742
+
2743
+ <div class="close-button-container">
2744
+ @if (presetId !== undefined && type === PresetDialogType.warning) {
2745
+ <button class="ok-button" (click)="closeAndOverwritePreset()">
2746
+ <co-icon [iconData]="iconCache.getIcon(icon.SaveSkinny)" (click)="closeAndOverwritePreset()"></co-icon>
2747
+ </button>
2748
+ }
2749
+ <button class="close-button" (click)="closeAndCancelPreset()">
2750
+ <co-icon [iconData]="iconCache.getIcon(icon.CrossSkinny)" (click)="closeAndCancelPreset()"></co-icon>
2751
+ </button>
2752
+ </div>
2753
+ </div>
2754
+ </div>
2755
+ `, isInline: true, styles: [":host .preset-dialog-wrap{background:#00000080;position:fixed;z-index:1000;inset:0;display:flex;justify-content:center;align-items:center;font-family:iOneMontserrat}:host .preset-dialog-wrap .preset-dialog-container{background:#fff;max-width:500px;width:75vw;max-height:90vh;border:1px solid #F8F8F8}:host .preset-dialog-wrap .preset-dialog-container .container-header{display:flex;justify-content:space-between;border-bottom:1px solid #F8F8F8;padding:25px;box-sizing:border-box;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .container-header .header-info h3{display:flex;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .container-header .header-info h3 co-icon{margin-right:10px}:host .preset-dialog-wrap .preset-dialog-container .container-header .close-icon{cursor:pointer}:host .preset-dialog-wrap .preset-dialog-container .body{display:flex;justify-content:space-between;border-bottom:1px solid #F8F8F8;padding:25px;box-sizing:border-box;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .close-button-container{display:flex;justify-content:center;padding:10px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button{cursor:pointer;border:none;color:#fff;padding:8px;box-shadow:0 3px 3px #0000004d;height:auto;width:auto;margin:0 3px;border-radius:3px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button ::ng-deep co-icon [fill]{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon{height:25px;width:25px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg path,:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg polygon{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container .ok-button{background:#1a73e8}:host .preset-dialog-wrap .preset-dialog-container .close-button-container .close-button{background:#475060}:host ::ng-deep .content-wrapper{width:auto!important}\n"], dependencies: [{ kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
2756
+ }
2757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogComponent, decorators: [{
2758
+ type: Component,
2759
+ args: [{ selector: 'co-preset-dialog', template: `
2760
+ <div class="preset-dialog-wrap">
2761
+ <div class="preset-dialog-container">
2762
+ <div class="container-header">
2763
+ <div class="header-info">
2764
+ <h3 [textContent]="'PRESET_SAVE_AS' | localize"></h3>
2765
+ </div>
2766
+ <div class="close-icon" (click)="closeAndCancelPreset()">
2767
+ <co-icon class="fullscreen-button"
2768
+ [iconData]="iconCache.getIcon(icon.CrossSkinny)"
2769
+ (click)="closeAndCancelPreset()"></co-icon>
2770
+ </div>
2771
+ </div>
2772
+
2773
+ <div class="body">
2774
+ @if (presetId !== undefined && type === PresetDialogType.warning) {
2775
+ <p [textContent]="'PRESET_OVERWRITE_TEXT' | localize"></p>
2776
+ }
2777
+ @if (presetId !== undefined && type === PresetDialogType.success) {
2778
+ <p [textContent]="'PRESET_SAVED_TEXT' | localize"></p>
2779
+ }
2780
+ </div>
2781
+
2782
+ <div class="close-button-container">
2783
+ @if (presetId !== undefined && type === PresetDialogType.warning) {
2784
+ <button class="ok-button" (click)="closeAndOverwritePreset()">
2785
+ <co-icon [iconData]="iconCache.getIcon(icon.SaveSkinny)" (click)="closeAndOverwritePreset()"></co-icon>
2786
+ </button>
2787
+ }
2788
+ <button class="close-button" (click)="closeAndCancelPreset()">
2789
+ <co-icon [iconData]="iconCache.getIcon(icon.CrossSkinny)" (click)="closeAndCancelPreset()"></co-icon>
2790
+ </button>
2791
+ </div>
2792
+ </div>
2793
+ </div>
2794
+ `, standalone: false, styles: [":host .preset-dialog-wrap{background:#00000080;position:fixed;z-index:1000;inset:0;display:flex;justify-content:center;align-items:center;font-family:iOneMontserrat}:host .preset-dialog-wrap .preset-dialog-container{background:#fff;max-width:500px;width:75vw;max-height:90vh;border:1px solid #F8F8F8}:host .preset-dialog-wrap .preset-dialog-container .container-header{display:flex;justify-content:space-between;border-bottom:1px solid #F8F8F8;padding:25px;box-sizing:border-box;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .container-header .header-info h3{display:flex;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .container-header .header-info h3 co-icon{margin-right:10px}:host .preset-dialog-wrap .preset-dialog-container .container-header .close-icon{cursor:pointer}:host .preset-dialog-wrap .preset-dialog-container .body{display:flex;justify-content:space-between;border-bottom:1px solid #F8F8F8;padding:25px;box-sizing:border-box;align-items:center}:host .preset-dialog-wrap .preset-dialog-container .close-button-container{display:flex;justify-content:center;padding:10px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button{cursor:pointer;border:none;color:#fff;padding:8px;box-shadow:0 3px 3px #0000004d;height:auto;width:auto;margin:0 3px;border-radius:3px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button ::ng-deep co-icon [fill]{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon{height:25px;width:25px}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg path,:host .preset-dialog-wrap .preset-dialog-container .close-button-container button .co-icon svg polygon{fill:#fff}:host .preset-dialog-wrap .preset-dialog-container .close-button-container .ok-button{background:#1a73e8}:host .preset-dialog-wrap .preset-dialog-container .close-button-container .close-button{background:#475060}:host ::ng-deep .content-wrapper{width:auto!important}\n"] }]
2795
+ }], ctorParameters: () => [{ type: IconCacheService }], propDecorators: { showClass: [{
2796
+ type: HostBinding,
2797
+ args: ['class.co-preset-dialog']
2798
+ }], type: [{
2799
+ type: Input
2800
+ }], presetId: [{
2801
+ type: Input
2802
+ }], cancelSavePreset: [{
2803
+ type: Output
2804
+ }], overwritePreset: [{
2805
+ type: Output
2806
+ }] } });
2807
+
2662
2808
  class ProductPageComponent {
2663
2809
  set sku(value) {
2664
2810
  if (value) {
@@ -2711,13 +2857,12 @@ class ProductPageComponent {
2711
2857
  get currentView() {
2712
2858
  return this._currentView;
2713
2859
  }
2714
- constructor(_ione, _renderer, _changeDetector, iconCache, settingsService, appEventService) {
2860
+ constructor(_ione, iconCache, settingsService, appEventService, _changeDetector) {
2715
2861
  this._ione = _ione;
2716
- this._renderer = _renderer;
2717
- this._changeDetector = _changeDetector;
2718
2862
  this.iconCache = iconCache;
2719
2863
  this.settingsService = settingsService;
2720
2864
  this.appEventService = appEventService;
2865
+ this._changeDetector = _changeDetector;
2721
2866
  this.icon = IconEnum;
2722
2867
  this.createFrozenArticle = true;
2723
2868
  this.isReturn = false;
@@ -2731,6 +2876,9 @@ class ProductPageComponent {
2731
2876
  this.showAddToCart = false;
2732
2877
  this.fullscreenAnimationEnd = false;
2733
2878
  this.settingsLoaded = false;
2879
+ this.showPresetDialog = false;
2880
+ this.configPresetId = undefined;
2881
+ this.presetDialogType = PresetDialogType.info;
2734
2882
  this._fullScreen = false;
2735
2883
  this._subs = [];
2736
2884
  this._subs.push(this.appEventService.onForceRenderImage.subscribe((x) => {
@@ -2759,7 +2907,7 @@ class ProductPageComponent {
2759
2907
  if (this.selections.nativeElement) {
2760
2908
  this.selections.nativeElement.getRenderForRenderCarousel(renderParameters);
2761
2909
  }
2762
- }));
2910
+ }), this.appEventService.onArticleReceived.subscribe(article => this.setConfigPresetId(article.configPresetId)));
2763
2911
  }
2764
2912
  ngOnInit() {
2765
2913
  if (this._settings) {
@@ -2770,8 +2918,6 @@ class ProductPageComponent {
2770
2918
  this._settings = this.settingsService.settings;
2771
2919
  }
2772
2920
  }
2773
- ngAfterViewInit() {
2774
- }
2775
2921
  ngOnDestroy() {
2776
2922
  this._subs.forEach(s => s.unsubscribe());
2777
2923
  if (this._initializedSub) {
@@ -2838,187 +2984,241 @@ class ProductPageComponent {
2838
2984
  handlePopUpChange(event) {
2839
2985
  this.showRelatedProductsPopup = event;
2840
2986
  }
2841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageComponent, deps: [{ token: ProductConnectorService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: IconCacheService }, { token: ProductSettingsService }, { token: ProductEventService }], target: i0.ɵɵFactoryTarget.Component }); }
2987
+ setConfigPresetId(presetId) {
2988
+ if (presetId) {
2989
+ this.configPresetId = presetId;
2990
+ }
2991
+ }
2992
+ handleSavePreset() {
2993
+ if (this.configPresetId !== undefined) {
2994
+ // prompt warning
2995
+ this.presetDialogType = PresetDialogType.warning;
2996
+ this.showPresetDialog = true;
2997
+ }
2998
+ else {
2999
+ this._savePreset();
3000
+ }
3001
+ }
3002
+ handleCancelSavePreset(event) {
3003
+ this.presetDialogType = PresetDialogType.info;
3004
+ this.showPresetDialog = false;
3005
+ }
3006
+ handleOverwritePreset(event) {
3007
+ this.presetDialogType = PresetDialogType.info;
3008
+ this.showPresetDialog = false;
3009
+ this._savePreset();
3010
+ }
3011
+ _savePreset() {
3012
+ this._ione.savePreset().then((success) => {
3013
+ if (success) {
3014
+ this.presetDialogType = PresetDialogType.success;
3015
+ this.showPresetDialog = true;
3016
+ }
3017
+ });
3018
+ }
3019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageComponent, deps: [{ token: ProductConnectorService }, { token: IconCacheService }, { token: ProductSettingsService }, { token: ProductEventService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2842
3020
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ProductPageComponent, isStandalone: false, selector: "app-product-page", inputs: { sku: "sku", settings: "settings", externalSource: "externalSource", createFrozenArticle: "createFrozenArticle", isReturn: "isReturn", showRelatedProductsPopup: "showRelatedProductsPopup", enableRenderCarousel: "enableRenderCarousel" }, outputs: { openStockEvent: "openStockEvent" }, viewQueries: [{ propertyName: "configurator", first: true, predicate: ["configurator"], descendants: true, read: ElementRef }, { propertyName: "selections", first: true, predicate: ["selections"], descendants: true, read: ElementRef }, { propertyName: "fullscreenbutton", first: true, predicate: ["fullscreenbutton"], descendants: true, read: ElementRef }], ngImport: i0, template: `
2843
- @if (settingsLoaded) {
2844
- <div class="page-wrapper">
2845
- <div class="page-wrapper-content">
2846
- <div class="page-wrapper-left">
2847
- <div class="product-image-container">
2848
- <div class="product-page-block-selector-type">
2849
- <app-product-selector-type class="default-padding"
2850
- [(currentType)]="currentView"
2851
- [show2D]="configurable"
2852
- [show3D]="threeD"
2853
- ></app-product-selector-type>
2854
- </div>
2855
- <div class="product-page-block-image default-padding" [class.full]="fullScreen">
2856
- @if (!enableRenderCarousel) {
2857
- <app-image-carousel
2858
- [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
2859
- [images]="article?.images"
2860
- [showRefresh]="configurable && threeD">
2861
- </app-image-carousel>
2862
- }
2863
- @if (enableRenderCarousel) {
2864
- <app-render-carousel
2865
- [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
2866
- [article]="article">
2867
- </app-render-carousel>
2868
- }
2869
- @if (settingsLoaded && this.configurable) {
2870
- <threed-configurator
2871
- #configurator
2872
- class="threed-configurator"
2873
- [class.configurator-full-screen]="fullScreen"
2874
- [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
2875
- [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
2876
- </threed-configurator>
2877
- }
2878
- @if (show3D) {
2879
- <co-icon #fullscreenbutton class="fullscreen-button"
2880
- [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
2881
- [iconData]="iconCache.getIcon(fullScreenIcon)"
2882
- (click)="showFullScreen()"></co-icon>
2883
- }
2884
- @if (show3D && fullScreen) {
2885
- <co-icon class="threed-watermark"
2886
- [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
2887
- }
2888
- </div>
2889
- </div>
2890
- </div>
2891
- <div class="page-wrapper-right">
2892
- <div class="product-page-block-description">
2893
- <app-product-description class="default-padding" [article]="article"></app-product-description>
2894
- </div>
2895
- <div class="product-page-block-additional">
2896
- <div class="product-page-block-additional-description">
2897
- <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
2898
- </div>
2899
- <div class="product-page-block-price" [class.full]="configuring">
2900
- @if (!configuring) {
2901
- <app-product-price class="s-padding"
2902
- [pricing]="article?.pricing"
2903
- [configurable]="configurable"
2904
- ></app-product-price>
2905
- }
2906
- @if (settingsLoaded) {
2907
- <threed-selections #selections class="threed-selections"
2908
- [class.show-selections]="configuring"
2909
- [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
2910
- [class.default-padding]="!fullScreen"
2911
- [class.show-full-screen]="fullScreen"
2912
- [class.mini-scrollbar]="fullScreen"
2913
- [sku]="sku"
2914
- [settings]="settings"
2915
- (onUserActionFromThreeD)="configuring = true"
2916
- (instanceSet)="setInstance($event)"
2917
- (onImageReceived)="appEventService.onImageReceived.next($event)"
2918
- (onRenderStarted)="appEventService.onRenderStarted.next()"
2919
- (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
2920
- (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
2921
- (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
2922
- (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
2923
- (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
2924
- (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
2925
- (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
2926
- ></threed-selections>
2927
- }
2928
- </div>
2929
- @if (!configuring) {
2930
- <div class="product-page-block-addtocart no-padding product-action-buttons" [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
2931
- <app-product-addtocart
2932
- [configurable]="configurable"
2933
- [createFrozenArticle]="createFrozenArticle"
2934
- [configuring]="configuring"
2935
- [showAddToCart]="showAddToCart"
2936
- [article]="article"
2937
- [externalSource]="externalSource"
2938
- [isReturn]="isReturn"
2939
- (startConfiguration)="handleStartConfiguration()"
2940
- (showRelatedPopup)="handlePopUpChange($event)"
2941
- ></app-product-addtocart>
2942
- </div>
2943
- }
2944
- @if (configuring) {
2945
- <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
2946
- <app-product-addtocart class="default-padding"
2947
- [configurable]="false"
2948
- [fullscreen]="fullScreen"
2949
- [showAddToCart]="showAddToCart"
2950
- [configuring]="configuring"
2951
- [article]="article"
2952
- [externalSource]="externalSource"
2953
- [isReturn]="isReturn"
2954
- (startConfiguration)="handleStartConfiguration()"
2955
- ></app-product-addtocart>
2956
- </div>
2957
- }
2958
- <div class="product-page-block-variants">
2959
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
2960
- <app-product-related class="no-padding"
2961
- [externalSource]="externalSource"
2962
- [articles]="article?.relatedArticles" [refType]="64" [label]="'VARIANTS' | localize"></app-product-related>
2963
- }
2964
- </div>
2965
- <div class="product-page-block-stock">
2966
- <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
2967
- </div>
2968
- <div class="product-page-block-delivery">
2969
- <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
2970
- </div>
2971
- </div>
2972
- </div>
2973
- </div>
2974
- <div class="page-wrapper-content">
2975
- @if (article) {
2976
- <div class="page-wrapper-left">
2977
- <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
2978
- </div>
2979
- }
2980
- <div class="page-wrapper-right">
2981
- <div class="product-page-block-related s-padding">
2982
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
2983
- <app-product-related
2984
- [externalSource]="externalSource"
2985
- [articles]="article?.relatedArticles"
2986
- [refType]="1"
2987
- [label]="'RELATED_PRODUCTS' | localize">
2988
- </app-product-related>
2989
- }
2990
- </div>
2991
- </div>
3021
+ @if (settingsLoaded) {
3022
+ <div class="page-wrapper">
3023
+ <div class="page-wrapper-content">
3024
+ <div class="page-wrapper-left">
3025
+ <div class="product-image-container">
3026
+ <div class="product-page-block-selector-type">
3027
+ <app-product-selector-type class="default-padding"
3028
+ [(currentType)]="currentView"
3029
+ [show2D]="configurable"
3030
+ [show3D]="threeD"
3031
+ ></app-product-selector-type>
3032
+ </div>
3033
+ <div class="product-page-block-image default-padding" [class.full]="fullScreen">
3034
+ @if (!enableRenderCarousel) {
3035
+ <app-image-carousel
3036
+ [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3037
+ [images]="article?.images"
3038
+ [showRefresh]="configurable && threeD">
3039
+ </app-image-carousel>
3040
+ }
3041
+ @if (enableRenderCarousel) {
3042
+ <app-render-carousel
3043
+ [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3044
+ [article]="article">
3045
+ </app-render-carousel>
3046
+ }
3047
+ @if (settingsLoaded && this.configurable) {
3048
+ <threed-configurator
3049
+ #configurator
3050
+ class="threed-configurator"
3051
+ [class.configurator-full-screen]="fullScreen"
3052
+ [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
3053
+ [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
3054
+ </threed-configurator>
3055
+ }
3056
+ @if (show3D) {
3057
+ <co-icon #fullscreenbutton class="fullscreen-button"
3058
+ [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3059
+ [iconData]="iconCache.getIcon(fullScreenIcon)"
3060
+ (click)="showFullScreen()"></co-icon>
3061
+ }
3062
+ @if (show3D && fullScreen) {
3063
+ <co-icon class="threed-watermark"
3064
+ [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
3065
+ }
3066
+ </div>
3067
+ </div>
3068
+ </div>
3069
+ <div class="page-wrapper-right">
3070
+ <div class="product-page-block-description">
3071
+ <app-product-description class="default-padding" [article]="article"></app-product-description>
3072
+ </div>
3073
+ <div class="product-page-block-additional">
3074
+ <div class="product-page-block-additional-description">
3075
+ <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
3076
+ </div>
3077
+ <div class="product-page-block-price" [class.full]="configuring">
3078
+ @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3079
+ <div class="preset-container">
3080
+ <co-button
3081
+ class="save-preset-button"
3082
+ [iconData]="iconCache.getIcon(icon.SaveDisk)"
3083
+ [label]="'PRESET_SAVE_AS' | localize"
3084
+ (onClick)="handleSavePreset()"
3085
+ ></co-button>
3086
+ </div>
3087
+ }
3088
+ @if (!configuring) {
3089
+ <app-product-price class="s-padding"
3090
+ [pricing]="article?.pricing"
3091
+ [configurable]="configurable"
3092
+ ></app-product-price>
3093
+ }
3094
+
3095
+ @if (settingsLoaded) {
3096
+ <threed-selections #selections class="threed-selections"
3097
+ [class.show-selections]="configuring"
3098
+ [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
3099
+ [class.default-padding]="!fullScreen"
3100
+ [class.show-full-screen]="fullScreen"
3101
+ [class.mini-scrollbar]="fullScreen"
3102
+ [sku]="sku"
3103
+ [settings]="settings"
3104
+ (onUserActionFromThreeD)="configuring = true"
3105
+ (instanceSet)="setInstance($event)"
3106
+ (onImageReceived)="appEventService.onImageReceived.next($event)"
3107
+ (onRenderStarted)="appEventService.onRenderStarted.next()"
3108
+ (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
3109
+ (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
3110
+ (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
3111
+ (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
3112
+ (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
3113
+ (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
3114
+ (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
3115
+ ></threed-selections>
3116
+ }
3117
+ </div>
3118
+ @if (!configuring) {
3119
+ <div class="product-page-block-addtocart no-padding product-action-buttons"
3120
+ [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3121
+ <app-product-addtocart
3122
+ [configurable]="configurable"
3123
+ [createFrozenArticle]="createFrozenArticle"
3124
+ [configuring]="configuring"
3125
+ [showAddToCart]="showAddToCart"
3126
+ [article]="article"
3127
+ [externalSource]="externalSource"
3128
+ [isReturn]="isReturn"
3129
+ (startConfiguration)="handleStartConfiguration()"
3130
+ (showRelatedPopup)="handlePopUpChange($event)"
3131
+ ></app-product-addtocart>
2992
3132
  </div>
2993
- <div class="page-wrapper-content no-top-margin">
2994
- <div class="page-wrapper-full">
2995
- <div class="product-page-block-alternatives s-padding">
2996
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
2997
- <app-product-related
2998
- [externalSource]="externalSource"
2999
- [articles]="article?.relatedArticles"
3000
- [refType]="4"
3001
- [isSmallModus]="false"
3002
- [label]="'ALTERNATIVE_PRODUCTS' | localize">
3003
- </app-product-related>
3004
- }
3005
- </div>
3006
- </div>
3133
+ }
3134
+ @if (configuring) {
3135
+ <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3136
+ <app-product-addtocart class="default-padding"
3137
+ [configurable]="false"
3138
+ [fullscreen]="fullScreen"
3139
+ [showAddToCart]="showAddToCart"
3140
+ [configuring]="configuring"
3141
+ [article]="article"
3142
+ [externalSource]="externalSource"
3143
+ [isReturn]="isReturn"
3144
+ (startConfiguration)="handleStartConfiguration()"
3145
+ ></app-product-addtocart>
3007
3146
  </div>
3008
- @if (showRelatedProductsPopup) {
3009
- <div>
3010
- <co-product-dialog
3011
- [mainArticle]="article"
3012
- [articles]="article?.relatedArticles"
3013
- [refType]="1"
3014
- (closeRelatedPopup)="handlePopUpChange($event)"
3015
- >
3016
- </co-product-dialog>
3017
- </div>
3147
+ }
3148
+ <div class="product-page-block-variants">
3149
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3150
+ <app-product-related class="no-padding"
3151
+ [externalSource]="externalSource"
3152
+ [articles]="article?.relatedArticles" [refType]="64"
3153
+ [label]="'VARIANTS' | localize"></app-product-related>
3018
3154
  }
3155
+ </div>
3156
+ <div class="product-page-block-stock">
3157
+ <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
3158
+ </div>
3159
+ <div class="product-page-block-delivery">
3160
+ <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
3161
+ </div>
3162
+ </div>
3163
+ </div>
3164
+ </div>
3165
+ <div class="page-wrapper-content">
3166
+ @if (article) {
3167
+ <div class="page-wrapper-left">
3168
+ <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
3019
3169
  </div>
3170
+ }
3171
+ <div class="page-wrapper-right">
3172
+ <div class="product-page-block-related s-padding">
3173
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3174
+ <app-product-related
3175
+ [externalSource]="externalSource"
3176
+ [articles]="article?.relatedArticles"
3177
+ [refType]="1"
3178
+ [label]="'RELATED_PRODUCTS' | localize">
3179
+ </app-product-related>
3180
+ }
3181
+ </div>
3182
+ </div>
3183
+ </div>
3184
+ <div class="page-wrapper-content no-top-margin">
3185
+ <div class="page-wrapper-full">
3186
+ <div class="product-page-block-alternatives s-padding">
3187
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3188
+ <app-product-related
3189
+ [externalSource]="externalSource"
3190
+ [articles]="article?.relatedArticles"
3191
+ [refType]="4"
3192
+ [isSmallModus]="false"
3193
+ [label]="'ALTERNATIVE_PRODUCTS' | localize">
3194
+ </app-product-related>
3195
+ }
3196
+ </div>
3197
+ </div>
3198
+ </div>
3199
+ @if (showRelatedProductsPopup) {
3200
+ <div>
3201
+ <co-product-dialog
3202
+ [mainArticle]="article"
3203
+ [articles]="article?.relatedArticles"
3204
+ [refType]="1"
3205
+ (closeRelatedPopup)="handlePopUpChange($event)"
3206
+ >
3207
+ </co-product-dialog>
3208
+ </div>
3020
3209
  }
3021
- `, isInline: true, styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child,.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:65%;flex-direction:column}.page-wrapper-right{display:flex;width:35%;flex-direction:column}.page-wrapper-full{display:flex;width:100%;flex-direction:column}.page-wrapper-66{display:flex;width:60%;flex-direction:column}.page-wrapper-33{display:flex;width:40%;flex-direction:column}.threed-selections{display:none}.threed-selections.show-selections{display:block}.threed-selections ::ng-deep .rp-lite-selector .rp-answers-slideout ::ng-deep co-slideout{width:480px;z-index:3}.threed-selections ::ng-deep .co-summary-line{cursor:pointer}.product-action-buttons{position:relative}.product-action-buttons.full-screen{z-index:10}.product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.product-page-block-image .threed-configurator{border:none}.product-page-block-image .threed-configurator .layer .viewer canvas{height:100%;width:100%}.product-page-block-image .threed-configurator ::ng-deep .rp-element-toolbar{top:30px}.product-page-block-image app-image-carousel.show-animated,.product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.product-page-block-description{grid-column:7/12;grid-row:1/1}.product-page-block-additional,.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep app-header h3{font-size:14px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container{width:320px;max-width:100%;padding:0 16px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller{width:26px;height:26px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll{left:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll{right:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.product-page-block-variants ::ng-deep co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.product-page-block-variants ::ng-deep co-tile.small:hover{border-color:#22313c}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper{padding:0}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-top{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-bottom{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-extra-bottom{display:none}.product-page-block-alternatives ::ng-deep .article-wrapper{margin:0 20px 0 0}.product-page-block-alternatives ::ng-deep .article-wrapper:last-child{margin:0}.product-page-block-alternatives ::ng-deep co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;border-bottom-color:#f6f5f4;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.product-page-block-alternatives ::ng-deep co-tile:hover{box-shadow:none;border-color:#f6f5f4}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper .tile-bottom{margin:0}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image{position:relative;padding:1px;display:flex;align-items:center;justify-content:center;overflow:hidden;max-width:250px;margin:0 auto 10px;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;z-index:-1;transition:all .2s ease}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image .no-image-wrapper{position:absolute;display:flex;left:50%;top:50%;margin:-48px 0 0 -54px;flex-direction:column;align-items:center;opacity:.25}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button co-icon{width:32px;height:32px;margin:0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main{padding:0 10px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.product-page-block-properties{grid-column:7/10;grid-row:3/3}.product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.product-page-block-documents{grid-column:2/6;grid-row:5/5}.product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.default-padding{padding-top:20px;padding-bottom:20px}.m-padding{padding-top:15px;padding-bottom:15px}.s-padding{padding-top:5px;padding-bottom:5px}.page-wrapper{max-width:650px}.page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.page-wrapper .page-wrapper-content .page-wrapper-left,.page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){[class*=-padding]{padding-left:0!important;padding-right:0!important}.product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.product-page-block-addtocart ::ng-deep co-button.cart-button{height:40px;font-size:13px}}\n"], dependencies: [{ kind: "component", type: ProductSelectorTypeComponent, selector: "app-product-selector-type", inputs: ["show2D", "show3D", "showRenderCarousel", "currentType"], outputs: ["onIconClick", "currentTypeChange"] }, { kind: "component", type: ImageCarouselComponent, selector: "app-image-carousel", inputs: ["showRefresh", "images"] }, { kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductDescriptionComponent, selector: "app-product-description", inputs: ["article"] }, { kind: "component", type: ProductAdditionalDescriptionComponent, selector: "app-product-additional-description", inputs: ["article"] }, { kind: "component", type: ProductPriceComponent, selector: "app-product-price", inputs: ["pricing", "configurable"] }, { kind: "component", type: ProductAddtocartComponent, selector: "app-product-addtocart", inputs: ["article", "externalSource", "createFrozenArticle", "configurable", "configuring", "showAddToCart", "isReturn", "fullscreen", "quantity"], outputs: ["startConfiguration", "addToCartClick", "addToQuoteClick", "showRelatedPopup"] }, { kind: "component", type: ProductRelatedComponent, selector: "app-product-related", inputs: ["refType", "label", "externalSource", "isSmallModus", "createFrozenArticle", "articles"] }, { kind: "component", type: ProductStockComponent, selector: "app-product-stock", inputs: ["goodId"], outputs: ["openStockEvent"] }, { kind: "component", type: ProductDeliveryComponent, selector: "app-product-delivery", inputs: ["stockAndDelivery"] }, { kind: "component", type: ProductInfoTabsComponent, selector: "app-product-info-tabs", inputs: ["article"] }, { kind: "component", type: ProductDialogComponent, selector: "co-product-dialog", inputs: ["refType", "mainArticle", "articles"], outputs: ["closeRelatedPopup"] }, { kind: "component", type: RenderCarouselComponent, selector: "app-render-carousel", inputs: ["showRefresh", "article"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
3210
+ </div>
3211
+
3212
+ <co-preset-dialog
3213
+ *ngIf="showPresetDialog"
3214
+ [type]="presetDialogType"
3215
+ [presetId]="configPresetId"
3216
+ (cancelSavePreset)="handleCancelSavePreset($event)"
3217
+ (overwritePreset)="handleOverwritePreset($event)"
3218
+ >
3219
+ </co-preset-dialog>
3220
+ }
3221
+ `, isInline: true, styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child,.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:65%;flex-direction:column}.page-wrapper-right{display:flex;width:35%;flex-direction:column}.page-wrapper-full{display:flex;width:100%;flex-direction:column}.page-wrapper-66{display:flex;width:60%;flex-direction:column}.page-wrapper-33{display:flex;width:40%;flex-direction:column}.threed-selections{display:none}.threed-selections.show-selections{display:block}.threed-selections ::ng-deep .rp-lite-selector .rp-answers-slideout ::ng-deep co-slideout{width:480px;z-index:3}.threed-selections ::ng-deep .co-summary-line{cursor:pointer}.product-action-buttons{position:relative}.product-action-buttons.full-screen{z-index:10}.product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.product-page-block-image .threed-configurator{border:none}.product-page-block-image .threed-configurator .layer .viewer canvas{height:100%;width:100%}.product-page-block-image .threed-configurator ::ng-deep .rp-element-toolbar{top:30px}.product-page-block-image app-image-carousel.show-animated,.product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.product-page-block-description{grid-column:7/12;grid-row:1/1}.product-page-block-additional,.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.preset-container{display:flex;justify-content:right}.preset-container .save-preset-button{cursor:pointer;width:100%;max-width:205px;box-sizing:border-box}.preset-container .save-preset-button:hover{background:#74b77f}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep app-header h3{font-size:14px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container{width:320px;max-width:100%;padding:0 16px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller{width:26px;height:26px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll{left:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll{right:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.product-page-block-variants ::ng-deep co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.product-page-block-variants ::ng-deep co-tile.small:hover{border-color:#22313c}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper{padding:0}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-top{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-bottom{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-extra-bottom{display:none}.product-page-block-alternatives ::ng-deep .article-wrapper{margin:0 20px 0 0}.product-page-block-alternatives ::ng-deep .article-wrapper:last-child{margin:0}.product-page-block-alternatives ::ng-deep co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;border-bottom-color:#f6f5f4;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.product-page-block-alternatives ::ng-deep co-tile:hover{box-shadow:none;border-color:#f6f5f4}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper .tile-bottom{margin:0}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image{position:relative;padding:1px;display:flex;align-items:center;justify-content:center;overflow:hidden;max-width:250px;margin:0 auto 10px;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;z-index:-1;transition:all .2s ease}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image .no-image-wrapper{position:absolute;display:flex;left:50%;top:50%;margin:-48px 0 0 -54px;flex-direction:column;align-items:center;opacity:.25}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button co-icon{width:32px;height:32px;margin:0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main{padding:0 10px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.product-page-block-properties{grid-column:7/10;grid-row:3/3}.product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.product-page-block-documents{grid-column:2/6;grid-row:5/5}.product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.default-padding{padding-top:20px;padding-bottom:20px}.m-padding{padding-top:15px;padding-bottom:15px}.s-padding{padding-top:5px;padding-bottom:5px}.page-wrapper{max-width:650px}.page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.page-wrapper .page-wrapper-content .page-wrapper-left,.page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){[class*=-padding]{padding-left:0!important;padding-right:0!important}.product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.product-page-block-addtocart ::ng-deep co-button.cart-button{height:40px;font-size:13px}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ProductSelectorTypeComponent, selector: "app-product-selector-type", inputs: ["show2D", "show3D", "showRenderCarousel", "currentType"], outputs: ["onIconClick", "currentTypeChange"] }, { kind: "component", type: ImageCarouselComponent, selector: "app-image-carousel", inputs: ["showRefresh", "images"] }, { kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "component", type: ProductDescriptionComponent, selector: "app-product-description", inputs: ["article"] }, { kind: "component", type: ProductAdditionalDescriptionComponent, selector: "app-product-additional-description", inputs: ["article"] }, { kind: "component", type: ProductPriceComponent, selector: "app-product-price", inputs: ["pricing", "configurable"] }, { kind: "component", type: ProductAddtocartComponent, selector: "app-product-addtocart", inputs: ["article", "externalSource", "createFrozenArticle", "configurable", "configuring", "showAddToCart", "isReturn", "fullscreen", "quantity"], outputs: ["startConfiguration", "addToCartClick", "addToQuoteClick", "showRelatedPopup"] }, { kind: "component", type: ProductRelatedComponent, selector: "app-product-related", inputs: ["refType", "label", "externalSource", "isSmallModus", "createFrozenArticle", "articles"] }, { kind: "component", type: ProductStockComponent, selector: "app-product-stock", inputs: ["goodId"], outputs: ["openStockEvent"] }, { kind: "component", type: ProductDeliveryComponent, selector: "app-product-delivery", inputs: ["stockAndDelivery"] }, { kind: "component", type: ProductInfoTabsComponent, selector: "app-product-info-tabs", inputs: ["article"] }, { kind: "component", type: ProductDialogComponent, selector: "co-product-dialog", inputs: ["refType", "mainArticle", "articles"], outputs: ["closeRelatedPopup"] }, { kind: "component", type: RenderCarouselComponent, selector: "app-render-carousel", inputs: ["showRefresh", "article"] }, { kind: "component", type: i6.ButtonComponent, selector: "co-button", inputs: ["label", "iconData", "iconDataRight", "isToggleButton", "isToggled", "hidden", "disabled"], outputs: ["onClick", "clickedWhileDisabled", "isToggledChange"] }, { kind: "component", type: PresetDialogComponent, selector: "co-preset-dialog", inputs: ["type", "presetId"], outputs: ["cancelSavePreset", "overwritePreset"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
3022
3222
  trigger('toggleFullScreen', [
3023
3223
  state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
3024
3224
  state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
@@ -3054,185 +3254,207 @@ class ProductPageComponent {
3054
3254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageComponent, decorators: [{
3055
3255
  type: Component,
3056
3256
  args: [{ selector: 'app-product-page', template: `
3057
- @if (settingsLoaded) {
3058
- <div class="page-wrapper">
3059
- <div class="page-wrapper-content">
3060
- <div class="page-wrapper-left">
3061
- <div class="product-image-container">
3062
- <div class="product-page-block-selector-type">
3063
- <app-product-selector-type class="default-padding"
3064
- [(currentType)]="currentView"
3065
- [show2D]="configurable"
3066
- [show3D]="threeD"
3067
- ></app-product-selector-type>
3068
- </div>
3069
- <div class="product-page-block-image default-padding" [class.full]="fullScreen">
3070
- @if (!enableRenderCarousel) {
3071
- <app-image-carousel
3072
- [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3073
- [images]="article?.images"
3074
- [showRefresh]="configurable && threeD">
3075
- </app-image-carousel>
3076
- }
3077
- @if (enableRenderCarousel) {
3078
- <app-render-carousel
3079
- [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3080
- [article]="article">
3081
- </app-render-carousel>
3082
- }
3083
- @if (settingsLoaded && this.configurable) {
3084
- <threed-configurator
3085
- #configurator
3086
- class="threed-configurator"
3087
- [class.configurator-full-screen]="fullScreen"
3088
- [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
3089
- [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
3090
- </threed-configurator>
3091
- }
3092
- @if (show3D) {
3093
- <co-icon #fullscreenbutton class="fullscreen-button"
3094
- [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3095
- [iconData]="iconCache.getIcon(fullScreenIcon)"
3096
- (click)="showFullScreen()"></co-icon>
3097
- }
3098
- @if (show3D && fullScreen) {
3099
- <co-icon class="threed-watermark"
3100
- [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
3101
- }
3102
- </div>
3103
- </div>
3104
- </div>
3105
- <div class="page-wrapper-right">
3106
- <div class="product-page-block-description">
3107
- <app-product-description class="default-padding" [article]="article"></app-product-description>
3108
- </div>
3109
- <div class="product-page-block-additional">
3110
- <div class="product-page-block-additional-description">
3111
- <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
3112
- </div>
3113
- <div class="product-page-block-price" [class.full]="configuring">
3114
- @if (!configuring) {
3115
- <app-product-price class="s-padding"
3116
- [pricing]="article?.pricing"
3117
- [configurable]="configurable"
3118
- ></app-product-price>
3119
- }
3120
- @if (settingsLoaded) {
3121
- <threed-selections #selections class="threed-selections"
3122
- [class.show-selections]="configuring"
3123
- [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
3124
- [class.default-padding]="!fullScreen"
3125
- [class.show-full-screen]="fullScreen"
3126
- [class.mini-scrollbar]="fullScreen"
3127
- [sku]="sku"
3128
- [settings]="settings"
3129
- (onUserActionFromThreeD)="configuring = true"
3130
- (instanceSet)="setInstance($event)"
3131
- (onImageReceived)="appEventService.onImageReceived.next($event)"
3132
- (onRenderStarted)="appEventService.onRenderStarted.next()"
3133
- (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
3134
- (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
3135
- (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
3136
- (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
3137
- (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
3138
- (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
3139
- (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
3140
- ></threed-selections>
3141
- }
3142
- </div>
3143
- @if (!configuring) {
3144
- <div class="product-page-block-addtocart no-padding product-action-buttons" [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3145
- <app-product-addtocart
3146
- [configurable]="configurable"
3147
- [createFrozenArticle]="createFrozenArticle"
3148
- [configuring]="configuring"
3149
- [showAddToCart]="showAddToCart"
3150
- [article]="article"
3151
- [externalSource]="externalSource"
3152
- [isReturn]="isReturn"
3153
- (startConfiguration)="handleStartConfiguration()"
3154
- (showRelatedPopup)="handlePopUpChange($event)"
3155
- ></app-product-addtocart>
3156
- </div>
3157
- }
3158
- @if (configuring) {
3159
- <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3160
- <app-product-addtocart class="default-padding"
3161
- [configurable]="false"
3162
- [fullscreen]="fullScreen"
3163
- [showAddToCart]="showAddToCart"
3164
- [configuring]="configuring"
3165
- [article]="article"
3166
- [externalSource]="externalSource"
3167
- [isReturn]="isReturn"
3168
- (startConfiguration)="handleStartConfiguration()"
3169
- ></app-product-addtocart>
3170
- </div>
3171
- }
3172
- <div class="product-page-block-variants">
3173
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3174
- <app-product-related class="no-padding"
3175
- [externalSource]="externalSource"
3176
- [articles]="article?.relatedArticles" [refType]="64" [label]="'VARIANTS' | localize"></app-product-related>
3177
- }
3178
- </div>
3179
- <div class="product-page-block-stock">
3180
- <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
3181
- </div>
3182
- <div class="product-page-block-delivery">
3183
- <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
3184
- </div>
3185
- </div>
3186
- </div>
3187
- </div>
3188
- <div class="page-wrapper-content">
3189
- @if (article) {
3190
- <div class="page-wrapper-left">
3191
- <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
3192
- </div>
3193
- }
3194
- <div class="page-wrapper-right">
3195
- <div class="product-page-block-related s-padding">
3196
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3197
- <app-product-related
3198
- [externalSource]="externalSource"
3199
- [articles]="article?.relatedArticles"
3200
- [refType]="1"
3201
- [label]="'RELATED_PRODUCTS' | localize">
3202
- </app-product-related>
3203
- }
3204
- </div>
3205
- </div>
3257
+ @if (settingsLoaded) {
3258
+ <div class="page-wrapper">
3259
+ <div class="page-wrapper-content">
3260
+ <div class="page-wrapper-left">
3261
+ <div class="product-image-container">
3262
+ <div class="product-page-block-selector-type">
3263
+ <app-product-selector-type class="default-padding"
3264
+ [(currentType)]="currentView"
3265
+ [show2D]="configurable"
3266
+ [show3D]="threeD"
3267
+ ></app-product-selector-type>
3268
+ </div>
3269
+ <div class="product-page-block-image default-padding" [class.full]="fullScreen">
3270
+ @if (!enableRenderCarousel) {
3271
+ <app-image-carousel
3272
+ [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3273
+ [images]="article?.images"
3274
+ [showRefresh]="configurable && threeD">
3275
+ </app-image-carousel>
3276
+ }
3277
+ @if (enableRenderCarousel) {
3278
+ <app-render-carousel
3279
+ [@toggleVisibilityByState]="show2D ? 'show' : 'hide'"
3280
+ [article]="article">
3281
+ </app-render-carousel>
3282
+ }
3283
+ @if (settingsLoaded && this.configurable) {
3284
+ <threed-configurator
3285
+ #configurator
3286
+ class="threed-configurator"
3287
+ [class.configurator-full-screen]="fullScreen"
3288
+ [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
3289
+ [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
3290
+ </threed-configurator>
3291
+ }
3292
+ @if (show3D) {
3293
+ <co-icon #fullscreenbutton class="fullscreen-button"
3294
+ [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3295
+ [iconData]="iconCache.getIcon(fullScreenIcon)"
3296
+ (click)="showFullScreen()"></co-icon>
3297
+ }
3298
+ @if (show3D && fullScreen) {
3299
+ <co-icon class="threed-watermark"
3300
+ [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
3301
+ }
3302
+ </div>
3303
+ </div>
3304
+ </div>
3305
+ <div class="page-wrapper-right">
3306
+ <div class="product-page-block-description">
3307
+ <app-product-description class="default-padding" [article]="article"></app-product-description>
3308
+ </div>
3309
+ <div class="product-page-block-additional">
3310
+ <div class="product-page-block-additional-description">
3311
+ <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
3312
+ </div>
3313
+ <div class="product-page-block-price" [class.full]="configuring">
3314
+ @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3315
+ <div class="preset-container">
3316
+ <co-button
3317
+ class="save-preset-button"
3318
+ [iconData]="iconCache.getIcon(icon.SaveDisk)"
3319
+ [label]="'PRESET_SAVE_AS' | localize"
3320
+ (onClick)="handleSavePreset()"
3321
+ ></co-button>
3322
+ </div>
3323
+ }
3324
+ @if (!configuring) {
3325
+ <app-product-price class="s-padding"
3326
+ [pricing]="article?.pricing"
3327
+ [configurable]="configurable"
3328
+ ></app-product-price>
3329
+ }
3330
+
3331
+ @if (settingsLoaded) {
3332
+ <threed-selections #selections class="threed-selections"
3333
+ [class.show-selections]="configuring"
3334
+ [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
3335
+ [class.default-padding]="!fullScreen"
3336
+ [class.show-full-screen]="fullScreen"
3337
+ [class.mini-scrollbar]="fullScreen"
3338
+ [sku]="sku"
3339
+ [settings]="settings"
3340
+ (onUserActionFromThreeD)="configuring = true"
3341
+ (instanceSet)="setInstance($event)"
3342
+ (onImageReceived)="appEventService.onImageReceived.next($event)"
3343
+ (onRenderStarted)="appEventService.onRenderStarted.next()"
3344
+ (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
3345
+ (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
3346
+ (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
3347
+ (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
3348
+ (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
3349
+ (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
3350
+ (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
3351
+ ></threed-selections>
3352
+ }
3353
+ </div>
3354
+ @if (!configuring) {
3355
+ <div class="product-page-block-addtocart no-padding product-action-buttons"
3356
+ [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3357
+ <app-product-addtocart
3358
+ [configurable]="configurable"
3359
+ [createFrozenArticle]="createFrozenArticle"
3360
+ [configuring]="configuring"
3361
+ [showAddToCart]="showAddToCart"
3362
+ [article]="article"
3363
+ [externalSource]="externalSource"
3364
+ [isReturn]="isReturn"
3365
+ (startConfiguration)="handleStartConfiguration()"
3366
+ (showRelatedPopup)="handlePopUpChange($event)"
3367
+ ></app-product-addtocart>
3206
3368
  </div>
3207
- <div class="page-wrapper-content no-top-margin">
3208
- <div class="page-wrapper-full">
3209
- <div class="product-page-block-alternatives s-padding">
3210
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3211
- <app-product-related
3212
- [externalSource]="externalSource"
3213
- [articles]="article?.relatedArticles"
3214
- [refType]="4"
3215
- [isSmallModus]="false"
3216
- [label]="'ALTERNATIVE_PRODUCTS' | localize">
3217
- </app-product-related>
3218
- }
3219
- </div>
3220
- </div>
3369
+ }
3370
+ @if (configuring) {
3371
+ <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3372
+ <app-product-addtocart class="default-padding"
3373
+ [configurable]="false"
3374
+ [fullscreen]="fullScreen"
3375
+ [showAddToCart]="showAddToCart"
3376
+ [configuring]="configuring"
3377
+ [article]="article"
3378
+ [externalSource]="externalSource"
3379
+ [isReturn]="isReturn"
3380
+ (startConfiguration)="handleStartConfiguration()"
3381
+ ></app-product-addtocart>
3221
3382
  </div>
3222
- @if (showRelatedProductsPopup) {
3223
- <div>
3224
- <co-product-dialog
3225
- [mainArticle]="article"
3226
- [articles]="article?.relatedArticles"
3227
- [refType]="1"
3228
- (closeRelatedPopup)="handlePopUpChange($event)"
3229
- >
3230
- </co-product-dialog>
3231
- </div>
3383
+ }
3384
+ <div class="product-page-block-variants">
3385
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3386
+ <app-product-related class="no-padding"
3387
+ [externalSource]="externalSource"
3388
+ [articles]="article?.relatedArticles" [refType]="64"
3389
+ [label]="'VARIANTS' | localize"></app-product-related>
3232
3390
  }
3391
+ </div>
3392
+ <div class="product-page-block-stock">
3393
+ <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
3394
+ </div>
3395
+ <div class="product-page-block-delivery">
3396
+ <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
3397
+ </div>
3233
3398
  </div>
3399
+ </div>
3400
+ </div>
3401
+ <div class="page-wrapper-content">
3402
+ @if (article) {
3403
+ <div class="page-wrapper-left">
3404
+ <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
3405
+ </div>
3406
+ }
3407
+ <div class="page-wrapper-right">
3408
+ <div class="product-page-block-related s-padding">
3409
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3410
+ <app-product-related
3411
+ [externalSource]="externalSource"
3412
+ [articles]="article?.relatedArticles"
3413
+ [refType]="1"
3414
+ [label]="'RELATED_PRODUCTS' | localize">
3415
+ </app-product-related>
3416
+ }
3417
+ </div>
3418
+ </div>
3419
+ </div>
3420
+ <div class="page-wrapper-content no-top-margin">
3421
+ <div class="page-wrapper-full">
3422
+ <div class="product-page-block-alternatives s-padding">
3423
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3424
+ <app-product-related
3425
+ [externalSource]="externalSource"
3426
+ [articles]="article?.relatedArticles"
3427
+ [refType]="4"
3428
+ [isSmallModus]="false"
3429
+ [label]="'ALTERNATIVE_PRODUCTS' | localize">
3430
+ </app-product-related>
3431
+ }
3432
+ </div>
3433
+ </div>
3434
+ </div>
3435
+ @if (showRelatedProductsPopup) {
3436
+ <div>
3437
+ <co-product-dialog
3438
+ [mainArticle]="article"
3439
+ [articles]="article?.relatedArticles"
3440
+ [refType]="1"
3441
+ (closeRelatedPopup)="handlePopUpChange($event)"
3442
+ >
3443
+ </co-product-dialog>
3444
+ </div>
3234
3445
  }
3235
- `, animations: [
3446
+ </div>
3447
+
3448
+ <co-preset-dialog
3449
+ *ngIf="showPresetDialog"
3450
+ [type]="presetDialogType"
3451
+ [presetId]="configPresetId"
3452
+ (cancelSavePreset)="handleCancelSavePreset($event)"
3453
+ (overwritePreset)="handleOverwritePreset($event)"
3454
+ >
3455
+ </co-preset-dialog>
3456
+ }
3457
+ `, animations: [
3236
3458
  trigger('toggleFullScreen', [
3237
3459
  state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
3238
3460
  state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
@@ -3263,8 +3485,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3263
3485
  state('*', style({ 'opacity': '1' })),
3264
3486
  transition('void => *', animate('200ms ease-in-out'))
3265
3487
  ])
3266
- ], standalone: false, styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child,.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:65%;flex-direction:column}.page-wrapper-right{display:flex;width:35%;flex-direction:column}.page-wrapper-full{display:flex;width:100%;flex-direction:column}.page-wrapper-66{display:flex;width:60%;flex-direction:column}.page-wrapper-33{display:flex;width:40%;flex-direction:column}.threed-selections{display:none}.threed-selections.show-selections{display:block}.threed-selections ::ng-deep .rp-lite-selector .rp-answers-slideout ::ng-deep co-slideout{width:480px;z-index:3}.threed-selections ::ng-deep .co-summary-line{cursor:pointer}.product-action-buttons{position:relative}.product-action-buttons.full-screen{z-index:10}.product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.product-page-block-image .threed-configurator{border:none}.product-page-block-image .threed-configurator .layer .viewer canvas{height:100%;width:100%}.product-page-block-image .threed-configurator ::ng-deep .rp-element-toolbar{top:30px}.product-page-block-image app-image-carousel.show-animated,.product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.product-page-block-description{grid-column:7/12;grid-row:1/1}.product-page-block-additional,.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep app-header h3{font-size:14px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container{width:320px;max-width:100%;padding:0 16px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller{width:26px;height:26px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll{left:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll{right:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.product-page-block-variants ::ng-deep co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.product-page-block-variants ::ng-deep co-tile.small:hover{border-color:#22313c}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper{padding:0}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-top{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-bottom{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-extra-bottom{display:none}.product-page-block-alternatives ::ng-deep .article-wrapper{margin:0 20px 0 0}.product-page-block-alternatives ::ng-deep .article-wrapper:last-child{margin:0}.product-page-block-alternatives ::ng-deep co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;border-bottom-color:#f6f5f4;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.product-page-block-alternatives ::ng-deep co-tile:hover{box-shadow:none;border-color:#f6f5f4}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper .tile-bottom{margin:0}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image{position:relative;padding:1px;display:flex;align-items:center;justify-content:center;overflow:hidden;max-width:250px;margin:0 auto 10px;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;z-index:-1;transition:all .2s ease}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image .no-image-wrapper{position:absolute;display:flex;left:50%;top:50%;margin:-48px 0 0 -54px;flex-direction:column;align-items:center;opacity:.25}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button co-icon{width:32px;height:32px;margin:0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main{padding:0 10px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.product-page-block-properties{grid-column:7/10;grid-row:3/3}.product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.product-page-block-documents{grid-column:2/6;grid-row:5/5}.product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.default-padding{padding-top:20px;padding-bottom:20px}.m-padding{padding-top:15px;padding-bottom:15px}.s-padding{padding-top:5px;padding-bottom:5px}.page-wrapper{max-width:650px}.page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.page-wrapper .page-wrapper-content .page-wrapper-left,.page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){[class*=-padding]{padding-left:0!important;padding-right:0!important}.product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.product-page-block-addtocart ::ng-deep co-button.cart-button{height:40px;font-size:13px}}\n"] }]
3267
- }], ctorParameters: () => [{ type: ProductConnectorService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: IconCacheService }, { type: ProductSettingsService }, { type: ProductEventService }], propDecorators: { configurator: [{
3488
+ ], standalone: false, styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child,.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:65%;flex-direction:column}.page-wrapper-right{display:flex;width:35%;flex-direction:column}.page-wrapper-full{display:flex;width:100%;flex-direction:column}.page-wrapper-66{display:flex;width:60%;flex-direction:column}.page-wrapper-33{display:flex;width:40%;flex-direction:column}.threed-selections{display:none}.threed-selections.show-selections{display:block}.threed-selections ::ng-deep .rp-lite-selector .rp-answers-slideout ::ng-deep co-slideout{width:480px;z-index:3}.threed-selections ::ng-deep .co-summary-line{cursor:pointer}.product-action-buttons{position:relative}.product-action-buttons.full-screen{z-index:10}.product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.product-page-block-image .threed-configurator{border:none}.product-page-block-image .threed-configurator .layer .viewer canvas{height:100%;width:100%}.product-page-block-image .threed-configurator ::ng-deep .rp-element-toolbar{top:30px}.product-page-block-image app-image-carousel.show-animated,.product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.product-page-block-description{grid-column:7/12;grid-row:1/1}.product-page-block-additional,.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.preset-container{display:flex;justify-content:right}.preset-container .save-preset-button{cursor:pointer;width:100%;max-width:205px;box-sizing:border-box}.preset-container .save-preset-button:hover{background:#74b77f}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep app-header h3{font-size:14px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container{width:320px;max-width:100%;padding:0 16px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller{width:26px;height:26px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll{left:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll{right:5px}.product-page-block-variants ::ng-deep app-product-related>div ::ng-deep co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.product-page-block-variants ::ng-deep co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.product-page-block-variants ::ng-deep co-tile.small:hover{border-color:#22313c}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper{padding:0}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-top{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.product-page-block-variants ::ng-deep co-tile.small .tile-wrapper .tile-bottom{display:none}.product-page-block-variants ::ng-deep co-tile.small .tile-extra-bottom{display:none}.product-page-block-alternatives ::ng-deep .article-wrapper{margin:0 20px 0 0}.product-page-block-alternatives ::ng-deep .article-wrapper:last-child{margin:0}.product-page-block-alternatives ::ng-deep co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;border-bottom-color:#f6f5f4;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.product-page-block-alternatives ::ng-deep co-tile:hover{box-shadow:none;border-color:#f6f5f4}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-wrapper .tile-bottom{margin:0}.product-page-block-alternatives ::ng-deep co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image{position:relative;padding:1px;display:flex;align-items:center;justify-content:center;overflow:hidden;max-width:250px;margin:0 auto 10px;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;z-index:-1;transition:all .2s ease}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper div.image .no-image-wrapper{position:absolute;display:flex;left:50%;top:50%;margin:-48px 0 0 -54px;flex-direction:column;align-items:center;opacity:.25}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.product-page-block-alternatives ::ng-deep co-tile .tile-wrapper .tile-bottom ::ng-deep co-button co-icon{width:32px;height:32px;margin:0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main{padding:0 10px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.product-page-block-alternatives ::ng-deep co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.product-page-block-properties{grid-column:7/10;grid-row:3/3}.product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.product-page-block-documents{grid-column:2/6;grid-row:5/5}.product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.default-padding{padding-top:20px;padding-bottom:20px}.m-padding{padding-top:15px;padding-bottom:15px}.s-padding{padding-top:5px;padding-bottom:5px}.page-wrapper{max-width:650px}.page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.page-wrapper .page-wrapper-content .page-wrapper-left,.page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){[class*=-padding]{padding-left:0!important;padding-right:0!important}.product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.product-page-block-addtocart ::ng-deep co-button.cart-button{height:40px;font-size:13px}}\n"] }]
3489
+ }], ctorParameters: () => [{ type: ProductConnectorService }, { type: IconCacheService }, { type: ProductSettingsService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }], propDecorators: { configurator: [{
3268
3490
  type: ViewChild,
3269
3491
  args: ['configurator', { read: ElementRef }]
3270
3492
  }], selections: [{
@@ -3342,7 +3564,7 @@ class IoneProductComponent {
3342
3564
  // this.sku = "4387";
3343
3565
  // this.sku = "1000612725";
3344
3566
  // this.sku = '1000610952'; // elix = 1000234793
3345
- this.sku = '1000234793';
3567
+ // this.sku = 'A30';
3346
3568
  }
3347
3569
  async ngOnInit() {
3348
3570
  this._subs.push(this._appEventService.onAddToCart.subscribe((data) => {
@@ -3524,10 +3746,14 @@ class ImageCarouselModule {
3524
3746
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3525
3747
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, declarations: [ImageCarouselComponent], imports: [CommonModule,
3526
3748
  LoaderModule,
3527
- ScrollContainerModule], exports: [ImageCarouselComponent] }); }
3749
+ ScrollContainerModule,
3750
+ CdkConnectedOverlay,
3751
+ CdkOverlayOrigin,
3752
+ IconModule], exports: [ImageCarouselComponent] }); }
3528
3753
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, imports: [CommonModule,
3529
3754
  LoaderModule,
3530
- ScrollContainerModule] }); }
3755
+ ScrollContainerModule,
3756
+ IconModule] }); }
3531
3757
  }
3532
3758
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, decorators: [{
3533
3759
  type: NgModule,
@@ -3535,7 +3761,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3535
3761
  imports: [
3536
3762
  CommonModule,
3537
3763
  LoaderModule,
3538
- ScrollContainerModule
3764
+ ScrollContainerModule,
3765
+ CdkConnectedOverlay,
3766
+ CdkOverlayOrigin,
3767
+ IconModule
3539
3768
  ],
3540
3769
  declarations: [
3541
3770
  ImageCarouselComponent
@@ -3948,6 +4177,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3948
4177
  }]
3949
4178
  }] });
3950
4179
 
4180
+ class PresetDialogModule {
4181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4182
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogModule, declarations: [PresetDialogComponent], imports: [IconModule,
4183
+ PipeModule,
4184
+ ProductRelatedModule], exports: [PresetDialogComponent] }); }
4185
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogModule, imports: [IconModule,
4186
+ PipeModule,
4187
+ ProductRelatedModule] }); }
4188
+ }
4189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PresetDialogModule, decorators: [{
4190
+ type: NgModule,
4191
+ args: [{
4192
+ imports: [
4193
+ IconModule,
4194
+ PipeModule,
4195
+ ProductRelatedModule
4196
+ ],
4197
+ declarations: [
4198
+ PresetDialogComponent
4199
+ ],
4200
+ exports: [
4201
+ PresetDialogComponent
4202
+ ]
4203
+ }]
4204
+ }] });
4205
+
3951
4206
  class ProductPageModule {
3952
4207
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3953
4208
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, declarations: [ProductPageComponent], imports: [CommonModule,
@@ -3965,7 +4220,9 @@ class ProductPageModule {
3965
4220
  PipeModule,
3966
4221
  ProductDialogModule,
3967
4222
  LoaderModule,
3968
- RenderCarouselModule], exports: [ProductPageComponent] }); }
4223
+ RenderCarouselModule,
4224
+ ButtonModule,
4225
+ PresetDialogModule], exports: [ProductPageComponent] }); }
3969
4226
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, imports: [CommonModule,
3970
4227
  ProductSelectorTypeModule,
3971
4228
  ImageCarouselModule,
@@ -3981,7 +4238,9 @@ class ProductPageModule {
3981
4238
  PipeModule,
3982
4239
  ProductDialogModule,
3983
4240
  LoaderModule,
3984
- RenderCarouselModule] }); }
4241
+ RenderCarouselModule,
4242
+ ButtonModule,
4243
+ PresetDialogModule] }); }
3985
4244
  }
3986
4245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, decorators: [{
3987
4246
  type: NgModule,
@@ -4002,7 +4261,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
4002
4261
  PipeModule,
4003
4262
  ProductDialogModule,
4004
4263
  LoaderModule,
4005
- RenderCarouselModule
4264
+ RenderCarouselModule,
4265
+ ButtonModule,
4266
+ PresetDialogModule
4006
4267
  ],
4007
4268
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
4008
4269
  declarations: [