@colijnit/product 261.20.1 → 261.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,24 +14,28 @@ import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/tr
14
14
  import { ArticleListObjectExtended } from '@colijnit/articleapi/build/model/article-list-object-extended.bo';
15
15
  import { ImageContent } from '@colijnit/mainapi/build/model/image-content.bo';
16
16
  import { StringUtils } from '@colijnit/ioneconnector/build/utils/string-utils';
17
- import { trigger, state, transition, style, animate } from '@angular/animations';
17
+ import { trigger, state, style, transition, animate } from '@angular/animations';
18
+ import * as i5 from '@colijnit/configurator';
19
+ import { ConfigurationResultObject, ConfiguratorModule, ConfiguratorSceneModule } from '@colijnit/configurator';
18
20
  import * as i1 from '@angular/platform-browser';
19
- import * as i5 from '@angular/common';
20
- import { CommonModule, isPlatformBrowser } from '@angular/common';
21
21
  import * as i6 from '@colijnit/corecomponents_v12';
22
22
  import { IconModule, LoaderModule, ScrollContainerModule, InputNumberPickerModule, ButtonModule, ArticleTileModule, TileModule, IconCollapseHandleModule } from '@colijnit/corecomponents_v12';
23
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';
24
26
  import { ConfiguratorStatisticsEnvironment } from '@colijnit/articleapi/build/model/configurator-statistics-environment';
25
27
  import * as i3 from '@colijnit/sharedcomponents';
26
28
  import { FilesUploadModule } from '@colijnit/sharedcomponents';
29
+ import * as i5$1 from '@angular/common';
30
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
27
31
 
28
32
  // this file is dynamically created, do not change this
29
33
  class Version {
30
34
  constructor() {
31
35
  this.name = "@colijnit/product";
32
36
  this.description = "Product detail page project for iOne";
33
- this.symVer = "261.20.1";
34
- this.publishDate = "11-3-2026, 11:34:54";
37
+ this.symVer = "261.20.3";
38
+ this.publishDate = "2-4-2026, 17:07:12";
35
39
  }
36
40
  }
37
41
 
@@ -957,11 +961,13 @@ class ImageCarouselComponent {
957
961
  this._currentIndex = value;
958
962
  this._scrollCarouselToIndex();
959
963
  }
960
- constructor(_ione, _appEventService, _changeDetector, _domSanitizer) {
964
+ constructor(iconCacheService, _ione, _appEventService, _changeDetector, _domSanitizer) {
965
+ this.iconCacheService = iconCacheService;
961
966
  this._ione = _ione;
962
967
  this._appEventService = _appEventService;
963
968
  this._changeDetector = _changeDetector;
964
969
  this._domSanitizer = _domSanitizer;
970
+ this.icons = IconEnum;
965
971
  this.isPopupOpen = false;
966
972
  this.showRefresh = false;
967
973
  this.resizing = false;
@@ -1059,51 +1065,63 @@ class ImageCarouselComponent {
1059
1065
  const ctx = resizeCanvas.getContext('2d');
1060
1066
  const img = document.createElement('img');
1061
1067
  img.crossOrigin = 'anonymous';
1068
+ const handleFallback = () => {
1069
+ // When a CDN does not accept our tainted canvas, we fallback to the original source.
1070
+ imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(source);
1071
+ imageViewModel.originalSource = source;
1072
+ this._changeDetector.detectChanges();
1073
+ };
1074
+ img.onerror = () => {
1075
+ handleFallback();
1076
+ };
1062
1077
  img.onload = () => {
1063
- ctx.imageSmoothingEnabled = true;
1064
- ctx.imageSmoothingQuality = 'high';
1065
- const ow = img.width;
1066
- const oh = img.height;
1067
- const aspect = ow / oh;
1068
- let newW = this._resizeCanvasHeight;
1069
- let newH = this._resizeCanvasHeight;
1070
- if (ow > oh) {
1071
- newH = this._resizeCanvasHeight / aspect;
1078
+ try {
1079
+ ctx.imageSmoothingEnabled = true;
1080
+ ctx.imageSmoothingQuality = 'high';
1081
+ const aspect = img.width / img.height;
1082
+ let newW = this._resizeCanvasHeight;
1083
+ let newH = this._resizeCanvasHeight;
1084
+ if (img.width > img.height) {
1085
+ newH = this._resizeCanvasHeight / aspect;
1086
+ }
1087
+ else {
1088
+ newW = this._resizeCanvasHeight * aspect;
1089
+ }
1090
+ resizeCanvas.width = Math.round(newW);
1091
+ resizeCanvas.height = Math.round(newH);
1092
+ ctx.clearRect(0, 0, resizeCanvas.width, resizeCanvas.height);
1093
+ ctx.drawImage(img, 0, 0, resizeCanvas.width, resizeCanvas.height);
1094
+ const mime = this._handleMimeTypes(source);
1095
+ const resizedSource = resizeCanvas.toDataURL(mime);
1096
+ imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
1097
+ imageViewModel.originalSource = source;
1098
+ this._changeDetector.detectChanges();
1072
1099
  }
1073
- else {
1074
- newW = this._resizeCanvasHeight * aspect;
1100
+ catch (error) {
1101
+ handleFallback();
1075
1102
  }
1076
- resizeCanvas.width = Math.round(newW);
1077
- resizeCanvas.height = Math.round(newH);
1078
- // Ensure transparent background before drawing
1079
- ctx.clearRect(0, 0, resizeCanvas.width, resizeCanvas.height);
1080
- ctx.drawImage(img, 0, 0, resizeCanvas.width, resizeCanvas.height);
1081
- const mime = this._detectPreferredMime(source);
1082
- const resizedSource = mime === 'image/jpeg'
1083
- ? resizeCanvas.toDataURL('image/jpeg', 0.92) // only if original was JPEG
1084
- : resizeCanvas.toDataURL(mime); // PNG/WebP keep alpha
1085
- imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
1086
- imageViewModel.originalSource = source;
1087
- this._changeDetector.detectChanges();
1088
1103
  };
1089
1104
  img.src = source;
1090
1105
  }
1091
- _detectPreferredMime(source) {
1092
- // Data URI check
1093
- const m = source.match(/^data:(image\/[a-zA-Z+.-]+);base64,/);
1094
- if (m) {
1095
- const t = m[1].toLowerCase();
1096
- if (t === 'image/png' || t === 'image/webp' || t === 'image/jpeg')
1097
- return t;
1106
+ _handleMimeTypes(imageSource) {
1107
+ // When we got base64 data
1108
+ if (imageSource.startsWith('data:')) {
1109
+ const match = imageSource.match(/^data:(image\/(png|webp|jpeg|jpg))/i);
1110
+ return match ? match[1].toLowerCase() : 'image/png';
1111
+ }
1112
+ // when we got an URL.
1113
+ const extension = imageSource.substring(imageSource.lastIndexOf('.') + 1).toLowerCase();
1114
+ switch (extension) {
1115
+ case 'png':
1116
+ return 'image/png';
1117
+ case 'webp':
1118
+ return 'image/webp';
1119
+ case 'jpg':
1120
+ case 'jpeg':
1121
+ return 'image/jpeg';
1122
+ default:
1123
+ return 'image/png';
1098
1124
  }
1099
- const lower = source.toLowerCase();
1100
- if (lower.endsWith('.png'))
1101
- return 'image/png';
1102
- if (lower.endsWith('.webp'))
1103
- return 'image/webp';
1104
- if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
1105
- return 'image/jpeg';
1106
- return 'image/png';
1107
1125
  }
1108
1126
  _scrollCarouselToIndex() {
1109
1127
  if (this.currentIndex > -1 && this.currentIndex <= this.images.length) {
@@ -1117,147 +1135,137 @@ class ImageCarouselComponent {
1117
1135
  }
1118
1136
  }
1119
1137
  }
1120
- 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 }); }
1138
+ 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 }); }
1121
1139
  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: `
1122
- <div id="product_page_carousel">
1123
- <div id="product_page_carousel_items">
1124
- @if (showLoader) {
1125
- <co-loader></co-loader>
1140
+ <div id="product_page_carousel">
1141
+ <div id="product_page_carousel_items">
1142
+ @if (showLoader) {
1143
+ <co-loader></co-loader>
1144
+ }
1145
+ <div #carousel class="inner-carousel">
1146
+ <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1147
+ @if (imageViewModels[0]) {
1148
+ <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1149
+ <img [src]="imageViewModels[0].source">
1150
+ </div>
1151
+ }
1152
+ @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1153
+ <div class="carousel-item"
1154
+ [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1155
+ <img [src]="imageViewModel.source">
1156
+ </div>
1126
1157
  }
1127
- <div #carousel class="inner-carousel">
1128
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1129
- @if (imageViewModels[0]) {
1130
- <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1131
- <img [src]="imageViewModels[0].source">
1132
- </div>
1133
- }
1134
- @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1135
- <div class="carousel-item"
1136
- [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1137
- <img [src]="imageViewModel.source">
1138
- </div>
1139
- }
1140
- @if (imageViewModels && imageViewModels.length > 1) {
1141
- <div class="carousel-scroller-layer">
1142
- @if (currentIndex > 0) {
1143
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1144
- }
1145
- @if (currentIndex < images.length - 1) {
1146
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1147
- }
1148
- </div>
1149
- }
1150
- </div>
1151
- </div>
1152
-
1153
- <div id="product_page_carousel_thumbs">
1154
1158
  @if (imageViewModels && imageViewModels.length > 1) {
1155
- <co-scroll-container class="scroll-container">
1156
- @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1157
- <div class="carousel-thumb"
1158
- [class.active]="index === currentIndex">
1159
- <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1160
- </div>
1159
+ <div class="carousel-scroller-layer">
1160
+ @if (currentIndex > 0) {
1161
+ <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1161
1162
  }
1162
- </co-scroll-container>
1163
+ @if (currentIndex < images.length - 1) {
1164
+ <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1165
+ }
1166
+ </div>
1163
1167
  }
1164
1168
  </div>
1165
1169
  </div>
1166
- <!-- Modal (real popup) -->
1167
- @if (isPopupOpen) {
1168
- <div
1169
- class="image-modal"
1170
- (click)="closePopup()"
1171
- role="dialog"
1172
- aria-modal="true"
1173
- aria-label="Image preview"
1174
- >
1175
- <div class="image-modal__content" (click)="$event.stopPropagation()">
1176
- <button
1177
- class="image-modal__close"
1178
- type="button"
1179
- aria-label="Close"
1180
- (click)="closePopup()"
1181
- >
1182
- ×
1183
- </button>
1184
- <img [src]="selectedImage?.originalSource" alt="Image preview" />
1185
- </div>
1170
+
1171
+ <div id="product_page_carousel_thumbs">
1172
+ @if (imageViewModels && imageViewModels.length > 1) {
1173
+ <co-scroll-container class="scroll-container">
1174
+ @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1175
+ <div class="carousel-thumb"
1176
+ [class.active]="index === currentIndex">
1177
+ <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1178
+ </div>
1179
+ }
1180
+ </co-scroll-container>
1181
+ }
1182
+ </div>
1183
+ </div>
1184
+
1185
+ <div cdkOverlayOrigin #trigger="cdkOverlayOrigin"></div>
1186
+ <ng-template
1187
+ cdkConnectedOverlay
1188
+ [cdkConnectedOverlayOrigin]="trigger"
1189
+ [cdkConnectedOverlayOpen]="isPopupOpen"
1190
+ [cdkConnectedOverlayHasBackdrop]="true"
1191
+ (backdropClick)="closePopup()">
1192
+ <div class="image-modal" role="dialog" aria-modal="true" aria-label="Image preview">
1193
+ <div class="image-modal__content">
1194
+ <button class="image-modal__close" type="button" aria-label="Close" (click)="closePopup()">
1195
+ <co-icon [iconData]="iconCacheService.getIcon(icons.CrossSkinny)"></co-icon>
1196
+ </button>
1197
+ <img [src]="selectedImage?.originalSource" alt="Image preview"/>
1186
1198
  </div>
1187
- }
1188
- `, 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 }); }
1199
+ </div>
1200
+ </ng-template>
1201
+ `, 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 }); }
1189
1202
  }
1190
1203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselComponent, decorators: [{
1191
1204
  type: Component,
1192
1205
  args: [{ selector: 'app-image-carousel', template: `
1193
- <div id="product_page_carousel">
1194
- <div id="product_page_carousel_items">
1195
- @if (showLoader) {
1196
- <co-loader></co-loader>
1206
+ <div id="product_page_carousel">
1207
+ <div id="product_page_carousel_items">
1208
+ @if (showLoader) {
1209
+ <co-loader></co-loader>
1210
+ }
1211
+ <div #carousel class="inner-carousel">
1212
+ <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1213
+ @if (imageViewModels[0]) {
1214
+ <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1215
+ <img [src]="imageViewModels[0].source">
1216
+ </div>
1217
+ }
1218
+ @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1219
+ <div class="carousel-item"
1220
+ [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1221
+ <img [src]="imageViewModel.source">
1222
+ </div>
1197
1223
  }
1198
- <div #carousel class="inner-carousel">
1199
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1200
- @if (imageViewModels[0]) {
1201
- <div class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1202
- <img [src]="imageViewModels[0].source">
1203
- </div>
1204
- }
1205
- @for (imageViewModel of imageViewModels.slice(1); track imageViewModel; let index = $index) {
1206
- <div class="carousel-item"
1207
- [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1208
- <img [src]="imageViewModel.source">
1209
- </div>
1210
- }
1211
- @if (imageViewModels && imageViewModels.length > 1) {
1212
- <div class="carousel-scroller-layer">
1213
- @if (currentIndex > 0) {
1214
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1215
- }
1216
- @if (currentIndex < images.length - 1) {
1217
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1218
- }
1219
- </div>
1220
- }
1221
- </div>
1222
- </div>
1223
-
1224
- <div id="product_page_carousel_thumbs">
1225
1224
  @if (imageViewModels && imageViewModels.length > 1) {
1226
- <co-scroll-container class="scroll-container">
1227
- @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1228
- <div class="carousel-thumb"
1229
- [class.active]="index === currentIndex">
1230
- <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1231
- </div>
1225
+ <div class="carousel-scroller-layer">
1226
+ @if (currentIndex > 0) {
1227
+ <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()"></div>
1232
1228
  }
1233
- </co-scroll-container>
1229
+ @if (currentIndex < images.length - 1) {
1230
+ <div class="carousel-item-scroller next" (click)="gotoNextSlide()"></div>
1231
+ }
1232
+ </div>
1234
1233
  }
1235
1234
  </div>
1236
1235
  </div>
1237
- <!-- Modal (real popup) -->
1238
- @if (isPopupOpen) {
1239
- <div
1240
- class="image-modal"
1241
- (click)="closePopup()"
1242
- role="dialog"
1243
- aria-modal="true"
1244
- aria-label="Image preview"
1245
- >
1246
- <div class="image-modal__content" (click)="$event.stopPropagation()">
1247
- <button
1248
- class="image-modal__close"
1249
- type="button"
1250
- aria-label="Close"
1251
- (click)="closePopup()"
1252
- >
1253
- ×
1254
- </button>
1255
- <img [src]="selectedImage?.originalSource" alt="Image preview" />
1256
- </div>
1236
+
1237
+ <div id="product_page_carousel_thumbs">
1238
+ @if (imageViewModels && imageViewModels.length > 1) {
1239
+ <co-scroll-container class="scroll-container">
1240
+ @for (imageViewModel of imageViewModels; track imageViewModel; let index = $index) {
1241
+ <div class="carousel-thumb"
1242
+ [class.active]="index === currentIndex">
1243
+ <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1244
+ </div>
1245
+ }
1246
+ </co-scroll-container>
1247
+ }
1248
+ </div>
1249
+ </div>
1250
+
1251
+ <div cdkOverlayOrigin #trigger="cdkOverlayOrigin"></div>
1252
+ <ng-template
1253
+ cdkConnectedOverlay
1254
+ [cdkConnectedOverlayOrigin]="trigger"
1255
+ [cdkConnectedOverlayOpen]="isPopupOpen"
1256
+ [cdkConnectedOverlayHasBackdrop]="true"
1257
+ (backdropClick)="closePopup()">
1258
+ <div class="image-modal" role="dialog" aria-modal="true" aria-label="Image preview">
1259
+ <div class="image-modal__content">
1260
+ <button class="image-modal__close" type="button" aria-label="Close" (click)="closePopup()">
1261
+ <co-icon [iconData]="iconCacheService.getIcon(icons.CrossSkinny)"></co-icon>
1262
+ </button>
1263
+ <img [src]="selectedImage?.originalSource" alt="Image preview"/>
1257
1264
  </div>
1258
- }
1259
- `, 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"] }]
1260
- }], ctorParameters: () => [{ type: ProductConnectorService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { carousel: [{
1265
+ </div>
1266
+ </ng-template>
1267
+ `, 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"] }]
1268
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: ProductConnectorService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }], propDecorators: { carousel: [{
1261
1269
  type: ViewChild,
1262
1270
  args: ['carousel', { read: ElementRef }]
1263
1271
  }], onEsc: [{
@@ -1836,10 +1844,15 @@ class ProductRelatedComponent {
1836
1844
  async _loadImages() {
1837
1845
  this.articleViewModels.forEach(avm => {
1838
1846
  if (avm.article.image) {
1839
- this._iOne.getImageForCoDocument(avm.article.image, false).then(imageContent => avm.imageData = imageContent.image);
1847
+ this._iOne.getImageForCoDocument(avm.article.image, false).then(imageContent => this._handleImageData(avm, imageContent));
1840
1848
  }
1841
1849
  });
1842
1850
  }
1851
+ _handleImageData(avm, imageContent) {
1852
+ if (imageContent && imageContent.image) {
1853
+ avm.imageData = imageContent.image;
1854
+ }
1855
+ }
1843
1856
  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 }); }
1844
1857
  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: `
1845
1858
  @if (articles && articles.length > 0) {
@@ -1868,7 +1881,7 @@ class ProductRelatedComponent {
1868
1881
  </co-scroll-container>
1869
1882
  </div>
1870
1883
  }
1871
- `, isInline: true, styles: [":host{display:block}.article-wrapper{display:flex;flex-direction:row;flex:1;min-width:25%}.article-wrapper ::ng-deep co-tile{transition:all .14s ease-out;border:1px solid transparent;padding:10px 20px;display:flex;flex-direction:column;color:#171721;justify-content:space-between}.article-wrapper ::ng-deep co-tile .price{display:block}.article-wrapper ::ng-deep co-tile .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:30px}.article-wrapper ::ng-deep co-tile .tile-bottom{display:flex;flex-direction:column;gap:5px}.article-wrapper ::ng-deep co-tile:hover{border:1px solid #DCE4EA}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon{width:24px;height:24px}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon svg [fill]{fill:#fff}.article-wrapper ::ng-deep co-tile.small{max-width:189px;width:100%;height:100%;cursor:pointer}.article-wrapper ::ng-deep co-tile.small:hover .tile-bottom .left-buttons{margin:0!important}.article-wrapper ::ng-deep co-tile.small .tile-wrapper{outline:none!important;padding-bottom:0;overflow:hidden;gap:10px;display:flex;flex-direction:column}.article-wrapper ::ng-deep co-tile.small .tile-wrapper div.image{height:100px}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini{pointer-events:all;padding:0!important;font-size:0;width:42px;height:42px;text-align:center;margin:0;border-radius:100%;background:#3e7eff;cursor:pointer;place-content:center;color:#fff}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini ::ng-deep co-icon{width:30px;height:30px}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom{outline:none!important;background:transparent!important}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom .price{color:#74b77f;margin:5px 0 0;font-weight:400;font-size:12px}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "app-header", inputs: ["label", "amount"] }, { kind: "component", type: i6.ScrollContainerComponent, selector: "co-scroll-container", inputs: ["vertical"] }, { kind: "component", type: i6.ArticleTileComponent, selector: "co-article-tile", inputs: ["imageData", "description", "price", "level", "isSelected", "isSmallModus", "hasConfigureButton", "hasThreeDButton", "hasCartButton"], outputs: ["contentClick", "configureButtonClick", "threeDButtonClick", "cartButtonClick"] }] }); }
1884
+ `, isInline: true, styles: [":host{display:block}.article-wrapper{display:flex;flex-direction:row;flex:1;justify-content:flex-start}.article-wrapper ::ng-deep co-tile{transition:all .14s ease-out;border:1px solid transparent;padding:10px;display:flex;flex-direction:column;color:#171721;box-sizing:border-box;justify-content:space-between}.article-wrapper ::ng-deep co-tile .price{display:block;padding:10px 0}.article-wrapper ::ng-deep co-tile .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:30px}.article-wrapper ::ng-deep co-tile .tile-bottom{display:flex;flex-direction:column;gap:5px}.article-wrapper ::ng-deep co-tile:hover{border:1px solid #DCE4EA}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon{width:24px;height:24px}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon svg [fill]{fill:#fff}.article-wrapper ::ng-deep co-tile.small{width:100%;height:100%;cursor:pointer}.article-wrapper ::ng-deep co-tile.small:hover .tile-bottom .left-buttons{margin:0!important}.article-wrapper ::ng-deep co-tile.small .tile-wrapper{outline:none!important;padding-bottom:0;overflow:hidden;gap:10px;display:flex;flex-direction:column}.article-wrapper ::ng-deep co-tile.small .tile-wrapper div.image{height:100px}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .no-image-wrapper{min-height:100px;display:flex;align-items:center}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini{pointer-events:all;padding:0!important;font-size:0;width:42px;height:42px;text-align:center;margin:0;border-radius:100%;background:#3e7eff;cursor:pointer;place-content:center;color:#fff}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini ::ng-deep co-icon{width:30px;height:30px}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom{outline:none!important;background:transparent!important}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom .price{color:#74b77f;margin:5px 0 0;font-weight:400;font-size:12px}\n"], dependencies: [{ kind: "component", type: HeaderComponent, selector: "app-header", inputs: ["label", "amount"] }, { kind: "component", type: i6.ScrollContainerComponent, selector: "co-scroll-container", inputs: ["vertical"] }, { kind: "component", type: i6.ArticleTileComponent, selector: "co-article-tile", inputs: ["imageData", "description", "price", "level", "isSelected", "isSmallModus", "hasConfigureButton", "hasThreeDButton", "hasCartButton"], outputs: ["contentClick", "configureButtonClick", "threeDButtonClick", "cartButtonClick"] }] }); }
1872
1885
  }
1873
1886
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductRelatedComponent, decorators: [{
1874
1887
  type: Component,
@@ -1899,7 +1912,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1899
1912
  </co-scroll-container>
1900
1913
  </div>
1901
1914
  }
1902
- `, standalone: false, styles: [":host{display:block}.article-wrapper{display:flex;flex-direction:row;flex:1;min-width:25%}.article-wrapper ::ng-deep co-tile{transition:all .14s ease-out;border:1px solid transparent;padding:10px 20px;display:flex;flex-direction:column;color:#171721;justify-content:space-between}.article-wrapper ::ng-deep co-tile .price{display:block}.article-wrapper ::ng-deep co-tile .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:30px}.article-wrapper ::ng-deep co-tile .tile-bottom{display:flex;flex-direction:column;gap:5px}.article-wrapper ::ng-deep co-tile:hover{border:1px solid #DCE4EA}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon{width:24px;height:24px}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon svg [fill]{fill:#fff}.article-wrapper ::ng-deep co-tile.small{max-width:189px;width:100%;height:100%;cursor:pointer}.article-wrapper ::ng-deep co-tile.small:hover .tile-bottom .left-buttons{margin:0!important}.article-wrapper ::ng-deep co-tile.small .tile-wrapper{outline:none!important;padding-bottom:0;overflow:hidden;gap:10px;display:flex;flex-direction:column}.article-wrapper ::ng-deep co-tile.small .tile-wrapper div.image{height:100px}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini{pointer-events:all;padding:0!important;font-size:0;width:42px;height:42px;text-align:center;margin:0;border-radius:100%;background:#3e7eff;cursor:pointer;place-content:center;color:#fff}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini ::ng-deep co-icon{width:30px;height:30px}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom{outline:none!important;background:transparent!important}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom .price{color:#74b77f;margin:5px 0 0;font-weight:400;font-size:12px}\n"] }]
1915
+ `, standalone: false, styles: [":host{display:block}.article-wrapper{display:flex;flex-direction:row;flex:1;justify-content:flex-start}.article-wrapper ::ng-deep co-tile{transition:all .14s ease-out;border:1px solid transparent;padding:10px;display:flex;flex-direction:column;color:#171721;box-sizing:border-box;justify-content:space-between}.article-wrapper ::ng-deep co-tile .price{display:block;padding:10px 0}.article-wrapper ::ng-deep co-tile .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;height:30px}.article-wrapper ::ng-deep co-tile .tile-bottom{display:flex;flex-direction:column;gap:5px}.article-wrapper ::ng-deep co-tile:hover{border:1px solid #DCE4EA}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon{width:24px;height:24px}.article-wrapper ::ng-deep co-tile .tile-extra-bottom co-button co-icon svg [fill]{fill:#fff}.article-wrapper ::ng-deep co-tile.small{width:100%;height:100%;cursor:pointer}.article-wrapper ::ng-deep co-tile.small:hover .tile-bottom .left-buttons{margin:0!important}.article-wrapper ::ng-deep co-tile.small .tile-wrapper{outline:none!important;padding-bottom:0;overflow:hidden;gap:10px;display:flex;flex-direction:column}.article-wrapper ::ng-deep co-tile.small .tile-wrapper div.image{height:100px}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .no-image-wrapper{min-height:100px;display:flex;align-items:center}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini{pointer-events:all;padding:0!important;font-size:0;width:42px;height:42px;text-align:center;margin:0;border-radius:100%;background:#3e7eff;cursor:pointer;place-content:center;color:#fff}.article-wrapper ::ng-deep co-tile.small .tile-wrapper .tile-extra-bottom ::ng-deep co-button.card-button.mini ::ng-deep co-icon{width:30px;height:30px}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom{outline:none!important;background:transparent!important}.article-wrapper ::ng-deep co-tile.small .tile-extra-bottom .price{color:#74b77f;margin:5px 0 0;font-weight:400;font-size:12px}\n"] }]
1903
1916
  }], ctorParameters: () => [{ type: ProductConnectorService }, { type: ProductEventService }, { type: ProductConnectorAdapterService }, { type: ProductSettingsService }], propDecorators: { refType: [{
1904
1917
  type: Input
1905
1918
  }], label: [{
@@ -1963,7 +1976,7 @@ class ProductStockComponent {
1963
1976
  <div class="pp-default-label" [class.in-stock]="inStock" [textContent]="stockLabel | localize"></div>
1964
1977
  </div>
1965
1978
  </div>
1966
- `, isInline: true, styles: [":host{display:block}.product-stock-wrapper{display:flex;flex-direction:row;align-items:center;border-top:1px solid #f6f5f4;border-bottom:1px solid #f6f5f4;padding:20px 15px;cursor:pointer}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:40px;height:37px}.product-stock-wrapper .product-stock-fields{display:flex;flex-direction:row}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:14px;margin:0;color:#2b60a7;text-decoration:underline}.product-stock-wrapper .product-stock-fields .pp-default-label:after{content:\"\";width:10px;height:10px;border-radius:10px;background:#f15152;display:inline-block;margin:0 0 0 15px}.product-stock-wrapper .product-stock-fields .pp-default-label.in-stock:after{background:#74b77f}@media screen and (max-width: 400px){.product-stock-wrapper{padding:15px 0 15px 10px}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:32px;height:28px}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:13px}}\n"], dependencies: [{ kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
1979
+ `, isInline: true, styles: [":host{display:block}.product-stock-wrapper{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 15px;cursor:pointer}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:40px;height:37px}.product-stock-wrapper .product-stock-fields{display:flex;flex-direction:row}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:14px;margin:0;color:#2b60a7;text-decoration:underline}.product-stock-wrapper .product-stock-fields .pp-default-label:after{content:\"\";width:10px;height:10px;border-radius:10px;background:#f15152;display:inline-block;margin:0 0 0 15px}.product-stock-wrapper .product-stock-fields .pp-default-label.in-stock:after{background:#74b77f}@media screen and (max-width: 400px){.product-stock-wrapper{padding:15px 0 15px 10px}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:32px;height:28px}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:13px}}\n"], dependencies: [{ kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
1967
1980
  }
1968
1981
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductStockComponent, decorators: [{
1969
1982
  type: Component,
@@ -1976,59 +1989,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1976
1989
  <div class="pp-default-label" [class.in-stock]="inStock" [textContent]="stockLabel | localize"></div>
1977
1990
  </div>
1978
1991
  </div>
1979
- `, standalone: false, styles: [":host{display:block}.product-stock-wrapper{display:flex;flex-direction:row;align-items:center;border-top:1px solid #f6f5f4;border-bottom:1px solid #f6f5f4;padding:20px 15px;cursor:pointer}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:40px;height:37px}.product-stock-wrapper .product-stock-fields{display:flex;flex-direction:row}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:14px;margin:0;color:#2b60a7;text-decoration:underline}.product-stock-wrapper .product-stock-fields .pp-default-label:after{content:\"\";width:10px;height:10px;border-radius:10px;background:#f15152;display:inline-block;margin:0 0 0 15px}.product-stock-wrapper .product-stock-fields .pp-default-label.in-stock:after{background:#74b77f}@media screen and (max-width: 400px){.product-stock-wrapper{padding:15px 0 15px 10px}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:32px;height:28px}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:13px}}\n"] }]
1992
+ `, standalone: false, styles: [":host{display:block}.product-stock-wrapper{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 15px;cursor:pointer}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:40px;height:37px}.product-stock-wrapper .product-stock-fields{display:flex;flex-direction:row}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:14px;margin:0;color:#2b60a7;text-decoration:underline}.product-stock-wrapper .product-stock-fields .pp-default-label:after{content:\"\";width:10px;height:10px;border-radius:10px;background:#f15152;display:inline-block;margin:0 0 0 15px}.product-stock-wrapper .product-stock-fields .pp-default-label.in-stock:after{background:#74b77f}@media screen and (max-width: 400px){.product-stock-wrapper{padding:15px 0 15px 10px}.product-stock-wrapper .stock-icon{margin:0 15px 0 0;width:32px;height:28px}.product-stock-wrapper .product-stock-fields .pp-default-label{font-size:13px}}\n"] }]
1980
1993
  }], ctorParameters: () => [{ type: ProductConnectorService }, { type: IconCacheService }], propDecorators: { goodId: [{
1981
1994
  type: Input
1982
1995
  }], openStockEvent: [{
1983
1996
  type: Output
1984
1997
  }] } });
1985
1998
 
1986
- class ProductDeliveryComponent {
1987
- set stockAndDelivery(value) {
1988
- if (value) {
1989
- this.deliveryDescription = value.deliveryDescription;
1990
- if (this.deliveryDescription.length > 0 && this.deliveryDescription[0] === ' ') {
1991
- this.deliveryDescription = this._localizePipe.transform('ASK_FOR_INFORMATION');
1992
- }
1993
- }
1994
- }
1995
- constructor(_localizePipe, _iOne, _iconCache) {
1996
- this._localizePipe = _localizePipe;
1997
- this._iOne = _iOne;
1998
- this._iconCache = _iconCache;
1999
- this.icon = IconEnum;
2000
- this.iconData = this._iconCache.getIcon(this.icon.Truck);
2001
- }
2002
- ngOnInit() {
2003
- }
2004
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryComponent, deps: [{ token: LocalizePipe }, { token: ProductConnectorService }, { token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
2005
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ProductDeliveryComponent, isStandalone: false, selector: "app-product-delivery", inputs: { stockAndDelivery: "stockAndDelivery" }, ngImport: i0, template: `
2006
- <!--<app-header [label]="'DELIVERY_TIME_PERIOD' | localize"></app-header>-->
2007
- <div class="product-delivery-wrapper">
2008
- <co-icon class="delivery-icon" [iconData]="iconData"></co-icon>
2009
- <div class="product-delivery-fields">
2010
- <div class="pp-default-label" [textContent]="'DELIVERY_TIME_PERIOD' | localize"></div>
2011
- <div class="pp-default-description" [textContent]="deliveryDescription | date:'dd MMMM yyyy'"></div>
2012
- </div>
2013
- </div>
2014
- `, isInline: true, styles: [":host{display:block}.product-delivery-wrapper{display:flex;flex-direction:row;align-items:center;border-bottom:1px solid #f6f5f4;padding:20px 15px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:40px;height:37px}.product-delivery-wrapper .product-delivery-fields{display:flex;flex-direction:column}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:14px;margin:0}@media screen and (max-width: 400px){.product-delivery-wrapper{padding:15px 0 15px 10px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:32px;height:28px}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:13px}}\n"], dependencies: [{ kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
2015
- }
2016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryComponent, decorators: [{
2017
- type: Component,
2018
- args: [{ selector: 'app-product-delivery', template: `
2019
- <!--<app-header [label]="'DELIVERY_TIME_PERIOD' | localize"></app-header>-->
2020
- <div class="product-delivery-wrapper">
2021
- <co-icon class="delivery-icon" [iconData]="iconData"></co-icon>
2022
- <div class="product-delivery-fields">
2023
- <div class="pp-default-label" [textContent]="'DELIVERY_TIME_PERIOD' | localize"></div>
2024
- <div class="pp-default-description" [textContent]="deliveryDescription | date:'dd MMMM yyyy'"></div>
2025
- </div>
2026
- </div>
2027
- `, standalone: false, styles: [":host{display:block}.product-delivery-wrapper{display:flex;flex-direction:row;align-items:center;border-bottom:1px solid #f6f5f4;padding:20px 15px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:40px;height:37px}.product-delivery-wrapper .product-delivery-fields{display:flex;flex-direction:column}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:14px;margin:0}@media screen and (max-width: 400px){.product-delivery-wrapper{padding:15px 0 15px 10px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:32px;height:28px}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:13px}}\n"] }]
2028
- }], ctorParameters: () => [{ type: LocalizePipe }, { type: ProductConnectorService }, { type: IconCacheService }], propDecorators: { stockAndDelivery: [{
2029
- type: Input
2030
- }] } });
2031
-
2032
1999
  class ProductAdditionalInfoComponent {
2033
2000
  set article(value) {
2034
2001
  if (value) {
@@ -2063,12 +2030,14 @@ class ProductAdditionalInfoComponent {
2063
2030
  mainArticle = await this._connectorService.getSuperArticle(this.article.superArticleNr);
2064
2031
  this._superArticles.set(this.article.superArticleNr, mainArticle);
2065
2032
  }
2066
- mainArticle.texts.forEach((txt) => {
2067
- if (BitUtils.IsFullDescription(txt.publication)) {
2068
- const safeTxt = this._sanitizer.sanitize(SecurityContext.HTML, txt.text);
2069
- texts.push(safeTxt);
2070
- }
2071
- });
2033
+ if (mainArticle) {
2034
+ mainArticle.texts.forEach((txt) => {
2035
+ if (BitUtils.IsFullDescription(txt.publication)) {
2036
+ const safeTxt = this._sanitizer.sanitize(SecurityContext.HTML, txt.text);
2037
+ texts.push(safeTxt);
2038
+ }
2039
+ });
2040
+ }
2072
2041
  resolve(texts);
2073
2042
  }
2074
2043
  else {
@@ -2567,6 +2536,7 @@ class RenderCarouselComponent {
2567
2536
  this.resizing = false;
2568
2537
  this.showLoader = true;
2569
2538
  this.renderedImageLoaded = false;
2539
+ this.listOfRenders = [];
2570
2540
  // For now we will just use mock data
2571
2541
  this.renderAngles = [0, -45, -90, -135, -180, -225, -270, -315];
2572
2542
  this.currentRenderAngleIndex = 0;
@@ -2582,12 +2552,14 @@ class RenderCarouselComponent {
2582
2552
  this._changeDetector.detectChanges();
2583
2553
  }), this._appEventService.onRenderImageReceived.subscribe((image) => {
2584
2554
  this.renderedImage = image;
2555
+ this.listOfRenders.push(image);
2585
2556
  this.showLoader = false;
2586
2557
  this._changeDetector.detectChanges();
2587
2558
  }));
2588
2559
  }
2589
2560
  ngOnDestroy() {
2590
2561
  this.carousel = undefined;
2562
+ this.listOfRenders = [];
2591
2563
  this._subs.forEach(s => s.unsubscribe());
2592
2564
  }
2593
2565
  ngOnChanges() {
@@ -2613,7 +2585,7 @@ class RenderCarouselComponent {
2613
2585
  this._appEventService.onGetRenderForRenderCarousel.next(renderParams);
2614
2586
  }
2615
2587
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderCarouselComponent, deps: [{ token: IconCacheService }, { token: ProductEventService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2616
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: RenderCarouselComponent, isStandalone: false, selector: "app-render-carousel", inputs: { showRefresh: "showRefresh", article: "article" }, host: { listeners: { "window:resize": "handleWindowResize()", "swipeleft": "gotoNextSlide()", "swiperight": "gotoPrevSlide()" }, properties: { "class.resizing": "this.resizing" } }, viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
2588
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: RenderCarouselComponent, isStandalone: false, selector: "app-render-carousel", inputs: { showRefresh: "showRefresh", article: "article" }, host: { listeners: { "window:resize": "handleWindowResize()", "swipeleft": "gotoNextSlide()", "swiperight": "gotoPrevSlide()" }, properties: { "class.resizing": "this.resizing" } }, viewQueries: [{ propertyName: "carousel", first: true, predicate: ["carousel"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
2617
2589
  <div id="product_page_carousel">
2618
2590
  <div id="product_page_carousel_render_items">
2619
2591
  <co-loader></co-loader>
@@ -2636,8 +2608,19 @@ class RenderCarouselComponent {
2636
2608
  </div>
2637
2609
  </div>
2638
2610
  </div>
2611
+
2612
+ @if (listOfRenders && listOfRenders.length > 0) {
2613
+ <!-- <div class="renderThumbs">-->
2614
+ <!-- @for (render of listOfRenders; track render) {-->
2615
+ <!-- <div class="renderThumbnail">-->
2616
+ <!-- <img [src]="render" alt="">-->
2617
+ <!-- </div>-->
2618
+ <!-- }-->
2619
+ <!-- </div>-->
2620
+ }
2621
+
2639
2622
  </div>
2640
- `, 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_render_items{position:relative;margin-bottom:10px;min-height:400px}#product_page_carousel #product_page_carousel_render_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:700px}#product_page_carousel .inner-carousel .inner-carousel-render img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;top:0;left:0;z-index:100}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller{opacity:0;position:absolute;border-radius:50%;z-index:100;background:#fff6;color:#fff;width:30px;height:30px;top:calc(50% - 15px);cursor:pointer;transition:opacity .3s}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller co-icon{color:#fff}#product_page_carousel .carousel-scroller-layer .prev{left:15px}#product_page_carousel .carousel-scroller-layer .next{right:15px}#product_page_carousel .carousel-scroller-layer:hover .carousel-item-scroller{opacity:1}#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}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-image{opacity:0;transition:opacity 1.5s ease-in-out}.fade-image.loaded{opacity:1}\n"], dependencies: [{ kind: "component", type: i6.LoaderComponent, selector: "co-loader" }, { kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2623
+ `, isInline: true, styles: [":host{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_render_items{position:relative;margin-bottom:10px;min-height:400px}#product_page_carousel #product_page_carousel_render_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:700px}#product_page_carousel .inner-carousel .inner-carousel-render img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;top:0;left:0;z-index:100}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller{opacity:0;position:absolute;border-radius:50%;z-index:100;background:#fff6;color:#fff;width:30px;height:30px;top:calc(50% - 15px);cursor:pointer;transition:opacity .3s}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller co-icon{color:#fff}#product_page_carousel .carousel-scroller-layer .prev{left:15px}#product_page_carousel .carousel-scroller-layer .next{right:15px}#product_page_carousel .carousel-scroller-layer:hover .carousel-item-scroller{opacity:1}#product_page_carousel .renderThumbs{display:flex;justify-content:start;gap:10px;margin-top:10px}#product_page_carousel .renderThumbs img{width:100px;height:100px;object-fit:contain}#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}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-image{opacity:0;transition:opacity 1.5s ease-in-out}.fade-image.loaded{opacity:1}\n"], dependencies: [{ kind: "component", type: i6.LoaderComponent, selector: "co-loader" }, { kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2641
2624
  }
2642
2625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: RenderCarouselComponent, decorators: [{
2643
2626
  type: Component,
@@ -2664,8 +2647,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2664
2647
  </div>
2665
2648
  </div>
2666
2649
  </div>
2650
+
2651
+ @if (listOfRenders && listOfRenders.length > 0) {
2652
+ <!-- <div class="renderThumbs">-->
2653
+ <!-- @for (render of listOfRenders; track render) {-->
2654
+ <!-- <div class="renderThumbnail">-->
2655
+ <!-- <img [src]="render" alt="">-->
2656
+ <!-- </div>-->
2657
+ <!-- }-->
2658
+ <!-- </div>-->
2659
+ }
2660
+
2667
2661
  </div>
2668
- `, 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_render_items{position:relative;margin-bottom:10px;min-height:400px}#product_page_carousel #product_page_carousel_render_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:700px}#product_page_carousel .inner-carousel .inner-carousel-render img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;top:0;left:0;z-index:100}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller{opacity:0;position:absolute;border-radius:50%;z-index:100;background:#fff6;color:#fff;width:30px;height:30px;top:calc(50% - 15px);cursor:pointer;transition:opacity .3s}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller co-icon{color:#fff}#product_page_carousel .carousel-scroller-layer .prev{left:15px}#product_page_carousel .carousel-scroller-layer .next{right:15px}#product_page_carousel .carousel-scroller-layer:hover .carousel-item-scroller{opacity:1}#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}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-image{opacity:0;transition:opacity 1.5s ease-in-out}.fade-image.loaded{opacity:1}\n"] }]
2662
+ `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{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_render_items{position:relative;margin-bottom:10px;min-height:400px}#product_page_carousel #product_page_carousel_render_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:700px}#product_page_carousel .inner-carousel .inner-carousel-render img{width:100%;height:auto;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;top:0;left:0;z-index:100}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller{opacity:0;position:absolute;border-radius:50%;z-index:100;background:#fff6;color:#fff;width:30px;height:30px;top:calc(50% - 15px);cursor:pointer;transition:opacity .3s}#product_page_carousel .carousel-scroller-layer .carousel-item-scroller co-icon{color:#fff}#product_page_carousel .carousel-scroller-layer .prev{left:15px}#product_page_carousel .carousel-scroller-layer .next{right:15px}#product_page_carousel .carousel-scroller-layer:hover .carousel-item-scroller{opacity:1}#product_page_carousel .renderThumbs{display:flex;justify-content:start;gap:10px;margin-top:10px}#product_page_carousel .renderThumbs img{width:100px;height:100px;object-fit:contain}#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}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-image{opacity:0;transition:opacity 1.5s ease-in-out}.fade-image.loaded{opacity:1}\n"] }]
2669
2663
  }], ctorParameters: () => [{ type: IconCacheService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }], propDecorators: { carousel: [{
2670
2664
  type: ViewChild,
2671
2665
  args: ['carousel', { read: ElementRef }]
@@ -2795,6 +2789,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2795
2789
  }] } });
2796
2790
 
2797
2791
  class ProductPageComponent {
2792
+ showClass() {
2793
+ return true;
2794
+ }
2798
2795
  set sku(value) {
2799
2796
  if (value) {
2800
2797
  if (this.configuring) {
@@ -2846,12 +2843,14 @@ class ProductPageComponent {
2846
2843
  get currentView() {
2847
2844
  return this._currentView;
2848
2845
  }
2849
- constructor(_ione, iconCache, settingsService, appEventService, _changeDetector) {
2850
- this._ione = _ione;
2846
+ constructor(iconCache, settingsService, appEventService, _changeDetector, _ione, _configuringService, _configuratorSceneService) {
2851
2847
  this.iconCache = iconCache;
2852
2848
  this.settingsService = settingsService;
2853
2849
  this.appEventService = appEventService;
2854
2850
  this._changeDetector = _changeDetector;
2851
+ this._ione = _ione;
2852
+ this._configuringService = _configuringService;
2853
+ this._configuratorSceneService = _configuratorSceneService;
2855
2854
  this.icon = IconEnum;
2856
2855
  this.createFrozenArticle = true;
2857
2856
  this.isReturn = false;
@@ -2871,21 +2870,16 @@ class ProductPageComponent {
2871
2870
  this._fullScreen = false;
2872
2871
  this._subs = [];
2873
2872
  this._subs.push(this.appEventService.onForceRenderImage.subscribe((x) => {
2874
- if (this.selections.nativeElement) {
2875
- this.selections.nativeElement.forceRenderImage();
2876
- }
2873
+ // TODO
2877
2874
  }), this.settingsService.settingsLoaded.subscribe(loaded => this._handleSettingsLoaded(loaded)), this._pageLoadedSubscription = combineLatest([
2878
2875
  this._ione.controllerInitialized,
2879
2876
  this._ione.articleLoaded
2880
2877
  ]).subscribe(([initialized, articleLoaded]) => {
2881
2878
  if (initialized && articleLoaded) {
2882
2879
  this.settingsLoaded = initialized;
2880
+ this._initConfigurator();
2883
2881
  }
2884
- }),
2885
- // this._ione.controllerInitialized.subscribe((initialized: boolean) => {
2886
- // this.settingsLoaded = initialized;
2887
- // }),
2888
- this.appEventService.onAnswersAvailable.subscribe((answers) => {
2882
+ }), this.appEventService.onAnswersAvailable.subscribe((answers) => {
2889
2883
  if (answers && this.configurable) {
2890
2884
  this.showAddToCart = false;
2891
2885
  }
@@ -2893,10 +2887,17 @@ class ProductPageComponent {
2893
2887
  this.showAddToCart = true;
2894
2888
  }
2895
2889
  }), this.appEventService.onGetRenderForRenderCarousel.subscribe((renderParameters) => {
2896
- if (this.selections.nativeElement) {
2897
- this.selections.nativeElement.getRenderForRenderCarousel(renderParameters);
2890
+ this._createRenderForCarousel(renderParameters);
2891
+ }), this.appEventService.onArticleReceived.subscribe(article => this.setConfigPresetId(article.configPresetId)), this._configuringService.floorReady.subscribe((ready) => {
2892
+ if (ready) {
2893
+ this._startSceneInit();
2894
+ this._startConfigurator();
2898
2895
  }
2899
- }), this.appEventService.onArticleReceived.subscribe(article => this.setConfigPresetId(article.configPresetId)));
2896
+ }), this._configuringService.onRenderImageReceived.subscribe((image) => {
2897
+ appEventService.onRenderImageReceived.next(image);
2898
+ }), this._configuringService.onAnswersAvailable.subscribe((hasAnswers) => {
2899
+ appEventService.onAnswersAvailable.next(hasAnswers);
2900
+ }));
2900
2901
  }
2901
2902
  ngOnInit() {
2902
2903
  if (this._settings) {
@@ -2908,14 +2909,15 @@ class ProductPageComponent {
2908
2909
  }
2909
2910
  }
2910
2911
  ngOnDestroy() {
2912
+ this.settingsService.settings = undefined;
2913
+ this.settingsLoaded = false;
2911
2914
  this._subs.forEach(s => s.unsubscribe());
2912
2915
  if (this._initializedSub) {
2913
2916
  this._initializedSub.unsubscribe();
2914
2917
  }
2915
2918
  this._pageLoadedSubscription.unsubscribe();
2916
- this.configurator = undefined;
2917
- this.selections = undefined;
2918
2919
  this.fullscreenbutton = undefined;
2920
+ this._configuringService.isConfiguring = false;
2919
2921
  }
2920
2922
  setInstance(event) {
2921
2923
  if (event.detail) {
@@ -2944,7 +2946,6 @@ class ProductPageComponent {
2944
2946
  this.article = article;
2945
2947
  if (this.article) {
2946
2948
  this.configurable = this.article.goodType === 'B' && (this.article.isConfigurable || this.article.isConfigurable === undefined);
2947
- // this.configurable = this.article.goodType === 'B';
2948
2949
  if (this.configurable) {
2949
2950
  this.showAddToCart = false;
2950
2951
  this.currentView = SelectorType.TwoD;
@@ -2997,6 +2998,24 @@ class ProductPageComponent {
2997
2998
  this.showPresetDialog = false;
2998
2999
  this._savePreset();
2999
3000
  }
3001
+ handleBuildFinished(build) {
3002
+ if (this.threeD) {
3003
+ this._buildResult = build;
3004
+ this._configuringService.addBuildToScene(build);
3005
+ if (this.settingsService.settings && this.settingsService.settings.renderParameters) {
3006
+ // Start a render
3007
+ const options = {
3008
+ objectRotation: { x: 0, y: 43, z: 0 },
3009
+ margin: 5,
3010
+ cameraRotationX: 75,
3011
+ objectHeight: 500,
3012
+ objectWidth: 500,
3013
+ renderType: 0
3014
+ };
3015
+ this._configuringService.renderImage(build, options, true);
3016
+ }
3017
+ }
3018
+ }
3000
3019
  _savePreset() {
3001
3020
  this._ione.savePreset().then((success) => {
3002
3021
  if (success) {
@@ -3005,20 +3024,47 @@ class ProductPageComponent {
3005
3024
  }
3006
3025
  });
3007
3026
  }
3008
- 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 }); }
3009
- 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: `
3027
+ _initConfigurator() {
3028
+ // this should be async
3029
+ if (this.settingsLoaded) {
3030
+ this._configuringService.init(this.settings).then(done => {
3031
+ this._configuringService.isConfiguring = true;
3032
+ });
3033
+ }
3034
+ }
3035
+ _startConfigurator() {
3036
+ if (this.settingsLoaded) {
3037
+ const furnitureData = new ConfigurationResultObject();
3038
+ furnitureData.sku = this.sku;
3039
+ this._configuringService.configure(furnitureData).then(loaded => {
3040
+ });
3041
+ }
3042
+ }
3043
+ _startSceneInit() {
3044
+ if (this.settingsLoaded) {
3045
+ this._configuringService.handleLoadSceneContent();
3046
+ this._configuringService.scene = this._configuratorSceneService.scene;
3047
+ }
3048
+ }
3049
+ _createRenderForCarousel(renderOptions) {
3050
+ this._configuringService.renderImage(this._buildResult, renderOptions, false);
3051
+ }
3052
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageComponent, deps: [{ token: IconCacheService }, { token: ProductSettingsService }, { token: ProductEventService }, { token: i0.ChangeDetectorRef }, { token: ProductConnectorService }, { token: i5.ConfiguringService }, { token: i5.SceneService }], target: i0.ɵɵFactoryTarget.Component }); }
3053
+ 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" }, host: { properties: { "class.co-product-page": "this.showClass" } }, viewQueries: [{ propertyName: "fullscreenbutton", first: true, predicate: ["fullscreenbutton"], descendants: true, read: ElementRef }], ngImport: i0, template: `
3010
3054
  @if (settingsLoaded) {
3011
3055
  <div class="page-wrapper">
3012
3056
  <div class="page-wrapper-content">
3013
3057
  <div class="page-wrapper-left">
3014
3058
  <div class="product-image-container">
3015
3059
  <div class="product-page-block-selector-type">
3016
- <app-product-selector-type class="default-padding"
3017
- [(currentType)]="currentView"
3018
- [show2D]="configurable"
3019
- [show3D]="threeD"
3020
- ></app-product-selector-type>
3060
+ <app-product-selector-type
3061
+ class="default-padding"
3062
+ [(currentType)]="currentView"
3063
+ [show2D]="configurable"
3064
+ [show3D]="threeD">
3065
+ </app-product-selector-type>
3021
3066
  </div>
3067
+
3022
3068
  <div class="product-page-block-image default-padding" [class.full]="fullScreen">
3023
3069
  @if (!enableRenderCarousel) {
3024
3070
  <app-image-carousel
@@ -3033,120 +3079,125 @@ class ProductPageComponent {
3033
3079
  [article]="article">
3034
3080
  </app-render-carousel>
3035
3081
  }
3036
- @if (settingsLoaded && this.configurable) {
3037
- <threed-configurator
3038
- #configurator
3039
- class="threed-configurator"
3040
- [class.configurator-full-screen]="fullScreen"
3041
- [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
3042
- [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
3043
- </threed-configurator>
3082
+ @if (settingsLoaded) {
3083
+ <co-configurator-scene
3084
+ [class.show-full-screen]="fullScreen"
3085
+ [class.hide-3d-scene]="!show3D"
3086
+ [class.show-3d-scene]="show3D">
3087
+ </co-configurator-scene>
3044
3088
  }
3045
3089
  @if (show3D) {
3046
- <co-icon #fullscreenbutton class="fullscreen-button"
3047
- [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3048
- [iconData]="iconCache.getIcon(fullScreenIcon)"
3049
- (click)="showFullScreen()"></co-icon>
3090
+ <co-icon
3091
+ #fullscreenbutton
3092
+ class="fullscreen-button"
3093
+ [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3094
+ [iconData]="iconCache.getIcon(fullScreenIcon)"
3095
+ (click)="showFullScreen()">
3096
+ </co-icon>
3050
3097
  }
3051
3098
  @if (show3D && fullScreen) {
3052
- <co-icon class="threed-watermark"
3053
- [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
3099
+ <co-icon
3100
+ class="threed-watermark"
3101
+ [iconData]="iconCache.getIcon(icon.Logo)">
3102
+ </co-icon>
3054
3103
  }
3055
3104
  </div>
3056
3105
  </div>
3057
3106
  </div>
3058
3107
  <div class="page-wrapper-right">
3059
- <div class="product-page-block-description">
3060
- <app-product-description class="default-padding" [article]="article"></app-product-description>
3061
- </div>
3062
- <div class="product-page-block-additional">
3063
- <div class="product-page-block-additional-description">
3064
- <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
3108
+ <div class="product-page-scroll-container">
3109
+ <div class="product-page-block-description">
3110
+ <app-product-description
3111
+ class="default-padding"
3112
+ [article]="article">
3113
+ </app-product-description>
3065
3114
  </div>
3066
- <div class="product-page-block-price" [class.full]="configuring">
3067
- @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3068
- <div class="preset-container">
3069
- <co-button
3070
- class="save-preset-button"
3071
- [iconData]="iconCache.getIcon(icon.SaveDisk)"
3072
- [label]="'PRESET_SAVE_AS' | localize"
3073
- (onClick)="handleSavePreset()"
3074
- ></co-button>
3075
- </div>
3076
- }
3115
+ <div class="product-page-block-additional">
3116
+ <div class="product-page-block-additional-description">
3117
+ <app-product-additional-description
3118
+ class="default-padding"
3119
+ [article]="article">
3120
+ </app-product-additional-description>
3121
+ </div>
3122
+ <div class="product-page-block-price" [class.full]="configuring">
3123
+ @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3124
+ <div class="preset-container">
3125
+ <co-button
3126
+ class="save-preset-button"
3127
+ [iconData]="iconCache.getIcon(icon.SaveDisk)"
3128
+ [label]="'PRESET_SAVE_AS' | localize"
3129
+ (onClick)="handleSavePreset()">
3130
+ </co-button>
3131
+ </div>
3132
+ }
3133
+ @if (!configuring) {
3134
+ <app-product-price
3135
+ class="s-padding"
3136
+ [pricing]="article?.pricing"
3137
+ [configurable]="configurable">
3138
+ </app-product-price>
3139
+ }
3140
+
3141
+ @if (settingsLoaded) {
3142
+ <co-configurator
3143
+ [class.hide-configurator]="!configuring"
3144
+ [class.show-configurator]="configuring"
3145
+ [showLoader]="true"
3146
+ [animateSlideout]="false"
3147
+ [showHeaderInformation]="false"
3148
+ [canCloseConfigurator]="false"
3149
+ (buildResult)="handleBuildFinished($event)">
3150
+ </co-configurator>
3151
+ }
3152
+ </div>
3077
3153
  @if (!configuring) {
3078
- <app-product-price class="s-padding"
3079
- [pricing]="article?.pricing"
3080
- [configurable]="configurable"
3081
- ></app-product-price>
3154
+ <div class="product-page-block-addtocart no-padding product-action-buttons"
3155
+ [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3156
+ <app-product-addtocart
3157
+ [configurable]="configurable"
3158
+ [createFrozenArticle]="createFrozenArticle"
3159
+ [configuring]="configuring"
3160
+ [showAddToCart]="showAddToCart"
3161
+ [article]="article"
3162
+ [externalSource]="externalSource"
3163
+ [isReturn]="isReturn"
3164
+ (startConfiguration)="handleStartConfiguration()"
3165
+ (showRelatedPopup)="handlePopUpChange($event)">
3166
+ </app-product-addtocart>
3167
+ </div>
3082
3168
  }
3083
-
3084
- @if (settingsLoaded) {
3085
- <threed-selections #selections class="threed-selections"
3086
- [class.show-selections]="configuring"
3087
- [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
3088
- [class.default-padding]="!fullScreen"
3089
- [class.show-full-screen]="fullScreen"
3090
- [class.mini-scrollbar]="fullScreen"
3091
- [sku]="sku"
3092
- [settings]="settings"
3093
- (onUserActionFromThreeD)="configuring = true"
3094
- (instanceSet)="setInstance($event)"
3095
- (onImageReceived)="appEventService.onImageReceived.next($event)"
3096
- (onRenderStarted)="appEventService.onRenderStarted.next()"
3097
- (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
3098
- (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
3099
- (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
3100
- (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
3101
- (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
3102
- (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
3103
- (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
3104
- ></threed-selections>
3169
+ @if (configuring) {
3170
+ <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3171
+ <app-product-addtocart
3172
+ class="default-padding"
3173
+ [configurable]="false"
3174
+ [fullscreen]="fullScreen"
3175
+ [showAddToCart]="showAddToCart"
3176
+ [configuring]="configuring"
3177
+ [article]="article"
3178
+ [externalSource]="externalSource"
3179
+ [isReturn]="isReturn"
3180
+ (startConfiguration)="handleStartConfiguration()">
3181
+ </app-product-addtocart>
3182
+ </div>
3105
3183
  }
3106
- </div>
3107
- @if (!configuring) {
3108
- <div class="product-page-block-addtocart no-padding product-action-buttons"
3109
- [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3110
- <app-product-addtocart
3111
- [configurable]="configurable"
3112
- [createFrozenArticle]="createFrozenArticle"
3113
- [configuring]="configuring"
3114
- [showAddToCart]="showAddToCart"
3115
- [article]="article"
3116
- [externalSource]="externalSource"
3117
- [isReturn]="isReturn"
3118
- (startConfiguration)="handleStartConfiguration()"
3119
- (showRelatedPopup)="handlePopUpChange($event)"
3120
- ></app-product-addtocart>
3184
+ <div class="product-page-block-variants">
3185
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3186
+ <app-product-related
3187
+ class="no-padding"
3188
+ [externalSource]="externalSource"
3189
+ [articles]="article?.relatedArticles" [refType]="64"
3190
+ [label]="'VARIANTS' | localize">
3191
+ </app-product-related>
3192
+ }
3121
3193
  </div>
3122
- }
3123
- @if (configuring) {
3124
- <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3125
- <app-product-addtocart class="default-padding"
3126
- [configurable]="false"
3127
- [fullscreen]="fullScreen"
3128
- [showAddToCart]="showAddToCart"
3129
- [configuring]="configuring"
3130
- [article]="article"
3131
- [externalSource]="externalSource"
3132
- [isReturn]="isReturn"
3133
- (startConfiguration)="handleStartConfiguration()"
3134
- ></app-product-addtocart>
3194
+ <div class="product-page-block-stock">
3195
+ <app-product-stock
3196
+ class="no-padding"
3197
+ [goodId]="article?.goodId"
3198
+ (openStockEvent)="openStock()">
3199
+ </app-product-stock>
3135
3200
  </div>
3136
- }
3137
- <div class="product-page-block-variants">
3138
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3139
- <app-product-related class="no-padding"
3140
- [externalSource]="externalSource"
3141
- [articles]="article?.relatedArticles" [refType]="64"
3142
- [label]="'VARIANTS' | localize"></app-product-related>
3143
- }
3144
- </div>
3145
- <div class="product-page-block-stock">
3146
- <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
3147
- </div>
3148
- <div class="product-page-block-delivery">
3149
- <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
3150
3201
  </div>
3151
3202
  </div>
3152
3203
  </div>
@@ -3154,7 +3205,10 @@ class ProductPageComponent {
3154
3205
  <div class="page-wrapper-content">
3155
3206
  @if (article) {
3156
3207
  <div class="page-wrapper-left">
3157
- <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
3208
+ <app-product-info-tabs
3209
+ class="no-padding"
3210
+ [article]="article">
3211
+ </app-product-info-tabs>
3158
3212
  </div>
3159
3213
  }
3160
3214
  <div class="page-wrapper-right">
@@ -3191,23 +3245,22 @@ class ProductPageComponent {
3191
3245
  [mainArticle]="article"
3192
3246
  [articles]="article?.relatedArticles"
3193
3247
  [refType]="1"
3194
- (closeRelatedPopup)="handlePopUpChange($event)"
3195
- >
3248
+ (closeRelatedPopup)="handlePopUpChange($event)">
3196
3249
  </co-product-dialog>
3197
3250
  </div>
3198
3251
  }
3199
3252
  </div>
3200
3253
 
3201
- <co-preset-dialog
3202
- *ngIf="showPresetDialog"
3203
- [type]="presetDialogType"
3204
- [presetId]="configPresetId"
3205
- (cancelSavePreset)="handleCancelSavePreset($event)"
3206
- (overwritePreset)="handleOverwritePreset($event)"
3207
- >
3208
- </co-preset-dialog>
3254
+ @if (presetDialogType) {
3255
+ <co-preset-dialog
3256
+ [type]="presetDialogType"
3257
+ [presetId]="configPresetId"
3258
+ (cancelSavePreset)="handleCancelSavePreset($event)"
3259
+ (overwritePreset)="handleOverwritePreset($event)">
3260
+ </co-preset-dialog>
3261
+ }
3209
3262
  }
3210
- `, 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: [
3263
+ `, isInline: true, styles: [".co-product-page .page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.co-product-page .page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.co-product-page .page-wrapper-content:first-child,.co-product-page .page-wrapper-content.no-top-margin{margin-top:0}.co-product-page .page-wrapper-left{display:flex;width:65%;flex-direction:column}.co-product-page .page-wrapper-right{display:flex;width:35%;flex-direction:column}.co-product-page .page-wrapper-right .product-page-scroll-container{max-height:100vh;overflow-y:scroll}.co-product-page .page-wrapper-full{display:flex;width:100%;flex-direction:column}.co-product-page .page-wrapper-66{display:flex;width:60%;flex-direction:column}.co-product-page .page-wrapper-33{display:flex;width:40%;flex-direction:column}.co-product-page .product-action-buttons{position:relative}.co-product-page .product-action-buttons.full-screen{z-index:10}.co-product-page .product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.co-product-page .product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.co-product-page .product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.co-product-page .product-page-block-image .co-configurator-scene{width:100%;height:300px;display:block;position:relative}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container{position:relative;height:650px;width:100%}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container .threedviewer{min-height:0;min-width:0;width:auto;height:auto}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container .threedviewer canvas{width:100%;height:100%}.co-product-page .product-page-block-image .co-configurator-scene.hide-3d-scene{visibility:hidden;overflow:hidden;height:0}.co-product-page .product-page-block-image .co-configurator-scene.show-3d-scene{min-height:650px;position:relative}.co-product-page .product-page-block-image .co-configurator-scene.show-full-screen{position:fixed;inset:0;width:100%;height:100%}.co-product-page .product-page-block-image .co-configurator-scene.show-full-screen .configurator-bundle-container{height:100%}.co-product-page .product-page-block-image .co-configurator-scene canvas{height:100%}.co-product-page .product-page-block-image app-image-carousel.show-animated,.co-product-page .product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.co-product-page .product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.co-product-page .product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.co-product-page .product-page-block-description{grid-column:7/12;grid-row:1/1}.co-product-page .product-page-block-additional,.co-product-page .product-page-block-additional-description{width:100%}.co-product-page .product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.co-product-page .product-page-block-price.full{grid-column:1/5}.co-product-page .product-page-block-price .hide-configurator{display:none}.co-product-page .product-page-block-price .show-configurator{display:block}.co-product-page .product-page-block-price .show-configurator .co-threedselector{position:relative}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-lite-selector.floating co-selections-summary{position:relative}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-lite-selector:not(.custom-dimensions).floating co-selections-summary{top:auto;background:none}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-selections-summary .selections-content{gap:10px;box-sizing:border-box;padding:10px}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-product-configurator .product-configurator-container{position:relative;width:auto;top:auto;right:auto;padding-left:30px;padding-right:0;height:auto;max-height:100%}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-product-configurator .product-configurator-container .product-configurator-details{max-height:100%}.co-product-page .preset-container{display:flex;justify-content:right}.co-product-page .preset-container .save-preset-button{cursor:pointer;width:100%;max-width:205px;box-sizing:border-box}.co-product-page .preset-container .save-preset-button:hover{background:#74b77f}.co-product-page .product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.co-product-page .product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.co-product-page .product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.co-product-page .addtocart-reserved{grid-column:1/3;grid-row:3/3}.co-product-page .product-page-block-stock{grid-column:1/3;grid-row:4/4}.co-product-page .product-page-block-delivery{grid-column:3/5;grid-row:4/4}.co-product-page ::ng-deep co-scroll-container{overflow:hidden;position:relative}.co-product-page ::ng-deep co-scroll-container .content-wrapper{padding:0}.co-product-page ::ng-deep co-scroll-container .scroll-layer{left:0;top:0}.co-product-page ::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}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}.co-product-page ::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}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}.co-product-page ::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}.co-product-page .product-page-block-variants{margin:20px 0 0}.co-product-page .product-page-block-variants app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.co-product-page .product-page-block-variants app-product-related>div app-header h3{font-size:14px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container{width:320px;max-width:100%;padding:0 16px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller{width:26px;height:26px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.left-scroll{left:5px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.right-scroll{right:5px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.co-product-page .product-page-block-variants co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.co-product-page .product-page-block-variants co-tile.small:hover{border-color:#22313c}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper{padding:0}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .tile-top{display:none}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .tile-bottom{display:none}.co-product-page .product-page-block-variants co-tile.small .tile-extra-bottom{display:none}.co-product-page .product-page-block-alternatives .co-scroll-container,.co-product-page .product-page-block-alternatives .co-scroll-container .content-wrapper{width:auto}.co-product-page .product-page-block-alternatives .article-wrapper{margin:0 20px 0 0}.co-product-page .product-page-block-alternatives .article-wrapper:last-child{margin:0}.co-product-page .product-page-block-alternatives .co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.co-product-page .product-page-block-alternatives .co-tile:hover{box-shadow:none;border-color:#f6f5f4}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-wrapper .tile-bottom{margin:0}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.co-product-page .product-page-block-alternatives .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}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper div.image .co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;object-fit:contain;z-index:-1;transition:all .2s ease}.co-product-page .product-page-block-alternatives .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}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom .co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;background:#2b60a7;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom .co-button .co-icon{width:32px;height:32px;margin:0 2px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main{padding:0 10px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;background:#2b60a7;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .co-button .co-icon{width:32px;height:32px;margin:0 2px}.co-product-page .product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.co-product-page .product-page-block-properties{grid-column:7/10;grid-row:3/3}.co-product-page .product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.co-product-page .product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.co-product-page .product-page-block-documents{grid-column:2/6;grid-row:5/5}.co-product-page .product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.co-product-page .default-padding{padding-top:20px;padding-bottom:20px}.co-product-page .m-padding{padding-top:15px;padding-bottom:15px}.co-product-page .s-padding{padding-top:5px;padding-bottom:5px}.co-product-page .page-wrapper{max-width:650px}.co-product-page .page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.co-product-page .page-wrapper .page-wrapper-content .page-wrapper-left,.co-product-page .page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.co-product-page .product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){.co-product-page [class*=-padding]{padding-left:0!important;padding-right:0!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.co-product-page .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: 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: "component", type: i5.ConfiguratorComponent, selector: "co-configurator", inputs: ["showLoader", "showProgressBar", "showErrorMessages", "outputErrorMessages", "canCloseConfigurator", "animateSlideout", "showHeaderInformation"], outputs: ["buildResult", "isLoading", "updateProgressBar", "errorMessages", "showChange"] }, { kind: "component", type: i5.ConfiguratorSceneComponent, selector: "co-configurator-scene" }, { kind: "pipe", type: LocalizePipe, name: "localize" }], animations: [
3211
3264
  trigger('toggleFullScreen', [
3212
3265
  state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
3213
3266
  state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
@@ -3238,7 +3291,7 @@ class ProductPageComponent {
3238
3291
  state('*', style({ 'opacity': '1' })),
3239
3292
  transition('void => *', animate('200ms ease-in-out'))
3240
3293
  ])
3241
- ] }); }
3294
+ ], encapsulation: i0.ViewEncapsulation.None }); }
3242
3295
  }
3243
3296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageComponent, decorators: [{
3244
3297
  type: Component,
@@ -3249,12 +3302,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3249
3302
  <div class="page-wrapper-left">
3250
3303
  <div class="product-image-container">
3251
3304
  <div class="product-page-block-selector-type">
3252
- <app-product-selector-type class="default-padding"
3253
- [(currentType)]="currentView"
3254
- [show2D]="configurable"
3255
- [show3D]="threeD"
3256
- ></app-product-selector-type>
3305
+ <app-product-selector-type
3306
+ class="default-padding"
3307
+ [(currentType)]="currentView"
3308
+ [show2D]="configurable"
3309
+ [show3D]="threeD">
3310
+ </app-product-selector-type>
3257
3311
  </div>
3312
+
3258
3313
  <div class="product-page-block-image default-padding" [class.full]="fullScreen">
3259
3314
  @if (!enableRenderCarousel) {
3260
3315
  <app-image-carousel
@@ -3269,120 +3324,125 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3269
3324
  [article]="article">
3270
3325
  </app-render-carousel>
3271
3326
  }
3272
- @if (settingsLoaded && this.configurable) {
3273
- <threed-configurator
3274
- #configurator
3275
- class="threed-configurator"
3276
- [class.configurator-full-screen]="fullScreen"
3277
- [@toggleVisibilityByState]="show3D ? 'show' : 'hide'"
3278
- [@toggleFullScreen]="fullScreen ? 'fullscreen' : 'halfscreen'">
3279
- </threed-configurator>
3327
+ @if (settingsLoaded) {
3328
+ <co-configurator-scene
3329
+ [class.show-full-screen]="fullScreen"
3330
+ [class.hide-3d-scene]="!show3D"
3331
+ [class.show-3d-scene]="show3D">
3332
+ </co-configurator-scene>
3280
3333
  }
3281
3334
  @if (show3D) {
3282
- <co-icon #fullscreenbutton class="fullscreen-button"
3283
- [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3284
- [iconData]="iconCache.getIcon(fullScreenIcon)"
3285
- (click)="showFullScreen()"></co-icon>
3335
+ <co-icon
3336
+ #fullscreenbutton
3337
+ class="fullscreen-button"
3338
+ [@toggleTopLeft]="fullScreen ? 'fullscreen' : 'halfscreen'"
3339
+ [iconData]="iconCache.getIcon(fullScreenIcon)"
3340
+ (click)="showFullScreen()">
3341
+ </co-icon>
3286
3342
  }
3287
3343
  @if (show3D && fullScreen) {
3288
- <co-icon class="threed-watermark"
3289
- [iconData]="iconCache.getIcon(icon.Logo)"></co-icon>
3344
+ <co-icon
3345
+ class="threed-watermark"
3346
+ [iconData]="iconCache.getIcon(icon.Logo)">
3347
+ </co-icon>
3290
3348
  }
3291
3349
  </div>
3292
3350
  </div>
3293
3351
  </div>
3294
3352
  <div class="page-wrapper-right">
3295
- <div class="product-page-block-description">
3296
- <app-product-description class="default-padding" [article]="article"></app-product-description>
3297
- </div>
3298
- <div class="product-page-block-additional">
3299
- <div class="product-page-block-additional-description">
3300
- <app-product-additional-description class="default-padding" [article]="article"></app-product-additional-description>
3353
+ <div class="product-page-scroll-container">
3354
+ <div class="product-page-block-description">
3355
+ <app-product-description
3356
+ class="default-padding"
3357
+ [article]="article">
3358
+ </app-product-description>
3301
3359
  </div>
3302
- <div class="product-page-block-price" [class.full]="configuring">
3303
- @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3304
- <div class="preset-container">
3305
- <co-button
3306
- class="save-preset-button"
3307
- [iconData]="iconCache.getIcon(icon.SaveDisk)"
3308
- [label]="'PRESET_SAVE_AS' | localize"
3309
- (onClick)="handleSavePreset()"
3310
- ></co-button>
3311
- </div>
3312
- }
3360
+ <div class="product-page-block-additional">
3361
+ <div class="product-page-block-additional-description">
3362
+ <app-product-additional-description
3363
+ class="default-padding"
3364
+ [article]="article">
3365
+ </app-product-additional-description>
3366
+ </div>
3367
+ <div class="product-page-block-price" [class.full]="configuring">
3368
+ @if (configuring && this.settingsService.settings.options.showSaveAsPresetButton) {
3369
+ <div class="preset-container">
3370
+ <co-button
3371
+ class="save-preset-button"
3372
+ [iconData]="iconCache.getIcon(icon.SaveDisk)"
3373
+ [label]="'PRESET_SAVE_AS' | localize"
3374
+ (onClick)="handleSavePreset()">
3375
+ </co-button>
3376
+ </div>
3377
+ }
3378
+ @if (!configuring) {
3379
+ <app-product-price
3380
+ class="s-padding"
3381
+ [pricing]="article?.pricing"
3382
+ [configurable]="configurable">
3383
+ </app-product-price>
3384
+ }
3385
+
3386
+ @if (settingsLoaded) {
3387
+ <co-configurator
3388
+ [class.hide-configurator]="!configuring"
3389
+ [class.show-configurator]="configuring"
3390
+ [showLoader]="true"
3391
+ [animateSlideout]="false"
3392
+ [showHeaderInformation]="false"
3393
+ [canCloseConfigurator]="false"
3394
+ (buildResult)="handleBuildFinished($event)">
3395
+ </co-configurator>
3396
+ }
3397
+ </div>
3313
3398
  @if (!configuring) {
3314
- <app-product-price class="s-padding"
3315
- [pricing]="article?.pricing"
3316
- [configurable]="configurable"
3317
- ></app-product-price>
3399
+ <div class="product-page-block-addtocart no-padding product-action-buttons"
3400
+ [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3401
+ <app-product-addtocart
3402
+ [configurable]="configurable"
3403
+ [createFrozenArticle]="createFrozenArticle"
3404
+ [configuring]="configuring"
3405
+ [showAddToCart]="showAddToCart"
3406
+ [article]="article"
3407
+ [externalSource]="externalSource"
3408
+ [isReturn]="isReturn"
3409
+ (startConfiguration)="handleStartConfiguration()"
3410
+ (showRelatedPopup)="handlePopUpChange($event)">
3411
+ </app-product-addtocart>
3412
+ </div>
3318
3413
  }
3319
-
3320
- @if (settingsLoaded) {
3321
- <threed-selections #selections class="threed-selections"
3322
- [class.show-selections]="configuring"
3323
- [@toggleFullScreenRight]="fullScreen ? 'fullscreen' : 'halfscreen'"
3324
- [class.default-padding]="!fullScreen"
3325
- [class.show-full-screen]="fullScreen"
3326
- [class.mini-scrollbar]="fullScreen"
3327
- [sku]="sku"
3328
- [settings]="settings"
3329
- (onUserActionFromThreeD)="configuring = true"
3330
- (instanceSet)="setInstance($event)"
3331
- (onImageReceived)="appEventService.onImageReceived.next($event)"
3332
- (onRenderStarted)="appEventService.onRenderStarted.next()"
3333
- (onDraftRenderImageReceived)="appEventService.onDraftRenderImageReceived.next($event)"
3334
- (onArticleReceived)="appEventService.onArticleReceived.next($event.detail)"
3335
- (onSelectionsReceived)="appEventService.onSelectionsReceived.next($event.detail)"
3336
- (onArticleInfoReceived)="appEventService.onArticleInfoReceived.next($event.detail)"
3337
- (onAnswersAvailable)="appEventService.onAnswersAvailable.next($event.detail)"
3338
- (onReadyToRender)="appEventService.onReadyToRender.next($event.detail)"
3339
- (onRenderImageReceived)="appEventService.onRenderImageReceived.next($event.detail)"
3340
- ></threed-selections>
3414
+ @if (configuring) {
3415
+ <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3416
+ <app-product-addtocart
3417
+ class="default-padding"
3418
+ [configurable]="false"
3419
+ [fullscreen]="fullScreen"
3420
+ [showAddToCart]="showAddToCart"
3421
+ [configuring]="configuring"
3422
+ [article]="article"
3423
+ [externalSource]="externalSource"
3424
+ [isReturn]="isReturn"
3425
+ (startConfiguration)="handleStartConfiguration()">
3426
+ </app-product-addtocart>
3427
+ </div>
3341
3428
  }
3342
- </div>
3343
- @if (!configuring) {
3344
- <div class="product-page-block-addtocart no-padding product-action-buttons"
3345
- [@toggleTopRight]="fullScreen ? 'fullscreen' : 'halfscreen'">
3346
- <app-product-addtocart
3347
- [configurable]="configurable"
3348
- [createFrozenArticle]="createFrozenArticle"
3349
- [configuring]="configuring"
3350
- [showAddToCart]="showAddToCart"
3351
- [article]="article"
3352
- [externalSource]="externalSource"
3353
- [isReturn]="isReturn"
3354
- (startConfiguration)="handleStartConfiguration()"
3355
- (showRelatedPopup)="handlePopUpChange($event)"
3356
- ></app-product-addtocart>
3429
+ <div class="product-page-block-variants">
3430
+ @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3431
+ <app-product-related
3432
+ class="no-padding"
3433
+ [externalSource]="externalSource"
3434
+ [articles]="article?.relatedArticles" [refType]="64"
3435
+ [label]="'VARIANTS' | localize">
3436
+ </app-product-related>
3437
+ }
3357
3438
  </div>
3358
- }
3359
- @if (configuring) {
3360
- <div class="addtocart-reserved product-action-buttons" [class.full-screen]="fullScreen">
3361
- <app-product-addtocart class="default-padding"
3362
- [configurable]="false"
3363
- [fullscreen]="fullScreen"
3364
- [showAddToCart]="showAddToCart"
3365
- [configuring]="configuring"
3366
- [article]="article"
3367
- [externalSource]="externalSource"
3368
- [isReturn]="isReturn"
3369
- (startConfiguration)="handleStartConfiguration()"
3370
- ></app-product-addtocart>
3439
+ <div class="product-page-block-stock">
3440
+ <app-product-stock
3441
+ class="no-padding"
3442
+ [goodId]="article?.goodId"
3443
+ (openStockEvent)="openStock()">
3444
+ </app-product-stock>
3371
3445
  </div>
3372
- }
3373
- <div class="product-page-block-variants">
3374
- @if (article?.relatedArticles && article?.relatedArticles.length > 0) {
3375
- <app-product-related class="no-padding"
3376
- [externalSource]="externalSource"
3377
- [articles]="article?.relatedArticles" [refType]="64"
3378
- [label]="'VARIANTS' | localize"></app-product-related>
3379
- }
3380
- </div>
3381
- <div class="product-page-block-stock">
3382
- <app-product-stock class="no-padding" [goodId]="article?.goodId" (openStockEvent)="openStock()"></app-product-stock>
3383
- </div>
3384
- <div class="product-page-block-delivery">
3385
- <app-product-delivery class="no-padding" [stockAndDelivery]="stockAndDelivery"></app-product-delivery>
3386
3446
  </div>
3387
3447
  </div>
3388
3448
  </div>
@@ -3390,7 +3450,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3390
3450
  <div class="page-wrapper-content">
3391
3451
  @if (article) {
3392
3452
  <div class="page-wrapper-left">
3393
- <app-product-info-tabs class="no-padding" [article]="article"></app-product-info-tabs>
3453
+ <app-product-info-tabs
3454
+ class="no-padding"
3455
+ [article]="article">
3456
+ </app-product-info-tabs>
3394
3457
  </div>
3395
3458
  }
3396
3459
  <div class="page-wrapper-right">
@@ -3427,23 +3490,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3427
3490
  [mainArticle]="article"
3428
3491
  [articles]="article?.relatedArticles"
3429
3492
  [refType]="1"
3430
- (closeRelatedPopup)="handlePopUpChange($event)"
3431
- >
3493
+ (closeRelatedPopup)="handlePopUpChange($event)">
3432
3494
  </co-product-dialog>
3433
3495
  </div>
3434
3496
  }
3435
3497
  </div>
3436
3498
 
3437
- <co-preset-dialog
3438
- *ngIf="showPresetDialog"
3439
- [type]="presetDialogType"
3440
- [presetId]="configPresetId"
3441
- (cancelSavePreset)="handleCancelSavePreset($event)"
3442
- (overwritePreset)="handleOverwritePreset($event)"
3443
- >
3444
- </co-preset-dialog>
3499
+ @if (presetDialogType) {
3500
+ <co-preset-dialog
3501
+ [type]="presetDialogType"
3502
+ [presetId]="configPresetId"
3503
+ (cancelSavePreset)="handleCancelSavePreset($event)"
3504
+ (overwritePreset)="handleOverwritePreset($event)">
3505
+ </co-preset-dialog>
3506
+ }
3445
3507
  }
3446
- `, animations: [
3508
+ `, encapsulation: ViewEncapsulation.None, animations: [
3447
3509
  trigger('toggleFullScreen', [
3448
3510
  state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
3449
3511
  state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
@@ -3474,13 +3536,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3474
3536
  state('*', style({ 'opacity': '1' })),
3475
3537
  transition('void => *', animate('200ms ease-in-out'))
3476
3538
  ])
3477
- ], 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"] }]
3478
- }], ctorParameters: () => [{ type: ProductConnectorService }, { type: IconCacheService }, { type: ProductSettingsService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }], propDecorators: { configurator: [{
3479
- type: ViewChild,
3480
- args: ['configurator', { read: ElementRef }]
3481
- }], selections: [{
3482
- type: ViewChild,
3483
- args: ['selections', { read: ElementRef }]
3539
+ ], standalone: false, styles: [".co-product-page .page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:100%;padding:0 15px;margin:0 auto}.co-product-page .page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.co-product-page .page-wrapper-content:first-child,.co-product-page .page-wrapper-content.no-top-margin{margin-top:0}.co-product-page .page-wrapper-left{display:flex;width:65%;flex-direction:column}.co-product-page .page-wrapper-right{display:flex;width:35%;flex-direction:column}.co-product-page .page-wrapper-right .product-page-scroll-container{max-height:100vh;overflow-y:scroll}.co-product-page .page-wrapper-full{display:flex;width:100%;flex-direction:column}.co-product-page .page-wrapper-66{display:flex;width:60%;flex-direction:column}.co-product-page .page-wrapper-33{display:flex;width:40%;flex-direction:column}.co-product-page .product-action-buttons{position:relative}.co-product-page .product-action-buttons.full-screen{z-index:10}.co-product-page .product-image-container{grid-column:1/7;grid-row:1/6;position:relative}.co-product-page .product-page-block-selector-type{width:auto;position:absolute;top:10px;right:10px;z-index:2}.co-product-page .product-page-block-image{box-sizing:border-box;width:100%;z-index:1;position:relative}.co-product-page .product-page-block-image .co-configurator-scene{width:100%;height:300px;display:block;position:relative}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container{position:relative;height:650px;width:100%}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container .threedviewer{min-height:0;min-width:0;width:auto;height:auto}.co-product-page .product-page-block-image .co-configurator-scene .configurator-bundle-container .threedviewer canvas{width:100%;height:100%}.co-product-page .product-page-block-image .co-configurator-scene.hide-3d-scene{visibility:hidden;overflow:hidden;height:0}.co-product-page .product-page-block-image .co-configurator-scene.show-3d-scene{min-height:650px;position:relative}.co-product-page .product-page-block-image .co-configurator-scene.show-full-screen{position:fixed;inset:0;width:100%;height:100%}.co-product-page .product-page-block-image .co-configurator-scene.show-full-screen .configurator-bundle-container{height:100%}.co-product-page .product-page-block-image .co-configurator-scene canvas{height:100%}.co-product-page .product-page-block-image app-image-carousel.show-animated,.co-product-page .product-page-block-image threed-configurator.show-animated{opacity:1;z-index:0;transition:all .2s ease-in-out}.co-product-page .product-page-block-image .fullscreen-button{cursor:pointer;height:50px;width:50px;position:absolute;left:30px;z-index:100;top:30px}.co-product-page .product-page-block-image.full{grid-column:1/11;grid-row:2/span 10;z-index:3}.co-product-page .product-page-block-description{grid-column:7/12;grid-row:1/1}.co-product-page .product-page-block-additional,.co-product-page .product-page-block-additional-description{width:100%}.co-product-page .product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.co-product-page .product-page-block-price.full{grid-column:1/5}.co-product-page .product-page-block-price .hide-configurator{display:none}.co-product-page .product-page-block-price .show-configurator{display:block}.co-product-page .product-page-block-price .show-configurator .co-threedselector{position:relative}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-lite-selector.floating co-selections-summary{position:relative}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-lite-selector:not(.custom-dimensions).floating co-selections-summary{top:auto;background:none}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-selections-summary .selections-content{gap:10px;box-sizing:border-box;padding:10px}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-product-configurator .product-configurator-container{position:relative;width:auto;top:auto;right:auto;padding-left:30px;padding-right:0;height:auto;max-height:100%}.co-product-page .product-page-block-price .show-configurator .co-threedselector .co-product-configurator .product-configurator-container .product-configurator-details{max-height:100%}.co-product-page .preset-container{display:flex;justify-content:right}.co-product-page .preset-container .save-preset-button{cursor:pointer;width:100%;max-width:205px;box-sizing:border-box}.co-product-page .preset-container .save-preset-button:hover{background:#74b77f}.co-product-page .product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.co-product-page .product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.co-product-page .product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74b77f}.co-product-page .addtocart-reserved{grid-column:1/3;grid-row:3/3}.co-product-page .product-page-block-stock{grid-column:1/3;grid-row:4/4}.co-product-page .product-page-block-delivery{grid-column:3/5;grid-row:4/4}.co-product-page ::ng-deep co-scroll-container{overflow:hidden;position:relative}.co-product-page ::ng-deep co-scroll-container .content-wrapper{padding:0}.co-product-page ::ng-deep co-scroll-container .scroll-layer{left:0;top:0}.co-product-page ::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}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}.co-product-page ::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}.co-product-page ::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}.co-product-page ::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}.co-product-page .product-page-block-variants{margin:20px 0 0}.co-product-page .product-page-block-variants app-product-related>div{display:flex;gap:15px;align-items:center;border-top:1px solid #f6f5f4;padding:5px 0 7px 15px}.co-product-page .product-page-block-variants app-product-related>div app-header h3{font-size:14px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container{width:320px;max-width:100%;padding:0 16px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller{width:26px;height:26px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.left-scroll{left:5px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.left-scroll:before{border-width:0 2px 2px 0;margin-left:9px;margin-top:9px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.right-scroll{right:5px}.co-product-page .product-page-block-variants app-product-related>div co-scroll-container .scroller.right-scroll:after{border-width:0 2px 2px 0;margin-left:6px;margin-top:9px}.co-product-page .product-page-block-variants co-tile.small{min-width:50px!important;max-width:50px!important;border:1px solid #f6f5f4;margin:0 10px 0 0;border-radius:4px}.co-product-page .product-page-block-variants co-tile.small:hover{border-color:#22313c}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper{padding:0}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .tile-top{display:none}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image{height:40px!important;padding:5px;margin-bottom:10px}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image .no-image-wrapper .no-image{width:40px;height:40px}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .image .no-image-wrapper span{display:none!important}.co-product-page .product-page-block-variants co-tile.small .tile-wrapper .tile-bottom{display:none}.co-product-page .product-page-block-variants co-tile.small .tile-extra-bottom{display:none}.co-product-page .product-page-block-alternatives .co-scroll-container,.co-product-page .product-page-block-alternatives .co-scroll-container .content-wrapper{width:auto}.co-product-page .product-page-block-alternatives .article-wrapper{margin:0 20px 0 0}.co-product-page .product-page-block-alternatives .article-wrapper:last-child{margin:0}.co-product-page .product-page-block-alternatives .co-tile{cursor:pointer;transition:all .14s ease-out;border:1px solid transparent;padding:15px 10px 0;width:319px;max-width:none;min-width:0;box-sizing:border-box}.co-product-page .product-page-block-alternatives .co-tile:hover{box-shadow:none;border-color:#f6f5f4}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-wrapper div.image co-image{transform:scale(1.05)}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-wrapper .tile-bottom{margin:0}.co-product-page .product-page-block-alternatives .co-tile:hover .tile-extra-bottom .main .description{text-decoration:underline}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper{padding:0;position:relative;outline:none;overflow:hidden}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-top{position:absolute;left:0;top:0;width:100%}.co-product-page .product-page-block-alternatives .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}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper div.image:after{content:\"\";padding:100% 0 0;float:left;width:100%}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper div.image .co-image{position:absolute;left:0;top:0;overflow:hidden;width:100%;height:100%;object-fit:contain;z-index:-1;transition:all .2s ease}.co-product-page .product-page-block-alternatives .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}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom{transition:all .2s ease;height:auto}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom .co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;background:#2b60a7;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.co-product-page .product-page-block-alternatives .co-tile .tile-wrapper .tile-bottom .co-button .co-icon{width:32px;height:32px;margin:0 2px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom{outline:none;padding:15px 0;background:transparent!important;min-height:60px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main{padding:0 10px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .description{font-size:15px;font-weight:700;margin:0 0 2px}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .price{font-size:16px;margin:15px 0 0;font-weight:700;color:#2b60a7}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .co-button{margin:0 0 5px!important;width:36px;height:36px;border:1px solid #22313C;background:#2b60a7;cursor:pointer;border-radius:4px;padding:0!important;font-size:0}.co-product-page .product-page-block-alternatives .co-tile .tile-extra-bottom .main .co-button .co-icon{width:32px;height:32px;margin:0 2px}.co-product-page .product-page-block-additional-information{grid-column:1/6;grid-row:4/4}.co-product-page .product-page-block-properties{grid-column:7/10;grid-row:3/3}.co-product-page .product-page-block-related-articles{grid-column:2/6;grid-row:4/4}.co-product-page .product-page-block-alternative-articles{grid-column:6/10;grid-row:4/4}.co-product-page .product-page-block-documents{grid-column:2/6;grid-row:5/5}.co-product-page .product-page-block-symbols{grid-column:6/10;grid-row:5/5}@media screen and (max-width: 950px){.co-product-page .default-padding{padding-top:20px;padding-bottom:20px}.co-product-page .m-padding{padding-top:15px;padding-bottom:15px}.co-product-page .s-padding{padding-top:5px;padding-bottom:5px}.co-product-page .page-wrapper{max-width:650px}.co-product-page .page-wrapper .page-wrapper-content{flex-direction:column;margin:30px 0}.co-product-page .page-wrapper .page-wrapper-content .page-wrapper-left,.co-product-page .page-wrapper .page-wrapper-content .page-wrapper-right{width:100%}.co-product-page .product-page-block-alternatives ::ng-deep co-tile{width:284px!important}}@media screen and (max-width: 650px){.co-product-page [class*=-padding]{padding-left:0!important;padding-right:0!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker co-button{height:38px!important}.co-product-page .product-page-block-addtocart ::ng-deep co-number-picker co-input-text{height:38px!important;width:36px!important}.co-product-page .product-page-block-addtocart ::ng-deep co-button.cart-button{height:40px;font-size:13px}}\n"] }]
3540
+ }], ctorParameters: () => [{ type: IconCacheService }, { type: ProductSettingsService }, { type: ProductEventService }, { type: i0.ChangeDetectorRef }, { type: ProductConnectorService }, { type: i5.ConfiguringService }, { type: i5.SceneService }], propDecorators: { showClass: [{
3541
+ type: HostBinding,
3542
+ args: ['class.co-product-page']
3484
3543
  }], fullscreenbutton: [{
3485
3544
  type: ViewChild,
3486
3545
  args: ['fullscreenbutton', { read: ElementRef }]
@@ -3549,11 +3608,13 @@ class IoneProductComponent {
3549
3608
  // this.sku = '104';
3550
3609
  // this.sku = "70000107";
3551
3610
  // this.sku = "grover";
3552
- // this.sku = "1000610952";
3611
+ this.sku = "1000610952"; // bank istanbul jillis
3553
3612
  // this.sku = "4387";
3554
3613
  // this.sku = "1000612725";
3555
- // this.sku = '1000610952'; // elix = 1000234793
3556
- this.sku = '1000234793';
3614
+ // this.sku = '22000';
3615
+ // elix = 1000234793
3616
+ // this.sku = 'A30';
3617
+ // this.sku = '22000';
3557
3618
  }
3558
3619
  async ngOnInit() {
3559
3620
  this._subs.push(this._appEventService.onAddToCart.subscribe((data) => {
@@ -3735,10 +3796,14 @@ class ImageCarouselModule {
3735
3796
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3736
3797
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, declarations: [ImageCarouselComponent], imports: [CommonModule,
3737
3798
  LoaderModule,
3738
- ScrollContainerModule], exports: [ImageCarouselComponent] }); }
3799
+ ScrollContainerModule,
3800
+ CdkConnectedOverlay,
3801
+ CdkOverlayOrigin,
3802
+ IconModule], exports: [ImageCarouselComponent] }); }
3739
3803
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, imports: [CommonModule,
3740
3804
  LoaderModule,
3741
- ScrollContainerModule] }); }
3805
+ ScrollContainerModule,
3806
+ IconModule] }); }
3742
3807
  }
3743
3808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageCarouselModule, decorators: [{
3744
3809
  type: NgModule,
@@ -3746,7 +3811,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3746
3811
  imports: [
3747
3812
  CommonModule,
3748
3813
  LoaderModule,
3749
- ScrollContainerModule
3814
+ ScrollContainerModule,
3815
+ CdkConnectedOverlay,
3816
+ CdkOverlayOrigin,
3817
+ IconModule
3750
3818
  ],
3751
3819
  declarations: [
3752
3820
  ImageCarouselComponent
@@ -3930,6 +3998,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3930
3998
  }]
3931
3999
  }] });
3932
4000
 
4001
+ class ProductDeliveryComponent {
4002
+ set stockAndDelivery(value) {
4003
+ if (value) {
4004
+ this.deliveryDescription = value.deliveryDescription;
4005
+ if (this.deliveryDescription.length > 0 && this.deliveryDescription[0] === ' ') {
4006
+ this.deliveryDescription = this._localizePipe.transform('ASK_FOR_INFORMATION');
4007
+ }
4008
+ }
4009
+ }
4010
+ constructor(_localizePipe, _iOne, _iconCache) {
4011
+ this._localizePipe = _localizePipe;
4012
+ this._iOne = _iOne;
4013
+ this._iconCache = _iconCache;
4014
+ this.icon = IconEnum;
4015
+ this.iconData = this._iconCache.getIcon(this.icon.Truck);
4016
+ }
4017
+ ngOnInit() {
4018
+ }
4019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryComponent, deps: [{ token: LocalizePipe }, { token: ProductConnectorService }, { token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component }); }
4020
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ProductDeliveryComponent, isStandalone: false, selector: "app-product-delivery", inputs: { stockAndDelivery: "stockAndDelivery" }, ngImport: i0, template: `
4021
+ <!--<app-header [label]="'DELIVERY_TIME_PERIOD' | localize"></app-header>-->
4022
+ <div class="product-delivery-wrapper">
4023
+ <co-icon class="delivery-icon" [iconData]="iconData"></co-icon>
4024
+ <div class="product-delivery-fields">
4025
+ <div class="pp-default-label" [textContent]="'DELIVERY_TIME_PERIOD' | localize"></div>
4026
+ <div class="pp-default-description" [textContent]="deliveryDescription | date:'dd MMMM yyyy'"></div>
4027
+ </div>
4028
+ </div>
4029
+ `, isInline: true, styles: [":host{display:block}.product-delivery-wrapper{display:flex;flex-direction:row;align-items:center;border-bottom:1px solid #f6f5f4;padding:20px 15px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:40px;height:37px}.product-delivery-wrapper .product-delivery-fields{display:flex;flex-direction:column}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:14px;margin:0}@media screen and (max-width: 400px){.product-delivery-wrapper{padding:15px 0 15px 10px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:32px;height:28px}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:13px}}\n"], dependencies: [{ kind: "component", type: i6.IconComponent, selector: "co-icon", inputs: ["icon", "iconData"] }, { kind: "pipe", type: i5$1.DatePipe, name: "date" }, { kind: "pipe", type: LocalizePipe, name: "localize" }] }); }
4030
+ }
4031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryComponent, decorators: [{
4032
+ type: Component,
4033
+ args: [{ selector: 'app-product-delivery', template: `
4034
+ <!--<app-header [label]="'DELIVERY_TIME_PERIOD' | localize"></app-header>-->
4035
+ <div class="product-delivery-wrapper">
4036
+ <co-icon class="delivery-icon" [iconData]="iconData"></co-icon>
4037
+ <div class="product-delivery-fields">
4038
+ <div class="pp-default-label" [textContent]="'DELIVERY_TIME_PERIOD' | localize"></div>
4039
+ <div class="pp-default-description" [textContent]="deliveryDescription | date:'dd MMMM yyyy'"></div>
4040
+ </div>
4041
+ </div>
4042
+ `, standalone: false, styles: [":host{display:block}.product-delivery-wrapper{display:flex;flex-direction:row;align-items:center;border-bottom:1px solid #f6f5f4;padding:20px 15px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:40px;height:37px}.product-delivery-wrapper .product-delivery-fields{display:flex;flex-direction:column}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:14px;margin:0}@media screen and (max-width: 400px){.product-delivery-wrapper{padding:15px 0 15px 10px}.product-delivery-wrapper .delivery-icon{margin:0 15px 0 0;width:32px;height:28px}.product-delivery-wrapper .product-delivery-fields .pp-default-label{font-size:13px}}\n"] }]
4043
+ }], ctorParameters: () => [{ type: LocalizePipe }, { type: ProductConnectorService }, { type: IconCacheService }], propDecorators: { stockAndDelivery: [{
4044
+ type: Input
4045
+ }] } });
4046
+
3933
4047
  class ProductDeliveryModule {
3934
4048
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3935
4049
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: ProductDeliveryModule, declarations: [ProductDeliveryComponent], imports: [CommonModule,
@@ -4204,7 +4318,9 @@ class ProductPageModule {
4204
4318
  LoaderModule,
4205
4319
  RenderCarouselModule,
4206
4320
  ButtonModule,
4207
- PresetDialogModule], exports: [ProductPageComponent] }); }
4321
+ PresetDialogModule,
4322
+ ConfiguratorModule,
4323
+ ConfiguratorSceneModule], exports: [ProductPageComponent] }); }
4208
4324
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, imports: [CommonModule,
4209
4325
  ProductSelectorTypeModule,
4210
4326
  ImageCarouselModule,
@@ -4222,7 +4338,9 @@ class ProductPageModule {
4222
4338
  LoaderModule,
4223
4339
  RenderCarouselModule,
4224
4340
  ButtonModule,
4225
- PresetDialogModule] }); }
4341
+ PresetDialogModule,
4342
+ ConfiguratorModule,
4343
+ ConfiguratorSceneModule] }); }
4226
4344
  }
4227
4345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ProductPageModule, decorators: [{
4228
4346
  type: NgModule,
@@ -4245,7 +4363,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
4245
4363
  LoaderModule,
4246
4364
  RenderCarouselModule,
4247
4365
  ButtonModule,
4248
- PresetDialogModule
4366
+ PresetDialogModule,
4367
+ ConfiguratorModule,
4368
+ ConfiguratorSceneModule
4249
4369
  ],
4250
4370
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
4251
4371
  declarations: [