@goldenhippo/builder-cart-schemas 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,691 @@
1
+ 'use strict';
2
+
3
+ // src/page/page.model.ts
4
+ var createPageModel = (props) => {
5
+ const { productModelId, productGroupModelId, categoryModelId, bannerModelId, blogCategoryModelId, editUrl } = props;
6
+ return {
7
+ name: "page",
8
+ displayName: "Page",
9
+ kind: "page",
10
+ helperText: "Default model for creating pages",
11
+ contentTitleField: void 0,
12
+ fields: [
13
+ {
14
+ name: "title",
15
+ friendlyName: "Title",
16
+ type: "text",
17
+ required: true,
18
+ helperText: "A short title for this page. If the SEO Page Title is not provided, this field is used for SEO. This field is not localized, so it is highly suggested to use the Heading.",
19
+ defaultCollapsed: false
20
+ },
21
+ {
22
+ name: "pageType",
23
+ friendlyName: "Page Type",
24
+ type: "select",
25
+ defaultValue: "General" /* GENERAL */,
26
+ required: true,
27
+ helperText: "Select the type of page. This will determine which components are added automatically.",
28
+ enum: ["General" /* GENERAL */, "Blog" /* BLOG */, "Product" /* PRODUCT */],
29
+ defaultCollapsed: false
30
+ },
31
+ {
32
+ name: "pdp",
33
+ friendlyName: "Product Detail Page",
34
+ type: "object",
35
+ required: false,
36
+ subFields: [
37
+ {
38
+ name: "type",
39
+ friendlyName: "Type",
40
+ type: "select",
41
+ defaultValue: "Product" /* PRODUCT */,
42
+ required: true,
43
+ helperText: "",
44
+ enum: ["Product" /* PRODUCT */, "Product Group" /* PRODUCT_GROUP */],
45
+ defaultCollapsed: false
46
+ },
47
+ {
48
+ name: "product",
49
+ friendlyName: "Product",
50
+ type: "reference",
51
+ required: false,
52
+ helperText: "Select the product to display",
53
+ modelId: productModelId,
54
+ copyOnAdd: true,
55
+ showIf: "return options.get('type') === 'Product'",
56
+ defaultCollapsed: false
57
+ },
58
+ {
59
+ name: "productGroup",
60
+ friendlyName: "Product Group",
61
+ type: "reference",
62
+ required: false,
63
+ helperText: "",
64
+ modelId: productGroupModelId,
65
+ copyOnAdd: true,
66
+ showIf: "return options.get('type') === 'Product Group'",
67
+ defaultCollapsed: false
68
+ },
69
+ {
70
+ name: "slides",
71
+ friendlyName: "Product Slides",
72
+ type: "list",
73
+ required: false,
74
+ subFields: [
75
+ {
76
+ name: "image",
77
+ friendlyName: "Image",
78
+ type: "file",
79
+ required: true,
80
+ helperText: "",
81
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
82
+ copyOnAdd: true,
83
+ defaultCollapsed: false
84
+ }
85
+ ],
86
+ helperText: "Select the image slides to display for this product. If no slides are provided, the product's default image will be used.",
87
+ copyOnAdd: true,
88
+ defaultCollapsed: false
89
+ },
90
+ {
91
+ name: "slideThumbs",
92
+ friendlyName: "Product Slides Thumbnails",
93
+ type: "list",
94
+ required: false,
95
+ subFields: [
96
+ {
97
+ name: "image",
98
+ friendlyName: "Image",
99
+ type: "file",
100
+ required: true,
101
+ helperText: "",
102
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
103
+ copyOnAdd: true,
104
+ defaultCollapsed: false
105
+ }
106
+ ],
107
+ helperText: "Select the image thumbnails slides to display for this product. If no slides are provided, the Product Slides will be used",
108
+ copyOnAdd: true,
109
+ defaultCollapsed: false
110
+ },
111
+ {
112
+ name: "sliderComponent",
113
+ type: "select",
114
+ enum: ["Slider A" /* SLIDER_A */, "Slider B" /* SLIDER_B */],
115
+ friendlyName: "Slider Component",
116
+ defaultValue: "Slider A" /* SLIDER_A */,
117
+ required: false,
118
+ helperText: "Select the style slider component to use for the product images",
119
+ defaultCollapsed: false
120
+ },
121
+ {
122
+ "@type": "@builder.io/core:Field",
123
+ name: "hideNativeOfferSelector",
124
+ friendlyName: "Hide Native Offer Selector",
125
+ helperText: "Set to true to fully hide the native Offer Selector to provide your own (e.g. via VWO)",
126
+ type: "boolean",
127
+ localized: false,
128
+ defaultCollapsed: true,
129
+ advanced: true
130
+ },
131
+ {
132
+ name: "offerSelector",
133
+ friendlyName: "Offer Selector",
134
+ type: "object",
135
+ required: false,
136
+ subFields: [
137
+ {
138
+ name: "osType",
139
+ friendlyName: "Type",
140
+ type: "select",
141
+ defaultValue: "Vertical - Flavor Dropdown - Type Toggle" /* VERTICAL__FLAVOR_DROPDOWN__TYPE_TOGGLE */,
142
+ required: false,
143
+ helperText: "Select the type of offer selector to display",
144
+ enum: [
145
+ "Vertical" /* VERTICAL */,
146
+ "Vertical - Flavor Dropdown - Type Toggle" /* VERTICAL__FLAVOR_DROPDOWN__TYPE_TOGGLE */,
147
+ "Stacked - Flavor Buttons - Quantity Toggle" /* STACKED__FLAVOR_BUTTONS__QUANTITY_TOGGLE */
148
+ ],
149
+ defaultCollapsed: false
150
+ },
151
+ {
152
+ name: "features",
153
+ friendlyName: "Features",
154
+ type: "object",
155
+ required: false,
156
+ subFields: [
157
+ {
158
+ name: "defaultPurchaseType",
159
+ friendlyName: "Default Purchase Type",
160
+ type: "select",
161
+ defaultValue: "One-Time Purchase" /* ONE_TIME */,
162
+ required: false,
163
+ helperText: "When both purchase options are available to the customer, this is the option that will be selected by default.",
164
+ enum: ["One-Time Purchase" /* ONE_TIME */, "Subscription" /* SUBSCRIPTION */],
165
+ defaultCollapsed: false
166
+ },
167
+ {
168
+ name: "preferredQuantity",
169
+ friendlyName: "Initial Offer Quantity",
170
+ type: "number",
171
+ defaultValue: 3,
172
+ required: false,
173
+ helperText: `Enter the quantity you would prefer users see first. If that quantity is not available,
174
+ we will locate the closest quantity available (defaults to 3 if not set).`,
175
+ defaultCollapsed: false
176
+ },
177
+ {
178
+ name: "showSavings",
179
+ friendlyName: "Show Savings?",
180
+ type: "boolean",
181
+ defaultValue: {
182
+ Default: true
183
+ },
184
+ required: false,
185
+ helperText: "",
186
+ defaultCollapsed: false
187
+ },
188
+ {
189
+ name: "savingsType",
190
+ friendlyName: "Savings Type",
191
+ type: "select",
192
+ defaultValue: "percentage" /* PERCENT */,
193
+ required: false,
194
+ helperText: "When showing savings, display as a percentage or value saved.",
195
+ enum: ["percentage" /* PERCENT */, "dollar" /* DOLLAR */],
196
+ defaultCollapsed: false
197
+ },
198
+ {
199
+ name: "showMemberPriceMessage",
200
+ friendlyName: "Show Member Price Message",
201
+ type: "boolean",
202
+ defaultValue: {
203
+ Default: true
204
+ },
205
+ required: false,
206
+ helperText: "",
207
+ defaultCollapsed: false
208
+ },
209
+ {
210
+ name: "showSubscriptionPriceMessage",
211
+ friendlyName: "Show Subscription Price Message",
212
+ type: "boolean",
213
+ defaultValue: {
214
+ Default: true
215
+ },
216
+ required: false,
217
+ helperText: "",
218
+ defaultCollapsed: false
219
+ },
220
+ {
221
+ name: "scrollToTopOffset",
222
+ friendlyName: "Scroll to Top Offset (px)",
223
+ type: "number",
224
+ defaultValue: 170,
225
+ required: false,
226
+ helperText: 'The number of pixels to offset the Scroll to Top button. Note: The label for this button may be set in the "Labels" section.',
227
+ defaultCollapsed: false
228
+ },
229
+ {
230
+ name: "enableAnonymousSubscriptions",
231
+ friendlyName: "Always Show Subscriptions",
232
+ type: "boolean",
233
+ defaultValue: {},
234
+ required: false,
235
+ helperText: "Enable this to present subscriptions (when available) to non-MyAccount visitors. By default, a user must be logged in to access this option.",
236
+ defaultCollapsed: false,
237
+ hidden: false,
238
+ advanced: true
239
+ }
240
+ ],
241
+ helperText: "",
242
+ defaultCollapsed: false
243
+ },
244
+ {
245
+ name: "labels",
246
+ friendlyName: "Labels",
247
+ type: "object",
248
+ defaultValue: {
249
+ subscriptionOffer: {
250
+ Default: "Or $PRICE when you subscribe & save"
251
+ },
252
+ subscriptionToggle: {
253
+ Default: "Subscribe & save"
254
+ },
255
+ scrollButton: {
256
+ Default: '<span class="material-icons">keyboard_arrow_up</span> Back to top'
257
+ },
258
+ actionButton: {
259
+ Default: "ADD TO CART"
260
+ },
261
+ outOfStockFormSuccess: {
262
+ Default: '<p class="text-center">We will notify you as soon as this item is back in stock.</p>'
263
+ },
264
+ otpToggle: {
265
+ Default: "Single purchase"
266
+ },
267
+ flavorSelector: {
268
+ Default: "Choose a flavor"
269
+ },
270
+ outOfStock: {
271
+ Default: 'Sorry, we"re currently out of stock'
272
+ },
273
+ memberOffer: {
274
+ Default: "Or pay member price of"
275
+ }
276
+ },
277
+ required: false,
278
+ subFields: [
279
+ {
280
+ name: "actionButton",
281
+ friendlyName: "Action Button",
282
+ type: "text",
283
+ defaultValue: {
284
+ Default: "ADD TO CART"
285
+ },
286
+ required: false,
287
+ helperText: "",
288
+ defaultCollapsed: false
289
+ },
290
+ {
291
+ name: "subscriptionOffer",
292
+ friendlyName: "Subscription Offer",
293
+ type: "text",
294
+ defaultValue: {
295
+ Default: "Or $PRICE when you subscribe & save"
296
+ },
297
+ required: false,
298
+ helperText: "Use $PRICE to represent the price, this will be automatically replaced.",
299
+ defaultCollapsed: false
300
+ },
301
+ {
302
+ name: "memberOffer",
303
+ friendlyName: "Member Offer",
304
+ type: "text",
305
+ defaultValue: {
306
+ Default: "Or pay member price of"
307
+ },
308
+ required: false,
309
+ helperText: "",
310
+ defaultCollapsed: false
311
+ },
312
+ {
313
+ name: "subscriptionToggle",
314
+ friendlyName: "Subscription Toggle",
315
+ type: "text",
316
+ defaultValue: {
317
+ Default: "Subscribe & save"
318
+ },
319
+ required: false,
320
+ helperText: "The label for the button when selecting a subscription",
321
+ defaultCollapsed: false
322
+ },
323
+ {
324
+ name: "otpToggle",
325
+ friendlyName: "One-Time Purchase Toggle",
326
+ type: "text",
327
+ defaultValue: {
328
+ Default: "Single purchase"
329
+ },
330
+ required: false,
331
+ helperText: "The label for the button when selecting a single purchase (otp).",
332
+ defaultCollapsed: false
333
+ },
334
+ {
335
+ name: "outOfStock",
336
+ friendlyName: "Out of Stock",
337
+ type: "text",
338
+ defaultValue: {
339
+ Default: 'Sorry, we"re currently out of stock'
340
+ },
341
+ required: false,
342
+ helperText: "The text to display when this product is marked as Out of Stock.",
343
+ defaultCollapsed: false
344
+ },
345
+ {
346
+ name: "outOfStockFormSuccess",
347
+ friendlyName: "OOS Form Success Message",
348
+ type: "html",
349
+ defaultValue: {
350
+ Default: '<p class="text-center">We will notify you as soon as this item is back in stock.</p>'
351
+ },
352
+ required: false,
353
+ helperText: "The message displayed when a user requests to be notified when this product is back in stock.",
354
+ defaultCollapsed: false
355
+ },
356
+ {
357
+ name: "scrollButton",
358
+ friendlyName: "Scroll Button Content",
359
+ type: "html",
360
+ defaultValue: {
361
+ Default: '<span class="material-icons">keyboard_arrow_up</span> Back to top'
362
+ },
363
+ required: false,
364
+ helperText: "",
365
+ defaultCollapsed: false
366
+ },
367
+ {
368
+ name: "flavorSelector",
369
+ friendlyName: "Flavor / Option Selector",
370
+ type: "text",
371
+ defaultValue: {
372
+ Default: "Choose a flavor"
373
+ },
374
+ required: false,
375
+ helperText: "",
376
+ defaultCollapsed: false
377
+ }
378
+ ],
379
+ helperText: "Customize the various labels on the offer selector",
380
+ defaultCollapsed: false
381
+ },
382
+ {
383
+ name: "bestSellerImage",
384
+ friendlyName: "Best Seller Image",
385
+ type: "file",
386
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
387
+ defaultValue: "https://cdn.builder.io/api/v1/image/assets%2Fcf992cf7343c4ca182a884e9a45f394e%2F3805efcc18184db8bccf74d5c5aaf891?format=webp",
388
+ required: false,
389
+ helperText: "The small image to display alongside the best seller offer",
390
+ defaultCollapsed: true
391
+ },
392
+ {
393
+ name: "bestValueImage",
394
+ friendlyName: "Best Value Image",
395
+ type: "file",
396
+ defaultValue: "https://cdn.builder.io/api/v1/image/assets%2Fcf992cf7343c4ca182a884e9a45f394e%2F82105508987e4459bc4405617d4bee33",
397
+ required: false,
398
+ helperText: "The small image to display alongside the best value offer (highest quantity)",
399
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
400
+ defaultCollapsed: true
401
+ },
402
+ {
403
+ name: "cssOverrides",
404
+ friendlyName: "CSS Properties",
405
+ type: "object",
406
+ defaultValue: {},
407
+ required: false,
408
+ subFields: [
409
+ {
410
+ name: "signupOfferCustomCssProps",
411
+ friendlyName: "Signup Offer CSS",
412
+ type: "map",
413
+ required: false,
414
+ helperText: "",
415
+ defaultCollapsed: false
416
+ },
417
+ {
418
+ name: "signupOfferPriceCustomCssProps",
419
+ friendlyName: "Signup Offer Price CSS",
420
+ type: "map",
421
+ required: false,
422
+ helperText: "",
423
+ defaultCollapsed: false
424
+ }
425
+ ],
426
+ helperText: "",
427
+ defaultCollapsed: true
428
+ }
429
+ ],
430
+ helperText: "Configure the offer selector to display.",
431
+ defaultCollapsed: true,
432
+ showIf: "return !(options.get('hideNativeOfferSelector'))"
433
+ },
434
+ {
435
+ name: "category",
436
+ type: "reference",
437
+ required: false,
438
+ helperText: "Provide the category to display breadcrumb navigation",
439
+ modelId: categoryModelId,
440
+ copyOnAdd: true,
441
+ friendlyName: "Category",
442
+ defaultCollapsed: false
443
+ }
444
+ ],
445
+ helperText: "Configure the PDP options",
446
+ showIf: "return options.get('pageType') === 'Product'",
447
+ defaultCollapsed: false
448
+ },
449
+ {
450
+ name: "blog",
451
+ friendlyName: "Blog Configuration",
452
+ type: "object",
453
+ required: false,
454
+ subFields: [
455
+ {
456
+ name: "title",
457
+ friendlyName: "Blog Title",
458
+ helperText: "Provide a title for this blog when shown on a grid or list. If not provided, the page title will be used.",
459
+ type: "text",
460
+ required: false,
461
+ localized: true,
462
+ defaultCollapsed: false
463
+ },
464
+ {
465
+ name: "publicationDate",
466
+ friendlyName: "Publication Date",
467
+ type: "timestamp",
468
+ helperText: "Provide the publication date, this is used for sorting.",
469
+ required: true,
470
+ localized: false,
471
+ defaultCollapsed: false
472
+ },
473
+ {
474
+ name: "snippet",
475
+ friendlyName: "Blog Snippet",
476
+ helperText: "Provide a snippet of the blog to display when shown on a grid or list. If not provided, we will attempt to use the page description or SEO description (if available)",
477
+ type: "longText",
478
+ required: false,
479
+ localized: true,
480
+ defaultCollapsed: false
481
+ },
482
+ {
483
+ name: "author",
484
+ friendlyName: "Blog Author",
485
+ type: "text",
486
+ helperText: "Provide an author for this blog to display when shown on a grid or list.",
487
+ required: false,
488
+ localized: false,
489
+ defaultCollapsed: false
490
+ },
491
+ {
492
+ name: "thumbnail",
493
+ friendlyName: "Blog Thumbnail",
494
+ type: "file",
495
+ required: false,
496
+ helperText: "Provide an image to display when shown on a grid or list. If not provided, we will attempt to use the SEO image (if available)",
497
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
498
+ copyOnAdd: true,
499
+ defaultCollapsed: false
500
+ },
501
+ {
502
+ name: "categories",
503
+ friendlyName: "Blog Categories",
504
+ type: "list",
505
+ required: false,
506
+ copyOnAdd: true,
507
+ defaultCollapsed: true,
508
+ subFields: [
509
+ {
510
+ name: "category",
511
+ friendlyName: "Blog Category",
512
+ type: "reference",
513
+ modelId: blogCategoryModelId,
514
+ required: true,
515
+ defaultCollapsed: false,
516
+ copyOnAdd: false
517
+ }
518
+ ]
519
+ }
520
+ ],
521
+ helperText: "Configure the blog options",
522
+ showIf: "return options.get('pageType') === 'Blog'",
523
+ defaultCollapsed: true
524
+ },
525
+ {
526
+ name: "heading",
527
+ friendlyName: "SEO Page Title",
528
+ type: "text",
529
+ required: false,
530
+ helperText: "Provide an alternate page title to use for SEO purposes (if blank, the page title is used)",
531
+ defaultCollapsed: false
532
+ },
533
+ {
534
+ name: "description",
535
+ friendlyName: "SEO Description",
536
+ type: "longText",
537
+ required: false,
538
+ helperText: "Set the page description for SEO here. This is automatically embedded in your page.",
539
+ defaultCollapsed: true
540
+ },
541
+ {
542
+ name: "seoImage",
543
+ friendlyName: "SEO Image",
544
+ type: "file",
545
+ required: false,
546
+ helperText: "Provide an image to be used for SEO purposes",
547
+ allowedFileTypes: ["jpeg", "png", "svg", "webp"],
548
+ copyOnAdd: true,
549
+ defaultCollapsed: false
550
+ },
551
+ {
552
+ name: "search",
553
+ friendlyName: "Search Configuration",
554
+ type: "object",
555
+ required: false,
556
+ subFields: [
557
+ {
558
+ name: "title",
559
+ friendlyName: "Search Title",
560
+ type: "text",
561
+ required: false,
562
+ helperText: "Used when showing this page in your site's search function. If no value is provided, the page title will be used.",
563
+ defaultCollapsed: false
564
+ },
565
+ {
566
+ name: "description",
567
+ friendlyName: "Search Description",
568
+ type: "text",
569
+ required: false,
570
+ helperText: "(Optional) Provide a description to be used when showing this page in search results. If no value is provided, the SEO description is used.",
571
+ defaultCollapsed: false
572
+ },
573
+ {
574
+ name: "hide",
575
+ friendlyName: "Hide from Search",
576
+ type: "boolean",
577
+ required: false,
578
+ helperText: "Use this to hide this page from search results. This does not prevent navigation to the page.",
579
+ defaultCollapsed: false
580
+ },
581
+ {
582
+ name: "content",
583
+ friendlyName: "Content",
584
+ type: "longText",
585
+ required: false,
586
+ helperText: "(Optional) Use this field to add keywords or phrases to assist in search results (e.g. related products, categories, key words, etc.)",
587
+ defaultCollapsed: false
588
+ }
589
+ ],
590
+ helperText: "Configure how this page displays in your site's built-in search results. Pages will not show in search results if neither the SEO or Search information is configured. You may also elect to hide the page from search results.",
591
+ defaultCollapsed: true
592
+ },
593
+ {
594
+ "@type": "@builder.io/core:Field",
595
+ name: "banners",
596
+ friendlyName: "Banners",
597
+ helperText: `Select the banner(s) to display on this page. These will be displayed in the
598
+ order provided, but always below site-wide banners.`,
599
+ type: "list",
600
+ defaultCollapsed: true,
601
+ localized: false,
602
+ subFields: [
603
+ {
604
+ "@type": "@builder.io/core:Field",
605
+ name: "banner",
606
+ friendlyName: "Sitewide Banner",
607
+ type: "reference",
608
+ localized: false,
609
+ helperText: "Select the banner to display.",
610
+ defaultCollapsed: true,
611
+ modelId: bannerModelId,
612
+ copyOnAdd: false
613
+ }
614
+ ]
615
+ },
616
+ {
617
+ name: "disableStickyHeader",
618
+ friendlyName: "Disable Sticky Header",
619
+ helperText: "Disable the sticky header for this page only.",
620
+ type: "boolean",
621
+ localized: false,
622
+ defaultCollapsed: true,
623
+ advanced: true
624
+ },
625
+ {
626
+ name: "showBundleDrawer",
627
+ friendlyName: "Show Bundle Drawer",
628
+ helperText: "Enable the bundle drawer for this page.",
629
+ type: "boolean",
630
+ localized: false,
631
+ defaultCollapsed: true,
632
+ advanced: true
633
+ },
634
+ {
635
+ name: "robotsMeta",
636
+ friendlyName: "Robots Meta",
637
+ type: "object",
638
+ required: false,
639
+ helperText: "Settings for the robots meta tag.",
640
+ subFields: [
641
+ {
642
+ name: "noIndex",
643
+ friendlyName: "No Index",
644
+ type: "boolean",
645
+ required: false,
646
+ defaultCollapsed: true,
647
+ helperText: "Prevents pages from being indexed and displayed in search engine result pages"
648
+ },
649
+ {
650
+ name: "noFollow",
651
+ friendlyName: "No Follow",
652
+ type: "boolean",
653
+ required: false,
654
+ defaultCollapsed: true,
655
+ helperText: "Prevents search engines from following links on the pages"
656
+ },
657
+ {
658
+ name: "noArchive",
659
+ friendlyName: "No Archive",
660
+ type: "boolean",
661
+ required: false,
662
+ defaultCollapsed: true,
663
+ helperText: "Prevents search engines from showing Cached links for pages"
664
+ },
665
+ {
666
+ name: "noImageIndex",
667
+ friendlyName: "No Image Index",
668
+ type: "boolean",
669
+ required: false,
670
+ defaultCollapsed: true,
671
+ helperText: "This option prevents images on a page from being indexed by Google and other search engines"
672
+ },
673
+ {
674
+ name: "noSnippet",
675
+ friendlyName: "No Snippet",
676
+ type: "boolean",
677
+ required: false,
678
+ defaultCollapsed: true,
679
+ helperText: "Prevents a snippet from being shown in the search results"
680
+ }
681
+ ],
682
+ defaultCollapsed: true
683
+ }
684
+ ],
685
+ editingUrlLogic: "return `" + editUrl + "${targeting.urlPath}?builder.preview=true&builder.frameEditing=true`"
686
+ };
687
+ };
688
+
689
+ exports.createPageModel = createPageModel;
690
+ //# sourceMappingURL=index.js.map
691
+ //# sourceMappingURL=index.js.map