@colijnit/product 260.1.2 → 261.20.0

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 (145) hide show
  1. package/fesm2022/colijnit-product.mjs +4534 -0
  2. package/fesm2022/colijnit-product.mjs.map +1 -0
  3. package/index.d.ts +948 -0
  4. package/package.json +32 -33
  5. package/app/bundle/service/local-storage.service.d.ts +0 -14
  6. package/app/components/core/header/header.component.d.ts +0 -7
  7. package/app/components/core/header/header.module.d.ts +0 -2
  8. package/app/components/image-carousel/image-carousel.component.d.ts +0 -48
  9. package/app/components/image-carousel/image-carousel.module.d.ts +0 -2
  10. package/app/components/product-additional-description/product-additional-description.component.d.ts +0 -14
  11. package/app/components/product-additional-description/product-additional-description.module.d.ts +0 -2
  12. package/app/components/product-additional-info/product-additional-info.component.d.ts +0 -21
  13. package/app/components/product-additional-info/product-additional-info.module.d.ts +0 -2
  14. package/app/components/product-addtocart/product-addtocart.component.d.ts +0 -42
  15. package/app/components/product-addtocart/product-addtocart.module.d.ts +0 -2
  16. package/app/components/product-delivery/product-delivery.component.d.ts +0 -18
  17. package/app/components/product-delivery/product-delivery.module.d.ts +0 -2
  18. package/app/components/product-description/product-description.component.d.ts +0 -7
  19. package/app/components/product-description/product-description.module.d.ts +0 -2
  20. package/app/components/product-dialog/product-dialog.component.d.ts +0 -27
  21. package/app/components/product-dialog/product-dialog.module.d.ts +0 -2
  22. package/app/components/product-documents/product-document.module.d.ts +0 -2
  23. package/app/components/product-documents/product-documents.component.d.ts +0 -10
  24. package/app/components/product-external-source/product-external-source.component.d.ts +0 -51
  25. package/app/components/product-external-source/product-external-source.module.d.ts +0 -2
  26. package/app/components/product-hd/product-hd.component.d.ts +0 -25
  27. package/app/components/product-hd/product-hd.module.d.ts +0 -2
  28. package/app/components/product-info-tabs/product-info-tabs.component.d.ts +0 -18
  29. package/app/components/product-info-tabs/product-info-tabs.module.d.ts +0 -2
  30. package/app/components/product-page/product-page.component.d.ts +0 -66
  31. package/app/components/product-page/product-page.module.d.ts +0 -2
  32. package/app/components/product-price/product-price.component.d.ts +0 -19
  33. package/app/components/product-price/product-price.module.d.ts +0 -2
  34. package/app/components/product-properties/product-properties.component.d.ts +0 -16
  35. package/app/components/product-properties/product-properties.module.d.ts +0 -2
  36. package/app/components/product-related/product-related.component.d.ts +0 -33
  37. package/app/components/product-related/product-related.module.d.ts +0 -2
  38. package/app/components/product-selector-type/product-selector-type.component.d.ts +0 -22
  39. package/app/components/product-selector-type/product-selector-type.module.d.ts +0 -2
  40. package/app/components/product-stock/product-stock.component.d.ts +0 -20
  41. package/app/components/product-stock/product-stock.module.d.ts +0 -2
  42. package/app/components/product-symbols/product-symbols.component.d.ts +0 -10
  43. package/app/components/product-symbols/product-symbols.module.d.ts +0 -2
  44. package/app/components/render-carousel/render-carousel.component.d.ts +0 -40
  45. package/app/components/render-carousel/render-carousel.module.d.ts +0 -2
  46. package/app/enum/icon.enum.d.ts +0 -22
  47. package/app/enum/language-code.enum.d.ts +0 -6
  48. package/app/enum/selector-type.enum.d.ts +0 -5
  49. package/app/ione-product.component.d.ts +0 -47
  50. package/app/ione-product.module.d.ts +0 -2
  51. package/app/model/article-quantity.model.d.ts +0 -5
  52. package/app/model/icon.d.ts +0 -4
  53. package/app/model/productSettings.d.ts +0 -18
  54. package/app/model/render-modes.d.ts +0 -5
  55. package/app/model/render-parameters.d.ts +0 -7
  56. package/app/model/settings-options.d.ts +0 -10
  57. package/app/model/stock-and-delivery.d.ts +0 -5
  58. package/app/pipe/localize.pipe.d.ts +0 -7
  59. package/app/pipe/pipe.module.d.ts +0 -2
  60. package/app/product-version.d.ts +0 -6
  61. package/app/service/dictionary.service.d.ts +0 -24
  62. package/app/service/icon-cache.service.d.ts +0 -17
  63. package/app/service/product-connector-adapter.service.d.ts +0 -43
  64. package/app/service/product-connector.service.d.ts +0 -43
  65. package/app/service/product-event.service.d.ts +0 -27
  66. package/app/service/product-script-loader.service.d.ts +0 -9
  67. package/app/service/product-settings.service.d.ts +0 -16
  68. package/app/utils/bit-utils.d.ts +0 -7
  69. package/app/utils/json-utils.service.d.ts +0 -3
  70. package/assets/dictionary/text.properties.d.ts +0 -3
  71. package/bundles/colijnit-product.umd.js +0 -4317
  72. package/bundles/colijnit-product.umd.js.map +0 -1
  73. package/colijnit-product.d.ts +0 -49
  74. package/colijnit-product.metadata.json +0 -1
  75. package/esm2015/app/bundle/service/local-storage.service.js +0 -37
  76. package/esm2015/app/components/core/header/header.component.js +0 -26
  77. package/esm2015/app/components/core/header/header.module.js +0 -19
  78. package/esm2015/app/components/image-carousel/image-carousel.component.js +0 -288
  79. package/esm2015/app/components/image-carousel/image-carousel.module.js +0 -23
  80. package/esm2015/app/components/product-additional-description/product-additional-description.component.js +0 -58
  81. package/esm2015/app/components/product-additional-description/product-additional-description.module.js +0 -21
  82. package/esm2015/app/components/product-additional-info/product-additional-info.component.js +0 -108
  83. package/esm2015/app/components/product-additional-info/product-additional-info.module.js +0 -21
  84. package/esm2015/app/components/product-addtocart/product-addtocart.component.js +0 -185
  85. package/esm2015/app/components/product-addtocart/product-addtocart.module.js +0 -26
  86. package/esm2015/app/components/product-delivery/product-delivery.component.js +0 -49
  87. package/esm2015/app/components/product-delivery/product-delivery.module.js +0 -23
  88. package/esm2015/app/components/product-description/product-description.component.js +0 -23
  89. package/esm2015/app/components/product-description/product-description.module.js +0 -19
  90. package/esm2015/app/components/product-dialog/product-dialog.component.js +0 -86
  91. package/esm2015/app/components/product-dialog/product-dialog.module.js +0 -25
  92. package/esm2015/app/components/product-documents/product-document.module.js +0 -25
  93. package/esm2015/app/components/product-documents/product-documents.component.js +0 -31
  94. package/esm2015/app/components/product-external-source/product-external-source.component.js +0 -192
  95. package/esm2015/app/components/product-external-source/product-external-source.module.js +0 -23
  96. package/esm2015/app/components/product-hd/product-hd.component.js +0 -124
  97. package/esm2015/app/components/product-hd/product-hd.module.js +0 -23
  98. package/esm2015/app/components/product-info-tabs/product-info-tabs.component.js +0 -82
  99. package/esm2015/app/components/product-info-tabs/product-info-tabs.module.js +0 -29
  100. package/esm2015/app/components/product-page/product-page.component.js +0 -254
  101. package/esm2015/app/components/product-page/product-page.module.js +0 -50
  102. package/esm2015/app/components/product-price/product-price.component.js +0 -75
  103. package/esm2015/app/components/product-price/product-price.module.js +0 -23
  104. package/esm2015/app/components/product-properties/product-properties.component.js +0 -61
  105. package/esm2015/app/components/product-properties/product-properties.module.js +0 -21
  106. package/esm2015/app/components/product-related/product-related.component.js +0 -137
  107. package/esm2015/app/components/product-related/product-related.module.js +0 -25
  108. package/esm2015/app/components/product-selector-type/product-selector-type.component.js +0 -63
  109. package/esm2015/app/components/product-selector-type/product-selector-type.module.js +0 -26
  110. package/esm2015/app/components/product-stock/product-stock.component.js +0 -69
  111. package/esm2015/app/components/product-stock/product-stock.module.js +0 -23
  112. package/esm2015/app/components/product-symbols/product-symbols.component.js +0 -49
  113. package/esm2015/app/components/product-symbols/product-symbols.module.js +0 -26
  114. package/esm2015/app/components/render-carousel/render-carousel.component.js +0 -127
  115. package/esm2015/app/components/render-carousel/render-carousel.module.js +0 -25
  116. package/esm2015/app/enum/icon.enum.js +0 -24
  117. package/esm2015/app/enum/language-code.enum.js +0 -8
  118. package/esm2015/app/enum/selector-type.enum.js +0 -7
  119. package/esm2015/app/ione-product.component.js +0 -165
  120. package/esm2015/app/ione-product.module.js +0 -36
  121. package/esm2015/app/model/article-quantity.model.js +0 -3
  122. package/esm2015/app/model/icon.js +0 -23
  123. package/esm2015/app/model/productSettings.js +0 -14
  124. package/esm2015/app/model/render-modes.js +0 -7
  125. package/esm2015/app/model/render-parameters.js +0 -10
  126. package/esm2015/app/model/settings-options.js +0 -13
  127. package/esm2015/app/model/stock-and-delivery.js +0 -8
  128. package/esm2015/app/pipe/localize.pipe.js +0 -27
  129. package/esm2015/app/pipe/pipe.module.js +0 -18
  130. package/esm2015/app/product-version.js +0 -10
  131. package/esm2015/app/service/dictionary.service.js +0 -94
  132. package/esm2015/app/service/icon-cache.service.js +0 -40
  133. package/esm2015/app/service/product-connector-adapter.service.js +0 -199
  134. package/esm2015/app/service/product-connector.service.js +0 -115
  135. package/esm2015/app/service/product-event.service.js +0 -27
  136. package/esm2015/app/service/product-script-loader.service.js +0 -68
  137. package/esm2015/app/service/product-settings.service.js +0 -86
  138. package/esm2015/app/utils/bit-utils.js +0 -18
  139. package/esm2015/app/utils/json-utils.service.js +0 -29
  140. package/esm2015/assets/dictionary/text.properties.js +0 -102
  141. package/esm2015/colijnit-product.js +0 -50
  142. package/esm2015/public_api.js +0 -10
  143. package/fesm2015/colijnit-product.js +0 -3529
  144. package/fesm2015/colijnit-product.js.map +0 -1
  145. package/public_api.d.ts +0 -9
@@ -1,3529 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Directive, Injectable, EventEmitter, Component, ViewEncapsulation, Input, Output, Renderer2, ChangeDetectorRef, ViewChild, ElementRef, Pipe, NgModule, ChangeDetectionStrategy, HostListener, HostBinding, SecurityContext, CUSTOM_ELEMENTS_SCHEMA, Inject, PLATFORM_ID, NO_ERRORS_SCHEMA } from '@angular/core';
3
- import { __awaiter } from 'tslib';
4
- import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
5
- import { Options } from '@colijnit/ioneconnector/build/model/options';
6
- import { ArticleFullObject } from '@colijnit/articleapi/build/model/article-full-object';
7
- import { SuperArticle } from '@colijnit/articleapi/build/model/super-article';
8
- import { Articles } from '@colijnit/articleapi/build/articles';
9
- import { DeliveryPrognosis } from '@colijnit/articleapi/build/model/delivery-prognosis';
10
- import { DocumentContent } from '@colijnit/articleapi/build/model/document-content';
11
- import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
12
- import { Transaction } from '@colijnit/transactionapi/build/transaction';
13
- import { MainApi } from '@colijnit/mainapi';
14
- import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/transaction-info-response.bo';
15
- import { ArticleListObjectExtended } from '@colijnit/articleapi/build/model/article-list-object-extended.bo';
16
- import { ImageContent } from '@colijnit/mainapi/build/model/image-content.bo';
17
- import * as i1 from '@angular/common/http';
18
- import { HttpClient } from '@angular/common/http';
19
- import { StringUtils } from '@colijnit/ioneconnector/build/utils/string-utils';
20
- import { CommonModule, isPlatformBrowser } from '@angular/common';
21
- import { trigger, state, style, transition, animate } from '@angular/animations';
22
- import * as i1$1 from '@angular/platform-browser';
23
- import { DomSanitizer } from '@angular/platform-browser';
24
- import { IconModule, LoaderModule, ScrollContainerModule, PriceDisplayPipeModule, NumberPickerModule, ButtonModule, FilesUploadModule, TileModule } from '@colijnit/corecomponents';
25
- import { CoDocument } from '@colijnit/mainapi/build/model/co-document.bo';
26
- import { ConfiguratorStatisticsEnvironment } from '@colijnit/articleapi/build/model/configurator-statistics-environment';
27
- import { LoaderModule as LoaderModule$1, ArticleTileModule, IconCollapseHandleModule, ButtonModule as ButtonModule$1 } from '@colijnit/corecomponents_v12';
28
-
29
- // this file is dynamically created, do not change this
30
- class Version {
31
- constructor() {
32
- this.name = "@colijnit/product";
33
- this.description = "Product detail page project for iOne";
34
- this.symVer = "260.1.2";
35
- this.publishDate = "5-1-2026 18:13:02";
36
- }
37
- }
38
-
39
- class SettingsOptions {
40
- constructor() {
41
- this.showStockStatus = false;
42
- this.showZoomButton = false;
43
- this.showTagFilter = false;
44
- this.showAsConfigured = false;
45
- this.inlineAnswers = false;
46
- this.showArButton = false;
47
- this.arEnabled = false;
48
- this.vrEnabled = false;
49
- }
50
- }
51
-
52
- var RenderModes;
53
- (function (RenderModes) {
54
- RenderModes["RenderRoom"] = "render_room";
55
- RenderModes["RenderShop"] = "render_shop";
56
- RenderModes["RenderIone"] = "render_ione";
57
- })(RenderModes || (RenderModes = {}));
58
-
59
- class RenderParameters$1 {
60
- constructor() {
61
- this.host = "";
62
- this.port = 0;
63
- this.secure = false;
64
- this.renderMode = RenderModes.RenderShop;
65
- }
66
- }
67
-
68
- class ProductSettings extends Options {
69
- constructor() {
70
- super(...arguments);
71
- this.session = undefined;
72
- this.createWebOrder = true;
73
- this.currencySymbol = '€';
74
- this.options = new SettingsOptions();
75
- this.renderParameters = new RenderParameters$1();
76
- }
77
- }
78
-
79
- class ProductEventService {
80
- constructor() {
81
- this.onAddToCart = new Subject();
82
- this.onAlternativeClick = new Subject();
83
- this.onAddToQuote = new Subject();
84
- this.onForceRenderImage = new Subject();
85
- this.onArticleReceived = new Subject();
86
- this.onSelectionsReceived = new Subject();
87
- this.onImageReceived = new Subject();
88
- this.onRenderStarted = new Subject();
89
- this.onRenderImageReceived = new Subject();
90
- this.onDraftRenderImageReceived = new Subject();
91
- this.onArticleInfoReceived = new Subject();
92
- this.onAnswersAvailable = new Subject();
93
- this.onReadyToRender = new Subject();
94
- this.onUpdateProductInfoTab = new Subject();
95
- this.errorMessage = new Subject();
96
- this.onGetRenderForRenderCarousel = new Subject();
97
- }
98
- }
99
- ProductEventService.decorators = [
100
- { type: Directive },
101
- { type: Injectable }
102
- ];
103
-
104
- // Sole responsibility is simply to wrap around a colijn.Connector to create a stable inner interface to the library in a 1:1 method way.
105
- // Only to be used by the IOneControllerService.
106
- class ProductConnectorAdapterService {
107
- constructor(_eventService) {
108
- this._eventService = _eventService;
109
- this.showLoader = new Subject();
110
- this._boFactory = new BusinessObjectFactory();
111
- this._subs = [];
112
- }
113
- ngOnDestroy() {
114
- this._subs.forEach(s => s.unsubscribe());
115
- }
116
- initConnector(options) {
117
- return __awaiter(this, void 0, void 0, function* () {
118
- this.articleConnector = new Articles(options);
119
- yield this.articleConnector.connect();
120
- this.transactionConnector = new Transaction(options);
121
- this.mainConnector = new MainApi(options);
122
- this._subs.push(
123
- // @ts-ignore
124
- this.articleConnector.showLoader.subscribe(value => this.showLoader.next(value)));
125
- });
126
- }
127
- setInstance(instanceId) {
128
- // this.articleConnector.setInstanceToConfigure(instanceId, false);
129
- }
130
- getProductBundleSettings(url, upId) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- const tempSettings = new ProductSettings();
133
- tempSettings.url = url;
134
- tempSettings.schema = upId.toString();
135
- const tempMainConnector = new MainApi(tempSettings);
136
- const response = yield tempMainConnector.getPublicParams(upId);
137
- if (response) {
138
- return response.productSettings;
139
- }
140
- return "";
141
- });
142
- }
143
- convertArticleFullObjectToArticleExtended(article) {
144
- if (article) {
145
- return this._boFactory.makeWithRawBackendData(ArticleListObjectExtended, article);
146
- }
147
- }
148
- getDeliveryPrognosis(goodId, branchNr) {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- const deliveryPrognosis = yield this.getSelectorDeliveryDate();
151
- if (!deliveryPrognosis || !deliveryPrognosis.returnValue) {
152
- return this.getDeliveryDate2(goodId);
153
- }
154
- return deliveryPrognosis;
155
- });
156
- }
157
- getSelectorDeliveryDate() {
158
- return __awaiter(this, void 0, void 0, function* () {
159
- const response = yield this.articleConnector.getSelectorDeliveryDate();
160
- if (response && response.validationResult && response.validationResult.success) {
161
- return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
162
- }
163
- else {
164
- return null;
165
- }
166
- });
167
- }
168
- getArtStockStatus(goodId) {
169
- return __awaiter(this, void 0, void 0, function* () {
170
- const response = yield this.articleConnector.getArtStockStatus(goodId);
171
- if (response && response.validationResult && response.validationResult.success) {
172
- return response.resultObject;
173
- }
174
- else {
175
- return null;
176
- }
177
- });
178
- }
179
- getDeliveryDate2(goodId) {
180
- return __awaiter(this, void 0, void 0, function* () {
181
- const response = yield this.articleConnector.getDeliveryDate2(goodId);
182
- if (response && response.validationResult && response.validationResult.success) {
183
- return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
184
- }
185
- else {
186
- return null;
187
- }
188
- });
189
- }
190
- getJsonConfiguredArticles(configuratorStatistics) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- const response = yield this.articleConnector.getJsonConfiguredArticles(configuratorStatistics);
193
- if (response && response.validationResult && response.validationResult.success) {
194
- return response.resultObject;
195
- }
196
- else {
197
- return '';
198
- }
199
- });
200
- }
201
- getJsonArticleFlatTree(goodId, goodType, quantity, externalSource = false, showLoader = true, instanceId, configuratorStatistics) {
202
- return __awaiter(this, void 0, void 0, function* () {
203
- return this.articleConnector.getJsonArticleFlatTree(goodId, goodType, quantity, externalSource, showLoader, instanceId, configuratorStatistics).catch((messages) => {
204
- this._eventService.errorMessage.next(messages);
205
- return null;
206
- });
207
- });
208
- }
209
- getGeneratedArtDirectly(goodId, showLoader) {
210
- return __awaiter(this, void 0, void 0, function* () {
211
- return this.articleConnector.getGeneratedArtDirectly(goodId, showLoader).catch((messages) => {
212
- this._eventService.errorMessage.next(messages);
213
- return null;
214
- });
215
- });
216
- }
217
- getGoodIdFromArticleNr(sku) {
218
- return __awaiter(this, void 0, void 0, function* () {
219
- const response = yield this.articleConnector.getGoodIdFromArticleNr(sku);
220
- if (response && response.validationResult && response.validationResult.success) {
221
- return response.resultObject;
222
- }
223
- else {
224
- return null;
225
- }
226
- });
227
- }
228
- getArticleFullObject(goodId, showLoader = true) {
229
- return __awaiter(this, void 0, void 0, function* () {
230
- const response = yield this.articleConnector.getArticleFullObject(goodId, showLoader);
231
- if (response && response.validationResult && response.validationResult.success) {
232
- return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
233
- }
234
- else {
235
- return null;
236
- }
237
- });
238
- }
239
- getSuperArticle(id, branch) {
240
- return __awaiter(this, void 0, void 0, function* () {
241
- const response = yield this.articleConnector.getSuperArticleQuickSel(id, branch);
242
- if (response && response.validationResult && response.validationResult.success) {
243
- return this._boFactory.makeWithRawBackendData(SuperArticle, response.resultObject);
244
- }
245
- else {
246
- return null;
247
- }
248
- });
249
- }
250
- getDocumentContent(docId, thumbnail = true) {
251
- return __awaiter(this, void 0, void 0, function* () {
252
- const response = yield this.articleConnector.getDocumentContent(docId, thumbnail);
253
- if (response && response.validationResult && response.validationResult.success) {
254
- return this._boFactory.makeWithRawBackendData(DocumentContent, response.resultObject);
255
- }
256
- else {
257
- return null;
258
- }
259
- });
260
- }
261
- addWebSessionTransactionLine(transactionUuid, sku, quantity) {
262
- return __awaiter(this, void 0, void 0, function* () {
263
- const response = yield this.transactionConnector.addWebSessionTransactionLine(transactionUuid, sku, quantity);
264
- if (response && response.validationResult && response.validationResult.success) {
265
- const infoResponse = this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
266
- return infoResponse.transactionInfo.uuid;
267
- }
268
- return "";
269
- });
270
- }
271
- getImageForCoDocument(document, thumb) {
272
- return __awaiter(this, void 0, void 0, function* () {
273
- const response = yield this.mainConnector.getImageForCoDocument(document, thumb);
274
- if (response && response.validationResult && response.validationResult.success) {
275
- return this._boFactory.makeWithRawBackendData(ImageContent, response.resultObject);
276
- }
277
- });
278
- }
279
- }
280
- ProductConnectorAdapterService.decorators = [
281
- { type: Injectable }
282
- ];
283
- ProductConnectorAdapterService.ctorParameters = () => [
284
- { type: ProductEventService }
285
- ];
286
-
287
- class JsonUtilsService {
288
- readJsonFile(filePath) {
289
- return __awaiter(this, void 0, void 0, function* () {
290
- try {
291
- const response = yield fetch(filePath);
292
- if (!response.ok) {
293
- return null;
294
- }
295
- else {
296
- return response.json();
297
- }
298
- }
299
- catch (e) {
300
- console.error('Error getting file:', e.message);
301
- return '';
302
- }
303
- });
304
- }
305
- }
306
- JsonUtilsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function JsonUtilsService_Factory() { return new JsonUtilsService(); }, token: JsonUtilsService, providedIn: "root" });
307
- JsonUtilsService.decorators = [
308
- { type: Injectable, args: [{
309
- providedIn: 'root'
310
- },] }
311
- ];
312
-
313
- var LanguageCode;
314
- (function (LanguageCode) {
315
- LanguageCode["Dutch"] = "nl-NL";
316
- LanguageCode["English"] = "en-GB";
317
- LanguageCode["German"] = "de-DE";
318
- LanguageCode["French"] = "fr-FR";
319
- })(LanguageCode || (LanguageCode = {}));
320
-
321
- class Dictionary {
322
- constructor() {
323
- this.strings = {
324
- "en": {
325
- "ADDITIONAL_DATA": "Additional information",
326
- "ALTERNATIVE_PRODUCTS": "Alternative products",
327
- "ARTICLE_NUMBER": "Productnumber",
328
- "AS_CONFIGURED": "As configured",
329
- "CATEGORY": "Category",
330
- "CATEGORY_TYPE": "Category type",
331
- "CONFIGURE": "Configure",
332
- "DELIVERY_TIME_PERIOD": "Delivery time",
333
- "DESCRIPTION": "Description",
334
- "DOCUMENTS": "Documents",
335
- "DOWNLOADS": "Downloads",
336
- "FEATURES": "Features",
337
- "HEIGHT": "Height",
338
- "MATERIAL": "Material",
339
- "PRODUCT_IN_STOCK": "In stock",
340
- "PRODUCT_LIMITED_STOCK": "Limited stock",
341
- "PRODUCT_NOT_IN_STOCK": "Not in stock",
342
- "PROPERTIES": "Characteristics",
343
- "QUOTATION": "Quotation",
344
- "READ_MORE": "Read more",
345
- "RELATED_PRODUCTS": "Related products",
346
- "SHOPPING_CART_IN": "In Shopping Cart",
347
- "SHOW_IN": "Show in",
348
- "STOCK": "Stock",
349
- "SYMBOLS": "Symbols",
350
- "TITLE": "Title",
351
- "TURNOVERGROUP": "Turnover group",
352
- "VARIANTS": "Variations",
353
- "WIDTH": "Width",
354
- "SUGGESTION": "Suggestion",
355
- },
356
- "nl": {
357
- "ADDITIONAL_DATA": "Extra informatie",
358
- "ALTERNATIVE_PRODUCTS": "Alternatieve producten",
359
- "ARTICLE_NUMBER": "Artikel nummer",
360
- "AS_CONFIGURED": "Zoals samengesteld",
361
- "CATEGORY": "Categorie",
362
- "CATEGORY_TYPE": "Categorie type",
363
- "CONFIGURE": "Configureren",
364
- "DELIVERY_TIME_PERIOD": "Levertijd",
365
- "DESCRIPTION": "Omschrijving",
366
- "DOCUMENTS": "Documenten",
367
- "DOWNLOADS": "Downloads",
368
- "FEATURES": "Kenmerken",
369
- "HEIGHT": "Hoogte",
370
- "MATERIAL": "Materiaal",
371
- "PRODUCT_IN_STOCK": "Op voorraad",
372
- "PRODUCT_LIMITED_STOCK": "Beperkt op voorraad",
373
- "PRODUCT_NOT_IN_STOCK": "Niet op voorraad",
374
- "PROPERTIES": "Eigenschappen",
375
- "QUOTATION": "Quotatie",
376
- "READ_MORE": "Lees meer",
377
- "RELATED_PRODUCTS": "Gerelateerde producten",
378
- "SHOPPING_CART_IN": "In winkelwagen",
379
- "SHOW_IN": "Laat zien",
380
- "STOCK": "Voorraad",
381
- "SYMBOLS": "Symbolen",
382
- "TITLE": "Titel",
383
- "TURNOVERGROUP": "Omzetgroep",
384
- "VARIANTS": "Varianten",
385
- "WIDTH": "Breedte",
386
- "SUGGESTION": "Suggesties bij",
387
- },
388
- "de": {
389
- "ADDITIONAL_DATA": "Extra informatie",
390
- "ALTERNATIVE_PRODUCTS": "Alternative Produkte",
391
- "ARTICLE_NUMBER": "Artikelnummer",
392
- "CATEGORY": "Kategorie",
393
- "CATEGORY_TYPE": "Kategorietype",
394
- "CONFIGURE": "Konfigurieren",
395
- "DELIVERY_TIME_PERIOD": "Lieferzeit",
396
- "DESCRIPTION": "Beschreibung",
397
- "DOCUMENTS": "Dateien",
398
- "DOWNLOADS": "Downloads",
399
- "FEATURES": "Eigenschaften",
400
- "HEIGHT": "Höhe",
401
- "MATERIAL": "Material",
402
- "PRODUCT_IN_STOCK": "Auf lager",
403
- "PRODUCT_LIMITED_STOCK": "Begrentzt auf lager",
404
- "PRODUCT_NOT_IN_STOCK": "Nicht auf lager",
405
- "PROPERTIES": "Eigenschaften",
406
- "QUOTATION": "Angebot",
407
- "READ_MORE": "Lesen Sie mehr",
408
- "RELATED_PRODUCTS": "Verwandte Produkte",
409
- "SHOPPING_CART_IN": "Im Einkaufswagen",
410
- "SHOW_IN": "Zeigen",
411
- "STOCK": "Vorrat",
412
- "SYMBOLS": "Symbole",
413
- "TITLE": "Titulatur",
414
- "TURNOVERGROUP": "Umsatzgruppe",
415
- "VARIANTS": "Varianten",
416
- "WIDTH": "Breite",
417
- "SUGGESTION": "Suggesties bij",
418
- }
419
- };
420
- }
421
- }
422
-
423
- // The localization service, providing peers with text translation functionality.
424
- class DictionaryService {
425
- constructor(_http, _jsonUtils) {
426
- this._http = _http;
427
- this._jsonUtils = _jsonUtils;
428
- this.dictionaryUrl = 'js/browser/res/dictionary/';
429
- // private _dictionaryPromise: Map<LanguageCode, Promise<{ [key: string]: string }>> = new Map<LanguageCode, Promise<{ [key: string]: string }>>();
430
- this._dictionaries = new Map();
431
- // Some dictionary values have one or more '|~' texts in them, meant to be replaced with client-side given texts.
432
- this._placeholder = '|~';
433
- }
434
- get language() {
435
- return this._language;
436
- }
437
- set rootUrl(value) {
438
- this._rootUrl = value;
439
- this._dictBasePath = this._rootUrl + '/' + this.dictionaryUrl;
440
- }
441
- // Loads the dictionary for given language in memory.
442
- setDictionary(language) {
443
- return __awaiter(this, void 0, void 0, function* () {
444
- this._language = language || LanguageCode.Dutch;
445
- if (!this._dictionaries.has(this._language)) {
446
- const dictionary = new Dictionary();
447
- if (dictionary.strings[this._language.substr(0, 2).toLowerCase()] !== undefined) {
448
- this._dictionaries.set(this._language, dictionary.strings[this._language.substr(0, 2).toLowerCase()]);
449
- }
450
- }
451
- // if (!this._dictionaryPromise.has(language)) {
452
- // this._dictionaryPromise.set(language,
453
- // this._jsonUtils.readJsonFile(this._dictBasePath + 'text_' + language.substr(0, 2).toLowerCase() + '.properties.json')
454
- // .then((data: { [key: string]: string }) => {
455
- // this._dictionaries.set(language, data);
456
- // this.dictionaryLoaded.next();
457
- // return data;
458
- // })
459
- // // this._http.get(this._dictBasePath + 'text_' + language.substr(0, 2).toLowerCase() + '.properties.json')
460
- // // .toPromise().then((data: { [key: string]: string }) => {
461
- // // this._dictionaries.set(language, data);
462
- // // return data;
463
- // // })
464
- // );
465
- // } else {
466
- // this.dictionaryLoaded.next();
467
- // }
468
- // await this._dictionaryPromise.get(language);
469
- });
470
- }
471
- /**
472
- * Returns the localized text for the given dictionary key.
473
- * @param {string} key
474
- * @param {boolean} [upperCaseFirst = true] False for first letter lowercase, true for first letter uppercase for returned dict val
475
- * @param {string[]} replacementTexts Rest params for replacement of '|~' in returned dict value
476
- * @returns {string} The translated text for given dictionary key
477
- */
478
- get(key, upperCaseFirst = true, ...replacementTexts) {
479
- if (!StringUtils.IsStringWithLength(key)) {
480
- return key || '';
481
- }
482
- let text = this._dictionaries.get(this.language)[key];
483
- text = StringUtils.IsStringWithLength(text) ? text : key;
484
- if (upperCaseFirst) {
485
- text = text.charAt(0).toUpperCase() + text.slice(1);
486
- }
487
- else {
488
- text = text.charAt(0).toLowerCase() + text.slice(1);
489
- }
490
- if (replacementTexts.length > 0) {
491
- text = StringUtils.ReplaceOccurrencesIn(text, this._placeholder, ...replacementTexts);
492
- }
493
- return text;
494
- }
495
- }
496
- DictionaryService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DictionaryService_Factory() { return new DictionaryService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(JsonUtilsService)); }, token: DictionaryService, providedIn: "root" });
497
- DictionaryService.decorators = [
498
- { type: Injectable, args: [{
499
- providedIn: 'root'
500
- },] }
501
- ];
502
- DictionaryService.ctorParameters = () => [
503
- { type: HttpClient },
504
- { type: JsonUtilsService }
505
- ];
506
-
507
- class ProductSettingsService {
508
- constructor(_jsonUtilsService, _dictionaryService) {
509
- this._jsonUtilsService = _jsonUtilsService;
510
- this._dictionaryService = _dictionaryService;
511
- this.settingsLoaded = new BehaviorSubject(false);
512
- }
513
- set settings(value) {
514
- this._settings = value;
515
- }
516
- get settings() {
517
- return this._settings;
518
- }
519
- initializeSettings(finish = true) {
520
- return __awaiter(this, void 0, void 0, function* () {
521
- // see if there's a json file for application settings
522
- if (typeof settings === 'undefined') {
523
- const jsonSettings = yield this._jsonUtilsService.readJsonFile('product-settings.json');
524
- if (jsonSettings) {
525
- this.settings = Object.assign(new ProductSettings(), jsonSettings);
526
- this.settings.options = Object.assign(new SettingsOptions(), this.settings.options);
527
- if (finish) {
528
- this.settingsFinished();
529
- }
530
- }
531
- }
532
- else {
533
- this.settings = Object.assign(new ProductSettings(), settings);
534
- this.settings.options = Object.assign(new SettingsOptions(), this.settings.options);
535
- if (finish) {
536
- this.settingsFinished();
537
- }
538
- }
539
- });
540
- }
541
- createSettingsFromObject(obj) {
542
- return __awaiter(this, void 0, void 0, function* () {
543
- if (!this.settings) {
544
- this.settings = new ProductSettings();
545
- }
546
- const ownOptions = Object.assign({}, this.settings.options);
547
- const ownRenderParameters = Object.assign({}, this.settings.renderParameters);
548
- this.settings = Object.assign({}, this.settings, obj);
549
- if (obj.renderParameters) {
550
- this.settings.renderParameters = Object.assign({}, ownRenderParameters, obj.renderParameters);
551
- }
552
- if (obj.options) {
553
- this.settings.options = Object.assign({}, ownOptions, obj.options);
554
- }
555
- if (obj.hasOwnProperty('assetPath')) {
556
- this.settings.assetPath = obj['assetPath'];
557
- if (this.settings.assetPath[this.settings.assetPath.length - 1] !== '/') {
558
- this.settings.assetPath += '/';
559
- }
560
- this.settings.threeDAssetPath = this.settings.assetPath;
561
- }
562
- if (obj.hasOwnProperty('threeDAssetPath')) {
563
- this.settings.threeDAssetPath = obj['threeDAssetPath'];
564
- if (this.settings.threeDAssetPath[this.settings.threeDAssetPath.length - 1] !== '/') {
565
- this.settings.threeDAssetPath += '/';
566
- }
567
- }
568
- this.settingsFinished();
569
- });
570
- }
571
- settingsFinished() {
572
- return __awaiter(this, void 0, void 0, function* () {
573
- yield this._dictionaryService.setDictionary(this.settings.languageCode);
574
- this.settingsLoaded.next(true);
575
- });
576
- }
577
- }
578
- ProductSettingsService.decorators = [
579
- { type: Injectable }
580
- ];
581
- ProductSettingsService.ctorParameters = () => [
582
- { type: JsonUtilsService },
583
- { type: DictionaryService }
584
- ];
585
-
586
- // Holds all iONE backend related state and methods for a running HomeDecorator. To be used anywhere internally.
587
- class ProductConnectorService {
588
- constructor(_adapterService, _settingsService) {
589
- this._adapterService = _adapterService;
590
- this._settingsService = _settingsService;
591
- this.controllerInitialized = new BehaviorSubject(false);
592
- this.articleLoaded = new BehaviorSubject(false);
593
- this._initializing = false;
594
- this._initialized = false;
595
- this.connectorOptions = new Options();
596
- this.subs = [];
597
- }
598
- get shouldShowLoader() {
599
- return this._shouldShowLoader;
600
- }
601
- ngOnDestroy() {
602
- this.subs.forEach(sub => sub.unsubscribe());
603
- }
604
- initConnection() {
605
- return __awaiter(this, void 0, void 0, function* () {
606
- if (this._initialized || this._initializing) {
607
- return;
608
- }
609
- this._initializing = true;
610
- try {
611
- const settings = this._settingsService.settings;
612
- if (!settings) {
613
- throw Error('Settings are not defined!');
614
- }
615
- this.connectorOptions = Object.assign(new Options(), settings);
616
- yield this._adapterService.initConnector(this.connectorOptions);
617
- this.controllerInitialized.next(true);
618
- this._initialized = true;
619
- this._initializing = false;
620
- }
621
- catch (e) {
622
- this._initializing = false;
623
- }
624
- });
625
- }
626
- getProductBundleSettings(url, upId) {
627
- return __awaiter(this, void 0, void 0, function* () {
628
- return this._adapterService.getProductBundleSettings(url, upId);
629
- });
630
- }
631
- setInstance(instanceId) {
632
- this._instanceId = instanceId;
633
- this._adapterService.setInstance(instanceId);
634
- }
635
- convertArticleFullObjectToArticleExtended(article) {
636
- return this._adapterService.convertArticleFullObjectToArticleExtended(article);
637
- }
638
- getFullArticle(sku) {
639
- return __awaiter(this, void 0, void 0, function* () {
640
- const goodId = yield this._adapterService.getGoodIdFromArticleNr(sku);
641
- if (goodId) {
642
- return this._adapterService.getArticleFullObject(goodId);
643
- }
644
- return null;
645
- });
646
- }
647
- getDocumentContent(docId, thumbnail = true) {
648
- return this._adapterService.getDocumentContent(docId, thumbnail);
649
- }
650
- getDeliveryPrognosis(goodId) {
651
- return this._adapterService.getDeliveryPrognosis(goodId);
652
- }
653
- getSelectorDeliveryDate() {
654
- return __awaiter(this, void 0, void 0, function* () {
655
- return this._adapterService.getSelectorDeliveryDate();
656
- });
657
- }
658
- getArtStockStatus(goodId) {
659
- return this._adapterService.getArtStockStatus(goodId);
660
- }
661
- getDeliveryDate2(goodId) {
662
- return this._adapterService.getDeliveryDate2(goodId);
663
- }
664
- getSuperArticle(id) {
665
- return this._adapterService.getSuperArticle(id);
666
- }
667
- getJsonArticleFlatTree(goodId, goodType, quantity, externalSource = false, showLoader = true, configuratorStatistics) {
668
- return this._adapterService.getJsonArticleFlatTree(goodId, goodType, quantity, externalSource, showLoader, this._instanceId, configuratorStatistics);
669
- }
670
- getGeneratedArtDirectly(goodId, showLoader = true) {
671
- return this._adapterService.getGeneratedArtDirectly(goodId, showLoader);
672
- }
673
- addWebSessionTransactionLine(transactionUuid, sku, quantity) {
674
- return __awaiter(this, void 0, void 0, function* () {
675
- return yield this._adapterService.addWebSessionTransactionLine(transactionUuid, sku, quantity);
676
- });
677
- }
678
- getImageForCoDocument(document, thumb = false) {
679
- return __awaiter(this, void 0, void 0, function* () {
680
- return this._adapterService.getImageForCoDocument(document, thumb);
681
- });
682
- }
683
- onShowLoaderChange(showLoader) {
684
- this._shouldShowLoader = showLoader;
685
- }
686
- }
687
- ProductConnectorService.decorators = [
688
- { type: Injectable }
689
- ];
690
- ProductConnectorService.ctorParameters = () => [
691
- { type: ProductConnectorAdapterService },
692
- { type: ProductSettingsService }
693
- ];
694
-
695
- class RootStorageObject {
696
- }
697
- class LocalStorageService {
698
- constructor() {
699
- this.storage = localStorage;
700
- this._appRoot = "web-order";
701
- this._storageObj = new RootStorageObject();
702
- this._initLocalStorageObj();
703
- }
704
- save() {
705
- this.storage.setItem(this._appRoot, JSON.stringify(this._storageObj));
706
- }
707
- clear() {
708
- this.storage.clear();
709
- }
710
- set id(id) {
711
- this._storageObj.id = id;
712
- this.save();
713
- }
714
- get id() {
715
- return this._storageObj ? this._storageObj.id : "";
716
- }
717
- _initLocalStorageObj() {
718
- this._storageObj = JSON.parse(this.storage.getItem(this._appRoot)) || this._storageObj;
719
- this.save();
720
- }
721
- }
722
- LocalStorageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalStorageService_Factory() { return new LocalStorageService(); }, token: LocalStorageService, providedIn: "root" });
723
- LocalStorageService.decorators = [
724
- { type: Injectable, args: [{
725
- providedIn: 'root'
726
- },] }
727
- ];
728
- LocalStorageService.ctorParameters = () => [];
729
-
730
- class IoneProductComponent {
731
- constructor(_appEventService, _settingsService, _productConnectorService, _localStorageService) {
732
- // this.sku = 'CF-HILL';
733
- // this.sku = 'CF-ALMADA';
734
- // this.sku = 'CF-39904ANT';
735
- // this.sku = 'CF-22346001';
736
- // this.sku = '104';
737
- // this.sku = '1000561986';
738
- // this.sku = '1000567768';
739
- // this.sku = '1000567767';
740
- // this.sku = '1066';
741
- // this.sku = '104';
742
- // this.sku = "70000107";
743
- // this.sku = "grover";
744
- // this.sku = "1000610952";
745
- // this.sku = "4387";
746
- // this.sku = "1000612725";
747
- // this.sku = '1000610952'; // elix = 1000234793
748
- this._appEventService = _appEventService;
749
- this._settingsService = _settingsService;
750
- this._productConnectorService = _productConnectorService;
751
- this._localStorageService = _localStorageService;
752
- this.enableRenderCarousel = false;
753
- this.handleAddArticleInternally = true;
754
- this.handleAddToCartInternally = false;
755
- this.onAddToCart = new EventEmitter();
756
- this.forceRenderImage = new EventEmitter();
757
- this.getRenderForRenderCarousel = new EventEmitter();
758
- this.onAlternativeClick = new EventEmitter();
759
- this.onArticleInfoReceived = new EventEmitter();
760
- this.onArticleReceived = new EventEmitter();
761
- this.onSelectionsReceived = new EventEmitter();
762
- this.onAddToQuote = new EventEmitter();
763
- this.openStockEvent = new EventEmitter();
764
- this.onAnswersAvailable = new EventEmitter();
765
- this.settingsLoaded = false;
766
- this.showHD = false;
767
- this._subs = [];
768
- this._subs.push(this._appEventService.onAddToCart.subscribe((data) => {
769
- this._handleAddToCart(data);
770
- }), this._appEventService.onAddToQuote.subscribe(json => this.onAddToQuote.emit(json)), this._appEventService.onAlternativeClick.subscribe(article => this.onAlternativeClick.emit(article)), this._appEventService.onArticleInfoReceived.subscribe(info => this._handleAnswerInfoReceived(info)), this._appEventService.onArticleReceived.subscribe(article => this.onArticleReceived.emit(article)), this._appEventService.onSelectionsReceived.subscribe(selections => this.onSelectionsReceived.emit(selections)), this._appEventService.onAnswersAvailable.subscribe(answers => this._handleAnswersAvailable(answers)), this._settingsService.settingsLoaded.subscribe(loaded => {
771
- this.settingsLoaded = loaded;
772
- }));
773
- }
774
- set settings(value) {
775
- if (value) {
776
- if (typeof value === 'string') {
777
- this._settings = JSON.parse(value);
778
- }
779
- else {
780
- this._settings = value;
781
- }
782
- }
783
- }
784
- get settings() {
785
- return this._settings;
786
- }
787
- ngOnInit() {
788
- return __awaiter(this, void 0, void 0, function* () {
789
- yield this._settingsService.initializeSettings(this._settings === undefined);
790
- if (this._settings) {
791
- this._settingsService.createSettingsFromObject(this._settings);
792
- }
793
- });
794
- }
795
- ngOnDestroy() {
796
- this._subs.forEach(s => s.unsubscribe());
797
- }
798
- _handleAnswerInfoReceived(info) {
799
- this.onArticleInfoReceived.next(info);
800
- }
801
- _handleAnswersAvailable(answers) {
802
- this.onAnswersAvailable.next(answers);
803
- }
804
- _handleAddToCart(data) {
805
- return __awaiter(this, void 0, void 0, function* () {
806
- if (this.handleAddToCartInternally) {
807
- if (data && data.article) {
808
- if (typeof data.article === 'string') {
809
- const article = JSON.parse(data.article);
810
- if (article.selectorData && article.selectorData.compositions) { // configured (frozen) article
811
- const transactionId = yield this._productConnectorService.addWebSessionTransactionLine(this._localStorageService.id, article.selectorData.compositions[0].compositionArticleNo, data.quantity);
812
- if (transactionId) {
813
- this._localStorageService.id = transactionId;
814
- }
815
- }
816
- }
817
- else { // flat (simple) article
818
- if (data.article.hasOwnProperty('articleNr')) {
819
- const transactionId = yield this._productConnectorService.addWebSessionTransactionLine(this._localStorageService.id, data.article['articleNr'], data.quantity);
820
- if (transactionId) {
821
- this._localStorageService.id = transactionId;
822
- }
823
- }
824
- }
825
- this.onAddToCart.next(data);
826
- }
827
- }
828
- else {
829
- this.onAddToCart.emit(data);
830
- }
831
- });
832
- }
833
- openStock() {
834
- this.openStockEvent.emit();
835
- }
836
- }
837
- IoneProductComponent.decorators = [
838
- { type: Component, args: [{
839
- selector: 'app-ione-product',
840
- template: `
841
- <app-product-page *ngIf="settingsLoaded"
842
- [createFrozenArticle]="handleAddArticleInternally"
843
- [isReturn]="isReturn"
844
- [sku]="sku"
845
- [showRelatedProductsPopup]="showRelatedProductsPopup"
846
- [enableRenderCarousel]="enableRenderCarousel"
847
- (openStockEvent)="openStock()"
848
- ></app-product-page>
849
- <!-- <co-button [label]="'click'" (click)="showHD = !showHD"></co-button>
850
- <co-product-hd [sku]="'657946ca-e1e1-41fd-7ae0-08dbf7df0cef'" *ngIf="showHD"></co-product-hd>-->
851
- `,
852
- providers: [
853
- ProductSettingsService,
854
- ProductConnectorService,
855
- ProductEventService,
856
- ProductConnectorAdapterService
857
- ],
858
- encapsulation: ViewEncapsulation.Emulated,
859
- styles: [""]
860
- },] }
861
- ];
862
- IoneProductComponent.ctorParameters = () => [
863
- { type: ProductEventService },
864
- { type: ProductSettingsService },
865
- { type: ProductConnectorService },
866
- { type: LocalStorageService }
867
- ];
868
- IoneProductComponent.propDecorators = {
869
- sku: [{ type: Input }],
870
- isReturn: [{ type: Input }],
871
- showRelatedProductsPopup: [{ type: Input }],
872
- enableRenderCarousel: [{ type: Input }],
873
- settings: [{ type: Input }],
874
- handleAddArticleInternally: [{ type: Input }],
875
- handleAddToCartInternally: [{ type: Input }],
876
- onAddToCart: [{ type: Output }],
877
- forceRenderImage: [{ type: Output }],
878
- getRenderForRenderCarousel: [{ type: Output }],
879
- onAlternativeClick: [{ type: Output }],
880
- onArticleInfoReceived: [{ type: Output }],
881
- onArticleReceived: [{ type: Output }],
882
- onSelectionsReceived: [{ type: Output }],
883
- onAddToQuote: [{ type: Output }],
884
- openStockEvent: [{ type: Output }],
885
- onAnswersAvailable: [{ type: Output }]
886
- };
887
-
888
- class StockAndDelivery {
889
- constructor(stock, deliveryDescription) {
890
- this.stock = 0;
891
- this.stock = stock;
892
- this.deliveryDescription = deliveryDescription;
893
- }
894
- }
895
-
896
- var SelectorType;
897
- (function (SelectorType) {
898
- SelectorType["TwoD"] = "2D";
899
- SelectorType["ThreeD"] = "3D";
900
- SelectorType["Omni"] = "Omni";
901
- })(SelectorType || (SelectorType = {}));
902
-
903
- /** AUTO GENERATED FILE. DO NOT CHANGE.. **/
904
- var IconEnum;
905
- (function (IconEnum) {
906
- IconEnum["AddToCartDrop"] = "add_to_cart_drop";
907
- IconEnum["ArrowPointLeft"] = "arrow_point_left";
908
- IconEnum["ArrowPointRight"] = "arrow_point_right";
909
- IconEnum["CrossSkinny"] = "cross_skinny";
910
- IconEnum["DeliveryTruck"] = "delivery_truck";
911
- IconEnum["Download"] = "download";
912
- IconEnum["FullScreen"] = "full_screen";
913
- IconEnum["LinkSimpleRegular"] = "link_simple_regular";
914
- IconEnum["Location"] = "location";
915
- IconEnum["Logo"] = "logo";
916
- IconEnum["MagicWand"] = "magic_wand";
917
- IconEnum["NormalScreen"] = "normal_screen";
918
- IconEnum["Quote"] = "quote";
919
- IconEnum["Refresh"] = "refresh";
920
- IconEnum["SaveSkinny"] = "save_skinny";
921
- IconEnum["ThreeD"] = "three_d";
922
- IconEnum["Truck"] = "truck";
923
- IconEnum["TwoD"] = "two_d";
924
- IconEnum["Warehouse"] = "warehouse";
925
- })(IconEnum || (IconEnum = {}));
926
-
927
- /** AUTO GENERATED FILE. DO NOT CHANGE.. **/
928
- const IconSvg = {
929
- "add_to_cart_drop": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M16.58,34.84a1.8,1.8,0,1,0,1.8,1.8A1.79,1.79,0,0,0,16.58,34.84Z\" fill=\"#484f60\"/><path d=\"M31.49,34.84a1.8,1.8,0,1,0,1.8,1.8A1.79,1.79,0,0,0,31.49,34.84Z\" fill=\"#484f60\"/><path d=\"M35.6,17.9l-1.51.18L31.88,20.3l1.31-.17a.88.88,0,0,1,1,1.08L32.35,29.5a1.52,1.52,0,0,1-1.44,1.2H16.51a1.75,1.75,0,0,1-1.57-1.17l-2.31-5.6a1,1,0,0,1,.85-1.29l4.43-.56-1.86-1.86-5.13.61a1,1,0,0,0-.87,1.28l3.34,9.44A1.73,1.73,0,0,0,15,32.72H32.64a1.51,1.51,0,0,0,1.43-1.2L36.6,19A.89.89,0,0,0,35.6,17.9Z\" fill=\"#484f60\"/><path d=\"M39,17a1.87,1.87,0,0,0-1.36,1.46l-.42,2.89c-.1.67.31,1,.9.7a2.75,2.75,0,0,0,1.33-1.7L40,18A.73.73,0,0,0,39,17Z\" fill=\"#484f60\"/><polygon points=\"24 25.35 32.04 17.3 27.04 17.3 27.04 10 20.95 10 20.95 17.3 15.96 17.3 24 25.35\" fill=\"#484f60\"/></svg>",
930
- "arrow_point_left": "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 51 51\" enable-background=\"new 0 0 51 51\" ><path fill=\"#484F5F\" d=\"M31.9,36.7l-14.7-9.6C17.1,27,17,26.9,17,26.7v-2.4c0-0.2,0.1-0.3,0.2-0.4l14.7-9.6c0.2-0.2,0.5-0.1,0.7,0.1l1.4,2.1c0.2,0.2,0.1,0.5-0.1,0.7l-12,7.8c-0.3,0.2-0.3,0.6,0,0.8l12,7.8c0.2,0.2,0.3,0.5,0.1,0.7l-1.4,2.1C32.4,36.8,32.1,36.8,31.9,36.7z\"/></svg>",
931
- "arrow_point_right": "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0 0 51 51\" enable-background=\"new 0 0 51 51\" ><path fill=\"#484F5F\" d=\"M19.1,14.3l14.7,9.6c0.1,0.1,0.2,0.2,0.2,0.4v2.4c0,0.2-0.1,0.3-0.2,0.4l-14.7,9.6c-0.2,0.2-0.5,0.1-0.7-0.1l-1.4-2.1c-0.2-0.2-0.1-0.5,0.1-0.7l12-7.8c0.3-0.2,0.3-0.6,0-0.8l-12-7.8c-0.2-0.2-0.3-0.5-0.1-0.7l1.4-2.1C18.6,14.2,18.9,14.2,19.1,14.3z\"/></svg>",
932
- "cross_skinny": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g ><polygon points=\"25.35 5.52 24.65 4.81 15 14.46 5.35 4.81 4.65 5.52 14.29 15.17 4.65 24.81 5.35 25.52 15 15.87 24.65 25.52 25.35 24.81 15.71 15.17 25.35 5.52\" fill=\"#484f60\"/></g></svg>",
933
- "delivery_truck": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M25,45A20,20,0,1,1,45,25,20,20,0,0,1,25,45ZM25,6.29A18.71,18.71,0,1,0,43.71,25,18.73,18.73,0,0,0,25,6.29Z\" fill=\"#484f60\"/><path d=\"M21.86,24.09a7.14,7.14,0,0,1,.72-3.24,6.94,6.94,0,0,1,1.18-1.66H13v10.1h8.51a3.25,3.25,0,0,1,3.27-3.07A3.33,3.33,0,0,1,27,27V25.75H21.9Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M21.65,30.47h-.48a3.51,3.51,0,0,1,1.13,2.19h1.57a3.22,3.22,0,0,1-1.41-.83A3.13,3.13,0,0,1,21.65,30.47Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M34.63,21.89H28.87c-.3.25-.5.43-.63.56v8H28a3.19,3.19,0,0,1-.82,1.37,3.3,3.3,0,0,1-1.41.82H29a3.53,3.53,0,0,1,7,0h1V27.1Zm-.2,5.38H30.8a.47.47,0,0,1-.46-.46V23.36a.46.46,0,0,1,.46-.46h2.1a.45.45,0,0,1,.42.27l1.53,3.45A.46.46,0,0,1,34.43,27.27Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M16.42,30.47a3.51,3.51,0,0,0-1.13,2.19H14.6l-1.6-1V30.47Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M30,33.08a2.53,2.53,0,1,0,2.53-2.53A2.52,2.52,0,0,0,30,33.08Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M16.27,33.08a2.53,2.53,0,1,0,2.53-2.53A2.52,2.52,0,0,0,16.27,33.08Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M22.45,17.27h-3.2a4.29,4.29,0,0,1,1.61-3.49,6.45,6.45,0,0,1,4.31-1.38,6.79,6.79,0,0,1,2.92.57A4.72,4.72,0,0,1,30,14.62a4,4,0,0,1,.72,2.26,3.74,3.74,0,0,1-.23,1.27,5.31,5.31,0,0,1-.73,1.29,12,12,0,0,1-1.4,1.29A8.74,8.74,0,0,0,27.06,22a3.17,3.17,0,0,0-.46.94,7.56,7.56,0,0,0-.23,1.65h-3.3v-.49a6,6,0,0,1,.59-2.68,6.8,6.8,0,0,1,1.94-2.25,9.44,9.44,0,0,0,1.56-1.41,1.5,1.5,0,0,0,.27-.9,1.47,1.47,0,0,0-.65-1.19A2.9,2.9,0,0,0,25,15.14a2.77,2.77,0,0,0-1.84.6A1.91,1.91,0,0,0,22.45,17.27Z\" fill=\"#484f60\"/><path d=\"M24.78,27.42a2.06,2.06,0,0,1,1.51.61,2,2,0,0,1,.63,1.47A2,2,0,0,1,26.3,31a2.08,2.08,0,0,1-1.5.62A2,2,0,0,1,23.31,31a2.08,2.08,0,0,1,0-2.95A2,2,0,0,1,24.78,27.42Z\" fill=\"#484f60\"/></svg>",
934
- "download": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"download.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"6.675088\" inkscape:cx=\"-14.056273\" inkscape:cy=\"29.806579\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg8\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 498.966,339.946 c -7.197,0 -13.034,5.837 -13.034,13.034 v 49.804 c 0,28.747 -23.388,52.135 -52.135,52.135 H 78.203 c -28.747,0 -52.135,-23.388 -52.135,-52.135 V 352.98 c 0,-7.197 -5.835,-13.034 -13.034,-13.034 C 5.835,339.946 0,345.782 0,352.98 v 49.804 c 0,43.121 35.082,78.203 78.203,78.203 h 355.594 c 43.121,0 78.203,-35.082 78.203,-78.203 V 352.98 c 0,-7.198 -5.835,-13.034 -13.034,-13.034 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 419.833,391.3 H 92.167 c -7.197,0 -13.034,5.837 -13.034,13.034 0,7.197 5.835,13.034 13.034,13.034 h 327.665 c 7.199,0 13.034,-5.835 13.034,-13.034 0,-7.197 -5.835,-13.034 -13.033,-13.034 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 387.919,207.93 c -4.795,-5.367 -13.034,-5.834 -18.404,-1.038 L 269.033,296.657 V 44.048 c 0,-7.197 -5.835,-13.034 -13.034,-13.034 -7.197,0 -13.034,5.835 -13.034,13.034 V 296.657 L 142.483,206.893 c -5.367,-4.796 -13.607,-4.328 -18.404,1.038 -4.794,5.369 -4.331,13.609 1.037,18.404 l 109.174,97.527 c 6.187,5.529 13.946,8.292 21.708,8.292 7.759,0 15.519,-2.763 21.708,-8.289 l 109.174,-97.53 c 5.37,-4.798 5.834,-13.038 1.039,-18.405 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05555739,0,0,0.05555739,10.739964,11.357401)\" style=\"fill:#484f60;fill-opacity:1\" /></svg>",
935
- "full_screen": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M38,38.17H12v-26H38ZM13.24,36.93H36.76V13.4H13.24Z\" fill=\"#484f60\"/><polygon points=\"17.35 32.81 17.35 26.75 19.46 28.86 28.69 19.63 26.59 17.52 32.65 17.52 32.65 23.58 30.54 21.47 21.31 30.71 23.41 32.81 17.35 32.81\" fill=\"#484f60\"/></svg>",
936
- "link_simple_regular": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path d=\"M0 256C0 167.6 71.6 96 160 96l72 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-72 0C98.1 144 48 194.1 48 256s50.1 112 112 112l72 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-72 0C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160l-72 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c61.9 0 112-50.1 112-112s-50.1-112-112-112l-72 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l72 0c88.4 0 160 71.6 160 160zM184 232l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"/></svg>",
937
- "location": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M25,12.67A8.33,8.33,0,0,0,16.67,21c0,4.6,8.33,16.67,8.33,16.67S33.33,25.6,33.33,21A8.33,8.33,0,0,0,25,12.67Zm0,10.41A2.08,2.08,0,1,1,27.08,21,2.08,2.08,0,0,1,25,23.08Z\" fill=\"#484f60\"/></svg>",
938
- "logo": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><rect x=\"10\" y=\"21.19\" width=\"2.04\" height=\"6.32\" fill=\"#484f60\"/><path d=\"M18.66,29.24a3.84,3.84,0,0,1-2.85-1.19,4.19,4.19,0,0,1,0-5.77,4,4,0,0,1,5.71,0,4.19,4.19,0,0,1,0,5.77A3.85,3.85,0,0,1,18.66,29.24Zm0-6.16a1.79,1.79,0,0,0-1.38.58,2.12,2.12,0,0,0-.57,1.51,2,2,0,0,0,.57,1.49,1.94,1.94,0,0,0,2.76,0,2.08,2.08,0,0,0,.56-1.5,2.15,2.15,0,0,0-.56-1.51A1.76,1.76,0,0,0,18.67,23.08Z\" fill=\"#484f60\"/><polygon points=\"31.05 29.18 27.33 25.02 27.33 29.14 25.29 29.14 25.29 21.15 26.57 21.15 30.29 25.33 30.29 21.19 32.33 21.19 32.33 29.18 31.05 29.18\" fill=\"#484f60\"/><polygon points=\"35.34 29.14 35.34 21.19 39.9 21.19 39.9 23.17 37.38 23.17 37.38 23.9 39.66 23.9 39.66 25.87 37.38 25.87 37.38 27.14 40 27.14 40 29.14 35.34 29.14\" fill=\"#484f60\"/></svg>",
939
- "magic_wand": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><title>magic_wand</title><g style=\"isolation:isolate\"><path d=\"M20.45,10.71a.28.28,0,0,1,.49-.19l1.4,1.25a.93.93,0,0,0,.83.23L25,11.62a.29.29,0,0,1,.34.41l-.76,1.71a.93.93,0,0,0,0,.86l.93,1.62c.12.26,0,.45-.29.45l-1.86-.2a1,1,0,0,0-.81.32l-1.26,1.38a.28.28,0,0,1-.5-.14l-.39-1.83a1,1,0,0,0-.55-.67l-1.71-.77a.28.28,0,0,1,0-.52l1.62-.94a1,1,0,0,0,.48-.73Z\" fill=\"#484f60\"/><g style=\"mix-blend-mode:lighten\"><path d=\"M23.3,16.21a1,1,0,0,0-.8.31l-1,1.13a.29.29,0,0,1-.51-.14L20.66,16a1,1,0,0,0-.55-.68l-1.39-.62a.28.28,0,0,1,0-.52L20,13.45a1,1,0,0,0,.48-.73l.16-1.5a.29.29,0,0,1,.49-.2l1.13,1a.93.93,0,0,0,.83.23L24.58,12a.29.29,0,0,1,.34.41l-.62,1.38a.91.91,0,0,0,.05.86l.75,1.32a.29.29,0,0,1-.29.44Z\" fill=\"#484f60\"/></g><path d=\"M33.57,36.76a.53.53,0,0,1,0,.72l-2.37,2.18a.48.48,0,0,1-.7,0L18,25.34a.51.51,0,0,1,0-.71l2.36-2.19a.49.49,0,0,1,.7,0Z\" fill=\"#484f60\"/><path d=\"M18.6,19.94a.51.51,0,0,1,0,.71L16.2,22.84a.48.48,0,0,1-.7,0l-2.76-3.13a.51.51,0,0,1,0-.71l2.37-2.19a.48.48,0,0,1,.7,0Z\" fill=\"#484f60\"/><path d=\"M30.67,10.55a.29.29,0,0,1,.47.24v1.12a1,1,0,0,0,.4.77l.9.66a.29.29,0,0,1-.08.52l-1.07.35a1,1,0,0,0-.61.61l-.35,1.06a.28.28,0,0,1-.51.09l-.67-.91a1,1,0,0,0-.77-.4H27.27a.29.29,0,0,1-.25-.47l.66-.9a.93.93,0,0,0,.14-.85l-.35-1.07a.29.29,0,0,1,.38-.38l1.07.35a1,1,0,0,0,.85-.13Z\" fill=\"#484f60\"/><g style=\"mix-blend-mode:lighten\"><path d=\"M29.25,14.88a1,1,0,0,0-.77-.4h-.86a.29.29,0,0,1-.24-.47l.5-.69a.93.93,0,0,0,.14-.85l-.26-.82c-.07-.27.1-.44.37-.37l.82.26a1,1,0,0,0,.85-.13l.69-.51a.29.29,0,0,1,.47.25V12a.94.94,0,0,0,.39.76l.7.51a.29.29,0,0,1-.09.52l-.81.26a1,1,0,0,0-.62.61l-.26.82a.29.29,0,0,1-.52.08Z\" fill=\"#484f60\"/></g><path d=\"M37,15.81a.29.29,0,0,1,.32.43l-.13.26a.91.91,0,0,0,0,.85l.15.26A.29.29,0,0,1,37,18l-.29,0a.93.93,0,0,0-.81.27l-.2.21a.28.28,0,0,1-.5-.16l0-.29a1,1,0,0,0-.52-.69l-.27-.13a.28.28,0,0,1,0-.52l.26-.13a.93.93,0,0,0,.5-.71l0-.29a.29.29,0,0,1,.5-.17l.21.21a.92.92,0,0,0,.82.26Z\" fill=\"#484f60\"/><g style=\"mix-blend-mode:lighten\"><path d=\"M35.25,18a1,1,0,0,0-.52-.7l-.12-.05a.28.28,0,0,1,0-.52l.12-.06a1,1,0,0,0,.51-.7V15.8a.29.29,0,0,1,.5-.18l.09.1a.92.92,0,0,0,.82.26l.13,0a.29.29,0,0,1,.32.42L37,16.5a.91.91,0,0,0,0,.85l.07.12a.29.29,0,0,1-.31.43l-.13,0a1,1,0,0,0-.82.28l-.09.1a.28.28,0,0,1-.5-.16Z\" fill=\"#484f60\"/></g></g></svg>",
940
- "normal_screen": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M38,38.17H12v-26H38ZM13.24,36.93H36.76V13.4H13.24Z\" fill=\"#484f60\"/><polygon points=\"22.18 29.83 24.29 31.93 24.29 25.87 18.23 25.87 20.34 27.98 16.43 31.89 18.28 33.73 22.18 29.83\" fill=\"#484f60\"/><polygon points=\"33.57 18.44 31.73 16.6 27.82 20.51 25.71 18.4 25.71 24.46 31.77 24.46 29.66 22.35 33.57 18.44\" fill=\"#484f60\"/></svg>",
941
- "quote": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M14.5,31.51V12a.5.5,0,0,1,.5-.5H35a.5.5,0,0,1,.5.5V38a.5.5,0,0,1-.5.5H21.27V40H35a2,2,0,0,0,2-2V12a2,2,0,0,0-2-2H15a2,2,0,0,0-2,2V31.51Z\" fill=\"#484f60\"/><path d=\"M21.27,40V33.56c0-1.78-.27-2.05-2.05-2.05H13Z\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"18.5\" width=\"6\" height=\"4\" fill=\"#484f60\"/><rect x=\"25.5\" y=\"21.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"25.5\" y=\"18.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"26.5\" y=\"25.5\" width=\"6\" height=\"4\" transform=\"translate(59 55) rotate(-180)\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"28.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"25.5\" width=\"7\" height=\"1\" fill=\"#484f60\"/><rect x=\"17.5\" y=\"14.5\" width=\"6\" height=\"1\" fill=\"#484f60\"/><rect x=\"26.5\" y=\"34.5\" width=\"6\" height=\"1\" fill=\"#484f60\"/></svg>",
942
- "refresh": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"refresh.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"9.44\" inkscape:cx=\"13.990693\" inkscape:cy=\"13.961336\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg6\" /><g transform=\"matrix(0.05356365,0,0,0.05356365,11.44076,11.82465)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 414.32892,173.53368 397.86852,58.29997 c -1.3534,-9.447409 -12.96516,-13.373353 -19.75699,-6.581524 l -23.97472,23.97472 C 323.3074,57.095569 288.30682,47.308258 252.3168,47.308258 c -108.23157,0 -195.126154,84.711612 -197.8314,192.852392 -0.147446,5.91103 4.149441,10.98085 9.992183,11.82206 l 46.516107,6.64982 c 6.93462,1.01194 13.38577,-4.43269 13.28954,-11.68548 -0.9646,-71.37163 56.68057,-129.79595 128.03357,-129.79595 17.27835,0 34.3526,3.51232 50.13165,10.23043 l -23.11022,23.11022 c -6.74915,6.74915 -2.91866,18.3966 6.58152,19.75699 l 115.23371,16.4604 c 7.59269,1.14465 14.26423,-5.4586 13.17546,-13.17546 z\" style=\"fill:#484f60;fill-opacity:1;stroke-width:0.77603161\" /></g></g><path inkscape:connector-curvature=\"0\" d=\"m 35.105827,24.725982 -2.489742,-0.355606 c -0.321647,-0.04073 -0.711797,0.234897 -0.711797,0.671018 0,3.781814 -3.076753,6.858567 -6.858567,6.858567 -0.920628,0 -1.830946,-0.186303 -2.673013,-0.542533 l 1.198298,-1.198297 c 0.361507,-0.361507 0.156331,-0.985389 -0.352533,-1.058254 l -6.172336,-0.882302 c -0.405403,-0.05792 -0.764422,0.289765 -0.705726,0.705725 l 0.881637,6.172381 c 0.07258,0.506577 0.694003,0.71545 1.058254,0.352527 l 1.315225,-1.314599 c 1.643397,0.987012 3.516951,1.506391 5.450194,1.506391 5.769264,0 10.423029,-4.514936 10.595325,-10.27871 0.0091,-0.317237 -0.221012,-0.591248 -0.535219,-0.636308 z\" style=\"fill:#484f60;fill-opacity:1;stroke-width:0.04156709\" /></svg>",
943
- "save_skinny": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 51 51\"><polygon points=\"23.8 38.1 14.9 25.6 15.7 25 23.6 36.2 35.2 12.9 36.1 13.4 23.8 38.1\" fill=\"#fff\"/></svg>",
944
- "three_d": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M16.08,30.77a4.85,4.85,0,0,1-3-.8,4,4,0,0,0-2.49-.15,6.21,6.21,0,0,0,2.53,1.09,12.84,12.84,0,0,0,2.93-.14\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M14.27,19.68A4.71,4.71,0,0,0,11,20.78l2,.14c.31,0,1.2-.69,1.55-.81a3.88,3.88,0,0,1,1.65-.24l-1.94-.19\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M21.64,28.79a4.13,4.13,0,0,0-3.1-4c.89-.7,1.77-1.09,2.26-2.21a5.12,5.12,0,0,0,.35-1.9c-.13-3.24-2.64-3.73-5.29-4.15a4,4,0,0,1,3.44,3.7,4.61,4.61,0,0,1-.83,3.12,9.7,9.7,0,0,1-1.82,1.43,4.3,4.3,0,0,1,3.17,4.34,4.9,4.9,0,0,1-4.21,5c2.09-.34,4.37-.64,5.46-2.69a5,5,0,0,0,.57-2.58\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M28.44,18.88l.38-.07.48-.06.57,0h.75l.36,0,.35.05c-.2,0-.42-.08-1.57-.25l-.36-.05-.37,0h-.77l-.59,0-.49.07a3.08,3.08,0,0,0-.39.07l-.3.07V31.38H27l.13,0h1.63l.21,0h.2l.2,0h.05l1.55-.24h0l-.34.05-.33,0H29.12l-.36,0-.33,0a1.15,1.15,0,0,1-.28-.06V19Z\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M40,24.34a9,9,0,0,0-3-7.1,11.06,11.06,0,0,0-4.47-1.86c4.38,1.13,6.23,5.31,6.13,9.54-.12,4.5-2.27,8.55-6.86,9.66,2.59-.63,5-1.41,6.52-3.78A12,12,0,0,0,40,24.34\" fill=\"#484f60\" opacity=\"0.5\"/><path d=\"M35.38,16.71A7.32,7.32,0,0,1,36.74,18a7.82,7.82,0,0,1,1,1.73,10.32,10.32,0,0,1,.68,2.16,13.86,13.86,0,0,1,.23,2.59,15,15,0,0,1-.25,2.78,11.39,11.39,0,0,1-.68,2.31,9.34,9.34,0,0,1-1,1.85,8.23,8.23,0,0,1-1.28,1.4,7.76,7.76,0,0,1-1.7,1.07,9.07,9.07,0,0,1-2,.69,13.36,13.36,0,0,1-2.26.33,18.25,18.25,0,0,1-2.45,0c-.5,0-1-.08-1.39-.12l-1.17-.14c-.36,0-.68-.11-1-.16l-.77-.15V15.86c.34-.09.71-.18,1.09-.26s.81-.15,1.24-.21.88-.12,1.34-.17.95-.1,1.44-.13a20.57,20.57,0,0,1,2.33,0,12,12,0,0,1,2,.24,8.24,8.24,0,0,1,1.72.55A7.1,7.1,0,0,1,35.38,16.71ZM27.92,31.53a6.53,6.53,0,0,0,2.46-.32A4.81,4.81,0,0,0,32.32,30a5.82,5.82,0,0,0,1.27-2.18A10.11,10.11,0,0,0,34,24.67a8.65,8.65,0,0,0-.42-2.85,4.94,4.94,0,0,0-1.18-2,4.45,4.45,0,0,0-1.83-1.11,6.55,6.55,0,0,0-2.35-.28l-.59,0-.49.07a3.08,3.08,0,0,0-.39.07l-.3.07V31.38a2.11,2.11,0,0,0,.29.06l.34,0,.37,0,.36,0h.07\" fill=\"#484f60\"/><path d=\"M14.57,16.47a5.49,5.49,0,0,1,2,.22,3.89,3.89,0,0,1,1.49.84A3.66,3.66,0,0,1,19,18.89a4.29,4.29,0,0,1,.33,1.7,5.29,5.29,0,0,1-.17,1.34,4.29,4.29,0,0,1-.5,1.16,4.17,4.17,0,0,1-.84.94,4.88,4.88,0,0,1-1.16.69v.05a3.7,3.7,0,0,1,1.22.5,4,4,0,0,1,1,.92,4.61,4.61,0,0,1,.69,1.3,5.24,5.24,0,0,1,.25,1.62,5.36,5.36,0,0,1-.42,2.15,4.44,4.44,0,0,1-1.2,1.64,4.84,4.84,0,0,1-1.86,1,6.78,6.78,0,0,1-2.39.23,7.69,7.69,0,0,1-2.36-.52,6.89,6.89,0,0,1-.9-.42,4.36,4.36,0,0,1-.69-.47l.62-2.9a4.12,4.12,0,0,0,.53.34,6.21,6.21,0,0,0,.73.36,5.69,5.69,0,0,0,.88.31,5.19,5.19,0,0,0,1,.15,3.11,3.11,0,0,0,1.1-.13,2,2,0,0,0,.8-.45,1.93,1.93,0,0,0,.49-.71,2.35,2.35,0,0,0,.17-.89A2.48,2.48,0,0,0,16,27.67a2.23,2.23,0,0,0-.63-.79,2.9,2.9,0,0,0-.89-.46,3.5,3.5,0,0,0-1-.15H12.2V23.44l1.23,0a3.44,3.44,0,0,0,.83-.11,2.83,2.83,0,0,0,.79-.36,2,2,0,0,0,.6-.62,2,2,0,0,0,.23-.94,1.8,1.8,0,0,0-.13-.71,1.36,1.36,0,0,0-.38-.56,1.58,1.58,0,0,0-.64-.35,2.79,2.79,0,0,0-.9-.1,4.07,4.07,0,0,0-.84.13c-.27.08-.53.18-.78.28a6.56,6.56,0,0,0-1.17.7L10.42,18a5,5,0,0,1,.72-.51,7.82,7.82,0,0,1,2.12-.82A8,8,0,0,1,14.57,16.47Z\" fill=\"#484f60\"/></svg>",
945
- "truck": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"truck.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"9.44\" inkscape:cx=\"31.555563\" inkscape:cy=\"21.585628\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg8\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06827145,0,0,0.06827064,7.670918,5.1378096)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 119.467,337.067 c -28.237,0 -51.2,22.963 -51.2,51.2 0,28.237 22.963,51.2 51.2,51.2 28.237,0 51.2,-22.963 51.2,-51.2 0,-28.237 -22.964,-51.2 -51.2,-51.2 z m 0,85.333 c -18.825,0 -34.133,-15.309 -34.133,-34.133 0,-18.825 15.309,-34.133 34.133,-34.133 18.824,0 34.133,15.309 34.133,34.133 0,18.824 -15.309,34.133 -34.133,34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 409.6,337.067 c -28.237,0 -51.2,22.963 -51.2,51.2 0,28.237 22.963,51.2 51.2,51.2 28.237,0 51.2,-22.963 51.2,-51.2 0,-28.237 -22.963,-51.2 -51.2,-51.2 z m 0,85.333 c -18.825,0 -34.133,-15.309 -34.133,-34.133 0,-18.825 15.309,-34.133 34.133,-34.133 18.825,0 34.133,15.309 34.133,34.133 0,18.824 -15.308,34.133 -34.133,34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 510.643,289.784 -76.8,-119.467 c -1.57,-2.441 -4.275,-3.917 -7.177,-3.917 H 332.8 c -4.719,0 -8.533,3.823 -8.533,8.533 v 213.333 c 0,4.719 3.814,8.533 8.533,8.533 h 34.133 v -17.067 h -25.6 V 183.467 h 80.674 l 72.926,113.442 v 82.825 H 452.266 V 396.8 h 51.2 c 4.719,0 8.533,-3.814 8.533,-8.533 V 294.4 c 10e-4,-1.63 -0.468,-3.243 -1.356,-4.616 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 375.467,277.333 V 217.6 h 68.267 v -17.067 h -76.8 c -4.719,0 -8.533,3.823 -8.533,8.533 v 76.8 c 0,4.719 3.814,8.533 8.533,8.533 h 128 V 277.332 H 375.467 Z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 332.8,106.667 H 8.533 C 3.823,106.667 0,110.49 0,115.2 v 273.067 c 0,4.719 3.823,8.533 8.533,8.533 H 76.8 V 379.733 H 17.067 v -256 h 307.2 v 256 H 162.133 V 396.8 H 332.8 c 4.719,0 8.533,-3.814 8.533,-8.533 V 115.2 c 0,-4.71 -3.814,-8.533 -8.533,-8.533 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"8.533\" y=\"345.60001\" width=\"51.200001\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"179.2\" y=\"345.60001\" width=\"145.067\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"469.33301\" y=\"345.60001\" width=\"34.132999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"34.132999\" y=\"140.8\" width=\"298.66699\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"110.933\" y=\"379.733\" width=\"17.066999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"401.06699\" y=\"379.733\" width=\"17.066999\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.06813214,0,0,0.06813214,7.6,6.2856989)\" style=\"fill:#484f60;fill-opacity:1\" /></svg>",
946
- "two_d": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\"><path d=\"M22.41,33.89H11V31c.87-.76,1.75-1.56,2.62-2.41S15.2,27,15.73,26.39A11.84,11.84,0,0,0,17.4,24a4.45,4.45,0,0,0,.5-2,2.52,2.52,0,0,0-.64-1.85,2.47,2.47,0,0,0-1.84-.65,4.57,4.57,0,0,0-1.89.45,8.17,8.17,0,0,0-1.84,1.14h-.31V17.2a10.26,10.26,0,0,1,2-.73,10.46,10.46,0,0,1,2.71-.36,5.79,5.79,0,0,1,4.16,1.37,5.15,5.15,0,0,1,1.44,3.9,7.37,7.37,0,0,1-.69,3.14A12.94,12.94,0,0,1,19,27.59c-.6.66-1.19,1.26-1.79,1.81s-1,.93-1.28,1.15h6.53Z\" fill=\"#484f60\"/><path d=\"M38.14,20.79a7.49,7.49,0,0,0-2.37-3,6.52,6.52,0,0,0-2.17-1,11.93,11.93,0,0,0-3.06-.35H25.26V33.89h5.13a13.25,13.25,0,0,0,3-.3,6.61,6.61,0,0,0,2.33-1.08,7.71,7.71,0,0,0,2.34-3A9.9,9.9,0,0,0,39,25.19,10.47,10.47,0,0,0,38.14,20.79Zm-3.49,7.27a4,4,0,0,1-1.51,1.88,3.77,3.77,0,0,1-1.22.54,10.07,10.07,0,0,1-2,.14H29V19.7H30a9.8,9.8,0,0,1,1.81.13,3.75,3.75,0,0,1,1.18.46,4.07,4.07,0,0,1,1.65,1.92,7.4,7.4,0,0,1,.52,2.94A7.92,7.92,0,0,1,34.65,28.06Z\" fill=\"#484f60\"/></svg>",
947
- "warehouse": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" version=\"1.1\" sodipodi:docname=\"warehouse.svg\" inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"><metadata ><rdf:RDF><cc:Work rdf:about=\"\"><dc:format>image/svg+xml</dc:format><dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs /><sodipodi:namedview pagecolor=\"#ffffff\" bordercolor=\"#666666\" borderopacity=\"1\" objecttolerance=\"10\" gridtolerance=\"10\" guidetolerance=\"10\" inkscape:pageopacity=\"0\" inkscape:pageshadow=\"2\" inkscape:window-width=\"1920\" inkscape:window-height=\"1017\" showgr inkscape:zoom=\"6.675088\" inkscape:cx=\"9.6569985\" inkscape:cy=\"12.384637\" inkscape:window-x=\"-8\" inkscape:window-y=\"-8\" inkscape:window-maximized=\"1\" inkscape:current-layer=\"svg8\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"M 507.785,146.242 260.318,1.175 c -2.603,-1.519 -5.803,-1.57 -8.439,-0.111 L 4.412,137.598 C 1.69,139.091 0,141.958 0,145.064 v 358.4 c 0,4.719 3.823,8.533 8.533,8.533 H 51.2 c 4.71,0 8.533,-3.814 8.533,-8.533 V 204.798 h 392.533 v 298.667 c 0,4.719 3.814,8.533 8.533,8.533 h 42.667 c 4.719,0 8.533,-3.814 8.533,-8.533 V 153.598 c 10e-4,-3.03 -1.603,-5.829 -4.214,-7.356 z m -12.852,348.689 h -25.6 V 196.264 c 0,-4.71 -3.814,-8.533 -8.533,-8.533 H 51.2 c -4.71,0 -8.533,3.823 -8.533,8.533 v 298.667 h -25.6 V 150.099 L 255.872,18.344 494.933,158.487 Z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 426.667,392.531 h -102.4 c -4.719,0 -8.533,3.814 -8.533,8.533 v 102.4 c 0,4.719 3.814,8.533 8.533,8.533 h 102.4 c 4.719,0 8.533,-3.814 8.533,-8.533 v -102.4 c 0,-4.719 -3.814,-8.533 -8.533,-8.533 z m -8.534,102.4 H 332.8 v -85.333 h 85.333 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 384,401.064 v 25.6 h -17.067 v -25.6 h -17.067 v 34.133 c 0,4.719 3.814,8.533 8.533,8.533 h 34.133 c 4.719,0 8.533,-3.814 8.533,-8.533 v -34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 324.267,392.531 h -102.4 c -4.71,0 -8.533,3.814 -8.533,8.533 v 102.4 c 0,4.719 3.823,8.533 8.533,8.533 h 102.4 c 4.719,0 8.533,-3.814 8.533,-8.533 v -102.4 c 0,-4.719 -3.814,-8.533 -8.533,-8.533 z m -8.534,102.4 H 230.4 v -85.333 h 85.333 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 281.6,401.064 v 25.6 h -17.067 v -25.6 h -17.067 v 34.133 c 0,4.719 3.823,8.533 8.533,8.533 h 34.133 c 4.719,0 8.533,-3.814 8.533,-8.533 v -34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 426.667,290.131 h -102.4 c -4.719,0 -8.533,3.814 -8.533,8.533 v 102.4 c 0,4.719 3.814,8.533 8.533,8.533 h 102.4 c 4.719,0 8.533,-3.814 8.533,-8.533 v -102.4 c 0,-4.719 -3.814,-8.533 -8.533,-8.533 z m -8.534,102.4 H 332.8 v -85.333 h 85.333 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 384,298.664 v 25.6 h -17.067 v -25.6 h -17.067 v 34.133 c 0,4.719 3.814,8.533 8.533,8.533 h 34.133 c 4.719,0 8.533,-3.814 8.533,-8.533 v -34.133 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"51.200001\" y=\"255.998\" width=\"409.60001\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><rect x=\"51.200001\" y=\"221.864\" width=\"409.60001\" height=\"17.066999\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\"><g style=\"fill:#484f60;fill-opacity:1\"><path inkscape:connector-curvature=\"0\" d=\"m 298.667,119.464 h -85.333 c -4.71,0 -8.533,3.823 -8.533,8.533 v 34.133 c 0,4.71 3.823,8.533 8.533,8.533 h 85.333 c 4.719,0 8.533,-3.823 8.533,-8.533 v -34.133 c 0,-4.71 -3.814,-8.533 -8.533,-8.533 z m -8.534,34.134 h -68.267 v -17.067 h 68.267 z\" style=\"fill:#484f60;fill-opacity:1\" /></g></g><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /><g transform=\"matrix(0.05570714,0,0,0.05570648,10.763,10.859394)\" style=\"fill:#484f60;fill-opacity:1\" /></svg>"
948
- };
949
-
950
- class IconCacheService {
951
- constructor(_sanitizer) {
952
- this._sanitizer = _sanitizer;
953
- this._iconCache = {};
954
- this._allIcons = IconSvg;
955
- this.setIconCache();
956
- }
957
- /**
958
- * All the icons as a large JSON object, from the all-icons.json file.
959
- * The object has property keys that are the icon names, and property values with the data string of the actual svg icon.
960
- */
961
- get iconCache() {
962
- return this._iconCache;
963
- }
964
- getIcon(iconName) {
965
- return this._iconCache[iconName.toLowerCase()];
966
- }
967
- setIconCache() {
968
- for (const key in this._allIcons) {
969
- if (this._allIcons.hasOwnProperty(key)) {
970
- this._iconCache[key.toLowerCase()] = this._sanitizer.bypassSecurityTrustHtml(this._allIcons[key]);
971
- }
972
- }
973
- }
974
- }
975
- IconCacheService.ɵprov = i0.ɵɵdefineInjectable({ factory: function IconCacheService_Factory() { return new IconCacheService(i0.ɵɵinject(i1$1.DomSanitizer)); }, token: IconCacheService, providedIn: "root" });
976
- IconCacheService.decorators = [
977
- { type: Injectable, args: [{
978
- providedIn: 'root'
979
- },] }
980
- ];
981
- IconCacheService.ctorParameters = () => [
982
- { type: DomSanitizer }
983
- ];
984
-
985
- class ProductPageComponent {
986
- constructor(_ione, _renderer, _changeDetector, iconCache, settingsService, appEventService) {
987
- this._ione = _ione;
988
- this._renderer = _renderer;
989
- this._changeDetector = _changeDetector;
990
- this.iconCache = iconCache;
991
- this.settingsService = settingsService;
992
- this.appEventService = appEventService;
993
- this.icon = IconEnum;
994
- this.createFrozenArticle = true;
995
- this.isReturn = false;
996
- this.showRelatedProductsPopup = false;
997
- this.openStockEvent = new EventEmitter();
998
- this.configurable = true;
999
- this.threeD = false;
1000
- this.show2D = true;
1001
- this.show3D = false;
1002
- this.configuring = false;
1003
- this.showAddToCart = false;
1004
- this.fullscreenAnimationEnd = false;
1005
- this.settingsLoaded = false;
1006
- this._fullScreen = false;
1007
- this._subs = [];
1008
- this._subs.push(this.appEventService.onForceRenderImage.subscribe((x) => {
1009
- if (this.selections.nativeElement) {
1010
- this.selections.nativeElement.forceRenderImage();
1011
- }
1012
- }), this.settingsService.settingsLoaded.subscribe(loaded => this._handleSettingsLoaded(loaded)), this._pageLoadedSubscription = combineLatest([
1013
- this._ione.controllerInitialized,
1014
- this._ione.articleLoaded
1015
- ]).subscribe(([initialized, articleLoaded]) => {
1016
- if (initialized && articleLoaded) {
1017
- this.settingsLoaded = initialized;
1018
- }
1019
- }),
1020
- // this._ione.controllerInitialized.subscribe((initialized: boolean) => {
1021
- // this.settingsLoaded = initialized;
1022
- // }),
1023
- this.appEventService.onAnswersAvailable.subscribe((answers) => {
1024
- if (answers && this.configurable) {
1025
- this.showAddToCart = false;
1026
- }
1027
- else {
1028
- this.showAddToCart = true;
1029
- }
1030
- }), this.appEventService.onGetRenderForRenderCarousel.subscribe((renderParameters) => {
1031
- if (this.selections.nativeElement) {
1032
- this.selections.nativeElement.getRenderForRenderCarousel(renderParameters);
1033
- }
1034
- }));
1035
- }
1036
- set sku(value) {
1037
- if (value) {
1038
- if (this.configuring) {
1039
- this.show3D = false;
1040
- this.fullScreen = false;
1041
- this.configuring = false;
1042
- this._changeDetector.detectChanges();
1043
- }
1044
- this._sku = value;
1045
- this._getArticle();
1046
- }
1047
- }
1048
- get sku() {
1049
- return this._sku;
1050
- }
1051
- set settings(value) {
1052
- if (value) {
1053
- if (typeof value === 'string') {
1054
- this._settings = JSON.parse(value);
1055
- }
1056
- else {
1057
- this._settings = value;
1058
- }
1059
- }
1060
- }
1061
- get settings() {
1062
- return this._settings;
1063
- }
1064
- set fullScreen(value) {
1065
- this._fullScreen = value;
1066
- this.fullscreenAnimationEnd = true;
1067
- this._changeDetector.detectChanges();
1068
- // setTimeout(() => {
1069
- // this.fullscreenAnimationEnd = true;
1070
- // }, 400)
1071
- }
1072
- get fullScreen() {
1073
- return this._fullScreen;
1074
- }
1075
- get fullScreenIcon() {
1076
- return this.fullScreen ? this.icon.NormalScreen : this.icon.FullScreen;
1077
- }
1078
- set currentView(value) {
1079
- this._currentView = value;
1080
- this.show2D = this._currentView === SelectorType.TwoD;
1081
- this.show3D = this._currentView === SelectorType.ThreeD;
1082
- this._changeDetector.detectChanges();
1083
- }
1084
- get currentView() {
1085
- return this._currentView;
1086
- }
1087
- ngOnInit() {
1088
- if (this._settings) {
1089
- this.settingsService.settings = undefined;
1090
- this.settingsService.createSettingsFromObject(this._settings);
1091
- }
1092
- else {
1093
- this._settings = this.settingsService.settings;
1094
- }
1095
- }
1096
- ngAfterViewInit() {
1097
- }
1098
- ngOnDestroy() {
1099
- this._subs.forEach(s => s.unsubscribe());
1100
- if (this._initializedSub) {
1101
- this._initializedSub.unsubscribe();
1102
- }
1103
- this._pageLoadedSubscription.unsubscribe();
1104
- this.configurator = undefined;
1105
- this.selections = undefined;
1106
- this.fullscreenbutton = undefined;
1107
- }
1108
- setInstance(event) {
1109
- if (event.detail) {
1110
- this._ione.setInstance(event.detail);
1111
- }
1112
- }
1113
- handleStartConfiguration() {
1114
- this.configuring = true;
1115
- this._changeDetector.detectChanges();
1116
- }
1117
- showFullScreen() {
1118
- this.fullScreen = !this.fullScreen;
1119
- }
1120
- _handleSettingsLoaded(loaded) {
1121
- if (loaded) {
1122
- this._ione.initConnection();
1123
- }
1124
- }
1125
- _getArticle() {
1126
- return __awaiter(this, void 0, void 0, function* () {
1127
- if (this._initializedSub) {
1128
- this._initializedSub.unsubscribe();
1129
- }
1130
- this._initializedSub = this._ione.controllerInitialized.subscribe((init) => __awaiter(this, void 0, void 0, function* () {
1131
- if (init) {
1132
- this._ione.getFullArticle(this._sku).then((article) => {
1133
- this.article = article;
1134
- if (this.article) {
1135
- this.configurable = this.article.goodType === 'B' && (this.article.isConfigurable || this.article.isConfigurable === undefined);
1136
- // this.configurable = this.article.goodType === 'B';
1137
- if (this.configurable) {
1138
- this.showAddToCart = false;
1139
- this.currentView = SelectorType.TwoD;
1140
- }
1141
- else {
1142
- this.showAddToCart = true;
1143
- }
1144
- this.threeD = this.article.is3D;
1145
- this.selectorType = this.article.selectorTypeCustomer;
1146
- this._ione.getDeliveryPrognosis(this.article.goodId).then((stockInfo) => {
1147
- const stockAndDelivery = stockInfo;
1148
- this.stockAndDelivery = new StockAndDelivery(0, stockAndDelivery.returnValue ? stockAndDelivery.returnValue : ' ');
1149
- this._changeDetector.detectChanges();
1150
- });
1151
- this._changeDetector.detectChanges();
1152
- }
1153
- this._ione.articleLoaded.next(true);
1154
- });
1155
- }
1156
- }));
1157
- this.showRelatedProductsPopup = false;
1158
- });
1159
- }
1160
- openStock() {
1161
- this.openStockEvent.emit();
1162
- }
1163
- handlePopUpChange(event) {
1164
- this.showRelatedProductsPopup = event;
1165
- }
1166
- }
1167
- ProductPageComponent.decorators = [
1168
- { type: Component, args: [{
1169
- selector: 'app-product-page',
1170
- 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\r\n <app-image-carousel\r\n *ngIf=\"!enableRenderCarousel\"\r\n [@toggleVisibilityByState]=\"show2D ? 'show' : 'hide'\"\r\n [images]=\"article?.images\"\r\n [showRefresh]=\"configurable && threeD\">\r\n </app-image-carousel>\r\n\r\n <app-render-carousel\r\n *ngIf=\"enableRenderCarousel\"\r\n [@toggleVisibilityByState]=\"show2D ? 'show' : 'hide'\"\r\n [article]=\"article\">\r\n </app-render-carousel>\r\n\r\n <ng-container *ngIf=\"settingsLoaded && this.configurable\">\r\n <threed-configurator\r\n #configurator\r\n 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\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\"\r\n [class.show-selections]=\"configuring\"\r\n [@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 (onAnswersAvailable)=\"appEventService.onAnswersAvailable.next($event.detail)\"\r\n (onReadyToRender)=\"appEventService.onReadyToRender.next($event.detail)\"\r\n (onRenderImageReceived)=\"appEventService.onRenderImageReceived.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 [showAddToCart]=\"showAddToCart\"\r\n [article]=\"article\"\r\n [externalSource]=\"externalSource\"\r\n [isReturn]=\"isReturn\"\r\n (startConfiguration)=\"handleStartConfiguration()\"\r\n (showRelatedPopup)=\"handlePopUpChange($event)\"\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 [showAddToCart]=\"showAddToCart\"\r\n [configuring]=\"configuring\"\r\n [article]=\"article\"\r\n [externalSource]=\"externalSource\"\r\n [isReturn]=\"isReturn\"\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 [externalSource]=\"externalSource\"\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\" *ngIf=\"article\">\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\r\n *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\r\n [externalSource]=\"externalSource\"\r\n [articles]=\"article?.relatedArticles\"\r\n [refType]=\"1\"\r\n [label]=\"'RELATED_PRODUCTS' | localize\">\r\n </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\r\n *ngIf=\"article?.relatedArticles && article?.relatedArticles.length > 0\"\r\n [externalSource]=\"externalSource\"\r\n [articles]=\"article?.relatedArticles\"\r\n [refType]=\"4\"\r\n [isSmallModus]=\"false\"\r\n [label]=\"'ALTERNATIVE_PRODUCTS' | localize\">\r\n </app-product-related>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showRelatedProductsPopup\">\r\n <co-product-dialog\r\n [mainArticle]=\"article\"\r\n [articles]=\"article?.relatedArticles\"\r\n [refType]=\"1\"\r\n (closeRelatedPopup)=\"handlePopUpChange($event)\"\r\n >\r\n </co-product-dialog>\r\n\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\r\n\r\n </div>\r\n</ng-container>\r\n",
1171
- animations: [
1172
- trigger('toggleFullScreen', [
1173
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%' })),
1174
- state('halfscreen', style({ 'position': '*', 'top': '*', 'left': '*', 'width': '*', 'height': '*' })),
1175
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out'))
1176
- ]),
1177
- trigger('toggleTopLeft', [
1178
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'left': '0' })),
1179
- state('halfscreen', style({ 'position': 'absolute', 'top': '*', 'left': '*' })),
1180
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out'))
1181
- ]),
1182
- trigger('toggleTopRight', [
1183
- state('fullscreen', style({ 'position': 'fixed', 'top': '0', 'right': '0' })),
1184
- state('halfscreen', style({ 'position': '*', 'top': '*', 'right': '*' })),
1185
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out'))
1186
- ]),
1187
- trigger('toggleFullScreenRight', [
1188
- state('fullscreen', style({ 'position': 'fixed', 'width': '400px', 'top': '0', 'right': '0' })),
1189
- state('halfscreen', style({ 'position': '*', 'width': '*', 'top': '*', 'right': '*' })),
1190
- transition('halfscreen <=> fullscreen', animate('200ms ease-in-out'))
1191
- ]),
1192
- trigger('toggleVisibilityByState', [
1193
- state('hide', style({ 'opacity': '0', 'display': 'none' })),
1194
- state('show', style({ 'display': 'block', 'opacity': '1' })),
1195
- transition('hide <=> show', animate('200ms 100ms ease-in-out'))
1196
- ]),
1197
- trigger('toggleVisibility', [
1198
- state('void', style({ 'opacity': '0' })),
1199
- state('*', style({ 'opacity': '1' })),
1200
- transition('void => *', animate('200ms ease-in-out'))
1201
- ])
1202
- ],
1203
- 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{margin-top:0}.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{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;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: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"]
1204
- },] }
1205
- ];
1206
- ProductPageComponent.ctorParameters = () => [
1207
- { type: ProductConnectorService },
1208
- { type: Renderer2 },
1209
- { type: ChangeDetectorRef },
1210
- { type: IconCacheService },
1211
- { type: ProductSettingsService },
1212
- { type: ProductEventService }
1213
- ];
1214
- ProductPageComponent.propDecorators = {
1215
- configurator: [{ type: ViewChild, args: ['configurator', { read: ElementRef },] }],
1216
- selections: [{ type: ViewChild, args: ['selections', { read: ElementRef },] }],
1217
- fullscreenbutton: [{ type: ViewChild, args: ['fullscreenbutton', { read: ElementRef },] }],
1218
- sku: [{ type: Input }],
1219
- settings: [{ type: Input }],
1220
- externalSource: [{ type: Input }],
1221
- createFrozenArticle: [{ type: Input }],
1222
- isReturn: [{ type: Input }],
1223
- showRelatedProductsPopup: [{ type: Input }],
1224
- enableRenderCarousel: [{ type: Input }],
1225
- openStockEvent: [{ type: Output }]
1226
- };
1227
-
1228
- class ProductSelectorTypeComponent {
1229
- constructor(_iconCache, _changeDetector) {
1230
- this._iconCache = _iconCache;
1231
- this._changeDetector = _changeDetector;
1232
- this.type = SelectorType;
1233
- this.icons = IconEnum;
1234
- this.onIconClick = new EventEmitter();
1235
- this.currentTypeChange = new EventEmitter();
1236
- this.twoDIcon = this._iconCache.getIcon(this.icons.TwoD);
1237
- this.threeDIcon = this._iconCache.getIcon(this.icons.ThreeD);
1238
- }
1239
- ngOnInit() {
1240
- }
1241
- handleIconClick(type) {
1242
- this.currentType = type;
1243
- this.currentTypeChange.next(this.currentType);
1244
- this.onIconClick.next(this.currentType);
1245
- this._changeDetector.detectChanges();
1246
- }
1247
- }
1248
- ProductSelectorTypeComponent.decorators = [
1249
- { type: Component, args: [{
1250
- selector: 'app-product-selector-type',
1251
- template: `
1252
- <div *ngIf="show2D || show3D" class="show-in" [textContent]="'SHOW_IN' | localize"></div>
1253
- <co-icon *ngIf="show2D && !showRenderCarousel" class="selector-type-icon"
1254
- [class.active]="currentType === type.TwoD"
1255
- [iconData]="twoDIcon"
1256
- (click)="handleIconClick(type.TwoD)"
1257
- ></co-icon>
1258
-
1259
- <co-icon *ngIf="show2D && showRenderCarousel" class="selector-type-icon"
1260
- [class.active]="currentType === type.TwoD"
1261
- [iconData]="twoDIcon"
1262
- (click)="handleIconClick(type.TwoD)"
1263
- ></co-icon>
1264
-
1265
- <co-icon *ngIf="show3D" class="selector-type-icon"
1266
- [class.active]="currentType === type.ThreeD"
1267
- [iconData]="threeDIcon"
1268
- (click)="handleIconClick(type.ThreeD)"
1269
- ></co-icon>
1270
- `,
1271
- styles: [":host{display:flex;flex-direction:row;align-items:center}:host .show-in{display:none}:host>*:not(:last-child){margin-right:10px}::ng-deep co-icon.selector-type-icon{box-shadow:inset 0 0 0 1px #22313c;border-radius:50%;background:none;height:34px;width:34px;cursor:pointer}::ng-deep co-icon.selector-type-icon.active{box-shadow:none;background:#74B77F;transition:all .2s ease-in-out}::ng-deep co-icon.selector-type-icon.active [fill]{fill:#fff}\n"]
1272
- },] }
1273
- ];
1274
- ProductSelectorTypeComponent.ctorParameters = () => [
1275
- { type: IconCacheService },
1276
- { type: ChangeDetectorRef }
1277
- ];
1278
- ProductSelectorTypeComponent.propDecorators = {
1279
- show2D: [{ type: Input }],
1280
- show3D: [{ type: Input }],
1281
- showRenderCarousel: [{ type: Input }],
1282
- currentType: [{ type: Input }],
1283
- onIconClick: [{ type: Output }],
1284
- currentTypeChange: [{ type: Output }]
1285
- };
1286
-
1287
- // A pipe for localizing string values in view templates.
1288
- class LocalizePipe {
1289
- constructor(_dictionaryService) {
1290
- this._dictionaryService = _dictionaryService;
1291
- }
1292
- transform(value, upperCaseFirst = true, replace = []) {
1293
- if (!value) {
1294
- return '';
1295
- }
1296
- replace = replace ? replace : [];
1297
- if (!Array.isArray(replace)) {
1298
- replace = [replace];
1299
- }
1300
- return this._dictionaryService.get(value, upperCaseFirst, ...replace);
1301
- }
1302
- }
1303
- LocalizePipe.decorators = [
1304
- { type: Pipe, args: [{
1305
- name: 'localize'
1306
- },] }
1307
- ];
1308
- LocalizePipe.ctorParameters = () => [
1309
- { type: DictionaryService }
1310
- ];
1311
-
1312
- class PipeModule {
1313
- }
1314
- PipeModule.decorators = [
1315
- { type: NgModule, args: [{
1316
- declarations: [
1317
- LocalizePipe
1318
- ],
1319
- providers: [
1320
- LocalizePipe
1321
- ],
1322
- exports: [
1323
- LocalizePipe
1324
- ]
1325
- },] }
1326
- ];
1327
-
1328
- // import {IconModule} from '@colijnit/corecomponents';
1329
- class ProductSelectorTypeModule {
1330
- }
1331
- ProductSelectorTypeModule.decorators = [
1332
- { type: NgModule, args: [{
1333
- imports: [
1334
- CommonModule,
1335
- PipeModule,
1336
- IconModule,
1337
- /*,
1338
- IconModule*/
1339
- ],
1340
- declarations: [
1341
- ProductSelectorTypeComponent
1342
- ],
1343
- exports: [
1344
- ProductSelectorTypeComponent
1345
- ]
1346
- },] }
1347
- ];
1348
-
1349
- class ImageViewModel {
1350
- }
1351
- class ImageCarouselComponent {
1352
- constructor(_ione, _appEventService, _changeDetector, _domSanitizer) {
1353
- this._ione = _ione;
1354
- this._appEventService = _appEventService;
1355
- this._changeDetector = _changeDetector;
1356
- this._domSanitizer = _domSanitizer;
1357
- this.isPopupOpen = false;
1358
- this.showRefresh = false;
1359
- this.resizing = false;
1360
- this.imageViewModels = [];
1361
- this.showLoader = false;
1362
- this._currentIndex = 0;
1363
- this._images = [];
1364
- this._subs = [];
1365
- this._resizeCanvasHeight = 500;
1366
- this._subs.push(this._appEventService.onRenderStarted.subscribe(() => {
1367
- this.showLoader = true;
1368
- this._changeDetector.detectChanges();
1369
- setTimeout(() => {
1370
- this.showLoader = false;
1371
- this._changeDetector.detectChanges();
1372
- }, 10000);
1373
- }), this._appEventService.onDraftRenderImageReceived.subscribe((event) => {
1374
- if (event && event.detail) {
1375
- if (this._images[0] instanceof CoDocument) {
1376
- this._images.unshift(event.detail);
1377
- }
1378
- else {
1379
- this._images[0] = event.detail;
1380
- }
1381
- this._loadAndRescaleImages();
1382
- }
1383
- this.showLoader = false;
1384
- this._changeDetector.detectChanges();
1385
- }));
1386
- }
1387
- // Close on ESC
1388
- onEsc() {
1389
- if (this.isPopupOpen) {
1390
- this.closePopup();
1391
- }
1392
- }
1393
- set images(value) {
1394
- if (value && value.length > 0) {
1395
- this._images = this._filterValidImages(value);
1396
- this._loadAndRescaleImages();
1397
- this._changeDetector.detectChanges();
1398
- }
1399
- }
1400
- get images() {
1401
- return this._images;
1402
- }
1403
- handleWindowResize() {
1404
- this.resizing = true;
1405
- this._scrollCarouselToIndex();
1406
- clearTimeout(this._resizeTimer);
1407
- this._resizeTimer = setTimeout(() => {
1408
- this.resizing = false;
1409
- }, 200);
1410
- }
1411
- gotoNextSlide() {
1412
- this.currentIndex++;
1413
- }
1414
- gotoPrevSlide() {
1415
- this.currentIndex--;
1416
- }
1417
- isCurrentIndex(index) {
1418
- return this.currentIndex === index;
1419
- }
1420
- get currentIndex() {
1421
- return this._currentIndex;
1422
- }
1423
- set currentIndex(value) {
1424
- this._currentIndex = value;
1425
- this._scrollCarouselToIndex();
1426
- }
1427
- ngOnDestroy() {
1428
- this.carousel = undefined;
1429
- this._subs.forEach(s => s.unsubscribe());
1430
- }
1431
- handleThumbClick(index) {
1432
- this.currentIndex = index;
1433
- }
1434
- onForceRenderImage() {
1435
- this._appEventService.onForceRenderImage.next();
1436
- }
1437
- handleShowImage(imageViewModel) {
1438
- if (imageViewModel && imageViewModel.originalSource) {
1439
- this.selectedImage = imageViewModel;
1440
- this.isPopupOpen = true;
1441
- this._changeDetector.markForCheck();
1442
- }
1443
- }
1444
- closePopup() {
1445
- this.isPopupOpen = false;
1446
- this.selectedImage = undefined;
1447
- this._changeDetector.markForCheck();
1448
- }
1449
- _filterValidImages(value) {
1450
- if (!value) {
1451
- return [];
1452
- }
1453
- return value.filter((doc) => {
1454
- const pattern = /\.(jpg|jpeg|png|gif|bmp|tiff|webp)$/i;
1455
- return typeof doc === 'string' || (pattern.test(doc.fileName) || !!doc.filePath);
1456
- });
1457
- }
1458
- _loadAndRescaleImages() {
1459
- this.imageViewModels.length = 0;
1460
- if (this._images) {
1461
- this._images.forEach((i) => {
1462
- let imageViewModel = new ImageViewModel();
1463
- imageViewModel.image = i;
1464
- if (typeof i === 'string') { // is a rendered image coming from configurator
1465
- this._resizeAndSanitizeSource(i, imageViewModel);
1466
- }
1467
- else {
1468
- if (i.filePath) {
1469
- this._resizeAndSanitizeSource(i.filePath, imageViewModel);
1470
- }
1471
- else if (i.documentBody) {
1472
- this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
1473
- }
1474
- else {
1475
- this._ione.getDocumentContent(i.documentId, false).then((content) => {
1476
- if (content) {
1477
- i.documentBody = content.documentContent;
1478
- this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
1479
- this._changeDetector.detectChanges();
1480
- }
1481
- });
1482
- }
1483
- }
1484
- this.imageViewModels.push(imageViewModel);
1485
- this._changeDetector.detectChanges();
1486
- });
1487
- }
1488
- }
1489
- _resizeAndSanitizeSource(source, imageViewModel) {
1490
- const resizeCanvas = document.createElement('canvas');
1491
- const ctx = resizeCanvas.getContext('2d');
1492
- const img = document.createElement('img');
1493
- img.crossOrigin = 'anonymous';
1494
- img.onload = () => {
1495
- ctx.imageSmoothingEnabled = true;
1496
- ctx.imageSmoothingQuality = 'high';
1497
- const ow = img.width;
1498
- const oh = img.height;
1499
- const aspect = ow / oh;
1500
- let newW = this._resizeCanvasHeight;
1501
- let newH = this._resizeCanvasHeight;
1502
- if (ow > oh) {
1503
- newH = this._resizeCanvasHeight / aspect;
1504
- }
1505
- else {
1506
- newW = this._resizeCanvasHeight * aspect;
1507
- }
1508
- resizeCanvas.width = Math.round(newW);
1509
- resizeCanvas.height = Math.round(newH);
1510
- // Ensure transparent background before drawing
1511
- ctx.clearRect(0, 0, resizeCanvas.width, resizeCanvas.height);
1512
- ctx.drawImage(img, 0, 0, resizeCanvas.width, resizeCanvas.height);
1513
- const mime = this._detectPreferredMime(source);
1514
- const resizedSource = mime === 'image/jpeg'
1515
- ? resizeCanvas.toDataURL('image/jpeg', 0.92) // only if original was JPEG
1516
- : resizeCanvas.toDataURL(mime); // PNG/WebP keep alpha
1517
- imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
1518
- imageViewModel.originalSource = source;
1519
- this._changeDetector.detectChanges();
1520
- };
1521
- img.src = source;
1522
- }
1523
- _detectPreferredMime(source) {
1524
- // Data URI check
1525
- const m = source.match(/^data:(image\/[a-zA-Z+.-]+);base64,/);
1526
- if (m) {
1527
- const t = m[1].toLowerCase();
1528
- if (t === 'image/png' || t === 'image/webp' || t === 'image/jpeg')
1529
- return t;
1530
- }
1531
- const lower = source.toLowerCase();
1532
- if (lower.endsWith('.png'))
1533
- return 'image/png';
1534
- if (lower.endsWith('.webp'))
1535
- return 'image/webp';
1536
- if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
1537
- return 'image/jpeg';
1538
- return 'image/png';
1539
- }
1540
- _scrollCarouselToIndex() {
1541
- if (this.currentIndex > -1 && this.currentIndex <= this.images.length) {
1542
- const movePx = this.currentIndex * this.carousel.nativeElement.clientWidth;
1543
- if (this.carousel && this.carousel.nativeElement) {
1544
- this.carousel.nativeElement.scrollLeft = movePx;
1545
- // this.carousel.nativeElement.scrollTo({
1546
- // left: movePx,
1547
- // behavior: 'smooth'
1548
- // });
1549
- }
1550
- }
1551
- }
1552
- }
1553
- ImageCarouselComponent.decorators = [
1554
- { type: Component, args: [{
1555
- selector: 'app-image-carousel',
1556
- template: `
1557
- <div id="product_page_carousel">
1558
- <div id="product_page_carousel_items">
1559
- <co-loader [isShown]="true" *ngIf="showLoader"></co-loader>
1560
- <div #carousel class="inner-carousel">
1561
- <!-- This has been taken out of the for loop to prevent flashing images when updating. -->
1562
- <div *ngIf="imageViewModels[0]" class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
1563
- <img [src]="imageViewModels[0].source">
1564
- </div>
1565
- <div *ngFor="let imageViewModel of imageViewModels.slice(1); let index = index" class="carousel-item"
1566
- [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
1567
- <img [src]="imageViewModel.source">
1568
- </div>
1569
- <div class="carousel-scroller-layer" *ngIf="imageViewModels && imageViewModels.length > 1">
1570
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()" *ngIf="currentIndex > 0"></div>
1571
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()" *ngIf="currentIndex < images.length - 1"></div>
1572
- </div>
1573
- </div>
1574
- <!--
1575
- <co-icon class="selector-type-icon refresh-button" [iconData]="iconCache.getIcon(icons.Refresh)" (click)="onForceRenderImage()" [class.loading]="showLoader" *ngIf="showRefresh"></co-icon>
1576
- -->
1577
- </div>
1578
-
1579
- <div id="product_page_carousel_thumbs">
1580
- <co-scroll-container class="scroll-container" *ngIf="imageViewModels && imageViewModels.length > 1">
1581
- <div *ngFor="let imageViewModel of imageViewModels; let index = index" class="carousel-thumb"
1582
- [class.active]="index === currentIndex">
1583
- <img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
1584
- </div>
1585
- </co-scroll-container>
1586
- </div>
1587
- </div>
1588
- <!-- Modal (real popup) -->
1589
- <div
1590
- class="image-modal"
1591
- *ngIf="isPopupOpen"
1592
- (click)="closePopup()"
1593
- role="dialog"
1594
- aria-modal="true"
1595
- aria-label="Image preview"
1596
- >
1597
- <div class="image-modal__content" (click)="$event.stopPropagation()">
1598
- <button
1599
- class="image-modal__close"
1600
- type="button"
1601
- aria-label="Close"
1602
- (click)="closePopup()"
1603
- >
1604
- ×
1605
- </button>
1606
-
1607
- <img [src]="selectedImage?.originalSource" alt="Image preview" />
1608
- </div>
1609
- </div>
1610
- `,
1611
- changeDetection: ChangeDetectionStrategy.OnPush,
1612
- 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;-o-object-fit:contain;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:rgba(0,0,0,.8);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;-o-object-fit:contain;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"]
1613
- },] }
1614
- ];
1615
- ImageCarouselComponent.ctorParameters = () => [
1616
- { type: ProductConnectorService },
1617
- { type: ProductEventService },
1618
- { type: ChangeDetectorRef },
1619
- { type: DomSanitizer }
1620
- ];
1621
- ImageCarouselComponent.propDecorators = {
1622
- carousel: [{ type: ViewChild, args: ['carousel', { read: ElementRef },] }],
1623
- onEsc: [{ type: HostListener, args: ['document:keydown.escape',] }],
1624
- showRefresh: [{ type: Input }],
1625
- images: [{ type: Input }],
1626
- handleWindowResize: [{ type: HostListener, args: ['window:resize',] }],
1627
- gotoNextSlide: [{ type: HostListener, args: ['swipeleft',] }],
1628
- gotoPrevSlide: [{ type: HostListener, args: ['swiperight',] }],
1629
- resizing: [{ type: HostBinding, args: ['class.resizing',] }]
1630
- };
1631
-
1632
- class ImageCarouselModule {
1633
- }
1634
- ImageCarouselModule.decorators = [
1635
- { type: NgModule, args: [{
1636
- imports: [
1637
- CommonModule,
1638
- LoaderModule,
1639
- // IconModule,
1640
- ScrollContainerModule
1641
- ],
1642
- declarations: [
1643
- ImageCarouselComponent
1644
- ],
1645
- exports: [
1646
- ImageCarouselComponent
1647
- ]
1648
- },] }
1649
- ];
1650
-
1651
- class ProductDescriptionComponent {
1652
- constructor() { }
1653
- ngOnInit() {
1654
- }
1655
- }
1656
- ProductDescriptionComponent.decorators = [
1657
- { type: Component, args: [{
1658
- selector: 'app-product-description',
1659
- template: `
1660
- <div class="pd-title-wrapper">
1661
- <span class="pd-description" [textContent]="article?.descriptionRetail" *ngIf="article?.descriptionRetail"></span>
1662
- <span class="pd-sku" [textContent]="article?.articleNr" *ngIf="article?.articleNr"></span>
1663
- </div>
1664
- `,
1665
- styles: [":host{display:block}.pd-title-wrapper{margin:20px 0 0}.pd-description{color:#22313c;font-size:25px;font-weight:bold;width:100%;display:block}.pd-sku{color:#5b6875;font-size:16px}@media screen and (max-width: 650px){.pd-description{font-size:21px}.pd-sku{font-size:13px}}\n"]
1666
- },] }
1667
- ];
1668
- ProductDescriptionComponent.ctorParameters = () => [];
1669
- ProductDescriptionComponent.propDecorators = {
1670
- article: [{ type: Input }]
1671
- };
1672
-
1673
- class ProductDescriptionModule {
1674
- }
1675
- ProductDescriptionModule.decorators = [
1676
- { type: NgModule, args: [{
1677
- imports: [
1678
- CommonModule
1679
- ],
1680
- declarations: [
1681
- ProductDescriptionComponent
1682
- ],
1683
- exports: [
1684
- ProductDescriptionComponent
1685
- ]
1686
- },] }
1687
- ];
1688
-
1689
- class BitUtils {
1690
- static IsShortDescription(bit) {
1691
- return (1 & bit) > 0;
1692
- }
1693
- static IsFullDescription(bit) {
1694
- return (2 & bit) > 0;
1695
- }
1696
- static IsMetaTitle(bit) {
1697
- return (4 & bit) > 0;
1698
- }
1699
- static IsMetaDescription(bit) {
1700
- return (8 & bit) > 0;
1701
- }
1702
- static IsMetaKeys(bit) {
1703
- return (16 & bit) > 0;
1704
- }
1705
- }
1706
-
1707
- class ProductAdditionalDescriptionComponent {
1708
- constructor(_appEventService) {
1709
- this._appEventService = _appEventService;
1710
- }
1711
- set article(value) {
1712
- this._article = value;
1713
- if (this._article) {
1714
- this.description = this.article.additionalDescription;
1715
- this._prepareDescription();
1716
- }
1717
- }
1718
- get article() {
1719
- return this._article;
1720
- }
1721
- ngOnInit() {
1722
- }
1723
- onReadMore() {
1724
- this._appEventService.onUpdateProductInfoTab.next(0);
1725
- }
1726
- _prepareDescription() {
1727
- this.description = '';
1728
- if (this.article.texts && this.article.texts.length > 0) {
1729
- this.article.texts.forEach((txt) => {
1730
- if (BitUtils.IsShortDescription(txt.publication)) {
1731
- this.description += txt.text;
1732
- }
1733
- });
1734
- this.description = this.description.replace(/<[^>]*>?/gm, '');
1735
- if (this.description.length > 250) {
1736
- this.description = this.description.substr(0, 250) + ' [..]';
1737
- }
1738
- }
1739
- }
1740
- }
1741
- ProductAdditionalDescriptionComponent.decorators = [
1742
- { type: Component, args: [{
1743
- selector: 'app-product-additional-description',
1744
- template: `
1745
- <ng-container *ngIf="description !== ''">
1746
- <div class="pd-additional-description">
1747
- <p [innerHTML]="description"></p>
1748
- <button class="pd-read-more-btn" [textContent]="'READ_MORE' | localize" (click)="onReadMore()"></button>
1749
- </div>
1750
- </ng-container>
1751
- `,
1752
- styles: [":host{display:block;padding-top:0!important}:host *:focus{outline:0!important}:host .pd-additional-description{line-height:190%;color:#22313c;font-size:13px}:host .pd-read-more-btn{color:#2b60a7;border:none;background:transparent;cursor:pointer;text-decoration:underline;font-family:iOneMontserrat}:host .pd-read-more-btn:hover{color:#74b77f}@media screen and (max-width: 650px){:host .pd-additional-description{font-size:12px}}\n"]
1753
- },] }
1754
- ];
1755
- ProductAdditionalDescriptionComponent.ctorParameters = () => [
1756
- { type: ProductEventService }
1757
- ];
1758
- ProductAdditionalDescriptionComponent.propDecorators = {
1759
- article: [{ type: Input }]
1760
- };
1761
-
1762
- class ProductAdditionalDescriptionModule {
1763
- }
1764
- ProductAdditionalDescriptionModule.decorators = [
1765
- { type: NgModule, args: [{
1766
- imports: [
1767
- CommonModule,
1768
- PipeModule
1769
- ],
1770
- declarations: [
1771
- ProductAdditionalDescriptionComponent
1772
- ],
1773
- exports: [
1774
- ProductAdditionalDescriptionComponent
1775
- ]
1776
- },] }
1777
- ];
1778
-
1779
- class ProductPriceComponent {
1780
- constructor(_changeDetector) {
1781
- this._changeDetector = _changeDetector;
1782
- this.showFromPrice = false;
1783
- this._configurable = false;
1784
- }
1785
- set pricing(value) {
1786
- this._pricing = value;
1787
- this._setPrices();
1788
- }
1789
- get pricing() {
1790
- return this._pricing;
1791
- }
1792
- set configurable(value) {
1793
- this._configurable = value;
1794
- this._setPrices();
1795
- }
1796
- ngOnInit() {
1797
- }
1798
- _setPrices() {
1799
- if (this._pricing) {
1800
- this.valutaSign = this._getSign(this._pricing.retailCurrency);
1801
- if (this._configurable) {
1802
- this.fromPrice = this._pricing.retailBasePrice ? this._pricing.retailBasePrice : this._pricing.priceBaseline;
1803
- this.fromLabel = this._pricing.retailBasePrice ? 'PRICE' : 'FROM';
1804
- this.toPrice = undefined;
1805
- this.toLabel = '';
1806
- }
1807
- else {
1808
- const hasSuggested = this._pricing.retailSuggestedPrice !== undefined && this._pricing.retailSuggestedPrice !== null;
1809
- this.fromPrice = hasSuggested ? this._pricing.retailSuggestedPrice : this._pricing.retailBasePrice;
1810
- this.fromLabel = hasSuggested ? 'Was' : 'PRICE';
1811
- // Always set toPrice to base price
1812
- this.toPrice = this._pricing.retailBasePrice;
1813
- this.toLabel = hasSuggested ? 'IS_NOW' : 'PRICE';
1814
- }
1815
- this._changeDetector.detectChanges();
1816
- }
1817
- }
1818
- _getSign(currency) {
1819
- switch (currency) {
1820
- case 'EUR':
1821
- return '€';
1822
- default:
1823
- return '€';
1824
- }
1825
- }
1826
- }
1827
- ProductPriceComponent.decorators = [
1828
- { type: Component, args: [{
1829
- selector: 'app-product-price',
1830
- template: `
1831
- <div *ngIf="toPrice">
1832
- <div class="price-wrapper" *ngIf="fromPrice > toPrice">
1833
- <div class="from-price-label" [textContent]="fromLabel | localize"></div>
1834
- <div class="from-price" [textContent]="fromPrice | priceDisplay: valutaSign"></div>
1835
- </div>
1836
- <div class="price-wrapper">
1837
- <div class="to-price-label" [textContent]="toLabel | localize"></div>
1838
- <div class="to-price" [textContent]="toPrice | priceDisplay: valutaSign"></div>
1839
- </div>
1840
- </div>
1841
- `,
1842
- styles: [":host{display:flex;flex-direction:column}.price-wrapper{width:100%;font-size:15px;margin:0 0 5px;display:inline-block}.price-wrapper:last-child{margin:0}.from-price-label,.to-price-label{color:#5b6875;display:none}.from-price{font-size:16px;font-weight:bold;text-decoration:line-through;color:#5b6875}.to-price{font-size:25px;font-weight:bold;color:#74b77f}@media screen and (max-width: 650px){.from-price{font-size:13px}.to-price{font-size:21px}}\n"]
1843
- },] }
1844
- ];
1845
- ProductPriceComponent.ctorParameters = () => [
1846
- { type: ChangeDetectorRef }
1847
- ];
1848
- ProductPriceComponent.propDecorators = {
1849
- pricing: [{ type: Input }],
1850
- configurable: [{ type: Input }]
1851
- };
1852
-
1853
- class ProductPriceModule {
1854
- }
1855
- ProductPriceModule.decorators = [
1856
- { type: NgModule, args: [{
1857
- imports: [
1858
- CommonModule,
1859
- PipeModule,
1860
- PriceDisplayPipeModule
1861
- ],
1862
- declarations: [
1863
- ProductPriceComponent
1864
- ],
1865
- exports: [
1866
- ProductPriceComponent
1867
- ]
1868
- },] }
1869
- ];
1870
-
1871
- class ProductAddtocartComponent {
1872
- constructor(iconCache, _ioneControllerService, _appEventService, _settingsService, _productConnectorAdapterService) {
1873
- this.iconCache = iconCache;
1874
- this._ioneControllerService = _ioneControllerService;
1875
- this._appEventService = _appEventService;
1876
- this._settingsService = _settingsService;
1877
- this._productConnectorAdapterService = _productConnectorAdapterService;
1878
- this.icon = IconEnum;
1879
- this.createFrozenArticle = true;
1880
- this.configurable = false;
1881
- this.configuring = false;
1882
- this.showAddToCart = false;
1883
- this.isReturn = false;
1884
- this.fullscreen = false;
1885
- this.startConfiguration = new EventEmitter();
1886
- this.addToCartClick = new EventEmitter();
1887
- this.addToQuoteClick = new EventEmitter();
1888
- this.showRelatedPopup = new EventEmitter();
1889
- this.showQuoteButton = false;
1890
- this._quantity = 1;
1891
- }
1892
- set quantity(value) {
1893
- if (this.isReturn) {
1894
- if (this._quantity === 1) {
1895
- this._quantity = -1;
1896
- }
1897
- else {
1898
- this._quantity = value;
1899
- }
1900
- }
1901
- else {
1902
- this._quantity = Math.max(1, value);
1903
- }
1904
- }
1905
- get quantity() {
1906
- return this._quantity;
1907
- }
1908
- ngOnInit() {
1909
- }
1910
- ngOnDestroy() {
1911
- this.addToCartButton = undefined;
1912
- }
1913
- handleAddToCartClick(quantity) {
1914
- return __awaiter(this, void 0, void 0, function* () {
1915
- if (this.createFrozenArticle) {
1916
- if (this.article.goodType === 'B') {
1917
- if (this.article.isConfigurable) {
1918
- const article = yield this._getJSONFromArticleObject({ article: this.article, quantity: quantity });
1919
- if (article) {
1920
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
1921
- }
1922
- }
1923
- else {
1924
- yield this._handleGeneratedArticleDirectly(quantity);
1925
- }
1926
- }
1927
- else {
1928
- let article;
1929
- if (!!this.externalSource) {
1930
- article = yield this._getJSONFromArticleObject({ article: this.article, quantity: quantity });
1931
- }
1932
- else {
1933
- article = this._ioneControllerService.convertArticleFullObjectToArticleExtended(this.article);
1934
- }
1935
- if (article) {
1936
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
1937
- }
1938
- }
1939
- }
1940
- else {
1941
- if (this.article.goodType === 'B') {
1942
- if (!this.article.isConfigurable) {
1943
- yield this._handleGeneratedArticleDirectly(quantity);
1944
- }
1945
- }
1946
- else {
1947
- const article = this._ioneControllerService.convertArticleFullObjectToArticleExtended(this.article);
1948
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
1949
- }
1950
- }
1951
- });
1952
- }
1953
- handleAddToQuoteClick(quantity) {
1954
- return __awaiter(this, void 0, void 0, function* () {
1955
- this._appEventService.onAddToQuote.next(yield this._getJSONFromArticleObject({ article: this.article, quantity: quantity }));
1956
- });
1957
- }
1958
- _getJSONFromArticleObject(article) {
1959
- return __awaiter(this, void 0, void 0, function* () {
1960
- const configuratorStatistics = new ConfiguratorStatisticsEnvironment();
1961
- configuratorStatistics.userType = 'iOneProductPage';
1962
- configuratorStatistics.transactionType = 'Sales';
1963
- configuratorStatistics.actionDomain = 'bundle';
1964
- configuratorStatistics.sessionId = this._settingsService.settings.session ? this._settingsService.settings.session.sessionId : 'unknown';
1965
- configuratorStatistics.webHost = window.location.host;
1966
- configuratorStatistics.bundleHost = window.location.host;
1967
- return yield this._ioneControllerService.getJsonArticleFlatTree(article.article.goodId, article.article.goodType, article.quantity, !!this.externalSource, true, configuratorStatistics);
1968
- });
1969
- }
1970
- _handleGeneratedArticleDirectly(quantity) {
1971
- return __awaiter(this, void 0, void 0, function* () {
1972
- const generatedGoodId = yield this._getGeneratedArtDirectly(this.article.goodId);
1973
- if (generatedGoodId) {
1974
- const articleFull = yield this._productConnectorAdapterService.getArticleFullObject(generatedGoodId, true);
1975
- const article = this._ioneControllerService.convertArticleFullObjectToArticleExtended(articleFull);
1976
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
1977
- }
1978
- });
1979
- }
1980
- _getGeneratedArtDirectly(goodId) {
1981
- return __awaiter(this, void 0, void 0, function* () {
1982
- return yield this._ioneControllerService.getGeneratedArtDirectly(goodId, true);
1983
- });
1984
- }
1985
- }
1986
- ProductAddtocartComponent.decorators = [
1987
- { type: Component, args: [{
1988
- selector: 'app-product-addtocart',
1989
- template: `
1990
- <div class="atc-wrapper">
1991
- <ng-container *ngIf="isReturn">
1992
- <co-number-picker *ngIf="!configurable && !configuring" class="quantity-select" [(model)]="quantity" [min]="-100" horizontal></co-number-picker>
1993
- </ng-container>
1994
-
1995
- <ng-container *ngIf="!isReturn">
1996
- <co-number-picker *ngIf="!configurable && !configuring" class="quantity-select" [(model)]="quantity" [min]="1" horizontal></co-number-picker>
1997
- </ng-container>
1998
-
1999
- <div class="button-wrapper" *ngIf="configurable">
2000
- <co-button class="configure-button"
2001
- [iconData]="iconCache.getIcon(icon.MagicWand)"
2002
- [label]="'CONFIGURE' | localize"
2003
- (onClick)="startConfiguration.emit()"
2004
- ></co-button>
2005
- </div>
2006
- <div class="button-wrapper" *ngIf="showAddToCart && !configurable">
2007
- <co-button #addtocartbutton class="cart-button"
2008
- [iconData]="iconCache.getIcon(icon.AddToCartDrop)"
2009
- [label]="'SHOPPING_CART_IN' | localize"
2010
- (onClick)="handleAddToCartClick(quantity)"
2011
- ></co-button>
2012
- <co-button class="cart-button quote" *ngIf="showQuoteButton"
2013
- [iconData]="iconCache.getIcon(icon.Quote)"
2014
- [label]="'QUOTATION' | localize"
2015
- (onClick)="handleAddToQuoteClick(quantity)"
2016
- ></co-button>
2017
- </div>
2018
- </div>
2019
- `,
2020
- styles: [":host{display:flex;flex-direction:column}:host *:not(:last-child){margin-bottom:5px}:host .atc-wrapper{display:flex;flex-direction:row;align-items:baseline}:host .atc-wrapper .quantity-select{margin-right:5px}:host.full-screen .cart-button{position:fixed;right:20px;bottom:20px;z-index:3}::ng-deep co-number-picker{max-width:100px;border:2px solid #f6f5f4;border-radius:5px}::ng-deep co-number-picker ::ng-deep co-input-text{height:50px!important;border:none!important;width:50px!important}::ng-deep co-number-picker ::ng-deep co-input-text:after{display:none}::ng-deep co-number-picker ::ng-deep co-input-text.focused{box-shadow:none!important;border:none!important;background:none!important}::ng-deep co-number-picker ::ng-deep co-input-text .clear-icon{display:none}::ng-deep co-number-picker ::ng-deep co-input-text input{width:100%;text-align:center}::ng-deep co-number-picker ::ng-deep co-button{justify-content:center;padding:0!important;margin:0!important;height:50px!important;background-color:transparent!important}::ng-deep co-number-picker ::ng-deep co-button ::ng-deep co-icon [fill]{fill:#22313c!important}.button-wrapper ::ng-deep co-button{height:50px;max-width:300px;justify-content:center;font-size:15px;border-radius:5px!important;cursor:pointer;padding:0 20px!important}.button-wrapper ::ng-deep co-button:hover{background:#74B77F}::ng-deep co-button.cart-button{border-radius:5px}::ng-deep co-button.cart-button.quote{background:#7292b6}\n"]
2021
- },] }
2022
- ];
2023
- ProductAddtocartComponent.ctorParameters = () => [
2024
- { type: IconCacheService },
2025
- { type: ProductConnectorService },
2026
- { type: ProductEventService },
2027
- { type: ProductSettingsService },
2028
- { type: ProductConnectorAdapterService }
2029
- ];
2030
- ProductAddtocartComponent.propDecorators = {
2031
- addToCartButton: [{ type: ViewChild, args: ['addtocartbutton', { read: ElementRef },] }],
2032
- article: [{ type: Input }],
2033
- externalSource: [{ type: Input }],
2034
- createFrozenArticle: [{ type: Input }],
2035
- configurable: [{ type: Input }],
2036
- configuring: [{ type: Input }],
2037
- showAddToCart: [{ type: Input }],
2038
- isReturn: [{ type: Input }],
2039
- fullscreen: [{ type: HostBinding, args: ['class.full-screen',] }, { type: Input }],
2040
- quantity: [{ type: Input }],
2041
- startConfiguration: [{ type: Output }],
2042
- addToCartClick: [{ type: Output }],
2043
- addToQuoteClick: [{ type: Output }],
2044
- showRelatedPopup: [{ type: Output }]
2045
- };
2046
-
2047
- class ProductAddtocartModule {
2048
- }
2049
- ProductAddtocartModule.decorators = [
2050
- { type: NgModule, args: [{
2051
- imports: [
2052
- CommonModule,
2053
- NumberPickerModule,
2054
- ButtonModule,
2055
- PipeModule,
2056
- LoaderModule$1
2057
- ],
2058
- declarations: [
2059
- ProductAddtocartComponent
2060
- ],
2061
- exports: [
2062
- ProductAddtocartComponent
2063
- ]
2064
- },] }
2065
- ];
2066
-
2067
- class ArticleViewModel {
2068
- constructor(article, imageData) {
2069
- this.article = article;
2070
- if (imageData) {
2071
- this.imageData = imageData;
2072
- }
2073
- }
2074
- }
2075
- class ProductRelatedComponent {
2076
- constructor(_iOne, _appEventService, _productConnectorAdapterService, _settingsService) {
2077
- this._iOne = _iOne;
2078
- this._appEventService = _appEventService;
2079
- this._productConnectorAdapterService = _productConnectorAdapterService;
2080
- this._settingsService = _settingsService;
2081
- this.isSmallModus = true;
2082
- this.createFrozenArticle = true;
2083
- this.articleViewModels = [];
2084
- this._articles = [];
2085
- }
2086
- set articles(value) {
2087
- if (value) {
2088
- if (this.refType && this.refType !== undefined) {
2089
- if (value.length > 0) {
2090
- value.forEach((x) => {
2091
- if (x.refType === this.refType) {
2092
- this._articles.push(x);
2093
- }
2094
- });
2095
- }
2096
- }
2097
- else {
2098
- this._articles = value;
2099
- }
2100
- this.articleViewModels.length = 0;
2101
- this._articles.forEach(a => this.articleViewModels.push(new ArticleViewModel(a)));
2102
- this._loadImages();
2103
- }
2104
- }
2105
- get articles() {
2106
- return this._articles;
2107
- }
2108
- handleContentClick(article) {
2109
- this._appEventService.onAlternativeClick.next(article);
2110
- }
2111
- handleAddToCartClick(article) {
2112
- return __awaiter(this, void 0, void 0, function* () {
2113
- const quantity = 1;
2114
- const articleFull = yield this._productConnectorAdapterService.getArticleFullObject(article.goodId, true);
2115
- if (articleFull) {
2116
- if (this.createFrozenArticle) {
2117
- const article = this._iOne.convertArticleFullObjectToArticleExtended(articleFull);
2118
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
2119
- // this._appEventService.onAddToCart.next({ article: await this._getJSONFromArticleObject({article: articleFull, quantity: quantity}), quantity: quantity });
2120
- }
2121
- else {
2122
- const article = this._iOne.convertArticleFullObjectToArticleExtended(articleFull);
2123
- this._appEventService.onAddToCart.next({ article: article, quantity: quantity });
2124
- }
2125
- }
2126
- });
2127
- }
2128
- handleConfigureButtonClick(article) {
2129
- }
2130
- handleThreeDButtonClick(article) {
2131
- }
2132
- _getJSONFromArticleObject(article) {
2133
- return __awaiter(this, void 0, void 0, function* () {
2134
- const configuratorStatistics = new ConfiguratorStatisticsEnvironment();
2135
- configuratorStatistics.userType = 'iOneProductPage';
2136
- configuratorStatistics.transactionType = 'Sales';
2137
- configuratorStatistics.actionDomain = 'bundle';
2138
- configuratorStatistics.sessionId = this._settingsService.settings.session ? this._settingsService.settings.session.sessionId : 'unknown';
2139
- configuratorStatistics.webHost = window.location.host;
2140
- configuratorStatistics.bundleHost = window.location.host;
2141
- return yield this._iOne.getJsonArticleFlatTree(article.article.goodId, article.article.goodType, article.quantity, !!this.externalSource, true, configuratorStatistics);
2142
- });
2143
- }
2144
- _loadImages() {
2145
- return __awaiter(this, void 0, void 0, function* () {
2146
- this.articleViewModels.forEach(avm => {
2147
- if (avm.article.image) {
2148
- this._iOne.getImageForCoDocument(avm.article.image, false).then(imageContent => avm.imageData = imageContent.image);
2149
- }
2150
- });
2151
- });
2152
- }
2153
- }
2154
- ProductRelatedComponent.decorators = [
2155
- { type: Component, args: [{
2156
- selector: 'app-product-related',
2157
- template: `
2158
- <div *ngIf="articles && articles.length > 0">
2159
- <app-header [label]="label" [amount]="articles?.length" *ngIf="label"></app-header>
2160
- <co-scroll-container>
2161
- <div class="article-wrapper" *ngFor="let articleViewModel of articleViewModels">
2162
- <co-article-tile
2163
- [imageData]="articleViewModel.imageData"
2164
- [description]="articleViewModel.article.description"
2165
- [price]="articleViewModel.article.price"
2166
- [level]="articleViewModel.article.stockStatus"
2167
- [hasCartButton]="true"
2168
- [isSmallModus]="isSmallModus"
2169
- [hasConfigureButton]="articleViewModel.article.goodType === 'B'"
2170
- (contentClick)="handleContentClick(articleViewModel.article)"
2171
- (cartButtonClick)="handleAddToCartClick(articleViewModel.article)"
2172
- (configureButtonClick)="handleContentClick(articleViewModel.article)"
2173
- (threeDButtonClick)="handleThreeDButtonClick(articleViewModel.article)"
2174
- ></co-article-tile>
2175
- </div>
2176
- </co-scroll-container>
2177
- </div>
2178
- `,
2179
- 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;grid-gap:5px;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;grid-gap:10px;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"]
2180
- },] }
2181
- ];
2182
- ProductRelatedComponent.ctorParameters = () => [
2183
- { type: ProductConnectorService },
2184
- { type: ProductEventService },
2185
- { type: ProductConnectorAdapterService },
2186
- { type: ProductSettingsService }
2187
- ];
2188
- ProductRelatedComponent.propDecorators = {
2189
- refType: [{ type: Input }],
2190
- label: [{ type: Input }],
2191
- externalSource: [{ type: Input }],
2192
- isSmallModus: [{ type: Input }],
2193
- createFrozenArticle: [{ type: Input }],
2194
- articles: [{ type: Input }]
2195
- };
2196
-
2197
- class HeaderComponent {
2198
- constructor() { }
2199
- ngOnInit() {
2200
- }
2201
- }
2202
- HeaderComponent.decorators = [
2203
- { type: Component, args: [{
2204
- selector: 'app-header',
2205
- template: `
2206
- <ng-container *ngIf="label">
2207
- <div class="header-wrapper">
2208
- <h3 [textContent]="label"></h3>
2209
- <span *ngIf="amount" class="amount" [textContent]="'(' + amount + ')'"></span>
2210
- </div>
2211
- </ng-container>
2212
- `,
2213
- styles: [".header-wrapper{display:flex;flex-direction:row;align-items:center}.header-wrapper .amount{margin-left:5px}\n"]
2214
- },] }
2215
- ];
2216
- HeaderComponent.ctorParameters = () => [];
2217
- HeaderComponent.propDecorators = {
2218
- label: [{ type: Input }],
2219
- amount: [{ type: Input }]
2220
- };
2221
-
2222
- class HeaderModule {
2223
- }
2224
- HeaderModule.decorators = [
2225
- { type: NgModule, args: [{
2226
- imports: [
2227
- CommonModule
2228
- ],
2229
- declarations: [
2230
- HeaderComponent
2231
- ],
2232
- exports: [
2233
- HeaderComponent
2234
- ]
2235
- },] }
2236
- ];
2237
-
2238
- class ProductRelatedModule {
2239
- }
2240
- ProductRelatedModule.decorators = [
2241
- { type: NgModule, args: [{
2242
- imports: [
2243
- CommonModule,
2244
- HeaderModule,
2245
- ScrollContainerModule,
2246
- ArticleTileModule
2247
- ],
2248
- declarations: [
2249
- ProductRelatedComponent
2250
- ],
2251
- exports: [
2252
- ProductRelatedComponent
2253
- ]
2254
- },] }
2255
- ];
2256
-
2257
- class ProductStockComponent {
2258
- constructor(_iOne, _iconCache) {
2259
- this._iOne = _iOne;
2260
- this._iconCache = _iconCache;
2261
- this.icon = IconEnum;
2262
- this.openStockEvent = new EventEmitter();
2263
- this.inStock = false;
2264
- this.iconData = this._iconCache.getIcon(this.icon.Warehouse);
2265
- }
2266
- set goodId(value) {
2267
- this._goodId = value;
2268
- this._getStockStatus();
2269
- }
2270
- get goodId() {
2271
- return this._goodId;
2272
- }
2273
- openStock() {
2274
- this.openStockEvent.emit();
2275
- }
2276
- _getStockStatus() {
2277
- if (this.goodId) {
2278
- this._iOne.getArtStockStatus(this.goodId).then((result) => {
2279
- switch (result) {
2280
- case 1: // niet op voorraad
2281
- this.stockLabel = 'PRODUCT_LIMITED_STOCK';
2282
- this.inStock = true;
2283
- break;
2284
- case 2:
2285
- this.stockLabel = 'PRODUCT_IN_STOCK';
2286
- this.inStock = true;
2287
- break;
2288
- default:
2289
- this.stockLabel = 'PRODUCT_NOT_IN_STOCK';
2290
- this.inStock = false;
2291
- break;
2292
- }
2293
- });
2294
- }
2295
- }
2296
- }
2297
- ProductStockComponent.decorators = [
2298
- { type: Component, args: [{
2299
- selector: 'app-product-stock',
2300
- template: `
2301
- <!--<app-header [label]="'STOCK' | localize"></app-header>-->
2302
- <!--<co-level-indicator [model]="'medium'"></co-level-indicator>-->
2303
- <div class="product-stock-wrapper">
2304
- <co-icon class="stock-icon" [iconData]="iconData"></co-icon>
2305
- <div class="product-stock-fields" (click)="openStock()">
2306
- <div class="pp-default-label" [class.in-stock]="inStock" [textContent]="stockLabel | localize"></div>
2307
- </div>
2308
- </div>
2309
- `,
2310
- 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"]
2311
- },] }
2312
- ];
2313
- ProductStockComponent.ctorParameters = () => [
2314
- { type: ProductConnectorService },
2315
- { type: IconCacheService }
2316
- ];
2317
- ProductStockComponent.propDecorators = {
2318
- goodId: [{ type: Input }],
2319
- openStockEvent: [{ type: Output }]
2320
- };
2321
-
2322
- class ProductStockModule {
2323
- }
2324
- ProductStockModule.decorators = [
2325
- { type: NgModule, args: [{
2326
- imports: [
2327
- CommonModule,
2328
- IconModule,
2329
- PipeModule
2330
- ],
2331
- declarations: [
2332
- ProductStockComponent
2333
- ],
2334
- exports: [
2335
- ProductStockComponent
2336
- ]
2337
- },] }
2338
- ];
2339
-
2340
- class ProductDeliveryComponent {
2341
- constructor(_localizePipe, _iOne, _iconCache) {
2342
- this._localizePipe = _localizePipe;
2343
- this._iOne = _iOne;
2344
- this._iconCache = _iconCache;
2345
- this.icon = IconEnum;
2346
- this.iconData = this._iconCache.getIcon(this.icon.Truck);
2347
- }
2348
- set stockAndDelivery(value) {
2349
- if (value) {
2350
- this.deliveryDescription = value.deliveryDescription;
2351
- if (this.deliveryDescription.length > 0 && this.deliveryDescription[0] === ' ') {
2352
- this.deliveryDescription = this._localizePipe.transform('ASK_FOR_INFORMATION');
2353
- }
2354
- }
2355
- }
2356
- ngOnInit() {
2357
- }
2358
- }
2359
- ProductDeliveryComponent.decorators = [
2360
- { type: Component, args: [{
2361
- selector: 'app-product-delivery',
2362
- template: `
2363
- <!--<app-header [label]="'DELIVERY_TIME_PERIOD' | localize"></app-header>-->
2364
- <div class="product-delivery-wrapper">
2365
- <co-icon class="delivery-icon" [iconData]="iconData"></co-icon>
2366
- <div class="product-delivery-fields">
2367
- <div class="pp-default-label" [textContent]="'DELIVERY_TIME_PERIOD' | localize"></div>
2368
- <div class="pp-default-description" [textContent]="deliveryDescription | date:'dd MMMM yyyy'"></div>
2369
- </div>
2370
- </div>
2371
- `,
2372
- 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"]
2373
- },] }
2374
- ];
2375
- ProductDeliveryComponent.ctorParameters = () => [
2376
- { type: LocalizePipe },
2377
- { type: ProductConnectorService },
2378
- { type: IconCacheService }
2379
- ];
2380
- ProductDeliveryComponent.propDecorators = {
2381
- stockAndDelivery: [{ type: Input }]
2382
- };
2383
-
2384
- class ProductDeliveryModule {
2385
- }
2386
- ProductDeliveryModule.decorators = [
2387
- { type: NgModule, args: [{
2388
- imports: [
2389
- CommonModule,
2390
- IconModule,
2391
- PipeModule
2392
- ],
2393
- declarations: [
2394
- ProductDeliveryComponent
2395
- ],
2396
- exports: [
2397
- ProductDeliveryComponent
2398
- ]
2399
- },] }
2400
- ];
2401
-
2402
- class ProductInfoTabsComponent {
2403
- constructor(_appEventService) {
2404
- this._appEventService = _appEventService;
2405
- this.activeTabHeight = 0;
2406
- this.tabs = [];
2407
- this._subs = [];
2408
- this._subs.push(this._appEventService.onUpdateProductInfoTab.subscribe((index) => {
2409
- this.updateTab(index);
2410
- this.tabContent.nativeElement.scrollIntoView({ behavior: 'smooth' });
2411
- }));
2412
- }
2413
- set article(value) {
2414
- if (value) {
2415
- this.articleObject = value;
2416
- this._setupTabs();
2417
- this.updateTab(0);
2418
- }
2419
- }
2420
- ngOnDestroy() {
2421
- this._subs.forEach(s => s.unsubscribe());
2422
- }
2423
- updateTab(tabIndex) {
2424
- this.activeTab = tabIndex;
2425
- this.updateHeight(tabIndex);
2426
- }
2427
- updateHeight(tabIndex) {
2428
- if (this.tabContent && this.tabContent.nativeElement.children.length > 0) {
2429
- if (this.tabContent.nativeElement.children[tabIndex] !== undefined) {
2430
- this.activeTabHeight = this.tabContent.nativeElement.children[tabIndex].offsetHeight;
2431
- }
2432
- }
2433
- }
2434
- _setupTabs() {
2435
- this.tabs.push({ title: 'DESCRIPTION' });
2436
- this.tabs.push({ title: 'FEATURES' });
2437
- if (this.articleObject.documents !== undefined && this.articleObject.documents.length > 0) {
2438
- this.tabs.push({ title: 'DOWNLOADS' });
2439
- }
2440
- if (this.articleObject.symbols !== undefined && this.articleObject.symbols.length > 0) {
2441
- this.tabs.push({ title: 'SYMBOLS' });
2442
- }
2443
- }
2444
- }
2445
- ProductInfoTabsComponent.decorators = [
2446
- { type: Component, args: [{
2447
- selector: 'app-product-info-tabs',
2448
- template: `
2449
- <div class="tab-container">
2450
- <div class="tab-header">
2451
- <button *ngFor="let tab of tabs; let i = index" class="tab-header-button" [class.active]="activeTab === i" [textContent]="tab.title | localize" (click)="updateTab(i)"></button>
2452
- </div>
2453
- <div class="tab-content" #tabContent [style.height.px]="(activeTabHeight > 0 ? activeTabHeight : '')">
2454
- <div class="tab-content-item" *ngFor="let tab of tabs; let i = index" [class.active]="activeTab === i">
2455
- <ng-container *ngIf="i === 0">
2456
- <app-product-additional-info class="" [article]="articleObject" [showLabel]="false"></app-product-additional-info>
2457
- </ng-container>
2458
- <ng-container *ngIf="i === 1">
2459
- <app-product-properties class="" [article]="articleObject" [showLabel]="false"></app-product-properties>
2460
- </ng-container>
2461
- <ng-container *ngIf="i === 2">
2462
- <app-product-documents [showLabel]="false" class="" *ngIf="articleObject?.documents && articleObject?.documents.length > 0" [documents]="articleObject?.documents"></app-product-documents>
2463
- </ng-container>
2464
- <ng-container *ngIf="i === 3">
2465
- <app-product-symbols class="" *ngIf="articleObject?.symbols && articleObject?.symbols.length > 0" [symbols]="articleObject?.symbols"></app-product-symbols>
2466
- </ng-container>
2467
- </div>
2468
- </div>
2469
- </div>
2470
- `,
2471
- styles: ["*:focus{outline:none}:host .tab-header{border-bottom:3px solid #f6f5f4;margin:0 0 30px}:host .tab-header .tab-header-button{background:transparent;border:none;border-bottom:3px solid transparent;line-height:20px;padding:15px 20px;cursor:pointer;font-family:iOneMontserrat;color:#22313c;font-weight:bold;margin:0 0 -3px;opacity:.5}:host .tab-header .tab-header-button:hover{opacity:1}:host .tab-header .tab-header-button.active{opacity:1;border-color:#74b77f}:host .tab-content{padding:0 20px 30px;margin:0 0 20px;border-bottom:2px solid #f6f5f4;transition:all .2s ease-in-out;position:relative}:host .tab-content .tab-content-item{opacity:0;position:absolute;left:0;top:0;visibility:hidden;width:100%}:host .tab-content .tab-content-item.active{opacity:1;visibility:visible;position:static}@media screen and (max-width: 650px){:host .tab-content{padding:0 10px 15px}}@media screen and (max-width: 450px){:host .tab-header{display:flex}:host .tab-header .tab-header-button{width:100%;padding:10px;font-size:11px}}\n"]
2472
- },] }
2473
- ];
2474
- ProductInfoTabsComponent.ctorParameters = () => [
2475
- { type: ProductEventService }
2476
- ];
2477
- ProductInfoTabsComponent.propDecorators = {
2478
- tabContent: [{ type: ViewChild, args: ['tabContent',] }],
2479
- article: [{ type: Input }]
2480
- };
2481
-
2482
- class ProductAdditionalInfoComponent {
2483
- constructor(_sanitizer, _connectorService, _changeDetector) {
2484
- this._sanitizer = _sanitizer;
2485
- this._connectorService = _connectorService;
2486
- this._changeDetector = _changeDetector;
2487
- this.showLabel = false;
2488
- this.textParts = [];
2489
- this._superArticles = new Map();
2490
- }
2491
- set article(value) {
2492
- if (value) {
2493
- this._article = value;
2494
- this._buildInfo().then(() => {
2495
- this._changeDetector.detectChanges();
2496
- });
2497
- }
2498
- }
2499
- get article() {
2500
- return this._article;
2501
- }
2502
- ngOnInit() {
2503
- }
2504
- _getTextsSuperArticle() {
2505
- return __awaiter(this, void 0, void 0, function* () {
2506
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
2507
- const texts = [];
2508
- if (this.article.superArticleNr) {
2509
- let mainArticle;
2510
- if (this._superArticles.has(this.article.superArticleNr)) {
2511
- mainArticle = this._superArticles.get(this.article.superArticleNr);
2512
- }
2513
- else {
2514
- mainArticle = yield this._connectorService.getSuperArticle(this.article.superArticleNr);
2515
- this._superArticles.set(this.article.superArticleNr, mainArticle);
2516
- }
2517
- mainArticle.texts.forEach((txt) => {
2518
- if (BitUtils.IsFullDescription(txt.publication)) {
2519
- const safeTxt = this._sanitizer.sanitize(SecurityContext.HTML, txt.text);
2520
- texts.push(safeTxt);
2521
- }
2522
- });
2523
- resolve(texts);
2524
- }
2525
- else {
2526
- resolve(texts);
2527
- }
2528
- }));
2529
- });
2530
- }
2531
- _prepareArticleTexts() {
2532
- return __awaiter(this, void 0, void 0, function* () {
2533
- const texts = yield this._getTextsSuperArticle();
2534
- if (texts.length > 0) {
2535
- this.textParts.push(...texts);
2536
- }
2537
- if (this.article.texts) {
2538
- this.article.texts.forEach((txt) => {
2539
- if (BitUtils.IsFullDescription(txt.publication)) {
2540
- const safeTxt = this._sanitizer.sanitize(SecurityContext.HTML, txt.text);
2541
- this.textParts.push(safeTxt);
2542
- }
2543
- });
2544
- }
2545
- });
2546
- }
2547
- _buildInfo() {
2548
- return __awaiter(this, void 0, void 0, function* () {
2549
- this.textParts.length = 0;
2550
- yield this._prepareArticleTexts();
2551
- if (this.textParts.length === 0) {
2552
- if (this.article.additionalDescription) {
2553
- this.textParts.push(this.article.additionalDescription);
2554
- }
2555
- else if (this.article.description) {
2556
- this.textParts.push(this.article.description);
2557
- }
2558
- }
2559
- return;
2560
- });
2561
- }
2562
- }
2563
- ProductAdditionalInfoComponent.decorators = [
2564
- { type: Component, args: [{
2565
- selector: 'app-product-additional-info',
2566
- template: `
2567
- <h3 *ngIf="showLabel" [textContent]="'ADDITIONAL_DATA' | localize"></h3>
2568
- <ng-container *ngIf="textParts && textParts.length > 0">
2569
- <div class="additional-info-parts" *ngFor="let text of textParts" [innerHTML]="text"></div>
2570
- </ng-container>
2571
- `,
2572
- styles: [":host{display:block}:host .additional-info-parts{margin-bottom:20px;line-height:190%;color:#22313c;font-size:13px}:host ::ng-deep p{line-height:190%;margin:15px 0}:host ::ng-deep font{font-family:\"iOneMontserrat\"}:host .additional-info-parts>*:first-child{margin-top:0}:host .additional-info-parts>*:last-child{margin-bottom:0}\n"]
2573
- },] }
2574
- ];
2575
- ProductAdditionalInfoComponent.ctorParameters = () => [
2576
- { type: DomSanitizer },
2577
- { type: ProductConnectorService },
2578
- { type: ChangeDetectorRef }
2579
- ];
2580
- ProductAdditionalInfoComponent.propDecorators = {
2581
- article: [{ type: Input }],
2582
- showLabel: [{ type: Input }]
2583
- };
2584
-
2585
- class ProductAdditionalInfoModule {
2586
- }
2587
- ProductAdditionalInfoModule.decorators = [
2588
- { type: NgModule, args: [{
2589
- imports: [
2590
- CommonModule,
2591
- PipeModule
2592
- ],
2593
- declarations: [
2594
- ProductAdditionalInfoComponent
2595
- ],
2596
- exports: [
2597
- ProductAdditionalInfoComponent
2598
- ]
2599
- },] }
2600
- ];
2601
-
2602
- const propertyMap = new Map([
2603
- ['articleNr', 'ARTICLE_NUMBER'],
2604
- ['catExtra', 'CATEGORY'],
2605
- ['catType', 'CATEGORY_TYPE'],
2606
- ['description', 'DESCRIPTION'],
2607
- ['material', 'MATERIAL'],
2608
- ['title', 'TITLE'],
2609
- ['turnOverGroup', 'TURNOVERGROUP'],
2610
- ['height', 'HEIGHT'],
2611
- ['width', 'WIDTH']
2612
- ]);
2613
- class ProductPropertiesComponent {
2614
- constructor() {
2615
- this.showLabel = false;
2616
- this.properties = [];
2617
- }
2618
- set article(value) {
2619
- this._article = value;
2620
- this._prepareProperties();
2621
- }
2622
- get article() {
2623
- return this._article;
2624
- }
2625
- ngOnInit() {
2626
- }
2627
- _prepareProperties() {
2628
- this.properties.length = 0;
2629
- if (!this._article) {
2630
- return;
2631
- }
2632
- propertyMap.forEach((value, key) => {
2633
- if (this.article.hasOwnProperty(key)) {
2634
- this.properties.push({ key: value, value: this.article[key] });
2635
- }
2636
- });
2637
- }
2638
- }
2639
- ProductPropertiesComponent.decorators = [
2640
- { type: Component, args: [{
2641
- selector: 'app-product-properties',
2642
- template: `
2643
- <div class="article-properties-wrapper">
2644
- <h3 *ngIf="showLabel" [textContent]="'PROPERTIES' | localize"></h3>
2645
- <ng-container *ngFor="let property of properties">
2646
- <div class="article-property">
2647
- <div class="article-property-key" [textContent]="property.key | localize"></div>
2648
- <div class="article-property-value" [textContent]="property.value"></div>
2649
- </div>
2650
- </ng-container>
2651
- </div>
2652
- `,
2653
- styles: [":host{display:block}.article-properties-wrapper{display:flex;flex-direction:column}.article-property{display:flex;flex-direction:row;border-bottom:1px solid #f6f5f4;padding:11px 0;font-size:13px}.article-property:first-child{border-top:1px solid #f6f5f4}.article-property-key{flex-basis:200px;flex-shrink:0;color:#5b6875}@media screen and (max-width: 450px){.article-property-key{flex-basis:130px}}\n"]
2654
- },] }
2655
- ];
2656
- ProductPropertiesComponent.ctorParameters = () => [];
2657
- ProductPropertiesComponent.propDecorators = {
2658
- article: [{ type: Input }],
2659
- showLabel: [{ type: Input }]
2660
- };
2661
-
2662
- class ProductPropertiesModule {
2663
- }
2664
- ProductPropertiesModule.decorators = [
2665
- { type: NgModule, args: [{
2666
- imports: [
2667
- CommonModule,
2668
- PipeModule
2669
- ],
2670
- declarations: [
2671
- ProductPropertiesComponent
2672
- ],
2673
- exports: [
2674
- ProductPropertiesComponent
2675
- ]
2676
- },] }
2677
- ];
2678
-
2679
- class ProductDocumentsComponent {
2680
- constructor(iconCache) {
2681
- this.iconCache = iconCache;
2682
- this.icon = IconEnum;
2683
- this.showLabel = false;
2684
- this.documents = [];
2685
- }
2686
- }
2687
- ProductDocumentsComponent.decorators = [
2688
- { type: Component, args: [{
2689
- selector: 'app-product-documents',
2690
- template: `
2691
- <app-header *ngIf="showLabel" [label]="'DOCUMENTS' | localize" [amount]="documents?.length"></app-header>
2692
- <div *ngIf="documents && documents.length > 0">
2693
- <co-files-upload [documents]="documents" [canAdd]="false" readonly></co-files-upload>
2694
- </div>
2695
- `,
2696
- styles: [":host{display:block}::ng-deep co-files-upload{flex-direction:column!important;width:100%}::ng-deep co-file-upload{margin:0!important;border-bottom:1px solid #f6f5f4}::ng-deep co-file-upload:first-child{border-top:1px solid #f6f5f4}::ng-deep co-files-upload .files-upload-wrapper{flex-direction:column!important;width:100%}::ng-deep co-file-upload co-tile{max-width:100%!important;width:100%;position:relative}::ng-deep co-file-upload co-tile:hover{box-shadow:none!important}::ng-deep co-file-upload co-tile:hover .tile-extra-bottom{background-color:#f6f5f4!important}::ng-deep co-file-upload co-tile .tile-wrapper{position:absolute!important;left:0;top:0;width:100%;height:100%;z-index:2;opacity:0;box-sizing:border-box}::ng-deep co-file-upload co-tile .tile-wrapper .image{position:absolute!important;left:0;top:0;width:100%!important;height:100%!important;cursor:pointer}::ng-deep co-file-upload co-tile .tile-extra-bottom{outline:none!important;border:none!important;background:transparent!important;line-height:20px;padding:20px 20px 20px 60px!important;margin:0!important;background:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D viewBox%3D%220 0 50 50%22%0D version%3D%221.1%22%0D id%3D%22svg8%22%0D sodipodi%3Adocname%3D%22download.svg%22%0D inkscape%3Aversion%3D%220.92.4 (5da689c313%2C 2019-01-14)%22%3E%0D %3Cmetadata%0D id%3D%22metadata14%22%3E%0D %3Crdf%3ARDF%3E%0D %3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%0D %3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%0D %3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%0D %3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%0D %3C%2Fcc%3AWork%3E%0D %3C%2Frdf%3ARDF%3E%0D %3C%2Fmetadata%3E%0D %3Cdefs%0D id%3D%22defs12%22 %2F%3E%0D %3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221920%22%0D inkscape%3Awindow-height%3D%221017%22%0D id%3D%22namedview10%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%226.675088%22%0D inkscape%3Acx%3D%22-14.056273%22%0D inkscape%3Acy%3D%2229.806579%22%0D inkscape%3Awindow-x%3D%22-8%22%0D inkscape%3Awindow-y%3D%22-8%22%0D inkscape%3Awindow-maximized%3D%221%22%0D inkscape%3Acurrent-layer%3D%22svg8%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g62%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g64%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g66%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g68%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g70%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g72%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g74%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g76%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g78%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g80%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g82%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g84%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g86%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g88%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05570714%2C0%2C0%2C0.05570648%2C10.763%2C10.859394)%22%0D id%3D%22g90%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g6-0%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cg%0D id%3D%22g4-9%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cpath%0D inkscape%3Aconnector-curvature%3D%220%22%0D d%3D%22m 498.966%2C339.946 c -7.197%2C0 -13.034%2C5.837 -13.034%2C13.034 v 49.804 c 0%2C28.747 -23.388%2C52.135 -52.135%2C52.135 H 78.203 c -28.747%2C0 -52.135%2C-23.388 -52.135%2C-52.135 V 352.98 c 0%2C-7.197 -5.835%2C-13.034 -13.034%2C-13.034 C 5.835%2C339.946 0%2C345.782 0%2C352.98 v 49.804 c 0%2C43.121 35.082%2C78.203 78.203%2C78.203 h 355.594 c 43.121%2C0 78.203%2C-35.082 78.203%2C-78.203 V 352.98 c 0%2C-7.198 -5.835%2C-13.034 -13.034%2C-13.034 z%22%0D id%3D%22path2%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g12-0%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cg%0D id%3D%22g10-8%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cpath%0D inkscape%3Aconnector-curvature%3D%220%22%0D d%3D%22M 419.833%2C391.3 H 92.167 c -7.197%2C0 -13.034%2C5.837 -13.034%2C13.034 0%2C7.197 5.835%2C13.034 13.034%2C13.034 h 327.665 c 7.199%2C0 13.034%2C-5.835 13.034%2C-13.034 0%2C-7.197 -5.835%2C-13.034 -13.033%2C-13.034 z%22%0D id%3D%22path8-3%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g18-4%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cg%0D id%3D%22g16-7%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22%3E%0D %3Cpath%0D inkscape%3Aconnector-curvature%3D%220%22%0D d%3D%22m 387.919%2C207.93 c -4.795%2C-5.367 -13.034%2C-5.834 -18.404%2C-1.038 L 269.033%2C296.657 V 44.048 c 0%2C-7.197 -5.835%2C-13.034 -13.034%2C-13.034 -7.197%2C0 -13.034%2C5.835 -13.034%2C13.034 V 296.657 L 142.483%2C206.893 c -5.367%2C-4.796 -13.607%2C-4.328 -18.404%2C1.038 -4.794%2C5.369 -4.331%2C13.609 1.037%2C18.404 l 109.174%2C97.527 c 6.187%2C5.529 13.946%2C8.292 21.708%2C8.292 7.759%2C0 15.519%2C-2.763 21.708%2C-8.289 l 109.174%2C-97.53 c 5.37%2C-4.798 5.834%2C-13.038 1.039%2C-18.405 z%22%0D id%3D%22path14-9%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g20%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g22-9%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g24-3%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g26%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g28-4%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g30-2%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g32%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g34-2%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g36-1%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g38%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g40-6%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g42-4%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g44%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g46-7%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D %3Cg%0D transform%3D%22matrix(0.05555739%2C0%2C0%2C0.05555739%2C10.739964%2C11.357401)%22%0D id%3D%22g48-3%22%0D style%3D%22fill%3A%23484f60%3Bfill-opacity%3A1%22 %2F%3E%0D%3C%2Fsvg%3E%0D\") no-repeat left 6px center / 36px auto!important}::ng-deep co-file-upload co-tile .tile-extra-bottom .main{padding:0!important}\n"]
2697
- },] }
2698
- ];
2699
- ProductDocumentsComponent.ctorParameters = () => [
2700
- { type: IconCacheService }
2701
- ];
2702
- ProductDocumentsComponent.propDecorators = {
2703
- showLabel: [{ type: Input }],
2704
- documents: [{ type: Input }]
2705
- };
2706
-
2707
- class ProductDocumentModule {
2708
- }
2709
- ProductDocumentModule.decorators = [
2710
- { type: NgModule, args: [{
2711
- imports: [
2712
- CommonModule,
2713
- HeaderModule,
2714
- PipeModule,
2715
- FilesUploadModule
2716
- ],
2717
- declarations: [
2718
- ProductDocumentsComponent
2719
- ],
2720
- exports: [
2721
- ProductDocumentsComponent
2722
- ]
2723
- },] }
2724
- ];
2725
-
2726
- class ProductSymbolsComponent {
2727
- constructor() {
2728
- this.symbolStrings = [];
2729
- }
2730
- set symbols(value) {
2731
- this._symbols = value;
2732
- if (this._symbols && this._symbols.hasOwnProperty('fontCode')) {
2733
- this._className = this._symbols['fontCode'] === 'VLOER' ? 'floor' : (this._className === 'WAS' ? 'ginetex' : '');
2734
- }
2735
- if (this._symbols && this._symbols.hasOwnProperty('symbolString')) {
2736
- for (let i = 0; i < this._symbols['symbolString'].length; i++) {
2737
- this.symbolStrings.push(this._symbols['symbolString'][i]);
2738
- }
2739
- }
2740
- }
2741
- get symbols() {
2742
- return this._symbols;
2743
- }
2744
- ngOnInit() {
2745
- }
2746
- }
2747
- ProductSymbolsComponent.decorators = [
2748
- { type: Component, args: [{
2749
- selector: 'app-product-symbols',
2750
- template: `
2751
- <div *ngIf="symbols && symbols.length > 0">
2752
- <app-header [label]="'SYMBOLS' | localize" [amount]="symbols?.length"></app-header>
2753
- <co-scroll-container>
2754
- <co-tile small noImagePlaceholder *ngFor="let symbol of symbolStrings">
2755
- <ng-container tile-over-image>
2756
- <div class="symbol" [textContent]="symbol"></div>
2757
- </ng-container>
2758
- <ng-container tile-extra-bottom-content>
2759
- <div class="symbol-name" [textContent]="'Wat moet hier?'"></div>
2760
- </ng-container>
2761
- </co-tile>
2762
- </co-scroll-container>
2763
- </div>
2764
- `,
2765
- styles: [":host{display:block}:host.floor .symbol{font-family:iOneFloorsymbols}:host.ginetex .symbol{font-family:iOneGinetexsymbols}.symbol{font-size:100px}\n"]
2766
- },] }
2767
- ];
2768
- ProductSymbolsComponent.ctorParameters = () => [];
2769
- ProductSymbolsComponent.propDecorators = {
2770
- symbols: [{ type: Input }],
2771
- _className: [{ type: HostBinding, args: ['class',] }]
2772
- };
2773
-
2774
- class ProductSymbolsModule {
2775
- }
2776
- ProductSymbolsModule.decorators = [
2777
- { type: NgModule, args: [{
2778
- imports: [
2779
- CommonModule,
2780
- HeaderModule,
2781
- PipeModule,
2782
- ScrollContainerModule,
2783
- TileModule
2784
- ],
2785
- declarations: [
2786
- ProductSymbolsComponent
2787
- ],
2788
- exports: [
2789
- ProductSymbolsComponent
2790
- ]
2791
- },] }
2792
- ];
2793
-
2794
- class ProductInfoTabsModule {
2795
- }
2796
- ProductInfoTabsModule.decorators = [
2797
- { type: NgModule, args: [{
2798
- imports: [
2799
- CommonModule,
2800
- PipeModule,
2801
- ProductAdditionalInfoModule,
2802
- ProductPropertiesModule,
2803
- ProductDocumentModule,
2804
- ProductSymbolsModule
2805
- ],
2806
- declarations: [
2807
- ProductInfoTabsComponent
2808
- ],
2809
- exports: [
2810
- ProductInfoTabsComponent
2811
- ]
2812
- },] }
2813
- ];
2814
-
2815
- class ProductDialogComponent {
2816
- constructor(iconCache, _sanitizer, _productConnectorService, _productConnectorAdapterService, _appEventService) {
2817
- this.iconCache = iconCache;
2818
- this._sanitizer = _sanitizer;
2819
- this._productConnectorService = _productConnectorService;
2820
- this._productConnectorAdapterService = _productConnectorAdapterService;
2821
- this._appEventService = _appEventService;
2822
- this.icon = IconEnum;
2823
- this.closeRelatedPopup = new EventEmitter();
2824
- this.type = SelectorType;
2825
- }
2826
- showClass() {
2827
- return true;
2828
- }
2829
- ngOnInit() {
2830
- }
2831
- closeCatalog() {
2832
- // need to emit close
2833
- this.closeRelatedPopup.emit(false);
2834
- }
2835
- }
2836
- ProductDialogComponent.decorators = [
2837
- { type: Component, args: [{
2838
- selector: 'co-product-dialog',
2839
- template: `
2840
- <div class="product-dialog-wrap">
2841
- <div class="product-dialog-container">
2842
- <div class="container-header">
2843
- <div class="header-info">
2844
- <h3>
2845
- <co-icon [iconData]="iconCache.getIcon(icon.LinkSimpleRegular)"
2846
- (click)="closeCatalog()"></co-icon>{{ 'SUGGESTION' | localize }} <b>{{ mainArticle.name }}</b> ({{ mainArticle.articleNr }})
2847
- </h3>
2848
- </div>
2849
- <div class="close-icon" (click)="closeCatalog()">
2850
- <co-icon class="fullscreen-button"
2851
- [iconData]="iconCache.getIcon(icon.CrossSkinny)"
2852
- (click)="closeCatalog()"></co-icon>
2853
- </div>
2854
- </div>
2855
- <div class="related-product-container">
2856
- <app-product-related
2857
- class="no-padding"
2858
- *ngIf="articles"
2859
- [articles]="articles">
2860
- </app-product-related>
2861
- </div>
2862
- <div class="close-button-container">
2863
- <button class="ok-button" (click)="closeCatalog()">
2864
- <co-icon [iconData]="iconCache.getIcon(icon.SaveSkinny)"
2865
- (click)="closeCatalog()"></co-icon>
2866
- </button>
2867
- <button class="close-button" (click)="closeCatalog()">
2868
- <co-icon [iconData]="iconCache.getIcon(icon.CrossSkinny)"
2869
- (click)="closeCatalog()"></co-icon>
2870
- </button>
2871
- </div>
2872
- </div>
2873
- </div>
2874
- `,
2875
- styles: [".product-dialog-wrap{display:flex;justify-content:center;position:absolute;z-index:800;top:0}.product-dialog-wrap .product-dialog-container{background:#fff;min-width:75vw;max-height:90vh;border:1px solid #F8F8F8}.product-dialog-wrap .product-dialog-container .container-header{display:flex;justify-content:space-between;border-bottom:1px solid #F8F8F8;padding:25px;box-sizing:border-box;align-items:center}.product-dialog-wrap .product-dialog-container .container-header .header-info h3{display:flex;align-items:center}.product-dialog-wrap .product-dialog-container .container-header .header-info h3 co-icon{margin-right:10px}.product-dialog-wrap .product-dialog-container .container-header .close-icon{cursor:pointer}.product-dialog-wrap .product-dialog-container .close-button-container{display:flex;justify-content:center;padding:10px}.product-dialog-wrap .product-dialog-container .close-button-container button{cursor:pointer;border:none;color:#fff;padding:8px;box-shadow:0 3px 3px #0000004d;height:auto;width:auto;margin:0 3px;border-radius:3px}.product-dialog-wrap .product-dialog-container .close-button-container button ::ng-deep co-icon{height:20px;width:20px}.product-dialog-wrap .product-dialog-container .close-button-container button ::ng-deep co-icon svg{fill:#fff}.product-dialog-wrap .product-dialog-container .close-button-container button ::ng-deep co-icon svg polygon{fill:#fff}.product-dialog-wrap .product-dialog-container .close-button-container .ok-button{background:#1a73e8}.product-dialog-wrap .product-dialog-container .close-button-container .close-button{background:#475060}::ng-deep .content-wrapper{width:auto!important}\n"]
2876
- },] }
2877
- ];
2878
- ProductDialogComponent.ctorParameters = () => [
2879
- { type: IconCacheService },
2880
- { type: DomSanitizer },
2881
- { type: ProductConnectorService },
2882
- { type: ProductConnectorAdapterService },
2883
- { type: ProductEventService }
2884
- ];
2885
- ProductDialogComponent.propDecorators = {
2886
- refType: [{ type: Input }],
2887
- mainArticle: [{ type: Input }],
2888
- articles: [{ type: Input }],
2889
- closeRelatedPopup: [{ type: Output }],
2890
- showClass: [{ type: HostBinding, args: ['class.co-product-dialog',] }]
2891
- };
2892
-
2893
- class ProductDialogModule {
2894
- }
2895
- ProductDialogModule.decorators = [
2896
- { type: NgModule, args: [{
2897
- imports: [
2898
- CommonModule,
2899
- PipeModule,
2900
- ProductRelatedModule,
2901
- IconModule
2902
- ],
2903
- declarations: [
2904
- ProductDialogComponent
2905
- ],
2906
- exports: [
2907
- ProductDialogComponent
2908
- ]
2909
- },] }
2910
- ];
2911
-
2912
- class VectorObject {
2913
- }
2914
- class RenderParameters {
2915
- }
2916
- class RenderCarouselComponent {
2917
- constructor(iconCache, _appEventService, _changeDetector) {
2918
- this.iconCache = iconCache;
2919
- this._appEventService = _appEventService;
2920
- this._changeDetector = _changeDetector;
2921
- this.showRefresh = false;
2922
- this.resizing = false;
2923
- this.showLoader = true;
2924
- this.renderedImageLoaded = false;
2925
- // For now we will just use mock data
2926
- this.renderAngles = [0, -45, -90, -135, -180, -225, -270, -315];
2927
- this.currentRenderAngleIndex = 0;
2928
- this.icon = IconEnum;
2929
- this._subs = [];
2930
- this._subs.push(this._appEventService.onReadyToRender.subscribe((readyToRender) => {
2931
- if (readyToRender) {
2932
- this.showLoader = true;
2933
- this._createNewRender();
2934
- }
2935
- }), this._appEventService.onRenderStarted.subscribe(() => {
2936
- this.showLoader = true;
2937
- this._changeDetector.detectChanges();
2938
- }), this._appEventService.onRenderImageReceived.subscribe((image) => {
2939
- this.renderedImage = image;
2940
- this.showLoader = false;
2941
- this._changeDetector.detectChanges();
2942
- }));
2943
- }
2944
- handleWindowResize() {
2945
- this.resizing = true;
2946
- clearTimeout(this._resizeTimer);
2947
- this._resizeTimer = setTimeout(() => {
2948
- this.resizing = false;
2949
- }, 200);
2950
- }
2951
- gotoNextSlide() {
2952
- this.showLoader = true;
2953
- this.currentRenderAngleIndex = (this.currentRenderAngleIndex + 1) % this.renderAngles.length;
2954
- this._createNewRender();
2955
- }
2956
- gotoPrevSlide() {
2957
- this.showLoader = true;
2958
- this.currentRenderAngleIndex = (this.currentRenderAngleIndex - 1 + this.renderAngles.length) % this.renderAngles.length;
2959
- this._createNewRender();
2960
- }
2961
- ngOnDestroy() {
2962
- this.carousel = undefined;
2963
- this._subs.forEach(s => s.unsubscribe());
2964
- }
2965
- ngOnChanges() {
2966
- this.renderedImageLoaded = false;
2967
- }
2968
- onRenderLoaded() {
2969
- this.renderedImageLoaded = true;
2970
- }
2971
- _getRenderSettings() {
2972
- const settings = new RenderParameters();
2973
- const rotation = new VectorObject();
2974
- rotation.x = 0;
2975
- rotation.y = this.renderAngles[this.currentRenderAngleIndex];
2976
- rotation.z = 0;
2977
- settings.objectRotation = rotation;
2978
- settings.margin = 15;
2979
- return settings;
2980
- }
2981
- _createNewRender() {
2982
- this.showLoader = true;
2983
- this.renderedImageLoaded = false;
2984
- const renderParams = this._getRenderSettings();
2985
- this._appEventService.onGetRenderForRenderCarousel.next(renderParams);
2986
- }
2987
- }
2988
- RenderCarouselComponent.decorators = [
2989
- { type: Component, args: [{
2990
- selector: 'app-render-carousel',
2991
- template: `
2992
- <div id="product_page_carousel">
2993
- <div id="product_page_carousel_render_items">
2994
- <co-loader [isShown]="showLoader"></co-loader>
2995
- <div #carousel class="inner-carousel">
2996
- <div class="inner-carousel-render">
2997
- <img
2998
- [src]="renderedImage"
2999
- [class.loaded]="renderedImageLoaded"
3000
- (load)="onRenderLoaded()"
3001
- class="fade-image"
3002
- alt="">
3003
- </div>
3004
- <div class="carousel-scroller-layer">
3005
- <div class="carousel-item-scroller prev" (click)="gotoPrevSlide()">
3006
- <co-icon [iconData]="iconCache.getIcon(icon.ArrowPointLeft)"></co-icon>
3007
- </div>
3008
- <div class="carousel-item-scroller next" (click)="gotoNextSlide()">
3009
- <co-icon [iconData]="iconCache.getIcon(icon.ArrowPointRight)"></co-icon>
3010
- </div>
3011
- </div>
3012
- </div>
3013
- </div>
3014
- </div>
3015
- `,
3016
- changeDetection: ChangeDetectionStrategy.OnPush,
3017
- 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;-o-object-fit:contain;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:rgba(255,255,255,.4);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"]
3018
- },] }
3019
- ];
3020
- RenderCarouselComponent.ctorParameters = () => [
3021
- { type: IconCacheService },
3022
- { type: ProductEventService },
3023
- { type: ChangeDetectorRef }
3024
- ];
3025
- RenderCarouselComponent.propDecorators = {
3026
- carousel: [{ type: ViewChild, args: ['carousel', { read: ElementRef },] }],
3027
- showRefresh: [{ type: Input }],
3028
- article: [{ type: Input }],
3029
- handleWindowResize: [{ type: HostListener, args: ['window:resize',] }],
3030
- gotoNextSlide: [{ type: HostListener, args: ['swipeleft',] }],
3031
- gotoPrevSlide: [{ type: HostListener, args: ['swiperight',] }],
3032
- resizing: [{ type: HostBinding, args: ['class.resizing',] }]
3033
- };
3034
-
3035
- class RenderCarouselModule {
3036
- }
3037
- RenderCarouselModule.decorators = [
3038
- { type: NgModule, args: [{
3039
- imports: [
3040
- CommonModule,
3041
- LoaderModule,
3042
- ScrollContainerModule,
3043
- IconModule,
3044
- IconCollapseHandleModule
3045
- ],
3046
- declarations: [
3047
- RenderCarouselComponent
3048
- ],
3049
- exports: [
3050
- RenderCarouselComponent
3051
- ]
3052
- },] }
3053
- ];
3054
-
3055
- class ProductPageModule {
3056
- }
3057
- ProductPageModule.decorators = [
3058
- { type: NgModule, args: [{
3059
- imports: [
3060
- CommonModule,
3061
- ProductSelectorTypeModule,
3062
- ImageCarouselModule,
3063
- IconModule,
3064
- ProductDescriptionModule,
3065
- ProductAdditionalDescriptionModule,
3066
- ProductPriceModule,
3067
- ProductAddtocartModule,
3068
- ProductRelatedModule,
3069
- ProductStockModule,
3070
- ProductDeliveryModule,
3071
- ProductInfoTabsModule,
3072
- PipeModule,
3073
- ProductDialogModule,
3074
- LoaderModule$1,
3075
- RenderCarouselModule
3076
- ],
3077
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
3078
- declarations: [
3079
- ProductPageComponent
3080
- ],
3081
- exports: [
3082
- ProductPageComponent
3083
- ]
3084
- },] }
3085
- ];
3086
-
3087
- class ProductScriptLoaderService {
3088
- constructor(platformId) {
3089
- this.platformId = platformId;
3090
- this._scriptsOrLinksElements = [];
3091
- }
3092
- loadScript(url, renderer) {
3093
- return new Promise((resolve, reject) => {
3094
- if (!isPlatformBrowser(this.platformId)) {
3095
- reject('Not in browser environment');
3096
- return;
3097
- }
3098
- const existingScript = document.getElementById(url);
3099
- if (existingScript) {
3100
- resolve(); // Script already loaded
3101
- return;
3102
- }
3103
- const script = renderer.createElement('script');
3104
- script.id = url;
3105
- script.src = url;
3106
- script.type = 'text/javascript';
3107
- script.async = true;
3108
- script.onload = () => resolve();
3109
- script.onerror = (error) => reject(`Error loading script: ${url}`);
3110
- renderer.appendChild(document.head, script);
3111
- this._scriptsOrLinksElements.push(script);
3112
- });
3113
- }
3114
- unloadScripts(renderer) {
3115
- for (let i = this._scriptsOrLinksElements.length - 1; i >= 0; i--) {
3116
- renderer.removeChild(document.head, this._scriptsOrLinksElements[i]);
3117
- this._scriptsOrLinksElements.pop();
3118
- }
3119
- }
3120
- addStyleSheet(url, renderer) {
3121
- return new Promise((resolve, reject) => {
3122
- if (!isPlatformBrowser(this.platformId)) {
3123
- reject('Not in browser environment');
3124
- return;
3125
- }
3126
- const existingStyleSheet = document.getElementById(url);
3127
- if (existingStyleSheet) {
3128
- resolve(); // Script already loaded
3129
- return;
3130
- }
3131
- const link = renderer.createElement('link');
3132
- link.id = url;
3133
- link.href = url;
3134
- link.rel = 'stylesheet';
3135
- link.onload = () => resolve();
3136
- link.onerror = (error) => reject(`Error loading styleSheet: ${url}`);
3137
- renderer.appendChild(document.head, link);
3138
- this._scriptsOrLinksElements.push(link);
3139
- });
3140
- }
3141
- }
3142
- ProductScriptLoaderService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProductScriptLoaderService_Factory() { return new ProductScriptLoaderService(i0.ɵɵinject(i0.PLATFORM_ID)); }, token: ProductScriptLoaderService, providedIn: "root" });
3143
- ProductScriptLoaderService.decorators = [
3144
- { type: Injectable, args: [{
3145
- providedIn: 'root'
3146
- },] }
3147
- ];
3148
- ProductScriptLoaderService.ctorParameters = () => [
3149
- { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
3150
- ];
3151
-
3152
- class ProductHdComponent {
3153
- constructor(_scriptLoader, _renderer) {
3154
- this._scriptLoader = _scriptLoader;
3155
- this._renderer = _renderer;
3156
- this.variant = '';
3157
- this.urlParams = [];
3158
- this.configuratorFinished = new EventEmitter();
3159
- this.configurationError = new EventEmitter();
3160
- this.showClass = true;
3161
- }
3162
- set content(child) {
3163
- this.hdeConfigurator = child;
3164
- this._prepareAttributes();
3165
- }
3166
- set sku(value) {
3167
- this._sku = value;
3168
- this._prepareAttributes();
3169
- }
3170
- get sku() {
3171
- return this._sku;
3172
- }
3173
- ngOnDestroy() {
3174
- this._scriptLoader.unloadScripts(this._renderer);
3175
- }
3176
- handleConfigurationFinished(event) {
3177
- if (event.detail.variant && typeof event.detail.variant === 'string') {
3178
- this.configuratorFinished.emit(event.detail.variant);
3179
- }
3180
- else {
3181
- this.configuratorFinished.emit(this.variant);
3182
- }
3183
- }
3184
- handleError(event) {
3185
- this.configurationError.emit(event.detail.status);
3186
- }
3187
- _prepareAttributes() {
3188
- if (this.hdeConfigurator && this.hdeConfigurator.nativeElement && this.urlParams && this.token && (this.sku || this.variant)) {
3189
- //for local testing please turn off for packing and publishing!
3190
- //this.prepareTestingUrlparams();
3191
- this._prepareConfiguratorUrls();
3192
- this.hdeConfigurator.nativeElement.setAttribute('bearerToken', this.token);
3193
- if (this._sku) {
3194
- this.hdeConfigurator.nativeElement.setAttribute('data-productId', this._sku);
3195
- }
3196
- if (this.variant) {
3197
- this.hdeConfigurator.nativeElement.setAttribute('data-productVariantId', this.variant);
3198
- }
3199
- this._loadTheScripts();
3200
- }
3201
- }
3202
- //set necessary references to configurator.
3203
- _prepareConfiguratorUrls() {
3204
- //fetch the setting from the external source
3205
- let apiurl = this.urlParams.find((item) => item.key === 'apiurl').value;
3206
- let productVariantCommandApiUrl = this.urlParams.find((item) => item.key === 'productVariantCommandApiUrl').value;
3207
- let productVariantQueryApiUrl = this.urlParams.find((item) => item.key === 'productVariantQueryApiUrl').value;
3208
- let localizationApiUrl = this.urlParams.find((item) => item.key === 'localizationApiUrl').value;
3209
- //apply to configurator
3210
- this.hdeConfigurator.nativeElement.setAttribute('apiurl', apiurl);
3211
- this.hdeConfigurator.nativeElement.setAttribute('productVariantCommandApiUrl', productVariantCommandApiUrl);
3212
- this.hdeConfigurator.nativeElement.setAttribute('productVariantQueryApiUrl', productVariantQueryApiUrl);
3213
- this.hdeConfigurator.nativeElement.setAttribute('localizationApiUrl', localizationApiUrl);
3214
- }
3215
- // load external scripts into client
3216
- _loadTheScripts() {
3217
- return __awaiter(this, void 0, void 0, function* () {
3218
- let headerUrls = this.urlParams.find((item) => item.key === 'header').value;
3219
- let headerArray = headerUrls.replace(/\s+/g, '').split(',');
3220
- for (let i = 0; i < headerArray.length; i++) {
3221
- yield this._scriptLoader.loadScript(headerArray[i], this._renderer).catch((error) => console.error(error));
3222
- }
3223
- let styles = this.urlParams.find((item) => item.key === 'stylesheet').value;
3224
- let stylesArray = styles.replace(/\s+/g, '').split(',');
3225
- for (let j = 0; j < stylesArray.length; j++) {
3226
- yield this._scriptLoader.addStyleSheet(stylesArray[j], this._renderer);
3227
- }
3228
- //for local testing please turn off for packing and publishing!
3229
- /*const scripts: string[] = [
3230
- // hard-coded for now, should come from the external source
3231
- 'https://hde-cdn.azureedge.net/libs/components/Configurator/1.0.33/polyfills.js',
3232
- 'https://hde-cdn.azureedge.net/libs/components/Configurator/1.0.33/runtime.js',
3233
- 'https://hde-cdn.azureedge.net/libs/components/Configurator/1.0.33/main.js'
3234
- ]
3235
- for (let i = 0; i < scripts.length; i++) {
3236
- await this._scriptLoader.loadScript(scripts[i], this._renderer).catch((error) => console.error(error));
3237
- }
3238
- await this._scriptLoader.addStyleSheet('https://hde-cdn.azureedge.net/libs/components/Configurator/1.0.33/styles.css', this._renderer);*/
3239
- });
3240
- }
3241
- }
3242
- ProductHdComponent.decorators = [
3243
- { type: Component, args: [{
3244
- selector: 'co-product-hd',
3245
- template: `
3246
- <hde-configurator #hdeConfigurator
3247
- language="nl"
3248
- localizationFileExtension=".json"
3249
- (configurationFinished)="handleConfigurationFinished($event)"
3250
- (configurationFailed)="handleError($event)"
3251
- >
3252
- <hde-progress-bar></hde-progress-bar>
3253
- </hde-configurator>
3254
- `,
3255
- encapsulation: ViewEncapsulation.None
3256
- },] }
3257
- ];
3258
- ProductHdComponent.ctorParameters = () => [
3259
- { type: ProductScriptLoaderService },
3260
- { type: Renderer2 }
3261
- ];
3262
- ProductHdComponent.propDecorators = {
3263
- content: [{ type: ViewChild, args: ['hdeConfigurator', { read: ElementRef },] }],
3264
- sku: [{ type: Input }],
3265
- token: [{ type: Input }],
3266
- variant: [{ type: Input }],
3267
- urlParams: [{ type: Input }],
3268
- configuratorFinished: [{ type: Output }],
3269
- configurationError: [{ type: Output }],
3270
- showClass: [{ type: HostBinding, args: ['class.co-product-hd',] }]
3271
- };
3272
-
3273
- class ProductHdModule {
3274
- }
3275
- ProductHdModule.decorators = [
3276
- { type: NgModule, args: [{
3277
- imports: [
3278
- CommonModule
3279
- ],
3280
- declarations: [
3281
- ProductHdComponent
3282
- ],
3283
- schemas: [
3284
- CUSTOM_ELEMENTS_SCHEMA,
3285
- NO_ERRORS_SCHEMA
3286
- ],
3287
- exports: [
3288
- ProductHdComponent
3289
- ]
3290
- },] }
3291
- ];
3292
-
3293
- class ProductExternalSourceComponent {
3294
- constructor(_sanitizer, _productConnectorService, _appEventService) {
3295
- this._sanitizer = _sanitizer;
3296
- this._productConnectorService = _productConnectorService;
3297
- this._appEventService = _appEventService;
3298
- this.addToCart = new EventEmitter();
3299
- this.addToQuote = new EventEmitter();
3300
- this.alternativeClick = new EventEmitter();
3301
- this.configuratorFinished = new EventEmitter();
3302
- this.showProduct = false;
3303
- this.showConfigurator = false;
3304
- this.showSource = false;
3305
- this.loaded = false;
3306
- this.externalSettings = {};
3307
- this.token = ""; //= "eyJhbGciOiJSUzI1NiIsImtpZCI6IkYxOThERkVEOEUwQTQ1MzY3M0M1MUE2Rjk1QUVDQzU3RTM0NjM4RkRSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6IjhaamY3WTRLUlRaenhScHZsYTdNVi1OR09QMCJ9.eyJuYmYiOjE3MzIxOTkyOTUsImV4cCI6MTczMjIwMjg5NSwiaXNzIjoiaHR0cHM6Ly9ibXNpZGVudGl0eS1hY2NlcHRhbmNlLmF6dXJld2Vic2l0ZXMubmV0IiwiYXVkIjpbImNhdGFsb2dxdWVyeWFwaSIsImNvbmZpZ3VyYXRvcmFwaSIsInByb2R1Y3R2YXJpYW50Y29tbWFuZGFwaSIsInByb2R1Y3R2YXJpYW50cXVlcnlhcGkiXSwiY2xpZW50X2lkIjoiaW1wZXJzb25hdGlvbi5jbGllbnQiLCJzdWIiOiIwOTMwZDI4Mi05NGU4LTQ5MGEtOGI2NC1mYTk1YmIyYzE1ODIiLCJhdXRoX3RpbWUiOjE3MzIxOTkyOTUsImlkcCI6ImxvY2FsIiwiZW52aXJvbm1lbnQiOiJNU0wiLCJzZWxsZXIiOiJTRTAwMDA5NiIsInNlbGxlcmd1aWQiOiIxMDk1MWJjNS1hZmMzLTQ1MGEtNmVkMS0wOGQ4NDNlNmE5OTQiLCJwZXJtaXNzaW9uIjpbInNhbGVzLmV4cG9ydHRlbXBsYXRlcy5yZWFkIiwiZG9jdW1lbnRsaWJyYXJ5LnRhZy5yZWFkIiwiZG9jdW1lbnRsaWJyYXJ5LmRvY3VtZW50LnJlYWQiLCJkb2N1bWVudGxpYnJhcnkudGFnZ3JvdXAucmVhZCIsInNhbGVzLm9yZGVyLndyaXRlIiwic2FsZXMuY3VzdG9tZXIucmVhZCIsInNhbGVzLm9yZGVyLmRlbGl2ZXJ5YWRkcmVzcy53cml0ZSIsInNlcnZpY2UucmVxdWVzdC5yZWFkIiwiY2F0YWxvZy50YWcucmVhZCIsInNhbGVzLm9yZGVyLnJlYWQiLCJzYWxlcy5jdXN0b21lci53cml0ZSIsInJlcXVlc3Rmb3JxdW90ZS53cml0ZSIsInNhbGVzLm9yZGVyLmJvb2siLCJyZXF1ZXN0Zm9ycXVvdGUucmVhZCIsInNhbGVzLmxlYWQucmVhZCIsInB1cmNoYXNlLm9yZGVyLnJlYWQiLCJzYWxlcy5xdW90ZS5yZWFkIiwic2FsZXMucXVvdGUud3JpdGUiLCJjYXRhbG9nLml0ZW0ucmVhZCIsInNhbGVzLmxlYWQud3JpdGUiLCJzZXJ2aWNlLnJlcXVlc3Quc3VibWl0Iiwic2FsZXMub3JkZXIuZGVsaXZlcnlhZGRyZXNzLnJlYWQiLCJwdXJjaGFzZS5vcmRlci53cml0ZSIsInB1cmNoYXNlLm9yZGVyLnByaWNlcy53cml0ZSIsInB1cmNoYXNlLm9yZGVyLnByaWNlcy5yZWFkIiwic2VydmljZS5yZXF1ZXN0LndyaXRlIiwiY2F0YWxvZy5jYXRhbG9nLnJlYWQiLCJjYXRhbG9nLmNhdGFsb2cud3JpdGUiLCJjYXRhbG9nLmN1cnJlbmN5LnJlYWQiLCJjYXRhbG9nLmN1cnJlbmN5LndyaXRlIiwiY2F0YWxvZy5pdGVtLndyaXRlIiwiY2F0YWxvZy5sb2NhbGl6YXRpb24ucmVhZCIsImNhdGFsb2cubG9jYWxpemF0aW9uLndyaXRlIiwiY2F0YWxvZy5wcm9kdWN0LnJlYWQiLCJjYXRhbG9nLnByb2R1Y3Qud3JpdGUiLCJjYXRhbG9nLnByb2R1Y3RzZXR0aW5nLnJlYWQiLCJjYXRhbG9nLnByb2R1Y3RzZXR0aW5nLndyaXRlIiwiY2F0YWxvZy5zZWxsZXIucmVhZCIsImNhdGFsb2cuc2VsbGVyLndyaXRlIiwiY2F0YWxvZy50YWcud3JpdGUiLCJjYXRhbG9nLnVvbS5yZWFkIiwiY2F0YWxvZy51b20ud3JpdGUiLCJjYXRhbG9nLnZhdGNhdGVnb3J5LnJlYWQiLCJjYXRhbG9nLnZhdGNhdGVnb3J5LndyaXRlIiwiY2F0YWxvZy52ZW5kb3IucmVhZCIsImNhdGFsb2cudmVuZG9yLndyaXRlIiwicHVyY2hhc2Uuc2VsbGVyLnJlYWQiLCJwdXJjaGFzZS5zZWxsZXIud3JpdGUiLCJjYXRhbG9nLmFydGljbGUucmVhZCIsImNhdGFsb2cuYXJ0aWNsZS53cml0ZSIsInNhbGVzLnF1b3RlLmxpbmVzLnJlYWQiLCJzYWxlcy5xdW90ZS5saW5lcy53cml0ZSIsInNhbGVzLnNlbGxlci5yZWFkIiwic2FsZXMuc2VsbGVyLndyaXRlIiwiYWNjb3VudGluZy52ZW5kb3JpbnZvaWNlLnJlYWQiLCJpZGVudGl0eS51c2VyLnJlYWQiLCJpZGVudGl0eS51c2VyLndyaXRlIiwiaWRlbnRpdHkucm9sZS5yZWFkIiwic2VsbGVyLnByb2R1Y3RwcmljZS5zZXR0aW5ncy5yZWFkIiwic2VsbGVyLnByb2R1Y3RwcmljZS5zZXR0aW5ncy53cml0ZSIsImNvbmZpZ3VyYXRvci5wdXJjaGFzZXByaWNlLnJlYWQiLCJzdG9jay5mYWJyaWMucmVhZCJdLCJuYW1lIjoiUm9iaW4iLCJmYW1pbHlfbmFtZSI6ImRlIFdpbnRlciAoQ29saWpuLUlUKSIsInJvbGUiOlsic2VsbGVyIiwiZGVhbGVyX21hbmFnZXIiXSwiaWF0IjoxNzMyMTk5Mjk1LCJzY29wZSI6WyJjYXRhbG9ncXVlcnlhcGkiLCJjb25maWd1cmF0b3JhcGkiLCJwcm9kdWN0dmFyaWFudGNvbW1hbmRhcGkiLCJwcm9kdWN0dmFyaWFudHF1ZXJ5YXBpIl0sImFtciI6WyJpbXBlcnNvbmF0aW9uIl19.rbguVPnkXXDzsM6QKgXulhrF41jIjCuGDV13ig1GC8MewLCJ7wA038OSwT26sx2mCexjvuGYt45YScfPwfTkDy3ErPmHRods64X1dJWZnf-23NTP2iI32K_1vMZH5GOGbMzuFtbKAFQv4hgFAxoyWqFVWyJvuOtQcWyZStROyPHwjAnpnj-x1cVQpOhbO-kQUFvy_VUrPpF3aYVCcO2cFirQTXR6kxSGcYGGcsPY-_eiAd93UdG2EM6xLAocDLaFV72CQI6XEs0WQG1f4SqvH52v3OTkgWBLgYV35gpyIe0-2nazGL0R8pTNuDqrOb7OGmuTRMoTIiRi67-wTxx8cQ";
3308
- this.variant = "";
3309
- this.urlParams = [];
3310
- this._subs = [];
3311
- }
3312
- set externalSource(value) {
3313
- this._externalSource = value;
3314
- this.loaded = false;
3315
- this._prepareExternalSource();
3316
- }
3317
- get externalSource() {
3318
- return this._externalSource;
3319
- }
3320
- set externalCatalogStartupInfo(value) {
3321
- if (value) {
3322
- this._externalCatalogStartupInfo = value;
3323
- this.externalSource = value.externalSource;
3324
- this.loaded = false;
3325
- this._prepareExternalSource();
3326
- }
3327
- }
3328
- get externalCatalogStartupInfo() {
3329
- return this._externalCatalogStartupInfo;
3330
- }
3331
- showClass() {
3332
- return true;
3333
- }
3334
- ngOnInit() {
3335
- this._subs.push(this._appEventService.onAddToCart.subscribe((data) => {
3336
- this.addToCart.next({
3337
- article: data.article,
3338
- quantity: data.quantity,
3339
- catalogDefinition: this.catalogDefinition,
3340
- externalSource: this._externalSource
3341
- });
3342
- }), this._appEventService.onAddToQuote.subscribe(json => {
3343
- this.addToQuote.next({
3344
- article: json,
3345
- quantity: 1,
3346
- catalogDefinition: this.catalogDefinition,
3347
- externalSource: this._externalSource
3348
- });
3349
- }), this._appEventService.onAlternativeClick.subscribe(article => this.alternativeClick.next(article)));
3350
- }
3351
- ngOnDestroy() {
3352
- this._subs.forEach(s => s.unsubscribe());
3353
- }
3354
- handleConfigurationFinished(variantString) {
3355
- this.configuratorFinished.emit(variantString);
3356
- }
3357
- _prepareExternalSource() {
3358
- return __awaiter(this, void 0, void 0, function* () {
3359
- if (!this._externalSource) {
3360
- return;
3361
- }
3362
- this.externalUrl = undefined;
3363
- this.externalSettings = {};
3364
- if (this.externalSource.type === 'CATF') {
3365
- yield this._prepareCatFarm();
3366
- }
3367
- else if (this.externalSource.type === 'HTDL') {
3368
- this._prepareConfigurator();
3369
- }
3370
- else {
3371
- this._prepareSource();
3372
- }
3373
- });
3374
- }
3375
- _prepareCatFarm() {
3376
- return __awaiter(this, void 0, void 0, function* () {
3377
- // get bundle settings from external source
3378
- const bundleSettings = yield this._productConnectorService.getProductBundleSettings(this.externalSource.url, parseInt(this.externalSource.schema, 0));
3379
- this.externalSettings = JSON.parse(bundleSettings);
3380
- if (this.options) {
3381
- this.externalSettings.options = this.options;
3382
- }
3383
- // this.externalSettings.assetPath = "https://cdn1.colijn-it.nl/content43";
3384
- // this.externalSettings.threeDAssetPath = "https://cdn1.colijn-it.nl/content43";
3385
- if (this.externalSource.username && this.externalSource.password) {
3386
- this.externalSettings.useLoginEncryption = true;
3387
- this.externalSettings.username = this.externalSource.username;
3388
- this.externalSettings.password = this.externalSource.password;
3389
- }
3390
- // finally show the catalog
3391
- this.switchToProduct();
3392
- this.loaded = true;
3393
- });
3394
- }
3395
- _prepareConfigurator() {
3396
- if (this.externalCatalogStartupInfo) {
3397
- this.token = this.externalCatalogStartupInfo.token;
3398
- this.sku = this.externalCatalogStartupInfo.externalGoodId;
3399
- this.variant = this.externalCatalogStartupInfo.flattenedGoodId;
3400
- this.urlParams = this.externalCatalogStartupInfo.externalSource.parameters;
3401
- this.switchToConfigurator();
3402
- this.loaded = true;
3403
- }
3404
- }
3405
- _prepareSource() {
3406
- this.externalUrl = this.externalSource.url;
3407
- this.safeUrl = this._sanitizer.bypassSecurityTrustResourceUrl(this.externalUrl);
3408
- this.switchToSource();
3409
- this.loaded = true;
3410
- }
3411
- switchToProduct() {
3412
- this.showProduct = true;
3413
- this.showConfigurator = false;
3414
- this.showSource = false;
3415
- }
3416
- switchToConfigurator() {
3417
- this.showProduct = false;
3418
- this.showConfigurator = true;
3419
- this.showSource = false;
3420
- }
3421
- switchToSource() {
3422
- this.showProduct = false;
3423
- this.showConfigurator = false;
3424
- this.showSource = true;
3425
- }
3426
- }
3427
- ProductExternalSourceComponent.decorators = [
3428
- { type: Component, args: [{
3429
- selector: 'co-product-external-source',
3430
- template: `
3431
- <ng-container *ngIf="loaded">
3432
- <ng-container *ngIf="showProduct">
3433
- <app-product-page
3434
- [sku]="sku"
3435
- [settings]="externalSettings"
3436
- [externalSource]="externalSource"
3437
- ></app-product-page>
3438
- </ng-container>
3439
- <ng-container *ngIf="showSource">
3440
- <iframe width="100%" height="100%" [src]="safeUrl" frameborder="0" allowfullscreen></iframe>
3441
- </ng-container>
3442
- <ng-container *ngIf="showConfigurator">
3443
- <co-product-hd width="100%" height="100%"
3444
- [sku]="sku"
3445
- [variant]="variant"
3446
- [token]="token"
3447
- [urlParams]="urlParams"
3448
- (configuratorFinished)="handleConfigurationFinished($event)"></co-product-hd>
3449
- </ng-container>
3450
- </ng-container>
3451
- `,
3452
- providers: [
3453
- ProductSettingsService,
3454
- ProductConnectorAdapterService,
3455
- ProductConnectorService
3456
- ],
3457
- encapsulation: ViewEncapsulation.None
3458
- },] }
3459
- ];
3460
- ProductExternalSourceComponent.ctorParameters = () => [
3461
- { type: DomSanitizer },
3462
- { type: ProductConnectorService },
3463
- { type: ProductEventService }
3464
- ];
3465
- ProductExternalSourceComponent.propDecorators = {
3466
- sku: [{ type: Input }],
3467
- catalogDefinition: [{ type: Input }],
3468
- externalSource: [{ type: Input }],
3469
- externalCatalogStartupInfo: [{ type: Input }],
3470
- options: [{ type: Input }],
3471
- addToCart: [{ type: Output }],
3472
- addToQuote: [{ type: Output }],
3473
- alternativeClick: [{ type: Output }],
3474
- configuratorFinished: [{ type: Output }],
3475
- showClass: [{ type: HostBinding, args: ['class.co-product-external-source',] }]
3476
- };
3477
-
3478
- class ProductExternalSourceModule {
3479
- }
3480
- ProductExternalSourceModule.decorators = [
3481
- { type: NgModule, args: [{
3482
- imports: [
3483
- CommonModule,
3484
- ProductPageModule,
3485
- ProductHdModule
3486
- ],
3487
- declarations: [
3488
- ProductExternalSourceComponent
3489
- ],
3490
- exports: [
3491
- ProductExternalSourceComponent
3492
- ]
3493
- },] }
3494
- ];
3495
-
3496
- class IoneProductModule {
3497
- }
3498
- IoneProductModule.decorators = [
3499
- { type: NgModule, args: [{
3500
- imports: [
3501
- // BrowserAnimationsModule,
3502
- CommonModule,
3503
- ProductPageModule,
3504
- ProductHdModule,
3505
- ProductExternalSourceModule,
3506
- ButtonModule$1
3507
- ],
3508
- declarations: [
3509
- IoneProductComponent
3510
- ],
3511
- exports: [
3512
- IoneProductComponent
3513
- ],
3514
- schemas: [
3515
- CUSTOM_ELEMENTS_SCHEMA,
3516
- NO_ERRORS_SCHEMA
3517
- ],
3518
- bootstrap: [
3519
- IoneProductComponent
3520
- ]
3521
- },] }
3522
- ];
3523
-
3524
- /**
3525
- * Generated bundle index. Do not edit.
3526
- */
3527
-
3528
- export { IoneProductComponent, IoneProductModule, ProductConnectorAdapterService, ProductConnectorService, ProductEventService, ProductExternalSourceComponent, ProductExternalSourceModule, ProductSettingsService, Version, ProductPageModule as ɵa, ProductSelectorTypeModule as ɵb, ProductInfoTabsModule as ɵba, ProductAdditionalInfoModule as ɵbb, ProductAdditionalInfoComponent as ɵbc, ProductPropertiesModule as ɵbd, ProductPropertiesComponent as ɵbe, ProductDocumentModule as ɵbf, ProductDocumentsComponent as ɵbg, ProductSymbolsModule as ɵbh, ProductSymbolsComponent as ɵbi, ProductInfoTabsComponent as ɵbj, ProductDialogModule as ɵbk, ProductDialogComponent as ɵbl, RenderCarouselModule as ɵbm, RenderCarouselComponent as ɵbn, ProductPageComponent as ɵbo, ProductHdModule as ɵbp, ProductHdComponent as ɵbq, ProductScriptLoaderService as ɵbr, LocalStorageService as ɵbs, PipeModule as ɵc, LocalizePipe as ɵd, DictionaryService as ɵe, JsonUtilsService as ɵf, ProductSelectorTypeComponent as ɵg, IconCacheService as ɵh, ImageCarouselModule as ɵi, ImageCarouselComponent as ɵj, ProductDescriptionModule as ɵk, ProductDescriptionComponent as ɵl, ProductAdditionalDescriptionModule as ɵm, ProductAdditionalDescriptionComponent as ɵn, ProductPriceModule as ɵo, ProductPriceComponent as ɵp, ProductAddtocartModule as ɵq, ProductAddtocartComponent as ɵr, ProductRelatedModule as ɵs, HeaderModule as ɵt, HeaderComponent as ɵu, ProductRelatedComponent as ɵv, ProductStockModule as ɵw, ProductStockComponent as ɵx, ProductDeliveryModule as ɵy, ProductDeliveryComponent as ɵz };
3529
- //# sourceMappingURL=colijnit-product.js.map