@orion-studios/payload-studio 0.5.0-beta.4 → 0.5.0-beta.40

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 (46) hide show
  1. package/dist/admin/client.js +68 -7
  2. package/dist/admin/client.mjs +68 -7
  3. package/dist/admin/index.d.mts +1 -1
  4. package/dist/admin/index.d.ts +1 -1
  5. package/dist/admin/index.js +37 -0
  6. package/dist/admin/index.mjs +3 -1
  7. package/dist/admin-app/client.d.mts +4 -0
  8. package/dist/admin-app/client.d.ts +4 -0
  9. package/dist/admin-app/client.js +705 -2
  10. package/dist/admin-app/client.mjs +701 -1
  11. package/dist/admin-app/index.d.mts +1 -1
  12. package/dist/admin-app/index.d.ts +1 -1
  13. package/dist/admin-app/index.js +167 -0
  14. package/dist/admin-app/index.mjs +13 -1
  15. package/dist/admin-app/styles.css +127 -0
  16. package/dist/blocks/index.js +424 -4
  17. package/dist/blocks/index.mjs +2 -2
  18. package/dist/{chunk-UJFU323N.mjs → chunk-34J4T7X3.mjs} +33 -9
  19. package/dist/{chunk-J7W5EE3B.mjs → chunk-7IGLXLUB.mjs} +37 -0
  20. package/dist/{chunk-PC5622T7.mjs → chunk-I4NH636V.mjs} +411 -5
  21. package/dist/{chunk-ZLLNO5FM.mjs → chunk-RXXPFQWL.mjs} +44 -13
  22. package/dist/{chunk-ETRRXURT.mjs → chunk-SIL2J5MF.mjs} +14 -0
  23. package/dist/chunk-XVH5SCBD.mjs +234 -0
  24. package/dist/index-BBvk9b9i.d.mts +97 -0
  25. package/dist/index-BBvk9b9i.d.ts +97 -0
  26. package/dist/{index-DbH0Ljwp.d.mts → index-CpG3UHcS.d.mts} +1 -0
  27. package/dist/{index-DbH0Ljwp.d.ts → index-CpG3UHcS.d.ts} +1 -0
  28. package/dist/{index-DJFhANvJ.d.ts → index-Dj21uD_B.d.mts} +5 -2
  29. package/dist/{index-DJFhANvJ.d.mts → index-Dj21uD_B.d.ts} +5 -2
  30. package/dist/index.d.mts +3 -3
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.js +871 -203
  33. package/dist/index.mjs +11 -11
  34. package/dist/nextjs/index.d.mts +1 -1
  35. package/dist/nextjs/index.d.ts +1 -1
  36. package/dist/nextjs/index.js +290 -13
  37. package/dist/nextjs/index.mjs +4 -1
  38. package/dist/studio-pages/builder.css +25 -1
  39. package/dist/studio-pages/client.js +3545 -1279
  40. package/dist/studio-pages/client.mjs +3545 -1279
  41. package/dist/studio-pages/index.js +33 -8
  42. package/dist/studio-pages/index.mjs +2 -2
  43. package/package.json +24 -12
  44. package/dist/chunk-AAOHJDNS.mjs +0 -67
  45. package/dist/index-BallJs-K.d.mts +0 -43
  46. package/dist/index-BallJs-K.d.ts +0 -43
@@ -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" }
@@ -231,6 +245,67 @@ var BeforeAfterBlock = {
231
245
  relationTo: "media",
232
246
  required: false
233
247
  },
248
+ {
249
+ name: "imageHeight",
250
+ type: "number",
251
+ defaultValue: 160,
252
+ min: 60,
253
+ max: 600,
254
+ admin: {
255
+ description: "Overrides the before/after image height (in pixels).",
256
+ step: 10
257
+ }
258
+ },
259
+ {
260
+ name: "imageFit",
261
+ type: "select",
262
+ defaultValue: "cover",
263
+ options: [
264
+ { label: "Cover", value: "cover" },
265
+ { label: "Contain", value: "contain" }
266
+ ]
267
+ },
268
+ {
269
+ name: "imageCornerStyle",
270
+ type: "select",
271
+ defaultValue: "rounded",
272
+ options: [
273
+ { label: "Rounded", value: "rounded" },
274
+ { label: "Square", value: "square" }
275
+ ]
276
+ },
277
+ {
278
+ name: "imagePosition",
279
+ type: "select",
280
+ defaultValue: "center",
281
+ options: [
282
+ { label: "Center", value: "center" },
283
+ { label: "Top", value: "top" },
284
+ { label: "Bottom", value: "bottom" },
285
+ { label: "Left", value: "left" },
286
+ { label: "Right", value: "right" }
287
+ ]
288
+ },
289
+ {
290
+ name: "imagePositionX",
291
+ type: "number",
292
+ min: 0,
293
+ max: 100,
294
+ admin: {
295
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
296
+ step: 1
297
+ }
298
+ },
299
+ {
300
+ name: "imagePositionY",
301
+ type: "number",
302
+ min: 0,
303
+ max: 100,
304
+ admin: {
305
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
306
+ step: 1
307
+ }
308
+ },
234
309
  {
235
310
  name: "description",
236
311
  type: "textarea"
@@ -428,6 +503,67 @@ var FeatureGridBlock = {
428
503
  type: "upload",
429
504
  relationTo: "media",
430
505
  required: false
506
+ },
507
+ {
508
+ name: "imageHeight",
509
+ type: "number",
510
+ defaultValue: 160,
511
+ min: 40,
512
+ max: 600,
513
+ admin: {
514
+ description: "Overrides the image height in the builder/section (in pixels).",
515
+ step: 10
516
+ }
517
+ },
518
+ {
519
+ name: "imageFit",
520
+ type: "select",
521
+ defaultValue: "cover",
522
+ options: [
523
+ { label: "Cover", value: "cover" },
524
+ { label: "Contain", value: "contain" }
525
+ ]
526
+ },
527
+ {
528
+ name: "imageCornerStyle",
529
+ type: "select",
530
+ defaultValue: "rounded",
531
+ options: [
532
+ { label: "Rounded", value: "rounded" },
533
+ { label: "Square", value: "square" }
534
+ ]
535
+ },
536
+ {
537
+ name: "imagePosition",
538
+ type: "select",
539
+ defaultValue: "center",
540
+ options: [
541
+ { label: "Center", value: "center" },
542
+ { label: "Top", value: "top" },
543
+ { label: "Bottom", value: "bottom" },
544
+ { label: "Left", value: "left" },
545
+ { label: "Right", value: "right" }
546
+ ]
547
+ },
548
+ {
549
+ name: "imagePositionX",
550
+ type: "number",
551
+ min: 0,
552
+ max: 100,
553
+ admin: {
554
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
555
+ step: 1
556
+ }
557
+ },
558
+ {
559
+ name: "imagePositionY",
560
+ type: "number",
561
+ min: 0,
562
+ max: 100,
563
+ admin: {
564
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
565
+ step: 1
566
+ }
431
567
  }
432
568
  ]
433
569
  },
@@ -554,10 +690,44 @@ var HeroBlock = {
554
690
  relationTo: "media"
555
691
  },
556
692
  {
557
- name: "backgroundImageURL",
558
- type: "text",
693
+ name: "backgroundImageFit",
694
+ type: "select",
695
+ defaultValue: "cover",
696
+ options: [
697
+ { label: "Cover", value: "cover" },
698
+ { label: "Cover (Square)", value: "cover-square" },
699
+ { label: "Contain", value: "contain" },
700
+ { label: "Contain (Square)", value: "contain-square" }
701
+ ],
559
702
  admin: {
560
- description: "Optional external/background image URL override for this hero section."
703
+ description: "How the hero image should be sized within the section."
704
+ }
705
+ },
706
+ {
707
+ name: "backgroundImageCornerStyle",
708
+ type: "select",
709
+ defaultValue: "rounded",
710
+ options: [
711
+ { label: "Rounded", value: "rounded" },
712
+ { label: "Square", value: "square" }
713
+ ],
714
+ admin: {
715
+ description: "How the hero image corners should appear."
716
+ }
717
+ },
718
+ {
719
+ name: "backgroundImagePosition",
720
+ type: "select",
721
+ defaultValue: "center",
722
+ options: [
723
+ { label: "Center", value: "center" },
724
+ { label: "Top", value: "top" },
725
+ { label: "Bottom", value: "bottom" },
726
+ { label: "Left", value: "left" },
727
+ { label: "Right", value: "right" }
728
+ ],
729
+ admin: {
730
+ description: "Where the hero image should anchor inside the section."
561
731
  }
562
732
  },
563
733
  {
@@ -567,6 +737,113 @@ var HeroBlock = {
567
737
  description: "Optional background color override (example: #124a37)."
568
738
  }
569
739
  },
740
+ {
741
+ name: "backgroundOverlayMode",
742
+ type: "select",
743
+ defaultValue: "none",
744
+ options: [
745
+ { label: "None", value: "none" },
746
+ { label: "Solid", value: "solid" },
747
+ { label: "Gradient", value: "gradient" }
748
+ ],
749
+ admin: {
750
+ description: "Optional overlay on top of the hero image (applies when an image is present)."
751
+ }
752
+ },
753
+ {
754
+ name: "backgroundOverlayOpacity",
755
+ type: "number",
756
+ defaultValue: 45,
757
+ min: 0,
758
+ max: 100,
759
+ admin: {
760
+ description: "Overlay opacity (0-100).",
761
+ step: 1
762
+ }
763
+ },
764
+ {
765
+ name: "backgroundOverlayColor",
766
+ type: "text",
767
+ admin: {
768
+ description: "Overlay solid color (example: #000000). Used when Overlay Mode is Solid."
769
+ }
770
+ },
771
+ {
772
+ name: "backgroundOverlayGradientFrom",
773
+ type: "text",
774
+ admin: {
775
+ description: "Gradient overlay start color (example: #0d4a37). Used when Overlay Mode is Gradient."
776
+ }
777
+ },
778
+ {
779
+ name: "backgroundOverlayGradientTo",
780
+ type: "text",
781
+ admin: {
782
+ description: "Gradient overlay end color (example: #1f684f). Used when Overlay Mode is Gradient."
783
+ }
784
+ },
785
+ {
786
+ name: "backgroundOverlayGradientAngle",
787
+ type: "text",
788
+ admin: {
789
+ description: "Gradient overlay angle in degrees (0-360). Used when Overlay Mode is Gradient."
790
+ }
791
+ },
792
+ {
793
+ name: "backgroundOverlayGradientFromStrength",
794
+ type: "number",
795
+ defaultValue: 100,
796
+ min: 0,
797
+ max: 100,
798
+ admin: {
799
+ description: "Gradient start strength (0-100). Set to 0 for transparent.",
800
+ step: 1
801
+ }
802
+ },
803
+ {
804
+ name: "backgroundOverlayGradientToStrength",
805
+ type: "number",
806
+ defaultValue: 100,
807
+ min: 0,
808
+ max: 100,
809
+ admin: {
810
+ description: "Gradient end strength (0-100). Set to 0 for transparent.",
811
+ step: 1
812
+ }
813
+ },
814
+ {
815
+ name: "backgroundOverlayGradientStart",
816
+ type: "number",
817
+ defaultValue: 0,
818
+ min: 0,
819
+ max: 100,
820
+ admin: {
821
+ description: "Where the gradient starts (0-100).",
822
+ step: 1
823
+ }
824
+ },
825
+ {
826
+ name: "backgroundOverlayGradientEnd",
827
+ type: "number",
828
+ defaultValue: 100,
829
+ min: 0,
830
+ max: 100,
831
+ admin: {
832
+ description: "Where the gradient ends (0-100).",
833
+ step: 1
834
+ }
835
+ },
836
+ {
837
+ name: "backgroundOverlayGradientFeather",
838
+ type: "number",
839
+ defaultValue: 100,
840
+ min: 0,
841
+ max: 100,
842
+ admin: {
843
+ description: "How soft the transition is (0 = hard edge, 100 = smooth).",
844
+ step: 1
845
+ }
846
+ },
570
847
  {
571
848
  name: "variant",
572
849
  type: "select",
@@ -582,6 +859,28 @@ var HeroBlock = {
582
859
  }
583
860
  ]
584
861
  },
862
+ {
863
+ name: "heroHeight",
864
+ type: "select",
865
+ defaultValue: "sm",
866
+ options: [
867
+ {
868
+ label: "Small",
869
+ value: "sm"
870
+ },
871
+ {
872
+ label: "Medium (Half Screen)",
873
+ value: "md"
874
+ },
875
+ {
876
+ label: "Full Screen",
877
+ value: "full"
878
+ }
879
+ ],
880
+ admin: {
881
+ description: "Controls the vertical height of the hero section."
882
+ }
883
+ },
585
884
  ...sectionStyleFields()
586
885
  ]
587
886
  };
@@ -627,6 +926,67 @@ var LogoWallBlock = {
627
926
  relationTo: "media",
628
927
  required: false
629
928
  },
929
+ {
930
+ name: "imageHeight",
931
+ type: "number",
932
+ defaultValue: 64,
933
+ min: 24,
934
+ max: 200,
935
+ admin: {
936
+ description: "Overrides the logo image height (in pixels).",
937
+ step: 4
938
+ }
939
+ },
940
+ {
941
+ name: "imageFit",
942
+ type: "select",
943
+ defaultValue: "contain",
944
+ options: [
945
+ { label: "Cover", value: "cover" },
946
+ { label: "Contain", value: "contain" }
947
+ ]
948
+ },
949
+ {
950
+ name: "imageCornerStyle",
951
+ type: "select",
952
+ defaultValue: "rounded",
953
+ options: [
954
+ { label: "Rounded", value: "rounded" },
955
+ { label: "Square", value: "square" }
956
+ ]
957
+ },
958
+ {
959
+ name: "imagePosition",
960
+ type: "select",
961
+ defaultValue: "center",
962
+ options: [
963
+ { label: "Center", value: "center" },
964
+ { label: "Top", value: "top" },
965
+ { label: "Bottom", value: "bottom" },
966
+ { label: "Left", value: "left" },
967
+ { label: "Right", value: "right" }
968
+ ]
969
+ },
970
+ {
971
+ name: "imagePositionX",
972
+ type: "number",
973
+ min: 0,
974
+ max: 100,
975
+ admin: {
976
+ description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
977
+ step: 1
978
+ }
979
+ },
980
+ {
981
+ name: "imagePositionY",
982
+ type: "number",
983
+ min: 0,
984
+ max: 100,
985
+ admin: {
986
+ description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
987
+ step: 1
988
+ }
989
+ },
630
990
  {
631
991
  name: "href",
632
992
  type: "text"
@@ -677,6 +1037,36 @@ var MediaBlock = {
677
1037
  }
678
1038
  ]
679
1039
  },
1040
+ {
1041
+ name: "imageFit",
1042
+ type: "select",
1043
+ defaultValue: "cover",
1044
+ options: [
1045
+ { label: "Cover", value: "cover" },
1046
+ { label: "Contain", value: "contain" }
1047
+ ]
1048
+ },
1049
+ {
1050
+ name: "imageCornerStyle",
1051
+ type: "select",
1052
+ defaultValue: "rounded",
1053
+ options: [
1054
+ { label: "Rounded", value: "rounded" },
1055
+ { label: "Square", value: "square" }
1056
+ ]
1057
+ },
1058
+ {
1059
+ name: "imagePosition",
1060
+ type: "select",
1061
+ defaultValue: "center",
1062
+ options: [
1063
+ { label: "Center", value: "center" },
1064
+ { label: "Top", value: "top" },
1065
+ { label: "Bottom", value: "bottom" },
1066
+ { label: "Left", value: "left" },
1067
+ { label: "Right", value: "right" }
1068
+ ]
1069
+ },
680
1070
  ...sectionStyleFields()
681
1071
  ]
682
1072
  };
@@ -794,11 +1184,41 @@ var TestimonialsBlock = {
794
1184
  type: "text",
795
1185
  required: true
796
1186
  },
1187
+ {
1188
+ name: "visibleCount",
1189
+ type: "number",
1190
+ defaultValue: 3,
1191
+ min: 1,
1192
+ max: 6,
1193
+ admin: {
1194
+ description: "How many testimonials to show at once.",
1195
+ step: 1
1196
+ }
1197
+ },
1198
+ {
1199
+ name: "autoRotate",
1200
+ type: "checkbox",
1201
+ defaultValue: true,
1202
+ admin: {
1203
+ description: "Automatically rotates through all testimonials."
1204
+ }
1205
+ },
1206
+ {
1207
+ name: "rotateIntervalSeconds",
1208
+ type: "number",
1209
+ defaultValue: 7,
1210
+ min: 2,
1211
+ max: 30,
1212
+ admin: {
1213
+ description: "How often to rotate (in seconds).",
1214
+ step: 1
1215
+ }
1216
+ },
797
1217
  {
798
1218
  name: "items",
799
1219
  type: "array",
800
1220
  minRows: 1,
801
- maxRows: 6,
1221
+ maxRows: 30,
802
1222
  fields: [
803
1223
  {
804
1224
  name: "quote",
@@ -17,8 +17,8 @@ import {
17
17
  defaultPageLayoutBlocks,
18
18
  sectionPresets,
19
19
  templateStarterPresets
20
- } from "../chunk-PC5622T7.mjs";
21
- import "../chunk-ETRRXURT.mjs";
20
+ } from "../chunk-I4NH636V.mjs";
21
+ import "../chunk-SIL2J5MF.mjs";
22
22
  import "../chunk-6BWS3CLP.mjs";
23
23
  export {
24
24
  BeforeAfterBlock,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sectionStyleDefaults
3
- } from "./chunk-ETRRXURT.mjs";
3
+ } from "./chunk-SIL2J5MF.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-6BWS3CLP.mjs";
@@ -32,6 +32,9 @@ var defaultNodeData = {
32
32
  items: [
33
33
  {
34
34
  description: "Before and after result summary.",
35
+ imageCornerStyle: "rounded",
36
+ imageFit: "cover",
37
+ imagePosition: "center",
35
38
  label: "Project One"
36
39
  }
37
40
  ],
@@ -55,9 +58,9 @@ var defaultNodeData = {
55
58
  featureGrid: {
56
59
  ...withSectionStyleDefaults({}),
57
60
  items: [
58
- { description: "Explain this point.", icon: "01", title: "Feature One" },
59
- { description: "Explain this point.", icon: "02", title: "Feature Two" },
60
- { description: "Explain this point.", icon: "03", title: "Feature Three" }
61
+ { description: "Explain this point.", icon: "01", imageCornerStyle: "rounded", imageFit: "cover", imagePosition: "center", title: "Feature One" },
62
+ { description: "Explain this point.", icon: "02", imageCornerStyle: "rounded", imageFit: "cover", imagePosition: "center", title: "Feature Two" },
63
+ { description: "Explain this point.", icon: "03", imageCornerStyle: "rounded", imageFit: "cover", imagePosition: "center", title: "Feature Three" }
61
64
  ],
62
65
  title: "Section Title",
63
66
  variant: "cards"
@@ -70,7 +73,22 @@ var defaultNodeData = {
70
73
  },
71
74
  hero: {
72
75
  ...withSectionStyleDefaults({}),
73
- backgroundColor: "#124a37",
76
+ backgroundColor: "",
77
+ backgroundOverlayMode: "none",
78
+ backgroundOverlayOpacity: 45,
79
+ backgroundOverlayColor: "#000000",
80
+ backgroundOverlayGradientFrom: "#0d4a37",
81
+ backgroundOverlayGradientTo: "#1f684f",
82
+ backgroundOverlayGradientAngle: "135",
83
+ backgroundOverlayGradientFromStrength: 100,
84
+ backgroundOverlayGradientToStrength: 100,
85
+ backgroundOverlayGradientStart: 0,
86
+ backgroundOverlayGradientEnd: 100,
87
+ backgroundOverlayGradientFeather: 100,
88
+ backgroundImageCornerStyle: "rounded",
89
+ backgroundImageFit: "cover",
90
+ backgroundImagePosition: "center",
91
+ heroHeight: "sm",
74
92
  headline: "New Hero Section",
75
93
  kicker: "Optional kicker",
76
94
  primaryHref: "/contact",
@@ -83,13 +101,16 @@ var defaultNodeData = {
83
101
  media: {
84
102
  ...withSectionStyleDefaults({}),
85
103
  caption: "Add a caption",
104
+ imageCornerStyle: "rounded",
105
+ imageFit: "cover",
106
+ imagePosition: "center",
86
107
  size: "default"
87
108
  },
88
109
  logoWall: withSectionStyleDefaults({
89
110
  items: [
90
- { name: "Trusted Partner 1" },
91
- { name: "Trusted Partner 2" },
92
- { name: "Trusted Partner 3" }
111
+ { imageCornerStyle: "rounded", imageFit: "contain", imagePosition: "center", name: "Trusted Partner 1" },
112
+ { imageCornerStyle: "rounded", imageFit: "contain", imagePosition: "center", name: "Trusted Partner 2" },
113
+ { imageCornerStyle: "rounded", imageFit: "contain", imagePosition: "center", name: "Trusted Partner 3" }
93
114
  ],
94
115
  subtitle: "Trusted by teams and homeowners across Central Texas.",
95
116
  title: "Trusted by Local Organizations"
@@ -130,8 +151,11 @@ var defaultNodeData = {
130
151
  },
131
152
  testimonials: {
132
153
  ...withSectionStyleDefaults({}),
154
+ autoRotate: true,
133
155
  items: [{ location: "City, ST", name: "Customer Name", quote: "Customer feedback goes here." }],
134
- title: "What Customers Say"
156
+ rotateIntervalSeconds: 7,
157
+ title: "What Customers Say",
158
+ visibleCount: 3
135
159
  },
136
160
  stats: withSectionStyleDefaults({
137
161
  items: [
@@ -7,6 +7,7 @@ import {
7
7
  var admin_exports = {};
8
8
  __export(admin_exports, {
9
9
  configureAdmin: () => configureAdmin,
10
+ createHeaderNavItemsField: () => createHeaderNavItemsField,
10
11
  createThemePreferenceField: () => createThemePreferenceField,
11
12
  themePreferenceField: () => themePreferenceField,
12
13
  withTooltips: () => withTooltips
@@ -269,10 +270,46 @@ function addTooltipToField(field, tooltips) {
269
270
  return field;
270
271
  }
271
272
 
273
+ // src/admin/fields/headerNav.ts
274
+ var createHeaderNavItemsField = () => ({
275
+ name: "navItems",
276
+ type: "array",
277
+ labels: { singular: "Navigation Link", plural: "Navigation Links" },
278
+ admin: {
279
+ description: "The links displayed in your website's main navigation menu."
280
+ },
281
+ fields: [
282
+ {
283
+ name: "label",
284
+ type: "text",
285
+ required: true,
286
+ admin: {
287
+ description: "The text shown for this navigation link."
288
+ }
289
+ },
290
+ {
291
+ name: "href",
292
+ type: "text",
293
+ required: true,
294
+ admin: {
295
+ description: 'The URL this link points to (e.g., "/about" or "https://example.com").'
296
+ }
297
+ },
298
+ {
299
+ name: "parentHref",
300
+ type: "text",
301
+ admin: {
302
+ description: "Optional parent link URL. If set to another nav item href, this item appears in that dropdown."
303
+ }
304
+ }
305
+ ]
306
+ });
307
+
272
308
  export {
273
309
  createThemePreferenceField,
274
310
  themePreferenceField,
275
311
  configureAdmin,
276
312
  withTooltips,
313
+ createHeaderNavItemsField,
277
314
  admin_exports
278
315
  };