@orion-studios/payload-studio 0.5.0-beta.11 → 0.5.0-beta.111
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.
- package/README.md +54 -0
- package/dist/admin/client.d.mts +3 -0
- package/dist/admin/client.d.ts +3 -0
- package/dist/admin/client.js +1745 -200
- package/dist/admin/client.mjs +1756 -214
- package/dist/admin/index.d.mts +2 -1
- package/dist/admin/index.d.ts +2 -1
- package/dist/admin/index.js +424 -11
- package/dist/admin/index.mjs +19 -1
- package/dist/admin-app/client.d.mts +7 -0
- package/dist/admin-app/client.d.ts +7 -0
- package/dist/admin-app/client.js +1270 -3
- package/dist/admin-app/client.mjs +1172 -2
- package/dist/admin-app/index.d.mts +1 -1
- package/dist/admin-app/index.d.ts +1 -1
- package/dist/admin-app/index.js +167 -0
- package/dist/admin-app/index.mjs +13 -1
- package/dist/admin-app/styles.css +247 -0
- package/dist/admin.css +8 -0
- package/dist/blocks/index.js +1011 -191
- package/dist/blocks/index.mjs +2 -2
- package/dist/chunk-ADIIWIYL.mjs +322 -0
- package/dist/{chunk-ZLLNO5FM.mjs → chunk-BET2YLAS.mjs} +104 -15
- package/dist/chunk-DAIZDGHL.mjs +614 -0
- package/dist/chunk-GKMBYYXF.mjs +776 -0
- package/dist/chunk-JQAHXYAM.mjs +1829 -0
- package/dist/chunk-OQSEJXC4.mjs +166 -0
- package/dist/chunk-PF3EBZXF.mjs +326 -0
- package/dist/chunk-ROTPP5CU.mjs +99 -0
- package/dist/chunk-XVH5SCBD.mjs +234 -0
- package/dist/chunk-ZTXJG4K5.mjs +85 -0
- package/dist/index-7lxTrxSG.d.mts +128 -0
- package/dist/index-7lxTrxSG.d.ts +128 -0
- package/dist/index-B7QvY3yF.d.mts +245 -0
- package/dist/index-BK03FiEM.d.ts +245 -0
- package/dist/{index-CmR6NInu.d.ts → index-BzKOThsI.d.mts} +30 -3
- package/dist/{index-CmR6NInu.d.mts → index-BzKOThsI.d.ts} +30 -3
- package/dist/{index-DbH0Ljwp.d.mts → index-D8BNfUJb.d.mts} +17 -2
- package/dist/{index-DbH0Ljwp.d.ts → index-DD_E2UfJ.d.ts} +17 -2
- package/dist/index-DUi_XND6.d.ts +193 -0
- package/dist/index-gLl_358v.d.mts +193 -0
- package/dist/index.d.mts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +2876 -460
- package/dist/index.mjs +12 -10
- package/dist/nextjs/index.d.mts +2 -1
- package/dist/nextjs/index.d.ts +2 -1
- package/dist/nextjs/index.js +497 -16
- package/dist/nextjs/index.mjs +8 -3
- package/dist/socialMedia-C05Iy-SV.d.mts +21 -0
- package/dist/socialMedia-C05Iy-SV.d.ts +21 -0
- package/dist/studio/index.d.mts +2 -1
- package/dist/studio/index.d.ts +2 -1
- package/dist/studio/index.js +171 -5
- package/dist/studio/index.mjs +7 -3
- package/dist/studio-pages/builder.css +517 -32
- package/dist/studio-pages/client.d.mts +75 -1
- package/dist/studio-pages/client.d.ts +75 -1
- package/dist/studio-pages/client.js +5662 -2759
- package/dist/studio-pages/client.mjs +5578 -2767
- package/dist/studio-pages/index.d.mts +4 -2
- package/dist/studio-pages/index.d.ts +4 -2
- package/dist/studio-pages/index.js +859 -71
- package/dist/studio-pages/index.mjs +10 -4
- package/package.json +35 -13
- package/dist/chunk-AAOHJDNS.mjs +0 -67
- package/dist/chunk-ETRRXURT.mjs +0 -141
- package/dist/chunk-J7W5EE3B.mjs +0 -278
- package/dist/chunk-N67KVM2S.mjs +0 -156
- package/dist/chunk-NESLJZFE.mjs +0 -303
- package/dist/chunk-U5BSPWAD.mjs +0 -1034
- package/dist/index-B9N5MyjF.d.mts +0 -39
- package/dist/index-BallJs-K.d.mts +0 -43
- package/dist/index-BallJs-K.d.ts +0 -43
- package/dist/index-DJFhANvJ.d.mts +0 -128
- package/dist/index-DJFhANvJ.d.ts +0 -128
- package/dist/index-g8tBHLKD.d.ts +0 -39
|
@@ -0,0 +1,1829 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sectionStyleFields
|
|
3
|
+
} from "./chunk-OQSEJXC4.mjs";
|
|
4
|
+
import {
|
|
5
|
+
__export
|
|
6
|
+
} from "./chunk-6BWS3CLP.mjs";
|
|
7
|
+
|
|
8
|
+
// src/blocks/index.ts
|
|
9
|
+
var blocks_exports = {};
|
|
10
|
+
__export(blocks_exports, {
|
|
11
|
+
BeforeAfterBlock: () => BeforeAfterBlock,
|
|
12
|
+
BookingEmbedBlock: () => BookingEmbedBlock,
|
|
13
|
+
BuilderBlockLabel: () => BuilderBlockLabel,
|
|
14
|
+
CtaBlock: () => CtaBlock,
|
|
15
|
+
FaqBlock: () => FaqBlock,
|
|
16
|
+
FeatureGridBlock: () => FeatureGridBlock,
|
|
17
|
+
FormEmbedBlock: () => FormEmbedBlock,
|
|
18
|
+
HeroBlock: () => HeroBlock,
|
|
19
|
+
LogoWallBlock: () => LogoWallBlock,
|
|
20
|
+
MediaBlock: () => MediaBlock,
|
|
21
|
+
RichTextBlock: () => RichTextBlock,
|
|
22
|
+
StatsBlock: () => StatsBlock,
|
|
23
|
+
TestimonialsBlock: () => TestimonialsBlock,
|
|
24
|
+
builderBlockLabelComponent: () => builderBlockLabelComponent,
|
|
25
|
+
clonePresetBlocks: () => clonePresetBlocks,
|
|
26
|
+
defaultPageLayoutBlocks: () => defaultPageLayoutBlocks,
|
|
27
|
+
sectionPresets: () => sectionPresets,
|
|
28
|
+
templateStarterPresets: () => templateStarterPresets
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// src/blocks/blocks/adminComponents.ts
|
|
32
|
+
var builderBlockLabelComponent = {
|
|
33
|
+
exportName: "BuilderBlockLabel",
|
|
34
|
+
path: "@orion-studios/payload-studio/blocks"
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/blocks/blocks/BeforeAfter.ts
|
|
38
|
+
var BeforeAfterBlock = {
|
|
39
|
+
slug: "beforeAfter",
|
|
40
|
+
imageURL: "/images/project-before-2.svg",
|
|
41
|
+
imageAltText: "Before and after section preview",
|
|
42
|
+
admin: {
|
|
43
|
+
components: {
|
|
44
|
+
Label: builderBlockLabelComponent
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
labels: {
|
|
48
|
+
singular: "Before / After",
|
|
49
|
+
plural: "Before / After"
|
|
50
|
+
},
|
|
51
|
+
fields: [
|
|
52
|
+
{
|
|
53
|
+
name: "title",
|
|
54
|
+
type: "text",
|
|
55
|
+
required: true
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "subtitle",
|
|
59
|
+
type: "textarea"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "itemsPerRow",
|
|
63
|
+
type: "number",
|
|
64
|
+
defaultValue: 2,
|
|
65
|
+
min: 1,
|
|
66
|
+
max: 4,
|
|
67
|
+
admin: {
|
|
68
|
+
description: "How many project cards to show per row on desktop.",
|
|
69
|
+
step: 1
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: "items",
|
|
74
|
+
type: "array",
|
|
75
|
+
minRows: 1,
|
|
76
|
+
maxRows: 30,
|
|
77
|
+
fields: [
|
|
78
|
+
{
|
|
79
|
+
name: "label",
|
|
80
|
+
type: "text",
|
|
81
|
+
required: true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "beforeMedia",
|
|
85
|
+
type: "upload",
|
|
86
|
+
relationTo: "media",
|
|
87
|
+
required: false
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: "beforeImageURL",
|
|
91
|
+
type: "text",
|
|
92
|
+
admin: {
|
|
93
|
+
description: "Optional direct URL for the before image when using an external asset."
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "afterMedia",
|
|
98
|
+
type: "upload",
|
|
99
|
+
relationTo: "media",
|
|
100
|
+
required: false
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "afterImageURL",
|
|
104
|
+
type: "text",
|
|
105
|
+
admin: {
|
|
106
|
+
description: "Optional direct URL for the after image when using an external asset."
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "imageHeight",
|
|
111
|
+
type: "number",
|
|
112
|
+
defaultValue: 160,
|
|
113
|
+
min: 60,
|
|
114
|
+
max: 600,
|
|
115
|
+
admin: {
|
|
116
|
+
description: "Overrides the before/after image height (in pixels).",
|
|
117
|
+
step: 10
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "imageFit",
|
|
122
|
+
type: "select",
|
|
123
|
+
defaultValue: "cover",
|
|
124
|
+
options: [
|
|
125
|
+
{ label: "Cover", value: "cover" },
|
|
126
|
+
{ label: "Contain", value: "contain" }
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "imageCornerStyle",
|
|
131
|
+
type: "select",
|
|
132
|
+
defaultValue: "rounded",
|
|
133
|
+
options: [
|
|
134
|
+
{ label: "Rounded", value: "rounded" },
|
|
135
|
+
{ label: "Square", value: "square" }
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: "imagePosition",
|
|
140
|
+
type: "select",
|
|
141
|
+
defaultValue: "center",
|
|
142
|
+
options: [
|
|
143
|
+
{ label: "Center", value: "center" },
|
|
144
|
+
{ label: "Top", value: "top" },
|
|
145
|
+
{ label: "Bottom", value: "bottom" },
|
|
146
|
+
{ label: "Left", value: "left" },
|
|
147
|
+
{ label: "Right", value: "right" }
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "imagePositionX",
|
|
152
|
+
type: "number",
|
|
153
|
+
min: 0,
|
|
154
|
+
max: 100,
|
|
155
|
+
admin: {
|
|
156
|
+
description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
|
|
157
|
+
step: 1
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "imagePositionY",
|
|
162
|
+
type: "number",
|
|
163
|
+
min: 0,
|
|
164
|
+
max: 100,
|
|
165
|
+
admin: {
|
|
166
|
+
description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
|
|
167
|
+
step: 1
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "description",
|
|
172
|
+
type: "textarea"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: "settings",
|
|
176
|
+
type: "json",
|
|
177
|
+
admin: {
|
|
178
|
+
hidden: true
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: "settings",
|
|
185
|
+
type: "json",
|
|
186
|
+
admin: {
|
|
187
|
+
description: "Internal builder settings schema v2.",
|
|
188
|
+
hidden: true
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
...sectionStyleFields()
|
|
192
|
+
]
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// src/blocks/blocks/BookingEmbed.ts
|
|
196
|
+
var BookingEmbedBlock = {
|
|
197
|
+
slug: "bookingEmbed",
|
|
198
|
+
imageURL: "/images/service-removal.svg",
|
|
199
|
+
imageAltText: "Booking embed section preview",
|
|
200
|
+
admin: {
|
|
201
|
+
components: {
|
|
202
|
+
Label: builderBlockLabelComponent
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
labels: {
|
|
206
|
+
singular: "Booking Embed",
|
|
207
|
+
plural: "Booking Embeds"
|
|
208
|
+
},
|
|
209
|
+
fields: [
|
|
210
|
+
{
|
|
211
|
+
name: "title",
|
|
212
|
+
type: "text"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: "description",
|
|
216
|
+
type: "textarea"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: "buttonLabel",
|
|
220
|
+
type: "text",
|
|
221
|
+
defaultValue: "Book Consultation"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "buttonHref",
|
|
225
|
+
type: "text",
|
|
226
|
+
defaultValue: "/contact"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: "settings",
|
|
230
|
+
type: "json",
|
|
231
|
+
admin: {
|
|
232
|
+
description: "Internal builder settings schema v2.",
|
|
233
|
+
hidden: true
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
...sectionStyleFields()
|
|
237
|
+
]
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// src/blocks/blocks/Cta.ts
|
|
241
|
+
var CtaBlock = {
|
|
242
|
+
slug: "cta",
|
|
243
|
+
imageURL: "/images/logo-mark.svg",
|
|
244
|
+
imageAltText: "Call to action section preview",
|
|
245
|
+
admin: {
|
|
246
|
+
components: {
|
|
247
|
+
Label: builderBlockLabelComponent
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
labels: {
|
|
251
|
+
singular: "CTA",
|
|
252
|
+
plural: "CTAs"
|
|
253
|
+
},
|
|
254
|
+
fields: [
|
|
255
|
+
{
|
|
256
|
+
name: "headline",
|
|
257
|
+
type: "text",
|
|
258
|
+
required: true
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: "description",
|
|
262
|
+
type: "textarea"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "eyebrow",
|
|
266
|
+
type: "text"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
name: "buttonLabel",
|
|
270
|
+
type: "text"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
name: "buttonHref",
|
|
274
|
+
type: "text",
|
|
275
|
+
admin: {
|
|
276
|
+
description: "Use internal links like /contact."
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "style",
|
|
281
|
+
type: "select",
|
|
282
|
+
defaultValue: "light",
|
|
283
|
+
options: [
|
|
284
|
+
{
|
|
285
|
+
label: "Light",
|
|
286
|
+
value: "light"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
label: "Dark",
|
|
290
|
+
value: "dark"
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: "backgroundColor",
|
|
296
|
+
type: "text",
|
|
297
|
+
admin: {
|
|
298
|
+
description: "Optional background color override for the CTA strip (example: #334b63)."
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: "media",
|
|
303
|
+
type: "upload",
|
|
304
|
+
relationTo: "media",
|
|
305
|
+
required: false
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: "imageURL",
|
|
309
|
+
type: "text",
|
|
310
|
+
admin: {
|
|
311
|
+
description: "Optional direct image URL when this CTA should use an external image."
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: "bullets",
|
|
316
|
+
type: "array",
|
|
317
|
+
fields: [
|
|
318
|
+
{
|
|
319
|
+
name: "label",
|
|
320
|
+
type: "text",
|
|
321
|
+
required: true
|
|
322
|
+
}
|
|
323
|
+
]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: "settings",
|
|
327
|
+
type: "json",
|
|
328
|
+
admin: {
|
|
329
|
+
description: "Internal builder settings schema v2.",
|
|
330
|
+
hidden: true
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
...sectionStyleFields()
|
|
334
|
+
]
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
// src/blocks/blocks/Faq.ts
|
|
338
|
+
var FaqBlock = {
|
|
339
|
+
slug: "faq",
|
|
340
|
+
imageURL: "/images/project-before-2.svg",
|
|
341
|
+
imageAltText: "FAQ section preview",
|
|
342
|
+
admin: {
|
|
343
|
+
components: {
|
|
344
|
+
Label: builderBlockLabelComponent
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
labels: {
|
|
348
|
+
singular: "FAQ",
|
|
349
|
+
plural: "FAQs"
|
|
350
|
+
},
|
|
351
|
+
fields: [
|
|
352
|
+
{
|
|
353
|
+
name: "eyebrow",
|
|
354
|
+
type: "text"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "title",
|
|
358
|
+
type: "text",
|
|
359
|
+
required: true
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
name: "items",
|
|
363
|
+
type: "array",
|
|
364
|
+
minRows: 1,
|
|
365
|
+
maxRows: 12,
|
|
366
|
+
fields: [
|
|
367
|
+
{
|
|
368
|
+
name: "question",
|
|
369
|
+
type: "text",
|
|
370
|
+
required: true
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
name: "answer",
|
|
374
|
+
type: "textarea",
|
|
375
|
+
required: true
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
name: "settings",
|
|
379
|
+
type: "json",
|
|
380
|
+
admin: {
|
|
381
|
+
hidden: true
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: "settings",
|
|
388
|
+
type: "json",
|
|
389
|
+
admin: {
|
|
390
|
+
description: "Internal builder settings schema v2.",
|
|
391
|
+
hidden: true
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
...sectionStyleFields()
|
|
395
|
+
]
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// src/blocks/blocks/FeatureGrid.ts
|
|
399
|
+
var FeatureGridBlock = {
|
|
400
|
+
slug: "featureGrid",
|
|
401
|
+
imageURL: "/images/service-trimming.svg",
|
|
402
|
+
imageAltText: "Feature grid section preview",
|
|
403
|
+
admin: {
|
|
404
|
+
components: {
|
|
405
|
+
Label: builderBlockLabelComponent
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
labels: {
|
|
409
|
+
singular: "Feature Grid",
|
|
410
|
+
plural: "Feature Grids"
|
|
411
|
+
},
|
|
412
|
+
fields: [
|
|
413
|
+
{
|
|
414
|
+
name: "eyebrow",
|
|
415
|
+
type: "text"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
name: "title",
|
|
419
|
+
type: "text"
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
name: "subtitle",
|
|
423
|
+
type: "textarea"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
name: "itemsPerRow",
|
|
427
|
+
type: "number",
|
|
428
|
+
defaultValue: 3,
|
|
429
|
+
min: 1,
|
|
430
|
+
max: 6,
|
|
431
|
+
admin: {
|
|
432
|
+
description: "How many items to show per row on desktop.",
|
|
433
|
+
step: 1
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
name: "items",
|
|
438
|
+
type: "array",
|
|
439
|
+
minRows: 1,
|
|
440
|
+
maxRows: 6,
|
|
441
|
+
fields: [
|
|
442
|
+
{
|
|
443
|
+
name: "title",
|
|
444
|
+
type: "text",
|
|
445
|
+
required: true
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: "description",
|
|
449
|
+
type: "textarea"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
name: "tone",
|
|
453
|
+
type: "select",
|
|
454
|
+
defaultValue: "warm",
|
|
455
|
+
options: [
|
|
456
|
+
{ label: "Warm", value: "warm" },
|
|
457
|
+
{ label: "Cool", value: "cool" },
|
|
458
|
+
{ label: "Neutral", value: "neutral" }
|
|
459
|
+
]
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
name: "iconType",
|
|
463
|
+
type: "select",
|
|
464
|
+
defaultValue: "badge",
|
|
465
|
+
options: [
|
|
466
|
+
{ label: "Badge Text", value: "badge" },
|
|
467
|
+
{ label: "Icon", value: "lucide" }
|
|
468
|
+
],
|
|
469
|
+
admin: {
|
|
470
|
+
description: "Choose whether this item uses a short badge label or an icon."
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
name: "icon",
|
|
475
|
+
type: "text",
|
|
476
|
+
admin: {
|
|
477
|
+
description: 'Optional short icon label (e.g. "01", "Leaf", "Star").',
|
|
478
|
+
condition: (_, siblingData) => siblingData?.iconType !== "lucide"
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
name: "iconLucide",
|
|
483
|
+
type: "select",
|
|
484
|
+
options: [
|
|
485
|
+
{ label: "Shield Check", value: "ShieldCheck" },
|
|
486
|
+
{ label: "Clock", value: "Clock" },
|
|
487
|
+
{ label: "Leaf", value: "Leaf" },
|
|
488
|
+
{ label: "Dollar Sign", value: "DollarSign" },
|
|
489
|
+
{ label: "Hard Hat", value: "HardHat" },
|
|
490
|
+
{ label: "Sparkles", value: "Sparkles" },
|
|
491
|
+
{ label: "Tree Pine", value: "TreePine" },
|
|
492
|
+
{ label: "Badge Check", value: "BadgeCheck" },
|
|
493
|
+
{ label: "Calendar Clock", value: "CalendarClock" }
|
|
494
|
+
],
|
|
495
|
+
admin: {
|
|
496
|
+
description: "Select an icon for this item.",
|
|
497
|
+
condition: (_, siblingData) => siblingData?.iconType === "lucide"
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
name: "media",
|
|
502
|
+
type: "upload",
|
|
503
|
+
relationTo: "media",
|
|
504
|
+
required: false
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
name: "imageURL",
|
|
508
|
+
type: "text",
|
|
509
|
+
admin: {
|
|
510
|
+
description: "Optional direct image URL when this item should use an external image."
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
name: "embedURL",
|
|
515
|
+
type: "text",
|
|
516
|
+
admin: {
|
|
517
|
+
description: "Optional iframe/embed URL for items like maps or other embedded content."
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
name: "buttonLabel",
|
|
522
|
+
type: "text"
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
name: "buttonHref",
|
|
526
|
+
type: "text"
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
name: "bullets",
|
|
530
|
+
type: "array",
|
|
531
|
+
fields: [
|
|
532
|
+
{
|
|
533
|
+
name: "label",
|
|
534
|
+
type: "text",
|
|
535
|
+
required: true
|
|
536
|
+
}
|
|
537
|
+
]
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: "imageHeight",
|
|
541
|
+
type: "number",
|
|
542
|
+
defaultValue: 160,
|
|
543
|
+
min: 40,
|
|
544
|
+
max: 600,
|
|
545
|
+
admin: {
|
|
546
|
+
description: "Overrides the image height in the builder/section (in pixels).",
|
|
547
|
+
step: 10
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
name: "imageFit",
|
|
552
|
+
type: "select",
|
|
553
|
+
defaultValue: "cover",
|
|
554
|
+
options: [
|
|
555
|
+
{ label: "Cover", value: "cover" },
|
|
556
|
+
{ label: "Contain", value: "contain" }
|
|
557
|
+
]
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
name: "imageCornerStyle",
|
|
561
|
+
type: "select",
|
|
562
|
+
defaultValue: "rounded",
|
|
563
|
+
options: [
|
|
564
|
+
{ label: "Rounded", value: "rounded" },
|
|
565
|
+
{ label: "Square", value: "square" }
|
|
566
|
+
]
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
name: "imagePosition",
|
|
570
|
+
type: "select",
|
|
571
|
+
defaultValue: "center",
|
|
572
|
+
options: [
|
|
573
|
+
{ label: "Center", value: "center" },
|
|
574
|
+
{ label: "Top", value: "top" },
|
|
575
|
+
{ label: "Bottom", value: "bottom" },
|
|
576
|
+
{ label: "Left", value: "left" },
|
|
577
|
+
{ label: "Right", value: "right" }
|
|
578
|
+
]
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
name: "imagePositionX",
|
|
582
|
+
type: "number",
|
|
583
|
+
min: 0,
|
|
584
|
+
max: 100,
|
|
585
|
+
admin: {
|
|
586
|
+
description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
|
|
587
|
+
step: 1
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
name: "imagePositionY",
|
|
592
|
+
type: "number",
|
|
593
|
+
min: 0,
|
|
594
|
+
max: 100,
|
|
595
|
+
admin: {
|
|
596
|
+
description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
|
|
597
|
+
step: 1
|
|
598
|
+
}
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
name: "settings",
|
|
602
|
+
type: "json",
|
|
603
|
+
admin: {
|
|
604
|
+
hidden: true
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
]
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
name: "variant",
|
|
611
|
+
type: "select",
|
|
612
|
+
defaultValue: "cards",
|
|
613
|
+
options: [
|
|
614
|
+
{
|
|
615
|
+
label: "Cards",
|
|
616
|
+
value: "cards"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
label: "Highlight",
|
|
620
|
+
value: "highlight"
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
label: "Split List",
|
|
624
|
+
value: "splitList"
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
label: "Panels",
|
|
628
|
+
value: "panels"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
label: "Catalog",
|
|
632
|
+
value: "catalog"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
label: "Contact Split",
|
|
636
|
+
value: "contact"
|
|
637
|
+
}
|
|
638
|
+
]
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
name: "backgroundColor",
|
|
642
|
+
type: "text",
|
|
643
|
+
admin: {
|
|
644
|
+
description: "Optional background color override when using the Highlight variant (example: #334b63)."
|
|
645
|
+
}
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
name: "settings",
|
|
649
|
+
type: "json",
|
|
650
|
+
admin: {
|
|
651
|
+
description: "Internal builder settings schema v2.",
|
|
652
|
+
hidden: true
|
|
653
|
+
}
|
|
654
|
+
},
|
|
655
|
+
...sectionStyleFields()
|
|
656
|
+
]
|
|
657
|
+
};
|
|
658
|
+
|
|
659
|
+
// src/blocks/blocks/FormEmbed.ts
|
|
660
|
+
var FormEmbedBlock = {
|
|
661
|
+
slug: "formEmbed",
|
|
662
|
+
imageURL: "/images/map-placeholder.svg",
|
|
663
|
+
imageAltText: "Form embed section preview",
|
|
664
|
+
admin: {
|
|
665
|
+
components: {
|
|
666
|
+
Label: builderBlockLabelComponent
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
labels: {
|
|
670
|
+
singular: "Form Embed",
|
|
671
|
+
plural: "Form Embeds"
|
|
672
|
+
},
|
|
673
|
+
fields: [
|
|
674
|
+
{
|
|
675
|
+
name: "eyebrow",
|
|
676
|
+
type: "text"
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
name: "title",
|
|
680
|
+
type: "text"
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
name: "description",
|
|
684
|
+
type: "textarea"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
name: "submitLabel",
|
|
688
|
+
type: "text"
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
name: "formType",
|
|
692
|
+
type: "select",
|
|
693
|
+
defaultValue: "quote",
|
|
694
|
+
options: [
|
|
695
|
+
{
|
|
696
|
+
label: "Quote Form",
|
|
697
|
+
value: "quote"
|
|
698
|
+
}
|
|
699
|
+
]
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
name: "settings",
|
|
703
|
+
type: "json",
|
|
704
|
+
admin: {
|
|
705
|
+
description: "Internal builder settings schema v2.",
|
|
706
|
+
hidden: true
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
...sectionStyleFields()
|
|
710
|
+
]
|
|
711
|
+
};
|
|
712
|
+
|
|
713
|
+
// src/blocks/blocks/Hero.ts
|
|
714
|
+
var HeroBlock = {
|
|
715
|
+
slug: "hero",
|
|
716
|
+
imageURL: "/images/hero-tree.svg",
|
|
717
|
+
imageAltText: "Hero section preview",
|
|
718
|
+
admin: {
|
|
719
|
+
components: {
|
|
720
|
+
Label: builderBlockLabelComponent
|
|
721
|
+
}
|
|
722
|
+
},
|
|
723
|
+
labels: {
|
|
724
|
+
singular: "Hero",
|
|
725
|
+
plural: "Hero Sections"
|
|
726
|
+
},
|
|
727
|
+
fields: [
|
|
728
|
+
{
|
|
729
|
+
name: "kicker",
|
|
730
|
+
type: "text",
|
|
731
|
+
admin: {
|
|
732
|
+
description: "Optional short label above the headline."
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
name: "headline",
|
|
737
|
+
type: "text",
|
|
738
|
+
required: true
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
name: "subheadline",
|
|
742
|
+
type: "textarea"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
name: "primaryLabel",
|
|
746
|
+
type: "text"
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
name: "primaryHref",
|
|
750
|
+
type: "text",
|
|
751
|
+
admin: {
|
|
752
|
+
description: "Use internal links like /contact."
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
name: "secondaryLabel",
|
|
757
|
+
type: "text"
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
name: "secondaryHref",
|
|
761
|
+
type: "text",
|
|
762
|
+
admin: {
|
|
763
|
+
description: "Use internal links like /services."
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
name: "media",
|
|
768
|
+
type: "upload",
|
|
769
|
+
relationTo: "media"
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
name: "backgroundImageURL",
|
|
773
|
+
type: "text",
|
|
774
|
+
admin: {
|
|
775
|
+
description: "Optional direct image URL when the hero should use an external image source."
|
|
776
|
+
}
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
name: "backgroundImageFit",
|
|
780
|
+
type: "select",
|
|
781
|
+
defaultValue: "cover",
|
|
782
|
+
options: [
|
|
783
|
+
{ label: "Cover", value: "cover" },
|
|
784
|
+
{ label: "Cover (Square)", value: "cover-square" },
|
|
785
|
+
{ label: "Contain", value: "contain" },
|
|
786
|
+
{ label: "Contain (Square)", value: "contain-square" }
|
|
787
|
+
],
|
|
788
|
+
admin: {
|
|
789
|
+
description: "How the hero image should be sized within the section."
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
name: "backgroundImageCornerStyle",
|
|
794
|
+
type: "select",
|
|
795
|
+
defaultValue: "rounded",
|
|
796
|
+
options: [
|
|
797
|
+
{ label: "Rounded", value: "rounded" },
|
|
798
|
+
{ label: "Square", value: "square" }
|
|
799
|
+
],
|
|
800
|
+
admin: {
|
|
801
|
+
description: "How the hero image corners should appear."
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
name: "backgroundImagePosition",
|
|
806
|
+
type: "select",
|
|
807
|
+
defaultValue: "center",
|
|
808
|
+
options: [
|
|
809
|
+
{ label: "Center", value: "center" },
|
|
810
|
+
{ label: "Top", value: "top" },
|
|
811
|
+
{ label: "Bottom", value: "bottom" },
|
|
812
|
+
{ label: "Left", value: "left" },
|
|
813
|
+
{ label: "Right", value: "right" }
|
|
814
|
+
],
|
|
815
|
+
admin: {
|
|
816
|
+
description: "Where the hero image should anchor inside the section."
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
name: "backgroundColor",
|
|
821
|
+
type: "text",
|
|
822
|
+
admin: {
|
|
823
|
+
description: "Optional background color override (example: #334b63)."
|
|
824
|
+
}
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
name: "backgroundOverlayMode",
|
|
828
|
+
type: "select",
|
|
829
|
+
defaultValue: "none",
|
|
830
|
+
options: [
|
|
831
|
+
{ label: "None", value: "none" },
|
|
832
|
+
{ label: "Solid", value: "solid" },
|
|
833
|
+
{ label: "Gradient", value: "gradient" }
|
|
834
|
+
],
|
|
835
|
+
admin: {
|
|
836
|
+
description: "Optional overlay on top of the hero image (applies when an image is present)."
|
|
837
|
+
}
|
|
838
|
+
},
|
|
839
|
+
{
|
|
840
|
+
name: "backgroundOverlayOpacity",
|
|
841
|
+
type: "number",
|
|
842
|
+
defaultValue: 45,
|
|
843
|
+
min: 0,
|
|
844
|
+
max: 100,
|
|
845
|
+
admin: {
|
|
846
|
+
description: "Overlay opacity (0-100).",
|
|
847
|
+
step: 1
|
|
848
|
+
}
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
name: "backgroundOverlayColor",
|
|
852
|
+
type: "text",
|
|
853
|
+
admin: {
|
|
854
|
+
description: "Overlay solid color (example: #000000). Used when Overlay Mode is Solid."
|
|
855
|
+
}
|
|
856
|
+
},
|
|
857
|
+
{
|
|
858
|
+
name: "backgroundOverlayGradientFrom",
|
|
859
|
+
type: "text",
|
|
860
|
+
admin: {
|
|
861
|
+
description: "Gradient overlay start color (example: #334b63). Used when Overlay Mode is Gradient."
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
name: "backgroundOverlayGradientTo",
|
|
866
|
+
type: "text",
|
|
867
|
+
admin: {
|
|
868
|
+
description: "Gradient overlay end color (example: #496582). Used when Overlay Mode is Gradient."
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
name: "backgroundOverlayGradientAngle",
|
|
873
|
+
type: "text",
|
|
874
|
+
admin: {
|
|
875
|
+
description: "Gradient overlay angle in degrees (0-360). Used when Overlay Mode is Gradient."
|
|
876
|
+
}
|
|
877
|
+
},
|
|
878
|
+
{
|
|
879
|
+
name: "backgroundOverlayGradientFromStrength",
|
|
880
|
+
type: "number",
|
|
881
|
+
defaultValue: 100,
|
|
882
|
+
min: 0,
|
|
883
|
+
max: 100,
|
|
884
|
+
admin: {
|
|
885
|
+
description: "Gradient start strength (0-100). Set to 0 for transparent.",
|
|
886
|
+
step: 1
|
|
887
|
+
}
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
name: "backgroundOverlayGradientToStrength",
|
|
891
|
+
type: "number",
|
|
892
|
+
defaultValue: 100,
|
|
893
|
+
min: 0,
|
|
894
|
+
max: 100,
|
|
895
|
+
admin: {
|
|
896
|
+
description: "Gradient end strength (0-100). Set to 0 for transparent.",
|
|
897
|
+
step: 1
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
name: "backgroundOverlayGradientStart",
|
|
902
|
+
type: "number",
|
|
903
|
+
defaultValue: 0,
|
|
904
|
+
min: 0,
|
|
905
|
+
max: 100,
|
|
906
|
+
admin: {
|
|
907
|
+
description: "Where the gradient starts (0-100).",
|
|
908
|
+
step: 1
|
|
909
|
+
}
|
|
910
|
+
},
|
|
911
|
+
{
|
|
912
|
+
name: "backgroundOverlayGradientEnd",
|
|
913
|
+
type: "number",
|
|
914
|
+
defaultValue: 100,
|
|
915
|
+
min: 0,
|
|
916
|
+
max: 100,
|
|
917
|
+
admin: {
|
|
918
|
+
description: "Where the gradient ends (0-100).",
|
|
919
|
+
step: 1
|
|
920
|
+
}
|
|
921
|
+
},
|
|
922
|
+
{
|
|
923
|
+
name: "backgroundOverlayGradientFeather",
|
|
924
|
+
type: "number",
|
|
925
|
+
defaultValue: 100,
|
|
926
|
+
min: 0,
|
|
927
|
+
max: 100,
|
|
928
|
+
admin: {
|
|
929
|
+
description: "How soft the transition is (0 = hard edge, 100 = smooth).",
|
|
930
|
+
step: 1
|
|
931
|
+
}
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
name: "variant",
|
|
935
|
+
type: "select",
|
|
936
|
+
defaultValue: "default",
|
|
937
|
+
options: [
|
|
938
|
+
{
|
|
939
|
+
label: "Default",
|
|
940
|
+
value: "default"
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
label: "Centered",
|
|
944
|
+
value: "centered"
|
|
945
|
+
}
|
|
946
|
+
]
|
|
947
|
+
},
|
|
948
|
+
{
|
|
949
|
+
name: "heroHeight",
|
|
950
|
+
type: "select",
|
|
951
|
+
defaultValue: "sm",
|
|
952
|
+
options: [
|
|
953
|
+
{
|
|
954
|
+
label: "Small",
|
|
955
|
+
value: "sm"
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
label: "Medium (Half Screen)",
|
|
959
|
+
value: "md"
|
|
960
|
+
},
|
|
961
|
+
{
|
|
962
|
+
label: "Full Screen",
|
|
963
|
+
value: "full"
|
|
964
|
+
}
|
|
965
|
+
],
|
|
966
|
+
admin: {
|
|
967
|
+
description: "Controls the vertical height of the hero section."
|
|
968
|
+
}
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
name: "settings",
|
|
972
|
+
type: "json",
|
|
973
|
+
admin: {
|
|
974
|
+
description: "Internal builder settings schema v2.",
|
|
975
|
+
hidden: true
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
...sectionStyleFields()
|
|
979
|
+
]
|
|
980
|
+
};
|
|
981
|
+
|
|
982
|
+
// src/blocks/blocks/LogoWall.ts
|
|
983
|
+
var LogoWallBlock = {
|
|
984
|
+
slug: "logoWall",
|
|
985
|
+
imageURL: "/images/logo-mark.svg",
|
|
986
|
+
imageAltText: "Logo wall section preview",
|
|
987
|
+
admin: {
|
|
988
|
+
components: {
|
|
989
|
+
Label: builderBlockLabelComponent
|
|
990
|
+
}
|
|
991
|
+
},
|
|
992
|
+
labels: {
|
|
993
|
+
singular: "Logo Wall",
|
|
994
|
+
plural: "Logo Walls"
|
|
995
|
+
},
|
|
996
|
+
fields: [
|
|
997
|
+
{
|
|
998
|
+
name: "title",
|
|
999
|
+
type: "text",
|
|
1000
|
+
required: true
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
name: "subtitle",
|
|
1004
|
+
type: "textarea"
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
name: "items",
|
|
1008
|
+
type: "array",
|
|
1009
|
+
minRows: 1,
|
|
1010
|
+
maxRows: 12,
|
|
1011
|
+
fields: [
|
|
1012
|
+
{
|
|
1013
|
+
name: "name",
|
|
1014
|
+
type: "text",
|
|
1015
|
+
required: true
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
name: "media",
|
|
1019
|
+
type: "upload",
|
|
1020
|
+
relationTo: "media",
|
|
1021
|
+
required: false
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
name: "imageURL",
|
|
1025
|
+
type: "text",
|
|
1026
|
+
admin: {
|
|
1027
|
+
description: "Optional direct image URL for this logo when using an external asset."
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
name: "imageHeight",
|
|
1032
|
+
type: "number",
|
|
1033
|
+
defaultValue: 64,
|
|
1034
|
+
min: 24,
|
|
1035
|
+
max: 200,
|
|
1036
|
+
admin: {
|
|
1037
|
+
description: "Overrides the logo image height (in pixels).",
|
|
1038
|
+
step: 4
|
|
1039
|
+
}
|
|
1040
|
+
},
|
|
1041
|
+
{
|
|
1042
|
+
name: "imageFit",
|
|
1043
|
+
type: "select",
|
|
1044
|
+
defaultValue: "contain",
|
|
1045
|
+
options: [
|
|
1046
|
+
{ label: "Cover", value: "cover" },
|
|
1047
|
+
{ label: "Contain", value: "contain" }
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
name: "imageCornerStyle",
|
|
1052
|
+
type: "select",
|
|
1053
|
+
defaultValue: "rounded",
|
|
1054
|
+
options: [
|
|
1055
|
+
{ label: "Rounded", value: "rounded" },
|
|
1056
|
+
{ label: "Square", value: "square" }
|
|
1057
|
+
]
|
|
1058
|
+
},
|
|
1059
|
+
{
|
|
1060
|
+
name: "imagePosition",
|
|
1061
|
+
type: "select",
|
|
1062
|
+
defaultValue: "center",
|
|
1063
|
+
options: [
|
|
1064
|
+
{ label: "Center", value: "center" },
|
|
1065
|
+
{ label: "Top", value: "top" },
|
|
1066
|
+
{ label: "Bottom", value: "bottom" },
|
|
1067
|
+
{ label: "Left", value: "left" },
|
|
1068
|
+
{ label: "Right", value: "right" }
|
|
1069
|
+
]
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
name: "imagePositionX",
|
|
1073
|
+
type: "number",
|
|
1074
|
+
min: 0,
|
|
1075
|
+
max: 100,
|
|
1076
|
+
admin: {
|
|
1077
|
+
description: "Optional custom horizontal focus (0-100). Overrides Image Position when set.",
|
|
1078
|
+
step: 1
|
|
1079
|
+
}
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
name: "imagePositionY",
|
|
1083
|
+
type: "number",
|
|
1084
|
+
min: 0,
|
|
1085
|
+
max: 100,
|
|
1086
|
+
admin: {
|
|
1087
|
+
description: "Optional custom vertical focus (0-100). Overrides Image Position when set.",
|
|
1088
|
+
step: 1
|
|
1089
|
+
}
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
name: "href",
|
|
1093
|
+
type: "text"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
name: "settings",
|
|
1097
|
+
type: "json",
|
|
1098
|
+
admin: {
|
|
1099
|
+
hidden: true
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
]
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
name: "settings",
|
|
1106
|
+
type: "json",
|
|
1107
|
+
admin: {
|
|
1108
|
+
description: "Internal builder settings schema v2.",
|
|
1109
|
+
hidden: true
|
|
1110
|
+
}
|
|
1111
|
+
},
|
|
1112
|
+
...sectionStyleFields()
|
|
1113
|
+
]
|
|
1114
|
+
};
|
|
1115
|
+
|
|
1116
|
+
// src/blocks/blocks/Media.ts
|
|
1117
|
+
var MediaBlock = {
|
|
1118
|
+
slug: "media",
|
|
1119
|
+
imageURL: "/images/project-after-1.svg",
|
|
1120
|
+
imageAltText: "Media section preview",
|
|
1121
|
+
admin: {
|
|
1122
|
+
components: {
|
|
1123
|
+
Label: builderBlockLabelComponent
|
|
1124
|
+
}
|
|
1125
|
+
},
|
|
1126
|
+
labels: {
|
|
1127
|
+
singular: "Media",
|
|
1128
|
+
plural: "Media Sections"
|
|
1129
|
+
},
|
|
1130
|
+
fields: [
|
|
1131
|
+
{
|
|
1132
|
+
name: "image",
|
|
1133
|
+
type: "upload",
|
|
1134
|
+
relationTo: "media",
|
|
1135
|
+
required: false
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
name: "imageURL",
|
|
1139
|
+
type: "text",
|
|
1140
|
+
admin: {
|
|
1141
|
+
description: "Optional direct image URL when this section should use an external image."
|
|
1142
|
+
}
|
|
1143
|
+
},
|
|
1144
|
+
{
|
|
1145
|
+
name: "caption",
|
|
1146
|
+
type: "text"
|
|
1147
|
+
},
|
|
1148
|
+
{
|
|
1149
|
+
name: "size",
|
|
1150
|
+
type: "select",
|
|
1151
|
+
defaultValue: "default",
|
|
1152
|
+
options: [
|
|
1153
|
+
{
|
|
1154
|
+
label: "Default",
|
|
1155
|
+
value: "default"
|
|
1156
|
+
},
|
|
1157
|
+
{
|
|
1158
|
+
label: "Wide",
|
|
1159
|
+
value: "wide"
|
|
1160
|
+
}
|
|
1161
|
+
]
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
name: "imageFit",
|
|
1165
|
+
type: "select",
|
|
1166
|
+
defaultValue: "cover",
|
|
1167
|
+
options: [
|
|
1168
|
+
{ label: "Cover", value: "cover" },
|
|
1169
|
+
{ label: "Contain", value: "contain" }
|
|
1170
|
+
]
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
name: "imageCornerStyle",
|
|
1174
|
+
type: "select",
|
|
1175
|
+
defaultValue: "rounded",
|
|
1176
|
+
options: [
|
|
1177
|
+
{ label: "Rounded", value: "rounded" },
|
|
1178
|
+
{ label: "Square", value: "square" }
|
|
1179
|
+
]
|
|
1180
|
+
},
|
|
1181
|
+
{
|
|
1182
|
+
name: "imagePosition",
|
|
1183
|
+
type: "select",
|
|
1184
|
+
defaultValue: "center",
|
|
1185
|
+
options: [
|
|
1186
|
+
{ label: "Center", value: "center" },
|
|
1187
|
+
{ label: "Top", value: "top" },
|
|
1188
|
+
{ label: "Bottom", value: "bottom" },
|
|
1189
|
+
{ label: "Left", value: "left" },
|
|
1190
|
+
{ label: "Right", value: "right" }
|
|
1191
|
+
]
|
|
1192
|
+
},
|
|
1193
|
+
{
|
|
1194
|
+
name: "settings",
|
|
1195
|
+
type: "json",
|
|
1196
|
+
admin: {
|
|
1197
|
+
description: "Internal builder settings schema v2.",
|
|
1198
|
+
hidden: true
|
|
1199
|
+
}
|
|
1200
|
+
},
|
|
1201
|
+
...sectionStyleFields()
|
|
1202
|
+
]
|
|
1203
|
+
};
|
|
1204
|
+
|
|
1205
|
+
// src/blocks/blocks/RichText.ts
|
|
1206
|
+
var RichTextBlock = {
|
|
1207
|
+
slug: "richText",
|
|
1208
|
+
imageURL: "/window.svg",
|
|
1209
|
+
imageAltText: "Rich text section preview",
|
|
1210
|
+
admin: {
|
|
1211
|
+
components: {
|
|
1212
|
+
Label: builderBlockLabelComponent
|
|
1213
|
+
}
|
|
1214
|
+
},
|
|
1215
|
+
labels: {
|
|
1216
|
+
singular: "Rich Text",
|
|
1217
|
+
plural: "Rich Text Sections"
|
|
1218
|
+
},
|
|
1219
|
+
fields: [
|
|
1220
|
+
{
|
|
1221
|
+
name: "variant",
|
|
1222
|
+
type: "select",
|
|
1223
|
+
defaultValue: "default",
|
|
1224
|
+
options: [
|
|
1225
|
+
{
|
|
1226
|
+
label: "Default",
|
|
1227
|
+
value: "default"
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
label: "Quote Banner",
|
|
1231
|
+
value: "quoteBanner"
|
|
1232
|
+
}
|
|
1233
|
+
]
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
name: "title",
|
|
1237
|
+
type: "text"
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
name: "content",
|
|
1241
|
+
type: "richText",
|
|
1242
|
+
required: true
|
|
1243
|
+
},
|
|
1244
|
+
{
|
|
1245
|
+
name: "statsItems",
|
|
1246
|
+
type: "array",
|
|
1247
|
+
fields: [
|
|
1248
|
+
{
|
|
1249
|
+
name: "value",
|
|
1250
|
+
type: "text",
|
|
1251
|
+
required: true
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
name: "label",
|
|
1255
|
+
type: "text",
|
|
1256
|
+
required: true
|
|
1257
|
+
}
|
|
1258
|
+
]
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
name: "cards",
|
|
1262
|
+
type: "array",
|
|
1263
|
+
fields: [
|
|
1264
|
+
{
|
|
1265
|
+
name: "eyebrow",
|
|
1266
|
+
type: "text"
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
name: "title",
|
|
1270
|
+
type: "text",
|
|
1271
|
+
required: true
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
name: "description",
|
|
1275
|
+
type: "textarea"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
name: "media",
|
|
1279
|
+
type: "upload",
|
|
1280
|
+
relationTo: "media",
|
|
1281
|
+
required: false
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
name: "imageURL",
|
|
1285
|
+
type: "text",
|
|
1286
|
+
admin: {
|
|
1287
|
+
description: "Optional direct image URL when this card should use an external image."
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
]
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
name: "width",
|
|
1294
|
+
type: "select",
|
|
1295
|
+
defaultValue: "normal",
|
|
1296
|
+
options: [
|
|
1297
|
+
{
|
|
1298
|
+
label: "Normal",
|
|
1299
|
+
value: "normal"
|
|
1300
|
+
},
|
|
1301
|
+
{
|
|
1302
|
+
label: "Narrow",
|
|
1303
|
+
value: "narrow"
|
|
1304
|
+
}
|
|
1305
|
+
]
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
name: "settings",
|
|
1309
|
+
type: "json",
|
|
1310
|
+
admin: {
|
|
1311
|
+
description: "Internal builder settings schema v2.",
|
|
1312
|
+
hidden: true
|
|
1313
|
+
}
|
|
1314
|
+
},
|
|
1315
|
+
...sectionStyleFields()
|
|
1316
|
+
]
|
|
1317
|
+
};
|
|
1318
|
+
|
|
1319
|
+
// src/blocks/blocks/Stats.ts
|
|
1320
|
+
var StatsBlock = {
|
|
1321
|
+
slug: "stats",
|
|
1322
|
+
imageURL: "/images/service-removal.svg",
|
|
1323
|
+
imageAltText: "Stats section preview",
|
|
1324
|
+
admin: {
|
|
1325
|
+
components: {
|
|
1326
|
+
Label: builderBlockLabelComponent
|
|
1327
|
+
}
|
|
1328
|
+
},
|
|
1329
|
+
labels: {
|
|
1330
|
+
singular: "Stats",
|
|
1331
|
+
plural: "Stats"
|
|
1332
|
+
},
|
|
1333
|
+
fields: [
|
|
1334
|
+
{
|
|
1335
|
+
name: "title",
|
|
1336
|
+
type: "text",
|
|
1337
|
+
required: true
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
name: "subtitle",
|
|
1341
|
+
type: "textarea"
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
name: "items",
|
|
1345
|
+
type: "array",
|
|
1346
|
+
minRows: 1,
|
|
1347
|
+
maxRows: 6,
|
|
1348
|
+
fields: [
|
|
1349
|
+
{
|
|
1350
|
+
name: "value",
|
|
1351
|
+
type: "text",
|
|
1352
|
+
required: true
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
name: "label",
|
|
1356
|
+
type: "text",
|
|
1357
|
+
required: true
|
|
1358
|
+
},
|
|
1359
|
+
{
|
|
1360
|
+
name: "description",
|
|
1361
|
+
type: "text"
|
|
1362
|
+
},
|
|
1363
|
+
{
|
|
1364
|
+
name: "settings",
|
|
1365
|
+
type: "json",
|
|
1366
|
+
admin: {
|
|
1367
|
+
hidden: true
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
]
|
|
1371
|
+
},
|
|
1372
|
+
{
|
|
1373
|
+
name: "settings",
|
|
1374
|
+
type: "json",
|
|
1375
|
+
admin: {
|
|
1376
|
+
description: "Internal builder settings schema v2.",
|
|
1377
|
+
hidden: true
|
|
1378
|
+
}
|
|
1379
|
+
},
|
|
1380
|
+
...sectionStyleFields()
|
|
1381
|
+
]
|
|
1382
|
+
};
|
|
1383
|
+
|
|
1384
|
+
// src/blocks/blocks/Testimonials.ts
|
|
1385
|
+
var TestimonialsBlock = {
|
|
1386
|
+
slug: "testimonials",
|
|
1387
|
+
imageURL: "/images/project-after-2.svg",
|
|
1388
|
+
imageAltText: "Testimonials section preview",
|
|
1389
|
+
admin: {
|
|
1390
|
+
components: {
|
|
1391
|
+
Label: builderBlockLabelComponent
|
|
1392
|
+
}
|
|
1393
|
+
},
|
|
1394
|
+
labels: {
|
|
1395
|
+
singular: "Testimonials",
|
|
1396
|
+
plural: "Testimonials"
|
|
1397
|
+
},
|
|
1398
|
+
fields: [
|
|
1399
|
+
{
|
|
1400
|
+
name: "title",
|
|
1401
|
+
type: "text",
|
|
1402
|
+
required: true
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
name: "visibleCount",
|
|
1406
|
+
type: "number",
|
|
1407
|
+
defaultValue: 3,
|
|
1408
|
+
min: 1,
|
|
1409
|
+
max: 6,
|
|
1410
|
+
admin: {
|
|
1411
|
+
description: "How many testimonials to show at once.",
|
|
1412
|
+
step: 1
|
|
1413
|
+
}
|
|
1414
|
+
},
|
|
1415
|
+
{
|
|
1416
|
+
name: "autoRotate",
|
|
1417
|
+
type: "checkbox",
|
|
1418
|
+
defaultValue: true,
|
|
1419
|
+
admin: {
|
|
1420
|
+
description: "Automatically rotates through all testimonials."
|
|
1421
|
+
}
|
|
1422
|
+
},
|
|
1423
|
+
{
|
|
1424
|
+
name: "rotateIntervalSeconds",
|
|
1425
|
+
type: "number",
|
|
1426
|
+
defaultValue: 7,
|
|
1427
|
+
min: 2,
|
|
1428
|
+
max: 30,
|
|
1429
|
+
admin: {
|
|
1430
|
+
description: "How often to rotate (in seconds).",
|
|
1431
|
+
step: 1
|
|
1432
|
+
}
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
name: "items",
|
|
1436
|
+
type: "array",
|
|
1437
|
+
minRows: 1,
|
|
1438
|
+
maxRows: 30,
|
|
1439
|
+
fields: [
|
|
1440
|
+
{
|
|
1441
|
+
name: "quote",
|
|
1442
|
+
type: "textarea",
|
|
1443
|
+
required: true
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
name: "name",
|
|
1447
|
+
type: "text",
|
|
1448
|
+
required: true
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
name: "location",
|
|
1452
|
+
type: "text"
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
name: "rating",
|
|
1456
|
+
type: "number",
|
|
1457
|
+
defaultValue: 5,
|
|
1458
|
+
min: 1,
|
|
1459
|
+
max: 5,
|
|
1460
|
+
admin: {
|
|
1461
|
+
description: "Star rating (1-5).",
|
|
1462
|
+
step: 1
|
|
1463
|
+
}
|
|
1464
|
+
},
|
|
1465
|
+
{
|
|
1466
|
+
name: "settings",
|
|
1467
|
+
type: "json",
|
|
1468
|
+
admin: {
|
|
1469
|
+
hidden: true
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
]
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
name: "settings",
|
|
1476
|
+
type: "json",
|
|
1477
|
+
admin: {
|
|
1478
|
+
description: "Internal builder settings schema v2.",
|
|
1479
|
+
hidden: true
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1482
|
+
...sectionStyleFields()
|
|
1483
|
+
]
|
|
1484
|
+
};
|
|
1485
|
+
|
|
1486
|
+
// src/blocks/components/BuilderBlockLabel.tsx
|
|
1487
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1488
|
+
var blockTitles = {
|
|
1489
|
+
bookingEmbed: "Booking Embed",
|
|
1490
|
+
cta: "Call to Action",
|
|
1491
|
+
faq: "FAQ",
|
|
1492
|
+
featureGrid: "Feature Grid",
|
|
1493
|
+
formEmbed: "Form Embed",
|
|
1494
|
+
hero: "Hero",
|
|
1495
|
+
media: "Media",
|
|
1496
|
+
richText: "Rich Text",
|
|
1497
|
+
testimonials: "Testimonials"
|
|
1498
|
+
};
|
|
1499
|
+
var blockEmojis = {
|
|
1500
|
+
bookingEmbed: "Calendar",
|
|
1501
|
+
cta: "Action",
|
|
1502
|
+
faq: "FAQ",
|
|
1503
|
+
featureGrid: "Grid",
|
|
1504
|
+
formEmbed: "Form",
|
|
1505
|
+
hero: "Hero",
|
|
1506
|
+
media: "Media",
|
|
1507
|
+
richText: "Text",
|
|
1508
|
+
testimonials: "Reviews"
|
|
1509
|
+
};
|
|
1510
|
+
function BuilderBlockLabel({ blockType, rowLabel, rowNumber }) {
|
|
1511
|
+
const fallbackTitle = blockTitles[blockType] || blockType;
|
|
1512
|
+
const title = rowLabel && rowLabel.trim().length > 0 ? rowLabel : fallbackTitle;
|
|
1513
|
+
const tag = blockEmojis[blockType] || "Section";
|
|
1514
|
+
return /* @__PURE__ */ jsxs("div", { style: { alignItems: "center", display: "flex", gap: 8 }, children: [
|
|
1515
|
+
/* @__PURE__ */ jsx(
|
|
1516
|
+
"span",
|
|
1517
|
+
{
|
|
1518
|
+
style: {
|
|
1519
|
+
background: "var(--theme-elevation-100)",
|
|
1520
|
+
border: "1px solid var(--theme-elevation-200)",
|
|
1521
|
+
borderRadius: 999,
|
|
1522
|
+
color: "var(--theme-text-muted)",
|
|
1523
|
+
fontSize: 11,
|
|
1524
|
+
fontWeight: 700,
|
|
1525
|
+
padding: "2px 8px"
|
|
1526
|
+
},
|
|
1527
|
+
children: tag
|
|
1528
|
+
}
|
|
1529
|
+
),
|
|
1530
|
+
/* @__PURE__ */ jsxs("span", { style: { fontWeight: 700 }, children: [
|
|
1531
|
+
typeof rowNumber === "number" ? `${rowNumber + 1}. ` : "",
|
|
1532
|
+
title
|
|
1533
|
+
] })
|
|
1534
|
+
] });
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
// src/blocks/presets/index.ts
|
|
1538
|
+
var sectionPresets = [
|
|
1539
|
+
{
|
|
1540
|
+
id: "hero-conversion",
|
|
1541
|
+
title: "Hero + Conversion CTA",
|
|
1542
|
+
description: "Lead section with headline and primary conversion strip.",
|
|
1543
|
+
blocks: [
|
|
1544
|
+
{
|
|
1545
|
+
blockType: "hero",
|
|
1546
|
+
kicker: "Trusted Team",
|
|
1547
|
+
headline: "A clear headline for your primary offer",
|
|
1548
|
+
subheadline: "Explain what you offer, who it is for, and why it matters in one strong supporting sentence.",
|
|
1549
|
+
primaryLabel: "Get Started",
|
|
1550
|
+
primaryHref: "/contact",
|
|
1551
|
+
secondaryLabel: "Learn More",
|
|
1552
|
+
secondaryHref: "/about"
|
|
1553
|
+
},
|
|
1554
|
+
{
|
|
1555
|
+
blockType: "cta",
|
|
1556
|
+
headline: "Ready for the next step?",
|
|
1557
|
+
description: "Use a short call to action with a direct path to contact or purchase.",
|
|
1558
|
+
buttonLabel: "Contact Us",
|
|
1559
|
+
buttonHref: "/contact",
|
|
1560
|
+
style: "light"
|
|
1561
|
+
}
|
|
1562
|
+
]
|
|
1563
|
+
},
|
|
1564
|
+
{
|
|
1565
|
+
id: "services-grid",
|
|
1566
|
+
title: "Services Grid",
|
|
1567
|
+
description: "Three-card services section for fast offer communication.",
|
|
1568
|
+
blocks: [
|
|
1569
|
+
{
|
|
1570
|
+
blockType: "featureGrid",
|
|
1571
|
+
title: "Our Services",
|
|
1572
|
+
variant: "cards",
|
|
1573
|
+
items: [
|
|
1574
|
+
{
|
|
1575
|
+
title: "Service One",
|
|
1576
|
+
description: "Briefly describe this offer or outcome.",
|
|
1577
|
+
icon: "01"
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
title: "Service Two",
|
|
1581
|
+
description: "Briefly describe this offer or outcome.",
|
|
1582
|
+
icon: "02"
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
title: "Service Three",
|
|
1586
|
+
description: "Briefly describe this offer or outcome.",
|
|
1587
|
+
icon: "03"
|
|
1588
|
+
}
|
|
1589
|
+
]
|
|
1590
|
+
}
|
|
1591
|
+
]
|
|
1592
|
+
},
|
|
1593
|
+
{
|
|
1594
|
+
id: "social-proof",
|
|
1595
|
+
title: "Testimonials + FAQ",
|
|
1596
|
+
description: "Trust-building section with reviews and common questions.",
|
|
1597
|
+
blocks: [
|
|
1598
|
+
{
|
|
1599
|
+
blockType: "testimonials",
|
|
1600
|
+
title: "What Homeowners Say",
|
|
1601
|
+
items: [
|
|
1602
|
+
{
|
|
1603
|
+
quote: "The experience was smooth, thoughtful, and exactly what we hoped for.",
|
|
1604
|
+
name: "Customer Name",
|
|
1605
|
+
location: "City, ST",
|
|
1606
|
+
rating: 5
|
|
1607
|
+
},
|
|
1608
|
+
{
|
|
1609
|
+
quote: "Fast communication, strong service, and a result we would happily recommend.",
|
|
1610
|
+
name: "Customer Name",
|
|
1611
|
+
location: "City, ST",
|
|
1612
|
+
rating: 5
|
|
1613
|
+
}
|
|
1614
|
+
]
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
blockType: "faq",
|
|
1618
|
+
title: "Common Questions",
|
|
1619
|
+
items: [
|
|
1620
|
+
{
|
|
1621
|
+
question: "How quickly do you respond?",
|
|
1622
|
+
answer: "Replace this with a concise answer to a common customer question."
|
|
1623
|
+
},
|
|
1624
|
+
{
|
|
1625
|
+
question: "What is included?",
|
|
1626
|
+
answer: "Replace this with another concise answer that reduces buying friction."
|
|
1627
|
+
}
|
|
1628
|
+
]
|
|
1629
|
+
}
|
|
1630
|
+
]
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
id: "lead-capture",
|
|
1634
|
+
title: "Lead Capture",
|
|
1635
|
+
description: "Quote form and consultation CTA for conversion pages.",
|
|
1636
|
+
blocks: [
|
|
1637
|
+
{
|
|
1638
|
+
blockType: "formEmbed",
|
|
1639
|
+
title: "Request a Quote",
|
|
1640
|
+
description: "Share a few details and your team can follow up with next steps.",
|
|
1641
|
+
formType: "quote"
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
blockType: "bookingEmbed",
|
|
1645
|
+
title: "Prefer to book a consultation?",
|
|
1646
|
+
description: "Offer an alternative scheduling path for visitors who prefer to book directly.",
|
|
1647
|
+
buttonLabel: "Book Consultation",
|
|
1648
|
+
buttonHref: "/contact"
|
|
1649
|
+
}
|
|
1650
|
+
]
|
|
1651
|
+
}
|
|
1652
|
+
];
|
|
1653
|
+
var templateStarterPresets = {
|
|
1654
|
+
contact: [
|
|
1655
|
+
{
|
|
1656
|
+
blockType: "hero",
|
|
1657
|
+
headline: "Contact Us",
|
|
1658
|
+
subheadline: "Tell visitors exactly how to reach you and what to expect next.",
|
|
1659
|
+
primaryLabel: "Email Us",
|
|
1660
|
+
primaryHref: "mailto:hello@example.com"
|
|
1661
|
+
},
|
|
1662
|
+
{
|
|
1663
|
+
blockType: "formEmbed",
|
|
1664
|
+
title: "Request a Quote",
|
|
1665
|
+
description: "Use this space for a form embed or lead capture flow.",
|
|
1666
|
+
formType: "quote"
|
|
1667
|
+
},
|
|
1668
|
+
{
|
|
1669
|
+
blockType: "faq",
|
|
1670
|
+
title: "Common Questions",
|
|
1671
|
+
items: [
|
|
1672
|
+
{
|
|
1673
|
+
question: "How quickly will you respond?",
|
|
1674
|
+
answer: "Replace with the answer that best fits your operating process."
|
|
1675
|
+
}
|
|
1676
|
+
]
|
|
1677
|
+
}
|
|
1678
|
+
],
|
|
1679
|
+
landing: [
|
|
1680
|
+
{
|
|
1681
|
+
blockType: "hero",
|
|
1682
|
+
kicker: "Locally Owned",
|
|
1683
|
+
headline: "Lead with your strongest offer",
|
|
1684
|
+
subheadline: "Support the headline with a concise sentence that clarifies benefits and audience.",
|
|
1685
|
+
primaryLabel: "Get Started",
|
|
1686
|
+
primaryHref: "/contact",
|
|
1687
|
+
secondaryLabel: "View Services",
|
|
1688
|
+
secondaryHref: "/services"
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
blockType: "featureGrid",
|
|
1692
|
+
title: "Why clients choose us",
|
|
1693
|
+
variant: "highlight",
|
|
1694
|
+
items: [
|
|
1695
|
+
{ title: "Clear Value", description: "Explain your first differentiator.", icon: "01" },
|
|
1696
|
+
{ title: "Reliable Process", description: "Explain your second differentiator.", icon: "02" },
|
|
1697
|
+
{ title: "Strong Results", description: "Explain your third differentiator.", icon: "03" }
|
|
1698
|
+
]
|
|
1699
|
+
},
|
|
1700
|
+
{
|
|
1701
|
+
blockType: "cta",
|
|
1702
|
+
headline: "Ready to take the next step?",
|
|
1703
|
+
description: "Add a direct conversion prompt with a clear primary action.",
|
|
1704
|
+
buttonLabel: "Contact Us",
|
|
1705
|
+
buttonHref: "/contact",
|
|
1706
|
+
style: "light"
|
|
1707
|
+
}
|
|
1708
|
+
],
|
|
1709
|
+
services: [
|
|
1710
|
+
{
|
|
1711
|
+
blockType: "hero",
|
|
1712
|
+
headline: "Services Built Around Your Process",
|
|
1713
|
+
subheadline: "Summarize the core offerings with a short clarity-first introduction.",
|
|
1714
|
+
primaryLabel: "Request Info",
|
|
1715
|
+
primaryHref: "/contact"
|
|
1716
|
+
},
|
|
1717
|
+
{
|
|
1718
|
+
blockType: "featureGrid",
|
|
1719
|
+
title: "Core Services",
|
|
1720
|
+
variant: "cards",
|
|
1721
|
+
items: [
|
|
1722
|
+
{
|
|
1723
|
+
title: "Service One",
|
|
1724
|
+
description: "Replace with a short description.",
|
|
1725
|
+
icon: "01"
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
title: "Service Two",
|
|
1729
|
+
description: "Replace with a short description.",
|
|
1730
|
+
icon: "02"
|
|
1731
|
+
},
|
|
1732
|
+
{
|
|
1733
|
+
title: "Service Three",
|
|
1734
|
+
description: "Replace with a short description.",
|
|
1735
|
+
icon: "03"
|
|
1736
|
+
}
|
|
1737
|
+
]
|
|
1738
|
+
},
|
|
1739
|
+
{
|
|
1740
|
+
blockType: "faq",
|
|
1741
|
+
title: "Frequently Asked Questions",
|
|
1742
|
+
items: [
|
|
1743
|
+
{
|
|
1744
|
+
question: "Do you offer custom scopes?",
|
|
1745
|
+
answer: "Replace this with an answer that fits your business."
|
|
1746
|
+
}
|
|
1747
|
+
]
|
|
1748
|
+
}
|
|
1749
|
+
],
|
|
1750
|
+
standard: [
|
|
1751
|
+
{
|
|
1752
|
+
blockType: "hero",
|
|
1753
|
+
headline: "Page Headline",
|
|
1754
|
+
subheadline: "Use this page to communicate your primary message clearly."
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
blockType: "richText",
|
|
1758
|
+
title: "Section Heading",
|
|
1759
|
+
width: "normal",
|
|
1760
|
+
content: {
|
|
1761
|
+
root: {
|
|
1762
|
+
children: [
|
|
1763
|
+
{
|
|
1764
|
+
children: [{ detail: 0, format: 0, mode: "normal", style: "", text: "", type: "text", version: 1 }],
|
|
1765
|
+
direction: "ltr",
|
|
1766
|
+
format: "",
|
|
1767
|
+
indent: 0,
|
|
1768
|
+
type: "paragraph",
|
|
1769
|
+
version: 1
|
|
1770
|
+
}
|
|
1771
|
+
],
|
|
1772
|
+
direction: "ltr",
|
|
1773
|
+
format: "",
|
|
1774
|
+
indent: 0,
|
|
1775
|
+
type: "root",
|
|
1776
|
+
version: 1
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
{
|
|
1781
|
+
blockType: "cta",
|
|
1782
|
+
headline: "Ready to take the next step?",
|
|
1783
|
+
buttonLabel: "Contact Us",
|
|
1784
|
+
buttonHref: "/contact",
|
|
1785
|
+
style: "light"
|
|
1786
|
+
}
|
|
1787
|
+
]
|
|
1788
|
+
};
|
|
1789
|
+
function clonePresetBlocks(blocks) {
|
|
1790
|
+
return JSON.parse(JSON.stringify(blocks));
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
// src/blocks/index.ts
|
|
1794
|
+
var defaultPageLayoutBlocks = [
|
|
1795
|
+
HeroBlock,
|
|
1796
|
+
RichTextBlock,
|
|
1797
|
+
FeatureGridBlock,
|
|
1798
|
+
StatsBlock,
|
|
1799
|
+
LogoWallBlock,
|
|
1800
|
+
BeforeAfterBlock,
|
|
1801
|
+
MediaBlock,
|
|
1802
|
+
TestimonialsBlock,
|
|
1803
|
+
FaqBlock,
|
|
1804
|
+
FormEmbedBlock,
|
|
1805
|
+
BookingEmbedBlock,
|
|
1806
|
+
CtaBlock
|
|
1807
|
+
];
|
|
1808
|
+
|
|
1809
|
+
export {
|
|
1810
|
+
builderBlockLabelComponent,
|
|
1811
|
+
BeforeAfterBlock,
|
|
1812
|
+
BookingEmbedBlock,
|
|
1813
|
+
CtaBlock,
|
|
1814
|
+
FaqBlock,
|
|
1815
|
+
FeatureGridBlock,
|
|
1816
|
+
FormEmbedBlock,
|
|
1817
|
+
HeroBlock,
|
|
1818
|
+
LogoWallBlock,
|
|
1819
|
+
MediaBlock,
|
|
1820
|
+
RichTextBlock,
|
|
1821
|
+
StatsBlock,
|
|
1822
|
+
TestimonialsBlock,
|
|
1823
|
+
BuilderBlockLabel,
|
|
1824
|
+
sectionPresets,
|
|
1825
|
+
templateStarterPresets,
|
|
1826
|
+
clonePresetBlocks,
|
|
1827
|
+
defaultPageLayoutBlocks,
|
|
1828
|
+
blocks_exports
|
|
1829
|
+
};
|