@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.
Files changed (77) hide show
  1. package/README.md +54 -0
  2. package/dist/admin/client.d.mts +3 -0
  3. package/dist/admin/client.d.ts +3 -0
  4. package/dist/admin/client.js +1745 -200
  5. package/dist/admin/client.mjs +1756 -214
  6. package/dist/admin/index.d.mts +2 -1
  7. package/dist/admin/index.d.ts +2 -1
  8. package/dist/admin/index.js +424 -11
  9. package/dist/admin/index.mjs +19 -1
  10. package/dist/admin-app/client.d.mts +7 -0
  11. package/dist/admin-app/client.d.ts +7 -0
  12. package/dist/admin-app/client.js +1270 -3
  13. package/dist/admin-app/client.mjs +1172 -2
  14. package/dist/admin-app/index.d.mts +1 -1
  15. package/dist/admin-app/index.d.ts +1 -1
  16. package/dist/admin-app/index.js +167 -0
  17. package/dist/admin-app/index.mjs +13 -1
  18. package/dist/admin-app/styles.css +247 -0
  19. package/dist/admin.css +8 -0
  20. package/dist/blocks/index.js +1011 -191
  21. package/dist/blocks/index.mjs +2 -2
  22. package/dist/chunk-ADIIWIYL.mjs +322 -0
  23. package/dist/{chunk-ZLLNO5FM.mjs → chunk-BET2YLAS.mjs} +104 -15
  24. package/dist/chunk-DAIZDGHL.mjs +614 -0
  25. package/dist/chunk-GKMBYYXF.mjs +776 -0
  26. package/dist/chunk-JQAHXYAM.mjs +1829 -0
  27. package/dist/chunk-OQSEJXC4.mjs +166 -0
  28. package/dist/chunk-PF3EBZXF.mjs +326 -0
  29. package/dist/chunk-ROTPP5CU.mjs +99 -0
  30. package/dist/chunk-XVH5SCBD.mjs +234 -0
  31. package/dist/chunk-ZTXJG4K5.mjs +85 -0
  32. package/dist/index-7lxTrxSG.d.mts +128 -0
  33. package/dist/index-7lxTrxSG.d.ts +128 -0
  34. package/dist/index-B7QvY3yF.d.mts +245 -0
  35. package/dist/index-BK03FiEM.d.ts +245 -0
  36. package/dist/{index-CmR6NInu.d.ts → index-BzKOThsI.d.mts} +30 -3
  37. package/dist/{index-CmR6NInu.d.mts → index-BzKOThsI.d.ts} +30 -3
  38. package/dist/{index-DbH0Ljwp.d.mts → index-D8BNfUJb.d.mts} +17 -2
  39. package/dist/{index-DbH0Ljwp.d.ts → index-DD_E2UfJ.d.ts} +17 -2
  40. package/dist/index-DUi_XND6.d.ts +193 -0
  41. package/dist/index-gLl_358v.d.mts +193 -0
  42. package/dist/index.d.mts +6 -5
  43. package/dist/index.d.ts +6 -5
  44. package/dist/index.js +2876 -460
  45. package/dist/index.mjs +12 -10
  46. package/dist/nextjs/index.d.mts +2 -1
  47. package/dist/nextjs/index.d.ts +2 -1
  48. package/dist/nextjs/index.js +497 -16
  49. package/dist/nextjs/index.mjs +8 -3
  50. package/dist/socialMedia-C05Iy-SV.d.mts +21 -0
  51. package/dist/socialMedia-C05Iy-SV.d.ts +21 -0
  52. package/dist/studio/index.d.mts +2 -1
  53. package/dist/studio/index.d.ts +2 -1
  54. package/dist/studio/index.js +171 -5
  55. package/dist/studio/index.mjs +7 -3
  56. package/dist/studio-pages/builder.css +517 -32
  57. package/dist/studio-pages/client.d.mts +75 -1
  58. package/dist/studio-pages/client.d.ts +75 -1
  59. package/dist/studio-pages/client.js +5662 -2759
  60. package/dist/studio-pages/client.mjs +5578 -2767
  61. package/dist/studio-pages/index.d.mts +4 -2
  62. package/dist/studio-pages/index.d.ts +4 -2
  63. package/dist/studio-pages/index.js +859 -71
  64. package/dist/studio-pages/index.mjs +10 -4
  65. package/package.json +35 -13
  66. package/dist/chunk-AAOHJDNS.mjs +0 -67
  67. package/dist/chunk-ETRRXURT.mjs +0 -141
  68. package/dist/chunk-J7W5EE3B.mjs +0 -278
  69. package/dist/chunk-N67KVM2S.mjs +0 -156
  70. package/dist/chunk-NESLJZFE.mjs +0 -303
  71. package/dist/chunk-U5BSPWAD.mjs +0 -1034
  72. package/dist/index-B9N5MyjF.d.mts +0 -39
  73. package/dist/index-BallJs-K.d.mts +0 -43
  74. package/dist/index-BallJs-K.d.ts +0 -43
  75. package/dist/index-DJFhANvJ.d.mts +0 -128
  76. package/dist/index-DJFhANvJ.d.ts +0 -128
  77. package/dist/index-g8tBHLKD.d.ts +0 -39
@@ -1,1034 +0,0 @@
1
- import {
2
- sectionStyleFields
3
- } from "./chunk-ETRRXURT.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: "items",
63
- type: "array",
64
- minRows: 1,
65
- maxRows: 6,
66
- fields: [
67
- {
68
- name: "label",
69
- type: "text",
70
- required: true
71
- },
72
- {
73
- name: "beforeMedia",
74
- type: "upload",
75
- relationTo: "media",
76
- required: false
77
- },
78
- {
79
- name: "afterMedia",
80
- type: "upload",
81
- relationTo: "media",
82
- required: false
83
- },
84
- {
85
- name: "description",
86
- type: "textarea"
87
- }
88
- ]
89
- },
90
- ...sectionStyleFields()
91
- ]
92
- };
93
-
94
- // src/blocks/blocks/BookingEmbed.ts
95
- var BookingEmbedBlock = {
96
- slug: "bookingEmbed",
97
- imageURL: "/images/service-removal.svg",
98
- imageAltText: "Booking embed section preview",
99
- admin: {
100
- components: {
101
- Label: builderBlockLabelComponent
102
- }
103
- },
104
- labels: {
105
- singular: "Booking Embed",
106
- plural: "Booking Embeds"
107
- },
108
- fields: [
109
- {
110
- name: "title",
111
- type: "text"
112
- },
113
- {
114
- name: "description",
115
- type: "textarea"
116
- },
117
- {
118
- name: "buttonLabel",
119
- type: "text",
120
- defaultValue: "Book Consultation"
121
- },
122
- {
123
- name: "buttonHref",
124
- type: "text",
125
- defaultValue: "/contact"
126
- },
127
- ...sectionStyleFields()
128
- ]
129
- };
130
-
131
- // src/blocks/blocks/Cta.ts
132
- var CtaBlock = {
133
- slug: "cta",
134
- imageURL: "/images/logo-mark.svg",
135
- imageAltText: "Call to action section preview",
136
- admin: {
137
- components: {
138
- Label: builderBlockLabelComponent
139
- }
140
- },
141
- labels: {
142
- singular: "CTA",
143
- plural: "CTAs"
144
- },
145
- fields: [
146
- {
147
- name: "headline",
148
- type: "text",
149
- required: true
150
- },
151
- {
152
- name: "description",
153
- type: "textarea"
154
- },
155
- {
156
- name: "buttonLabel",
157
- type: "text"
158
- },
159
- {
160
- name: "buttonHref",
161
- type: "text",
162
- admin: {
163
- description: "Use internal links like /contact."
164
- }
165
- },
166
- {
167
- name: "style",
168
- type: "select",
169
- defaultValue: "light",
170
- options: [
171
- {
172
- label: "Light",
173
- value: "light"
174
- },
175
- {
176
- label: "Dark",
177
- value: "dark"
178
- }
179
- ]
180
- },
181
- {
182
- name: "backgroundColor",
183
- type: "text",
184
- admin: {
185
- description: "Optional background color override for the CTA strip (example: #124a37)."
186
- }
187
- },
188
- ...sectionStyleFields()
189
- ]
190
- };
191
-
192
- // src/blocks/blocks/Faq.ts
193
- var FaqBlock = {
194
- slug: "faq",
195
- imageURL: "/images/project-before-2.svg",
196
- imageAltText: "FAQ section preview",
197
- admin: {
198
- components: {
199
- Label: builderBlockLabelComponent
200
- }
201
- },
202
- labels: {
203
- singular: "FAQ",
204
- plural: "FAQs"
205
- },
206
- fields: [
207
- {
208
- name: "title",
209
- type: "text",
210
- required: true
211
- },
212
- {
213
- name: "items",
214
- type: "array",
215
- minRows: 1,
216
- maxRows: 12,
217
- fields: [
218
- {
219
- name: "question",
220
- type: "text",
221
- required: true
222
- },
223
- {
224
- name: "answer",
225
- type: "textarea",
226
- required: true
227
- }
228
- ]
229
- },
230
- ...sectionStyleFields()
231
- ]
232
- };
233
-
234
- // src/blocks/blocks/FeatureGrid.ts
235
- var FeatureGridBlock = {
236
- slug: "featureGrid",
237
- imageURL: "/images/service-trimming.svg",
238
- imageAltText: "Feature grid section preview",
239
- admin: {
240
- components: {
241
- Label: builderBlockLabelComponent
242
- }
243
- },
244
- labels: {
245
- singular: "Feature Grid",
246
- plural: "Feature Grids"
247
- },
248
- fields: [
249
- {
250
- name: "title",
251
- type: "text",
252
- required: true
253
- },
254
- {
255
- name: "items",
256
- type: "array",
257
- minRows: 1,
258
- maxRows: 6,
259
- fields: [
260
- {
261
- name: "title",
262
- type: "text",
263
- required: true
264
- },
265
- {
266
- name: "description",
267
- type: "textarea"
268
- },
269
- {
270
- name: "icon",
271
- type: "text",
272
- admin: {
273
- description: 'Optional short icon label (e.g. "01", "Leaf", "Star").'
274
- }
275
- },
276
- {
277
- name: "media",
278
- type: "upload",
279
- relationTo: "media",
280
- required: false
281
- }
282
- ]
283
- },
284
- {
285
- name: "variant",
286
- type: "select",
287
- defaultValue: "cards",
288
- options: [
289
- {
290
- label: "Cards",
291
- value: "cards"
292
- },
293
- {
294
- label: "Highlight",
295
- value: "highlight"
296
- }
297
- ]
298
- },
299
- {
300
- name: "backgroundColor",
301
- type: "text",
302
- admin: {
303
- description: "Optional background color override when using the Highlight variant (example: #1f684f)."
304
- }
305
- },
306
- ...sectionStyleFields()
307
- ]
308
- };
309
-
310
- // src/blocks/blocks/FormEmbed.ts
311
- var FormEmbedBlock = {
312
- slug: "formEmbed",
313
- imageURL: "/images/map-placeholder.svg",
314
- imageAltText: "Form embed section preview",
315
- admin: {
316
- components: {
317
- Label: builderBlockLabelComponent
318
- }
319
- },
320
- labels: {
321
- singular: "Form Embed",
322
- plural: "Form Embeds"
323
- },
324
- fields: [
325
- {
326
- name: "title",
327
- type: "text"
328
- },
329
- {
330
- name: "description",
331
- type: "textarea"
332
- },
333
- {
334
- name: "formType",
335
- type: "select",
336
- defaultValue: "quote",
337
- options: [
338
- {
339
- label: "Quote Form",
340
- value: "quote"
341
- }
342
- ]
343
- },
344
- ...sectionStyleFields()
345
- ]
346
- };
347
-
348
- // src/blocks/blocks/Hero.ts
349
- var HeroBlock = {
350
- slug: "hero",
351
- imageURL: "/images/hero-tree.svg",
352
- imageAltText: "Hero section preview",
353
- admin: {
354
- components: {
355
- Label: builderBlockLabelComponent
356
- }
357
- },
358
- labels: {
359
- singular: "Hero",
360
- plural: "Hero Sections"
361
- },
362
- fields: [
363
- {
364
- name: "kicker",
365
- type: "text",
366
- admin: {
367
- description: "Optional short label above the headline."
368
- }
369
- },
370
- {
371
- name: "headline",
372
- type: "text",
373
- required: true
374
- },
375
- {
376
- name: "subheadline",
377
- type: "textarea"
378
- },
379
- {
380
- name: "primaryLabel",
381
- type: "text"
382
- },
383
- {
384
- name: "primaryHref",
385
- type: "text",
386
- admin: {
387
- description: "Use internal links like /contact."
388
- }
389
- },
390
- {
391
- name: "secondaryLabel",
392
- type: "text"
393
- },
394
- {
395
- name: "secondaryHref",
396
- type: "text",
397
- admin: {
398
- description: "Use internal links like /services."
399
- }
400
- },
401
- {
402
- name: "media",
403
- type: "upload",
404
- relationTo: "media"
405
- },
406
- {
407
- name: "backgroundImageFit",
408
- type: "select",
409
- defaultValue: "cover",
410
- options: [
411
- { label: "Cover", value: "cover" },
412
- { label: "Contain", value: "contain" }
413
- ],
414
- admin: {
415
- description: "How the hero image should be sized within the section."
416
- }
417
- },
418
- {
419
- name: "backgroundImagePosition",
420
- type: "select",
421
- defaultValue: "center",
422
- options: [
423
- { label: "Center", value: "center" },
424
- { label: "Top", value: "top" },
425
- { label: "Bottom", value: "bottom" },
426
- { label: "Left", value: "left" },
427
- { label: "Right", value: "right" }
428
- ],
429
- admin: {
430
- description: "Where the hero image should anchor inside the section."
431
- }
432
- },
433
- {
434
- name: "backgroundColor",
435
- type: "text",
436
- admin: {
437
- description: "Optional background color override (example: #124a37)."
438
- }
439
- },
440
- {
441
- name: "variant",
442
- type: "select",
443
- defaultValue: "default",
444
- options: [
445
- {
446
- label: "Default",
447
- value: "default"
448
- },
449
- {
450
- label: "Centered",
451
- value: "centered"
452
- }
453
- ]
454
- },
455
- ...sectionStyleFields()
456
- ]
457
- };
458
-
459
- // src/blocks/blocks/LogoWall.ts
460
- var LogoWallBlock = {
461
- slug: "logoWall",
462
- imageURL: "/images/logo-mark.svg",
463
- imageAltText: "Logo wall section preview",
464
- admin: {
465
- components: {
466
- Label: builderBlockLabelComponent
467
- }
468
- },
469
- labels: {
470
- singular: "Logo Wall",
471
- plural: "Logo Walls"
472
- },
473
- fields: [
474
- {
475
- name: "title",
476
- type: "text",
477
- required: true
478
- },
479
- {
480
- name: "subtitle",
481
- type: "textarea"
482
- },
483
- {
484
- name: "items",
485
- type: "array",
486
- minRows: 1,
487
- maxRows: 12,
488
- fields: [
489
- {
490
- name: "name",
491
- type: "text",
492
- required: true
493
- },
494
- {
495
- name: "media",
496
- type: "upload",
497
- relationTo: "media",
498
- required: false
499
- },
500
- {
501
- name: "href",
502
- type: "text"
503
- }
504
- ]
505
- },
506
- ...sectionStyleFields()
507
- ]
508
- };
509
-
510
- // src/blocks/blocks/Media.ts
511
- var MediaBlock = {
512
- slug: "media",
513
- imageURL: "/images/project-after-1.svg",
514
- imageAltText: "Media section preview",
515
- admin: {
516
- components: {
517
- Label: builderBlockLabelComponent
518
- }
519
- },
520
- labels: {
521
- singular: "Media",
522
- plural: "Media Sections"
523
- },
524
- fields: [
525
- {
526
- name: "image",
527
- type: "upload",
528
- relationTo: "media",
529
- required: true
530
- },
531
- {
532
- name: "caption",
533
- type: "text"
534
- },
535
- {
536
- name: "size",
537
- type: "select",
538
- defaultValue: "default",
539
- options: [
540
- {
541
- label: "Default",
542
- value: "default"
543
- },
544
- {
545
- label: "Wide",
546
- value: "wide"
547
- }
548
- ]
549
- },
550
- ...sectionStyleFields()
551
- ]
552
- };
553
-
554
- // src/blocks/blocks/RichText.ts
555
- var RichTextBlock = {
556
- slug: "richText",
557
- imageURL: "/window.svg",
558
- imageAltText: "Rich text section preview",
559
- admin: {
560
- components: {
561
- Label: builderBlockLabelComponent
562
- }
563
- },
564
- labels: {
565
- singular: "Rich Text",
566
- plural: "Rich Text Sections"
567
- },
568
- fields: [
569
- {
570
- name: "title",
571
- type: "text"
572
- },
573
- {
574
- name: "content",
575
- type: "richText",
576
- required: true
577
- },
578
- {
579
- name: "width",
580
- type: "select",
581
- defaultValue: "normal",
582
- options: [
583
- {
584
- label: "Normal",
585
- value: "normal"
586
- },
587
- {
588
- label: "Narrow",
589
- value: "narrow"
590
- }
591
- ]
592
- },
593
- ...sectionStyleFields()
594
- ]
595
- };
596
-
597
- // src/blocks/blocks/Stats.ts
598
- var StatsBlock = {
599
- slug: "stats",
600
- imageURL: "/images/service-removal.svg",
601
- imageAltText: "Stats section preview",
602
- admin: {
603
- components: {
604
- Label: builderBlockLabelComponent
605
- }
606
- },
607
- labels: {
608
- singular: "Stats",
609
- plural: "Stats"
610
- },
611
- fields: [
612
- {
613
- name: "title",
614
- type: "text",
615
- required: true
616
- },
617
- {
618
- name: "subtitle",
619
- type: "textarea"
620
- },
621
- {
622
- name: "items",
623
- type: "array",
624
- minRows: 1,
625
- maxRows: 6,
626
- fields: [
627
- {
628
- name: "value",
629
- type: "text",
630
- required: true
631
- },
632
- {
633
- name: "label",
634
- type: "text",
635
- required: true
636
- },
637
- {
638
- name: "description",
639
- type: "text"
640
- }
641
- ]
642
- },
643
- ...sectionStyleFields()
644
- ]
645
- };
646
-
647
- // src/blocks/blocks/Testimonials.ts
648
- var TestimonialsBlock = {
649
- slug: "testimonials",
650
- imageURL: "/images/project-after-2.svg",
651
- imageAltText: "Testimonials section preview",
652
- admin: {
653
- components: {
654
- Label: builderBlockLabelComponent
655
- }
656
- },
657
- labels: {
658
- singular: "Testimonials",
659
- plural: "Testimonials"
660
- },
661
- fields: [
662
- {
663
- name: "title",
664
- type: "text",
665
- required: true
666
- },
667
- {
668
- name: "items",
669
- type: "array",
670
- minRows: 1,
671
- maxRows: 6,
672
- fields: [
673
- {
674
- name: "quote",
675
- type: "textarea",
676
- required: true
677
- },
678
- {
679
- name: "name",
680
- type: "text",
681
- required: true
682
- },
683
- {
684
- name: "location",
685
- type: "text"
686
- }
687
- ]
688
- },
689
- ...sectionStyleFields()
690
- ]
691
- };
692
-
693
- // src/blocks/components/BuilderBlockLabel.tsx
694
- import { jsx, jsxs } from "react/jsx-runtime";
695
- var blockTitles = {
696
- bookingEmbed: "Booking Embed",
697
- cta: "Call to Action",
698
- faq: "FAQ",
699
- featureGrid: "Feature Grid",
700
- formEmbed: "Form Embed",
701
- hero: "Hero",
702
- media: "Media",
703
- richText: "Rich Text",
704
- testimonials: "Testimonials"
705
- };
706
- var blockEmojis = {
707
- bookingEmbed: "Calendar",
708
- cta: "Action",
709
- faq: "FAQ",
710
- featureGrid: "Grid",
711
- formEmbed: "Form",
712
- hero: "Hero",
713
- media: "Media",
714
- richText: "Text",
715
- testimonials: "Reviews"
716
- };
717
- function BuilderBlockLabel({ blockType, rowLabel, rowNumber }) {
718
- const fallbackTitle = blockTitles[blockType] || blockType;
719
- const title = rowLabel && rowLabel.trim().length > 0 ? rowLabel : fallbackTitle;
720
- const tag = blockEmojis[blockType] || "Section";
721
- return /* @__PURE__ */ jsxs("div", { style: { alignItems: "center", display: "flex", gap: 8 }, children: [
722
- /* @__PURE__ */ jsx(
723
- "span",
724
- {
725
- style: {
726
- background: "var(--theme-elevation-100)",
727
- border: "1px solid var(--theme-elevation-200)",
728
- borderRadius: 999,
729
- color: "var(--theme-text-muted)",
730
- fontSize: 11,
731
- fontWeight: 700,
732
- padding: "2px 8px"
733
- },
734
- children: tag
735
- }
736
- ),
737
- /* @__PURE__ */ jsxs("span", { style: { fontWeight: 700 }, children: [
738
- typeof rowNumber === "number" ? `${rowNumber + 1}. ` : "",
739
- title
740
- ] })
741
- ] });
742
- }
743
-
744
- // src/blocks/presets/index.ts
745
- var sectionPresets = [
746
- {
747
- id: "hero-conversion",
748
- title: "Hero + Conversion CTA",
749
- description: "Lead section with headline and primary conversion strip.",
750
- blocks: [
751
- {
752
- blockType: "hero",
753
- kicker: "Licensed + Insured",
754
- headline: "Expert Tree Care for Central Texas",
755
- subheadline: "Reliable trimming, safe removals, and stump grinding for residential and commercial properties.",
756
- primaryLabel: "Get Your Free Quote",
757
- primaryHref: "/contact",
758
- secondaryLabel: "See Our Work",
759
- secondaryHref: "/portfolio"
760
- },
761
- {
762
- blockType: "cta",
763
- headline: "Need a quote this week?",
764
- description: "Call (512) 555-0149 or request an on-site estimate online.",
765
- buttonLabel: "Contact Us",
766
- buttonHref: "/contact",
767
- style: "light"
768
- }
769
- ]
770
- },
771
- {
772
- id: "services-grid",
773
- title: "Services Grid",
774
- description: "Three-card services section for fast offer communication.",
775
- blocks: [
776
- {
777
- blockType: "featureGrid",
778
- title: "Our Services",
779
- variant: "cards",
780
- items: [
781
- {
782
- title: "Tree Trimming & Pruning",
783
- description: "Canopy balancing, deadwood removal, and seasonal pruning.",
784
- icon: "Trim"
785
- },
786
- {
787
- title: "Safe Tree Removal",
788
- description: "Controlled removal for hazardous or unstable trees.",
789
- icon: "Remove"
790
- },
791
- {
792
- title: "Stump Grinding",
793
- description: "Below-grade stump grinding and cleanup.",
794
- icon: "Stump"
795
- }
796
- ]
797
- }
798
- ]
799
- },
800
- {
801
- id: "social-proof",
802
- title: "Testimonials + FAQ",
803
- description: "Trust-building section with reviews and common questions.",
804
- blocks: [
805
- {
806
- blockType: "testimonials",
807
- title: "What Homeowners Say",
808
- items: [
809
- {
810
- quote: "Great communication, fair pricing, and the cleanup was perfect. We will use them again.",
811
- name: "Katie M.",
812
- location: "Austin, TX"
813
- },
814
- {
815
- quote: "They removed a dangerous limb over our driveway quickly and safely.",
816
- name: "James R.",
817
- location: "Round Rock, TX"
818
- }
819
- ]
820
- },
821
- {
822
- blockType: "faq",
823
- title: "Common Questions",
824
- items: [
825
- {
826
- question: "How quickly can you schedule service?",
827
- answer: "Most estimate requests are scheduled within 24 hours."
828
- },
829
- {
830
- question: "Do you provide cleanup?",
831
- answer: "Yes. Debris haul-off and cleanup are included in quoted scopes."
832
- }
833
- ]
834
- }
835
- ]
836
- },
837
- {
838
- id: "lead-capture",
839
- title: "Lead Capture",
840
- description: "Quote form and consultation CTA for conversion pages.",
841
- blocks: [
842
- {
843
- blockType: "formEmbed",
844
- title: "Request a Quote",
845
- description: "Share your project details and we will follow up quickly.",
846
- formType: "quote"
847
- },
848
- {
849
- blockType: "bookingEmbed",
850
- title: "Prefer to book a consultation?",
851
- description: "Choose a time window and we will confirm availability.",
852
- buttonLabel: "Book Consultation",
853
- buttonHref: "/contact"
854
- }
855
- ]
856
- }
857
- ];
858
- var templateStarterPresets = {
859
- contact: [
860
- {
861
- blockType: "hero",
862
- headline: "Contact Us",
863
- subheadline: "Request a quote, ask a question, or book a consultation window.",
864
- primaryLabel: "Call (512) 555-0149",
865
- primaryHref: "tel:+15125550149"
866
- },
867
- {
868
- blockType: "formEmbed",
869
- title: "Request a Quote",
870
- description: "Tell us about your project and we will follow up quickly.",
871
- formType: "quote"
872
- },
873
- {
874
- blockType: "faq",
875
- title: "Common Questions",
876
- items: [
877
- {
878
- question: "How quickly can you provide an estimate?",
879
- answer: "Most estimates are scheduled within 24 hours."
880
- }
881
- ]
882
- }
883
- ],
884
- landing: [
885
- {
886
- blockType: "hero",
887
- kicker: "Locally Owned",
888
- headline: "Expert Tree Care for Central Texas",
889
- subheadline: "Premium trimming, removal, and cleanup with safety-first execution.",
890
- primaryLabel: "Get Your Free Quote",
891
- primaryHref: "/contact",
892
- secondaryLabel: "View Services",
893
- secondaryHref: "/services"
894
- },
895
- {
896
- blockType: "featureGrid",
897
- title: "Why Homeowners Choose Us",
898
- variant: "highlight",
899
- items: [
900
- { title: "Transparent Pricing", description: "Clear written estimates.", icon: "01" },
901
- { title: "Safety-First Crew", description: "Property protection and planning.", icon: "02" },
902
- { title: "Fast Scheduling", description: "Quick estimates and service windows.", icon: "03" }
903
- ]
904
- },
905
- {
906
- blockType: "cta",
907
- headline: "Need a quote this week?",
908
- description: "Call (512) 555-0149 or request an estimate online.",
909
- buttonLabel: "Contact Us",
910
- buttonHref: "/contact",
911
- style: "light"
912
- }
913
- ],
914
- services: [
915
- {
916
- blockType: "hero",
917
- headline: "Tree Services Built for Safety and Curb Appeal",
918
- subheadline: "Core offerings first, with clear scopes and scheduling.",
919
- primaryLabel: "Schedule Estimate",
920
- primaryHref: "/contact"
921
- },
922
- {
923
- blockType: "featureGrid",
924
- title: "Core Services",
925
- variant: "cards",
926
- items: [
927
- {
928
- title: "Tree Trimming & Pruning",
929
- description: "Selective pruning for structure, clearance, and health.",
930
- icon: "Trim"
931
- },
932
- {
933
- title: "Tree Removal",
934
- description: "Controlled removal for unstable or hazardous trees.",
935
- icon: "Remove"
936
- },
937
- {
938
- title: "Stump Grinding",
939
- description: "Below-grade grinding and cleanup.",
940
- icon: "Stump"
941
- }
942
- ]
943
- },
944
- {
945
- blockType: "faq",
946
- title: "Frequently Asked Questions",
947
- items: [
948
- {
949
- question: "Do you handle storm cleanup?",
950
- answer: "Yes. We prioritize urgent hazards after severe weather."
951
- }
952
- ]
953
- }
954
- ],
955
- standard: [
956
- {
957
- blockType: "hero",
958
- headline: "Page Headline",
959
- subheadline: "Use this page to communicate your primary message clearly."
960
- },
961
- {
962
- blockType: "richText",
963
- title: "Section Heading",
964
- width: "normal",
965
- content: {
966
- root: {
967
- children: [
968
- {
969
- children: [{ detail: 0, format: 0, mode: "normal", style: "", text: "", type: "text", version: 1 }],
970
- direction: "ltr",
971
- format: "",
972
- indent: 0,
973
- type: "paragraph",
974
- version: 1
975
- }
976
- ],
977
- direction: "ltr",
978
- format: "",
979
- indent: 0,
980
- type: "root",
981
- version: 1
982
- }
983
- }
984
- },
985
- {
986
- blockType: "cta",
987
- headline: "Ready to take the next step?",
988
- buttonLabel: "Contact Us",
989
- buttonHref: "/contact",
990
- style: "light"
991
- }
992
- ]
993
- };
994
- function clonePresetBlocks(blocks) {
995
- return JSON.parse(JSON.stringify(blocks));
996
- }
997
-
998
- // src/blocks/index.ts
999
- var defaultPageLayoutBlocks = [
1000
- HeroBlock,
1001
- RichTextBlock,
1002
- FeatureGridBlock,
1003
- StatsBlock,
1004
- LogoWallBlock,
1005
- BeforeAfterBlock,
1006
- MediaBlock,
1007
- TestimonialsBlock,
1008
- FaqBlock,
1009
- FormEmbedBlock,
1010
- BookingEmbedBlock,
1011
- CtaBlock
1012
- ];
1013
-
1014
- export {
1015
- builderBlockLabelComponent,
1016
- BeforeAfterBlock,
1017
- BookingEmbedBlock,
1018
- CtaBlock,
1019
- FaqBlock,
1020
- FeatureGridBlock,
1021
- FormEmbedBlock,
1022
- HeroBlock,
1023
- LogoWallBlock,
1024
- MediaBlock,
1025
- RichTextBlock,
1026
- StatsBlock,
1027
- TestimonialsBlock,
1028
- BuilderBlockLabel,
1029
- sectionPresets,
1030
- templateStarterPresets,
1031
- clonePresetBlocks,
1032
- defaultPageLayoutBlocks,
1033
- blocks_exports
1034
- };