@frontastic/common 2.33.1 → 2.33.4

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,84 +1,94 @@
1
- # common Changelog
2
1
 
3
- ## `2.33.1` (2022-04-21)
2
+ ## Version 2.33.4 (2022-05-17)
3
+
4
+ * fix: used correct format on Changelog for catwalk and common
5
+ ## Version 2.33.3 (2022-05-12)
6
+
7
+ * Prevent enum fields without values field to exist
8
+
9
+ ## Version 2.33.2 (2022-05-05)
10
+
11
+ * fix(FP-1934): Pagination previous/nextCursor set to null on count 0.
12
+
13
+ ## Version 2.33.1 (2022-04-21)
4
14
 
5
15
  * chore: re-run release process
6
16
 
7
- ## `2.33.0` (2022-04-21)
17
+ ## Version 2.33.0 (2022-04-21)
8
18
 
9
19
  * fix: add a missing @required statements
10
20
  * feat: enhance TypeScript map types
11
21
  * fix: correct type hints for translatable text
12
22
 
13
- ## `2.33.0` (2022-04-21)
23
+ ## Version 2.33.0 (2022-04-21)
14
24
 
15
25
  * fix: add a missing @required statements
16
26
  * feat: enhance TypeScript map types
17
27
  * fix: correct type hints for translatable text
18
28
 
19
- ## `2.32.0` (2022-04-13)
29
+ ## Version 2.32.0 (2022-04-13)
20
30
 
21
31
  * fix: rehused cart on api test order
22
32
  * fix: added salutaion to api test address.
23
33
  * feat(FP-840): included cart rawApiData when placing order in Shopware
24
34
 
25
- ## `2.31.2` (2022-04-11)
35
+ ## Version 2.31.2 (2022-04-11)
26
36
 
27
37
  * fix: Categories with same name are returned
28
38
 
29
- ## `2.31.1` (2022-04-08)
39
+ ## Version 2.31.1 (2022-04-08)
30
40
 
31
41
  * fix: prevent bc break on commercetools CartApi
32
42
 
33
- ## `2.31.0` (2022-04-07)
43
+ ## Version 2.31.0 (2022-04-07)
34
44
 
35
45
  * feat(FP-1794): extracted logic to validate cart status before checkout
36
46
 
37
- ## `2.30.1` (2022-04-07)
47
+ ## Version 2.30.1 (2022-04-07)
38
48
 
39
49
  * fix(FP-1794): consider only single successful payment as payment completed
40
50
  * fix(FP-1794): moved cart readines validation to isReadyForCheckout
41
51
  * fix(FP-1794): validated if cart is completed
42
52
 
43
- ## `2.30.0` (2022-04-05)
53
+ ## Version 2.30.0 (2022-04-05)
44
54
 
45
55
  * feat: allow field type dataSource in Classic as well
46
56
 
47
- ## `2.29.0` (2022-03-30)
57
+ ## Version 2.29.0 (2022-03-30)
48
58
 
49
59
  * feat(FP-1647): included machine region map in CustomerService
50
60
  * feat(FP-1647): implemented region selector base on customer config
51
61
 
52
- ## `2.28.2` (2022-03-29)
62
+ ## Version 2.28.2 (2022-03-29)
53
63
 
54
64
  * fix(FP-1694): checked mapped orders on default deprecated decorator
55
65
 
56
- ## `2.28.1` (2022-03-28)
66
+ ## Version 2.28.1 (2022-03-28)
57
67
 
58
68
  * fix(FP-1694): checked mapped orders on default decorators
59
69
 
60
- ## `2.28.0` (2022-03-22)
70
+ ## Version 2.28.0 (2022-03-22)
61
71
 
62
72
  * refactor(FP-1122): Make logic for handling single-attribute sorting the same as multi-attribute
63
73
  * feat(FP-1122): Add sort by custom attribute functionality to Algolia integration
64
74
 
65
- ## `2.27.1` (2022-03-17)
75
+ ## Version 2.27.1 (2022-03-17)
66
76
 
67
77
  * fix: fix issue from studio-deployment-branch
68
78
 
69
- ## `2.27.0` (2022-03-15)
79
+ ## Version 2.27.0 (2022-03-15)
70
80
 
71
81
  * feat(FP-1486): upgrade Shopify version to latest stable version 2022-01
72
82
 
73
- ## `2.26.0` (2022-03-10)
83
+ ## Version 2.26.0 (2022-03-10)
74
84
 
75
85
  * feat: add GraphCMS client factory
76
86
 
77
- ## `2.25.4` (2022-03-07)
87
+ ## Version 2.25.4 (2022-03-07)
78
88
 
79
89
  * misc: allowed ramsey/uuid library version ^4 as dependency
80
90
 
81
- ## `2.25.3` (2022-03-02)
91
+ ## Version 2.25.3 (2022-03-02)
82
92
 
83
93
  * fix(api-hub): replace content api with dummy for nextjs projects
84
94
  * fix(api-hub): replace wishlist api with dummy for nextjs
@@ -88,16 +98,16 @@
88
98
  * fix(api-hub): add dummy for AccountApi
89
99
  * fix(api-hub): fix syntax and add parameter to factory config
90
100
 
91
- ## `2.25.2` (2022-02-15)
101
+ ## Version 2.25.2 (2022-02-15)
92
102
 
93
103
  * fix(FP-775): Minor refactor, import of SprykerAddress
94
104
  * fix(FP-755): Fix Spryker address
95
105
 
96
- ## `2.25.1` (2022-01-27)
106
+ ## Version 2.25.1 (2022-01-27)
97
107
 
98
108
  * fix: if there's no filter chosen - the error reappears
99
109
 
100
- ## `2.25.0` (2022-01-24)
110
+ ## Version 2.25.0 (2022-01-24)
101
111
 
102
112
  * fix(FP-838): improved error handling on parse locator for Shopware
103
113
  * feat(FP-838): prevent update email, shipping address, or billing address on Shopware CartApi
@@ -111,17 +121,17 @@
111
121
  * feat(FP-838): upgrade add, update, and remove item to cart on Shopware CartApi
112
122
  * feat(FP-838): upgrade get anonymous cart and get cart by id on Shopware
113
123
 
114
- ## `2.24.0` (2022-01-05)
124
+ ## Version 2.24.0 (2022-01-05)
115
125
 
116
126
  * feat(FP-324): Include User-Agent Frontastic as part of API requests
117
127
 
118
- ## `2.23.0` (2021-12-16)
128
+ ## Version 2.23.0 (2021-12-16)
119
129
 
120
130
  * feat: Created method for CustomDataSourceValidation in the CustomDataSourceService
121
131
  * feat: Store the stream type for stream fields
122
132
  * feat: Introduced a special field configuration for stream fields
123
133
 
124
- ## `2.22.0` (2021-12-02)
134
+ ## Version 2.22.0 (2021-12-02)
125
135
 
126
136
  * feat(FP-1193): included rawApiImput on getProduct
127
137
  * feat(FP-581): refresh account after update address on Shopify
@@ -130,52 +140,51 @@
130
140
  * fix(FP-1193): added url schema simbols
131
141
  * feat!(FP-1193): upgrade and fix shopify version to 2021-10
132
142
 
133
- ## `2.21.1` (2021-11-30)
143
+ ## Version 2.21.1 (2021-11-30)
134
144
 
135
145
  * fix: make product price nullable in Algolia integration
136
146
 
137
- ## `2.21.0` (2021-10-26)
147
+ ## Version 2.21.0 (2021-10-26)
138
148
 
139
149
  * !feat(FP-646): implemented traceability strategy adding a correlation-id to all requests and responses
140
150
  * fix: Nested groups were not visited correctly in ConfigurationSchema.
141
151
 
142
- ## `2.20.1` (2021-10-21)
152
+ ## Version 2.20.1 (2021-10-21)
143
153
 
144
154
  * fix: return a 400 json response on type error of dynamic pages
145
155
 
146
- ## `2.20.0` (2021-10-11)
147
-
156
+ ## Version 2.20.0 (2021-10-11)
148
157
 
149
158
  * Catwalk version update
150
159
 
151
- ## `2.19.3` (2021-10-07)
160
+ ## Version 2.19.3 (2021-10-07)
152
161
 
153
162
  * fix(api-hub): disable deprecation notice in prod
154
163
  * fix(api-hub): only output deprecation notice in non-prod-env
155
164
  * fix: Keep old previewUrl config working properly
156
165
  * feat: Allow for different view and endpoint URLs for preview
157
166
 
158
- ## `2.19.2` (2021-09-23)
167
+ ## Version 2.19.2 (2021-09-23)
159
168
 
160
169
  * Always use plain json_decode for decoding CT responses
161
170
 
162
- ## `2.19.1` (2021-09-09)
171
+ ## Version 2.19.1 (2021-09-09)
163
172
 
164
173
  * fix(FP-980): validated result to catch no active carts in Shopify
165
174
 
166
- ## `2.19.0` (2021-09-08)
175
+ ## Version 2.19.0 (2021-09-08)
167
176
 
168
177
  * fix: Keep unknown field values in completed configuration fields.
169
178
 
170
- ## `2.18.2` (2021-09-04)
179
+ ## Version 2.18.2 (2021-09-04)
171
180
 
172
181
  * fix: Handle documentary fields properly.
173
182
 
174
- ## `2.18.1` (2021-09-03)
183
+ ## Version 2.18.1 (2021-09-03)
175
184
 
176
- * chore: bumped version required of frontastic/catwalk to 1.17
185
+ * chore: bumped version required of frontastic/catwalk to 1.17
177
186
 
178
- ## `2.18.0` (2021-09-03)
187
+ ## Version 2.18.0 (2021-09-03)
179
188
 
180
189
  * feat(FP-935): Submit current field path to visitors.
181
190
  * feat(fp-935): Fixed potential construction issue through `new static()`
@@ -194,16 +203,16 @@
194
203
  * feat(fp-935): Migrated more tests to code lang independent format.
195
204
  * feat(fp-935): Extracted first config tests into code independant format.
196
205
 
197
- ## `2.17.2` (2021-08-26)
206
+ ## Version 2.17.2 (2021-08-26)
198
207
 
199
208
  * fix(FP-932): modified array key validation
200
209
  * feat(FP-932): mapped missing variant properties in Algolia
201
210
 
202
- ## `2.17.1` (2021-08-26)
211
+ ## Version 2.17.1 (2021-08-26)
203
212
 
204
213
  * chore: bumped version required of frontastic/catwalk to 1.16
205
214
 
206
- ## `2.17.0` (2021-08-26)
215
+ ## Version 2.17.0 (2021-08-26)
207
216
 
208
217
  * feat(FP-932): get default language from project config in Algolia
209
218
  * feat(FP-932): set algolia library as suggested on composer
@@ -225,15 +234,15 @@
225
234
  * feat(FP-932): use key label structure for Attributes values
226
235
  * feat(FP-932): implemented getSearchAttributes for Algolia
227
236
 
228
- ## `2.16.2` (2021-08-19)
237
+ ## Version 2.16.2 (2021-08-19)
229
238
 
230
239
  * Revert "fix: adds frontasticBasicAuthPassword to exclude list"
231
240
 
232
- ## `2.16.1` (2021-08-17)
241
+ ## Version 2.16.1 (2021-08-17)
233
242
 
234
243
  * fix: adds frontasticBasicAuthPassword to exclude list
235
244
 
236
- ## `2.16.0` (2021-08-04)
245
+ ## Version 2.16.0 (2021-08-04)
237
246
 
238
247
  * feat(FP-839): used integer for price filters
239
248
  * feat(FP-839): included price filter and facets on Shopware
@@ -244,11 +253,11 @@
244
253
  * feat(FP-839): get group from common groupId field
245
254
  * fix(FP-839): reused client request for both queries
246
255
 
247
- ## `2.15.0` (2021-07-29)
256
+ ## Version 2.15.0 (2021-07-29)
248
257
 
249
258
  * feat: enhancing tideways logging for GraphCMS adding Cache status header as well as RequestId
250
259
 
251
- ## `2.14.0` (2021-07-20)
260
+ ## Version 2.14.0 (2021-07-20)
252
261
 
253
262
  * feat(FP-837): set API test credential for Shopware 6.4
254
263
  * feat(FP-837): used php comparation for API version on Shopware
@@ -262,28 +271,28 @@
262
271
  * feat(FP-837): handle elements and data fiels on Account and Project mappers on Shopware
263
272
  * feat(FP-837): upgraded project config endpoints to store-api on Shopware
264
273
 
265
- ## `2.13.4` (2021-07-13)
274
+ ## Version 2.13.4 (2021-07-13)
266
275
 
267
276
  * fix: strip API version on Shopware store-api
268
277
  * chore: replaced authToken by apiToken on Shopify
269
278
  * chore: replaced authToken by apiToken on Spryker
270
279
 
271
- ## `2.13.3` (2021-07-08)
280
+ ## Version 2.13.3 (2021-07-08)
272
281
 
273
282
  * fix(FP-830): replaced authToken by apiToken on Shopware
274
283
  * feat: deprecated authToken in favor of apiToken.
275
284
  * fix: specify api version on Shopware
276
285
 
277
- ## `2.13.2` (2021-07-06)
286
+ ## Version 2.13.2 (2021-07-06)
278
287
 
279
288
  * fix(FP-830): keep authToken on refresh account for Shopware
280
289
 
281
- ## `2.13.1` (2021-07-01)
290
+ ## Version 2.13.1 (2021-07-01)
282
291
 
283
292
  * refactor: set Spryker cart test credentials as generic
284
293
  * fix: Allow empty local to be parsed on Spryker
285
294
 
286
- ## `2.13.0` (2021-06-23)
295
+ ## Version 2.13.0 (2021-06-23)
287
296
 
288
297
  * chore(FT-731): removed unnecessary array_merge
289
298
  * feat(FP-731): login customer after reset account password on Shopware
@@ -293,36 +302,36 @@
293
302
  * feat(FP-731): refresed account base on email on Shopware
294
303
  * feat(FP-731): implemented account creation and confirmation on Shopware
295
304
 
296
- ## `2.12.0` (2021-06-15)
305
+ ## Version 2.12.0 (2021-06-15)
297
306
 
298
307
  * feat: Added Ganesha based curcuit breaker for our HTTP client stack
299
308
 
300
- ## `2.11.10` (2021-06-14)
309
+ ## Version 2.11.10 (2021-06-14)
301
310
 
302
311
  * chore: increased symfony minor version
303
312
  * fix: implemented AccountApi::getSalutations on Shopware
304
313
 
305
- ## `2.11.9` (2021-05-28)
314
+ ## Version 2.11.9 (2021-05-28)
306
315
 
307
316
  * fix(FP-728): keeped original and masterData as dangerousInner on Commercetools
308
317
 
309
- ## `2.11.8` (2021-05-28)
318
+ ## Version 2.11.8 (2021-05-28)
310
319
 
311
320
  * fix: validated relations before map them in Spryker
312
321
  * fix: remove scope from client call
313
322
  * fix: implemented CartApi::setShippingMethod on Shopware integration
314
323
 
315
- ## `2.11.7` (2021-05-18)
324
+ ## Version 2.11.7 (2021-05-18)
316
325
 
317
326
  * fix(FP-709): moved cart validation to Shopware integration
318
327
  * fix(FP-709): included addresses and email into cart on Spryker
319
328
  * fix(FP-709): moved cart validation to Commercetools integration
320
329
 
321
- ## `2.11.6` (2021-05-13)
330
+ ## Version 2.11.6 (2021-05-13)
322
331
 
323
332
  * fix(FP-691): returned empty response if content by id is query on GraphCMS
324
333
 
325
- ## `2.11.5` (2021-05-11)
334
+ ## Version 2.11.5 (2021-05-11)
326
335
 
327
336
  * fix(FP-695): validated empty nodes before access data in Shopify
328
337
  * feat(backstage): latest terminology typo fix
@@ -331,16 +340,16 @@
331
340
  * feat(backstage): latest copy updates
332
341
  * feat: tastics term in studio
333
342
 
334
- ## `2.11.4` (2021-04-29)
343
+ ## Version 2.11.4 (2021-04-29)
335
344
 
336
345
  * fix(FP-624): moved variant SKU method to Shopify integration
337
346
  * fix(FP-624): validated product returned when filtered by SKUs in Shopify
338
347
 
339
- ## `2.11.3` (2021-04-29)
348
+ ## Version 2.11.3 (2021-04-29)
340
349
 
341
350
  * misc: Tests for CustomerService.
342
351
 
343
- ## `2.11.2` (2021-04-27)
352
+ ## Version 2.11.2 (2021-04-27)
344
353
 
345
354
  * fix(FP-645): included host and status code to Contentful logs
346
355
  * fix(FP-645): decorated Contentful client to enhance logger
@@ -348,93 +357,93 @@
348
357
  * fix(FP-645): set default timeout and logger on Contentful client
349
358
  * fix: Find version manually
350
359
 
351
- ## `2.11.1` (2021-04-22)
360
+ ## Version 2.11.1 (2021-04-22)
352
361
 
353
362
  * fix: Fix the /api/version SystemController to use version parameter bag
354
363
  * fix: Fix the /api/version SystemController parameter bag
355
364
 
356
- ## `2.11.0` (2021-04-20)
365
+ ## Version 2.11.0 (2021-04-20)
357
366
 
358
367
  * feat(FP-617): exposed authorization url on project config for commercetools
359
368
 
360
- ## `2.10.13` (2021-04-13)
369
+ ## Version 2.10.13 (2021-04-13)
361
370
 
362
371
  * fix: fixed unit test for Content
363
372
  * fix(606): included Content slug on GraphCMS
364
373
  * fix(606): validate content attribute key before fetch
365
374
  * misc: included API test to place order for logged in user
366
375
 
367
- ## `2.10.12` (2021-04-08)
376
+ ## Version 2.10.12 (2021-04-08)
368
377
 
369
378
  * fix(FP-567): handle client exceptions and skip Union types
370
379
  * fix(FP-363): Shopify API, use existing account with token and remove returned address on create
371
380
  * fix(FP-363): API to add address on customer create and unit tests for create update adjustment
372
381
 
373
- ## `2.10.11` (2021-03-30)
382
+ ## Version 2.10.11 (2021-03-30)
374
383
 
375
384
  * fix: Remove phpcpd from all projects
376
385
 
377
- ## `2.10.10` (2021-03-23)
386
+ ## Version 2.10.10 (2021-03-23)
378
387
 
379
388
  * fix(FP-96): migrated and updated implementation for shipping methods on Shopware
380
389
  * fix(FP-84): used alias on category facet and set missing definition
381
390
  * fix: Use proper AccessDeniedException
382
391
 
383
- ## `2.10.9` (2021-03-10)
392
+ ## Version 2.10.9 (2021-03-10)
384
393
 
385
394
  * fix(FP-458): used config from engine and include query as part of Result
386
395
  * chore(FP-458): removed unused max offset
387
396
  * fix(FP-458): exposed max offset in project.yml and validated before query
388
397
  * fix(FP-458): created maximum offset and validate Product queries againts it on Commercetools
389
398
 
390
- ## `2.10.8` (2021-03-09)
399
+ ## Version 2.10.8 (2021-03-09)
391
400
 
392
401
  * chore(FP-447): improved documentation and log messages
393
402
  * fix(FP-447): throw and handle Cart not active exception
394
403
  * fix(FP-447): get existing cart for logged in customer in Shopify
395
404
 
396
- ## `2.10.7` (2021-03-04)
405
+ ## Version 2.10.7 (2021-03-04)
397
406
 
398
407
  * fix(FP-447): cart regenerated if is already completed on Shopify
399
408
  * fix: validate version and category index before map
400
409
 
401
- ## `2.10.6` (2021-03-02)
410
+ ## Version 2.10.6 (2021-03-02)
402
411
 
403
412
  * fix(FP-249): added address on account creation for Commercetools
404
413
 
405
- ## `2.10.5` (2021-03-01)
414
+ ## Version 2.10.5 (2021-03-01)
406
415
 
407
416
  * fix(FP-395): implemented build query for next page and calculate last (#623)
408
417
  * fix: fix E_NOTICE on product not found
409
418
 
410
- ## `2.10.4` (2021-02-25)
419
+ ## Version 2.10.4 (2021-02-25)
411
420
 
412
421
  * fix: stan errors
413
422
 
414
- ## `2.10.3` (2021-02-23)
423
+ ## Version 2.10.3 (2021-02-23)
415
424
 
416
425
  * fix(FP-389): included discounts on LineItems and mapped data for Commercetools
417
426
  * fix: removed decoded exceptions in favor of fallback on php native decoder
418
427
 
419
- ## `2.10.2` (2021-02-19)
428
+ ## Version 2.10.2 (2021-02-19)
420
429
 
421
430
  * fix: removed cartApi extra argument from BaseImplementationAdapterV2
422
431
 
423
- ## `2.10.1` (2021-02-19)
432
+ ## Version 2.10.1 (2021-02-19)
424
433
 
425
434
  * fix(FP-364): fixed unit test inlcuding dangerousInnerShippingMethod to expected data
426
435
  * fix(FP-364): extended shipping method query and map localization zone
427
436
 
428
- ## `2.10.0` (2021-02-18)
437
+ ## Version 2.10.0 (2021-02-18)
429
438
 
430
439
  * feat(FP-81): included documentation of rawApiInput fields from Commercetools on Wishlist
431
440
  * fix(FP-335): extended Wishlist from ApiDataObject
432
441
  * feat(FP-81): included documentation of rawApiInput fields from Commercetools
433
442
  * Feat: JavaScript based Decorators
434
443
 
435
- ## `1.9.5` (2021-02-18)
444
+ ## Version 1.9.5 (2021-02-18)
436
445
 
437
- ## `2.9.0` (2021-02-16)
446
+ ## Version 2.9.0 (2021-02-16)
438
447
 
439
448
  * fix(FP-323): mapped discount for product discounts
440
449
  * fix: added attributes response on after event for getSearchableAttributes
@@ -442,41 +451,42 @@
442
451
  * fix: used ContentApi instead of WishlistApi as aggreageted on LifecycleEventDecorator
443
452
  * feat: included BaseImplementation for ProductSearchApi and deprecated duplicated methods in ProductApi
444
453
 
445
- ## `2.8.0` (2021-02-11)
454
+ ## Version 2.8.0 (2021-02-11)
446
455
 
447
456
  * feat: Update ShopifyCartApi.php
448
457
  * feat: add compareAtPriceV2 on Shopify product variants
449
458
 
450
- ## `2.7.2` (2021-02-11)
459
+ ## Version 2.7.2 (2021-02-11)
451
460
 
452
461
  * fix: Return empty array to unblock the customer
453
462
 
454
- ## `2.7.1` (2021-02-02)
463
+ ## Version 2.7.1 (2021-02-02)
455
464
 
456
465
  * chore: included the conflict version with catwalk on common/composer.json
457
466
 
458
- ## `2.7.0` (2021-02-02)
467
+ ## Version 2.7.0 (2021-02-02)
459
468
 
460
469
  * !feat(fp-90) catwalk controllers (#580)
461
470
  * feat: included shipping info id for CommerceTools
462
471
 
463
- ## `2.6.1` (2021-01-27)
472
+ ## Version 2.6.1 (2021-01-27)
464
473
 
465
474
  * fix: removed shipping or billing fields dependency to set shippingMethodName
466
475
  * fix(FP-150): returned ShippingMethod in getAvailableShippingMethods for Shopify
467
476
 
468
- ## `2.6.0` (2021-01-20)
477
+ ## Version 2.6.0 (2021-01-20)
469
478
 
470
479
  * feat(FT-545): implemented shipping methods for a given cart on Spryker
471
480
 
472
- ## `2.5.1` (2021-01-20)
481
+ ## Version 2.5.1 (2021-01-20)
473
482
 
474
483
  * fix: Missed adaption to OrderIdGeneratorV2.
475
484
  * feat(FT-590): upgrade Shopify version on API test and include SEO fields on product
476
485
 
477
- ## `2.5.0` (2021-01-18)
486
+ ## Version 2.5.0 (2021-01-18)
478
487
 
479
- * fix(563): revert change to tests and add typecasting into Spryker CatalogSearchQuery to ensure that categoryId will be an int
488
+ * fix(563): revert change to tests and add typecasting into Spryker CatalogSearchQuery to ensure that categoryId will be
489
+ an int
480
490
  * feat: included metafields on Shopify product variants
481
491
  * feat(FT-581): mapped rates and locations on ShippingRates for Commercetools
482
492
  * fix: Consistency for toString() methods on ProductApi\Locale.
@@ -491,7 +501,7 @@
491
501
  * feat(cart-defaults): Options for CommerceTools cart defaults.
492
502
  * feat(CartFetcher): CartFetcher as unified entrance to loading a cart.
493
503
 
494
- ## `2.4.0` (2021-01-14)
504
+ ## Version 2.4.0 (2021-01-14)
495
505
 
496
506
  * feat(cart-defaults): Options for CommerceTools cart defaults.
497
507
  * feat(FT-506): implemented setEmail for Spryker
@@ -499,26 +509,27 @@
499
509
  * fix(FT-563): add if-else condition depending on current customer to change behavior for Spryker
500
510
  * feat(FT-457): included Shopify product images to each variant
501
511
 
502
- ## `2.3.0` (2021-01-06)
512
+ ## Version 2.3.0 (2021-01-06)
503
513
 
504
514
  * feat(FT-544): implemented cart available shipping methods
505
515
  * fix(shopify): mapped variant stock from quantityAvailable and included availableForSale
506
516
  * feat(FT-470): Mapped shipping discounted price when present
507
517
 
508
- ## `2.2.1` (2020-12-18)
518
+ ## Version 2.2.1 (2020-12-18)
509
519
 
510
520
  * fix: removed extra comma at the end of parameter list
511
521
 
512
- ## `2.2.0` (2020-12-18)
522
+ ## Version 2.2.0 (2020-12-18)
513
523
 
514
524
  * fix: added missing default language
515
525
  * feat(FT-532): extracted Wishlist Api interface
516
526
  * feat(FT-532): extracted Cart Api interface
517
527
  * feat(FT-532): extracted Account Api interface
518
- * fix(FT-540): make defaultLanguage in Spryker Product Search API bundle non-nullable, but make localeString in parseLocaleString nullable
528
+ * fix(FT-540): make defaultLanguage in Spryker Product Search API bundle non-nullable, but make localeString in
529
+ parseLocaleString nullable
519
530
  * fix(FT-540): Fix SprykerProductSearchApi, add usage of forLanguage to have locale included into products search
520
531
 
521
- ## `2.1.0` (2020-12-14)
532
+ ## Version 2.1.0 (2020-12-14)
522
533
 
523
534
  * Fix missing namespace
524
535
  * Update json calls around wrapper
@@ -538,7 +549,7 @@
538
549
  * fix: Remaining dependencies to work with common 2.0
539
550
  * fix: Set composer platform to PHP 7.4
540
551
 
541
- ## `2.0.0` (2020-11-27)
552
+ ## Version 2.0.0 (2020-11-27)
542
553
 
543
554
  * feat(tax): included tax class and implementation fro Commercetools
544
555
  * feat!(ShippingMethod): API enhancement for fetching shipping methods. (#420)
@@ -562,14 +573,14 @@
562
573
  * feat(shopify): included descriptionHtml and images to Product query
563
574
  * feat(ApiBase): implemented CartApiBase on Spryker
564
575
 
565
- ## `1.1.20` (2020-11-26)
576
+ ## Version 1.1.20 (2020-11-26)
566
577
 
567
578
  * fix: Correct bundle references
568
579
  * refactor: removed duplicated tests
569
580
  * [FT-442] Migrate DataObjects to ApiDataObjects
570
581
  * fix: set right test name on AnonymousCart
571
582
 
572
- ## `1.1.19` (2020-11-13)
583
+ ## Version 1.1.19 (2020-11-13)
573
584
 
574
585
  * chore: Built release 2020.11.13.11.34
575
586
  * fix(shopify): Used lowecase for variant attributes
@@ -585,7 +596,7 @@
585
596
  * fix(shopware): Commented invalid attributes for Shopware v2 and v3
586
597
  * feat(shopify): Implemented facet filters for tags and product types
587
598
 
588
- ## `1.1.18` (2020-11-04)
599
+ ## Version 1.1.18 (2020-11-04)
589
600
 
590
601
  * fix(spryker): Included abstract decription
591
602
  * fix(spryker): Counted items returned
@@ -595,7 +606,7 @@
595
606
  * fix(spryker): Removed mapImages overwrited implementation
596
607
  * fix(spryker): Set valid variant sku
597
608
 
598
- ## `1.1.17` (2020-10-30)
609
+ ## Version 1.1.17 (2020-10-30)
599
610
 
600
611
  * fix(spryker): Returned orignal account if not possible to be refreshed with no authToken
601
612
  * fix: don't enforce tax category in Commercetools
@@ -603,7 +614,7 @@
603
614
  * fix(spryker): Removed verifyEmail as non part of AccountAPI abstraction
604
615
  * fix(spryker): Returned email as part of reset account
605
616
 
606
- ## `1.1.16` (2020-10-16)
617
+ ## Version 1.1.16 (2020-10-16)
607
618
 
608
619
  * fix(productSearchApi): Remove URL decoding for Findologic provided URLs
609
620
  * fix(productSearchApi): Remove redundant code from FindologicClientFactory
@@ -620,12 +631,12 @@
620
631
  * fix: Only set fetch_format when needed
621
632
  * chore: Extracted common webspocket code
622
633
 
623
- ## `1.1.15` (2020-10-13)
634
+ ## Version 1.1.15 (2020-10-13)
624
635
 
625
636
  * fix: Do not cast null values in media library to numeric
626
637
  * fix: Set whislist as not implemented for Shopify
627
638
 
628
- ## `1.1.14` (2020-10-07)
639
+ ## Version 1.1.14 (2020-10-07)
629
640
 
630
641
  * fix(shopify): Used only SKU values on variant.sku mapping
631
642
  * fix: Import deprecate helper in a way it also works in tests
@@ -717,7 +728,7 @@
717
728
  * Fixed type hint
718
729
  * Flagged types
719
730
 
720
- ## `1.1.13` (2020-10-02)
731
+ ## Version 1.1.13 (2020-10-02)
721
732
 
722
733
  * fix: Removed cartId validation on testAPI
723
734
  * chore: Refactored withCurrency method as appendCurrencyToUrl
@@ -801,23 +812,23 @@
801
812
  * Fixed type hint
802
813
  * Flagged types
803
814
 
804
- ## `1.1.12` (2020-10-01)
815
+ ## Version 1.1.12 (2020-10-01)
805
816
 
806
817
  * feat: Shopify CartApi & AccountApi
807
818
 
808
- ## `1.1.11` (2020-09-17)
819
+ ## Version 1.1.11 (2020-09-17)
809
820
 
810
821
  * feat!: Use the product search API
811
822
  * feat: Add ShopifyProductSearchApi
812
823
  * feat: Call product event listeners
813
824
  * chore: Extracted common webspocket code
814
825
 
815
- ## `1.1.10` (2020-09-15)
826
+ ## Version 1.1.10 (2020-09-15)
816
827
 
817
828
  * Regenerated API documentation
818
829
  * Generated TypeScript types for catwalk & common domain models
819
830
 
820
- ## `1.1.9` (2020-09-11)
831
+ ## Version 1.1.9 (2020-09-11)
821
832
 
822
833
  * Implement localization and include Product filter by language
823
834
  * add Spryker product search API
@@ -832,7 +843,7 @@
832
843
  * Build cloudinary URLs ourselves
833
844
  * Add FindologicBundle
834
845
 
835
- ## `1.1.8` (2020-08-24)
846
+ ## Version 1.1.8 (2020-08-24)
836
847
 
837
848
  * chore(shopify integration): Included pagination documentation
838
849
  * fix(shopify integration): Updated Api test to use cursor based pagination
@@ -899,19 +910,19 @@
899
910
  * feat(spryker integration): Impleted WoohooLabs ResourceObject to handle Api response content
900
911
  * feat(spryker integration): Included raw api output as part of Http/Response
901
912
 
902
- ## `1.1.5` (2020-08-05)
913
+ ## Version 1.1.5 (2020-08-05)
903
914
 
904
915
  * fix: Restore (again) missing CHANGELOG.md in common
905
916
 
906
- ## `1.1.4` (2020-08-05)
917
+ ## Version 1.1.4 (2020-08-05)
907
918
 
908
919
  * fix: Restore missing CHANGELOG.md in common
909
920
 
910
- ## `1.1.3` (2020-08-05)
921
+ ## Version 1.1.3 (2020-08-05)
911
922
 
912
923
  * Fixed release script
913
924
 
914
- ## `1.1.2` (2020-08-05)
925
+ ## Version 1.1.2 (2020-08-05)
915
926
 
916
927
  * fix: Use readlink instead of realpath to work on mac
917
928
  * Enable tideways for sparhandy and fix check in setup handle
@@ -926,12 +937,13 @@
926
937
  * feat(boost-theme): theming - next phase
927
938
  * chore(frontasticli): Add github action for releasing
928
939
  * fix(boost-theme): custom hook and some photo scaling
929
- * fix(boost-theme): custom hook and some photo scaling (solution for now, until we get more customized photos from commerce tools)
940
+ * fix(boost-theme): custom hook and some photo scaling (solution for now, until we get more customized photos from
941
+ commerce tools)
930
942
  * chore: removing customers that have github actions by now
931
943
  * chore: enabling teams hook for Apollo and disabling Slack
932
944
  * chore: Remove orphan DI tag frontastic.common.api_integration.
933
945
 
934
- ## `1.1.1` (2020-07-30)
946
+ ## Version 1.1.1 (2020-07-30)
935
947
 
936
948
  * fix: Logger is still unavailable in container.
937
949
  * chore: Removed FactoryServiceLocator from libraries/common.
@@ -973,9 +985,8 @@
973
985
  * Expose additional category filter properties
974
986
  * Added field `state` and mapping for CommerceTools in `Address`.
975
987
 
976
- ## `1.1.0` (2020-07-30)
977
-
978
- ## `1.0.0` (2020-05-27)
988
+ ## Version 1.1.0 (2020-07-30)
979
989
 
990
+ ## Version 1.0.0 (2020-05-27)
980
991
 
981
992
  * 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.1",
4
+ "version": "2.33.4",
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.1",
3
+ "version": "2.33.4",
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 I=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 k=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)),k(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)}};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 I})),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 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 $}))}])}));
@@ -79,6 +79,11 @@ class Notifier {
79
79
  }, 100)
80
80
  }
81
81
  }
82
+
83
+ close () {
84
+ this.webSocket.onclose = () => {}
85
+ this.webSocket.close()
86
+ }
82
87
  }
83
88
 
84
89
  export default Notifier
@@ -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",