@orion-studios/payload-studio 0.5.0-beta.7 → 0.5.0-beta.70

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.
Files changed (67) hide show
  1. package/README.md +20 -0
  2. package/dist/admin/client.d.mts +2 -0
  3. package/dist/admin/client.d.ts +2 -0
  4. package/dist/admin/client.js +779 -137
  5. package/dist/admin/client.mjs +769 -129
  6. package/dist/admin/index.d.mts +1 -1
  7. package/dist/admin/index.d.ts +1 -1
  8. package/dist/admin/index.js +100 -8
  9. package/dist/admin/index.mjs +3 -1
  10. package/dist/admin-app/client.d.mts +7 -0
  11. package/dist/admin-app/client.d.ts +7 -0
  12. package/dist/admin-app/client.js +1262 -3
  13. package/dist/admin-app/client.mjs +1164 -2
  14. package/dist/admin-app/index.d.mts +1 -1
  15. package/dist/admin-app/index.d.ts +1 -1
  16. package/dist/admin-app/index.js +167 -0
  17. package/dist/admin-app/index.mjs +13 -1
  18. package/dist/admin-app/styles.css +229 -0
  19. package/dist/blocks/index.js +633 -8
  20. package/dist/blocks/index.mjs +2 -2
  21. package/dist/{chunk-ZLLNO5FM.mjs → chunk-CKX5Y2HU.mjs} +44 -13
  22. package/dist/{chunk-J7W5EE3B.mjs → chunk-HCEPGEAI.mjs} +100 -8
  23. package/dist/chunk-HXGAG6I7.mjs +325 -0
  24. package/dist/chunk-ROTPP5CU.mjs +99 -0
  25. package/dist/{chunk-ETRRXURT.mjs → chunk-SIL2J5MF.mjs} +14 -0
  26. package/dist/chunk-VDGSMD6H.mjs +1072 -0
  27. package/dist/{chunk-PC5622T7.mjs → chunk-XK3K5GRP.mjs} +620 -9
  28. package/dist/chunk-XVH5SCBD.mjs +234 -0
  29. package/dist/{index-CmR6NInu.d.ts → index-BIwu3qIH.d.mts} +29 -3
  30. package/dist/{index-CmR6NInu.d.mts → index-BIwu3qIH.d.ts} +29 -3
  31. package/dist/index-CdnUNrvX.d.mts +134 -0
  32. package/dist/{index-DbH0Ljwp.d.ts → index-CpG3UHcS.d.mts} +1 -0
  33. package/dist/{index-DbH0Ljwp.d.mts → index-CpG3UHcS.d.ts} +1 -0
  34. package/dist/index-DyHbWliW.d.ts +134 -0
  35. package/dist/index-ZbOx4OCF.d.mts +128 -0
  36. package/dist/index-ZbOx4OCF.d.ts +128 -0
  37. package/dist/{index-DJFhANvJ.d.mts → index-cDYkEj29.d.mts} +20 -2
  38. package/dist/{index-DJFhANvJ.d.ts → index-cDYkEj29.d.ts} +20 -2
  39. package/dist/index.d.mts +5 -5
  40. package/dist/index.d.ts +5 -5
  41. package/dist/index.js +2145 -305
  42. package/dist/index.mjs +9 -9
  43. package/dist/nextjs/index.d.mts +1 -1
  44. package/dist/nextjs/index.d.ts +1 -1
  45. package/dist/nextjs/index.js +996 -13
  46. package/dist/nextjs/index.mjs +4 -1
  47. package/dist/studio/index.d.mts +2 -1
  48. package/dist/studio/index.d.ts +2 -1
  49. package/dist/studio/index.js +171 -2
  50. package/dist/studio/index.mjs +7 -3
  51. package/dist/studio-pages/builder.css +358 -8
  52. package/dist/studio-pages/client.d.mts +17 -0
  53. package/dist/studio-pages/client.d.ts +17 -0
  54. package/dist/studio-pages/client.js +5657 -1478
  55. package/dist/studio-pages/client.mjs +5549 -1461
  56. package/dist/studio-pages/index.d.mts +3 -2
  57. package/dist/studio-pages/index.d.ts +3 -2
  58. package/dist/studio-pages/index.js +799 -29
  59. package/dist/studio-pages/index.mjs +6 -2
  60. package/package.json +26 -12
  61. package/dist/chunk-AAOHJDNS.mjs +0 -67
  62. package/dist/chunk-N67KVM2S.mjs +0 -156
  63. package/dist/chunk-UJFU323N.mjs +0 -301
  64. package/dist/index-B9N5MyjF.d.mts +0 -39
  65. package/dist/index-BallJs-K.d.mts +0 -43
  66. package/dist/index-BallJs-K.d.ts +0 -43
  67. package/dist/index-g8tBHLKD.d.ts +0 -39
@@ -56,6 +56,7 @@ var sectionStyleDefaults = {
56
56
  contentGradientPreset: "none",
57
57
  contentGradientTo: "#f4f6f2",
58
58
  contentWidth: "inherit",
59
+ sectionPaddingX: "inherit",
59
60
  sectionBackgroundColor: "#ffffff",
60
61
  sectionBackgroundMode: "none",
61
62
  sectionGradientAngle: "135",
@@ -93,6 +94,19 @@ var sectionStyleFields = () => [
93
94
  type: "select",
94
95
  defaultValue: sectionStyleDefaults.sectionPaddingY,
95
96
  options: [
97
+ { label: "None", value: "none" },
98
+ { label: "Small", value: "sm" },
99
+ { label: "Medium", value: "md" },
100
+ { label: "Large", value: "lg" }
101
+ ]
102
+ },
103
+ {
104
+ name: "sectionPaddingX",
105
+ type: "select",
106
+ defaultValue: sectionStyleDefaults.sectionPaddingX,
107
+ options: [
108
+ { label: "Inherit", value: "inherit" },
109
+ { label: "None", value: "none" },
96
110
  { label: "Small", value: "sm" },
97
111
  { label: "Medium", value: "md" },
98
112
  { label: "Large", value: "lg" }
@@ -208,11 +222,22 @@ var BeforeAfterBlock = {
208
222
  name: "subtitle",
209
223
  type: "textarea"
210
224
  },
225
+ {
226
+ name: "itemsPerRow",
227
+ type: "number",
228
+ defaultValue: 2,
229
+ min: 1,
230
+ max: 4,
231
+ admin: {
232
+ description: "How many project cards to show per row on desktop.",
233
+ step: 1
234
+ }
235
+ },
211
236
  {
212
237
  name: "items",
213
238
  type: "array",
214
239
  minRows: 1,
215
- maxRows: 6,
240
+ maxRows: 30,
216
241
  fields: [
217
242
  {
218
243
  name: "label",
@@ -231,12 +256,88 @@ var BeforeAfterBlock = {
231
256
  relationTo: "media",
232
257
  required: false
233
258
  },
259
+ {
260
+ name: "imageHeight",
261
+ type: "number",
262
+ defaultValue: 160,
263
+ min: 60,
264
+ max: 600,
265
+ admin: {
266
+ description: "Overrides the before/after image height (in pixels).",
267
+ step: 10
268
+ }
269
+ },
270
+ {
271
+ name: "imageFit",
272
+ type: "select",
273
+ defaultValue: "cover",
274
+ options: [
275
+ { label: "Cover", value: "cover" },
276
+ { label: "Contain", value: "contain" }
277
+ ]
278
+ },
279
+ {
280
+ name: "imageCornerStyle",
281
+ type: "select",
282
+ defaultValue: "rounded",
283
+ options: [
284
+ { label: "Rounded", value: "rounded" },
285
+ { label: "Square", value: "square" }
286
+ ]
287
+ },
288
+ {
289
+ name: "imagePosition",
290
+ type: "select",
291
+ defaultValue: "center",
292
+ options: [
293
+ { label: "Center", value: "center" },
294
+ { label: "Top", value: "top" },
295
+ { label: "Bottom", value: "bottom" },
296
+ { label: "Left", value: "left" },
297
+ { label: "Right", value: "right" }
298
+ ]
299
+ },
300
+ {
301
+ name: "imagePositionX",
302
+ type: "number",
303
+ min: 0,
304
+ max: 100,
305
+ admin: {
306
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
307
+ step: 1
308
+ }
309
+ },
310
+ {
311
+ name: "imagePositionY",
312
+ type: "number",
313
+ min: 0,
314
+ max: 100,
315
+ admin: {
316
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
317
+ step: 1
318
+ }
319
+ },
234
320
  {
235
321
  name: "description",
236
322
  type: "textarea"
323
+ },
324
+ {
325
+ name: "settings",
326
+ type: "json",
327
+ admin: {
328
+ hidden: true
329
+ }
237
330
  }
238
331
  ]
239
332
  },
333
+ {
334
+ name: "settings",
335
+ type: "json",
336
+ admin: {
337
+ description: "Internal builder settings schema v2.",
338
+ hidden: true
339
+ }
340
+ },
240
341
  ...sectionStyleFields()
241
342
  ]
242
343
  };
@@ -274,6 +375,14 @@ var BookingEmbedBlock = {
274
375
  type: "text",
275
376
  defaultValue: "/contact"
276
377
  },
378
+ {
379
+ name: "settings",
380
+ type: "json",
381
+ admin: {
382
+ description: "Internal builder settings schema v2.",
383
+ hidden: true
384
+ }
385
+ },
277
386
  ...sectionStyleFields()
278
387
  ]
279
388
  };
@@ -335,6 +444,14 @@ var CtaBlock = {
335
444
  description: "Optional background color override for the CTA strip (example: #124a37)."
336
445
  }
337
446
  },
447
+ {
448
+ name: "settings",
449
+ type: "json",
450
+ admin: {
451
+ description: "Internal builder settings schema v2.",
452
+ hidden: true
453
+ }
454
+ },
338
455
  ...sectionStyleFields()
339
456
  ]
340
457
  };
@@ -374,9 +491,24 @@ var FaqBlock = {
374
491
  name: "answer",
375
492
  type: "textarea",
376
493
  required: true
494
+ },
495
+ {
496
+ name: "settings",
497
+ type: "json",
498
+ admin: {
499
+ hidden: true
500
+ }
377
501
  }
378
502
  ]
379
503
  },
504
+ {
505
+ name: "settings",
506
+ type: "json",
507
+ admin: {
508
+ description: "Internal builder settings schema v2.",
509
+ hidden: true
510
+ }
511
+ },
380
512
  ...sectionStyleFields()
381
513
  ]
382
514
  };
@@ -401,6 +533,17 @@ var FeatureGridBlock = {
401
533
  type: "text",
402
534
  required: true
403
535
  },
536
+ {
537
+ name: "itemsPerRow",
538
+ type: "number",
539
+ defaultValue: 3,
540
+ min: 1,
541
+ max: 6,
542
+ admin: {
543
+ description: "How many items to show per row on desktop.",
544
+ step: 1
545
+ }
546
+ },
404
547
  {
405
548
  name: "items",
406
549
  type: "array",
@@ -416,11 +559,43 @@ var FeatureGridBlock = {
416
559
  name: "description",
417
560
  type: "textarea"
418
561
  },
562
+ {
563
+ name: "iconType",
564
+ type: "select",
565
+ defaultValue: "badge",
566
+ options: [
567
+ { label: "Badge Text", value: "badge" },
568
+ { label: "Icon", value: "lucide" }
569
+ ],
570
+ admin: {
571
+ description: "Choose whether this item uses a short badge label or an icon."
572
+ }
573
+ },
419
574
  {
420
575
  name: "icon",
421
576
  type: "text",
422
577
  admin: {
423
- description: 'Optional short icon label (e.g. "01", "Leaf", "Star").'
578
+ description: 'Optional short icon label (e.g. "01", "Leaf", "Star").',
579
+ condition: (_, siblingData) => siblingData?.iconType !== "lucide"
580
+ }
581
+ },
582
+ {
583
+ name: "iconLucide",
584
+ type: "select",
585
+ options: [
586
+ { label: "Shield Check", value: "ShieldCheck" },
587
+ { label: "Clock", value: "Clock" },
588
+ { label: "Leaf", value: "Leaf" },
589
+ { label: "Dollar Sign", value: "DollarSign" },
590
+ { label: "Hard Hat", value: "HardHat" },
591
+ { label: "Sparkles", value: "Sparkles" },
592
+ { label: "Tree Pine", value: "TreePine" },
593
+ { label: "Badge Check", value: "BadgeCheck" },
594
+ { label: "Calendar Clock", value: "CalendarClock" }
595
+ ],
596
+ admin: {
597
+ description: "Select an icon for this item.",
598
+ condition: (_, siblingData) => siblingData?.iconType === "lucide"
424
599
  }
425
600
  },
426
601
  {
@@ -428,6 +603,74 @@ var FeatureGridBlock = {
428
603
  type: "upload",
429
604
  relationTo: "media",
430
605
  required: false
606
+ },
607
+ {
608
+ name: "imageHeight",
609
+ type: "number",
610
+ defaultValue: 160,
611
+ min: 40,
612
+ max: 600,
613
+ admin: {
614
+ description: "Overrides the image height in the builder/section (in pixels).",
615
+ step: 10
616
+ }
617
+ },
618
+ {
619
+ name: "imageFit",
620
+ type: "select",
621
+ defaultValue: "cover",
622
+ options: [
623
+ { label: "Cover", value: "cover" },
624
+ { label: "Contain", value: "contain" }
625
+ ]
626
+ },
627
+ {
628
+ name: "imageCornerStyle",
629
+ type: "select",
630
+ defaultValue: "rounded",
631
+ options: [
632
+ { label: "Rounded", value: "rounded" },
633
+ { label: "Square", value: "square" }
634
+ ]
635
+ },
636
+ {
637
+ name: "imagePosition",
638
+ type: "select",
639
+ defaultValue: "center",
640
+ options: [
641
+ { label: "Center", value: "center" },
642
+ { label: "Top", value: "top" },
643
+ { label: "Bottom", value: "bottom" },
644
+ { label: "Left", value: "left" },
645
+ { label: "Right", value: "right" }
646
+ ]
647
+ },
648
+ {
649
+ name: "imagePositionX",
650
+ type: "number",
651
+ min: 0,
652
+ max: 100,
653
+ admin: {
654
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
655
+ step: 1
656
+ }
657
+ },
658
+ {
659
+ name: "imagePositionY",
660
+ type: "number",
661
+ min: 0,
662
+ max: 100,
663
+ admin: {
664
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
665
+ step: 1
666
+ }
667
+ },
668
+ {
669
+ name: "settings",
670
+ type: "json",
671
+ admin: {
672
+ hidden: true
673
+ }
431
674
  }
432
675
  ]
433
676
  },
@@ -453,6 +696,14 @@ var FeatureGridBlock = {
453
696
  description: "Optional background color override when using the Highlight variant (example: #1f684f)."
454
697
  }
455
698
  },
699
+ {
700
+ name: "settings",
701
+ type: "json",
702
+ admin: {
703
+ description: "Internal builder settings schema v2.",
704
+ hidden: true
705
+ }
706
+ },
456
707
  ...sectionStyleFields()
457
708
  ]
458
709
  };
@@ -491,6 +742,14 @@ var FormEmbedBlock = {
491
742
  }
492
743
  ]
493
744
  },
745
+ {
746
+ name: "settings",
747
+ type: "json",
748
+ admin: {
749
+ description: "Internal builder settings schema v2.",
750
+ hidden: true
751
+ }
752
+ },
494
753
  ...sectionStyleFields()
495
754
  ]
496
755
  };
@@ -554,10 +813,44 @@ var HeroBlock = {
554
813
  relationTo: "media"
555
814
  },
556
815
  {
557
- name: "backgroundImageURL",
558
- type: "text",
816
+ name: "backgroundImageFit",
817
+ type: "select",
818
+ defaultValue: "cover",
819
+ options: [
820
+ { label: "Cover", value: "cover" },
821
+ { label: "Cover (Square)", value: "cover-square" },
822
+ { label: "Contain", value: "contain" },
823
+ { label: "Contain (Square)", value: "contain-square" }
824
+ ],
825
+ admin: {
826
+ description: "How the hero image should be sized within the section."
827
+ }
828
+ },
829
+ {
830
+ name: "backgroundImageCornerStyle",
831
+ type: "select",
832
+ defaultValue: "rounded",
833
+ options: [
834
+ { label: "Rounded", value: "rounded" },
835
+ { label: "Square", value: "square" }
836
+ ],
837
+ admin: {
838
+ description: "How the hero image corners should appear."
839
+ }
840
+ },
841
+ {
842
+ name: "backgroundImagePosition",
843
+ type: "select",
844
+ defaultValue: "center",
845
+ options: [
846
+ { label: "Center", value: "center" },
847
+ { label: "Top", value: "top" },
848
+ { label: "Bottom", value: "bottom" },
849
+ { label: "Left", value: "left" },
850
+ { label: "Right", value: "right" }
851
+ ],
559
852
  admin: {
560
- description: "Optional external/background image URL override for this hero section."
853
+ description: "Where the hero image should anchor inside the section."
561
854
  }
562
855
  },
563
856
  {
@@ -567,6 +860,113 @@ var HeroBlock = {
567
860
  description: "Optional background color override (example: #124a37)."
568
861
  }
569
862
  },
863
+ {
864
+ name: "backgroundOverlayMode",
865
+ type: "select",
866
+ defaultValue: "none",
867
+ options: [
868
+ { label: "None", value: "none" },
869
+ { label: "Solid", value: "solid" },
870
+ { label: "Gradient", value: "gradient" }
871
+ ],
872
+ admin: {
873
+ description: "Optional overlay on top of the hero image (applies when an image is present)."
874
+ }
875
+ },
876
+ {
877
+ name: "backgroundOverlayOpacity",
878
+ type: "number",
879
+ defaultValue: 45,
880
+ min: 0,
881
+ max: 100,
882
+ admin: {
883
+ description: "Overlay opacity (0-100).",
884
+ step: 1
885
+ }
886
+ },
887
+ {
888
+ name: "backgroundOverlayColor",
889
+ type: "text",
890
+ admin: {
891
+ description: "Overlay solid color (example: #000000). Used when Overlay Mode is Solid."
892
+ }
893
+ },
894
+ {
895
+ name: "backgroundOverlayGradientFrom",
896
+ type: "text",
897
+ admin: {
898
+ description: "Gradient overlay start color (example: #0d4a37). Used when Overlay Mode is Gradient."
899
+ }
900
+ },
901
+ {
902
+ name: "backgroundOverlayGradientTo",
903
+ type: "text",
904
+ admin: {
905
+ description: "Gradient overlay end color (example: #1f684f). Used when Overlay Mode is Gradient."
906
+ }
907
+ },
908
+ {
909
+ name: "backgroundOverlayGradientAngle",
910
+ type: "text",
911
+ admin: {
912
+ description: "Gradient overlay angle in degrees (0-360). Used when Overlay Mode is Gradient."
913
+ }
914
+ },
915
+ {
916
+ name: "backgroundOverlayGradientFromStrength",
917
+ type: "number",
918
+ defaultValue: 100,
919
+ min: 0,
920
+ max: 100,
921
+ admin: {
922
+ description: "Gradient start strength (0-100). Set to 0 for transparent.",
923
+ step: 1
924
+ }
925
+ },
926
+ {
927
+ name: "backgroundOverlayGradientToStrength",
928
+ type: "number",
929
+ defaultValue: 100,
930
+ min: 0,
931
+ max: 100,
932
+ admin: {
933
+ description: "Gradient end strength (0-100). Set to 0 for transparent.",
934
+ step: 1
935
+ }
936
+ },
937
+ {
938
+ name: "backgroundOverlayGradientStart",
939
+ type: "number",
940
+ defaultValue: 0,
941
+ min: 0,
942
+ max: 100,
943
+ admin: {
944
+ description: "Where the gradient starts (0-100).",
945
+ step: 1
946
+ }
947
+ },
948
+ {
949
+ name: "backgroundOverlayGradientEnd",
950
+ type: "number",
951
+ defaultValue: 100,
952
+ min: 0,
953
+ max: 100,
954
+ admin: {
955
+ description: "Where the gradient ends (0-100).",
956
+ step: 1
957
+ }
958
+ },
959
+ {
960
+ name: "backgroundOverlayGradientFeather",
961
+ type: "number",
962
+ defaultValue: 100,
963
+ min: 0,
964
+ max: 100,
965
+ admin: {
966
+ description: "How soft the transition is (0 = hard edge, 100 = smooth).",
967
+ step: 1
968
+ }
969
+ },
570
970
  {
571
971
  name: "variant",
572
972
  type: "select",
@@ -582,6 +982,36 @@ var HeroBlock = {
582
982
  }
583
983
  ]
584
984
  },
985
+ {
986
+ name: "heroHeight",
987
+ type: "select",
988
+ defaultValue: "sm",
989
+ options: [
990
+ {
991
+ label: "Small",
992
+ value: "sm"
993
+ },
994
+ {
995
+ label: "Medium (Half Screen)",
996
+ value: "md"
997
+ },
998
+ {
999
+ label: "Full Screen",
1000
+ value: "full"
1001
+ }
1002
+ ],
1003
+ admin: {
1004
+ description: "Controls the vertical height of the hero section."
1005
+ }
1006
+ },
1007
+ {
1008
+ name: "settings",
1009
+ type: "json",
1010
+ admin: {
1011
+ description: "Internal builder settings schema v2.",
1012
+ hidden: true
1013
+ }
1014
+ },
585
1015
  ...sectionStyleFields()
586
1016
  ]
587
1017
  };
@@ -627,12 +1057,88 @@ var LogoWallBlock = {
627
1057
  relationTo: "media",
628
1058
  required: false
629
1059
  },
1060
+ {
1061
+ name: "imageHeight",
1062
+ type: "number",
1063
+ defaultValue: 64,
1064
+ min: 24,
1065
+ max: 200,
1066
+ admin: {
1067
+ description: "Overrides the logo image height (in pixels).",
1068
+ step: 4
1069
+ }
1070
+ },
1071
+ {
1072
+ name: "imageFit",
1073
+ type: "select",
1074
+ defaultValue: "contain",
1075
+ options: [
1076
+ { label: "Cover", value: "cover" },
1077
+ { label: "Contain", value: "contain" }
1078
+ ]
1079
+ },
1080
+ {
1081
+ name: "imageCornerStyle",
1082
+ type: "select",
1083
+ defaultValue: "rounded",
1084
+ options: [
1085
+ { label: "Rounded", value: "rounded" },
1086
+ { label: "Square", value: "square" }
1087
+ ]
1088
+ },
1089
+ {
1090
+ name: "imagePosition",
1091
+ type: "select",
1092
+ defaultValue: "center",
1093
+ options: [
1094
+ { label: "Center", value: "center" },
1095
+ { label: "Top", value: "top" },
1096
+ { label: "Bottom", value: "bottom" },
1097
+ { label: "Left", value: "left" },
1098
+ { label: "Right", value: "right" }
1099
+ ]
1100
+ },
1101
+ {
1102
+ name: "imagePositionX",
1103
+ type: "number",
1104
+ min: 0,
1105
+ max: 100,
1106
+ admin: {
1107
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
1108
+ step: 1
1109
+ }
1110
+ },
1111
+ {
1112
+ name: "imagePositionY",
1113
+ type: "number",
1114
+ min: 0,
1115
+ max: 100,
1116
+ admin: {
1117
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
1118
+ step: 1
1119
+ }
1120
+ },
630
1121
  {
631
1122
  name: "href",
632
1123
  type: "text"
1124
+ },
1125
+ {
1126
+ name: "settings",
1127
+ type: "json",
1128
+ admin: {
1129
+ hidden: true
1130
+ }
633
1131
  }
634
1132
  ]
635
1133
  },
1134
+ {
1135
+ name: "settings",
1136
+ type: "json",
1137
+ admin: {
1138
+ description: "Internal builder settings schema v2.",
1139
+ hidden: true
1140
+ }
1141
+ },
636
1142
  ...sectionStyleFields()
637
1143
  ]
638
1144
  };
@@ -677,6 +1183,44 @@ var MediaBlock = {
677
1183
  }
678
1184
  ]
679
1185
  },
1186
+ {
1187
+ name: "imageFit",
1188
+ type: "select",
1189
+ defaultValue: "cover",
1190
+ options: [
1191
+ { label: "Cover", value: "cover" },
1192
+ { label: "Contain", value: "contain" }
1193
+ ]
1194
+ },
1195
+ {
1196
+ name: "imageCornerStyle",
1197
+ type: "select",
1198
+ defaultValue: "rounded",
1199
+ options: [
1200
+ { label: "Rounded", value: "rounded" },
1201
+ { label: "Square", value: "square" }
1202
+ ]
1203
+ },
1204
+ {
1205
+ name: "imagePosition",
1206
+ type: "select",
1207
+ defaultValue: "center",
1208
+ options: [
1209
+ { label: "Center", value: "center" },
1210
+ { label: "Top", value: "top" },
1211
+ { label: "Bottom", value: "bottom" },
1212
+ { label: "Left", value: "left" },
1213
+ { label: "Right", value: "right" }
1214
+ ]
1215
+ },
1216
+ {
1217
+ name: "settings",
1218
+ type: "json",
1219
+ admin: {
1220
+ description: "Internal builder settings schema v2.",
1221
+ hidden: true
1222
+ }
1223
+ },
680
1224
  ...sectionStyleFields()
681
1225
  ]
682
1226
  };
@@ -720,6 +1264,14 @@ var RichTextBlock = {
720
1264
  }
721
1265
  ]
722
1266
  },
1267
+ {
1268
+ name: "settings",
1269
+ type: "json",
1270
+ admin: {
1271
+ description: "Internal builder settings schema v2.",
1272
+ hidden: true
1273
+ }
1274
+ },
723
1275
  ...sectionStyleFields()
724
1276
  ]
725
1277
  };
@@ -767,9 +1319,24 @@ var StatsBlock = {
767
1319
  {
768
1320
  name: "description",
769
1321
  type: "text"
1322
+ },
1323
+ {
1324
+ name: "settings",
1325
+ type: "json",
1326
+ admin: {
1327
+ hidden: true
1328
+ }
770
1329
  }
771
1330
  ]
772
1331
  },
1332
+ {
1333
+ name: "settings",
1334
+ type: "json",
1335
+ admin: {
1336
+ description: "Internal builder settings schema v2.",
1337
+ hidden: true
1338
+ }
1339
+ },
773
1340
  ...sectionStyleFields()
774
1341
  ]
775
1342
  };
@@ -794,11 +1361,41 @@ var TestimonialsBlock = {
794
1361
  type: "text",
795
1362
  required: true
796
1363
  },
1364
+ {
1365
+ name: "visibleCount",
1366
+ type: "number",
1367
+ defaultValue: 3,
1368
+ min: 1,
1369
+ max: 6,
1370
+ admin: {
1371
+ description: "How many testimonials to show at once.",
1372
+ step: 1
1373
+ }
1374
+ },
1375
+ {
1376
+ name: "autoRotate",
1377
+ type: "checkbox",
1378
+ defaultValue: true,
1379
+ admin: {
1380
+ description: "Automatically rotates through all testimonials."
1381
+ }
1382
+ },
1383
+ {
1384
+ name: "rotateIntervalSeconds",
1385
+ type: "number",
1386
+ defaultValue: 7,
1387
+ min: 2,
1388
+ max: 30,
1389
+ admin: {
1390
+ description: "How often to rotate (in seconds).",
1391
+ step: 1
1392
+ }
1393
+ },
797
1394
  {
798
1395
  name: "items",
799
1396
  type: "array",
800
1397
  minRows: 1,
801
- maxRows: 6,
1398
+ maxRows: 30,
802
1399
  fields: [
803
1400
  {
804
1401
  name: "quote",
@@ -813,9 +1410,35 @@ var TestimonialsBlock = {
813
1410
  {
814
1411
  name: "location",
815
1412
  type: "text"
1413
+ },
1414
+ {
1415
+ name: "rating",
1416
+ type: "number",
1417
+ defaultValue: 5,
1418
+ min: 1,
1419
+ max: 5,
1420
+ admin: {
1421
+ description: "Star rating (1-5).",
1422
+ step: 1
1423
+ }
1424
+ },
1425
+ {
1426
+ name: "settings",
1427
+ type: "json",
1428
+ admin: {
1429
+ hidden: true
1430
+ }
816
1431
  }
817
1432
  ]
818
1433
  },
1434
+ {
1435
+ name: "settings",
1436
+ type: "json",
1437
+ admin: {
1438
+ description: "Internal builder settings schema v2.",
1439
+ hidden: true
1440
+ }
1441
+ },
819
1442
  ...sectionStyleFields()
820
1443
  ]
821
1444
  };
@@ -939,12 +1562,14 @@ var sectionPresets = [
939
1562
  {
940
1563
  quote: "Great communication, fair pricing, and the cleanup was perfect. We will use them again.",
941
1564
  name: "Katie M.",
942
- location: "Austin, TX"
1565
+ location: "Austin, TX",
1566
+ rating: 5
943
1567
  },
944
1568
  {
945
1569
  quote: "They removed a dangerous limb over our driveway quickly and safely.",
946
1570
  name: "James R.",
947
- location: "Round Rock, TX"
1571
+ location: "Round Rock, TX",
1572
+ rating: 5
948
1573
  }
949
1574
  ]
950
1575
  },