@frontastic/common 2.33.0 → 2.33.3

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