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