@kyro-cms/core 0.9.0 → 0.9.1

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 (248) hide show
  1. package/README.md +57 -589
  2. package/dist/{WebhookService-118ZTFis.d.ts → WebhookService-CUTb9XOy.d.ts} +1 -1
  3. package/dist/{WebhookService-AefJfqX0.d.cts → WebhookService-Yg2UEOB4.d.cts} +1 -1
  4. package/dist/api-handler-graphql.cjs +44 -0
  5. package/dist/api-handler-graphql.cjs.map +1 -0
  6. package/dist/api-handler-graphql.d.cts +6 -0
  7. package/dist/api-handler-graphql.d.ts +6 -0
  8. package/dist/api-handler-graphql.js +41 -0
  9. package/dist/api-handler-graphql.js.map +1 -0
  10. package/dist/api-handler-trpc.cjs +38 -0
  11. package/dist/api-handler-trpc.cjs.map +1 -0
  12. package/dist/api-handler-trpc.d.cts +5 -0
  13. package/dist/api-handler-trpc.d.ts +5 -0
  14. package/dist/api-handler-trpc.js +36 -0
  15. package/dist/api-handler-trpc.js.map +1 -0
  16. package/dist/api-handler.cjs +31 -97
  17. package/dist/api-handler.cjs.map +1 -1
  18. package/dist/api-handler.d.cts +2 -1
  19. package/dist/api-handler.d.ts +2 -1
  20. package/dist/api-handler.js +19 -95
  21. package/dist/api-handler.js.map +1 -1
  22. package/dist/{tenant-B1YB0Jy8.d.ts → base-B71y_EAF.d.cts} +6 -12
  23. package/dist/{tenant-Cpeveji6.d.cts → base-DaqY2GhA.d.ts} +6 -12
  24. package/dist/bootstrap-5NLASFOG.cjs +32 -0
  25. package/dist/{bootstrap-AKAUP6F6.cjs.map → bootstrap-5NLASFOG.cjs.map} +1 -1
  26. package/dist/bootstrap-T5BK77LD.js +7 -0
  27. package/dist/{bootstrap-JCML6NFO.js.map → bootstrap-T5BK77LD.js.map} +1 -1
  28. package/dist/{chunk-35U3FROB.js → chunk-22M4O4ZJ.js} +607 -63
  29. package/dist/chunk-22M4O4ZJ.js.map +1 -0
  30. package/dist/chunk-2HZRBATX.cjs +253 -0
  31. package/dist/chunk-2HZRBATX.cjs.map +1 -0
  32. package/dist/{chunk-VJT6P4N6.cjs → chunk-3HR772HI.cjs} +199 -32
  33. package/dist/chunk-3HR772HI.cjs.map +1 -0
  34. package/dist/chunk-3KTWGODI.cjs +178 -0
  35. package/dist/chunk-3KTWGODI.cjs.map +1 -0
  36. package/dist/{chunk-QXIQWPAP.js → chunk-3UK5XBVJ.js} +4 -134
  37. package/dist/chunk-3UK5XBVJ.js.map +1 -0
  38. package/dist/{chunk-FXYP2HA6.js → chunk-4AO3A3JM.js} +48 -4
  39. package/dist/chunk-4AO3A3JM.js.map +1 -0
  40. package/dist/chunk-4M7X5HAB.cjs +173 -0
  41. package/dist/chunk-4M7X5HAB.cjs.map +1 -0
  42. package/dist/chunk-5EPFQUQD.js +3243 -0
  43. package/dist/chunk-5EPFQUQD.js.map +1 -0
  44. package/dist/{chunk-Y3N7UUDO.js → chunk-7OGPN7MP.js} +5 -2
  45. package/dist/chunk-7OGPN7MP.js.map +1 -0
  46. package/dist/{chunk-WOWUL7ZY.js → chunk-AL5KX63J.js} +4 -3
  47. package/dist/chunk-AL5KX63J.js.map +1 -0
  48. package/dist/{chunk-2OL4O2TH.cjs → chunk-C36TMDTY.cjs} +66 -61
  49. package/dist/chunk-C36TMDTY.cjs.map +1 -0
  50. package/dist/{chunk-ES5HNFFT.js → chunk-CF7OL6HR.js} +4 -2
  51. package/dist/chunk-CF7OL6HR.js.map +1 -0
  52. package/dist/chunk-CJONKRHJ.js +162 -0
  53. package/dist/chunk-CJONKRHJ.js.map +1 -0
  54. package/dist/{chunk-2KVHZE6O.cjs → chunk-COIASRDK.cjs} +202 -46
  55. package/dist/chunk-COIASRDK.cjs.map +1 -0
  56. package/dist/chunk-DEVFAKCQ.cjs +3291 -0
  57. package/dist/chunk-DEVFAKCQ.cjs.map +1 -0
  58. package/dist/{chunk-3ZFYL34R.js → chunk-DYTZ6FQ7.js} +12 -185
  59. package/dist/chunk-DYTZ6FQ7.js.map +1 -0
  60. package/dist/{chunk-QPPDLRNR.js → chunk-EJN2PAOE.js} +197 -41
  61. package/dist/chunk-EJN2PAOE.js.map +1 -0
  62. package/dist/chunk-FAXU7BMP.js +220 -0
  63. package/dist/chunk-FAXU7BMP.js.map +1 -0
  64. package/dist/{chunk-OHVB4AJ7.js → chunk-FOPGUM27.js} +22 -17
  65. package/dist/chunk-FOPGUM27.js.map +1 -0
  66. package/dist/chunk-GAOXD3XT.js +175 -0
  67. package/dist/chunk-GAOXD3XT.js.map +1 -0
  68. package/dist/{chunk-4DA7QPLA.cjs → chunk-GXFOGU7N.cjs} +5 -2
  69. package/dist/chunk-GXFOGU7N.cjs.map +1 -0
  70. package/dist/{chunk-I7HHI6QV.cjs → chunk-IDVRRRAK.cjs} +17 -9
  71. package/dist/chunk-IDVRRRAK.cjs.map +1 -0
  72. package/dist/{chunk-WQBRWOQT.cjs → chunk-JOPVMWTM.cjs} +3 -2
  73. package/dist/chunk-JOPVMWTM.cjs.map +1 -0
  74. package/dist/chunk-KC2GDBLS.cjs +84 -0
  75. package/dist/chunk-KC2GDBLS.cjs.map +1 -0
  76. package/dist/{chunk-K7JPTH3G.cjs → chunk-KNRSROWB.cjs} +132 -74
  77. package/dist/chunk-KNRSROWB.cjs.map +1 -0
  78. package/dist/{chunk-3AJE4SEG.js → chunk-KPA4AN4R.js} +125 -67
  79. package/dist/chunk-KPA4AN4R.js.map +1 -0
  80. package/dist/{chunk-QUW2RZTM.cjs → chunk-L46ROHUS.cjs} +51 -7
  81. package/dist/chunk-L46ROHUS.cjs.map +1 -0
  82. package/dist/chunk-L4EZKIEX.js +185 -0
  83. package/dist/chunk-L4EZKIEX.js.map +1 -0
  84. package/dist/{chunk-REK7AYOC.js → chunk-L5UKKZQN.js} +199 -32
  85. package/dist/chunk-L5UKKZQN.js.map +1 -0
  86. package/dist/chunk-NKPKR5BW.cjs +188 -0
  87. package/dist/chunk-NKPKR5BW.cjs.map +1 -0
  88. package/dist/{chunk-Y3QQN7PN.js → chunk-P2HKJ7P5.js} +13 -4
  89. package/dist/chunk-P2HKJ7P5.js.map +1 -0
  90. package/dist/{chunk-SA7NSSIQ.cjs → chunk-PI73NNOK.cjs} +13 -187
  91. package/dist/chunk-PI73NNOK.cjs.map +1 -0
  92. package/dist/{chunk-HXRD4B37.js → chunk-PU2Z5VWF.js} +1279 -556
  93. package/dist/chunk-PU2Z5VWF.js.map +1 -0
  94. package/dist/{chunk-H727JIG7.js → chunk-Q72BOAPK.js} +16 -8
  95. package/dist/chunk-Q72BOAPK.js.map +1 -0
  96. package/dist/{chunk-IBG6V56E.cjs → chunk-QFLB4EIJ.cjs} +2 -139
  97. package/dist/chunk-QFLB4EIJ.cjs.map +1 -0
  98. package/dist/{chunk-YVUJBEXE.cjs → chunk-RAMGUDJN.cjs} +16 -7
  99. package/dist/chunk-RAMGUDJN.cjs.map +1 -0
  100. package/dist/{chunk-LINKCEG4.cjs → chunk-ROJHKAQ4.cjs} +617 -73
  101. package/dist/chunk-ROJHKAQ4.cjs.map +1 -0
  102. package/dist/{chunk-5KVM3WEY.cjs → chunk-RSF3UU7H.cjs} +1330 -602
  103. package/dist/chunk-RSF3UU7H.cjs.map +1 -0
  104. package/dist/{chunk-V3LKPM3O.cjs → chunk-SHTTJMLT.cjs} +4 -2
  105. package/dist/chunk-SHTTJMLT.cjs.map +1 -0
  106. package/dist/chunk-SPBTLUN6.js +92 -0
  107. package/dist/chunk-SPBTLUN6.js.map +1 -0
  108. package/dist/{chunk-57P6MJKC.js → chunk-TXSZFA4G.js} +3 -3
  109. package/dist/chunk-TXSZFA4G.js.map +1 -0
  110. package/dist/chunk-UERVXYVK.cjs +99 -0
  111. package/dist/chunk-UERVXYVK.cjs.map +1 -0
  112. package/dist/{chunk-PDYFVNUX.cjs → chunk-V2TVSCV5.cjs} +16 -23
  113. package/dist/chunk-V2TVSCV5.cjs.map +1 -0
  114. package/dist/{chunk-DXHRBMGB.js → chunk-VO35MNPH.js} +12 -19
  115. package/dist/chunk-VO35MNPH.js.map +1 -0
  116. package/dist/{chunk-IA6AU5PI.cjs → chunk-WNCYAKF3.cjs} +3 -3
  117. package/dist/chunk-WNCYAKF3.cjs.map +1 -0
  118. package/dist/chunk-XEB7PH2E.js +81 -0
  119. package/dist/chunk-XEB7PH2E.js.map +1 -0
  120. package/dist/cli/index.cjs +5 -5
  121. package/dist/cli/index.cjs.map +1 -1
  122. package/dist/cli/index.js +5 -5
  123. package/dist/cli/index.js.map +1 -1
  124. package/dist/client.cjs +3 -3
  125. package/dist/client.d.cts +3 -3
  126. package/dist/client.d.ts +3 -3
  127. package/dist/client.js +1 -1
  128. package/dist/drizzle/index.cjs +14 -13
  129. package/dist/drizzle/index.d.cts +9 -7
  130. package/dist/drizzle/index.d.ts +9 -7
  131. package/dist/drizzle/index.js +5 -4
  132. package/dist/fields/index.cjs +21 -37
  133. package/dist/fields/index.d.cts +2 -22
  134. package/dist/fields/index.d.ts +2 -22
  135. package/dist/fields/index.js +1 -1
  136. package/dist/graphql/index.cjs +5 -4
  137. package/dist/graphql/index.d.cts +5 -3
  138. package/dist/graphql/index.d.ts +5 -3
  139. package/dist/graphql/index.js +3 -2
  140. package/dist/index-CJXPB_ot.d.ts +276 -0
  141. package/dist/index-CaTNnLGd.d.cts +276 -0
  142. package/dist/index.cjs +304 -162
  143. package/dist/index.cjs.map +1 -1
  144. package/dist/index.d.cts +129 -205
  145. package/dist/index.d.ts +129 -205
  146. package/dist/index.js +172 -33
  147. package/dist/index.js.map +1 -1
  148. package/dist/integration.cjs +2 -2
  149. package/dist/integration.js +1 -1
  150. package/dist/mongo-auth-adapter-ISOM7FSS.cjs +17 -0
  151. package/dist/{mongo-auth-adapter-NHHUJHVH.cjs.map → mongo-auth-adapter-ISOM7FSS.cjs.map} +1 -1
  152. package/dist/mongo-auth-adapter-MO6STCV3.js +4 -0
  153. package/dist/{mongo-auth-adapter-NJQUUCTP.js.map → mongo-auth-adapter-MO6STCV3.js.map} +1 -1
  154. package/dist/mongodb/index.cjs +8 -7
  155. package/dist/mongodb/index.d.cts +5 -7
  156. package/dist/mongodb/index.d.ts +5 -7
  157. package/dist/mongodb/index.js +4 -3
  158. package/dist/postgres-auth-adapter-DWDR7P5G.js +5 -0
  159. package/dist/{postgres-auth-adapter-3T2NKTSE.js.map → postgres-auth-adapter-DWDR7P5G.js.map} +1 -1
  160. package/dist/postgres-auth-adapter-WRWSJD4E.cjs +14 -0
  161. package/dist/{postgres-auth-adapter-7IEENCKQ.cjs.map → postgres-auth-adapter-WRWSJD4E.cjs.map} +1 -1
  162. package/dist/redis-adapter-HGTPWIGV.js +4 -0
  163. package/dist/{redis-adapter-VQXD7ESY.js.map → redis-adapter-HGTPWIGV.js.map} +1 -1
  164. package/dist/redis-adapter-KJ3YOOT6.cjs +13 -0
  165. package/dist/{redis-adapter-D2E2S3GB.cjs.map → redis-adapter-KJ3YOOT6.cjs.map} +1 -1
  166. package/dist/rest/index.cjs +15 -14
  167. package/dist/rest/index.d.cts +4 -4
  168. package/dist/rest/index.d.ts +4 -4
  169. package/dist/rest/index.js +13 -12
  170. package/dist/{schema-5PHL5IVB.js → schema-6I5OFR4Z.js} +3 -3
  171. package/dist/{schema-5PHL5IVB.js.map → schema-6I5OFR4Z.js.map} +1 -1
  172. package/dist/{schema-37SE2F4B.cjs → schema-TTFE4467.cjs} +14 -14
  173. package/dist/{schema-37SE2F4B.cjs.map → schema-TTFE4467.cjs.map} +1 -1
  174. package/dist/sqlite-adapter-6GEUSVXQ.js +4 -0
  175. package/dist/{sqlite-adapter-TR3U3W6Q.js.map → sqlite-adapter-6GEUSVXQ.js.map} +1 -1
  176. package/dist/sqlite-adapter-CSIZE5SX.cjs +13 -0
  177. package/dist/{sqlite-adapter-LVK5PS4T.cjs.map → sqlite-adapter-CSIZE5SX.cjs.map} +1 -1
  178. package/dist/templates/index.cjs +133 -31
  179. package/dist/templates/index.d.cts +52 -9
  180. package/dist/templates/index.d.ts +52 -9
  181. package/dist/templates/index.js +3 -1
  182. package/dist/trpc/index.cjs +13 -12
  183. package/dist/trpc/index.d.cts +55 -49
  184. package/dist/trpc/index.d.ts +55 -49
  185. package/dist/trpc/index.js +4 -3
  186. package/dist/{types-D6ZLRGbH.d.cts → types-CpjuXbe7.d.cts} +2 -0
  187. package/dist/{types-D6ZLRGbH.d.ts → types-CpjuXbe7.d.ts} +2 -0
  188. package/dist/{types-Bs1up4yP.d.ts → types-CyCQ6SAI.d.ts} +28 -2
  189. package/dist/{types-J3R9nVsZ.d.cts → types-DJxD9394.d.cts} +28 -2
  190. package/dist/{types-VtjUxIMp.d.cts → types-Z6FBiqa2.d.cts} +35 -14
  191. package/dist/{types-VtjUxIMp.d.ts → types-Z6FBiqa2.d.ts} +35 -14
  192. package/package.json +22 -4
  193. package/dist/bootstrap-AKAUP6F6.cjs +0 -32
  194. package/dist/bootstrap-JCML6NFO.js +0 -7
  195. package/dist/chunk-2KVHZE6O.cjs.map +0 -1
  196. package/dist/chunk-2OL4O2TH.cjs.map +0 -1
  197. package/dist/chunk-35U3FROB.js.map +0 -1
  198. package/dist/chunk-3AJE4SEG.js.map +0 -1
  199. package/dist/chunk-3J4MFTI3.js +0 -3872
  200. package/dist/chunk-3J4MFTI3.js.map +0 -1
  201. package/dist/chunk-3ZFYL34R.js.map +0 -1
  202. package/dist/chunk-4DA7QPLA.cjs.map +0 -1
  203. package/dist/chunk-57P6MJKC.js.map +0 -1
  204. package/dist/chunk-5KVM3WEY.cjs.map +0 -1
  205. package/dist/chunk-6IMPH6WV.cjs +0 -3897
  206. package/dist/chunk-6IMPH6WV.cjs.map +0 -1
  207. package/dist/chunk-ATBOUGQP.cjs +0 -513
  208. package/dist/chunk-ATBOUGQP.cjs.map +0 -1
  209. package/dist/chunk-DXHRBMGB.js.map +0 -1
  210. package/dist/chunk-ES5HNFFT.js.map +0 -1
  211. package/dist/chunk-FXYP2HA6.js.map +0 -1
  212. package/dist/chunk-H727JIG7.js.map +0 -1
  213. package/dist/chunk-HXRD4B37.js.map +0 -1
  214. package/dist/chunk-I7HHI6QV.cjs.map +0 -1
  215. package/dist/chunk-IA6AU5PI.cjs.map +0 -1
  216. package/dist/chunk-IBG6V56E.cjs.map +0 -1
  217. package/dist/chunk-K7JPTH3G.cjs.map +0 -1
  218. package/dist/chunk-LINKCEG4.cjs.map +0 -1
  219. package/dist/chunk-OHVB4AJ7.js.map +0 -1
  220. package/dist/chunk-PDYFVNUX.cjs.map +0 -1
  221. package/dist/chunk-Q23JB3KL.js +0 -488
  222. package/dist/chunk-Q23JB3KL.js.map +0 -1
  223. package/dist/chunk-QPPDLRNR.js.map +0 -1
  224. package/dist/chunk-QUW2RZTM.cjs.map +0 -1
  225. package/dist/chunk-QXIQWPAP.js.map +0 -1
  226. package/dist/chunk-R3XIBBAW.cjs +0 -34
  227. package/dist/chunk-R3XIBBAW.cjs.map +0 -1
  228. package/dist/chunk-REK7AYOC.js.map +0 -1
  229. package/dist/chunk-SA7NSSIQ.cjs.map +0 -1
  230. package/dist/chunk-SDMNUYVU.js +0 -30
  231. package/dist/chunk-SDMNUYVU.js.map +0 -1
  232. package/dist/chunk-V3LKPM3O.cjs.map +0 -1
  233. package/dist/chunk-VJT6P4N6.cjs.map +0 -1
  234. package/dist/chunk-WOWUL7ZY.js.map +0 -1
  235. package/dist/chunk-WQBRWOQT.cjs.map +0 -1
  236. package/dist/chunk-Y3N7UUDO.js.map +0 -1
  237. package/dist/chunk-Y3QQN7PN.js.map +0 -1
  238. package/dist/chunk-YVUJBEXE.cjs.map +0 -1
  239. package/dist/index-CLp-DRKA.d.ts +0 -64
  240. package/dist/index-DfO7G4kN.d.cts +0 -64
  241. package/dist/mongo-auth-adapter-NHHUJHVH.cjs +0 -17
  242. package/dist/mongo-auth-adapter-NJQUUCTP.js +0 -4
  243. package/dist/postgres-auth-adapter-3T2NKTSE.js +0 -5
  244. package/dist/postgres-auth-adapter-7IEENCKQ.cjs +0 -14
  245. package/dist/redis-adapter-D2E2S3GB.cjs +0 -13
  246. package/dist/redis-adapter-VQXD7ESY.js +0 -4
  247. package/dist/sqlite-adapter-LVK5PS4T.cjs +0 -13
  248. package/dist/sqlite-adapter-TR3U3W6Q.js +0 -4
@@ -0,0 +1,3243 @@
1
+ import { storageSettingsGlobal } from './chunk-GAOXD3XT.js';
2
+ import { authCollections } from './chunk-XEB7PH2E.js';
3
+
4
+ // src/templates/minimal.ts
5
+ var minimalCollections = {};
6
+
7
+ // src/templates/starter.ts
8
+ var starterCollections = {};
9
+
10
+ // src/templates/blog.ts
11
+ var blogCollections = {};
12
+ var blogGlobals = [];
13
+
14
+ // src/templates/ecommerce.ts
15
+ var ecommerceCollections = {};
16
+ var ecommerceGlobals = [];
17
+
18
+ // src/templates/kitchen-sink.ts
19
+ var kitchenSinkCollections = {};
20
+
21
+ // src/templates/media.ts
22
+ var mediaCollection = {
23
+ slug: "media",
24
+ label: "Media Library",
25
+ admin: {
26
+ useAsTitle: "title",
27
+ defaultColumns: ["thumbnailUrl", "title", "type", "fileSize", "createdAt"],
28
+ group: "content"
29
+ },
30
+ access: {
31
+ read: () => true,
32
+ create: () => true,
33
+ update: () => true,
34
+ delete: () => true
35
+ },
36
+ fields: [
37
+ {
38
+ name: "title",
39
+ type: "text",
40
+ label: "Title",
41
+ required: true,
42
+ admin: {
43
+ description: "Descriptive title for the file"
44
+ }
45
+ },
46
+ {
47
+ name: "filename",
48
+ type: "text",
49
+ label: "Filename",
50
+ required: true,
51
+ admin: {
52
+ readOnly: true,
53
+ description: "System filename (auto-generated)"
54
+ }
55
+ },
56
+ {
57
+ name: "originalName",
58
+ type: "text",
59
+ label: "Original Name",
60
+ admin: {
61
+ readOnly: true
62
+ }
63
+ },
64
+ {
65
+ name: "alt",
66
+ type: "text",
67
+ label: "Alt Text",
68
+ admin: {
69
+ description: "Alternative text for images (accessibility)"
70
+ }
71
+ },
72
+ {
73
+ name: "caption",
74
+ type: "richtext",
75
+ label: "Caption",
76
+ admin: {
77
+ description: "Optional caption or description"
78
+ }
79
+ },
80
+ {
81
+ name: "type",
82
+ type: "select",
83
+ label: "File Type",
84
+ required: true,
85
+ defaultValue: "document",
86
+ options: [
87
+ { label: "Image", value: "image" },
88
+ { label: "Video", value: "video" },
89
+ { label: "Audio", value: "audio" },
90
+ { label: "Document", value: "document" },
91
+ { label: "Archive", value: "archive" },
92
+ { label: "Other", value: "other" }
93
+ ],
94
+ admin: {
95
+ readOnly: true
96
+ }
97
+ },
98
+ {
99
+ name: "mimeType",
100
+ type: "text",
101
+ label: "MIME Type",
102
+ admin: {
103
+ readOnly: true
104
+ }
105
+ },
106
+ {
107
+ name: "url",
108
+ type: "text",
109
+ label: "URL",
110
+ required: true,
111
+ admin: {
112
+ readOnly: true,
113
+ description: "Public URL of the file"
114
+ }
115
+ },
116
+ {
117
+ name: "thumbnailUrl",
118
+ type: "text",
119
+ label: "Thumbnail URL",
120
+ admin: {
121
+ readOnly: true
122
+ }
123
+ },
124
+ {
125
+ name: "width",
126
+ type: "number",
127
+ label: "Width",
128
+ admin: {
129
+ readOnly: true,
130
+ description: "Width in pixels (for images/videos)"
131
+ }
132
+ },
133
+ {
134
+ name: "height",
135
+ type: "number",
136
+ label: "Height",
137
+ admin: {
138
+ readOnly: true,
139
+ description: "Height in pixels (for images/videos)"
140
+ }
141
+ },
142
+ {
143
+ name: "fileSize",
144
+ type: "number",
145
+ label: "File Size",
146
+ admin: {
147
+ readOnly: true,
148
+ description: "Size in bytes"
149
+ }
150
+ },
151
+ {
152
+ name: "folder",
153
+ type: "text",
154
+ label: "Folder",
155
+ admin: {
156
+ description: "Folder path for organization (e.g., /products, /blog)"
157
+ }
158
+ },
159
+ {
160
+ name: "tags",
161
+ type: "array",
162
+ label: "Tags",
163
+ fields: [
164
+ {
165
+ name: "tag",
166
+ type: "text",
167
+ label: "Tag"
168
+ }
169
+ ]
170
+ },
171
+ {
172
+ name: "focalPoint",
173
+ type: "group",
174
+ label: "Focal Point",
175
+ admin: {
176
+ description: "Point of interest for cropping"
177
+ },
178
+ fields: [
179
+ {
180
+ name: "x",
181
+ type: "number",
182
+ label: "X",
183
+ defaultValue: 50
184
+ },
185
+ {
186
+ name: "y",
187
+ type: "number",
188
+ label: "Y",
189
+ defaultValue: 50
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ name: "metadata",
195
+ type: "json",
196
+ label: "Metadata",
197
+ admin: {
198
+ readOnly: true,
199
+ description: "Additional file metadata (EXIF, etc.)"
200
+ }
201
+ },
202
+ {
203
+ name: "provider",
204
+ type: "select",
205
+ label: "Storage Provider",
206
+ defaultValue: "local",
207
+ options: [
208
+ { label: "Local", value: "local" },
209
+ { label: "AWS S3", value: "s3" },
210
+ { label: "Cloudinary", value: "cloudinary" },
211
+ { label: "Imgix", value: "imgix" }
212
+ ],
213
+ admin: {
214
+ readOnly: true
215
+ }
216
+ },
217
+ {
218
+ name: "status",
219
+ type: "select",
220
+ label: "Status",
221
+ defaultValue: "active",
222
+ options: [
223
+ { label: "Active", value: "active" },
224
+ { label: "Archived", value: "archived" }
225
+ ]
226
+ },
227
+ {
228
+ name: "createdAt",
229
+ type: "date",
230
+ label: "Created",
231
+ admin: {
232
+ readOnly: true
233
+ }
234
+ },
235
+ {
236
+ name: "updatedAt",
237
+ type: "date",
238
+ label: "Last Modified",
239
+ admin: {
240
+ readOnly: true
241
+ }
242
+ }
243
+ ]
244
+ };
245
+ var mediaCollections = [mediaCollection];
246
+
247
+ // src/templates/menu.ts
248
+ var menuCollection = {
249
+ slug: "menu",
250
+ label: "Menu",
251
+ singularLabel: "Menu Item",
252
+ admin: {
253
+ useAsTitle: "title",
254
+ defaultColumns: ["title", "menu_location"]
255
+ },
256
+ fields: [
257
+ { name: "title", type: "text", label: "Title", required: true },
258
+ {
259
+ name: "menu_location",
260
+ type: "select",
261
+ label: "Menu Location",
262
+ options: [
263
+ { label: "Header", value: "header" },
264
+ { label: "Footer", value: "footer" },
265
+ { label: "Sidebar", value: "sidebar" },
266
+ { label: "Primary", value: "primary" },
267
+ { label: "Secondary", value: "secondary" }
268
+ ],
269
+ required: true,
270
+ admin: { position: "sidebar" }
271
+ },
272
+ {
273
+ name: "order",
274
+ type: "number",
275
+ label: "Order",
276
+ admin: { position: "sidebar" }
277
+ },
278
+ {
279
+ name: "menu",
280
+ type: "group",
281
+ fields: [
282
+ {
283
+ name: "menu_item",
284
+ label: "Menu Item",
285
+ type: "array",
286
+ fields: [
287
+ {
288
+ name: "link_type",
289
+ type: "select",
290
+ label: "Link Type",
291
+ options: [
292
+ { label: "Internal", value: "internal" },
293
+ { label: "External", value: "external" }
294
+ ]
295
+ },
296
+ {
297
+ name: "internal_target",
298
+ type: "relationship",
299
+ label: "Internal Target",
300
+ relationTo: ["pages", "posts"],
301
+ admin: {
302
+ condition: { field: "link_type", equals: "internal" }
303
+ }
304
+ },
305
+ {
306
+ name: "external_url",
307
+ type: "text",
308
+ label: "External URL",
309
+ admin: {
310
+ condition: { field: "link_type", equals: "external" }
311
+ }
312
+ }
313
+ ]
314
+ }
315
+ ]
316
+ }
317
+ ]
318
+ };
319
+ var menuCollections = {
320
+ menu: menuCollection
321
+ };
322
+
323
+ // src/templates/posts.ts
324
+ var postsCollection = {
325
+ slug: "posts",
326
+ label: "Posts",
327
+ labelPlural: "Posts",
328
+ singularLabel: "Post",
329
+ admin: {
330
+ useAsTitle: "title",
331
+ defaultColumns: ["title", "slug", "publishStatus", "createdAt", "updatedAt"],
332
+ description: "Blog posts and articles"
333
+ },
334
+ fields: [
335
+ {
336
+ name: "mainTabs",
337
+ type: "tabs",
338
+ tabs: [
339
+ {
340
+ label: "Content",
341
+ fields: [
342
+ {
343
+ name: "title",
344
+ type: "text",
345
+ required: true,
346
+ label: "Title",
347
+ admin: {
348
+ description: "The main title of the post as it will appear publicly."
349
+ }
350
+ },
351
+ {
352
+ name: "content",
353
+ type: "richtext",
354
+ label: "Content"
355
+ }
356
+ ]
357
+ },
358
+ {
359
+ label: "Meta",
360
+ fields: [
361
+ {
362
+ name: "category",
363
+ type: "relationship",
364
+ label: "Category",
365
+ relationTo: "categories",
366
+ admin: {
367
+ description: "Select the primary category this post belongs to."
368
+ }
369
+ },
370
+ {
371
+ name: "relatedPosts",
372
+ type: "array",
373
+ label: "Related Posts",
374
+ fields: [
375
+ {
376
+ name: "post",
377
+ type: "relationship",
378
+ relationTo: "posts",
379
+ label: "Post"
380
+ }
381
+ ],
382
+ admin: { description: "Select posts related to this one." }
383
+ }
384
+ ]
385
+ },
386
+ {
387
+ label: "SEO",
388
+ fields: [
389
+ {
390
+ name: "metaTitle",
391
+ type: "text",
392
+ label: "Meta Title",
393
+ admin: {
394
+ autoGenerate: "title",
395
+ description: "The title used for SEO and social sharing (recommended < 60 chars)."
396
+ }
397
+ },
398
+ {
399
+ name: "metaDescription",
400
+ type: "textarea",
401
+ label: "Meta Description",
402
+ admin: {
403
+ autoGenerate: "content",
404
+ description: "A brief summary for search engines (recommended < 160 chars)."
405
+ }
406
+ },
407
+ {
408
+ name: "ogImage",
409
+ type: "upload",
410
+ label: "OG Image",
411
+ relationTo: "media",
412
+ admin: {
413
+ description: "The image shown when the post is shared on social media."
414
+ }
415
+ }
416
+ ]
417
+ }
418
+ ]
419
+ },
420
+ {
421
+ name: "slug",
422
+ type: "text",
423
+ required: true,
424
+ label: "Slug",
425
+ admin: {
426
+ description: "The URL-friendly identifier for the post.",
427
+ position: "sidebar",
428
+ autoGenerate: "title"
429
+ }
430
+ },
431
+ {
432
+ name: "tags",
433
+ type: "list",
434
+ label: "Tags",
435
+ admin: {
436
+ description: "Add keywords to help categorize your post.",
437
+ position: "sidebar"
438
+ }
439
+ },
440
+ {
441
+ name: "authors",
442
+ type: "array",
443
+ label: "Authors",
444
+ fields: [
445
+ {
446
+ name: "user",
447
+ type: "relationship",
448
+ label: "User",
449
+ relationTo: "users"
450
+ }
451
+ ],
452
+ admin: {
453
+ description: "Select one or more authors for this post.",
454
+ position: "sidebar"
455
+ }
456
+ },
457
+ {
458
+ name: "featuredImage",
459
+ type: "upload",
460
+ label: "Featured Image",
461
+ relationTo: "media",
462
+ admin: {
463
+ description: "The primary visual used to represent this post.",
464
+ position: "sidebar"
465
+ }
466
+ }
467
+ ],
468
+ timestamps: true,
469
+ versions: {
470
+ drafts: true,
471
+ maxPerDoc: 10
472
+ }
473
+ };
474
+ var postsCollections = {
475
+ posts: postsCollection
476
+ };
477
+
478
+ // src/templates/blocks.ts
479
+ function withUtilityFields(block) {
480
+ return {
481
+ ...block,
482
+ fields: [...block.fields, ...utilityFields]
483
+ };
484
+ }
485
+ var buttonFields = [
486
+ { name: "text", type: "text", label: "Button Label" },
487
+ { name: "url", type: "text", label: "Button Redirection URL" }
488
+ ];
489
+ var buttonsField = {
490
+ name: "buttons",
491
+ type: "array",
492
+ label: "Action Buttons",
493
+ fields: buttonFields
494
+ };
495
+ var headingElement = {
496
+ slug: "heading-element",
497
+ label: "Heading",
498
+ admin: { group: "Basic Content Elements", description: "Section heading" },
499
+ fields: [
500
+ { name: "content", type: "text", label: "Content" }
501
+ ]
502
+ };
503
+ var textElement = {
504
+ slug: "text-element",
505
+ label: "Text",
506
+ admin: { group: "Basic Content Elements", description: "Plain text paragraph" },
507
+ fields: [
508
+ { name: "content", type: "textarea", label: "Content" }
509
+ ]
510
+ };
511
+ var imageElement = {
512
+ slug: "image-element",
513
+ label: "Image",
514
+ admin: { group: "Basic Content Elements", description: "Single image" },
515
+ fields: [
516
+ { name: "image", type: "upload", label: "Image", relationTo: "media" }
517
+ ]
518
+ };
519
+ var richtextElement = {
520
+ slug: "richtext-element",
521
+ label: "Rich Text",
522
+ admin: { group: "Basic Content Elements", description: "Formatted rich text content" },
523
+ fields: [
524
+ { name: "content", type: "richtext", label: "Content" }
525
+ ]
526
+ };
527
+ var buttonElement = {
528
+ slug: "button-element",
529
+ label: "Button",
530
+ admin: { group: "Basic Content Elements", description: "Call-to-action button" },
531
+ fields: [
532
+ {
533
+ name: "buttonData",
534
+ type: "group",
535
+ label: "Button",
536
+ admin: { inline: true },
537
+ fields: [
538
+ { name: "text", type: "text", label: "Label" },
539
+ { name: "url", type: "text", label: "URL" }
540
+ ]
541
+ }
542
+ ]
543
+ };
544
+ var videoElement = {
545
+ slug: "video-element",
546
+ label: "Video",
547
+ admin: { group: "Basic Content Elements", description: "Embedded video player" },
548
+ fields: [
549
+ { name: "url", type: "text", label: "Video URL" },
550
+ { name: "file", type: "upload", label: "Video File", relationTo: "media" },
551
+ { name: "caption", type: "text", label: "Caption" }
552
+ ]
553
+ };
554
+ var listElement = {
555
+ slug: "list-element",
556
+ label: "List",
557
+ admin: { group: "Basic Content Elements", description: "Bulleted or numbered list" },
558
+ fields: [
559
+ {
560
+ name: "items",
561
+ type: "array",
562
+ label: "Items",
563
+ fields: [
564
+ { name: "text", type: "text", label: "Item Text" }
565
+ ]
566
+ }
567
+ ]
568
+ };
569
+ var elementBlocks = [
570
+ headingElement,
571
+ textElement,
572
+ imageElement,
573
+ richtextElement,
574
+ buttonElement,
575
+ videoElement,
576
+ listElement
577
+ ];
578
+ var elementsField = {
579
+ name: "elements",
580
+ type: "blocks",
581
+ label: "Extra Content Elements",
582
+ blocks: elementBlocks,
583
+ admin: { pickerMode: "dropdown" }
584
+ };
585
+ var utilityFields = [elementsField];
586
+ var heroBlock = withUtilityFields({
587
+ slug: "hero",
588
+ admin: { group: "Structural Sections", description: "Primary landing section with heading, text, media & CTA" },
589
+ label: "Hero Section",
590
+ fields: [
591
+ {
592
+ name: "isMultiScreen",
593
+ type: "checkbox",
594
+ label: "Enable Multi-Screen Slides (Carousel)",
595
+ defaultValue: false
596
+ },
597
+ {
598
+ name: "multiSlides",
599
+ type: "group",
600
+ label: "Multi Slides",
601
+ admin: {
602
+ condition: { field: "isMultiScreen", equals: true }
603
+ },
604
+ fields: [
605
+ {
606
+ name: "multiSlides",
607
+ type: "array",
608
+ label: "Hero Slides",
609
+ fields: [
610
+ { name: "heading", type: "text", label: "Slide Heading" },
611
+ { name: "subheading", type: "textarea", label: "Slide Subheading" },
612
+ { name: "backgroundImage", type: "upload", label: "Slide Background Image", relationTo: "media" },
613
+ buttonsField
614
+ ]
615
+ }
616
+ ]
617
+ },
618
+ {
619
+ name: "singleSlide",
620
+ type: "group",
621
+ label: "Single Slide",
622
+ admin: {
623
+ condition: { field: "isMultiScreen", equals: false }
624
+ },
625
+ fields: [
626
+ { name: "heading", type: "text", label: "Heading" },
627
+ { name: "subheading", type: "textarea", label: "Subheading" },
628
+ { name: "backgroundImage", type: "upload", label: "Background Image", relationTo: "media" },
629
+ buttonsField
630
+ ]
631
+ }
632
+ ]
633
+ });
634
+ var cardBlock = withUtilityFields({
635
+ slug: "card",
636
+ admin: { group: "Structural Sections", description: "Modular card block featuring title, text, and optional media" },
637
+ label: "Card Block",
638
+ fields: [
639
+ {
640
+ name: "isMultiCard",
641
+ type: "checkbox",
642
+ label: "Enable Multicard Layout",
643
+ defaultValue: false
644
+ },
645
+ {
646
+ name: "multiCards",
647
+ type: "group",
648
+ label: "Multi Cards",
649
+ admin: {
650
+ condition: { field: "isMultiCard", equals: true }
651
+ },
652
+ fields: [
653
+ {
654
+ name: "cards",
655
+ type: "array",
656
+ label: "Cards List",
657
+ fields: [
658
+ { name: "title", type: "text", label: "Card Title" },
659
+ { name: "description", type: "textarea", label: "Card Description" },
660
+ { name: "image", type: "upload", label: "Card Image", relationTo: "media" },
661
+ { name: "icon", type: "text", label: "Card Icon (Emoji or Name)" },
662
+ { name: "linkText", type: "text", label: "Link Label Text" },
663
+ { name: "link", type: "text", label: "Link Redirection URL" }
664
+ ]
665
+ }
666
+ ]
667
+ },
668
+ {
669
+ name: "singleCard",
670
+ type: "group",
671
+ label: "Single Card",
672
+ admin: {
673
+ condition: { field: "isMultiCard", equals: false }
674
+ },
675
+ fields: [
676
+ { name: "title", type: "text", label: "Title" },
677
+ { name: "description", type: "textarea", label: "Description" },
678
+ { name: "image", type: "upload", label: "Image", relationTo: "media" },
679
+ { name: "icon", type: "text", label: "Icon (Emoji or Name)" },
680
+ { name: "linkText", type: "text", label: "Link Label Text" },
681
+ { name: "link", type: "text", label: "Link Redirection URL" }
682
+ ]
683
+ }
684
+ ]
685
+ });
686
+ withUtilityFields({
687
+ slug: "text",
688
+ admin: { group: "Basic Content Elements", description: "Rich text content" },
689
+ label: "Text Block",
690
+ fields: [
691
+ { name: "content", type: "richtext", label: "Content" }
692
+ ]
693
+ });
694
+ withUtilityFields({
695
+ slug: "image",
696
+ admin: { group: "Basic Content Elements", description: "Image upload container" },
697
+ label: "Image",
698
+ fields: [
699
+ { name: "image", type: "upload", label: "Image", relationTo: "media" },
700
+ { name: "caption", type: "text", label: "Caption" },
701
+ { name: "alt", type: "text", label: "Alt Text" },
702
+ {
703
+ name: "aspectRatio",
704
+ type: "select",
705
+ label: "Aspect Ratio",
706
+ defaultValue: "original",
707
+ options: [
708
+ { label: "Original", value: "original" },
709
+ { label: "16:9 Landscape", value: "16-9" },
710
+ { label: "4:3 Classic", value: "4-3" },
711
+ { label: "1:1 Square", value: "1-1" },
712
+ { label: "2:3 Portrait", value: "2-3" }
713
+ ]
714
+ },
715
+ { name: "enableLightbox", type: "checkbox", label: "Enable Zoom / Lightbox", defaultValue: false }
716
+ ]
717
+ });
718
+ var featureSplitBlock = withUtilityFields({
719
+ slug: "feature-split",
720
+ admin: { group: "Structural Sections", description: "Side-by-side text and media layout" },
721
+ label: "Feature Split (Text & Media)",
722
+ fields: [
723
+ { name: "title", type: "text", label: "Title" },
724
+ { name: "description", type: "richtext", label: "Description" },
725
+ {
726
+ name: "checkpoints",
727
+ type: "array",
728
+ label: "Value Checkpoints",
729
+ fields: [
730
+ { name: "title", type: "text", label: "Checkpoint Title" },
731
+ { name: "description", type: "textarea", label: "Checkpoint Description" },
732
+ { name: "icon", type: "text", label: "Icon Name" },
733
+ { name: "image", type: "upload", label: "Image", relationTo: "media" },
734
+ { name: "itemUrl", type: "text", label: "Link URL" }
735
+ ]
736
+ },
737
+ {
738
+ name: "images",
739
+ type: "array",
740
+ label: "Images",
741
+ fields: [
742
+ { name: "image", type: "upload", label: "Image", relationTo: "media" }
743
+ ]
744
+ },
745
+ buttonsField
746
+ ]
747
+ });
748
+ var featureGridBlock = withUtilityFields({
749
+ slug: "feature-grid",
750
+ admin: { group: "Marketing Grids", description: "Multi-column grid showcasing features or services" },
751
+ label: "Feature Grid",
752
+ fields: [
753
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
754
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
755
+ {
756
+ name: "features",
757
+ type: "array",
758
+ label: "Features List",
759
+ fields: [
760
+ { name: "title", type: "text", label: "Title" },
761
+ { name: "description", type: "textarea", label: "Description" },
762
+ { name: "icon", type: "text", label: "Icon Name" },
763
+ { name: "image", type: "upload", label: "Feature Image", relationTo: "media" },
764
+ { name: "itemUrl", type: "text", label: "Card Redirection URL" }
765
+ ]
766
+ }
767
+ ]
768
+ });
769
+ var ctaBannerBlock = withUtilityFields({
770
+ slug: "cta-banner",
771
+ admin: { group: "Structural Sections", description: "High-impact call-to-action banner" },
772
+ label: "CTA Banner",
773
+ fields: [
774
+ { name: "headline", type: "text", label: "Headline" },
775
+ { name: "subheading", type: "textarea", label: "Subheading" },
776
+ { name: "backgroundImage", type: "upload", label: "Background Image", relationTo: "media" },
777
+ buttonsField
778
+ ]
779
+ });
780
+ var testimonialsBlock = withUtilityFields({
781
+ slug: "testimonials",
782
+ admin: { group: "Marketing Grids", description: "Customer reviews and quotes carousel" },
783
+ label: "Testimonials",
784
+ fields: [
785
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
786
+ {
787
+ name: "items",
788
+ type: "array",
789
+ label: "Testimonials",
790
+ fields: [
791
+ { name: "quote", type: "textarea", label: "Quote" },
792
+ {
793
+ name: "rating",
794
+ type: "select",
795
+ label: "Star Rating",
796
+ defaultValue: "5",
797
+ options: [
798
+ { label: "5 Stars", value: "5" },
799
+ { label: "4 Stars", value: "4" },
800
+ { label: "3 Stars", value: "3" },
801
+ { label: "2 Stars", value: "2" },
802
+ { label: "1 Star", value: "1" }
803
+ ]
804
+ },
805
+ { name: "authorName", type: "text", label: "Author Name" },
806
+ { name: "authorRole", type: "text", label: "Author Role" },
807
+ { name: "avatar", type: "upload", label: "Avatar", relationTo: "media" },
808
+ { name: "companyLogo", type: "upload", label: "Company Logo", relationTo: "media" }
809
+ ]
810
+ }
811
+ ]
812
+ });
813
+ var faqBlock = withUtilityFields({
814
+ slug: "faq",
815
+ admin: { group: "Lead Capture & Interactive", description: "Expandable list of frequently asked questions" },
816
+ label: "FAQ Section",
817
+ fields: [
818
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
819
+ {
820
+ name: "items",
821
+ type: "array",
822
+ label: "Questions List",
823
+ fields: [
824
+ { name: "tag", type: "text", label: "Category Tag (e.g. billing, account)" },
825
+ { name: "question", type: "text", label: "Question" },
826
+ { name: "answer", type: "richtext", label: "Answer" }
827
+ ]
828
+ },
829
+ { name: "footerHeading", type: "text", label: "Footer Heading (e.g. Still have questions?)" },
830
+ { name: "footerCtaUrl", type: "text", label: "Footer CTA Redirection URL" }
831
+ ]
832
+ });
833
+ var statsBlock = withUtilityFields({
834
+ slug: "stats",
835
+ admin: { group: "Marketing Grids", description: "Grid displaying key numerical metrics and stats" },
836
+ label: "Stats / Metrics",
837
+ fields: [
838
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
839
+ {
840
+ name: "items",
841
+ type: "array",
842
+ label: "Stats List",
843
+ fields: [
844
+ { name: "prefix", type: "text", label: "Value Prefix (e.g. + or $)" },
845
+ { name: "value", type: "text", label: "Value (e.g. 99.9 or 5M)" },
846
+ { name: "suffix", type: "text", label: "Value Suffix (e.g. % or users)" },
847
+ { name: "label", type: "text", label: "Label (e.g. Uptime)" },
848
+ { name: "description", type: "textarea", label: "Context Description" }
849
+ ]
850
+ }
851
+ ]
852
+ });
853
+ var logoCloudBlock = withUtilityFields({
854
+ slug: "logo-cloud",
855
+ admin: { group: "Structural Sections", description: "Showcase for partner and client company logos" },
856
+ label: "Logo Cloud / Partners",
857
+ fields: [
858
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
859
+ {
860
+ name: "logos",
861
+ type: "array",
862
+ label: "Logos List",
863
+ fields: [
864
+ { name: "name", type: "text", label: "Company Name" },
865
+ { name: "logo", type: "upload", label: "Logo Image", relationTo: "media" },
866
+ { name: "url", type: "text", label: "Website URL" }
867
+ ]
868
+ }
869
+ ]
870
+ });
871
+ var pricingBlock = withUtilityFields({
872
+ slug: "pricing",
873
+ admin: { group: "Marketing Grids", description: "Tiered pricing plans with feature comparisons" },
874
+ label: "Pricing Plans",
875
+ fields: [
876
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
877
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
878
+ { name: "annualDiscount", type: "text", label: "Annual Promo Tag (e.g. Save 20%)" },
879
+ {
880
+ name: "plans",
881
+ type: "array",
882
+ label: "Pricing Plans",
883
+ fields: [
884
+ { name: "popularBadgeText", type: "text", label: "Plan Badge (e.g. MOST POPULAR)" },
885
+ { name: "name", type: "text", label: "Plan Name" },
886
+ { name: "description", type: "textarea", label: "Plan Description" },
887
+ { name: "currency", type: "text", label: "Plan Currency (e.g. $)", defaultValue: "$" },
888
+ { name: "price", type: "text", label: "Price (e.g. 29)" },
889
+ { name: "billingPeriod", type: "text", label: "Billing Period (e.g. /mo)" },
890
+ { name: "features", type: "list", label: "Features Checklist" },
891
+ buttonsField,
892
+ { name: "footnote", type: "text", label: "Footnote note (e.g. *cancel anytime)" },
893
+ { name: "isFeatured", type: "checkbox", label: "Highlight Plan (Featured)", defaultValue: false }
894
+ ]
895
+ }
896
+ ]
897
+ });
898
+ var teamBlock = withUtilityFields({
899
+ slug: "team",
900
+ admin: { group: "Marketing Grids", description: "Showcase of team members with photos and roles" },
901
+ label: "Team Showcase",
902
+ fields: [
903
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
904
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
905
+ {
906
+ name: "members",
907
+ type: "array",
908
+ label: "Team Members",
909
+ fields: [
910
+ { name: "name", type: "text", label: "Member Name" },
911
+ { name: "role", type: "text", label: "Role / Position" },
912
+ { name: "department", type: "text", label: "Department / Team tag (e.g. engineering, design)" },
913
+ { name: "avatar", type: "upload", label: "Avatar Image", relationTo: "media" },
914
+ { name: "bio", type: "textarea", label: "Brief Bio" },
915
+ { name: "twitterUrl", type: "text", label: "Twitter URL" },
916
+ { name: "linkedinUrl", type: "text", label: "LinkedIn URL" },
917
+ { name: "githubUrl", type: "text", label: "GitHub URL" },
918
+ { name: "websiteUrl", type: "text", label: "Website URL" }
919
+ ]
920
+ }
921
+ ]
922
+ });
923
+ var recentFeedBlock = withUtilityFields({
924
+ slug: "recent-feed",
925
+ admin: { group: "Dynamic Content", description: "Dynamic feed of recent blog posts or articles" },
926
+ label: "Recent Posts Feed",
927
+ fields: [
928
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
929
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
930
+ {
931
+ name: "collectionType",
932
+ type: "select",
933
+ label: "Feed Source Collection",
934
+ dynamicOptions: "collections"
935
+ },
936
+ { name: "categoryFilter", type: "text", label: "Filter results by category slug / tag" },
937
+ { name: "limit", type: "number", label: "Max Items to Show", defaultValue: 3 },
938
+ buttonsField
939
+ ]
940
+ });
941
+ var processStepsBlock = withUtilityFields({
942
+ slug: "process-steps",
943
+ admin: { group: "Lead Capture & Interactive", description: "Numbered sequence illustrating a process or workflow" },
944
+ label: "Process Steps / Timeline",
945
+ fields: [
946
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
947
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
948
+ {
949
+ name: "steps",
950
+ type: "array",
951
+ label: "Steps",
952
+ fields: [
953
+ { name: "stepNumber", type: "text", label: "Step Number (e.g. 01)" },
954
+ { name: "icon", type: "upload", label: "Step Icon / Image", relationTo: "media" },
955
+ { name: "title", type: "text", label: "Step Title" },
956
+ { name: "description", type: "textarea", label: "Description" }
957
+ ]
958
+ }
959
+ ]
960
+ });
961
+ var formEmbedBlock = withUtilityFields({
962
+ slug: "form-embed",
963
+ admin: { group: "Lead Capture & Interactive", description: "Embeddable interactive forms for lead capture" },
964
+ label: "Form Embed",
965
+ fields: [
966
+ { name: "title", type: "text", label: "Form Title" },
967
+ { name: "subtitle", type: "textarea", label: "Form Subtitle" },
968
+ {
969
+ name: "form",
970
+ type: "relationship",
971
+ relationTo: "forms",
972
+ label: "Form",
973
+ required: true
974
+ }
975
+ ]
976
+ });
977
+ var videoShowcaseBlock = withUtilityFields({
978
+ slug: "video-showcase",
979
+ admin: { group: "Structural Sections", description: "Cinematic video player with custom thumbnail" },
980
+ label: "Cinematic Video Showcase",
981
+ fields: [
982
+ { name: "sectionTitle", type: "text", label: "Section Heading" },
983
+ { name: "sectionSubtitle", type: "textarea", label: "Section Subtitle" },
984
+ { name: "coverImage", type: "upload", label: "Cinematic Cover Image (Thumbnail)", relationTo: "media" },
985
+ { name: "videoUrl", type: "text", label: "Video Embed URL (YouTube / Vimeo / MP4)" },
986
+ { name: "videoTitle", type: "text", label: "Video Title (for accessibility & hover text)" },
987
+ { name: "durationBadge", type: "text", label: "Duration Badge (e.g. '\u25B6 2:34')" },
988
+ { name: "isLightbox", type: "checkbox", label: "Open in Cinematic Lightbox Modal", defaultValue: true },
989
+ { name: "autoplay", type: "checkbox", label: "Autoplay Video (muted)", defaultValue: false }
990
+ ]
991
+ });
992
+ var coreSemanticBlocks = [
993
+ heroBlock,
994
+ cardBlock,
995
+ featureSplitBlock,
996
+ featureGridBlock,
997
+ ctaBannerBlock,
998
+ testimonialsBlock,
999
+ faqBlock,
1000
+ statsBlock,
1001
+ logoCloudBlock,
1002
+ pricingBlock,
1003
+ teamBlock,
1004
+ recentFeedBlock,
1005
+ processStepsBlock,
1006
+ formEmbedBlock,
1007
+ videoShowcaseBlock
1008
+ ];
1009
+
1010
+ // src/templates/pages.ts
1011
+ var pageCollection = {
1012
+ slug: "pages",
1013
+ label: "Pages",
1014
+ labelPlural: "Pages",
1015
+ singularLabel: "Page",
1016
+ admin: {
1017
+ useAsTitle: "title",
1018
+ defaultColumns: ["title", "slug", "publishStatus", "updatedAt"],
1019
+ description: "Static pages"
1020
+ },
1021
+ fields: [
1022
+ {
1023
+ name: "mainTabs",
1024
+ type: "tabs",
1025
+ tabs: [
1026
+ {
1027
+ label: "Content",
1028
+ fields: [
1029
+ {
1030
+ name: "title",
1031
+ type: "text",
1032
+ required: true,
1033
+ label: "Title",
1034
+ admin: {
1035
+ description: "The main title of the page as it will appear publicly."
1036
+ }
1037
+ },
1038
+ {
1039
+ name: "content",
1040
+ type: "blocks",
1041
+ label: "Content",
1042
+ blocks: coreSemanticBlocks
1043
+ }
1044
+ ]
1045
+ },
1046
+ {
1047
+ label: "Meta",
1048
+ fields: []
1049
+ },
1050
+ {
1051
+ label: "SEO",
1052
+ fields: [
1053
+ {
1054
+ name: "metaTitle",
1055
+ type: "text",
1056
+ label: "Meta Title",
1057
+ admin: { autoGenerate: "title" }
1058
+ },
1059
+ {
1060
+ name: "metaDescription",
1061
+ type: "textarea",
1062
+ label: "Meta Description",
1063
+ admin: { autoGenerate: "content" }
1064
+ },
1065
+ {
1066
+ name: "ogImage",
1067
+ type: "upload",
1068
+ label: "OG Image",
1069
+ relationTo: "media"
1070
+ }
1071
+ ]
1072
+ }
1073
+ ]
1074
+ },
1075
+ {
1076
+ name: "slug",
1077
+ type: "text",
1078
+ required: true,
1079
+ label: "Slug",
1080
+ admin: { position: "sidebar", autoGenerate: "title" }
1081
+ },
1082
+ {
1083
+ name: "featuredImage",
1084
+ type: "upload",
1085
+ label: "Featured Image",
1086
+ relationTo: "media",
1087
+ admin: { position: "sidebar" }
1088
+ }
1089
+ ],
1090
+ timestamps: true,
1091
+ versions: {
1092
+ drafts: true,
1093
+ maxPerDoc: 10
1094
+ }
1095
+ };
1096
+ var pageCollections = {
1097
+ pages: pageCollection
1098
+ };
1099
+
1100
+ // src/templates/categories.ts
1101
+ var categoriesCollection = {
1102
+ slug: "categories",
1103
+ label: "Categories",
1104
+ labelPlural: "Categories",
1105
+ singularLabel: "Category",
1106
+ admin: {
1107
+ useAsTitle: "name",
1108
+ defaultColumns: ["name", "slug"],
1109
+ description: "Post categories",
1110
+ layout: "split"
1111
+ },
1112
+ fields: [
1113
+ { name: "name", type: "text", required: true, label: "Name" },
1114
+ {
1115
+ name: "description",
1116
+ type: "textarea",
1117
+ label: "Description"
1118
+ },
1119
+ {
1120
+ name: "slug",
1121
+ type: "text",
1122
+ required: true,
1123
+ label: "Slug",
1124
+ admin: { position: "sidebar", autoGenerate: "name" }
1125
+ },
1126
+ {
1127
+ name: "icon",
1128
+ type: "upload",
1129
+ label: "Icon",
1130
+ relationTo: "media",
1131
+ admin: { position: "sidebar" }
1132
+ },
1133
+ {
1134
+ name: "parent",
1135
+ type: "relationship",
1136
+ label: "Parent Category",
1137
+ relationTo: "categories",
1138
+ admin: { position: "sidebar" }
1139
+ },
1140
+ {
1141
+ name: "order",
1142
+ type: "number",
1143
+ label: "Order",
1144
+ defaultValue: 0,
1145
+ admin: { position: "sidebar" }
1146
+ }
1147
+ ],
1148
+ timestamps: true,
1149
+ versions: {
1150
+ drafts: true,
1151
+ maxPerDoc: 5
1152
+ }
1153
+ };
1154
+ var categoriesCollections = {
1155
+ categories: categoriesCollection
1156
+ };
1157
+ var productCategoriesCollection = {
1158
+ slug: "product-categories",
1159
+ label: "Product Categories",
1160
+ labelPlural: "Product Categories",
1161
+ singularLabel: "Product Category",
1162
+ admin: {
1163
+ useAsTitle: "name",
1164
+ defaultColumns: ["name", "slug"],
1165
+ description: "Product categories for organizing your catalog"
1166
+ },
1167
+ fields: [
1168
+ { name: "name", type: "text", required: true, label: "Name" },
1169
+ {
1170
+ name: "slug",
1171
+ type: "text",
1172
+ required: true,
1173
+ label: "Slug",
1174
+ admin: { position: "sidebar", autoGenerate: "name" }
1175
+ },
1176
+ {
1177
+ name: "description",
1178
+ type: "textarea",
1179
+ label: "Description"
1180
+ },
1181
+ { name: "image", type: "text", label: "Image URL" },
1182
+ {
1183
+ name: "parent",
1184
+ type: "relationship",
1185
+ label: "Parent Category",
1186
+ relationTo: "product-categories",
1187
+ admin: { position: "sidebar" }
1188
+ }
1189
+ ],
1190
+ timestamps: true,
1191
+ versions: {
1192
+ drafts: true,
1193
+ maxPerDoc: 5
1194
+ }
1195
+ };
1196
+ var productCategoriesCollections = {
1197
+ "product-categories": productCategoriesCollection
1198
+ };
1199
+
1200
+ // src/templates/products.ts
1201
+ var productsCollection = {
1202
+ slug: "products",
1203
+ label: "Products",
1204
+ labelPlural: "Products",
1205
+ singularLabel: "Product",
1206
+ admin: {
1207
+ useAsTitle: "title",
1208
+ defaultColumns: ["title", "slug", "price", "publishStatus", "inventory", "updatedAt"],
1209
+ description: "Product catalog"
1210
+ },
1211
+ fields: [
1212
+ { name: "title", type: "text", required: true, label: "Title" },
1213
+ {
1214
+ name: "slug",
1215
+ type: "text",
1216
+ required: true,
1217
+ label: "Slug",
1218
+ admin: { position: "sidebar", autoGenerate: "title" }
1219
+ },
1220
+ { name: "description", type: "richtext", label: "Description" },
1221
+ { name: "price", type: "number", required: true, label: "Price" },
1222
+ {
1223
+ name: "compareAtPrice",
1224
+ type: "number",
1225
+ label: "Compare at Price",
1226
+ admin: { description: "Original price for sale display" }
1227
+ },
1228
+ {
1229
+ name: "costPrice",
1230
+ type: "number",
1231
+ label: "Cost Price",
1232
+ admin: { description: "For profit calculation" }
1233
+ },
1234
+ { name: "sku", type: "text", required: true, label: "SKU" },
1235
+ { name: "barcode", type: "text", label: "Barcode" },
1236
+ {
1237
+ name: "images",
1238
+ type: "array",
1239
+ label: "Images",
1240
+ fields: [
1241
+ { name: "url", type: "text", label: "URL" },
1242
+ { name: "alt", type: "text", label: "Alt Text" }
1243
+ ]
1244
+ },
1245
+ {
1246
+ name: "category",
1247
+ type: "relationship",
1248
+ label: "Category",
1249
+ relationTo: "product-categories"
1250
+ },
1251
+ {
1252
+ name: "inventory",
1253
+ type: "number",
1254
+ label: "Inventory",
1255
+ defaultValue: 0
1256
+ }
1257
+ ],
1258
+ timestamps: true,
1259
+ versions: {
1260
+ drafts: true,
1261
+ maxPerDoc: 10
1262
+ }
1263
+ };
1264
+ var productsCollections = {
1265
+ products: productsCollection
1266
+ };
1267
+
1268
+ // src/templates/customers.ts
1269
+ var customersCollection = {
1270
+ slug: "customers",
1271
+ label: "Customers",
1272
+ labelPlural: "Customers",
1273
+ singularLabel: "Customer",
1274
+ admin: {
1275
+ useAsTitle: "email",
1276
+ defaultColumns: [
1277
+ "email",
1278
+ "firstName",
1279
+ "lastName",
1280
+ "createdAt",
1281
+ "updatedAt"
1282
+ ],
1283
+ description: "Customer accounts"
1284
+ },
1285
+ fields: [
1286
+ { name: "email", type: "email", required: true, label: "Email" },
1287
+ { name: "firstName", type: "text", label: "First Name" },
1288
+ { name: "lastName", type: "text", label: "Last Name" },
1289
+ { name: "phone", type: "text", label: "Phone" },
1290
+ {
1291
+ name: "addresses",
1292
+ type: "array",
1293
+ label: "Addresses",
1294
+ fields: [
1295
+ { name: "type", type: "text", label: "Type" },
1296
+ { name: "line1", type: "text", label: "Address Line 1" },
1297
+ { name: "line2", type: "text", label: "Address Line 2" },
1298
+ { name: "city", type: "text", label: "City" },
1299
+ { name: "state", type: "text", label: "State" },
1300
+ { name: "postalCode", type: "text", label: "Postal Code" },
1301
+ { name: "country", type: "text", label: "Country" }
1302
+ ]
1303
+ },
1304
+ {
1305
+ name: "slug",
1306
+ type: "text",
1307
+ required: true,
1308
+ label: "Slug",
1309
+ admin: { position: "sidebar", autoGenerate: "email" }
1310
+ }
1311
+ ],
1312
+ timestamps: true,
1313
+ versions: {
1314
+ drafts: true,
1315
+ maxPerDoc: 5
1316
+ }
1317
+ };
1318
+ var customersCollections = {
1319
+ customers: customersCollection
1320
+ };
1321
+
1322
+ // src/templates/orders.ts
1323
+ var ordersCollection = {
1324
+ slug: "orders",
1325
+ label: "Orders",
1326
+ labelPlural: "Orders",
1327
+ singularLabel: "Order",
1328
+ admin: {
1329
+ useAsTitle: "orderNumber",
1330
+ defaultColumns: [
1331
+ "orderNumber",
1332
+ "customer",
1333
+ "publishStatus",
1334
+ "total",
1335
+ "createdAt",
1336
+ "updatedAt"
1337
+ ],
1338
+ description: "Customer orders"
1339
+ },
1340
+ fields: [
1341
+ {
1342
+ name: "orderNumber",
1343
+ type: "text",
1344
+ required: true,
1345
+ label: "Order Number"
1346
+ },
1347
+ {
1348
+ name: "customer",
1349
+ type: "relationship",
1350
+ required: true,
1351
+ label: "Customer",
1352
+ relationTo: "customers"
1353
+ },
1354
+ {
1355
+ name: "paymentStatus",
1356
+ type: "select",
1357
+ label: "Payment Status",
1358
+ options: [
1359
+ { label: "Pending", value: "pending" },
1360
+ { label: "Paid", value: "paid" },
1361
+ { label: "Failed", value: "failed" },
1362
+ { label: "Refunded", value: "refunded" }
1363
+ ],
1364
+ defaultValue: "pending"
1365
+ },
1366
+ {
1367
+ name: "items",
1368
+ type: "array",
1369
+ label: "Items",
1370
+ fields: [
1371
+ { name: "product", type: "text", label: "Product" },
1372
+ { name: "quantity", type: "number", label: "Quantity" },
1373
+ { name: "unitPrice", type: "number", label: "Unit Price" },
1374
+ { name: "total", type: "number", label: "Total" }
1375
+ ]
1376
+ },
1377
+ { name: "subtotal", type: "number", required: true, label: "Subtotal" },
1378
+ { name: "tax", type: "number", label: "Tax" },
1379
+ { name: "shipping", type: "number", label: "Shipping" },
1380
+ { name: "discount", type: "number", label: "Discount" },
1381
+ { name: "total", type: "number", required: true, label: "Total" },
1382
+ { name: "notes", type: "richtext", label: "Notes" },
1383
+ {
1384
+ name: "slug",
1385
+ type: "text",
1386
+ required: true,
1387
+ label: "Slug",
1388
+ admin: { position: "sidebar", autoGenerate: "orderNumber" }
1389
+ }
1390
+ ],
1391
+ timestamps: true,
1392
+ versions: {
1393
+ drafts: true,
1394
+ maxPerDoc: 10
1395
+ }
1396
+ };
1397
+ var ordersCollections = {
1398
+ orders: ordersCollection
1399
+ };
1400
+
1401
+ // src/templates/coupons.ts
1402
+ var couponsCollection = {
1403
+ slug: "coupons",
1404
+ label: "Coupons",
1405
+ labelPlural: "Coupons",
1406
+ singularLabel: "Coupon",
1407
+ admin: {
1408
+ useAsTitle: "code",
1409
+ defaultColumns: ["code", "type", "value", "active", "expiresAt"],
1410
+ description: "Discount codes and promotions"
1411
+ },
1412
+ fields: [
1413
+ { name: "code", type: "text", required: true, label: "Code" },
1414
+ {
1415
+ name: "type",
1416
+ type: "select",
1417
+ required: true,
1418
+ label: "Type",
1419
+ options: [
1420
+ { label: "Percentage", value: "percentage" },
1421
+ { label: "Fixed Amount", value: "fixed" },
1422
+ { label: "Free Shipping", value: "freeShipping" }
1423
+ ]
1424
+ },
1425
+ { name: "value", type: "number", label: "Value" },
1426
+ { name: "minPurchase", type: "number", label: "Minimum Purchase" },
1427
+ { name: "maxDiscount", type: "number", label: "Max Discount" },
1428
+ { name: "usageLimit", type: "number", label: "Usage Limit" },
1429
+ {
1430
+ name: "usedCount",
1431
+ type: "number",
1432
+ defaultValue: 0,
1433
+ label: "Used Count"
1434
+ },
1435
+ { name: "startsAt", type: "date", label: "Starts At" },
1436
+ { name: "expiresAt", type: "date", label: "Expires At" },
1437
+ { name: "active", type: "checkbox", defaultValue: true, label: "Active" }
1438
+ ],
1439
+ timestamps: true,
1440
+ versions: {
1441
+ drafts: true,
1442
+ maxPerDoc: 5
1443
+ }
1444
+ };
1445
+ var couponsCollections = {
1446
+ coupons: couponsCollection
1447
+ };
1448
+
1449
+ // src/templates/forms.ts
1450
+ var formsCollection = {
1451
+ slug: "forms",
1452
+ label: "Forms",
1453
+ labelPlural: "Forms",
1454
+ singularLabel: "Form",
1455
+ admin: {
1456
+ useAsTitle: "name",
1457
+ defaultColumns: ["name", "slug", "updatedAt"],
1458
+ description: "Reusable form definitions"
1459
+ },
1460
+ fields: [
1461
+ { name: "name", type: "text", required: true, label: "Name" },
1462
+ { name: "subtitle", type: "textarea", label: "Subtitle" },
1463
+ {
1464
+ name: "slug",
1465
+ type: "text",
1466
+ required: true,
1467
+ label: "Slug",
1468
+ admin: { position: "sidebar", autoGenerate: "name" }
1469
+ },
1470
+ {
1471
+ name: "submitButtonText",
1472
+ type: "text",
1473
+ label: "Submit Button Text",
1474
+ defaultValue: "Submit",
1475
+ admin: { position: "sidebar" }
1476
+ },
1477
+ {
1478
+ name: "consentCheckboxText",
1479
+ type: "text",
1480
+ label: "Consent Agreement label (e.g. I agree to terms)",
1481
+ admin: { position: "sidebar" }
1482
+ },
1483
+ {
1484
+ name: "redirectUrl",
1485
+ type: "text",
1486
+ label: "Success Redirect URL",
1487
+ admin: { position: "sidebar" }
1488
+ },
1489
+ {
1490
+ name: "fields",
1491
+ type: "array",
1492
+ label: "Form Fields",
1493
+ fields: [
1494
+ {
1495
+ name: "fieldName",
1496
+ type: "text",
1497
+ label: "Field API Name (e.g. company)"
1498
+ },
1499
+ {
1500
+ name: "inputType",
1501
+ type: "select",
1502
+ label: "Input Type",
1503
+ defaultValue: "text",
1504
+ options: [
1505
+ { label: "Text input", value: "text" },
1506
+ { label: "Email input", value: "email" },
1507
+ { label: "Phone number input", value: "tel" },
1508
+ { label: "Multi-line textarea", value: "textarea" },
1509
+ { label: "Checkbox selector", value: "checkbox" }
1510
+ ]
1511
+ },
1512
+ {
1513
+ name: "placeholder",
1514
+ type: "text",
1515
+ label: "Input Placeholder Text"
1516
+ },
1517
+ {
1518
+ name: "isRequired",
1519
+ type: "checkbox",
1520
+ label: "Make this field required",
1521
+ defaultValue: false
1522
+ }
1523
+ ]
1524
+ },
1525
+ {
1526
+ name: "entries",
1527
+ type: "relationship",
1528
+ relationTo: "form-entries",
1529
+ hasMany: true,
1530
+ label: "Entries",
1531
+ admin: {
1532
+ description: "Form submissions linked to this form."
1533
+ }
1534
+ }
1535
+ ],
1536
+ timestamps: true,
1537
+ versions: {
1538
+ drafts: true,
1539
+ maxPerDoc: 5
1540
+ }
1541
+ };
1542
+ var formsCollections = {
1543
+ forms: formsCollection
1544
+ };
1545
+
1546
+ // src/templates/form-entries.ts
1547
+ var formEntriesCollection = {
1548
+ slug: "form-entries",
1549
+ label: "Form Entries",
1550
+ labelPlural: "Form Entries",
1551
+ singularLabel: "Form Entry",
1552
+ admin: {
1553
+ useAsTitle: "id",
1554
+ defaultColumns: ["id", "form", "createdAt", "ipAddress"],
1555
+ description: "Form submission entries"
1556
+ },
1557
+ fields: [
1558
+ {
1559
+ name: "form",
1560
+ type: "relationship",
1561
+ relationTo: "forms",
1562
+ required: true,
1563
+ label: "Form",
1564
+ admin: {
1565
+ position: "sidebar",
1566
+ readOnly: true,
1567
+ description: "The form this entry belongs to."
1568
+ }
1569
+ },
1570
+ {
1571
+ name: "data",
1572
+ type: "json",
1573
+ label: "Submitted Data",
1574
+ admin: {
1575
+ readOnly: true,
1576
+ description: "All field values submitted with this entry."
1577
+ }
1578
+ },
1579
+ {
1580
+ name: "ipAddress",
1581
+ type: "text",
1582
+ label: "IP Address",
1583
+ admin: {
1584
+ position: "sidebar",
1585
+ readOnly: true,
1586
+ description: "The IP address of the submitter."
1587
+ }
1588
+ }
1589
+ ],
1590
+ timestamps: true
1591
+ };
1592
+ var formEntriesCollections = {
1593
+ "form-entries": formEntriesCollection
1594
+ };
1595
+
1596
+ // src/templates/settings/site.ts
1597
+ var siteSettingsGlobal = {
1598
+ slug: "site-settings",
1599
+ label: "Site Settings",
1600
+ admin: {
1601
+ group: "settings"
1602
+ },
1603
+ access: {
1604
+ read: () => true,
1605
+ update: () => true
1606
+ },
1607
+ fields: [
1608
+ {
1609
+ name: "siteName",
1610
+ type: "text",
1611
+ label: "Site Name",
1612
+ required: true,
1613
+ admin: {}
1614
+ },
1615
+ {
1616
+ name: "siteDescription",
1617
+ type: "textarea",
1618
+ label: "Site Description",
1619
+ admin: {
1620
+ placeholder: "Enter a brief description of your site for SEO and search results."
1621
+ }
1622
+ },
1623
+ {
1624
+ name: "siteLogo",
1625
+ type: "upload",
1626
+ label: "Site Logo",
1627
+ relationTo: "media"
1628
+ },
1629
+ {
1630
+ name: "siteFavicon",
1631
+ type: "upload",
1632
+ label: "Favicon",
1633
+ relationTo: "media"
1634
+ },
1635
+ {
1636
+ name: "siteOgImage",
1637
+ type: "upload",
1638
+ label: "Default OG Image",
1639
+ relationTo: "media"
1640
+ },
1641
+ {
1642
+ name: "siteUrl",
1643
+ type: "text",
1644
+ label: "Site URL",
1645
+ admin: {}
1646
+ },
1647
+ {
1648
+ name: "maintenanceEnabled",
1649
+ type: "checkbox",
1650
+ label: "Enable Maintenance Mode",
1651
+ defaultValue: false,
1652
+ admin: {
1653
+ description: "When enabled, the public site will show a maintenance page."
1654
+ }
1655
+ },
1656
+ {
1657
+ name: "maintenance",
1658
+ type: "group",
1659
+ label: "Maintenance Configuration",
1660
+ admin: {
1661
+ condition: (data) => data.maintenanceEnabled === true
1662
+ },
1663
+ fields: [
1664
+ {
1665
+ name: "message",
1666
+ type: "textarea",
1667
+ label: "Maintenance Message",
1668
+ admin: {
1669
+ placeholder: "We'll be back soon! We're performing scheduled maintenance."
1670
+ }
1671
+ },
1672
+ {
1673
+ name: "bypassToken",
1674
+ type: "text",
1675
+ label: "Bypass Token",
1676
+ admin: {
1677
+ description: "Append ?bypass=YOUR_TOKEN to URL to view the site while in maintenance mode."
1678
+ }
1679
+ }
1680
+ ]
1681
+ },
1682
+ {
1683
+ name: "enableI18n",
1684
+ type: "checkbox",
1685
+ label: "Enable Internationalization (i18n)",
1686
+ defaultValue: false,
1687
+ admin: {
1688
+ description: "Enable support for multiple languages."
1689
+ }
1690
+ },
1691
+ {
1692
+ name: "i18n",
1693
+ type: "group",
1694
+ label: "Localization",
1695
+ admin: {
1696
+ condition: (data) => data.enableI18n === true
1697
+ },
1698
+ fields: [
1699
+ {
1700
+ name: "language",
1701
+ type: "select",
1702
+ label: "Default Language",
1703
+ defaultValue: "en",
1704
+ options: [
1705
+ { label: "English", value: "en" },
1706
+ { label: "Spanish", value: "es" },
1707
+ { label: "French", value: "fr" },
1708
+ { label: "German", value: "de" },
1709
+ { label: "Portuguese", value: "pt" },
1710
+ { label: "Italian", value: "it" },
1711
+ { label: "Dutch", value: "nl" },
1712
+ { label: "Russian", value: "ru" },
1713
+ { label: "Japanese", value: "ja" },
1714
+ { label: "Chinese", value: "zh" },
1715
+ { label: "Korean", value: "ko" },
1716
+ { label: "Arabic", value: "ar" }
1717
+ ]
1718
+ },
1719
+ {
1720
+ name: "timezone",
1721
+ type: "text",
1722
+ label: "Timezone",
1723
+ defaultValue: "UTC"
1724
+ }
1725
+ ]
1726
+ },
1727
+ {
1728
+ name: "logo",
1729
+ type: "group",
1730
+ label: "Logo Display Settings",
1731
+ fields: [
1732
+ {
1733
+ name: "width",
1734
+ type: "number",
1735
+ label: "Max Width (px)"
1736
+ },
1737
+ {
1738
+ name: "height",
1739
+ type: "number",
1740
+ label: "Max Height (px)"
1741
+ },
1742
+ {
1743
+ name: "altText",
1744
+ type: "text",
1745
+ label: "Alt Text"
1746
+ }
1747
+ ]
1748
+ },
1749
+ {
1750
+ name: "analyticsEnabled",
1751
+ type: "checkbox",
1752
+ label: "Enable Analytics & Tracking",
1753
+ defaultValue: false
1754
+ },
1755
+ {
1756
+ name: "analytics",
1757
+ type: "group",
1758
+ label: "Tracking Configurations",
1759
+ admin: {
1760
+ condition: (data) => data.analyticsEnabled === true
1761
+ },
1762
+ fields: [
1763
+ {
1764
+ name: "googleAnalyticsId",
1765
+ type: "text",
1766
+ label: "Google Analytics ID"
1767
+ },
1768
+ {
1769
+ name: "googleTagManagerId",
1770
+ type: "text",
1771
+ label: "Google Tag Manager ID"
1772
+ },
1773
+ {
1774
+ name: "plausibleDomain",
1775
+ type: "text",
1776
+ label: "Plausible Domain"
1777
+ },
1778
+ {
1779
+ name: "mixpanelToken",
1780
+ type: "password",
1781
+ label: "Mixpanel Token"
1782
+ }
1783
+ ]
1784
+ }
1785
+ ]
1786
+ };
1787
+
1788
+ // src/templates/settings/seo.ts
1789
+ var seoSettingsGlobal = {
1790
+ slug: "seo-settings",
1791
+ label: "SEO Settings",
1792
+ admin: {
1793
+ group: "settings"
1794
+ },
1795
+ access: {
1796
+ read: () => true,
1797
+ update: () => true
1798
+ },
1799
+ fields: [
1800
+ {
1801
+ name: "seoMode",
1802
+ type: "select",
1803
+ label: "Visibility Mode",
1804
+ defaultValue: "simple",
1805
+ options: [
1806
+ { label: "Simple (Basic Meta)", value: "simple" },
1807
+ { label: "Advanced (Full Technical SEO)", value: "advanced" }
1808
+ ],
1809
+ admin: {
1810
+ description: "Switch to advanced mode to control robots.txt, canonical URLs, and deep metadata."
1811
+ }
1812
+ },
1813
+ {
1814
+ name: "defaultTitle",
1815
+ type: "text",
1816
+ label: "Default Title",
1817
+ admin: {}
1818
+ },
1819
+ {
1820
+ name: "defaultDescription",
1821
+ type: "textarea",
1822
+ label: "Default Description",
1823
+ admin: {}
1824
+ },
1825
+ {
1826
+ name: "titleTemplate",
1827
+ type: "text",
1828
+ label: "Title Template",
1829
+ defaultValue: "{{title}} | {{siteName}}",
1830
+ admin: {}
1831
+ },
1832
+ {
1833
+ name: "siteNameInTitle",
1834
+ type: "checkbox",
1835
+ label: "Include Site Name in Title",
1836
+ defaultValue: true
1837
+ },
1838
+ {
1839
+ name: "separator",
1840
+ type: "text",
1841
+ label: "Title Separator",
1842
+ defaultValue: " | ",
1843
+ admin: {}
1844
+ },
1845
+ {
1846
+ name: "meta",
1847
+ type: "group",
1848
+ label: "Technical Meta Settings",
1849
+ admin: {
1850
+ condition: (data) => data.seoMode === "advanced"
1851
+ },
1852
+ fields: [
1853
+ {
1854
+ name: "robots",
1855
+ type: "text",
1856
+ label: "Robots Meta",
1857
+ defaultValue: "index, follow"
1858
+ },
1859
+ {
1860
+ name: "canonicalUrl",
1861
+ type: "text",
1862
+ label: "Canonical URL"
1863
+ },
1864
+ {
1865
+ name: "ogType",
1866
+ type: "select",
1867
+ label: "Default OG Type",
1868
+ defaultValue: "website",
1869
+ options: [
1870
+ { label: "Website", value: "website" },
1871
+ { label: "Article", value: "article" },
1872
+ { label: "Product", value: "product" },
1873
+ { label: "Book", value: "book" },
1874
+ { label: "Music", value: "music" },
1875
+ { label: "Video", value: "video" }
1876
+ ]
1877
+ }
1878
+ ]
1879
+ },
1880
+ {
1881
+ name: "enableSitemap",
1882
+ type: "checkbox",
1883
+ label: "Enable XML Sitemap",
1884
+ defaultValue: true
1885
+ },
1886
+ {
1887
+ name: "sitemap",
1888
+ type: "group",
1889
+ label: "Sitemap Configuration",
1890
+ admin: {
1891
+ condition: (data) => data.enableSitemap === true && data.seoMode === "advanced"
1892
+ },
1893
+ fields: [
1894
+ {
1895
+ name: "sitemapUrls",
1896
+ type: "number",
1897
+ label: "Sitemap URL Limit",
1898
+ defaultValue: 5e4
1899
+ }
1900
+ ]
1901
+ },
1902
+ {
1903
+ name: "robotsTxt",
1904
+ type: "textarea",
1905
+ label: "Custom robots.txt",
1906
+ admin: {
1907
+ condition: (data) => data.seoMode === "advanced"
1908
+ }
1909
+ },
1910
+ {
1911
+ name: "social",
1912
+ type: "group",
1913
+ label: "Social Media",
1914
+ fields: [
1915
+ {
1916
+ name: "twitterHandle",
1917
+ type: "text",
1918
+ label: "Twitter/X Handle",
1919
+ admin: {}
1920
+ },
1921
+ {
1922
+ name: "twitterCardType",
1923
+ type: "select",
1924
+ label: "Twitter Card Type",
1925
+ defaultValue: "summary_large_image",
1926
+ options: [
1927
+ { label: "Summary", value: "summary" },
1928
+ { label: "Summary with Large Image", value: "summary_large_image" },
1929
+ { label: "App", value: "app" },
1930
+ { label: "Player", value: "player" }
1931
+ ]
1932
+ },
1933
+ {
1934
+ name: "fbAppId",
1935
+ type: "text",
1936
+ label: "Facebook App ID"
1937
+ }
1938
+ ]
1939
+ },
1940
+ {
1941
+ name: "advanced",
1942
+ type: "group",
1943
+ label: "Advanced",
1944
+ fields: [
1945
+ {
1946
+ name: "jsonLdEnabled",
1947
+ type: "checkbox",
1948
+ label: "Enable JSON-LD",
1949
+ defaultValue: true,
1950
+ admin: {}
1951
+ },
1952
+ {
1953
+ name: "breadcrumbsEnabled",
1954
+ type: "checkbox",
1955
+ label: "Enable Breadcrumbs",
1956
+ defaultValue: true
1957
+ },
1958
+ {
1959
+ name: "paginationSize",
1960
+ type: "number",
1961
+ label: "Default Pagination Size",
1962
+ defaultValue: 10
1963
+ }
1964
+ ]
1965
+ }
1966
+ ]
1967
+ };
1968
+
1969
+ // src/templates/settings/social.ts
1970
+ var socialSettingsGlobal = {
1971
+ slug: "social-settings",
1972
+ label: "Social Media",
1973
+ admin: {
1974
+ group: "settings"
1975
+ },
1976
+ access: {
1977
+ read: () => true,
1978
+ update: () => true
1979
+ },
1980
+ fields: [
1981
+ {
1982
+ name: "showAll",
1983
+ type: "checkbox",
1984
+ label: "Show All Platforms",
1985
+ defaultValue: false,
1986
+ admin: {
1987
+ description: "Toggle to show niche or secondary social platforms."
1988
+ }
1989
+ },
1990
+ {
1991
+ name: "facebook",
1992
+ type: "text",
1993
+ label: "Facebook"
1994
+ },
1995
+ {
1996
+ name: "twitter",
1997
+ type: "text",
1998
+ label: "Twitter/X"
1999
+ },
2000
+ {
2001
+ name: "instagram",
2002
+ type: "text",
2003
+ label: "Instagram"
2004
+ },
2005
+ {
2006
+ name: "linkedin",
2007
+ type: "text",
2008
+ label: "LinkedIn"
2009
+ },
2010
+ {
2011
+ name: "youtube",
2012
+ type: "text",
2013
+ label: "YouTube"
2014
+ },
2015
+ {
2016
+ name: "tiktok",
2017
+ type: "text",
2018
+ label: "TikTok",
2019
+ admin: {
2020
+ condition: (data) => data.showAll === true
2021
+ }
2022
+ },
2023
+ {
2024
+ name: "pinterest",
2025
+ type: "text",
2026
+ label: "Pinterest",
2027
+ admin: {
2028
+ condition: (data) => data.showAll === true
2029
+ }
2030
+ },
2031
+ {
2032
+ name: "discord",
2033
+ type: "text",
2034
+ label: "Discord",
2035
+ admin: {
2036
+ condition: (data) => data.showAll === true
2037
+ }
2038
+ },
2039
+ {
2040
+ name: "twitch",
2041
+ type: "text",
2042
+ label: "Twitch",
2043
+ admin: {
2044
+ condition: (data) => data.showAll === true
2045
+ }
2046
+ },
2047
+ {
2048
+ name: "github",
2049
+ type: "text",
2050
+ label: "GitHub",
2051
+ admin: {
2052
+ condition: (data) => data.showAll === true
2053
+ }
2054
+ },
2055
+ {
2056
+ name: "mastodon",
2057
+ type: "text",
2058
+ label: "Mastodon",
2059
+ admin: {
2060
+ condition: (data) => data.showAll === true
2061
+ }
2062
+ }
2063
+ ]
2064
+ };
2065
+
2066
+ // src/templates/settings/email.ts
2067
+ var emailSettingsGlobal = {
2068
+ slug: "email-settings",
2069
+ label: "Email Settings",
2070
+ admin: {
2071
+ group: "settings"
2072
+ },
2073
+ access: {
2074
+ read: () => true,
2075
+ update: () => true
2076
+ },
2077
+ fields: [
2078
+ {
2079
+ name: "fromName",
2080
+ type: "text",
2081
+ label: "From Name",
2082
+ admin: {}
2083
+ },
2084
+ {
2085
+ name: "fromEmail",
2086
+ type: "email",
2087
+ label: "From Email",
2088
+ required: true,
2089
+ admin: {}
2090
+ },
2091
+ {
2092
+ name: "replyTo",
2093
+ type: "email",
2094
+ label: "Reply-To Email",
2095
+ admin: {}
2096
+ },
2097
+ {
2098
+ name: "provider",
2099
+ type: "select",
2100
+ label: "Email Provider",
2101
+ defaultValue: "smtp",
2102
+ options: [
2103
+ { label: "SMTP (Standard)", value: "smtp" },
2104
+ { label: "Resend", value: "resend" },
2105
+ { label: "SendGrid", value: "sendgrid" },
2106
+ { label: "Mailgun", value: "mailgun" },
2107
+ { label: "AWS SES", value: "ses" }
2108
+ ]
2109
+ },
2110
+ {
2111
+ name: "smtp",
2112
+ type: "group",
2113
+ label: "SMTP Settings",
2114
+ admin: {
2115
+ condition: (data) => data.provider === "smtp"
2116
+ },
2117
+ fields: [
2118
+ {
2119
+ name: "smtpService",
2120
+ type: "select",
2121
+ label: "SMTP Service",
2122
+ defaultValue: "custom",
2123
+ options: [
2124
+ { label: "Custom SMTP", value: "custom" },
2125
+ { label: "Gmail", value: "gmail" },
2126
+ { label: "Outlook / Office 365", value: "outlook" },
2127
+ { label: "Brevo (Sendinblue)", value: "brevo" },
2128
+ { label: "Mailgun (SMTP)", value: "mailgun-smtp" },
2129
+ { label: "SendGrid (SMTP)", value: "sendgrid-smtp" },
2130
+ { label: "Mandrill / Mailchimp", value: "mandrill" }
2131
+ ],
2132
+ admin: {
2133
+ description: "Selecting a known service will pre-configure host and port settings."
2134
+ }
2135
+ },
2136
+ {
2137
+ name: "host",
2138
+ type: "text",
2139
+ label: "Host",
2140
+ admin: {
2141
+ condition: (data, siblingData) => siblingData.smtpService === "custom",
2142
+ placeholder: "smtp.example.com"
2143
+ }
2144
+ },
2145
+ {
2146
+ name: "port",
2147
+ type: "number",
2148
+ label: "Port",
2149
+ defaultValue: 587,
2150
+ admin: {
2151
+ condition: (data, siblingData) => siblingData.smtpService === "custom"
2152
+ }
2153
+ },
2154
+ {
2155
+ name: "username",
2156
+ type: "text",
2157
+ label: "Username"
2158
+ },
2159
+ {
2160
+ name: "password",
2161
+ type: "password",
2162
+ label: "Password"
2163
+ },
2164
+ {
2165
+ name: "secure",
2166
+ type: "checkbox",
2167
+ label: "Use TLS/SSL",
2168
+ defaultValue: true
2169
+ }
2170
+ ]
2171
+ },
2172
+ {
2173
+ name: "resend",
2174
+ type: "group",
2175
+ label: "Resend Settings",
2176
+ admin: {
2177
+ condition: (data) => data.provider === "resend"
2178
+ },
2179
+ fields: [
2180
+ {
2181
+ name: "apiKey",
2182
+ type: "password",
2183
+ label: "API Key",
2184
+ required: true
2185
+ }
2186
+ ]
2187
+ },
2188
+ {
2189
+ name: "sendgrid",
2190
+ type: "group",
2191
+ label: "SendGrid Settings",
2192
+ admin: {
2193
+ condition: (data) => data.provider === "sendgrid"
2194
+ },
2195
+ fields: [
2196
+ {
2197
+ name: "apiKey",
2198
+ type: "password",
2199
+ label: "API Key",
2200
+ required: true
2201
+ }
2202
+ ]
2203
+ },
2204
+ {
2205
+ name: "mailgun",
2206
+ type: "group",
2207
+ label: "Mailgun Settings",
2208
+ admin: {
2209
+ condition: (data) => data.provider === "mailgun"
2210
+ },
2211
+ fields: [
2212
+ {
2213
+ name: "apiKey",
2214
+ type: "password",
2215
+ label: "API Key",
2216
+ required: true
2217
+ },
2218
+ {
2219
+ name: "domain",
2220
+ type: "text",
2221
+ label: "Domain",
2222
+ required: true
2223
+ },
2224
+ {
2225
+ name: "region",
2226
+ type: "select",
2227
+ label: "Region",
2228
+ defaultValue: "us",
2229
+ options: [
2230
+ { label: "US (United States)", value: "us" },
2231
+ { label: "EU (Europe)", value: "eu" }
2232
+ ]
2233
+ }
2234
+ ]
2235
+ },
2236
+ {
2237
+ name: "ses",
2238
+ type: "group",
2239
+ label: "AWS SES Settings",
2240
+ admin: {
2241
+ condition: (data) => data.provider === "ses"
2242
+ },
2243
+ fields: [
2244
+ {
2245
+ name: "accessKeyId",
2246
+ type: "text",
2247
+ label: "Access Key ID",
2248
+ required: true
2249
+ },
2250
+ {
2251
+ name: "secretAccessKey",
2252
+ type: "password",
2253
+ label: "Secret Access Key",
2254
+ required: true
2255
+ },
2256
+ {
2257
+ name: "region",
2258
+ type: "text",
2259
+ label: "Region",
2260
+ defaultValue: "us-east-1",
2261
+ admin: { placeholder: "us-east-1" }
2262
+ }
2263
+ ]
2264
+ },
2265
+ {
2266
+ name: "testEmailSection",
2267
+ type: "row",
2268
+ label: "Test Email",
2269
+ admin: {
2270
+ description: "Enter an email address to send a test email."
2271
+ },
2272
+ fields: [
2273
+ {
2274
+ name: "testEmail",
2275
+ type: "email",
2276
+ label: "Email",
2277
+ admin: {
2278
+ width: "300px"
2279
+ }
2280
+ },
2281
+ {
2282
+ name: "sendTestEmail",
2283
+ type: "action",
2284
+ label: "Send Test Email",
2285
+ admin: {
2286
+ action: "/api/globals/email-settings/test",
2287
+ method: "POST"
2288
+ }
2289
+ }
2290
+ ]
2291
+ }
2292
+ ]
2293
+ };
2294
+
2295
+ // src/templates/settings/access.ts
2296
+ var accessSettingsGlobal = {
2297
+ slug: "access-settings",
2298
+ label: "Access Control",
2299
+ admin: {
2300
+ group: "settings"
2301
+ },
2302
+ access: {
2303
+ read: () => true,
2304
+ update: () => true
2305
+ },
2306
+ fields: [
2307
+ {
2308
+ name: "enablePublicAccess",
2309
+ type: "checkbox",
2310
+ label: "Enable Public Access",
2311
+ defaultValue: true,
2312
+ admin: {}
2313
+ },
2314
+ {
2315
+ name: "defaultCollectionAccess",
2316
+ type: "select",
2317
+ label: "Default Collection Access",
2318
+ defaultValue: "read",
2319
+ options: [
2320
+ { label: "Read Only", value: "read" },
2321
+ { label: "Read & Create", value: "create" },
2322
+ { label: "Read & Create & Update", value: "update" },
2323
+ { label: "Full Access", value: "admin" },
2324
+ { label: "No Access", value: "none" }
2325
+ ],
2326
+ admin: {}
2327
+ },
2328
+ {
2329
+ name: "apiAccess",
2330
+ type: "group",
2331
+ label: "API Access",
2332
+ fields: [
2333
+ {
2334
+ name: "restEnabled",
2335
+ type: "checkbox",
2336
+ label: "Enable REST API",
2337
+ defaultValue: true
2338
+ },
2339
+ {
2340
+ name: "graphqlEnabled",
2341
+ type: "checkbox",
2342
+ label: "Enable GraphQL",
2343
+ defaultValue: false
2344
+ },
2345
+ {
2346
+ name: "trpcEnabled",
2347
+ type: "checkbox",
2348
+ label: "Enable tRPC",
2349
+ defaultValue: false
2350
+ },
2351
+ {
2352
+ name: "wsEnabled",
2353
+ type: "checkbox",
2354
+ label: "Enable WebSocket",
2355
+ defaultValue: false
2356
+ },
2357
+ {
2358
+ name: "requireAuth",
2359
+ type: "checkbox",
2360
+ label: "Require Authentication",
2361
+ defaultValue: false
2362
+ },
2363
+ {
2364
+ name: "cors",
2365
+ type: "group",
2366
+ label: "CORS Settings",
2367
+ admin: {
2368
+ condition: (data) => data.apiAccess?.restEnabled === true || data.apiAccess?.graphqlEnabled === true
2369
+ },
2370
+ fields: [
2371
+ {
2372
+ name: "allowedOrigins",
2373
+ type: "textarea",
2374
+ label: "Allowed Origins (one per line)",
2375
+ admin: {
2376
+ placeholder: "https://example.com\nhttps://app.example.com"
2377
+ }
2378
+ }
2379
+ ]
2380
+ }
2381
+ ]
2382
+ },
2383
+ {
2384
+ name: "rateLimiting",
2385
+ type: "group",
2386
+ label: "Rate Limiting Configuration",
2387
+ admin: {
2388
+ condition: (data) => data.rateLimiting?.enabled === true
2389
+ },
2390
+ fields: [
2391
+ {
2392
+ name: "enabled",
2393
+ type: "checkbox",
2394
+ label: "Enable Global Rate Limiting",
2395
+ defaultValue: true
2396
+ },
2397
+ {
2398
+ name: "maxRequests",
2399
+ type: "number",
2400
+ label: "Max Requests",
2401
+ defaultValue: 100,
2402
+ admin: {
2403
+ condition: (data, siblingData) => siblingData.enabled === true
2404
+ }
2405
+ },
2406
+ {
2407
+ name: "windowMs",
2408
+ type: "number",
2409
+ label: "Window (ms)",
2410
+ defaultValue: 6e4,
2411
+ admin: {
2412
+ condition: (data, siblingData) => siblingData.enabled === true
2413
+ }
2414
+ }
2415
+ ]
2416
+ }
2417
+ ]
2418
+ };
2419
+
2420
+ // src/templates/settings/store.ts
2421
+ var countryOptions = [
2422
+ { label: "United States", value: "US" },
2423
+ { label: "United Kingdom", value: "GB" },
2424
+ { label: "Canada", value: "CA" },
2425
+ { label: "Australia", value: "AU" },
2426
+ { label: "Germany", value: "DE" },
2427
+ { label: "France", value: "FR" },
2428
+ { label: "Netherlands", value: "NL" },
2429
+ { label: "Belgium", value: "BE" },
2430
+ { label: "Spain", value: "ES" },
2431
+ { label: "Italy", value: "IT" },
2432
+ { label: "Portugal", value: "PT" },
2433
+ { label: "Sweden", value: "SE" },
2434
+ { label: "Norway", value: "NO" },
2435
+ { label: "Denmark", value: "DK" },
2436
+ { label: "Finland", value: "FI" },
2437
+ { label: "Austria", value: "AT" },
2438
+ { label: "Switzerland", value: "CH" },
2439
+ { label: "Japan", value: "JP" },
2440
+ { label: "South Korea", value: "KR" },
2441
+ { label: "China", value: "CN" },
2442
+ { label: "India", value: "IN" },
2443
+ { label: "Brazil", value: "BR" },
2444
+ { label: "Mexico", value: "MX" }
2445
+ ];
2446
+ var storeSettingsGlobal = {
2447
+ slug: "store-settings",
2448
+ label: "Store Settings",
2449
+ admin: {
2450
+ group: "settings"
2451
+ },
2452
+ access: {
2453
+ read: () => true,
2454
+ update: () => true
2455
+ },
2456
+ fields: [
2457
+ {
2458
+ name: "storeName",
2459
+ type: "text",
2460
+ label: "Store Name",
2461
+ required: true
2462
+ },
2463
+ {
2464
+ name: "storeEmail",
2465
+ type: "email",
2466
+ label: "Contact Email",
2467
+ required: true
2468
+ },
2469
+ {
2470
+ name: "storePhone",
2471
+ type: "text",
2472
+ label: "Phone Number"
2473
+ },
2474
+ {
2475
+ name: "address",
2476
+ type: "group",
2477
+ label: "Store Address",
2478
+ fields: [
2479
+ {
2480
+ name: "street",
2481
+ type: "text",
2482
+ label: "Street Address"
2483
+ },
2484
+ {
2485
+ name: "city",
2486
+ type: "text",
2487
+ label: "City"
2488
+ },
2489
+ {
2490
+ name: "state",
2491
+ type: "text",
2492
+ label: "State/Province"
2493
+ },
2494
+ {
2495
+ name: "postalCode",
2496
+ type: "text",
2497
+ label: "Postal Code"
2498
+ },
2499
+ {
2500
+ name: "country",
2501
+ type: "select",
2502
+ label: "Country",
2503
+ options: countryOptions
2504
+ }
2505
+ ]
2506
+ },
2507
+ {
2508
+ name: "currency",
2509
+ type: "group",
2510
+ label: "Currency",
2511
+ fields: [
2512
+ {
2513
+ name: "code",
2514
+ type: "select",
2515
+ label: "Currency Code",
2516
+ defaultValue: "USD",
2517
+ options: [
2518
+ { label: "USD - US Dollar", value: "USD" },
2519
+ { label: "EUR - Euro", value: "EUR" },
2520
+ { label: "GBP - British Pound", value: "GBP" },
2521
+ { label: "CAD - Canadian Dollar", value: "CAD" },
2522
+ { label: "AUD - Australian Dollar", value: "AUD" },
2523
+ { label: "JPY - Japanese Yen", value: "JPY" },
2524
+ { label: "CNY - Chinese Yuan", value: "CNY" },
2525
+ { label: "INR - Indian Rupee", value: "INR" },
2526
+ { label: "BRL - Brazilian Real", value: "BRL" },
2527
+ { label: "MXN - Mexican Peso", value: "MXN" }
2528
+ ]
2529
+ },
2530
+ {
2531
+ name: "symbol",
2532
+ type: "text",
2533
+ label: "Symbol",
2534
+ defaultValue: "$"
2535
+ },
2536
+ {
2537
+ name: "position",
2538
+ type: "select",
2539
+ label: "Symbol Position",
2540
+ defaultValue: "before",
2541
+ options: [
2542
+ { label: "Before amount", value: "before" },
2543
+ { label: "After amount", value: "after" }
2544
+ ]
2545
+ },
2546
+ {
2547
+ name: "decimals",
2548
+ type: "number",
2549
+ label: "Decimal Places",
2550
+ defaultValue: 2
2551
+ }
2552
+ ]
2553
+ },
2554
+ {
2555
+ name: "tax",
2556
+ type: "group",
2557
+ label: "Tax Logistics",
2558
+ admin: {
2559
+ condition: (data) => data.tax?.enabled === true
2560
+ },
2561
+ fields: [
2562
+ {
2563
+ name: "enabled",
2564
+ type: "checkbox",
2565
+ label: "Enable Tax",
2566
+ defaultValue: true
2567
+ },
2568
+ {
2569
+ name: "rate",
2570
+ type: "number",
2571
+ label: "Tax Rate (%)",
2572
+ admin: {
2573
+ placeholder: "10",
2574
+ condition: (data, siblingData) => siblingData.enabled === true
2575
+ }
2576
+ },
2577
+ {
2578
+ name: "includedInPrice",
2579
+ type: "checkbox",
2580
+ label: "Tax Included in Prices",
2581
+ admin: {
2582
+ condition: (data, siblingData) => siblingData.enabled === true
2583
+ }
2584
+ },
2585
+ {
2586
+ name: "taxId",
2587
+ type: "text",
2588
+ label: "Tax ID / VAT Number",
2589
+ admin: {
2590
+ condition: (data, siblingData) => siblingData.enabled === true
2591
+ }
2592
+ }
2593
+ ]
2594
+ },
2595
+ {
2596
+ name: "shipping",
2597
+ type: "group",
2598
+ label: "Shipping Logic",
2599
+ admin: {
2600
+ condition: (data) => data.shipping?.enableLocalPickup === true || data.shipping?.flatRate > 0
2601
+ },
2602
+ fields: [
2603
+ {
2604
+ name: "enableLocalPickup",
2605
+ type: "checkbox",
2606
+ label: "Enable Local Pickup",
2607
+ defaultValue: true
2608
+ },
2609
+ {
2610
+ name: "flatRate",
2611
+ type: "number",
2612
+ label: "Flat Rate Shipping Fee",
2613
+ admin: {}
2614
+ },
2615
+ {
2616
+ name: "freeShippingThreshold",
2617
+ type: "number",
2618
+ label: "Free Shipping Minimum",
2619
+ admin: {
2620
+ condition: (data, siblingData) => siblingData.flatRate > 0
2621
+ }
2622
+ }
2623
+ ]
2624
+ },
2625
+ {
2626
+ name: "orders",
2627
+ type: "group",
2628
+ label: "Orders",
2629
+ fields: [
2630
+ {
2631
+ name: "orderNumberPrefix",
2632
+ type: "text",
2633
+ label: "Order Number Prefix",
2634
+ defaultValue: "ORD",
2635
+ admin: {}
2636
+ },
2637
+ {
2638
+ name: "allowGuestCheckout",
2639
+ type: "checkbox",
2640
+ label: "Allow Guest Checkout",
2641
+ defaultValue: true
2642
+ },
2643
+ {
2644
+ name: "requirePhone",
2645
+ type: "checkbox",
2646
+ label: "Require Phone Number",
2647
+ defaultValue: true
2648
+ }
2649
+ ]
2650
+ }
2651
+ ]
2652
+ };
2653
+
2654
+ // src/templates/settings/payments.ts
2655
+ var paymentSettingsGlobal = {
2656
+ slug: "payment-settings",
2657
+ label: "Payment Settings",
2658
+ admin: {
2659
+ group: "settings"
2660
+ },
2661
+ access: {
2662
+ read: () => true,
2663
+ update: () => true
2664
+ },
2665
+ fields: [
2666
+ {
2667
+ name: "testMode",
2668
+ type: "checkbox",
2669
+ label: "Test Mode",
2670
+ defaultValue: true,
2671
+ admin: {}
2672
+ },
2673
+ {
2674
+ name: "provider",
2675
+ type: "select",
2676
+ label: "Primary Payment Provider",
2677
+ defaultValue: "stripe",
2678
+ options: [
2679
+ { label: "Stripe", value: "stripe" },
2680
+ { label: "PayPal", value: "paypal" },
2681
+ { label: "Square", value: "square" },
2682
+ { label: "Manual Methods Only", value: "manual" }
2683
+ ]
2684
+ },
2685
+ {
2686
+ name: "stripe",
2687
+ type: "group",
2688
+ label: "Stripe",
2689
+ admin: {
2690
+ condition: (data) => data.provider === "stripe"
2691
+ },
2692
+ fields: [
2693
+ {
2694
+ name: "enabled",
2695
+ type: "checkbox",
2696
+ label: "Enable Stripe",
2697
+ defaultValue: false
2698
+ },
2699
+ {
2700
+ name: "publishableKey",
2701
+ type: "text",
2702
+ label: "Publishable Key",
2703
+ admin: {
2704
+ placeholder: "pk_live_..."
2705
+ }
2706
+ },
2707
+ {
2708
+ name: "secretKey",
2709
+ type: "password",
2710
+ label: "Secret Key"
2711
+ },
2712
+ {
2713
+ name: "webhookSecret",
2714
+ type: "password",
2715
+ label: "Webhook Secret",
2716
+ admin: {}
2717
+ }
2718
+ ]
2719
+ },
2720
+ {
2721
+ name: "paypal",
2722
+ type: "group",
2723
+ label: "PayPal",
2724
+ admin: {
2725
+ condition: (data) => data.provider === "paypal"
2726
+ },
2727
+ fields: [
2728
+ {
2729
+ name: "enabled",
2730
+ type: "checkbox",
2731
+ label: "Enable PayPal",
2732
+ defaultValue: false
2733
+ },
2734
+ {
2735
+ name: "clientId",
2736
+ type: "text",
2737
+ label: "Client ID"
2738
+ },
2739
+ {
2740
+ name: "clientSecret",
2741
+ type: "password",
2742
+ label: "Client Secret"
2743
+ },
2744
+ {
2745
+ name: "mode",
2746
+ type: "select",
2747
+ label: "Mode",
2748
+ defaultValue: "sandbox",
2749
+ options: [
2750
+ { label: "Sandbox (Test)", value: "sandbox" },
2751
+ { label: "Live", value: "live" }
2752
+ ]
2753
+ }
2754
+ ]
2755
+ },
2756
+ {
2757
+ name: "square",
2758
+ type: "group",
2759
+ label: "Square",
2760
+ admin: {
2761
+ condition: (data) => data.provider === "square"
2762
+ },
2763
+ fields: [
2764
+ {
2765
+ name: "enabled",
2766
+ type: "checkbox",
2767
+ label: "Enable Square",
2768
+ defaultValue: false
2769
+ },
2770
+ {
2771
+ name: "applicationId",
2772
+ type: "text",
2773
+ label: "Application ID"
2774
+ },
2775
+ {
2776
+ name: "accessToken",
2777
+ type: "password",
2778
+ label: "Access Token"
2779
+ },
2780
+ {
2781
+ name: "locationId",
2782
+ type: "text",
2783
+ label: "Location ID"
2784
+ }
2785
+ ]
2786
+ },
2787
+ {
2788
+ name: "methods",
2789
+ type: "group",
2790
+ label: "Manual Payment Methods",
2791
+ fields: [
2792
+ {
2793
+ name: "cod",
2794
+ type: "checkbox",
2795
+ label: "Cash on Delivery",
2796
+ defaultValue: true
2797
+ },
2798
+ {
2799
+ name: "bankTransfer",
2800
+ type: "checkbox",
2801
+ label: "Bank Transfer",
2802
+ defaultValue: true
2803
+ },
2804
+ {
2805
+ name: "cash",
2806
+ type: "checkbox",
2807
+ label: "Cash (Local Pickup)",
2808
+ defaultValue: true
2809
+ },
2810
+ {
2811
+ name: "check",
2812
+ type: "checkbox",
2813
+ label: "Check",
2814
+ defaultValue: false
2815
+ }
2816
+ ]
2817
+ },
2818
+ {
2819
+ name: "bankTransfer",
2820
+ type: "group",
2821
+ label: "Bank Transfer Details",
2822
+ admin: {},
2823
+ fields: [
2824
+ {
2825
+ name: "bankName",
2826
+ type: "text",
2827
+ label: "Bank Name"
2828
+ },
2829
+ {
2830
+ name: "accountName",
2831
+ type: "text",
2832
+ label: "Account Name"
2833
+ },
2834
+ {
2835
+ name: "accountNumber",
2836
+ type: "text",
2837
+ label: "Account Number"
2838
+ },
2839
+ {
2840
+ name: "routingNumber",
2841
+ type: "text",
2842
+ label: "Routing/Sort Code"
2843
+ },
2844
+ {
2845
+ name: "iban",
2846
+ type: "text",
2847
+ label: "IBAN"
2848
+ },
2849
+ {
2850
+ name: "swift",
2851
+ type: "text",
2852
+ label: "SWIFT/BIC"
2853
+ }
2854
+ ]
2855
+ }
2856
+ ]
2857
+ };
2858
+
2859
+ // src/templates/settings/system.ts
2860
+ var systemSettingsGlobal = {
2861
+ slug: "system",
2862
+ label: "System",
2863
+ admin: {
2864
+ group: "settings",
2865
+ description: "Core system configuration and secrets"
2866
+ },
2867
+ access: {
2868
+ read: () => true,
2869
+ update: () => true
2870
+ },
2871
+ fields: [
2872
+ {
2873
+ name: "appSecret",
2874
+ type: "secret",
2875
+ label: "App Secret",
2876
+ required: false,
2877
+ admin: {
2878
+ description: "Auto-generated master secret used for encryption and auth. Auto-created if empty on load.",
2879
+ readOnly: true
2880
+ }
2881
+ },
2882
+ {
2883
+ name: "encryptionKey",
2884
+ type: "text",
2885
+ label: "Encryption Key",
2886
+ required: false,
2887
+ admin: {
2888
+ description: "Auto-generated key for data encryption at rest.",
2889
+ readOnly: true
2890
+ }
2891
+ },
2892
+ {
2893
+ name: "sessionMaxAge",
2894
+ type: "number",
2895
+ label: "Session Max Age (days)",
2896
+ required: false,
2897
+ defaultValue: 7,
2898
+ admin: {
2899
+ description: "Maximum session duration in days"
2900
+ }
2901
+ },
2902
+ {
2903
+ name: "maxSessionsPerUser",
2904
+ type: "number",
2905
+ label: "Max Sessions Per User",
2906
+ required: false,
2907
+ defaultValue: 3,
2908
+ admin: {
2909
+ description: "Maximum concurrent sessions allowed per user"
2910
+ }
2911
+ }
2912
+ ]
2913
+ };
2914
+
2915
+ // src/templates/settings/header.ts
2916
+ var headerSettingsGlobal = {
2917
+ slug: "header-settings",
2918
+ label: "Header Settings",
2919
+ admin: {
2920
+ group: "Header Configuration",
2921
+ description: "Manage global header settings like the logo and navigation."
2922
+ },
2923
+ access: {
2924
+ read: () => true,
2925
+ update: () => true
2926
+ },
2927
+ fields: [
2928
+ {
2929
+ name: "site_logo",
2930
+ type: "upload",
2931
+ relationTo: "media",
2932
+ label: "Site Logo"
2933
+ },
2934
+ {
2935
+ name: "site_menu",
2936
+ type: "relationship",
2937
+ relationTo: "menu",
2938
+ label: "Site Menu"
2939
+ },
2940
+ {
2941
+ name: "header_text",
2942
+ type: "richtext",
2943
+ label: "Header Text"
2944
+ },
2945
+ {
2946
+ name: "header_buttons",
2947
+ type: "array",
2948
+ label: "Header Buttons",
2949
+ fields: [
2950
+ {
2951
+ name: "button",
2952
+ type: "group",
2953
+ label: "Button",
2954
+ fields: [
2955
+ {
2956
+ name: "text",
2957
+ type: "text",
2958
+ label: "Button Text"
2959
+ },
2960
+ {
2961
+ name: "url",
2962
+ type: "text",
2963
+ label: "Button URL"
2964
+ }
2965
+ ]
2966
+ }
2967
+ ]
2968
+ }
2969
+ ]
2970
+ };
2971
+
2972
+ // src/templates/settings/footer.ts
2973
+ var footerSettingsGlobal = {
2974
+ slug: "footer-settings",
2975
+ label: "Footer Settings",
2976
+ admin: {
2977
+ group: "Footer Configuration",
2978
+ description: "Manage global footer settings like the logo, text, and links."
2979
+ },
2980
+ access: {
2981
+ read: () => true,
2982
+ update: () => true
2983
+ },
2984
+ fields: [
2985
+ {
2986
+ name: "footer_logo",
2987
+ type: "upload",
2988
+ relationTo: "media",
2989
+ label: "Footer Logo"
2990
+ },
2991
+ {
2992
+ name: "footer_text",
2993
+ type: "richtext",
2994
+ label: "Footer Text"
2995
+ },
2996
+ {
2997
+ name: "footer_address",
2998
+ type: "text",
2999
+ label: "Footer Address"
3000
+ },
3001
+ {
3002
+ name: "footer_phone",
3003
+ type: "text",
3004
+ label: "Footer Phone"
3005
+ },
3006
+ {
3007
+ name: "footer_email",
3008
+ type: "text",
3009
+ label: "Footer Email"
3010
+ },
3011
+ {
3012
+ name: "footer_hours",
3013
+ type: "array",
3014
+ label: "Footer Hours",
3015
+ fields: [
3016
+ {
3017
+ name: "hour",
3018
+ type: "text",
3019
+ label: "Hour"
3020
+ }
3021
+ ]
3022
+ },
3023
+ {
3024
+ name: "footer_social_links",
3025
+ type: "array",
3026
+ label: "Footer Social Links",
3027
+ fields: [
3028
+ {
3029
+ name: "social_icon",
3030
+ type: "text",
3031
+ label: "Social Icon"
3032
+ },
3033
+ {
3034
+ name: "social_url",
3035
+ type: "text",
3036
+ label: "Social URL"
3037
+ }
3038
+ ]
3039
+ },
3040
+ {
3041
+ name: "footer_menu",
3042
+ type: "array",
3043
+ label: "Footer Menu",
3044
+ fields: [
3045
+ {
3046
+ name: "menu",
3047
+ type: "relationship",
3048
+ relationTo: "menu"
3049
+ }
3050
+ ]
3051
+ },
3052
+ {
3053
+ name: "footer_buttons",
3054
+ type: "array",
3055
+ label: "Footer Buttons",
3056
+ fields: [
3057
+ {
3058
+ name: "button",
3059
+ type: "button",
3060
+ label: "Button"
3061
+ }
3062
+ ]
3063
+ },
3064
+ {
3065
+ name: "footer_form",
3066
+ type: "relationship",
3067
+ relationTo: "forms",
3068
+ label: "Footer Form"
3069
+ }
3070
+ ]
3071
+ };
3072
+
3073
+ // src/templates/settings/index.ts
3074
+ var allSettingsGlobals = [
3075
+ siteSettingsGlobal,
3076
+ seoSettingsGlobal,
3077
+ socialSettingsGlobal,
3078
+ emailSettingsGlobal,
3079
+ storageSettingsGlobal,
3080
+ accessSettingsGlobal,
3081
+ storeSettingsGlobal,
3082
+ paymentSettingsGlobal,
3083
+ systemSettingsGlobal,
3084
+ headerSettingsGlobal,
3085
+ footerSettingsGlobal
3086
+ ];
3087
+ var coreSettingsGlobals = [
3088
+ siteSettingsGlobal,
3089
+ seoSettingsGlobal,
3090
+ socialSettingsGlobal,
3091
+ emailSettingsGlobal,
3092
+ storageSettingsGlobal,
3093
+ accessSettingsGlobal,
3094
+ systemSettingsGlobal,
3095
+ headerSettingsGlobal,
3096
+ footerSettingsGlobal
3097
+ ];
3098
+ var settingsBySlug = {
3099
+ [siteSettingsGlobal.slug]: siteSettingsGlobal,
3100
+ [seoSettingsGlobal.slug]: seoSettingsGlobal,
3101
+ [socialSettingsGlobal.slug]: socialSettingsGlobal,
3102
+ [emailSettingsGlobal.slug]: emailSettingsGlobal,
3103
+ [storageSettingsGlobal.slug]: storageSettingsGlobal,
3104
+ [accessSettingsGlobal.slug]: accessSettingsGlobal,
3105
+ [storeSettingsGlobal.slug]: storeSettingsGlobal,
3106
+ [paymentSettingsGlobal.slug]: paymentSettingsGlobal,
3107
+ [systemSettingsGlobal.slug]: systemSettingsGlobal,
3108
+ [headerSettingsGlobal.slug]: headerSettingsGlobal,
3109
+ [footerSettingsGlobal.slug]: footerSettingsGlobal
3110
+ };
3111
+ function getSettingsForTemplate(template) {
3112
+ switch (template) {
3113
+ case "minimal":
3114
+ return [siteSettingsGlobal, seoSettingsGlobal];
3115
+ case "starter":
3116
+ case "blog":
3117
+ return coreSettingsGlobals;
3118
+ case "ecommerce":
3119
+ case "kitchen-sink":
3120
+ return allSettingsGlobals;
3121
+ default:
3122
+ return coreSettingsGlobals;
3123
+ }
3124
+ }
3125
+
3126
+ // src/templates/index.ts
3127
+ function deduplicateCollections(collections) {
3128
+ const map = /* @__PURE__ */ new Map();
3129
+ for (const col of collections) {
3130
+ if (!map.has(col.slug)) {
3131
+ map.set(col.slug, col);
3132
+ }
3133
+ }
3134
+ return Array.from(map.values());
3135
+ }
3136
+ var templateCollections = {
3137
+ minimal: deduplicateCollections([
3138
+ ...Object.values(minimalCollections),
3139
+ ...Object.values(postsCollections),
3140
+ ...Object.values(pageCollections),
3141
+ ...Object.values(categoriesCollections),
3142
+ ...Object.values(formsCollections),
3143
+ ...Object.values(formEntriesCollections)
3144
+ ]),
3145
+ starter: deduplicateCollections([
3146
+ ...Object.values(starterCollections),
3147
+ ...mediaCollections,
3148
+ ...Object.values(authCollections),
3149
+ ...Object.values(postsCollections),
3150
+ ...Object.values(pageCollections),
3151
+ ...Object.values(menuCollections),
3152
+ ...Object.values(categoriesCollections),
3153
+ ...Object.values(formsCollections),
3154
+ ...Object.values(formEntriesCollections)
3155
+ ]),
3156
+ blog: deduplicateCollections([
3157
+ ...Object.values(blogCollections),
3158
+ ...mediaCollections,
3159
+ ...Object.values(authCollections),
3160
+ ...Object.values(postsCollections),
3161
+ ...Object.values(pageCollections),
3162
+ ...Object.values(menuCollections),
3163
+ ...Object.values(categoriesCollections),
3164
+ ...Object.values(formsCollections),
3165
+ ...Object.values(formEntriesCollections)
3166
+ ]),
3167
+ ecommerce: deduplicateCollections([
3168
+ ...Object.values(ecommerceCollections),
3169
+ ...Object.values(productsCollections),
3170
+ ...Object.values(customersCollections),
3171
+ ...Object.values(ordersCollections),
3172
+ ...Object.values(couponsCollections),
3173
+ ...mediaCollections,
3174
+ ...Object.values(authCollections),
3175
+ ...Object.values(postsCollections),
3176
+ ...Object.values(pageCollections),
3177
+ ...Object.values(menuCollections),
3178
+ ...Object.values(categoriesCollections),
3179
+ ...Object.values(productCategoriesCollections),
3180
+ ...Object.values(formsCollections),
3181
+ ...Object.values(formEntriesCollections)
3182
+ ]),
3183
+ "kitchen-sink": deduplicateCollections([
3184
+ ...Object.values(minimalCollections),
3185
+ ...Object.values(starterCollections),
3186
+ ...Object.values(blogCollections),
3187
+ ...Object.values(ecommerceCollections),
3188
+ ...Object.values(kitchenSinkCollections),
3189
+ ...Object.values(productsCollections),
3190
+ ...Object.values(customersCollections),
3191
+ ...Object.values(ordersCollections),
3192
+ ...Object.values(couponsCollections),
3193
+ ...mediaCollections,
3194
+ ...Object.values(authCollections),
3195
+ ...Object.values(postsCollections),
3196
+ ...Object.values(pageCollections),
3197
+ ...Object.values(menuCollections),
3198
+ ...Object.values(categoriesCollections),
3199
+ ...Object.values(productCategoriesCollections),
3200
+ ...Object.values(formsCollections),
3201
+ ...Object.values(formEntriesCollections)
3202
+ ])
3203
+ };
3204
+ function createTemplateConfig(options) {
3205
+ const collections = options.collections ? [...options.collections] : [];
3206
+ const globals = options.globals ? [...options.globals] : [];
3207
+ if (options.includeMedia !== false) {
3208
+ collections.push(...mediaCollections);
3209
+ }
3210
+ const templateSettings = options.template ? getSettingsForTemplate(options.template) : coreSettingsGlobals;
3211
+ if (options.includeSettings) {
3212
+ if (options.includeSettings === "all") {
3213
+ globals.push(...allSettingsGlobals);
3214
+ } else if (options.includeSettings === "core") {
3215
+ globals.push(...coreSettingsGlobals);
3216
+ } else if (Array.isArray(options.includeSettings)) {
3217
+ for (const setting of options.includeSettings) {
3218
+ const global = settingsBySlug[setting];
3219
+ if (global) {
3220
+ globals.push(global);
3221
+ }
3222
+ }
3223
+ }
3224
+ } else if (!options.globals || options.globals.length === 0) {
3225
+ globals.push(...templateSettings);
3226
+ }
3227
+ if (options.excludeSettings && options.excludeSettings.length > 0) {
3228
+ const excludeSet = new Set(options.excludeSettings);
3229
+ const filtered = globals.filter(
3230
+ (g) => !excludeSet.has(g.slug) && !excludeSet.has(g.label?.toLowerCase().replace(/\s+/g, "-") || "")
3231
+ );
3232
+ globals.length = 0;
3233
+ globals.push(...filtered);
3234
+ }
3235
+ return {
3236
+ collections: collections.length > 0 ? collections : void 0,
3237
+ globals: globals.length > 0 ? globals : void 0
3238
+ };
3239
+ }
3240
+
3241
+ export { accessSettingsGlobal, allSettingsGlobals, blogCollections, blogGlobals, categoriesCollection, categoriesCollections, coreSettingsGlobals, couponsCollection, couponsCollections, createTemplateConfig, customersCollection, customersCollections, ecommerceCollections, ecommerceGlobals, emailSettingsGlobal, footerSettingsGlobal, formEntriesCollection, formEntriesCollections, formsCollection, formsCollections, getSettingsForTemplate, headerSettingsGlobal, kitchenSinkCollections, mediaCollection, mediaCollections, menuCollection, menuCollections, minimalCollections, ordersCollection, ordersCollections, pageCollection, pageCollections, paymentSettingsGlobal, postsCollection, postsCollections, productCategoriesCollection, productCategoriesCollections, productsCollection, productsCollections, seoSettingsGlobal, settingsBySlug, siteSettingsGlobal, socialSettingsGlobal, starterCollections, storeSettingsGlobal, systemSettingsGlobal, templateCollections };
3242
+ //# sourceMappingURL=chunk-5EPFQUQD.js.map
3243
+ //# sourceMappingURL=chunk-5EPFQUQD.js.map