@colijnit/product 12.0.7 → 12.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/app/components/core/header/header.component.d.ts +7 -7
  2. package/app/components/core/header/header.module.d.ts +2 -2
  3. package/app/components/image-carousel/image-carousel.component.d.ts +39 -39
  4. package/app/components/image-carousel/image-carousel.module.d.ts +2 -2
  5. package/app/components/product-additional-description/product-additional-description.component.d.ts +14 -14
  6. package/app/components/product-additional-description/product-additional-description.module.d.ts +2 -2
  7. package/app/components/product-additional-info/product-additional-info.component.d.ts +21 -21
  8. package/app/components/product-additional-info/product-additional-info.module.d.ts +2 -2
  9. package/app/components/product-addtocart/product-addtocart.component.d.ts +33 -33
  10. package/app/components/product-addtocart/product-addtocart.module.d.ts +2 -2
  11. package/app/components/product-delivery/product-delivery.component.d.ts +18 -18
  12. package/app/components/product-delivery/product-delivery.module.d.ts +2 -2
  13. package/app/components/product-description/product-description.component.d.ts +7 -7
  14. package/app/components/product-description/product-description.module.d.ts +2 -2
  15. package/app/components/product-documents/product-document.module.d.ts +2 -2
  16. package/app/components/product-documents/product-documents.component.d.ts +10 -10
  17. package/app/components/product-external-source/product-external-source.component.d.ts +34 -34
  18. package/app/components/product-external-source/product-external-source.module.d.ts +2 -2
  19. package/app/components/product-info-tabs/product-info-tabs.component.d.ts +18 -18
  20. package/app/components/product-info-tabs/product-info-tabs.module.d.ts +2 -2
  21. package/app/components/product-page/product-page.component.d.ts +58 -58
  22. package/app/components/product-page/product-page.module.d.ts +2 -2
  23. package/app/components/product-price/product-price.component.d.ts +19 -19
  24. package/app/components/product-price/product-price.module.d.ts +2 -2
  25. package/app/components/product-properties/product-properties.component.d.ts +16 -16
  26. package/app/components/product-properties/product-properties.module.d.ts +2 -2
  27. package/app/components/product-related/product-related.component.d.ts +16 -16
  28. package/app/components/product-related/product-related.module.d.ts +2 -2
  29. package/app/components/product-selector-type/product-selector-type.component.d.ts +21 -21
  30. package/app/components/product-selector-type/product-selector-type.module.d.ts +2 -2
  31. package/app/components/product-stock/product-stock.component.d.ts +20 -20
  32. package/app/components/product-stock/product-stock.module.d.ts +2 -2
  33. package/app/components/product-symbols/product-symbols.component.d.ts +10 -10
  34. package/app/components/product-symbols/product-symbols.module.d.ts +2 -2
  35. package/app/enum/icon.enum.d.ts +17 -17
  36. package/app/enum/language-code.enum.d.ts +6 -6
  37. package/app/enum/selector-type.enum.d.ts +5 -5
  38. package/app/ione-product.component.d.ts +43 -43
  39. package/app/ione-product.module.d.ts +2 -2
  40. package/app/model/article-quantity.model.d.ts +5 -5
  41. package/app/model/icon.d.ts +4 -4
  42. package/app/model/productSettings.d.ts +30 -30
  43. package/app/model/render-modes.d.ts +5 -5
  44. package/app/model/render-parameters.d.ts +7 -7
  45. package/app/model/settings-options.d.ts +10 -10
  46. package/app/model/stock-and-delivery.d.ts +5 -5
  47. package/app/pipe/localize.pipe.d.ts +7 -7
  48. package/app/pipe/pipe.module.d.ts +2 -2
  49. package/app/product-version.d.ts +6 -6
  50. package/app/service/dictionary.service.d.ts +24 -24
  51. package/app/service/icon-cache.service.d.ts +17 -17
  52. package/app/service/product-connector-adapter.service.d.ts +34 -34
  53. package/app/service/product-connector.service.d.ts +38 -38
  54. package/app/service/product-event.service.d.ts +22 -22
  55. package/app/service/product-settings.service.d.ts +16 -16
  56. package/app/style/_scrollbars.mixins.scss +18 -18
  57. package/app/style/_variables.scss +21 -21
  58. package/app/utils/bit-utils.d.ts +7 -7
  59. package/app/utils/json-utils.service.d.ts +3 -3
  60. package/assets/dictionary/text.properties.d.ts +3 -3
  61. package/bundles/colijnit-product.umd.js +3108 -3108
  62. package/bundles/colijnit-product.umd.js.map +1 -1
  63. package/colijnit-product.d.ts +41 -41
  64. package/colijnit-product.metadata.json +1 -1
  65. package/esm2015/app/components/core/header/header.component.js +18 -18
  66. package/esm2015/app/components/core/header/header.module.js +19 -19
  67. package/esm2015/app/components/image-carousel/image-carousel.component.js +143 -143
  68. package/esm2015/app/components/image-carousel/image-carousel.module.js +23 -23
  69. package/esm2015/app/components/product-additional-description/product-additional-description.component.js +50 -50
  70. package/esm2015/app/components/product-additional-description/product-additional-description.module.js +21 -21
  71. package/esm2015/app/components/product-additional-info/product-additional-info.component.js +102 -102
  72. package/esm2015/app/components/product-additional-info/product-additional-info.module.js +21 -21
  73. package/esm2015/app/components/product-addtocart/product-addtocart.component.js +90 -90
  74. package/esm2015/app/components/product-addtocart/product-addtocart.module.js +24 -24
  75. package/esm2015/app/components/product-delivery/product-delivery.component.js +39 -39
  76. package/esm2015/app/components/product-delivery/product-delivery.module.js +23 -23
  77. package/esm2015/app/components/product-description/product-description.component.js +17 -17
  78. package/esm2015/app/components/product-description/product-description.module.js +19 -19
  79. package/esm2015/app/components/product-documents/product-document.module.js +25 -25
  80. package/esm2015/app/components/product-documents/product-documents.component.js +25 -25
  81. package/esm2015/app/components/product-external-source/product-external-source.component.js +110 -110
  82. package/esm2015/app/components/product-external-source/product-external-source.module.js +21 -21
  83. package/esm2015/app/components/product-info-tabs/product-info-tabs.component.js +59 -59
  84. package/esm2015/app/components/product-info-tabs/product-info-tabs.module.js +29 -29
  85. package/esm2015/app/components/product-page/product-page.component.js +215 -215
  86. package/esm2015/app/components/product-page/product-page.module.js +44 -44
  87. package/esm2015/app/components/product-price/product-price.component.js +60 -60
  88. package/esm2015/app/components/product-price/product-price.module.js +23 -23
  89. package/esm2015/app/components/product-properties/product-properties.component.js +50 -50
  90. package/esm2015/app/components/product-properties/product-properties.module.js +21 -21
  91. package/esm2015/app/components/product-related/product-related.component.js +62 -62
  92. package/esm2015/app/components/product-related/product-related.module.js +24 -24
  93. package/esm2015/app/components/product-selector-type/product-selector-type.component.js +42 -42
  94. package/esm2015/app/components/product-selector-type/product-selector-type.module.js +26 -26
  95. package/esm2015/app/components/product-stock/product-stock.component.js +59 -59
  96. package/esm2015/app/components/product-stock/product-stock.module.js +23 -23
  97. package/esm2015/app/components/product-symbols/product-symbols.component.js +34 -34
  98. package/esm2015/app/components/product-symbols/product-symbols.module.js +26 -26
  99. package/esm2015/app/enum/icon.enum.js +18 -18
  100. package/esm2015/app/enum/language-code.enum.js +8 -8
  101. package/esm2015/app/enum/selector-type.enum.js +7 -7
  102. package/esm2015/app/ione-product.component.js +114 -114
  103. package/esm2015/app/ione-product.module.js +29 -29
  104. package/esm2015/app/model/article-quantity.model.js +3 -3
  105. package/esm2015/app/model/icon.js +17 -17
  106. package/esm2015/app/model/productSettings.js +16 -16
  107. package/esm2015/app/model/render-modes.js +7 -7
  108. package/esm2015/app/model/render-parameters.js +10 -10
  109. package/esm2015/app/model/settings-options.js +13 -13
  110. package/esm2015/app/model/stock-and-delivery.js +8 -8
  111. package/esm2015/app/pipe/localize.pipe.js +27 -27
  112. package/esm2015/app/pipe/pipe.module.js +18 -18
  113. package/esm2015/app/product-version.js +10 -10
  114. package/esm2015/app/service/dictionary.service.js +94 -94
  115. package/esm2015/app/service/icon-cache.service.js +40 -40
  116. package/esm2015/app/service/product-connector-adapter.service.js +171 -171
  117. package/esm2015/app/service/product-connector.service.js +106 -106
  118. package/esm2015/app/service/product-event.service.js +29 -29
  119. package/esm2015/app/service/product-settings.service.js +86 -86
  120. package/esm2015/app/utils/bit-utils.js +18 -18
  121. package/esm2015/app/utils/json-utils.service.js +29 -29
  122. package/esm2015/assets/dictionary/text.properties.js +67 -67
  123. package/esm2015/colijnit-product.js +41 -41
  124. package/esm2015/public_api.js +10 -10
  125. package/fesm2015/colijnit-product.js +2212 -2212
  126. package/fesm2015/colijnit-product.js.map +1 -1
  127. package/package.json +5 -5
  128. package/public_api.d.ts +9 -9
@@ -1,215 +1,215 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild } from '@angular/core';
3
- import { ProductConnectorService } from '../../service/product-connector.service';
4
- import { StockAndDelivery } from '../../model/stock-and-delivery';
5
- import { SelectorType } from '../../enum/selector-type.enum';
6
- import { animate, state, style, transition, trigger } from '@angular/animations';
7
- import { IconEnum } from '../../enum/icon.enum';
8
- import { IconCacheService } from '../../service/icon-cache.service';
9
- import { ProductSettingsService } from '../../service/product-settings.service';
10
- import { ProductEventService } from '../../service/product-event.service';
11
- export class ProductPageComponent {
12
- constructor(_ione, _renderer, _changeDetector, iconCache, settingsService, appEventService) {
13
- this._ione = _ione;
14
- this._renderer = _renderer;
15
- this._changeDetector = _changeDetector;
16
- this.iconCache = iconCache;
17
- this.settingsService = settingsService;
18
- this.appEventService = appEventService;
19
- this.icon = IconEnum;
20
- this.createFrozenArticle = true;
21
- this.openStockEvent = new EventEmitter();
22
- this.configurable = false;
23
- this.threeD = false;
24
- this.show2D = true;
25
- this.show3D = false;
26
- this.configuring = false;
27
- this.fullscreenAnimationEnd = false;
28
- this.settingsLoaded = false;
29
- this._fullScreen = false;
30
- this._subs = [];
31
- this._subs.push(this.appEventService.onForceRenderImage.subscribe((x) => {
32
- if (this.selections.nativeElement) {
33
- this.selections.nativeElement.forceRenderImage();
34
- }
35
- }), this.settingsService.settingsLoaded.subscribe(loaded => this._handleSettingsLoaded(loaded)), this._ione.controllerInitialized.subscribe((initialized) => {
36
- this.settingsLoaded = initialized;
37
- }));
38
- }
39
- set sku(value) {
40
- if (value) {
41
- if (this.configuring) {
42
- this.show3D = false;
43
- this.fullScreen = false;
44
- this.configuring = false;
45
- this._changeDetector.detectChanges();
46
- }
47
- this._sku = value;
48
- this._getArticle();
49
- }
50
- }
51
- get sku() {
52
- return this._sku;
53
- }
54
- set settings(value) {
55
- if (value) {
56
- if (typeof value === 'string') {
57
- this._settings = JSON.parse(value);
58
- }
59
- else {
60
- this._settings = value;
61
- }
62
- }
63
- }
64
- get settings() {
65
- return this._settings;
66
- }
67
- set fullScreen(value) {
68
- this._fullScreen = value;
69
- this.fullscreenAnimationEnd = true;
70
- this._changeDetector.detectChanges();
71
- // setTimeout(() => {
72
- // this.fullscreenAnimationEnd = true;
73
- // }, 400)
74
- }
75
- get fullScreen() {
76
- return this._fullScreen;
77
- }
78
- get fullScreenIcon() {
79
- return this.fullScreen ? this.icon.NormalScreen : this.icon.FullScreen;
80
- }
81
- set currentView(value) {
82
- this._currentView = value;
83
- this.show2D = this._currentView === SelectorType.TwoD;
84
- this.show3D = this._currentView === SelectorType.ThreeD;
85
- this._changeDetector.detectChanges();
86
- }
87
- get currentView() {
88
- return this._currentView;
89
- }
90
- ngOnInit() {
91
- if (this._settings) {
92
- this.settingsService.settings = undefined;
93
- this.settingsService.createSettingsFromObject(this._settings);
94
- }
95
- else {
96
- this._settings = this.settingsService.settings;
97
- }
98
- }
99
- ngAfterViewInit() {
100
- }
101
- ngOnDestroy() {
102
- this._subs.forEach(s => s.unsubscribe());
103
- if (this._initializedSub) {
104
- this._initializedSub.unsubscribe();
105
- }
106
- this.configurator = undefined;
107
- this.selections = undefined;
108
- this.fullscreenbutton = undefined;
109
- }
110
- setInstance(event) {
111
- if (event.detail) {
112
- this._ione.setInstance(event.detail);
113
- }
114
- }
115
- handleStartConfiguration() {
116
- this.configuring = true;
117
- this._changeDetector.detectChanges();
118
- }
119
- showFullScreen() {
120
- this.fullScreen = !this.fullScreen;
121
- }
122
- _handleSettingsLoaded(loaded) {
123
- if (loaded) {
124
- this._ione.initConnection();
125
- }
126
- }
127
- _getArticle() {
128
- return __awaiter(this, void 0, void 0, function* () {
129
- if (this._initializedSub) {
130
- this._initializedSub.unsubscribe();
131
- }
132
- this._initializedSub = this._ione.controllerInitialized.subscribe((init) => __awaiter(this, void 0, void 0, function* () {
133
- if (init) {
134
- this._ione.getFullArticle(this._sku).then((article) => {
135
- this.article = article;
136
- if (this.article) {
137
- this.configurable = this.article.goodType === 'B';
138
- if (this.configurable) {
139
- this.currentView = SelectorType.TwoD;
140
- }
141
- this.threeD = this.article.is3D;
142
- this.selectorType = this.article.selectorTypeCustomer;
143
- this._ione.getDeliveryPrognosis(this.article.goodId).then((stockInfo) => {
144
- const stockAndDelivery = stockInfo;
145
- this.stockAndDelivery = new StockAndDelivery(0, stockAndDelivery.returnValue ? stockAndDelivery.returnValue : ' ');
146
- this._changeDetector.detectChanges();
147
- });
148
- this._changeDetector.detectChanges();
149
- }
150
- });
151
- }
152
- }));
153
- });
154
- }
155
- openStock() {
156
- this.openStockEvent.emit();
157
- }
158
- }
159
- ProductPageComponent.decorators = [
160
- { type: Component, args: [{
161
- selector: 'app-product-page',
162
- template: "<ng-container *ngIf=\"settingsLoaded\">\r\n <div class=\"page-wrapper\">\r\n <div class=\"page-wrapper-content\">\r\n <div class=\"page-wrapper-left\">\r\n <div class=\"product-image-container\">\r\n <div class=\"product-page-block-selector-type\">\r\n <app-product-selector-type class=\"default-padding\"\r\n [(currentType)]=\"currentView\"\r\n [show2D]=\"configurable\"\r\n [show3D]=\"threeD\"\r\n ></app-product-selector-type>\r\n </div>\r\n <div class=\"product-page-block-image default-padding\" [class.full]=\"fullScreen\">\r\n <app-image-carousel [@toggleVisibilityByState]=\"show2D ? 'show' : 'hide'\" [images]=\"article?.images\" [showRefresh]=\"configurable && threeD\"></app-image-carousel>\r\n <ng-container *ngIf=\"settingsLoaded\">\r\n <threed-configurator #configurator class=\"threed-configurator\"\r\n [class.configurator-full-screen]=\"fullScreen\"\r\n [@toggleVisibilityByState]=\"show3D ? 'show' : 'hide'\"\r\n [@toggleFullScreen]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\r\n ></threed-configurator>\r\n </ng-container>\r\n <co-icon #fullscreenbutton class=\"fullscreen-button\" *ngIf=\"show3D\"\r\n [@toggleTopLeft]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\r\n [iconData]=\"iconCache.getIcon(fullScreenIcon)\"\r\n (click)=\"showFullScreen()\"></co-icon>\r\n <co-icon class=\"threed-watermark\" *ngIf=\"show3D && fullScreen\"\r\n [iconData]=\"iconCache.getIcon(icon.Logo)\"></co-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"page-wrapper-right\">\r\n <div class=\"product-page-block-description\">\r\n <app-product-description class=\"default-padding\" [article]=\"article\"></app-product-description>\r\n </div>\r\n <div class=\"product-page-block-additional\">\r\n <div class=\"product-page-block-additional-description\">\r\n <app-product-additional-description class=\"default-padding\" [article]=\"article\"></app-product-additional-description>\r\n </div>\r\n <div class=\"product-page-block-price\" [class.full]=\"configuring\">\r\n <app-product-price class=\"s-padding\" *ngIf=\"!configuring\"\r\n [pricing]=\"article?.pricing\"\r\n [configurable]=\"configurable\"\r\n ></app-product-price>\r\n <ng-container *ngIf=\"settingsLoaded\">\r\n <threed-selections #selections class=\"threed-selections\" [class.show-selections]=\"configuring\" [@toggleFullScreenRight]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\r\n [class.default-padding]=\"!fullScreen\"\r\n [class.show-full-screen]=\"fullScreen\"\r\n [class.mini-scrollbar]=\"fullScreen\"\r\n [sku]=\"sku\"\r\n [settings]=\"settings\"\r\n (onUserActionFromThreeD)=\"configuring = true\"\r\n (instanceSet)=\"setInstance($event)\"\r\n (onImageReceived)=\"appEventService.onImageReceived.next($event)\"\r\n (onRenderStarted)=\"appEventService.onRenderStarted.next()\"\r\n (onDraftRenderImageReceived)=\"appEventService.onDraftRenderImageReceived.next($event)\"\r\n (onArticleReceived)=\"appEventService.onArticleReceived.next($event.detail)\"\r\n (onSelectionsReceived)=\"appEventService.onSelectionsReceived.next($event.detail)\"\r\n (onArticleInfoReceived)=\"appEventService.onArticleInfoReceived.next($event.detail)\"\r\n ></threed-selections>\r\n </ng-container>\r\n </div>\r\n <div class=\"product-page-block-addtocart no-padding product-action-buttons\" *ngIf=\"!configuring\" [@toggleTopRight]=\"fullScreen ? 'fullscreen' : 'halfscreen'\">\r\n <app-product-addtocart\r\n [configurable]=\"configurable\"\r\n [createFrozenArticle]=\"createFrozenArticle\"\r\n [configuring]=\"configuring\"\r\n [article]=\"article\"\r\n (startConfiguration)=\"handleStartConfiguration()\"\r\n ></app-product-addtocart>\r\n </div>\r\n <div class=\"addtocart-reserved product-action-buttons\" *ngIf=\"configuring\" [class.full-screen]=\"fullScreen\">\r\n <app-product-addtocart class=\"default-padding\"\r\n [configurable]=\"false\"\r\n [fullscreen]=\"fullScreen\"\r\n [configuring]=\"configuring\"\r\n [article]=\"article\"\r\n (startConfiguration)=\"handleStartConfiguration()\"\r\n ></app-product-addtocart>\r\n </div>\r\n <div class=\"product-page-block-variants\">\r\n <app-product-related class=\"no-padding\" *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\r\n [articles]=\"article?.relatedArticles\" [refType]=\"64\" [label]=\"'VARIANTS' | localize\"></app-product-related>\r\n </div>\r\n <div class=\"product-page-block-stock\">\r\n <app-product-stock class=\"no-padding\" [goodId]=\"article?.goodId\" (openStockEvent)=\"openStock()\"></app-product-stock>\r\n </div>\r\n <div class=\"product-page-block-delivery\">\r\n <app-product-delivery class=\"no-padding\" [stockAndDelivery]=\"stockAndDelivery\"></app-product-delivery>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"page-wrapper-content\">\r\n <div class=\"page-wrapper-left\">\r\n <app-product-info-tabs class=\"no-padding\" [article]=\"article\"></app-product-info-tabs>\r\n </div>\r\n <div class=\"page-wrapper-right\">\r\n <div class=\"product-page-block-related s-padding\">\r\n <app-product-related *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\r\n [articles]=\"article?.relatedArticles\" [refType]=\"1\" [label]=\"'RELATED_PRODUCTS' | localize\"></app-product-related>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"page-wrapper-content no-top-margin\">\r\n <div class=\"page-wrapper-full\">\r\n <div class=\"product-page-block-alternatives s-padding\">\r\n <app-product-related *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\r\n [articles]=\"article?.relatedArticles\" [refType]=\"4\" [isSmallModus]=\"false\" [label]=\"'ALTERNATIVE_PRODUCTS' | localize\"></app-product-related>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n",
163
- animations: [
164
- trigger('toggleFullScreen', [
165
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
166
- state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
167
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
168
- ]),
169
- trigger('toggleTopLeft', [
170
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0' })),
171
- state('halfscreen', style({ 'position': 'absolute', 'top': '*', 'left': '*' })),
172
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
173
- ]),
174
- trigger('toggleTopRight', [
175
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'right': '0' })),
176
- state('halfscreen', style({ 'position': '*', 'top': '*', 'right': '*' })),
177
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
178
- ]),
179
- trigger('toggleFullScreenRight', [
180
- state('fullscreen', style({ 'position': 'fixed', 'width': '400px', 'top': '0', 'right': '0' })),
181
- state('halfscreen', style({ 'position': '*', 'width': '*', 'top': '*', 'right': '*' })),
182
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
183
- ]),
184
- trigger('toggleVisibilityByState', [
185
- state('hide', style({ 'opacity': '0', 'display': 'none' })),
186
- state('show', style({ 'display': 'block', 'opacity': '1' })),
187
- transition('hide <=> show', animate('200ms 100ms ease-in-out')),
188
- ]),
189
- trigger('toggleVisibility', [
190
- state('void', style({ 'opacity': '0' })),
191
- state('*', style({ 'opacity': '1' })),
192
- transition('void => *', animate('200ms ease-in-out')),
193
- ])
194
- ],
195
- styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:1400px;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child{margin-top:0}.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:55%;flex-direction:column}.page-wrapper-right{display:flex;width:45%;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}.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:1px solid #efefef}.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{width:100%}.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74B77F}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;grid-gap:15px;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}.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;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{position:absolute;right:0;bottom:0;margin:0 -40px 0 0;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:bold;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:bold;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{width:100%}.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"]
196
- },] }
197
- ];
198
- ProductPageComponent.ctorParameters = () => [
199
- { type: ProductConnectorService },
200
- { type: Renderer2 },
201
- { type: ChangeDetectorRef },
202
- { type: IconCacheService },
203
- { type: ProductSettingsService },
204
- { type: ProductEventService }
205
- ];
206
- ProductPageComponent.propDecorators = {
207
- configurator: [{ type: ViewChild, args: ['configurator', { read: ElementRef },] }],
208
- selections: [{ type: ViewChild, args: ['selections', { read: ElementRef },] }],
209
- fullscreenbutton: [{ type: ViewChild, args: ['fullscreenbutton', { read: ElementRef },] }],
210
- sku: [{ type: Input }],
211
- settings: [{ type: Input }],
212
- createFrozenArticle: [{ type: Input }],
213
- openStockEvent: [{ type: Output }]
214
- };
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wcm9kdWN0LXBhZ2UvcHJvZHVjdC1wYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUFFLFlBQVksRUFDeEIsS0FBSyxFQUVHLE1BQU0sRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQXdDMUUsTUFBTSxPQUFPLG9CQUFvQjtJQWdHL0IsWUFBb0IsS0FBOEIsRUFDOUIsU0FBb0IsRUFDcEIsZUFBa0MsRUFDbkMsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsZUFBb0M7UUFMbkMsVUFBSyxHQUFMLEtBQUssQ0FBeUI7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Is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QkFBZ0I7WUFDaEIsc0JBQXNCO1lBQ3RCLG1CQUFtQjs7OzJCQTRDekIsU0FBUyxTQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7eUJBRzlDLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOytCQUc1QyxTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2tCQUdsRCxLQUFLO3VCQWtCTCxLQUFLO2tDQVdMLEtBQUs7NkJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdENvbm5lY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJ0aWNsZUZ1bGxPYmplY3QgfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RvY2tBbmREZWxpdmVyeSB9IGZyb20gJy4uLy4uL21vZGVsL3N0b2NrLWFuZC1kZWxpdmVyeSc7XG5pbXBvcnQgeyBTZWxlY3RvclR5cGUgfSBmcm9tICcuLi8uLi9lbnVtL3NlbGVjdG9yLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEljb25FbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9pY29uLmVudW0nO1xuaW1wb3J0IHsgSWNvbkNhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtEZWxpdmVyeVByb2dub3Npc30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktcHJvZ25vc2lzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtcGFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LXBhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3RvZ2dsZUZ1bGxTY3JlZW4nLCBbXG4gICAgICBzdGF0ZSgnZnVsbHNjcmVlbicsIHN0eWxlKHsncG9zaXRpb24nOiAnZml4ZWQnLCAndG9wJzogJzAnLCAnbGVmdCc6ICcwJywgJ3dpZHRoJzogJzEwMCUnLCAnaGVpZ2h0JzogJzEwMCUnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAndG9wJzogJyonLCAnbGVmdCc6ICcqJywgJ3dpZHRoJzogJyonLCAnaGVpZ2h0JzogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignaGFsZnNjcmVlbiA8PT4gZnVsbHNjcmVlbicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3RvZ2dsZVRvcExlZnQnLCBbXG4gICAgICBzdGF0ZSgnZnVsbHNjcmVlbicsIHN0eWxlKHsncG9zaXRpb24nOiAnZml4ZWQnLCAndG9wJzogJzAnLCAnbGVmdCc6ICcwJ30pKSxcbiAgICAgIHN0YXRlKCdoYWxmc2NyZWVuJywgc3R5bGUoeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd0b3AnOiAnKicsICdsZWZ0JzogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignaGFsZnNjcmVlbiA8PT4gZnVsbHNjcmVlbicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3RvZ2dsZVRvcFJpZ2h0JywgW1xuICAgICAgc3RhdGUoJ2Z1bGxzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJ2ZpeGVkJywgJ3RvcCc6ICcwJywgJ3JpZ2h0JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAndG9wJzogJyonLCAncmlnaHQnOiAnKid9KSksXG4gICAgICB0cmFuc2l0aW9uKCdoYWxmc2NyZWVuIDw9PiBmdWxsc2NyZWVuJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbi1vdXQnKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigndG9nZ2xlRnVsbFNjcmVlblJpZ2h0JywgW1xuICAgICAgc3RhdGUoJ2Z1bGxzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJ2ZpeGVkJywgJ3dpZHRoJzogJzQwMHB4JywgJ3RvcCc6ICcwJywgJ3JpZ2h0JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAnd2lkdGgnOiAnKicsICd0b3AnOiAnKicsICdyaWdodCc6ICcqJ30pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2hhbGZzY3JlZW4gPD0+IGZ1bGxzY3JlZW4nLCBhbmltYXRlKCcyMDBtcyBlYXNlLWluLW91dCcpKSxcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCd0b2dnbGVWaXNpYmlsaXR5QnlTdGF0ZScsIFtcbiAgICAgIHN0YXRlKCdoaWRlJywgc3R5bGUoeydvcGFjaXR5JzogJzAnLCAnZGlzcGxheSc6ICdub25lJ30pKSxcbiAgICAgIHN0YXRlKCdzaG93Jywgc3R5bGUoeydkaXNwbGF5JzogJ2Jsb2NrJywgJ29wYWNpdHknOiAnMSd9KSksXG4gICAgICB0cmFuc2l0aW9uKCdoaWRlIDw9PiBzaG93JywgYW5pbWF0ZSgnMjAwbXMgMTAwbXMgZWFzZS1pbi1vdXQnKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigndG9nZ2xlVmlzaWJpbGl0eScsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeydvcGFjaXR5JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7J29wYWNpdHknOiAnMSd9KSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCcyMDBtcyBlYXNlLWluLW91dCcpKSxcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbkVudW0gPSBJY29uRW51bTtcblxuICBAVmlld0NoaWxkKCdjb25maWd1cmF0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGNvbmZpZ3VyYXRvcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25zJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBzZWxlY3Rpb25zOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2Z1bGxzY3JlZW5idXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGZ1bGxzY3JlZW5idXR0b246IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3UodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlndXJpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93M0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mdWxsU2NyZWVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29uZmlndXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2t1ID0gdmFsdWU7XG4gICAgICB0aGlzLl9nZXRBcnRpY2xlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBza3UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2t1O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZXR0aW5ncyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3JlYXRlRnJvemVuQXJ0aWNsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvcGVuU3RvY2tFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgcHVibGljIHNldCBmdWxsU2NyZWVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZnVsbFNjcmVlbiA9IHZhbHVlO1xuICAgIHRoaXMuZnVsbHNjcmVlbkFuaW1hdGlvbkVuZCA9IHRydWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5mdWxsc2NyZWVuQW5pbWF0aW9uRW5kID0gdHJ1ZTtcbiAgICAvLyB9LCA0MDApXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1bGxTY3JlZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxTY3JlZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1bGxTY3JlZW5JY29uKCk6IEljb25FbnVtIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsU2NyZWVuID8gdGhpcy5pY29uLk5vcm1hbFNjcmVlbiA6IHRoaXMuaWNvbi5GdWxsU2NyZWVuO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50Vmlldyh2YWx1ZTogU2VsZWN0b3JUeXBlKSB7XG4gICAgdGhpcy5fY3VycmVudFZpZXcgPSB2YWx1ZTtcbiAgICB0aGlzLnNob3cyRCA9IHRoaXMuX2N1cnJlbnRWaWV3ID09PSBTZWxlY3RvclR5cGUuVHdvRDtcbiAgICB0aGlzLnNob3czRCA9IHRoaXMuX2N1cnJlbnRWaWV3ID09PSBTZWxlY3RvclR5cGUuVGhyZWVEO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFZpZXcoKTogU2VsZWN0b3JUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXc7XG4gIH1cblxuICBwdWJsaWMgYXJ0aWNsZTogQXJ0aWNsZUZ1bGxPYmplY3Q7XG4gIHB1YmxpYyBzdG9ja0FuZERlbGl2ZXJ5OiBTdG9ja0FuZERlbGl2ZXJ5O1xuICBwdWJsaWMgY29uZmlndXJhYmxlID0gZmFsc2U7XG4gIHB1YmxpYyB0aHJlZUQgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdG9yVHlwZTogU2VsZWN0b3JUeXBlO1xuICBwdWJsaWMgc2hvdzJEID0gdHJ1ZTtcbiAgcHVibGljIHNob3czRCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlndXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZ1bGxzY3JlZW5BbmltYXRpb25FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldHRpbmdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NrdTogc3RyaW5nO1xuICBwcml2YXRlIF9pbml0aWFsaXplZFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9mdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2N1cnJlbnRWaWV3OiBTZWxlY3RvclR5cGU7XG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX3NldHRpbmdzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaW9uZTogUHJvZHVjdENvbm5lY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHVibGljIGljb25DYWNoZTogSWNvbkNhY2hlU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHNldHRpbmdzU2VydmljZTogUHJvZHVjdFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIGFwcEV2ZW50U2VydmljZTogUHJvZHVjdEV2ZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLl9zdWJzLnB1c2goXG4gICAgICB0aGlzLmFwcEV2ZW50U2VydmljZS5vbkZvcmNlUmVuZGVySW1hZ2Uuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbnMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9ucy5uYXRpdmVFbGVtZW50LmZvcmNlUmVuZGVySW1hZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZShsb2FkZWQgPT4gdGhpcy5faGFuZGxlU2V0dGluZ3NMb2FkZWQobG9hZGVkKSksXG4gICAgICAgIHRoaXMuX2lvbmUuY29udHJvbGxlckluaXRpYWxpemVkLnN1YnNjcmliZSgoaW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0xvYWRlZCA9IGluaXRpYWxpemVkO1xuICAgICAgfSlcbiAgICApO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5fc2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuY3JlYXRlU2V0dGluZ3NGcm9tT2JqZWN0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncztcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZFN1Yikge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWd1cmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZnVsbHNjcmVlbmJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnN0YW5jZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGV0YWlsKSB7XG4gICAgICB0aGlzLl9pb25lLnNldEluc3RhbmNlKGV2ZW50LmRldGFpbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZVN0YXJ0Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Z1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsU2NyZWVuID0gIXRoaXMuZnVsbFNjcmVlbjtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNldHRpbmdzTG9hZGVkKGxvYWRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChsb2FkZWQpIHtcbiAgICAgIHRoaXMuX2lvbmUuaW5pdENvbm5lY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9nZXRBcnRpY2xlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZFN1Yikge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIgPSB0aGlzLl9pb25lLmNvbnRyb2xsZXJJbml0aWFsaXplZC5zdWJzY3JpYmUoYXN5bmMgKGluaXQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChpbml0KSB7XG4gICAgICAgIHRoaXMuX2lvbmUuZ2V0RnVsbEFydGljbGUodGhpcy5fc2t1KS50aGVuKChhcnRpY2xlOiBBcnRpY2xlRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXJ0aWNsZSA9IGFydGljbGU7XG4gICAgICAgICAgaWYgKHRoaXMuYXJ0aWNsZSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGUgPSB0aGlzLmFydGljbGUuZ29vZFR5cGUgPT09ICdCJztcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gU2VsZWN0b3JUeXBlLlR3b0Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRocmVlRCA9IHRoaXMuYXJ0aWNsZS5pczNEO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RvclR5cGUgPSB0aGlzLmFydGljbGUuc2VsZWN0b3JUeXBlQ3VzdG9tZXI7XG4gICAgICAgICAgICB0aGlzLl9pb25lLmdldERlbGl2ZXJ5UHJvZ25vc2lzKHRoaXMuYXJ0aWNsZS5nb29kSWQpLnRoZW4oKHN0b2NrSW5mbzogRGVsaXZlcnlQcm9nbm9zaXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvY2tBbmREZWxpdmVyeTogRGVsaXZlcnlQcm9nbm9zaXMgPSBzdG9ja0luZm87XG4gICAgICAgICAgICAgIHRoaXMuc3RvY2tBbmREZWxpdmVyeSA9IG5ldyBTdG9ja0FuZERlbGl2ZXJ5KDAsIHN0b2NrQW5kRGVsaXZlcnkucmV0dXJuVmFsdWUgPyBzdG9ja0FuZERlbGl2ZXJ5LnJldHVyblZhbHVlIDogJyAnKTtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgb3BlblN0b2NrKCkge1xuICAgIHRoaXMub3BlblN0b2NrRXZlbnQuZW1pdCgpO1xuICB9XG5cbn1cbiJdfQ==
1
+ import { __awaiter } from "tslib";
2
+ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild } from '@angular/core';
3
+ import { ProductConnectorService } from '../../service/product-connector.service';
4
+ import { StockAndDelivery } from '../../model/stock-and-delivery';
5
+ import { SelectorType } from '../../enum/selector-type.enum';
6
+ import { animate, state, style, transition, trigger } from '@angular/animations';
7
+ import { IconEnum } from '../../enum/icon.enum';
8
+ import { IconCacheService } from '../../service/icon-cache.service';
9
+ import { ProductSettingsService } from '../../service/product-settings.service';
10
+ import { ProductEventService } from '../../service/product-event.service';
11
+ export class ProductPageComponent {
12
+ constructor(_ione, _renderer, _changeDetector, iconCache, settingsService, appEventService) {
13
+ this._ione = _ione;
14
+ this._renderer = _renderer;
15
+ this._changeDetector = _changeDetector;
16
+ this.iconCache = iconCache;
17
+ this.settingsService = settingsService;
18
+ this.appEventService = appEventService;
19
+ this.icon = IconEnum;
20
+ this.createFrozenArticle = true;
21
+ this.openStockEvent = new EventEmitter();
22
+ this.configurable = false;
23
+ this.threeD = false;
24
+ this.show2D = true;
25
+ this.show3D = false;
26
+ this.configuring = false;
27
+ this.fullscreenAnimationEnd = false;
28
+ this.settingsLoaded = false;
29
+ this._fullScreen = false;
30
+ this._subs = [];
31
+ this._subs.push(this.appEventService.onForceRenderImage.subscribe((x) => {
32
+ if (this.selections.nativeElement) {
33
+ this.selections.nativeElement.forceRenderImage();
34
+ }
35
+ }), this.settingsService.settingsLoaded.subscribe(loaded => this._handleSettingsLoaded(loaded)), this._ione.controllerInitialized.subscribe((initialized) => {
36
+ this.settingsLoaded = initialized;
37
+ }));
38
+ }
39
+ set sku(value) {
40
+ if (value) {
41
+ if (this.configuring) {
42
+ this.show3D = false;
43
+ this.fullScreen = false;
44
+ this.configuring = false;
45
+ this._changeDetector.detectChanges();
46
+ }
47
+ this._sku = value;
48
+ this._getArticle();
49
+ }
50
+ }
51
+ get sku() {
52
+ return this._sku;
53
+ }
54
+ set settings(value) {
55
+ if (value) {
56
+ if (typeof value === 'string') {
57
+ this._settings = JSON.parse(value);
58
+ }
59
+ else {
60
+ this._settings = value;
61
+ }
62
+ }
63
+ }
64
+ get settings() {
65
+ return this._settings;
66
+ }
67
+ set fullScreen(value) {
68
+ this._fullScreen = value;
69
+ this.fullscreenAnimationEnd = true;
70
+ this._changeDetector.detectChanges();
71
+ // setTimeout(() => {
72
+ // this.fullscreenAnimationEnd = true;
73
+ // }, 400)
74
+ }
75
+ get fullScreen() {
76
+ return this._fullScreen;
77
+ }
78
+ get fullScreenIcon() {
79
+ return this.fullScreen ? this.icon.NormalScreen : this.icon.FullScreen;
80
+ }
81
+ set currentView(value) {
82
+ this._currentView = value;
83
+ this.show2D = this._currentView === SelectorType.TwoD;
84
+ this.show3D = this._currentView === SelectorType.ThreeD;
85
+ this._changeDetector.detectChanges();
86
+ }
87
+ get currentView() {
88
+ return this._currentView;
89
+ }
90
+ ngOnInit() {
91
+ if (this._settings) {
92
+ this.settingsService.settings = undefined;
93
+ this.settingsService.createSettingsFromObject(this._settings);
94
+ }
95
+ else {
96
+ this._settings = this.settingsService.settings;
97
+ }
98
+ }
99
+ ngAfterViewInit() {
100
+ }
101
+ ngOnDestroy() {
102
+ this._subs.forEach(s => s.unsubscribe());
103
+ if (this._initializedSub) {
104
+ this._initializedSub.unsubscribe();
105
+ }
106
+ this.configurator = undefined;
107
+ this.selections = undefined;
108
+ this.fullscreenbutton = undefined;
109
+ }
110
+ setInstance(event) {
111
+ if (event.detail) {
112
+ this._ione.setInstance(event.detail);
113
+ }
114
+ }
115
+ handleStartConfiguration() {
116
+ this.configuring = true;
117
+ this._changeDetector.detectChanges();
118
+ }
119
+ showFullScreen() {
120
+ this.fullScreen = !this.fullScreen;
121
+ }
122
+ _handleSettingsLoaded(loaded) {
123
+ if (loaded) {
124
+ this._ione.initConnection();
125
+ }
126
+ }
127
+ _getArticle() {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ if (this._initializedSub) {
130
+ this._initializedSub.unsubscribe();
131
+ }
132
+ this._initializedSub = this._ione.controllerInitialized.subscribe((init) => __awaiter(this, void 0, void 0, function* () {
133
+ if (init) {
134
+ this._ione.getFullArticle(this._sku).then((article) => {
135
+ this.article = article;
136
+ if (this.article) {
137
+ this.configurable = this.article.goodType === 'B';
138
+ if (this.configurable) {
139
+ this.currentView = SelectorType.TwoD;
140
+ }
141
+ this.threeD = this.article.is3D;
142
+ this.selectorType = this.article.selectorTypeCustomer;
143
+ this._ione.getDeliveryPrognosis(this.article.goodId).then((stockInfo) => {
144
+ const stockAndDelivery = stockInfo;
145
+ this.stockAndDelivery = new StockAndDelivery(0, stockAndDelivery.returnValue ? stockAndDelivery.returnValue : ' ');
146
+ this._changeDetector.detectChanges();
147
+ });
148
+ this._changeDetector.detectChanges();
149
+ }
150
+ });
151
+ }
152
+ }));
153
+ });
154
+ }
155
+ openStock() {
156
+ this.openStockEvent.emit();
157
+ }
158
+ }
159
+ ProductPageComponent.decorators = [
160
+ { type: Component, args: [{
161
+ selector: 'app-product-page',
162
+ template: "<ng-container *ngIf=\"settingsLoaded\">\n <div class=\"page-wrapper\">\n <div class=\"page-wrapper-content\">\n <div class=\"page-wrapper-left\">\n <div class=\"product-image-container\">\n <div class=\"product-page-block-selector-type\">\n <app-product-selector-type class=\"default-padding\"\n [(currentType)]=\"currentView\"\n [show2D]=\"configurable\"\n [show3D]=\"threeD\"\n ></app-product-selector-type>\n </div>\n <div class=\"product-page-block-image default-padding\" [class.full]=\"fullScreen\">\n <app-image-carousel [@toggleVisibilityByState]=\"show2D ? 'show' : 'hide'\" [images]=\"article?.images\" [showRefresh]=\"configurable && threeD\"></app-image-carousel>\n <ng-container *ngIf=\"settingsLoaded\">\n <threed-configurator #configurator class=\"threed-configurator\"\n [class.configurator-full-screen]=\"fullScreen\"\n [@toggleVisibilityByState]=\"show3D ? 'show' : 'hide'\"\n [@toggleFullScreen]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\n ></threed-configurator>\n </ng-container>\n <co-icon #fullscreenbutton class=\"fullscreen-button\" *ngIf=\"show3D\"\n [@toggleTopLeft]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\n [iconData]=\"iconCache.getIcon(fullScreenIcon)\"\n (click)=\"showFullScreen()\"></co-icon>\n <co-icon class=\"threed-watermark\" *ngIf=\"show3D && fullScreen\"\n [iconData]=\"iconCache.getIcon(icon.Logo)\"></co-icon>\n </div>\n </div>\n </div>\n <div class=\"page-wrapper-right\">\n <div class=\"product-page-block-description\">\n <app-product-description class=\"default-padding\" [article]=\"article\"></app-product-description>\n </div>\n <div class=\"product-page-block-additional\">\n <div class=\"product-page-block-additional-description\">\n <app-product-additional-description class=\"default-padding\" [article]=\"article\"></app-product-additional-description>\n </div>\n <div class=\"product-page-block-price\" [class.full]=\"configuring\">\n <app-product-price class=\"s-padding\" *ngIf=\"!configuring\"\n [pricing]=\"article?.pricing\"\n [configurable]=\"configurable\"\n ></app-product-price>\n <ng-container *ngIf=\"settingsLoaded\">\n <threed-selections #selections class=\"threed-selections\" [class.show-selections]=\"configuring\" [@toggleFullScreenRight]=\"fullScreen ? 'fullscreen' : 'halfscreen'\"\n [class.default-padding]=\"!fullScreen\"\n [class.show-full-screen]=\"fullScreen\"\n [class.mini-scrollbar]=\"fullScreen\"\n [sku]=\"sku\"\n [settings]=\"settings\"\n (onUserActionFromThreeD)=\"configuring = true\"\n (instanceSet)=\"setInstance($event)\"\n (onImageReceived)=\"appEventService.onImageReceived.next($event)\"\n (onRenderStarted)=\"appEventService.onRenderStarted.next()\"\n (onDraftRenderImageReceived)=\"appEventService.onDraftRenderImageReceived.next($event)\"\n (onArticleReceived)=\"appEventService.onArticleReceived.next($event.detail)\"\n (onSelectionsReceived)=\"appEventService.onSelectionsReceived.next($event.detail)\"\n (onArticleInfoReceived)=\"appEventService.onArticleInfoReceived.next($event.detail)\"\n ></threed-selections>\n </ng-container>\n </div>\n <div class=\"product-page-block-addtocart no-padding product-action-buttons\" *ngIf=\"!configuring\" [@toggleTopRight]=\"fullScreen ? 'fullscreen' : 'halfscreen'\">\n <app-product-addtocart\n [configurable]=\"configurable\"\n [createFrozenArticle]=\"createFrozenArticle\"\n [configuring]=\"configuring\"\n [article]=\"article\"\n (startConfiguration)=\"handleStartConfiguration()\"\n ></app-product-addtocart>\n </div>\n <div class=\"addtocart-reserved product-action-buttons\" *ngIf=\"configuring\" [class.full-screen]=\"fullScreen\">\n <app-product-addtocart class=\"default-padding\"\n [configurable]=\"false\"\n [fullscreen]=\"fullScreen\"\n [configuring]=\"configuring\"\n [article]=\"article\"\n (startConfiguration)=\"handleStartConfiguration()\"\n ></app-product-addtocart>\n </div>\n <div class=\"product-page-block-variants\">\n <app-product-related class=\"no-padding\" *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\n [articles]=\"article?.relatedArticles\" [refType]=\"64\" [label]=\"'VARIANTS' | localize\"></app-product-related>\n </div>\n <div class=\"product-page-block-stock\">\n <app-product-stock class=\"no-padding\" [goodId]=\"article?.goodId\" (openStockEvent)=\"openStock()\"></app-product-stock>\n </div>\n <div class=\"product-page-block-delivery\">\n <app-product-delivery class=\"no-padding\" [stockAndDelivery]=\"stockAndDelivery\"></app-product-delivery>\n </div>\n </div>\n </div>\n </div>\n <div class=\"page-wrapper-content\">\n <div class=\"page-wrapper-left\">\n <app-product-info-tabs class=\"no-padding\" [article]=\"article\"></app-product-info-tabs>\n </div>\n <div class=\"page-wrapper-right\">\n <div class=\"product-page-block-related s-padding\">\n <app-product-related *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\n [articles]=\"article?.relatedArticles\" [refType]=\"1\" [label]=\"'RELATED_PRODUCTS' | localize\"></app-product-related>\n </div>\n </div>\n </div>\n <div class=\"page-wrapper-content no-top-margin\">\n <div class=\"page-wrapper-full\">\n <div class=\"product-page-block-alternatives s-padding\">\n <app-product-related *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\n [articles]=\"article?.relatedArticles\" [refType]=\"4\" [isSmallModus]=\"false\" [label]=\"'ALTERNATIVE_PRODUCTS' | localize\"></app-product-related>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n",
163
+ animations: [
164
+ trigger('toggleFullScreen', [
165
+ state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
166
+ state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
167
+ transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
168
+ ]),
169
+ trigger('toggleTopLeft', [
170
+ state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0' })),
171
+ state('halfscreen', style({ 'position': 'absolute', 'top': '*', 'left': '*' })),
172
+ transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
173
+ ]),
174
+ trigger('toggleTopRight', [
175
+ state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'right': '0' })),
176
+ state('halfscreen', style({ 'position': '*', 'top': '*', 'right': '*' })),
177
+ transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
178
+ ]),
179
+ trigger('toggleFullScreenRight', [
180
+ state('fullscreen', style({ 'position': 'fixed', 'width': '400px', 'top': '0', 'right': '0' })),
181
+ state('halfscreen', style({ 'position': '*', 'width': '*', 'top': '*', 'right': '*' })),
182
+ transition('halfscreen <=> fullscreen', animate('200ms ease-in-out')),
183
+ ]),
184
+ trigger('toggleVisibilityByState', [
185
+ state('hide', style({ 'opacity': '0', 'display': 'none' })),
186
+ state('show', style({ 'display': 'block', 'opacity': '1' })),
187
+ transition('hide <=> show', animate('200ms 100ms ease-in-out')),
188
+ ]),
189
+ trigger('toggleVisibility', [
190
+ state('void', style({ 'opacity': '0' })),
191
+ state('*', style({ 'opacity': '1' })),
192
+ transition('void => *', animate('200ms ease-in-out')),
193
+ ])
194
+ ],
195
+ styles: [".page-wrapper{font-family:iOneMontserrat;font-size:12px;display:flex;flex-direction:column;max-width:1400px;padding:0 15px;margin:0 auto}.page-wrapper-content{display:flex;flex-direction:row;margin:40px 0}.page-wrapper-content:first-child{margin-top:0}.page-wrapper-content.no-top-margin{margin-top:0}.page-wrapper-left{display:flex;width:55%;flex-direction:column}.page-wrapper-right{display:flex;width:45%;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}.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:1px solid #efefef}.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{width:100%}.product-page-block-additional-description{width:100%}.product-page-block-price{grid-column:1/3;grid-row:2/2;align-self:center}.product-page-block-price.full{grid-column:1/5}.product-page-block-addtocart{grid-column:3/5;grid-row:2/2;align-self:center;padding-top:30px!important}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button:hover div.rippler{background:#f6f5f4}.product-page-block-addtocart ::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon{position:relative;z-index:2}.product-page-block-addtocart ::ng-deep co-button.cart-button{cursor:pointer}.product-page-block-addtocart ::ng-deep co-button.cart-button:hover{background:#74B77F}.addtocart-reserved{grid-column:1/3;grid-row:3/3}.product-page-block-stock{grid-column:1/3;grid-row:4/4}.product-page-block-delivery{grid-column:3/5;grid-row:4/4}::ng-deep co-scroll-container{overflow:hidden;position:relative}::ng-deep co-scroll-container .content-wrapper{padding:0}::ng-deep co-scroll-container .scroll-layer{left:0;top:0}::ng-deep co-scroll-container .scroll-layer .scroller{width:34px;height:34px;border-radius:36px;background:#fff;cursor:pointer;box-shadow:0 0 5px #0003}::ng-deep co-scroll-container .scroll-layer .scroller:hover{background:#f6f5f4}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll{left:5px}::ng-deep co-scroll-container .scroll-layer .scroller.left-scroll:before{border-width:0 3px 3px 0;padding:4px;margin-left:13px;margin-top:11px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll{right:5px}::ng-deep co-scroll-container .scroll-layer .scroller.right-scroll:after{border-width:0 3px 3px 0;padding:4px;margin-left:9px;margin-top:11px}.product-page-block-variants{margin:20px 0 0}.product-page-block-variants ::ng-deep app-product-related>div{display:flex;grid-gap:15px;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}.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;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{position:absolute;right:0;bottom:0;margin:0 -40px 0 0;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:bold;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:bold;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{width:100%}.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"]
196
+ },] }
197
+ ];
198
+ ProductPageComponent.ctorParameters = () => [
199
+ { type: ProductConnectorService },
200
+ { type: Renderer2 },
201
+ { type: ChangeDetectorRef },
202
+ { type: IconCacheService },
203
+ { type: ProductSettingsService },
204
+ { type: ProductEventService }
205
+ ];
206
+ ProductPageComponent.propDecorators = {
207
+ configurator: [{ type: ViewChild, args: ['configurator', { read: ElementRef },] }],
208
+ selections: [{ type: ViewChild, args: ['selections', { read: ElementRef },] }],
209
+ fullscreenbutton: [{ type: ViewChild, args: ['fullscreenbutton', { read: ElementRef },] }],
210
+ sku: [{ type: Input }],
211
+ settings: [{ type: Input }],
212
+ createFrozenArticle: [{ type: Input }],
213
+ openStockEvent: [{ type: Output }]
214
+ };
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9wcm9kdWN0LXBhZ2UvcHJvZHVjdC1wYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUFFLFlBQVksRUFDeEIsS0FBSyxFQUVHLE1BQU0sRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQXdDMUUsTUFBTSxPQUFPLG9CQUFvQjtJQWdHL0IsWUFBb0IsS0FBOEIsRUFDOUIsU0FBb0IsRUFDcEIsZUFBa0MsRUFDbkMsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsZUFBb0M7UUFMbkMsVUFBSyxHQUFMLEtBQUssQ0FBeUI7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Is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QkFBZ0I7WUFDaEIsc0JBQXNCO1lBQ3RCLG1CQUFtQjs7OzJCQTRDekIsU0FBUyxTQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7eUJBRzlDLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOytCQUc1QyxTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2tCQUdsRCxLQUFLO3VCQWtCTCxLQUFLO2tDQVdMLEtBQUs7NkJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdENvbm5lY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJ0aWNsZUZ1bGxPYmplY3QgfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RvY2tBbmREZWxpdmVyeSB9IGZyb20gJy4uLy4uL21vZGVsL3N0b2NrLWFuZC1kZWxpdmVyeSc7XG5pbXBvcnQgeyBTZWxlY3RvclR5cGUgfSBmcm9tICcuLi8uLi9lbnVtL3NlbGVjdG9yLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEljb25FbnVtIH0gZnJvbSAnLi4vLi4vZW51bS9pY29uLmVudW0nO1xuaW1wb3J0IHsgSWNvbkNhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtEZWxpdmVyeVByb2dub3Npc30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktcHJvZ25vc2lzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtcGFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LXBhZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3RvZ2dsZUZ1bGxTY3JlZW4nLCBbXG4gICAgICBzdGF0ZSgnZnVsbHNjcmVlbicsIHN0eWxlKHsncG9zaXRpb24nOiAnZml4ZWQnLCAndG9wJzogJzAnLCAnbGVmdCc6ICcwJywgJ3dpZHRoJzogJzEwMCUnLCAnaGVpZ2h0JzogJzEwMCUnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAndG9wJzogJyonLCAnbGVmdCc6ICcqJywgJ3dpZHRoJzogJyonLCAnaGVpZ2h0JzogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignaGFsZnNjcmVlbiA8PT4gZnVsbHNjcmVlbicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3RvZ2dsZVRvcExlZnQnLCBbXG4gICAgICBzdGF0ZSgnZnVsbHNjcmVlbicsIHN0eWxlKHsncG9zaXRpb24nOiAnZml4ZWQnLCAndG9wJzogJzAnLCAnbGVmdCc6ICcwJ30pKSxcbiAgICAgIHN0YXRlKCdoYWxmc2NyZWVuJywgc3R5bGUoeydwb3NpdGlvbic6ICdhYnNvbHV0ZScsICd0b3AnOiAnKicsICdsZWZ0JzogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignaGFsZnNjcmVlbiA8PT4gZnVsbHNjcmVlbicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3RvZ2dsZVRvcFJpZ2h0JywgW1xuICAgICAgc3RhdGUoJ2Z1bGxzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJ2ZpeGVkJywgJ3RvcCc6ICcwJywgJ3JpZ2h0JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAndG9wJzogJyonLCAncmlnaHQnOiAnKid9KSksXG4gICAgICB0cmFuc2l0aW9uKCdoYWxmc2NyZWVuIDw9PiBmdWxsc2NyZWVuJywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbi1vdXQnKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigndG9nZ2xlRnVsbFNjcmVlblJpZ2h0JywgW1xuICAgICAgc3RhdGUoJ2Z1bGxzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJ2ZpeGVkJywgJ3dpZHRoJzogJzQwMHB4JywgJ3RvcCc6ICcwJywgJ3JpZ2h0JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2hhbGZzY3JlZW4nLCBzdHlsZSh7J3Bvc2l0aW9uJzogJyonLCAnd2lkdGgnOiAnKicsICd0b3AnOiAnKicsICdyaWdodCc6ICcqJ30pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2hhbGZzY3JlZW4gPD0+IGZ1bGxzY3JlZW4nLCBhbmltYXRlKCcyMDBtcyBlYXNlLWluLW91dCcpKSxcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCd0b2dnbGVWaXNpYmlsaXR5QnlTdGF0ZScsIFtcbiAgICAgIHN0YXRlKCdoaWRlJywgc3R5bGUoeydvcGFjaXR5JzogJzAnLCAnZGlzcGxheSc6ICdub25lJ30pKSxcbiAgICAgIHN0YXRlKCdzaG93Jywgc3R5bGUoeydkaXNwbGF5JzogJ2Jsb2NrJywgJ29wYWNpdHknOiAnMSd9KSksXG4gICAgICB0cmFuc2l0aW9uKCdoaWRlIDw9PiBzaG93JywgYW5pbWF0ZSgnMjAwbXMgMTAwbXMgZWFzZS1pbi1vdXQnKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigndG9nZ2xlVmlzaWJpbGl0eScsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeydvcGFjaXR5JzogJzAnfSkpLFxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7J29wYWNpdHknOiAnMSd9KSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCcyMDBtcyBlYXNlLWluLW91dCcpKSxcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbkVudW0gPSBJY29uRW51bTtcblxuICBAVmlld0NoaWxkKCdjb25maWd1cmF0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGNvbmZpZ3VyYXRvcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25zJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyBzZWxlY3Rpb25zOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2Z1bGxzY3JlZW5idXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGZ1bGxzY3JlZW5idXR0b246IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3UodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuY29uZmlndXJpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93M0QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mdWxsU2NyZWVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29uZmlndXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2t1ID0gdmFsdWU7XG4gICAgICB0aGlzLl9nZXRBcnRpY2xlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBza3UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2t1O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZXR0aW5ncyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3JlYXRlRnJvemVuQXJ0aWNsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvcGVuU3RvY2tFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgcHVibGljIHNldCBmdWxsU2NyZWVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZnVsbFNjcmVlbiA9IHZhbHVlO1xuICAgIHRoaXMuZnVsbHNjcmVlbkFuaW1hdGlvbkVuZCA9IHRydWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5mdWxsc2NyZWVuQW5pbWF0aW9uRW5kID0gdHJ1ZTtcbiAgICAvLyB9LCA0MDApXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1bGxTY3JlZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxTY3JlZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1bGxTY3JlZW5JY29uKCk6IEljb25FbnVtIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsU2NyZWVuID8gdGhpcy5pY29uLk5vcm1hbFNjcmVlbiA6IHRoaXMuaWNvbi5GdWxsU2NyZWVuO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50Vmlldyh2YWx1ZTogU2VsZWN0b3JUeXBlKSB7XG4gICAgdGhpcy5fY3VycmVudFZpZXcgPSB2YWx1ZTtcbiAgICB0aGlzLnNob3cyRCA9IHRoaXMuX2N1cnJlbnRWaWV3ID09PSBTZWxlY3RvclR5cGUuVHdvRDtcbiAgICB0aGlzLnNob3czRCA9IHRoaXMuX2N1cnJlbnRWaWV3ID09PSBTZWxlY3RvclR5cGUuVGhyZWVEO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFZpZXcoKTogU2VsZWN0b3JUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFZpZXc7XG4gIH1cblxuICBwdWJsaWMgYXJ0aWNsZTogQXJ0aWNsZUZ1bGxPYmplY3Q7XG4gIHB1YmxpYyBzdG9ja0FuZERlbGl2ZXJ5OiBTdG9ja0FuZERlbGl2ZXJ5O1xuICBwdWJsaWMgY29uZmlndXJhYmxlID0gZmFsc2U7XG4gIHB1YmxpYyB0aHJlZUQgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdG9yVHlwZTogU2VsZWN0b3JUeXBlO1xuICBwdWJsaWMgc2hvdzJEID0gdHJ1ZTtcbiAgcHVibGljIHNob3czRCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlndXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZ1bGxzY3JlZW5BbmltYXRpb25FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldHRpbmdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NrdTogc3RyaW5nO1xuICBwcml2YXRlIF9pbml0aWFsaXplZFN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9mdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2N1cnJlbnRWaWV3OiBTZWxlY3RvclR5cGU7XG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX3NldHRpbmdzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaW9uZTogUHJvZHVjdENvbm5lY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHVibGljIGljb25DYWNoZTogSWNvbkNhY2hlU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHNldHRpbmdzU2VydmljZTogUHJvZHVjdFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIGFwcEV2ZW50U2VydmljZTogUHJvZHVjdEV2ZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLl9zdWJzLnB1c2goXG4gICAgICB0aGlzLmFwcEV2ZW50U2VydmljZS5vbkZvcmNlUmVuZGVySW1hZ2Uuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbnMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9ucy5uYXRpdmVFbGVtZW50LmZvcmNlUmVuZGVySW1hZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZShsb2FkZWQgPT4gdGhpcy5faGFuZGxlU2V0dGluZ3NMb2FkZWQobG9hZGVkKSksXG4gICAgICAgIHRoaXMuX2lvbmUuY29udHJvbGxlckluaXRpYWxpemVkLnN1YnNjcmliZSgoaW5pdGlhbGl6ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zZXR0aW5nc0xvYWRlZCA9IGluaXRpYWxpemVkO1xuICAgICAgfSlcbiAgICApO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5fc2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuY3JlYXRlU2V0dGluZ3NGcm9tT2JqZWN0KHRoaXMuX3NldHRpbmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncztcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZFN1Yikge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWd1cmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZnVsbHNjcmVlbmJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnN0YW5jZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGV0YWlsKSB7XG4gICAgICB0aGlzLl9pb25lLnNldEluc3RhbmNlKGV2ZW50LmRldGFpbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZVN0YXJ0Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Z1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsU2NyZWVuID0gIXRoaXMuZnVsbFNjcmVlbjtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNldHRpbmdzTG9hZGVkKGxvYWRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChsb2FkZWQpIHtcbiAgICAgIHRoaXMuX2lvbmUuaW5pdENvbm5lY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9nZXRBcnRpY2xlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZFN1Yikge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWRTdWIgPSB0aGlzLl9pb25lLmNvbnRyb2xsZXJJbml0aWFsaXplZC5zdWJzY3JpYmUoYXN5bmMgKGluaXQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChpbml0KSB7XG4gICAgICAgIHRoaXMuX2lvbmUuZ2V0RnVsbEFydGljbGUodGhpcy5fc2t1KS50aGVuKChhcnRpY2xlOiBBcnRpY2xlRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXJ0aWNsZSA9IGFydGljbGU7XG4gICAgICAgICAgaWYgKHRoaXMuYXJ0aWNsZSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmFibGUgPSB0aGlzLmFydGljbGUuZ29vZFR5cGUgPT09ICdCJztcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gU2VsZWN0b3JUeXBlLlR3b0Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRocmVlRCA9IHRoaXMuYXJ0aWNsZS5pczNEO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RvclR5cGUgPSB0aGlzLmFydGljbGUuc2VsZWN0b3JUeXBlQ3VzdG9tZXI7XG4gICAgICAgICAgICB0aGlzLl9pb25lLmdldERlbGl2ZXJ5UHJvZ25vc2lzKHRoaXMuYXJ0aWNsZS5nb29kSWQpLnRoZW4oKHN0b2NrSW5mbzogRGVsaXZlcnlQcm9nbm9zaXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RvY2tBbmREZWxpdmVyeTogRGVsaXZlcnlQcm9nbm9zaXMgPSBzdG9ja0luZm87XG4gICAgICAgICAgICAgIHRoaXMuc3RvY2tBbmREZWxpdmVyeSA9IG5ldyBTdG9ja0FuZERlbGl2ZXJ5KDAsIHN0b2NrQW5kRGVsaXZlcnkucmV0dXJuVmFsdWUgPyBzdG9ja0FuZERlbGl2ZXJ5LnJldHVyblZhbHVlIDogJyAnKTtcbiAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgb3BlblN0b2NrKCkge1xuICAgIHRoaXMub3BlblN0b2NrRXZlbnQuZW1pdCgpO1xuICB9XG5cbn1cbiJdfQ==