@frontastic/common 2.33.2 → 2.33.6

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.
package/CHANGELOG.md CHANGED
@@ -1,88 +1,100 @@
1
- # common Changelog
2
1
 
3
- ## `2.33.2` (2022-05-05)
2
+ ## Version 2.33.6 (2022-05-24)
3
+
4
+ * fix: correctly fetch cloudinary URLs again
5
+ ## Version 2.33.5 (2022-05-19)
6
+
7
+ * fix: don’t use ?? in libraries/common
8
+ ## Version 2.33.4 (2022-05-17)
9
+
10
+ * fix: used correct format on Changelog for catwalk and common
11
+ ## Version 2.33.3 (2022-05-12)
12
+
13
+ * Prevent enum fields without values field to exist
14
+
15
+ ## Version 2.33.2 (2022-05-05)
4
16
 
5
17
  * fix(FP-1934): Pagination previous/nextCursor set to null on count 0.
6
18
 
7
- ## `2.33.1` (2022-04-21)
19
+ ## Version 2.33.1 (2022-04-21)
8
20
 
9
21
  * chore: re-run release process
10
22
 
11
- ## `2.33.0` (2022-04-21)
23
+ ## Version 2.33.0 (2022-04-21)
12
24
 
13
25
  * fix: add a missing @required statements
14
26
  * feat: enhance TypeScript map types
15
27
  * fix: correct type hints for translatable text
16
28
 
17
- ## `2.33.0` (2022-04-21)
29
+ ## Version 2.33.0 (2022-04-21)
18
30
 
19
31
  * fix: add a missing @required statements
20
32
  * feat: enhance TypeScript map types
21
33
  * fix: correct type hints for translatable text
22
34
 
23
- ## `2.32.0` (2022-04-13)
35
+ ## Version 2.32.0 (2022-04-13)
24
36
 
25
37
  * fix: rehused cart on api test order
26
38
  * fix: added salutaion to api test address.
27
39
  * feat(FP-840): included cart rawApiData when placing order in Shopware
28
40
 
29
- ## `2.31.2` (2022-04-11)
41
+ ## Version 2.31.2 (2022-04-11)
30
42
 
31
43
  * fix: Categories with same name are returned
32
44
 
33
- ## `2.31.1` (2022-04-08)
45
+ ## Version 2.31.1 (2022-04-08)
34
46
 
35
47
  * fix: prevent bc break on commercetools CartApi
36
48
 
37
- ## `2.31.0` (2022-04-07)
49
+ ## Version 2.31.0 (2022-04-07)
38
50
 
39
51
  * feat(FP-1794): extracted logic to validate cart status before checkout
40
52
 
41
- ## `2.30.1` (2022-04-07)
53
+ ## Version 2.30.1 (2022-04-07)
42
54
 
43
55
  * fix(FP-1794): consider only single successful payment as payment completed
44
56
  * fix(FP-1794): moved cart readines validation to isReadyForCheckout
45
57
  * fix(FP-1794): validated if cart is completed
46
58
 
47
- ## `2.30.0` (2022-04-05)
59
+ ## Version 2.30.0 (2022-04-05)
48
60
 
49
61
  * feat: allow field type dataSource in Classic as well
50
62
 
51
- ## `2.29.0` (2022-03-30)
63
+ ## Version 2.29.0 (2022-03-30)
52
64
 
53
65
  * feat(FP-1647): included machine region map in CustomerService
54
66
  * feat(FP-1647): implemented region selector base on customer config
55
67
 
56
- ## `2.28.2` (2022-03-29)
68
+ ## Version 2.28.2 (2022-03-29)
57
69
 
58
70
  * fix(FP-1694): checked mapped orders on default deprecated decorator
59
71
 
60
- ## `2.28.1` (2022-03-28)
72
+ ## Version 2.28.1 (2022-03-28)
61
73
 
62
74
  * fix(FP-1694): checked mapped orders on default decorators
63
75
 
64
- ## `2.28.0` (2022-03-22)
76
+ ## Version 2.28.0 (2022-03-22)
65
77
 
66
78
  * refactor(FP-1122): Make logic for handling single-attribute sorting the same as multi-attribute
67
79
  * feat(FP-1122): Add sort by custom attribute functionality to Algolia integration
68
80
 
69
- ## `2.27.1` (2022-03-17)
81
+ ## Version 2.27.1 (2022-03-17)
70
82
 
71
83
  * fix: fix issue from studio-deployment-branch
72
84
 
73
- ## `2.27.0` (2022-03-15)
85
+ ## Version 2.27.0 (2022-03-15)
74
86
 
75
87
  * feat(FP-1486): upgrade Shopify version to latest stable version 2022-01
76
88
 
77
- ## `2.26.0` (2022-03-10)
89
+ ## Version 2.26.0 (2022-03-10)
78
90
 
79
91
  * feat: add GraphCMS client factory
80
92
 
81
- ## `2.25.4` (2022-03-07)
93
+ ## Version 2.25.4 (2022-03-07)
82
94
 
83
95
  * misc: allowed ramsey/uuid library version ^4 as dependency
84
96
 
85
- ## `2.25.3` (2022-03-02)
97
+ ## Version 2.25.3 (2022-03-02)
86
98
 
87
99
  * fix(api-hub): replace content api with dummy for nextjs projects
88
100
  * fix(api-hub): replace wishlist api with dummy for nextjs
@@ -92,16 +104,16 @@
92
104
  * fix(api-hub): add dummy for AccountApi
93
105
  * fix(api-hub): fix syntax and add parameter to factory config
94
106
 
95
- ## `2.25.2` (2022-02-15)
107
+ ## Version 2.25.2 (2022-02-15)
96
108
 
97
109
  * fix(FP-775): Minor refactor, import of SprykerAddress
98
110
  * fix(FP-755): Fix Spryker address
99
111
 
100
- ## `2.25.1` (2022-01-27)
112
+ ## Version 2.25.1 (2022-01-27)
101
113
 
102
114
  * fix: if there's no filter chosen - the error reappears
103
115
 
104
- ## `2.25.0` (2022-01-24)
116
+ ## Version 2.25.0 (2022-01-24)
105
117
 
106
118
  * fix(FP-838): improved error handling on parse locator for Shopware
107
119
  * feat(FP-838): prevent update email, shipping address, or billing address on Shopware CartApi
@@ -115,17 +127,17 @@
115
127
  * feat(FP-838): upgrade add, update, and remove item to cart on Shopware CartApi
116
128
  * feat(FP-838): upgrade get anonymous cart and get cart by id on Shopware
117
129
 
118
- ## `2.24.0` (2022-01-05)
130
+ ## Version 2.24.0 (2022-01-05)
119
131
 
120
132
  * feat(FP-324): Include User-Agent Frontastic as part of API requests
121
133
 
122
- ## `2.23.0` (2021-12-16)
134
+ ## Version 2.23.0 (2021-12-16)
123
135
 
124
136
  * feat: Created method for CustomDataSourceValidation in the CustomDataSourceService
125
137
  * feat: Store the stream type for stream fields
126
138
  * feat: Introduced a special field configuration for stream fields
127
139
 
128
- ## `2.22.0` (2021-12-02)
140
+ ## Version 2.22.0 (2021-12-02)
129
141
 
130
142
  * feat(FP-1193): included rawApiImput on getProduct
131
143
  * feat(FP-581): refresh account after update address on Shopify
@@ -134,52 +146,51 @@
134
146
  * fix(FP-1193): added url schema simbols
135
147
  * feat!(FP-1193): upgrade and fix shopify version to 2021-10
136
148
 
137
- ## `2.21.1` (2021-11-30)
149
+ ## Version 2.21.1 (2021-11-30)
138
150
 
139
151
  * fix: make product price nullable in Algolia integration
140
152
 
141
- ## `2.21.0` (2021-10-26)
153
+ ## Version 2.21.0 (2021-10-26)
142
154
 
143
155
  * !feat(FP-646): implemented traceability strategy adding a correlation-id to all requests and responses
144
156
  * fix: Nested groups were not visited correctly in ConfigurationSchema.
145
157
 
146
- ## `2.20.1` (2021-10-21)
158
+ ## Version 2.20.1 (2021-10-21)
147
159
 
148
160
  * fix: return a 400 json response on type error of dynamic pages
149
161
 
150
- ## `2.20.0` (2021-10-11)
151
-
162
+ ## Version 2.20.0 (2021-10-11)
152
163
 
153
164
  * Catwalk version update
154
165
 
155
- ## `2.19.3` (2021-10-07)
166
+ ## Version 2.19.3 (2021-10-07)
156
167
 
157
168
  * fix(api-hub): disable deprecation notice in prod
158
169
  * fix(api-hub): only output deprecation notice in non-prod-env
159
170
  * fix: Keep old previewUrl config working properly
160
171
  * feat: Allow for different view and endpoint URLs for preview
161
172
 
162
- ## `2.19.2` (2021-09-23)
173
+ ## Version 2.19.2 (2021-09-23)
163
174
 
164
175
  * Always use plain json_decode for decoding CT responses
165
176
 
166
- ## `2.19.1` (2021-09-09)
177
+ ## Version 2.19.1 (2021-09-09)
167
178
 
168
179
  * fix(FP-980): validated result to catch no active carts in Shopify
169
180
 
170
- ## `2.19.0` (2021-09-08)
181
+ ## Version 2.19.0 (2021-09-08)
171
182
 
172
183
  * fix: Keep unknown field values in completed configuration fields.
173
184
 
174
- ## `2.18.2` (2021-09-04)
185
+ ## Version 2.18.2 (2021-09-04)
175
186
 
176
187
  * fix: Handle documentary fields properly.
177
188
 
178
- ## `2.18.1` (2021-09-03)
189
+ ## Version 2.18.1 (2021-09-03)
179
190
 
180
- * chore: bumped version required of frontastic/catwalk to 1.17
191
+ * chore: bumped version required of frontastic/catwalk to 1.17
181
192
 
182
- ## `2.18.0` (2021-09-03)
193
+ ## Version 2.18.0 (2021-09-03)
183
194
 
184
195
  * feat(FP-935): Submit current field path to visitors.
185
196
  * feat(fp-935): Fixed potential construction issue through `new static()`
@@ -198,16 +209,16 @@
198
209
  * feat(fp-935): Migrated more tests to code lang independent format.
199
210
  * feat(fp-935): Extracted first config tests into code independant format.
200
211
 
201
- ## `2.17.2` (2021-08-26)
212
+ ## Version 2.17.2 (2021-08-26)
202
213
 
203
214
  * fix(FP-932): modified array key validation
204
215
  * feat(FP-932): mapped missing variant properties in Algolia
205
216
 
206
- ## `2.17.1` (2021-08-26)
217
+ ## Version 2.17.1 (2021-08-26)
207
218
 
208
219
  * chore: bumped version required of frontastic/catwalk to 1.16
209
220
 
210
- ## `2.17.0` (2021-08-26)
221
+ ## Version 2.17.0 (2021-08-26)
211
222
 
212
223
  * feat(FP-932): get default language from project config in Algolia
213
224
  * feat(FP-932): set algolia library as suggested on composer
@@ -229,15 +240,15 @@
229
240
  * feat(FP-932): use key label structure for Attributes values
230
241
  * feat(FP-932): implemented getSearchAttributes for Algolia
231
242
 
232
- ## `2.16.2` (2021-08-19)
243
+ ## Version 2.16.2 (2021-08-19)
233
244
 
234
245
  * Revert "fix: adds frontasticBasicAuthPassword to exclude list"
235
246
 
236
- ## `2.16.1` (2021-08-17)
247
+ ## Version 2.16.1 (2021-08-17)
237
248
 
238
249
  * fix: adds frontasticBasicAuthPassword to exclude list
239
250
 
240
- ## `2.16.0` (2021-08-04)
251
+ ## Version 2.16.0 (2021-08-04)
241
252
 
242
253
  * feat(FP-839): used integer for price filters
243
254
  * feat(FP-839): included price filter and facets on Shopware
@@ -248,11 +259,11 @@
248
259
  * feat(FP-839): get group from common groupId field
249
260
  * fix(FP-839): reused client request for both queries
250
261
 
251
- ## `2.15.0` (2021-07-29)
262
+ ## Version 2.15.0 (2021-07-29)
252
263
 
253
264
  * feat: enhancing tideways logging for GraphCMS adding Cache status header as well as RequestId
254
265
 
255
- ## `2.14.0` (2021-07-20)
266
+ ## Version 2.14.0 (2021-07-20)
256
267
 
257
268
  * feat(FP-837): set API test credential for Shopware 6.4
258
269
  * feat(FP-837): used php comparation for API version on Shopware
@@ -266,28 +277,28 @@
266
277
  * feat(FP-837): handle elements and data fiels on Account and Project mappers on Shopware
267
278
  * feat(FP-837): upgraded project config endpoints to store-api on Shopware
268
279
 
269
- ## `2.13.4` (2021-07-13)
280
+ ## Version 2.13.4 (2021-07-13)
270
281
 
271
282
  * fix: strip API version on Shopware store-api
272
283
  * chore: replaced authToken by apiToken on Shopify
273
284
  * chore: replaced authToken by apiToken on Spryker
274
285
 
275
- ## `2.13.3` (2021-07-08)
286
+ ## Version 2.13.3 (2021-07-08)
276
287
 
277
288
  * fix(FP-830): replaced authToken by apiToken on Shopware
278
289
  * feat: deprecated authToken in favor of apiToken.
279
290
  * fix: specify api version on Shopware
280
291
 
281
- ## `2.13.2` (2021-07-06)
292
+ ## Version 2.13.2 (2021-07-06)
282
293
 
283
294
  * fix(FP-830): keep authToken on refresh account for Shopware
284
295
 
285
- ## `2.13.1` (2021-07-01)
296
+ ## Version 2.13.1 (2021-07-01)
286
297
 
287
298
  * refactor: set Spryker cart test credentials as generic
288
299
  * fix: Allow empty local to be parsed on Spryker
289
300
 
290
- ## `2.13.0` (2021-06-23)
301
+ ## Version 2.13.0 (2021-06-23)
291
302
 
292
303
  * chore(FT-731): removed unnecessary array_merge
293
304
  * feat(FP-731): login customer after reset account password on Shopware
@@ -297,36 +308,36 @@
297
308
  * feat(FP-731): refresed account base on email on Shopware
298
309
  * feat(FP-731): implemented account creation and confirmation on Shopware
299
310
 
300
- ## `2.12.0` (2021-06-15)
311
+ ## Version 2.12.0 (2021-06-15)
301
312
 
302
313
  * feat: Added Ganesha based curcuit breaker for our HTTP client stack
303
314
 
304
- ## `2.11.10` (2021-06-14)
315
+ ## Version 2.11.10 (2021-06-14)
305
316
 
306
317
  * chore: increased symfony minor version
307
318
  * fix: implemented AccountApi::getSalutations on Shopware
308
319
 
309
- ## `2.11.9` (2021-05-28)
320
+ ## Version 2.11.9 (2021-05-28)
310
321
 
311
322
  * fix(FP-728): keeped original and masterData as dangerousInner on Commercetools
312
323
 
313
- ## `2.11.8` (2021-05-28)
324
+ ## Version 2.11.8 (2021-05-28)
314
325
 
315
326
  * fix: validated relations before map them in Spryker
316
327
  * fix: remove scope from client call
317
328
  * fix: implemented CartApi::setShippingMethod on Shopware integration
318
329
 
319
- ## `2.11.7` (2021-05-18)
330
+ ## Version 2.11.7 (2021-05-18)
320
331
 
321
332
  * fix(FP-709): moved cart validation to Shopware integration
322
333
  * fix(FP-709): included addresses and email into cart on Spryker
323
334
  * fix(FP-709): moved cart validation to Commercetools integration
324
335
 
325
- ## `2.11.6` (2021-05-13)
336
+ ## Version 2.11.6 (2021-05-13)
326
337
 
327
338
  * fix(FP-691): returned empty response if content by id is query on GraphCMS
328
339
 
329
- ## `2.11.5` (2021-05-11)
340
+ ## Version 2.11.5 (2021-05-11)
330
341
 
331
342
  * fix(FP-695): validated empty nodes before access data in Shopify
332
343
  * feat(backstage): latest terminology typo fix
@@ -335,16 +346,16 @@
335
346
  * feat(backstage): latest copy updates
336
347
  * feat: tastics term in studio
337
348
 
338
- ## `2.11.4` (2021-04-29)
349
+ ## Version 2.11.4 (2021-04-29)
339
350
 
340
351
  * fix(FP-624): moved variant SKU method to Shopify integration
341
352
  * fix(FP-624): validated product returned when filtered by SKUs in Shopify
342
353
 
343
- ## `2.11.3` (2021-04-29)
354
+ ## Version 2.11.3 (2021-04-29)
344
355
 
345
356
  * misc: Tests for CustomerService.
346
357
 
347
- ## `2.11.2` (2021-04-27)
358
+ ## Version 2.11.2 (2021-04-27)
348
359
 
349
360
  * fix(FP-645): included host and status code to Contentful logs
350
361
  * fix(FP-645): decorated Contentful client to enhance logger
@@ -352,93 +363,93 @@
352
363
  * fix(FP-645): set default timeout and logger on Contentful client
353
364
  * fix: Find version manually
354
365
 
355
- ## `2.11.1` (2021-04-22)
366
+ ## Version 2.11.1 (2021-04-22)
356
367
 
357
368
  * fix: Fix the /api/version SystemController to use version parameter bag
358
369
  * fix: Fix the /api/version SystemController parameter bag
359
370
 
360
- ## `2.11.0` (2021-04-20)
371
+ ## Version 2.11.0 (2021-04-20)
361
372
 
362
373
  * feat(FP-617): exposed authorization url on project config for commercetools
363
374
 
364
- ## `2.10.13` (2021-04-13)
375
+ ## Version 2.10.13 (2021-04-13)
365
376
 
366
377
  * fix: fixed unit test for Content
367
378
  * fix(606): included Content slug on GraphCMS
368
379
  * fix(606): validate content attribute key before fetch
369
380
  * misc: included API test to place order for logged in user
370
381
 
371
- ## `2.10.12` (2021-04-08)
382
+ ## Version 2.10.12 (2021-04-08)
372
383
 
373
384
  * fix(FP-567): handle client exceptions and skip Union types
374
385
  * fix(FP-363): Shopify API, use existing account with token and remove returned address on create
375
386
  * fix(FP-363): API to add address on customer create and unit tests for create update adjustment
376
387
 
377
- ## `2.10.11` (2021-03-30)
388
+ ## Version 2.10.11 (2021-03-30)
378
389
 
379
390
  * fix: Remove phpcpd from all projects
380
391
 
381
- ## `2.10.10` (2021-03-23)
392
+ ## Version 2.10.10 (2021-03-23)
382
393
 
383
394
  * fix(FP-96): migrated and updated implementation for shipping methods on Shopware
384
395
  * fix(FP-84): used alias on category facet and set missing definition
385
396
  * fix: Use proper AccessDeniedException
386
397
 
387
- ## `2.10.9` (2021-03-10)
398
+ ## Version 2.10.9 (2021-03-10)
388
399
 
389
400
  * fix(FP-458): used config from engine and include query as part of Result
390
401
  * chore(FP-458): removed unused max offset
391
402
  * fix(FP-458): exposed max offset in project.yml and validated before query
392
403
  * fix(FP-458): created maximum offset and validate Product queries againts it on Commercetools
393
404
 
394
- ## `2.10.8` (2021-03-09)
405
+ ## Version 2.10.8 (2021-03-09)
395
406
 
396
407
  * chore(FP-447): improved documentation and log messages
397
408
  * fix(FP-447): throw and handle Cart not active exception
398
409
  * fix(FP-447): get existing cart for logged in customer in Shopify
399
410
 
400
- ## `2.10.7` (2021-03-04)
411
+ ## Version 2.10.7 (2021-03-04)
401
412
 
402
413
  * fix(FP-447): cart regenerated if is already completed on Shopify
403
414
  * fix: validate version and category index before map
404
415
 
405
- ## `2.10.6` (2021-03-02)
416
+ ## Version 2.10.6 (2021-03-02)
406
417
 
407
418
  * fix(FP-249): added address on account creation for Commercetools
408
419
 
409
- ## `2.10.5` (2021-03-01)
420
+ ## Version 2.10.5 (2021-03-01)
410
421
 
411
422
  * fix(FP-395): implemented build query for next page and calculate last (#623)
412
423
  * fix: fix E_NOTICE on product not found
413
424
 
414
- ## `2.10.4` (2021-02-25)
425
+ ## Version 2.10.4 (2021-02-25)
415
426
 
416
427
  * fix: stan errors
417
428
 
418
- ## `2.10.3` (2021-02-23)
429
+ ## Version 2.10.3 (2021-02-23)
419
430
 
420
431
  * fix(FP-389): included discounts on LineItems and mapped data for Commercetools
421
432
  * fix: removed decoded exceptions in favor of fallback on php native decoder
422
433
 
423
- ## `2.10.2` (2021-02-19)
434
+ ## Version 2.10.2 (2021-02-19)
424
435
 
425
436
  * fix: removed cartApi extra argument from BaseImplementationAdapterV2
426
437
 
427
- ## `2.10.1` (2021-02-19)
438
+ ## Version 2.10.1 (2021-02-19)
428
439
 
429
440
  * fix(FP-364): fixed unit test inlcuding dangerousInnerShippingMethod to expected data
430
441
  * fix(FP-364): extended shipping method query and map localization zone
431
442
 
432
- ## `2.10.0` (2021-02-18)
443
+ ## Version 2.10.0 (2021-02-18)
433
444
 
434
445
  * feat(FP-81): included documentation of rawApiInput fields from Commercetools on Wishlist
435
446
  * fix(FP-335): extended Wishlist from ApiDataObject
436
447
  * feat(FP-81): included documentation of rawApiInput fields from Commercetools
437
448
  * Feat: JavaScript based Decorators
438
449
 
439
- ## `1.9.5` (2021-02-18)
450
+ ## Version 1.9.5 (2021-02-18)
440
451
 
441
- ## `2.9.0` (2021-02-16)
452
+ ## Version 2.9.0 (2021-02-16)
442
453
 
443
454
  * fix(FP-323): mapped discount for product discounts
444
455
  * fix: added attributes response on after event for getSearchableAttributes
@@ -446,41 +457,42 @@
446
457
  * fix: used ContentApi instead of WishlistApi as aggreageted on LifecycleEventDecorator
447
458
  * feat: included BaseImplementation for ProductSearchApi and deprecated duplicated methods in ProductApi
448
459
 
449
- ## `2.8.0` (2021-02-11)
460
+ ## Version 2.8.0 (2021-02-11)
450
461
 
451
462
  * feat: Update ShopifyCartApi.php
452
463
  * feat: add compareAtPriceV2 on Shopify product variants
453
464
 
454
- ## `2.7.2` (2021-02-11)
465
+ ## Version 2.7.2 (2021-02-11)
455
466
 
456
467
  * fix: Return empty array to unblock the customer
457
468
 
458
- ## `2.7.1` (2021-02-02)
469
+ ## Version 2.7.1 (2021-02-02)
459
470
 
460
471
  * chore: included the conflict version with catwalk on common/composer.json
461
472
 
462
- ## `2.7.0` (2021-02-02)
473
+ ## Version 2.7.0 (2021-02-02)
463
474
 
464
475
  * !feat(fp-90) catwalk controllers (#580)
465
476
  * feat: included shipping info id for CommerceTools
466
477
 
467
- ## `2.6.1` (2021-01-27)
478
+ ## Version 2.6.1 (2021-01-27)
468
479
 
469
480
  * fix: removed shipping or billing fields dependency to set shippingMethodName
470
481
  * fix(FP-150): returned ShippingMethod in getAvailableShippingMethods for Shopify
471
482
 
472
- ## `2.6.0` (2021-01-20)
483
+ ## Version 2.6.0 (2021-01-20)
473
484
 
474
485
  * feat(FT-545): implemented shipping methods for a given cart on Spryker
475
486
 
476
- ## `2.5.1` (2021-01-20)
487
+ ## Version 2.5.1 (2021-01-20)
477
488
 
478
489
  * fix: Missed adaption to OrderIdGeneratorV2.
479
490
  * feat(FT-590): upgrade Shopify version on API test and include SEO fields on product
480
491
 
481
- ## `2.5.0` (2021-01-18)
492
+ ## Version 2.5.0 (2021-01-18)
482
493
 
483
- * fix(563): revert change to tests and add typecasting into Spryker CatalogSearchQuery to ensure that categoryId will be an int
494
+ * fix(563): revert change to tests and add typecasting into Spryker CatalogSearchQuery to ensure that categoryId will be
495
+ an int
484
496
  * feat: included metafields on Shopify product variants
485
497
  * feat(FT-581): mapped rates and locations on ShippingRates for Commercetools
486
498
  * fix: Consistency for toString() methods on ProductApi\Locale.
@@ -495,7 +507,7 @@
495
507
  * feat(cart-defaults): Options for CommerceTools cart defaults.
496
508
  * feat(CartFetcher): CartFetcher as unified entrance to loading a cart.
497
509
 
498
- ## `2.4.0` (2021-01-14)
510
+ ## Version 2.4.0 (2021-01-14)
499
511
 
500
512
  * feat(cart-defaults): Options for CommerceTools cart defaults.
501
513
  * feat(FT-506): implemented setEmail for Spryker
@@ -503,26 +515,27 @@
503
515
  * fix(FT-563): add if-else condition depending on current customer to change behavior for Spryker
504
516
  * feat(FT-457): included Shopify product images to each variant
505
517
 
506
- ## `2.3.0` (2021-01-06)
518
+ ## Version 2.3.0 (2021-01-06)
507
519
 
508
520
  * feat(FT-544): implemented cart available shipping methods
509
521
  * fix(shopify): mapped variant stock from quantityAvailable and included availableForSale
510
522
  * feat(FT-470): Mapped shipping discounted price when present
511
523
 
512
- ## `2.2.1` (2020-12-18)
524
+ ## Version 2.2.1 (2020-12-18)
513
525
 
514
526
  * fix: removed extra comma at the end of parameter list
515
527
 
516
- ## `2.2.0` (2020-12-18)
528
+ ## Version 2.2.0 (2020-12-18)
517
529
 
518
530
  * fix: added missing default language
519
531
  * feat(FT-532): extracted Wishlist Api interface
520
532
  * feat(FT-532): extracted Cart Api interface
521
533
  * feat(FT-532): extracted Account Api interface
522
- * fix(FT-540): make defaultLanguage in Spryker Product Search API bundle non-nullable, but make localeString in parseLocaleString nullable
534
+ * fix(FT-540): make defaultLanguage in Spryker Product Search API bundle non-nullable, but make localeString in
535
+ parseLocaleString nullable
523
536
  * fix(FT-540): Fix SprykerProductSearchApi, add usage of forLanguage to have locale included into products search
524
537
 
525
- ## `2.1.0` (2020-12-14)
538
+ ## Version 2.1.0 (2020-12-14)
526
539
 
527
540
  * Fix missing namespace
528
541
  * Update json calls around wrapper
@@ -542,7 +555,7 @@
542
555
  * fix: Remaining dependencies to work with common 2.0
543
556
  * fix: Set composer platform to PHP 7.4
544
557
 
545
- ## `2.0.0` (2020-11-27)
558
+ ## Version 2.0.0 (2020-11-27)
546
559
 
547
560
  * feat(tax): included tax class and implementation fro Commercetools
548
561
  * feat!(ShippingMethod): API enhancement for fetching shipping methods. (#420)
@@ -566,14 +579,14 @@
566
579
  * feat(shopify): included descriptionHtml and images to Product query
567
580
  * feat(ApiBase): implemented CartApiBase on Spryker
568
581
 
569
- ## `1.1.20` (2020-11-26)
582
+ ## Version 1.1.20 (2020-11-26)
570
583
 
571
584
  * fix: Correct bundle references
572
585
  * refactor: removed duplicated tests
573
586
  * [FT-442] Migrate DataObjects to ApiDataObjects
574
587
  * fix: set right test name on AnonymousCart
575
588
 
576
- ## `1.1.19` (2020-11-13)
589
+ ## Version 1.1.19 (2020-11-13)
577
590
 
578
591
  * chore: Built release 2020.11.13.11.34
579
592
  * fix(shopify): Used lowecase for variant attributes
@@ -589,7 +602,7 @@
589
602
  * fix(shopware): Commented invalid attributes for Shopware v2 and v3
590
603
  * feat(shopify): Implemented facet filters for tags and product types
591
604
 
592
- ## `1.1.18` (2020-11-04)
605
+ ## Version 1.1.18 (2020-11-04)
593
606
 
594
607
  * fix(spryker): Included abstract decription
595
608
  * fix(spryker): Counted items returned
@@ -599,7 +612,7 @@
599
612
  * fix(spryker): Removed mapImages overwrited implementation
600
613
  * fix(spryker): Set valid variant sku
601
614
 
602
- ## `1.1.17` (2020-10-30)
615
+ ## Version 1.1.17 (2020-10-30)
603
616
 
604
617
  * fix(spryker): Returned orignal account if not possible to be refreshed with no authToken
605
618
  * fix: don't enforce tax category in Commercetools
@@ -607,7 +620,7 @@
607
620
  * fix(spryker): Removed verifyEmail as non part of AccountAPI abstraction
608
621
  * fix(spryker): Returned email as part of reset account
609
622
 
610
- ## `1.1.16` (2020-10-16)
623
+ ## Version 1.1.16 (2020-10-16)
611
624
 
612
625
  * fix(productSearchApi): Remove URL decoding for Findologic provided URLs
613
626
  * fix(productSearchApi): Remove redundant code from FindologicClientFactory
@@ -624,12 +637,12 @@
624
637
  * fix: Only set fetch_format when needed
625
638
  * chore: Extracted common webspocket code
626
639
 
627
- ## `1.1.15` (2020-10-13)
640
+ ## Version 1.1.15 (2020-10-13)
628
641
 
629
642
  * fix: Do not cast null values in media library to numeric
630
643
  * fix: Set whislist as not implemented for Shopify
631
644
 
632
- ## `1.1.14` (2020-10-07)
645
+ ## Version 1.1.14 (2020-10-07)
633
646
 
634
647
  * fix(shopify): Used only SKU values on variant.sku mapping
635
648
  * fix: Import deprecate helper in a way it also works in tests
@@ -721,7 +734,7 @@
721
734
  * Fixed type hint
722
735
  * Flagged types
723
736
 
724
- ## `1.1.13` (2020-10-02)
737
+ ## Version 1.1.13 (2020-10-02)
725
738
 
726
739
  * fix: Removed cartId validation on testAPI
727
740
  * chore: Refactored withCurrency method as appendCurrencyToUrl
@@ -805,23 +818,23 @@
805
818
  * Fixed type hint
806
819
  * Flagged types
807
820
 
808
- ## `1.1.12` (2020-10-01)
821
+ ## Version 1.1.12 (2020-10-01)
809
822
 
810
823
  * feat: Shopify CartApi & AccountApi
811
824
 
812
- ## `1.1.11` (2020-09-17)
825
+ ## Version 1.1.11 (2020-09-17)
813
826
 
814
827
  * feat!: Use the product search API
815
828
  * feat: Add ShopifyProductSearchApi
816
829
  * feat: Call product event listeners
817
830
  * chore: Extracted common webspocket code
818
831
 
819
- ## `1.1.10` (2020-09-15)
832
+ ## Version 1.1.10 (2020-09-15)
820
833
 
821
834
  * Regenerated API documentation
822
835
  * Generated TypeScript types for catwalk & common domain models
823
836
 
824
- ## `1.1.9` (2020-09-11)
837
+ ## Version 1.1.9 (2020-09-11)
825
838
 
826
839
  * Implement localization and include Product filter by language
827
840
  * add Spryker product search API
@@ -836,7 +849,7 @@
836
849
  * Build cloudinary URLs ourselves
837
850
  * Add FindologicBundle
838
851
 
839
- ## `1.1.8` (2020-08-24)
852
+ ## Version 1.1.8 (2020-08-24)
840
853
 
841
854
  * chore(shopify integration): Included pagination documentation
842
855
  * fix(shopify integration): Updated Api test to use cursor based pagination
@@ -903,19 +916,19 @@
903
916
  * feat(spryker integration): Impleted WoohooLabs ResourceObject to handle Api response content
904
917
  * feat(spryker integration): Included raw api output as part of Http/Response
905
918
 
906
- ## `1.1.5` (2020-08-05)
919
+ ## Version 1.1.5 (2020-08-05)
907
920
 
908
921
  * fix: Restore (again) missing CHANGELOG.md in common
909
922
 
910
- ## `1.1.4` (2020-08-05)
923
+ ## Version 1.1.4 (2020-08-05)
911
924
 
912
925
  * fix: Restore missing CHANGELOG.md in common
913
926
 
914
- ## `1.1.3` (2020-08-05)
927
+ ## Version 1.1.3 (2020-08-05)
915
928
 
916
929
  * Fixed release script
917
930
 
918
- ## `1.1.2` (2020-08-05)
931
+ ## Version 1.1.2 (2020-08-05)
919
932
 
920
933
  * fix: Use readlink instead of realpath to work on mac
921
934
  * Enable tideways for sparhandy and fix check in setup handle
@@ -930,12 +943,13 @@
930
943
  * feat(boost-theme): theming - next phase
931
944
  * chore(frontasticli): Add github action for releasing
932
945
  * fix(boost-theme): custom hook and some photo scaling
933
- * fix(boost-theme): custom hook and some photo scaling (solution for now, until we get more customized photos from commerce tools)
946
+ * fix(boost-theme): custom hook and some photo scaling (solution for now, until we get more customized photos from
947
+ commerce tools)
934
948
  * chore: removing customers that have github actions by now
935
949
  * chore: enabling teams hook for Apollo and disabling Slack
936
950
  * chore: Remove orphan DI tag frontastic.common.api_integration.
937
951
 
938
- ## `1.1.1` (2020-07-30)
952
+ ## Version 1.1.1 (2020-07-30)
939
953
 
940
954
  * fix: Logger is still unavailable in container.
941
955
  * chore: Removed FactoryServiceLocator from libraries/common.
@@ -977,9 +991,8 @@
977
991
  * Expose additional category filter properties
978
992
  * Added field `state` and mapping for CommerceTools in `Address`.
979
993
 
980
- ## `1.1.0` (2020-07-30)
981
-
982
- ## `1.0.0` (2020-05-27)
994
+ ## Version 1.1.0 (2020-07-30)
983
995
 
996
+ ## Version 1.0.0 (2020-05-27)
984
997
 
985
998
  * Initial stable release
package/composer.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "frontastic/common",
3
3
  "license": "None",
4
- "version": "2.33.2",
4
+ "version": "2.33.6",
5
5
  "repositories": [
6
6
  {
7
7
  "type": "path",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontastic/common",
3
- "version": "2.33.2",
3
+ "version": "2.33.6",
4
4
  "devDependencies": {
5
5
  "@babel/core": "7.5.4",
6
6
  "@babel/plugin-proposal-class-properties": "^7.5.0",
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["frontastic-common"]=t():e["frontastic-common"]=t()}(global,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e){e.exports=JSON.parse('{"schema":[{"name":"Value Order","fields":[{"label":"Strip Label Prefix","field":"stripLabelPrefix","type":"boolean","default":false},{"label":"Sort Order","field":"sortOrder","type":"enum","values":[{"value":"sort-undefined","name":"Undefined"},{"value":"sort-ascending","name":"Ascending"},{"value":"sort-descending","name":"Descending"}],"default":"sort-undefined"}]}]}')},function(e){e.exports=JSON.parse('{"schema":[{"name":"Display properties","fields":[{"label":"Highlight menu item","field":"displayHighlightMenuItem","type":"boolean","default":false},{"label":"Highlight category tag","field":"displayHighlightCategoryTag","type":"boolean","default":false},{"label":"Description","field":"displayDescription","type":"string","translatable":true},{"label":"Custom CSS class","field":"displayClassname","type":"string","translatable":false},{"label":"Image","field":"displayMedia","type":"media","options":{"ratio":"4:1"}}]},{"name":"SEO","fields":[{"label":"Title","field":"seoTitle","type":"string","translatable":true},{"label":"Description","field":"seoDescription","type":"string","translatable":true},{"label":"Keywords","field":"seoKeywords","type":"string","translatable":true}]}]}')},function(e){e.exports=JSON.parse('{"schema":[]}')},function(e,t,n){var i=n(4),r=n(6);e.exports=function(e,t,n){var o=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var s=(e=e||{}).random||(e.rng||i)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t)for(var a=0;a<16;++a)t[o+a]=s[a];return t||r(s)}},function(e,t,n){var i=n(5);e.exports=function(){return i.randomBytes(16)}},function(e,t){e.exports=require("crypto")},function(e,t){for(var n=[],i=0;i<256;++i)n[i]=(i+256).toString(16).substr(1);e.exports=function(e,t){var i=t||0,r=n;return[r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]]].join("")}},function(e,t,n){"use strict";function i(e){return"stream"===e||"dataSource"===e}n.r(t);const r=["product","product-list","content","content-list"];function o(e,t,n){return void 0!==e?Boolean(e):"stream"===t&&r.includes(n)}function s(e){if(!Array.isArray(e.fields))return{};let t={};for(let n=0;n<e.fields.length;++n){const i=e.fields[n];if(!i.field)continue;const r=i.type||"text";t[i.field]={field:i.field,type:r,sectionName:e.name||"",values:i.values||[],default:u(r,i.default),validate:i.validate||{},fields:i.fields||null,min:void 0===i.min?1:i.min,max:i.max||16,required:o(i.required,r,i.streamType),disabled:!0===i.disabled,translatable:i.translatable}}return t}function a(e,t){let n=e.default;if(void 0!==t[e.field]&&null!==t[e.field]&&(n=t[e.field]),"group"===e.type){let t=(n||[]).slice(0,e.max);for(let n=t.length;n<e.min;++n)t[n]={};return i=t,r=e.fields,(i||[]).map(e=>{null!==e&&"object"==typeof e||(e={});for(let t of r)void 0!==e[t.field]&&null!==e[t.field]||(e[t.field]=t.default||null);return e})}var i,r;return n}function l(e,t,n,i){("object"!=typeof i||Array.isArray(i))&&(i={});let r={};for(let o of Object.values(e))r[o.field]=c(o,t,n,i);return r}function c(e,t,n,r){const o=r[e.field];if("group"===e.type){const i=s(e);return a(e,t).map((e,t)=>{const r=void 0!==o&&o.length>t?o[t]:{};return l(i,e,n,r)})}if(void 0!==o)return o;const c=a(e,t);return i(e.type)?n[c]||null:c}function u(e,t){if(void 0!==t)return t;switch(e){case"group":return[];case"decimal":case"integer":case"float":case"number":return 0;case"string":case"text":case"markdown":return"";case"json":return"{}";case"boolean":return!1;default:return null}}class d{constructor(e=[],t={}){this.schema=e,this.setConfiguration(t),this.fields={};for(let e=0;e<this.schema.length;++e)this.fields={...this.fields,...s(this.schema[e])}}setConfiguration(e){this.configuration=Array.isArray(e)?{}:e||{}}set(e,t){if(!this.fields[e])throw new Error("Unknown field "+e+" in this configuration schema.");return new d(this.schema,{...this.configuration,[e]:t})}get(e){const t=this.fields[e];return t?a(t,this.configuration):(console.warn("Unknown field "+e+" in this configuration schema."),this.configuration[e]||null)}getField(e){const t=this.fields[e];if(!t)throw new Error("Unknown field "+e+" in this configuration schema.");return t}has(e){return!!this.fields[e]}getSchema(){return this.schema}getConfiguration(){return this.configuration}isFieldRequired(e){return this.getField(e).required}isFieldDisabled(e){return this.getField(e).disabled}hasMissingRequiredValueInField(e,t=!1){const n=this.getField(e),r=this.get(e);return"group"===n.type?r.some(e=>new d([n],e).hasMissingRequiredFieldValues(t)):!!n.required&&((!i(n.type)||!t)&&("reference"===n.type?"object"!=typeof r||null===r||"string"!=typeof r.type||""===r.type||"string"!=typeof r.target||""===r.target:i(n.type)&&r||"media"===n.type&&r||"string"===n.type&&n.translatable&&r?Object.values(r).some(e=>!e):null==r||""===r))}hasMissingRequiredFieldValues(e=!1){return Object.keys(this.fields).some(t=>this.hasMissingRequiredValueInField(t,e))}hasMissingRequiredFieldValuesInSection(e,t=!1){return Object.entries(this.fields).some(([n,i])=>i.sectionName===e&&this.hasMissingRequiredValueInField(n,t))}getConfigurationWithResolvedStreams(e={},t={}){return l(this.fields,this.configuration,e,t)}}var f=d,h={NodeConfigurationSchema:n(1),CellConfigurationSchema:n(2)},g=n(3),m=n.n(g),p=function(){return m()()},y=function(e,t,n){if(!e||"object"!=typeof e)return{text:e,locale:t};if(e[t])return{text:e[t],locale:t};if(e[n])return{text:e[n],locale:n};if(!Object.keys(e).length)return{text:"",locale:null,translated:!1};let i=Object.keys(e)[0];return{text:e[i]||"",locale:i,translated:!1}};const b=e=>{switch(e){case"string":case"text":case"markdown":case"json":return!0;default:return!1}},w=e=>void 0!==e.translatable?e.translatable:b(e.type);let v=function(e){return e=(e+"").toString(),encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")};var k=function(e,t,n){let i,r,o=[],s=function(e,t,n){let i,r=[];if(!0===t?t="1":!1===t&&(t="0"),null!=t){if("object"==typeof t){for(i in t)null!=t[i]&&r.push(s(e+"["+i+"]",t[i],n));return r.join(n)}if("function"!=typeof t)return v(e)+"="+v(t);throw new Error("There was an error processing for httpBuildQuery().")}return""};for(r in n||(n="&"),e){i=e[r],t&&!isNaN(r)&&(r=String(t)+r);let a=s(r,i,n);""!==a&&o.push(a)}return o.join(n)};let I=function(e){if("object"!=typeof e)return!1;let t=0;for(let n of Object.keys(e))if(+n!=t++)return!1;return!0},S=function(e){for(let[t,n]of Object.entries(e))n&&"object"==typeof n&&(e[t]=S(n)),I(n)&&(e[t]=Object.values(n));return e};var x=function(e){let t={};return function(e,t){var n,i,r,o,s,a,l,c,u,d,f,h,g,m=String(e).replace(/^&/,"").replace(/&$/,"").split("&"),p=m.length,y=function(e){return decodeURIComponent(e.replace(/\+/g,"%20"))};for(t||(t=this.window),n=0;n<p;n++){for(u=y((c=m[n].split("="))[0]),d=c.length<2?"":y(c[1]);" "===u.charAt(0);)u=u.slice(1);if(u.indexOf("\0")>-1&&(u=u.slice(0,u.indexOf("\0"))),u&&"["!==u.charAt(0)){for(h=[],f=0,i=0;i<u.length;i++)if("["!==u.charAt(i)||f){if("]"===u.charAt(i)&&f&&(h.length||h.push(u.slice(0,f-1)),h.push(u.substr(f,i-f)),f=0,"["!==u.charAt(i+1)))break}else f=i+1;for(h.length||(h=[u]),i=0;i<h[0].length&&(" "!==(l=h[0].charAt(i))&&"."!==l&&"["!==l||(h[0]=h[0].substr(0,i)+"_"+h[0].substr(i+1)),"["!==l);i++);for(a=t,i=0,g=h.length;i<g;i++)if(u=h[i].replace(/^['"]/,"").replace(/['"]$/,""),i!==h.length-1,s=a,""!==u&&" "!==u||0===i)void 0===a[u]&&(a[u]={}),a=a[u];else{for(o in r=-1,a)a.hasOwnProperty(o)&&+o>r&&o.match(/^\d+$/g)&&(r=+o);u=r+1}s[u]=d}}}(e,t),t=S(t),t};const C=Boolean("undefined"==typeof window||!window.location.hostname||"localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function T(){if("serviceWorker"in navigator){const e=process.env.PUBLIC_URL||"/";if(new URL(e,window.location).origin!==window.location.origin)return;window.addEventListener("load",()=>{const e="/service-worker.js";C?function(e){fetch(e).then(t=>{404===t.status||-1===t.headers.get("content-type").indexOf("javascript")?navigator.serviceWorker.ready.then(e=>{e.unregister().then(()=>{window.location.reload()})}):O(e)}).catch(()=>{console.log("No internet connection found. App is running in offline mode.")})}(e):O(e)})}}function O(e){navigator.serviceWorker.register(e).then(e=>{e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}}).catch(e=>{console.error("Error during service worker registration:",e)})}var j=function(){let e,t,n={};if(this.registerCallBack=function(e,t){let i=null;do{i=Math.floor(65536*(1+Math.random())).toString(16).substring(1)}while(i in n);return n[i]={hidden:e,active:t},i},this.removeCallBack=function(e){delete n[e]},"undefined"==typeof document?(e=!1,t=!1):void 0!==document.hidden?(e="hidden",t="visibilitychange"):void 0!==document.mozHidden?(e="mozHidden",t="mozvisibilitychange"):void 0!==document.msHidden?(e="msHidden",t="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",t="webkitvisibilitychange"),e&&t){let i=function(){for(let t of Object.values(n))document[e]?t.hidden():t.active()};void 0===document.addEventListener||void 0===document[e]?console.warn("This feature requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API."):document.addEventListener(t,i,!1)}},E=[{size:12,name:"1",icon:"looks_one"},{size:6,name:"1/2",icon:"looks_two"},{size:4,name:"1/3",icon:"looks_3"},{size:8,name:"2/3",icon:"looks_3"},{size:3,name:"1/4",icon:"looks_4"},{size:9,name:"3/4",icon:"looks_4"},{size:2,name:"1/6",icon:"looks_6"}];var D=class{constructor(e={}){this.tasticId=e.tasticId||p(),this.tasticType=e.tasticType,this.configuration=e.configuration||{};let t=[{name:"General settings",folded:!0,fields:[{label:"Name",field:"name",type:"string"},{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0},{label:"Anchor",field:"tasticId",type:"string",translatable:!1,disabled:!0,default:"#"+this.tasticId}]}];if(e.schema)for(let n=0;n<e.schema.length;++n)t.push(e.schema[n]);this.schema=new f(t,this.configuration)}export(){return{tasticId:this.tasticId,tasticType:this.tasticType,configuration:this.schema.getConfiguration()}}};var F=class{constructor(e={}){if(this.cellId=e.cellId||p(),this.configuration=e.configuration||{},this.customConfiguration=e.customConfiguration||{},this.schema=new f([{name:"General settings",folded:!0,fields:[{label:"Name",field:"name",type:"string",translatable:!0},{label:"Layout element width",field:"size",type:"enum",values:E&&E.map(e=>({name:e.name,value:e.size})),default:12},{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0}]}],this.configuration),this.tastics=[],e.tastics&&e.tastics.length)for(let t=0;t<e.tastics.length;++t)this.tastics.push(new D(e.tastics[t]))}addTastic(e,t={},n=[],i=0){const r=new D({tasticType:e,configuration:t,schema:n});return this.tastics.splice(i,0,r),r}getTastic(e){for(let t of this.tastics)if(t.tasticId===e)return t;throw new Error("Could not find component with ID "+e)}getTasticCount(){return this.tastics.length}export(){return{cellId:this.cellId,configuration:this.schema.getConfiguration(),customConfiguration:this.customConfiguration,tastics:this.tastics.map(e=>e.export())}}};var N=class{constructor(e){if(!e.kitDefinitionId)throw new Error("Missing kitDefinitionId in "+JSON.stringify(e));this.kitDefinitionId=e.kitDefinitionId,this.kitId=e.kitId||p(),this.configuration=e.configuration||{}}export(){return{kitId:this.kitId,kitDefinitionId:this.kitDefinitionId,configuration:this.configuration}}};var M=class{constructor(e={}){if(this.regionId=e.regionId||p(),this.configuration=e.configuration||{},this.schema=new f([{name:"Responsive",folded:!0,fields:[{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0}]},{name:"Layout",fields:[{label:"Cell direction",field:"flexDirection",type:"enum",default:"row",values:[{value:"row",name:"Row"},{value:"column",name:"Column"},{value:"row-reverse",name:"Row (reversed)"},{value:"column-reverse",name:"Column (reversed)"}]},{label:"Cell wrapping",field:"flexWrap",type:"enum",default:"wrap",values:[{value:"nowrap",name:"No wrapping"},{value:"wrap",name:"Wrap cells"}]},{label:"Justify cells",field:"justifyContent",type:"enum",default:"space-between",values:[{value:"flex-start",name:"Put at beginning"},{value:"flex-end",name:"Put at end"},{value:"center",name:"Center Cells"},{value:"space-between",name:"Space between cells"},{value:"space-around",name:"Space around cells"},{value:"space-even",name:"Evenly spaced cells"}]},{label:"Cell alignment",field:"alignItems",type:"enum",default:"stretch",values:[{value:"flex-start",name:"Align to start"},{value:"flex-end",name:"Align to end"},{value:"center",name:"Center cells"},{value:"stretch",name:"Stretch cells"},{value:"baseline",name:"Align to baseline"}]},{label:"Align multiple cell rows",field:"alignContent",type:"enum",default:"space-between",values:[{value:"flex-start",name:"Put at beginning"},{value:"flex-end",name:"Put at end"},{value:"center",name:"Center rows"},{value:"stretch",name:"Stretch rows"},{value:"space-between",name:"Space between rows"},{value:"space-around",name:"Space around rows"}]}]}],this.configuration),this.elements=[],e.elements&&e.elements.length)for(let t=0;t<e.elements.length;++t)this.addElement(e.elements[t])}addElement(e){if(e.cellId)return this.addCell(e);if(e.kitId)return this.addKit(e);throw new TypeError("Unknown element type: "+JSON.stringify(e))}addCell(e){return this.elements.push(new F(e)),this.elements[this.elements.length-1]}addKit(e){return this.elements.push(new N(e)),this.elements[this.elements.length-1]}getElement(e){const t=Object.keys(e)[0],n=Object.values(e)[0];for(let e of this.elements)if(e[t]===n)return e;throw new Error("Could not find element with ID "+JSON.stringify(n))}getCells(){return this.elements.filter(e=>e instanceof F)}getKits(){return this.elements.filter(e=>e instanceof N)}export(){return{regionId:this.regionId,configuration:this.schema.getConfiguration(),elements:this.elements.map(e=>e.export())}}};var R=class{constructor(e={},t=[],n=[]){this.pageId=e.pageId||null,this.nodes=e.nodes||[],this.layoutId=e.layoutId||"three_rows",this.name=e.name||"Unnamed Page",this.regions={},this.tasticSchemas=(n||[]).map(e=>e.configurationSchema);for(let n=0;n<t.length;++n){let i=t[n];e.regions&&e.regions[i]&&e.regions[i].elements&&e.regions[i].elements.length&&(e.regions[i].elements=this.mapTastics(e.regions[i].elements)),this.createRegion(i,e.regions&&e.regions[i]||{})}}mapTastics(e){for(let t=0;t<e.length;++t){let n=e[t];if(n.cellId&&(n.tastics&&n.tastics.length))for(let e=0;e<n.tastics.length;++e){let t=n.tastics[e];t.schema={schema:[]};for(let e of this.tasticSchemas)if(e.tasticType===t.tasticType){t.schema=e.schema;break}}}return e}createRegion(e,t){t.regionId=e,this.regions[e]=new M(t)}getRegion(e){if(!this.regions[e])throw new Error("Region with identifier "+e+" unknown.");return this.regions[e]}addCell(e,t={}){return this.getRegion(e).addCell({configuration:t})}duplicateCell(e,t){const n=this.addCell(e,t.configuration);return t.tastics.forEach((t,i)=>{this.addTastic(e,n.cellId,t.tasticType,i,t.configuration)}),n}addKit(e,t){return this.getRegion(e).addKit(t)}findElement(e){const t=Object.keys(e)[0],n=Object.values(e)[0];for(let e in this.regions)for(let[i,r]of Object.entries(this.regions[e].elements))if(r[t]===n)return[e,+i];throw new Error("Could not find element with "+JSON.stringify(e))}hasElement(e){try{return!!this.findElement(e)}catch(e){return!1}}getElement(e){let[t,n]=this.findElement(e);return this.regions[t].elements[n]}removeElement(e){let[t,n]=this.findElement(e);this.regions[t].elements.splice(n,1)}moveElement(e,t){if(!this.regions[t.region])throw new Error("Unknown target region "+t.region);let[n,i]=this.findElement(e),r=this.regions[n].elements.splice(i,1)[0];this.regions[t.region].elements.splice(void 0===t.element?this.regions[t.region].elements.length:t.element-(n===t.region&&t.element>i?1:0),0,r)}addTastic(e,t,n,i,r={}){let o=null;for(let e of this.tasticSchemas)if(e.tasticType===n){o=e;break}return this.getRegion(e).getElement({cellId:t}).addTastic(n,r,o,i)}getTastics(){let e=[];return Object.values(this.regions).forEach(t=>{t.getCells().forEach(t=>{e=e.concat(t.tastics)})}),e}findTastic(e){for(let t in this.regions)for(let n=0;n<this.regions[t].elements.length;++n)for(let i in this.regions[t].elements[n].tastics||[]){if(this.regions[t].elements[n].tastics[i].tasticId===e)return[t,+n,+i]}throw new Error("Could not find tastic with id "+e)}hasTastic(e){try{return!!this.findTastic(e)}catch(e){return!1}}getTastic(e){let[t,n,i]=this.findTastic(e);return this.regions[t].elements[n].tastics[i]}removeTastic(e){let[t,n,i]=this.findTastic(e);this.regions[t].elements[n].tastics.splice(i,1)}moveTastic(e,t){let[n,i,r]=this.findTastic(e),o=this.regions[n].elements[i].tastics.splice(r,1)[0],[s,a]=this.findElement({cellId:t.cell});this.regions[s].elements[a].tastics.splice(void 0===t.tasticDropPosition?this.regions[s].elements[a].tastics.length:t.tasticDropPosition-(n===s&&i===a&&t.tasticDropPosition>=r?1:0),0,o)}duplicateTastic(e,t){const[n,,i]=this.findTastic(e),r=this.getTastic(e);return this.addTastic(n,t,r.tasticType,i+1,r.configuration)}export(){let e={};for(let[t,n]of Object.entries(this.regions))e[t]=n.export();return{pageId:this.pageId,nodes:this.nodes,layoutId:this.layoutId,name:this.name,regions:e}}};const P=(e,t,n)=>{n={resourceType:"image",type:"upload",...n};let i=[];for(let[e,t]of Object.entries(n))switch(e){case"secure":case"resourceType":case"type":break;case"background":case"crop":case"fetch_format":case"gravity":case"height":case"quality":case"width":case"x":case"y":t&&i.push(e[0]+"_"+t);break;default:throw new Error("Unhandled image transformation "+e)}return i.sort(),`https://res.cloudinary.com/${t.cloudName}/${n.resourceType}/${n.type}/${i.join(",")}/${r=e,encodeURI(r).replace(/[?=]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}`;var r};var A=class{constructor(e){this.configuration={cloudName:e.cloudName}}getImageUrl(e,t,n,i={}){return P(e.mediaId,this.configuration,{fetch_format:e.format&&"svg"===e.format?void 0:"auto",width:t,height:n,secure:!0,...this.getQuality(i),...this.getFetchFormat(i),...this.getGravityOptions(i),...this.cropOptions(i)})}getFetchImageUrl(e,t,n,i={}){return e.startsWith("//")&&(e="https:"+e),P(e,this.configuration,{fetch_format:"auto",type:"fetch",width:t,height:n,secure:!0,...this.getQuality(i),...this.getFetchFormat(i),...this.getGravityOptions(i),...this.cropOptions(i)})}getImageUrlWithoutDefaults(e,t,n,i={}){return P(e.mediaId,this.configuration,{width:t,height:n,...i})}getGravityOptions(e){if(e.crop)return{};let t={gravity:"faces:auto"};return e.gravity&&(t.gravity="custom"===e.gravity.mode?"xy_center":e.gravity.mode,e.gravity.coordinates&&(t.x=e.gravity.coordinates.x,t.y=e.gravity.coordinates.y)),t}cropOptions(e){let t={crop:"fill"};return e.crop&&(t.crop=e.crop),e.background&&(t.background=e.background),t}getQuality(e){let t={quality:"auto"};return e.quality&&(t.quality=e.quality),t}getFetchFormat(e){let t={};return e.fetch_format&&(t.fetch_format=e.fetch_format),e.fetchFormat&&(t.fetch_format=e.fetchFormat),t}};var _=class{constructor(){this.imageSizes=[16,32,64,128,256,512,1024,2048]}getImageDimensions(e,t,n,i=null,r=1){let o=this.getFloatRatio(e,i),s=t&&Math.round(+t*r),a=n&&Math.round(+n*r);return s&&i&&(a=Math.round(s*o)),a&&!s&&i&&(s=Math.round(a/o)),[s,a]}getFloatRatio(e=null,t=null){if(!t&&e&&e.width&&e.height)return e.height/e.width;const n=String(t).match(/([0-9]+):([0-9]+)/);return n?n[2]/n[1]:t}getImageLink(e,t,n,i,r,o={},s=1){let a=this.getMediaApi(t),[l,c]=this.getImageDimensions(e,n,i,r,s),u=l/c;if(["fill","pad"].includes(o.crop)){for(let e=0;e<this.imageSizes.length;++e)if(this.imageSizes[e]>=l){l=this.imageSizes[e];break}c=o.autoHeight?null:Math.ceil(l/u)}return"string"==typeof e?a.getFetchImageUrl(e,l,c,o):a.getImageUrl(e,l,c,o)}getMediaApi(e){switch(e.media.engine){case"cloudinary":return new A(e.media);default:throw new Error("No valid media API found.")}}static getElementDimensions(e){let t=0;if(getComputedStyle){let n=getComputedStyle(e);t+=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)}return{width:e.clientWidth-t,height:e.clientHeight}}},U=n(0),q={enum:U,localizedEnum:U},z=(e,t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),H=(e,t=null)=>{"undefined"!=typeof PRODUCTION&&PRODUCTION||"undefined"==typeof window||!window||!window.document||console.info("%c🗑 %cDeprecation Notice: %s %s","color: gray","color: orange",t?"["+(t.displayName||t.constructor.name)+"]":"",e)},W=(e,t,n=!1)=>{let i=!1;return function(){let r=this,o=arguments,s=function(){i=null,n||e.apply(r,o)},a=n&&!i;clearTimeout(i),i=setTimeout(s,t),a&&e.apply(r,o)}},L=(e,t)=>{let n=!1;return function(){n||(e.apply(this,arguments),n=!0,setTimeout((function(){n=!1}),t))}};var $=class{constructor(e,t={}){if(this.context={customer:"demo",idDebug:!1,endpoint:"preview",...e},this.messageHandlers=t,!this.context.previewId)throw new Error("context.previewId is required");this.webSocket=null,this.connected=!1,this.connectionFails=0,this.connect()}connect(){this.webSocket=new WebSocket((this.context.isDebug?"ws://":"wss://")+this.context.customer+".frontastic.io"+(this.context.isDebug?".local":"")+`:8080/ws?${this.context.endpoint}=${this.context.previewId}`),this.webSocket.onmessage=this.handleMessage.bind(this),this.webSocket.onopen=()=>{this.connectionFails=0,this.connected=!0},this.webSocket.onclose=()=>{this.webSocket=null,this.connected=!1,setTimeout(this.connect.bind(this),1e3*Math.min(++this.connectionFails,30))}}handleMessage(e){let t=JSON.parse(e.data);if("Ping"!==t.Name)return this.messageHandlers[t.Name]?this.messageHandlers[t.Name](t.Payload,t):void console.info("Unknown WebSocket message",t)}sendMessage(e,t=!1){if(e.Channel=this.context.previewId,e.Payload=e.Payload||[],this.connected)return this.webSocket.send(JSON.stringify(e));t&&setTimeout(()=>{this.sendMessage(e,!0)},100)}close(){this.webSocket.onclose=()=>{},this.webSocket.close()}};n.d(t,"ConfigurationSchema",(function(){return f})),n.d(t,"DefaultSchemas",(function(){return h})),n.d(t,"generateId",(function(){return p})),n.d(t,"getTranslation",(function(){return y})),n.d(t,"httpBuildQuery",(function(){return k})),n.d(t,"httpParseQuery",(function(){return x})),n.d(t,"isTranslatableByDefault",(function(){return b})),n.d(t,"shouldFieldBeTranslated",(function(){return w})),n.d(t,"registerServiceWorker",(function(){return T})),n.d(t,"VisibilityChange",(function(){return j})),n.d(t,"cellDimensions",(function(){return E})),n.d(t,"Cell",(function(){return F})),n.d(t,"Page",(function(){return R})),n.d(t,"Region",(function(){return M})),n.d(t,"Tastic",(function(){return D})),n.d(t,"MediaApi",(function(){return _})),n.d(t,"FacetTypeSchemaMap",(function(){return q})),n.d(t,"omit",(function(){return z})),n.d(t,"deprecate",(function(){return H})),n.d(t,"debounce",(function(){return W})),n.d(t,"throttle",(function(){return L})),n.d(t,"Notifier",(function(){return $}))}])}));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["frontastic-common"]=t():e["frontastic-common"]=t()}(global,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e){e.exports=JSON.parse('{"schema":[{"name":"Value Order","fields":[{"label":"Strip Label Prefix","field":"stripLabelPrefix","type":"boolean","default":false},{"label":"Sort Order","field":"sortOrder","type":"enum","values":[{"value":"sort-undefined","name":"Undefined"},{"value":"sort-ascending","name":"Ascending"},{"value":"sort-descending","name":"Descending"}],"default":"sort-undefined"}]}]}')},function(e){e.exports=JSON.parse('{"schema":[{"name":"Display properties","fields":[{"label":"Highlight menu item","field":"displayHighlightMenuItem","type":"boolean","default":false},{"label":"Highlight category tag","field":"displayHighlightCategoryTag","type":"boolean","default":false},{"label":"Description","field":"displayDescription","type":"string","translatable":true},{"label":"Custom CSS class","field":"displayClassname","type":"string","translatable":false},{"label":"Image","field":"displayMedia","type":"media","options":{"ratio":"4:1"}}]},{"name":"SEO","fields":[{"label":"Title","field":"seoTitle","type":"string","translatable":true},{"label":"Description","field":"seoDescription","type":"string","translatable":true},{"label":"Keywords","field":"seoKeywords","type":"string","translatable":true}]}]}')},function(e){e.exports=JSON.parse('{"schema":[]}')},function(e,t,n){var i=n(4),r=n(6);e.exports=function(e,t,n){var o=t&&n||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var s=(e=e||{}).random||(e.rng||i)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t)for(var a=0;a<16;++a)t[o+a]=s[a];return t||r(s)}},function(e,t,n){var i=n(5);e.exports=function(){return i.randomBytes(16)}},function(e,t){e.exports=require("crypto")},function(e,t){for(var n=[],i=0;i<256;++i)n[i]=(i+256).toString(16).substr(1);e.exports=function(e,t){var i=t||0,r=n;return[r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],"-",r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]],r[e[i++]]].join("")}},function(e,t,n){"use strict";function i(e){return"stream"===e||"dataSource"===e}n.r(t);const r=["product","product-list","content","content-list"];function o(e,t,n){return void 0!==e?Boolean(e):"stream"===t&&r.includes(n)}function s(e){if(!Array.isArray(e.fields))return{};let t={};for(let n=0;n<e.fields.length;++n){const i=e.fields[n];if(!i.field)continue;const r=i.type||"text";t[i.field]={field:i.field,type:r,sectionName:e.name||"",values:i.values||[],default:u(r,i.default),validate:i.validate||{},fields:i.fields||null,min:void 0===i.min?1:i.min,max:i.max||16,required:o(i.required,r,i.streamType),disabled:!0===i.disabled,translatable:i.translatable}}return t}function a(e,t){let n=e.default;if(void 0!==t[e.field]&&null!==t[e.field]&&(n=t[e.field]),"group"===e.type){let t=(n||[]).slice(0,e.max);for(let n=t.length;n<e.min;++n)t[n]={};return i=t,r=e.fields,(i||[]).map(e=>{null!==e&&"object"==typeof e||(e={});for(let t of r)void 0!==e[t.field]&&null!==e[t.field]||(e[t.field]=t.default||null);return e})}var i,r;return n}function l(e,t,n,i){("object"!=typeof i||Array.isArray(i))&&(i={});let r={};for(let o of Object.values(e))r[o.field]=c(o,t,n,i);return r}function c(e,t,n,r){const o=r[e.field];if("group"===e.type){const i=s(e);return a(e,t).map((e,t)=>{const r=void 0!==o&&o.length>t?o[t]:{};return l(i,e,n,r)})}if(void 0!==o)return o;const c=a(e,t);return i(e.type)?n[c]||null:c}function u(e,t){if(void 0!==t)return t;switch(e){case"group":return[];case"decimal":case"integer":case"float":case"number":return 0;case"string":case"text":case"markdown":return"";case"json":return"{}";case"boolean":return!1;default:return null}}class d{constructor(e=[],t={}){this.schema=e,this.setConfiguration(t),this.fields={};for(let e=0;e<this.schema.length;++e)this.fields={...this.fields,...s(this.schema[e])}}setConfiguration(e){this.configuration=Array.isArray(e)?{}:e||{}}set(e,t){if(!this.fields[e])throw new Error("Unknown field "+e+" in this configuration schema.");return new d(this.schema,{...this.configuration,[e]:t})}get(e){const t=this.fields[e];return t?a(t,this.configuration):(console.warn("Unknown field "+e+" in this configuration schema."),this.configuration[e]||null)}getField(e){const t=this.fields[e];if(!t)throw new Error("Unknown field "+e+" in this configuration schema.");return t}has(e){return!!this.fields[e]}getSchema(){return this.schema}getConfiguration(){return this.configuration}isFieldRequired(e){return this.getField(e).required}isFieldDisabled(e){return this.getField(e).disabled}hasMissingRequiredValueInField(e,t=!1){const n=this.getField(e),r=this.get(e);return"group"===n.type?r.some(e=>new d([n],e).hasMissingRequiredFieldValues(t)):!!n.required&&((!i(n.type)||!t)&&("reference"===n.type?"object"!=typeof r||null===r||"string"!=typeof r.type||""===r.type||"string"!=typeof r.target||""===r.target:i(n.type)&&r||"media"===n.type&&r||"string"===n.type&&n.translatable&&r?Object.values(r).some(e=>!e):null==r||""===r))}hasMissingRequiredFieldValues(e=!1){return Object.keys(this.fields).some(t=>this.hasMissingRequiredValueInField(t,e))}hasMissingRequiredFieldValuesInSection(e,t=!1){return Object.entries(this.fields).some(([n,i])=>i.sectionName===e&&this.hasMissingRequiredValueInField(n,t))}getConfigurationWithResolvedStreams(e={},t={}){return l(this.fields,this.configuration,e,t)}}var f=d,h={NodeConfigurationSchema:n(1),CellConfigurationSchema:n(2)},g=n(3),m=n.n(g),p=function(){return m()()},y=function(e,t,n){if(!e||"object"!=typeof e)return{text:e,locale:t};if(e[t])return{text:e[t],locale:t};if(e[n])return{text:e[n],locale:n};if(!Object.keys(e).length)return{text:"",locale:null,translated:!1};let i=Object.keys(e)[0];return{text:e[i]||"",locale:i,translated:!1}};const b=e=>{switch(e){case"string":case"text":case"markdown":case"json":return!0;default:return!1}},w=e=>void 0!==e.translatable?e.translatable:b(e.type);let v=function(e){return e=(e+"").toString(),encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")};var k=function(e,t,n){let i,r,o=[],s=function(e,t,n){let i,r=[];if(!0===t?t="1":!1===t&&(t="0"),null!=t){if("object"==typeof t){for(i in t)null!=t[i]&&r.push(s(e+"["+i+"]",t[i],n));return r.join(n)}if("function"!=typeof t)return v(e)+"="+v(t);throw new Error("There was an error processing for httpBuildQuery().")}return""};for(r in n||(n="&"),e){i=e[r],t&&!isNaN(r)&&(r=String(t)+r);let a=s(r,i,n);""!==a&&o.push(a)}return o.join(n)};let I=function(e){if("object"!=typeof e)return!1;let t=0;for(let n of Object.keys(e))if(+n!=t++)return!1;return!0},S=function(e){for(let[t,n]of Object.entries(e))n&&"object"==typeof n&&(e[t]=S(n)),I(n)&&(e[t]=Object.values(n));return e};var x=function(e){let t={};return function(e,t){var n,i,r,o,s,a,l,c,u,d,f,h,g,m=String(e).replace(/^&/,"").replace(/&$/,"").split("&"),p=m.length,y=function(e){return decodeURIComponent(e.replace(/\+/g,"%20"))};for(t||(t=this.window),n=0;n<p;n++){for(u=y((c=m[n].split("="))[0]),d=c.length<2?"":y(c[1]);" "===u.charAt(0);)u=u.slice(1);if(u.indexOf("\0")>-1&&(u=u.slice(0,u.indexOf("\0"))),u&&"["!==u.charAt(0)){for(h=[],f=0,i=0;i<u.length;i++)if("["!==u.charAt(i)||f){if("]"===u.charAt(i)&&f&&(h.length||h.push(u.slice(0,f-1)),h.push(u.substr(f,i-f)),f=0,"["!==u.charAt(i+1)))break}else f=i+1;for(h.length||(h=[u]),i=0;i<h[0].length&&(" "!==(l=h[0].charAt(i))&&"."!==l&&"["!==l||(h[0]=h[0].substr(0,i)+"_"+h[0].substr(i+1)),"["!==l);i++);for(a=t,i=0,g=h.length;i<g;i++)if(u=h[i].replace(/^['"]/,"").replace(/['"]$/,""),i!==h.length-1,s=a,""!==u&&" "!==u||0===i)void 0===a[u]&&(a[u]={}),a=a[u];else{for(o in r=-1,a)a.hasOwnProperty(o)&&+o>r&&o.match(/^\d+$/g)&&(r=+o);u=r+1}s[u]=d}}}(e,t),t=S(t),t};const T=Boolean("undefined"==typeof window||!window.location.hostname||"localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function C(){if("serviceWorker"in navigator){const e=process.env.PUBLIC_URL||"/";if(new URL(e,window.location).origin!==window.location.origin)return;window.addEventListener("load",()=>{const e="/service-worker.js";T?function(e){fetch(e).then(t=>{404===t.status||-1===t.headers.get("content-type").indexOf("javascript")?navigator.serviceWorker.ready.then(e=>{e.unregister().then(()=>{window.location.reload()})}):O(e)}).catch(()=>{console.log("No internet connection found. App is running in offline mode.")})}(e):O(e)})}}function O(e){navigator.serviceWorker.register(e).then(e=>{e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}}).catch(e=>{console.error("Error during service worker registration:",e)})}var j=function(){let e,t,n={};if(this.registerCallBack=function(e,t){let i=null;do{i=Math.floor(65536*(1+Math.random())).toString(16).substring(1)}while(i in n);return n[i]={hidden:e,active:t},i},this.removeCallBack=function(e){delete n[e]},"undefined"==typeof document?(e=!1,t=!1):void 0!==document.hidden?(e="hidden",t="visibilitychange"):void 0!==document.mozHidden?(e="mozHidden",t="mozvisibilitychange"):void 0!==document.msHidden?(e="msHidden",t="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",t="webkitvisibilitychange"),e&&t){let i=function(){for(let t of Object.values(n))document[e]?t.hidden():t.active()};void 0===document.addEventListener||void 0===document[e]?console.warn("This feature requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API."):document.addEventListener(t,i,!1)}},E=[{size:12,name:"1",icon:"looks_one"},{size:6,name:"1/2",icon:"looks_two"},{size:4,name:"1/3",icon:"looks_3"},{size:8,name:"2/3",icon:"looks_3"},{size:3,name:"1/4",icon:"looks_4"},{size:9,name:"3/4",icon:"looks_4"},{size:2,name:"1/6",icon:"looks_6"}];var D=class{constructor(e={}){this.tasticId=e.tasticId||p(),this.tasticType=e.tasticType,this.configuration=e.configuration||{};let t=[{name:"General settings",folded:!0,fields:[{label:"Name",field:"name",type:"string"},{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0},{label:"Anchor",field:"tasticId",type:"string",translatable:!1,disabled:!0,default:"#"+this.tasticId}]}];if(e.schema)for(let n=0;n<e.schema.length;++n)t.push(e.schema[n]);this.schema=new f(t,this.configuration)}export(){return{tasticId:this.tasticId,tasticType:this.tasticType,configuration:this.schema.getConfiguration()}}};var F=class{constructor(e={}){if(this.cellId=e.cellId||p(),this.configuration=e.configuration||{},this.customConfiguration=e.customConfiguration||{},this.schema=new f([{name:"General settings",folded:!0,fields:[{label:"Name",field:"name",type:"string",translatable:!0},{label:"Layout element width",field:"size",type:"enum",values:E&&E.map(e=>({name:e.name,value:e.size})),default:12},{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0}]}],this.configuration),this.tastics=[],e.tastics&&e.tastics.length)for(let t=0;t<e.tastics.length;++t)this.tastics.push(new D(e.tastics[t]))}addTastic(e,t={},n=[],i=0){const r=new D({tasticType:e,configuration:t,schema:n});return this.tastics.splice(i,0,r),r}getTastic(e){for(let t of this.tastics)if(t.tasticId===e)return t;throw new Error("Could not find component with ID "+e)}getTasticCount(){return this.tastics.length}export(){return{cellId:this.cellId,configuration:this.schema.getConfiguration(),customConfiguration:this.customConfiguration,tastics:this.tastics.map(e=>e.export())}}};var N=class{constructor(e){if(!e.kitDefinitionId)throw new Error("Missing kitDefinitionId in "+JSON.stringify(e));this.kitDefinitionId=e.kitDefinitionId,this.kitId=e.kitId||p(),this.configuration=e.configuration||{}}export(){return{kitId:this.kitId,kitDefinitionId:this.kitDefinitionId,configuration:this.configuration}}};var M=class{constructor(e={}){if(this.regionId=e.regionId||p(),this.configuration=e.configuration||{},this.schema=new f([{name:"Responsive",folded:!0,fields:[{label:"Show on mobile",field:"mobile",type:"boolean",default:!0},{label:"Show on tablet",field:"tablet",type:"boolean",default:!0},{label:"Show on desktop",field:"desktop",type:"boolean",default:!0}]},{name:"Layout",fields:[{label:"Cell direction",field:"flexDirection",type:"enum",default:"row",values:[{value:"row",name:"Row"},{value:"column",name:"Column"},{value:"row-reverse",name:"Row (reversed)"},{value:"column-reverse",name:"Column (reversed)"}]},{label:"Cell wrapping",field:"flexWrap",type:"enum",default:"wrap",values:[{value:"nowrap",name:"No wrapping"},{value:"wrap",name:"Wrap cells"}]},{label:"Justify cells",field:"justifyContent",type:"enum",default:"space-between",values:[{value:"flex-start",name:"Put at beginning"},{value:"flex-end",name:"Put at end"},{value:"center",name:"Center Cells"},{value:"space-between",name:"Space between cells"},{value:"space-around",name:"Space around cells"},{value:"space-even",name:"Evenly spaced cells"}]},{label:"Cell alignment",field:"alignItems",type:"enum",default:"stretch",values:[{value:"flex-start",name:"Align to start"},{value:"flex-end",name:"Align to end"},{value:"center",name:"Center cells"},{value:"stretch",name:"Stretch cells"},{value:"baseline",name:"Align to baseline"}]},{label:"Align multiple cell rows",field:"alignContent",type:"enum",default:"space-between",values:[{value:"flex-start",name:"Put at beginning"},{value:"flex-end",name:"Put at end"},{value:"center",name:"Center rows"},{value:"stretch",name:"Stretch rows"},{value:"space-between",name:"Space between rows"},{value:"space-around",name:"Space around rows"}]}]}],this.configuration),this.elements=[],e.elements&&e.elements.length)for(let t=0;t<e.elements.length;++t)this.addElement(e.elements[t])}addElement(e){if(e.cellId)return this.addCell(e);if(e.kitId)return this.addKit(e);throw new TypeError("Unknown element type: "+JSON.stringify(e))}addCell(e){return this.elements.push(new F(e)),this.elements[this.elements.length-1]}addKit(e){return this.elements.push(new N(e)),this.elements[this.elements.length-1]}getElement(e){const t=Object.keys(e)[0],n=Object.values(e)[0];for(let e of this.elements)if(e[t]===n)return e;throw new Error("Could not find element with ID "+JSON.stringify(n))}getCells(){return this.elements.filter(e=>e instanceof F)}getKits(){return this.elements.filter(e=>e instanceof N)}export(){return{regionId:this.regionId,configuration:this.schema.getConfiguration(),elements:this.elements.map(e=>e.export())}}};var R=class{constructor(e={},t=[],n=[]){this.pageId=e.pageId||null,this.nodes=e.nodes||[],this.layoutId=e.layoutId||"three_rows",this.name=e.name||"Unnamed Page",this.regions={},this.tasticSchemas=(n||[]).map(e=>e.configurationSchema);for(let n=0;n<t.length;++n){let i=t[n];e.regions&&e.regions[i]&&e.regions[i].elements&&e.regions[i].elements.length&&(e.regions[i].elements=this.mapTastics(e.regions[i].elements)),this.createRegion(i,e.regions&&e.regions[i]||{})}}mapTastics(e){for(let t=0;t<e.length;++t){let n=e[t];if(n.cellId&&(n.tastics&&n.tastics.length))for(let e=0;e<n.tastics.length;++e){let t=n.tastics[e];t.schema={schema:[]};for(let e of this.tasticSchemas)if(e.tasticType===t.tasticType){t.schema=e.schema;break}}}return e}createRegion(e,t){t.regionId=e,this.regions[e]=new M(t)}getRegion(e){if(!this.regions[e])throw new Error("Region with identifier "+e+" unknown.");return this.regions[e]}addCell(e,t={}){return this.getRegion(e).addCell({configuration:t})}duplicateCell(e,t){const n=this.addCell(e,t.configuration);return t.tastics.forEach((t,i)=>{this.addTastic(e,n.cellId,t.tasticType,i,t.configuration)}),n}addKit(e,t){return this.getRegion(e).addKit(t)}findElement(e){const t=Object.keys(e)[0],n=Object.values(e)[0];for(let e in this.regions)for(let[i,r]of Object.entries(this.regions[e].elements))if(r[t]===n)return[e,+i];throw new Error("Could not find element with "+JSON.stringify(e))}hasElement(e){try{return!!this.findElement(e)}catch(e){return!1}}getElement(e){let[t,n]=this.findElement(e);return this.regions[t].elements[n]}removeElement(e){let[t,n]=this.findElement(e);this.regions[t].elements.splice(n,1)}moveElement(e,t){if(!this.regions[t.region])throw new Error("Unknown target region "+t.region);let[n,i]=this.findElement(e),r=this.regions[n].elements.splice(i,1)[0];this.regions[t.region].elements.splice(void 0===t.element?this.regions[t.region].elements.length:t.element-(n===t.region&&t.element>i?1:0),0,r)}addTastic(e,t,n,i,r={}){let o=null;for(let e of this.tasticSchemas)if(e.tasticType===n){o=e;break}return this.getRegion(e).getElement({cellId:t}).addTastic(n,r,o,i)}getTastics(){let e=[];return Object.values(this.regions).forEach(t=>{t.getCells().forEach(t=>{e=e.concat(t.tastics)})}),e}findTastic(e){for(let t in this.regions)for(let n=0;n<this.regions[t].elements.length;++n)for(let i in this.regions[t].elements[n].tastics||[]){if(this.regions[t].elements[n].tastics[i].tasticId===e)return[t,+n,+i]}throw new Error("Could not find tastic with id "+e)}hasTastic(e){try{return!!this.findTastic(e)}catch(e){return!1}}getTastic(e){let[t,n,i]=this.findTastic(e);return this.regions[t].elements[n].tastics[i]}removeTastic(e){let[t,n,i]=this.findTastic(e);this.regions[t].elements[n].tastics.splice(i,1)}moveTastic(e,t){let[n,i,r]=this.findTastic(e),o=this.regions[n].elements[i].tastics.splice(r,1)[0],[s,a]=this.findElement({cellId:t.cell});this.regions[s].elements[a].tastics.splice(void 0===t.tasticDropPosition?this.regions[s].elements[a].tastics.length:t.tasticDropPosition-(n===s&&i===a&&t.tasticDropPosition>=r?1:0),0,o)}duplicateTastic(e,t){const[n,,i]=this.findTastic(e),r=this.getTastic(e);return this.addTastic(n,t,r.tasticType,i+1,r.configuration)}export(){let e={};for(let[t,n]of Object.entries(this.regions))e[t]=n.export();return{pageId:this.pageId,nodes:this.nodes,layoutId:this.layoutId,name:this.name,regions:e}}};const P=(e,t,n,i)=>{i={resourceType:t,type:"upload",...i};let r=[];for(let[e,t]of Object.entries(i))switch(e){case"secure":case"resourceType":case"type":break;case"background":case"crop":case"fetch_format":case"gravity":case"height":case"quality":case"width":case"x":case"y":t&&r.push(e[0]+"_"+t);break;default:throw new Error("Unhandled image transformation "+e)}return r.sort(),`https://res.cloudinary.com/${n.cloudName}/${i.resourceType}/${i.type}/${r.join(",")}/${o=e,encodeURI(o).replace(/[?=]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}`;var o};var A=class{constructor(e){this.configuration={cloudName:e.cloudName}}getImageUrl(e,t,n,i={}){return P(e.mediaId,"string"==typeof e.resourceType&&""!==e.resourceType?e.resourceType:"image",this.configuration,{fetch_format:e.format&&"svg"===e.format?void 0:"auto",width:t,height:n,secure:!0,...this.getQuality(i),...this.getFetchFormat(i),...this.getGravityOptions(i),...this.cropOptions(i)})}getFetchImageUrl(e,t,n,i={}){return e.startsWith("//")&&(e="https:"+e),P(e,"image",this.configuration,{fetch_format:"auto",type:"fetch",width:t,height:n,secure:!0,...this.getQuality(i),...this.getFetchFormat(i),...this.getGravityOptions(i),...this.cropOptions(i)})}getImageUrlWithoutDefaults(e,t,n,i={}){return P(e.mediaId,"string"==typeof e.resourceType&&""!==e.resourceType?e.resourceType:"image",this.configuration,{width:t,height:n,...i})}getGravityOptions(e){if(e.crop)return{};let t={gravity:"faces:auto"};return e.gravity&&(t.gravity="custom"===e.gravity.mode?"xy_center":e.gravity.mode,e.gravity.coordinates&&(t.x=e.gravity.coordinates.x,t.y=e.gravity.coordinates.y)),t}cropOptions(e){let t={crop:"fill"};return e.crop&&(t.crop=e.crop),e.background&&(t.background=e.background),t}getQuality(e){let t={quality:"auto"};return e.quality&&(t.quality=e.quality),t}getFetchFormat(e){let t={};return e.fetch_format&&(t.fetch_format=e.fetch_format),e.fetchFormat&&(t.fetch_format=e.fetchFormat),t}};var _=class{constructor(){this.imageSizes=[16,32,64,128,256,512,1024,2048]}getImageDimensions(e,t,n,i=null,r=1){let o=this.getFloatRatio(e,i),s=t&&Math.round(+t*r),a=n&&Math.round(+n*r);return s&&i&&(a=Math.round(s*o)),a&&!s&&i&&(s=Math.round(a/o)),[s,a]}getFloatRatio(e=null,t=null){if(!t&&e&&e.width&&e.height)return e.height/e.width;const n=String(t).match(/([0-9]+):([0-9]+)/);return n?n[2]/n[1]:t}getImageLink(e,t,n,i,r,o={},s=1){let a=this.getMediaApi(t),[l,c]=this.getImageDimensions(e,n,i,r,s),u=l/c;if(["fill","pad"].includes(o.crop)){for(let e=0;e<this.imageSizes.length;++e)if(this.imageSizes[e]>=l){l=this.imageSizes[e];break}c=o.autoHeight?null:Math.ceil(l/u)}return"string"==typeof e?a.getFetchImageUrl(e,l,c,o):a.getImageUrl(e,l,c,o)}getMediaApi(e){switch(e.media.engine){case"cloudinary":return new A(e.media);default:throw new Error("No valid media API found.")}}static getElementDimensions(e){let t=0;if(getComputedStyle){let n=getComputedStyle(e);t+=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)}return{width:e.clientWidth-t,height:e.clientHeight}}},U=n(0),q={enum:U,localizedEnum:U},z=(e,t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),H=(e,t=null)=>{"undefined"!=typeof PRODUCTION&&PRODUCTION||"undefined"==typeof window||!window||!window.document||console.info("%c🗑 %cDeprecation Notice: %s %s","color: gray","color: orange",t?"["+(t.displayName||t.constructor.name)+"]":"",e)},W=(e,t,n=!1)=>{let i=!1;return function(){let r=this,o=arguments,s=function(){i=null,n||e.apply(r,o)},a=n&&!i;clearTimeout(i),i=setTimeout(s,t),a&&e.apply(r,o)}},L=(e,t)=>{let n=!1;return function(){n||(e.apply(this,arguments),n=!0,setTimeout((function(){n=!1}),t))}};var $=class{constructor(e,t={}){if(this.context={customer:"demo",idDebug:!1,endpoint:"preview",...e},this.messageHandlers=t,!this.context.previewId)throw new Error("context.previewId is required");this.webSocket=null,this.connected=!1,this.connectionFails=0,this.connect()}connect(){this.webSocket=new WebSocket((this.context.isDebug?"ws://":"wss://")+this.context.customer+".frontastic.io"+(this.context.isDebug?".local":"")+`:8080/ws?${this.context.endpoint}=${this.context.previewId}`),this.webSocket.onmessage=this.handleMessage.bind(this),this.webSocket.onopen=()=>{this.connectionFails=0,this.connected=!0},this.webSocket.onclose=()=>{this.webSocket=null,this.connected=!1,setTimeout(this.connect.bind(this),1e3*Math.min(++this.connectionFails,30))}}handleMessage(e){let t=JSON.parse(e.data);if("Ping"!==t.Name)return this.messageHandlers[t.Name]?this.messageHandlers[t.Name](t.Payload,t):void console.info("Unknown WebSocket message",t)}sendMessage(e,t=!1){if(e.Channel=this.context.previewId,e.Payload=e.Payload||[],this.connected)return this.webSocket.send(JSON.stringify(e));t&&setTimeout(()=>{this.sendMessage(e,!0)},100)}close(){this.webSocket.onclose=()=>{},this.webSocket.close()}};n.d(t,"ConfigurationSchema",(function(){return f})),n.d(t,"DefaultSchemas",(function(){return h})),n.d(t,"generateId",(function(){return p})),n.d(t,"getTranslation",(function(){return y})),n.d(t,"httpBuildQuery",(function(){return k})),n.d(t,"httpParseQuery",(function(){return x})),n.d(t,"isTranslatableByDefault",(function(){return b})),n.d(t,"shouldFieldBeTranslated",(function(){return w})),n.d(t,"registerServiceWorker",(function(){return C})),n.d(t,"VisibilityChange",(function(){return j})),n.d(t,"cellDimensions",(function(){return E})),n.d(t,"Cell",(function(){return F})),n.d(t,"Page",(function(){return R})),n.d(t,"Region",(function(){return M})),n.d(t,"Tastic",(function(){return D})),n.d(t,"MediaApi",(function(){return _})),n.d(t,"FacetTypeSchemaMap",(function(){return q})),n.d(t,"omit",(function(){return z})),n.d(t,"deprecate",(function(){return H})),n.d(t,"debounce",(function(){return W})),n.d(t,"throttle",(function(){return L})),n.d(t,"Notifier",(function(){return $}))}])}));
@@ -4,9 +4,9 @@ const cloudinaryEncodeURI = (string) => {
4
4
  })
5
5
  }
6
6
 
7
- const cloudinaryUrl = (imageIdentifier, configuration, options) => {
7
+ const cloudinaryUrl = (imageIdentifier, resourceType, configuration, options) => {
8
8
  options = {
9
- resourceType: 'image',
9
+ resourceType: resourceType,
10
10
  type: 'upload',
11
11
  ...options,
12
12
  }
@@ -51,6 +51,7 @@ class Cloudinary {
51
51
  getImageUrl (media, width, height, options = {}) {
52
52
  return cloudinaryUrl(
53
53
  media.mediaId,
54
+ typeof media.resourceType === 'string' && media.resourceType !== '' ? media.resourceType : 'image',
54
55
  this.configuration,
55
56
  {
56
57
  fetch_format: media.format && media.format === 'svg' ? undefined : 'auto',
@@ -73,6 +74,7 @@ class Cloudinary {
73
74
 
74
75
  return cloudinaryUrl(
75
76
  url,
77
+ 'image',
76
78
  this.configuration,
77
79
  {
78
80
  fetch_format: 'auto',
@@ -91,6 +93,7 @@ class Cloudinary {
91
93
  getImageUrlWithoutDefaults (media, width, height, options = {}) {
92
94
  return cloudinaryUrl(
93
95
  media.mediaId,
96
+ typeof media.resourceType === 'string' && media.resourceType !== '' ? media.resourceType : 'image',
94
97
  this.configuration,
95
98
  {
96
99
  width: width,
@@ -51,9 +51,22 @@
51
51
  "tree"
52
52
  ]
53
53
  }
54
- }
54
+ },
55
+ "anyOf": [
56
+ {
57
+ "not": {
58
+ "properties": {
59
+ "type": {
60
+ "enum": ["enum"]
61
+ }
62
+ },
63
+ "required": ["type"]
64
+ }
65
+ },
66
+ { "required": ["values"] }
67
+ ]
55
68
  },
56
- {"$ref": "#/definitions/field"}
69
+ { "$ref": "#/definitions/field" }
57
70
  ]
58
71
  },
59
72
  {
@@ -66,7 +79,7 @@
66
79
  }
67
80
  }
68
81
  },
69
- {"$ref": "#/definitions/group"}
82
+ { "$ref": "#/definitions/group" }
70
83
  ]
71
84
  },
72
85
  {
@@ -79,7 +92,7 @@
79
92
  }
80
93
  }
81
94
  },
82
- {"$ref": "#/definitions/tastic"}
95
+ { "$ref": "#/definitions/tastic" }
83
96
  ]
84
97
  },
85
98
  {
@@ -92,7 +105,7 @@
92
105
  }
93
106
  }
94
107
  },
95
- {"$ref": "#/definitions/image"}
108
+ { "$ref": "#/definitions/image" }
96
109
  ]
97
110
  },
98
111
  {
@@ -105,13 +118,14 @@
105
118
  }
106
119
  }
107
120
  },
108
- {"$ref": "#/definitions/description"}
121
+ { "$ref": "#/definitions/description" }
109
122
  ]
110
123
  }
111
124
  ]
112
125
  }
113
126
  },
114
127
 
128
+
115
129
  "field": {
116
130
  "type": "object",
117
131
  "properties": {
@@ -178,7 +192,7 @@
178
192
  "type": "string"
179
193
  }
180
194
  },
181
- "required": ["field", "type", "label"]
195
+ "required": ["type", "label", "field"]
182
196
  },
183
197
  "group": {
184
198
  "type": "object",