@roottale/cms-renderer-next 0.41.1 → 0.42.0

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 (60) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/before-after-client.d.ts +15 -0
  3. package/dist/before-after-client.js +8 -0
  4. package/dist/before-after-client.js.map +1 -0
  5. package/dist/chunk-4LQPZDXZ.js +75 -0
  6. package/dist/chunk-4LQPZDXZ.js.map +1 -0
  7. package/dist/chunk-6GQCFFHU.js +540 -0
  8. package/dist/chunk-6GQCFFHU.js.map +1 -0
  9. package/dist/chunk-F3G6RVIR.js +220 -0
  10. package/dist/chunk-F3G6RVIR.js.map +1 -0
  11. package/dist/chunk-H46JUIHZ.js +79 -0
  12. package/dist/chunk-H46JUIHZ.js.map +1 -0
  13. package/dist/chunk-K62RR4UQ.js +53 -0
  14. package/dist/chunk-K62RR4UQ.js.map +1 -0
  15. package/dist/chunk-NUUTTSGT.js +916 -0
  16. package/dist/chunk-NUUTTSGT.js.map +1 -0
  17. package/dist/chunk-RSNUZ4BF.js +3378 -0
  18. package/dist/chunk-RSNUZ4BF.js.map +1 -0
  19. package/dist/chunk-U5AKACPN.js +113 -0
  20. package/dist/chunk-U5AKACPN.js.map +1 -0
  21. package/dist/chunk-WWS43XCT.js +206 -0
  22. package/dist/chunk-WWS43XCT.js.map +1 -0
  23. package/dist/cms-public.css +164 -51
  24. package/dist/concerns-client.d.ts +12 -0
  25. package/dist/concerns-client.js +8 -0
  26. package/dist/concerns-client.js.map +1 -0
  27. package/dist/expertise-client.d.ts +10 -0
  28. package/dist/expertise-client.js +8 -0
  29. package/dist/expertise-client.js.map +1 -0
  30. package/dist/hero-carousel-client.d.ts +36 -0
  31. package/dist/hero-carousel-client.js +8 -0
  32. package/dist/hero-carousel-client.js.map +1 -0
  33. package/dist/routes.d.ts +51 -5
  34. package/dist/routes.js +109 -62
  35. package/dist/routes.js.map +1 -1
  36. package/dist/seo-checks.d.ts +87 -0
  37. package/dist/seo-checks.js +27 -0
  38. package/dist/seo-checks.js.map +1 -0
  39. package/dist/server.d.ts +51 -2
  40. package/dist/server.js +8 -2
  41. package/dist/site-config-DgYGGwu1.d.ts +3910 -0
  42. package/dist/spaces-client.d.ts +10 -0
  43. package/dist/spaces-client.js +8 -0
  44. package/dist/spaces-client.js.map +1 -0
  45. package/dist/templates.css +3246 -194
  46. package/dist/templates.d.ts +20 -1028
  47. package/dist/templates.js +70 -2
  48. package/dist/templates.js.map +1 -1
  49. package/dist/{theme-css-vars-BiyHBsJG.d.ts → theme-css-vars-CD3jcEkp.d.ts} +2 -2
  50. package/dist/ui-react-motion-client.d.ts +73 -0
  51. package/dist/ui-react-motion-client.js +14 -0
  52. package/dist/ui-react-motion-client.js.map +1 -0
  53. package/dist/validate.d.ts +15 -1
  54. package/dist/validate.js +806 -17
  55. package/dist/validate.js.map +1 -1
  56. package/package.json +18 -6
  57. package/dist/chunk-GOHP7RWD.js +0 -1647
  58. package/dist/chunk-GOHP7RWD.js.map +0 -1
  59. package/dist/chunk-IOYBEH6E.js +0 -271
  60. package/dist/chunk-IOYBEH6E.js.map +0 -1
@@ -0,0 +1,3910 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * `@roottale/cms-renderer-next/templates` — canonical `SiteConfig` 스키마.
5
+ *
6
+ * ADR-0040 P2 + P0.5 RFC §① (`roottale-docs/docs/services/external-site-blockification.md`).
7
+ *
8
+ * 설계 원칙 (codex consult #1 반영):
9
+ * - **계약 = `section type + variant + renderer registry`.** tier 는 스키마 필드가
10
+ * 아니라 문서/거버넌스용 성숙도 메타데이터.
11
+ * - **100% serializable** — 함수/JSX 금지 (Astro parity + admin preview 동일 경로).
12
+ * escape hatch 는 config 안 함수가 아니라 `customSections` registry
13
+ * (`SiteRenderer` 에 빌드 시 type→컴포넌트 주입).
14
+ * - CMS-bound 섹션(`blog-list`/`lead-form`)은 `RootTaleBlogList`/`RootTaleLeadForm`
15
+ * 으로 위임 — templates 는 cms-renderer 코어를 단방향 의존 (RFC §②).
16
+ *
17
+ * RFC §① 대비 구현 정정:
18
+ * - `site.url` 은 optional — 스타터/외부 사이트가 `SITE_URL` env 로 런타임 해석하는
19
+ * 기존 패턴(P4 스타터)과 충돌하므로 config 강제 대신 env fallback 허용.
20
+ * - 빌트인에 `rich-text` 추가 (P4 스타터 기 운영 섹션 — "동일 패턴" 군).
21
+ * allow: SIZE_OK — canonical SectionSchema registry이며 W1-2 계약이 이 파일 수정을 요구한다.
22
+ */
23
+
24
+ declare const NavItemSchema: z.ZodObject<{
25
+ label: z.ZodString;
26
+ href: z.ZodString;
27
+ children: z.ZodOptional<z.ZodArray<z.ZodObject<{
28
+ label: z.ZodString;
29
+ href: z.ZodString;
30
+ }, "strip", z.ZodTypeAny, {
31
+ href: string;
32
+ label: string;
33
+ }, {
34
+ href: string;
35
+ label: string;
36
+ }>, "many">>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ href: string;
39
+ label: string;
40
+ children?: {
41
+ href: string;
42
+ label: string;
43
+ }[] | undefined;
44
+ }, {
45
+ href: string;
46
+ label: string;
47
+ children?: {
48
+ href: string;
49
+ label: string;
50
+ }[] | undefined;
51
+ }>;
52
+ type NavItem = z.infer<typeof NavItemSchema>;
53
+ declare const CtaSchema: z.ZodObject<{
54
+ label: z.ZodString;
55
+ href: z.ZodString;
56
+ }, "strip", z.ZodTypeAny, {
57
+ href: string;
58
+ label: string;
59
+ }, {
60
+ href: string;
61
+ label: string;
62
+ }>;
63
+ type SectionCta = z.infer<typeof CtaSchema>;
64
+ declare const SECTION_VARIANTS: {
65
+ readonly hero: readonly ["split", "image", "minimal", "carousel", "overlay-panel"];
66
+ readonly services: readonly ["grid", "list", "index-rows", "split-featured", "action-rail", "photo-cards"];
67
+ readonly faq: readonly ["default", "two-column", "with-contact", "content-accordion"];
68
+ readonly "cta-banner": readonly ["default", "photo-overlay"];
69
+ readonly trust: readonly ["stat-band", "logo-cloud", "feature-grid", "logo-marquee", "credential-list", "dashboard"];
70
+ readonly contact: readonly ["form-map-5050", "split", "channel-cards", "visit-band"];
71
+ readonly hours: readonly ["table", "compact"];
72
+ readonly pricing: readonly ["table", "cards"];
73
+ readonly process: readonly ["horizontal", "vertical", "timeline-marked"];
74
+ readonly "before-after": readonly ["slider", "side-by-side"];
75
+ readonly testimonials: readonly ["editorial-quote", "quote-rail"];
76
+ readonly team: readonly ["grid", "spotlight", "expanding-stage", "row"];
77
+ readonly expertise: readonly ["tab-stage", "cards"];
78
+ readonly spaces: readonly ["stage", "mosaic"];
79
+ readonly concerns: readonly ["figure-map", "list"];
80
+ readonly footer: readonly ["columns", "minimal"];
81
+ };
82
+ declare const HeroSectionSchema: z.ZodEffects<z.ZodObject<{
83
+ id: z.ZodOptional<z.ZodString>;
84
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
85
+ } & {
86
+ type: z.ZodLiteral<"hero">;
87
+ variant: z.ZodDefault<z.ZodEnum<["split", "image", "minimal", "carousel", "overlay-panel"]>>;
88
+ props: z.ZodObject<{
89
+ eyebrow: z.ZodOptional<z.ZodString>;
90
+ /** `\n` 으로 줄바꿈. */
91
+ title: z.ZodString;
92
+ description: z.ZodOptional<z.ZodString>;
93
+ imageSrc: z.ZodOptional<z.ZodString>;
94
+ imageAlt: z.ZodOptional<z.ZodString>;
95
+ cta: z.ZodOptional<z.ZodObject<{
96
+ label: z.ZodString;
97
+ href: z.ZodString;
98
+ }, "strip", z.ZodTypeAny, {
99
+ href: string;
100
+ label: string;
101
+ }, {
102
+ href: string;
103
+ label: string;
104
+ }>>;
105
+ /** `carousel` 전용 — 고정 카피 아래 배경만 전환되는 슬라이드. 2-8개. */
106
+ slides: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
+ image: z.ZodString;
108
+ alt: z.ZodString;
109
+ caption: z.ZodOptional<z.ZodString>;
110
+ eyebrow: z.ZodOptional<z.ZodString>;
111
+ title: z.ZodOptional<z.ZodString>;
112
+ subtitle: z.ZodOptional<z.ZodString>;
113
+ description: z.ZodOptional<z.ZodString>;
114
+ primaryCta: z.ZodOptional<z.ZodObject<{
115
+ label: z.ZodString;
116
+ href: z.ZodString;
117
+ }, "strip", z.ZodTypeAny, {
118
+ href: string;
119
+ label: string;
120
+ }, {
121
+ href: string;
122
+ label: string;
123
+ }>>;
124
+ secondaryCta: z.ZodOptional<z.ZodObject<{
125
+ label: z.ZodString;
126
+ href: z.ZodString;
127
+ }, "strip", z.ZodTypeAny, {
128
+ href: string;
129
+ label: string;
130
+ }, {
131
+ href: string;
132
+ label: string;
133
+ }>>;
134
+ tabLabel: z.ZodOptional<z.ZodString>;
135
+ tabMeta: z.ZodOptional<z.ZodString>;
136
+ metrics: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
+ value: z.ZodString;
138
+ unit: z.ZodOptional<z.ZodString>;
139
+ label: z.ZodString;
140
+ source: z.ZodOptional<z.ZodString>;
141
+ imageSrc: z.ZodOptional<z.ZodString>;
142
+ imageAlt: z.ZodOptional<z.ZodString>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ value: string;
145
+ label: string;
146
+ unit?: string | undefined;
147
+ source?: string | undefined;
148
+ imageSrc?: string | undefined;
149
+ imageAlt?: string | undefined;
150
+ }, {
151
+ value: string;
152
+ label: string;
153
+ unit?: string | undefined;
154
+ source?: string | undefined;
155
+ imageSrc?: string | undefined;
156
+ imageAlt?: string | undefined;
157
+ }>, "many">>;
158
+ }, "strip", z.ZodTypeAny, {
159
+ image: string;
160
+ alt: string;
161
+ title?: string | undefined;
162
+ caption?: string | undefined;
163
+ description?: string | undefined;
164
+ eyebrow?: string | undefined;
165
+ subtitle?: string | undefined;
166
+ primaryCta?: {
167
+ href: string;
168
+ label: string;
169
+ } | undefined;
170
+ secondaryCta?: {
171
+ href: string;
172
+ label: string;
173
+ } | undefined;
174
+ tabLabel?: string | undefined;
175
+ tabMeta?: string | undefined;
176
+ metrics?: {
177
+ value: string;
178
+ label: string;
179
+ unit?: string | undefined;
180
+ source?: string | undefined;
181
+ imageSrc?: string | undefined;
182
+ imageAlt?: string | undefined;
183
+ }[] | undefined;
184
+ }, {
185
+ image: string;
186
+ alt: string;
187
+ title?: string | undefined;
188
+ caption?: string | undefined;
189
+ description?: string | undefined;
190
+ eyebrow?: string | undefined;
191
+ subtitle?: string | undefined;
192
+ primaryCta?: {
193
+ href: string;
194
+ label: string;
195
+ } | undefined;
196
+ secondaryCta?: {
197
+ href: string;
198
+ label: string;
199
+ } | undefined;
200
+ tabLabel?: string | undefined;
201
+ tabMeta?: string | undefined;
202
+ metrics?: {
203
+ value: string;
204
+ label: string;
205
+ unit?: string | undefined;
206
+ source?: string | undefined;
207
+ imageSrc?: string | undefined;
208
+ imageAlt?: string | undefined;
209
+ }[] | undefined;
210
+ }>, "many">>;
211
+ /** `carousel` 전용 — 부제(슬라이드와 무관한 고정 카피). */
212
+ subtitle: z.ZodOptional<z.ZodString>;
213
+ /** `carousel` 전용. 기본 true — `useReducedMotion` 시 렌더러가 강제 off. */
214
+ autoplay: z.ZodOptional<z.ZodBoolean>;
215
+ /** `carousel` 전용, ms. 기본 6000. */
216
+ intervalMs: z.ZodOptional<z.ZodNumber>;
217
+ proofMetrics: z.ZodOptional<z.ZodObject<{
218
+ items: z.ZodArray<z.ZodObject<{
219
+ value: z.ZodString;
220
+ unit: z.ZodOptional<z.ZodString>;
221
+ label: z.ZodString;
222
+ source: z.ZodOptional<z.ZodString>;
223
+ imageSrc: z.ZodOptional<z.ZodString>;
224
+ imageAlt: z.ZodOptional<z.ZodString>;
225
+ }, "strip", z.ZodTypeAny, {
226
+ value: string;
227
+ label: string;
228
+ unit?: string | undefined;
229
+ source?: string | undefined;
230
+ imageSrc?: string | undefined;
231
+ imageAlt?: string | undefined;
232
+ }, {
233
+ value: string;
234
+ label: string;
235
+ unit?: string | undefined;
236
+ source?: string | undefined;
237
+ imageSrc?: string | undefined;
238
+ imageAlt?: string | undefined;
239
+ }>, "many">;
240
+ position: z.ZodDefault<z.ZodEnum<["inline", "overlay"]>>;
241
+ }, "strip", z.ZodTypeAny, {
242
+ position: "overlay" | "inline";
243
+ items: {
244
+ value: string;
245
+ label: string;
246
+ unit?: string | undefined;
247
+ source?: string | undefined;
248
+ imageSrc?: string | undefined;
249
+ imageAlt?: string | undefined;
250
+ }[];
251
+ }, {
252
+ items: {
253
+ value: string;
254
+ label: string;
255
+ unit?: string | undefined;
256
+ source?: string | undefined;
257
+ imageSrc?: string | undefined;
258
+ imageAlt?: string | undefined;
259
+ }[];
260
+ position?: "overlay" | "inline" | undefined;
261
+ }>>;
262
+ scrim: z.ZodOptional<z.ZodEnum<["none", "soft", "strong"]>>;
263
+ }, "strip", z.ZodTypeAny, {
264
+ title: string;
265
+ description?: string | undefined;
266
+ imageSrc?: string | undefined;
267
+ imageAlt?: string | undefined;
268
+ eyebrow?: string | undefined;
269
+ subtitle?: string | undefined;
270
+ cta?: {
271
+ href: string;
272
+ label: string;
273
+ } | undefined;
274
+ slides?: {
275
+ image: string;
276
+ alt: string;
277
+ title?: string | undefined;
278
+ caption?: string | undefined;
279
+ description?: string | undefined;
280
+ eyebrow?: string | undefined;
281
+ subtitle?: string | undefined;
282
+ primaryCta?: {
283
+ href: string;
284
+ label: string;
285
+ } | undefined;
286
+ secondaryCta?: {
287
+ href: string;
288
+ label: string;
289
+ } | undefined;
290
+ tabLabel?: string | undefined;
291
+ tabMeta?: string | undefined;
292
+ metrics?: {
293
+ value: string;
294
+ label: string;
295
+ unit?: string | undefined;
296
+ source?: string | undefined;
297
+ imageSrc?: string | undefined;
298
+ imageAlt?: string | undefined;
299
+ }[] | undefined;
300
+ }[] | undefined;
301
+ autoplay?: boolean | undefined;
302
+ intervalMs?: number | undefined;
303
+ proofMetrics?: {
304
+ position: "overlay" | "inline";
305
+ items: {
306
+ value: string;
307
+ label: string;
308
+ unit?: string | undefined;
309
+ source?: string | undefined;
310
+ imageSrc?: string | undefined;
311
+ imageAlt?: string | undefined;
312
+ }[];
313
+ } | undefined;
314
+ scrim?: "none" | "strong" | "soft" | undefined;
315
+ }, {
316
+ title: string;
317
+ description?: string | undefined;
318
+ imageSrc?: string | undefined;
319
+ imageAlt?: string | undefined;
320
+ eyebrow?: string | undefined;
321
+ subtitle?: string | undefined;
322
+ cta?: {
323
+ href: string;
324
+ label: string;
325
+ } | undefined;
326
+ slides?: {
327
+ image: string;
328
+ alt: string;
329
+ title?: string | undefined;
330
+ caption?: string | undefined;
331
+ description?: string | undefined;
332
+ eyebrow?: string | undefined;
333
+ subtitle?: string | undefined;
334
+ primaryCta?: {
335
+ href: string;
336
+ label: string;
337
+ } | undefined;
338
+ secondaryCta?: {
339
+ href: string;
340
+ label: string;
341
+ } | undefined;
342
+ tabLabel?: string | undefined;
343
+ tabMeta?: string | undefined;
344
+ metrics?: {
345
+ value: string;
346
+ label: string;
347
+ unit?: string | undefined;
348
+ source?: string | undefined;
349
+ imageSrc?: string | undefined;
350
+ imageAlt?: string | undefined;
351
+ }[] | undefined;
352
+ }[] | undefined;
353
+ autoplay?: boolean | undefined;
354
+ intervalMs?: number | undefined;
355
+ proofMetrics?: {
356
+ items: {
357
+ value: string;
358
+ label: string;
359
+ unit?: string | undefined;
360
+ source?: string | undefined;
361
+ imageSrc?: string | undefined;
362
+ imageAlt?: string | undefined;
363
+ }[];
364
+ position?: "overlay" | "inline" | undefined;
365
+ } | undefined;
366
+ scrim?: "none" | "strong" | "soft" | undefined;
367
+ }>;
368
+ }, "strip", z.ZodTypeAny, {
369
+ type: "hero";
370
+ variant: "image" | "split" | "minimal" | "carousel" | "overlay-panel";
371
+ props: {
372
+ title: string;
373
+ description?: string | undefined;
374
+ imageSrc?: string | undefined;
375
+ imageAlt?: string | undefined;
376
+ eyebrow?: string | undefined;
377
+ subtitle?: string | undefined;
378
+ cta?: {
379
+ href: string;
380
+ label: string;
381
+ } | undefined;
382
+ slides?: {
383
+ image: string;
384
+ alt: string;
385
+ title?: string | undefined;
386
+ caption?: string | undefined;
387
+ description?: string | undefined;
388
+ eyebrow?: string | undefined;
389
+ subtitle?: string | undefined;
390
+ primaryCta?: {
391
+ href: string;
392
+ label: string;
393
+ } | undefined;
394
+ secondaryCta?: {
395
+ href: string;
396
+ label: string;
397
+ } | undefined;
398
+ tabLabel?: string | undefined;
399
+ tabMeta?: string | undefined;
400
+ metrics?: {
401
+ value: string;
402
+ label: string;
403
+ unit?: string | undefined;
404
+ source?: string | undefined;
405
+ imageSrc?: string | undefined;
406
+ imageAlt?: string | undefined;
407
+ }[] | undefined;
408
+ }[] | undefined;
409
+ autoplay?: boolean | undefined;
410
+ intervalMs?: number | undefined;
411
+ proofMetrics?: {
412
+ position: "overlay" | "inline";
413
+ items: {
414
+ value: string;
415
+ label: string;
416
+ unit?: string | undefined;
417
+ source?: string | undefined;
418
+ imageSrc?: string | undefined;
419
+ imageAlt?: string | undefined;
420
+ }[];
421
+ } | undefined;
422
+ scrim?: "none" | "strong" | "soft" | undefined;
423
+ };
424
+ theme?: Record<string, string> | undefined;
425
+ id?: string | undefined;
426
+ }, {
427
+ type: "hero";
428
+ props: {
429
+ title: string;
430
+ description?: string | undefined;
431
+ imageSrc?: string | undefined;
432
+ imageAlt?: string | undefined;
433
+ eyebrow?: string | undefined;
434
+ subtitle?: string | undefined;
435
+ cta?: {
436
+ href: string;
437
+ label: string;
438
+ } | undefined;
439
+ slides?: {
440
+ image: string;
441
+ alt: string;
442
+ title?: string | undefined;
443
+ caption?: string | undefined;
444
+ description?: string | undefined;
445
+ eyebrow?: string | undefined;
446
+ subtitle?: string | undefined;
447
+ primaryCta?: {
448
+ href: string;
449
+ label: string;
450
+ } | undefined;
451
+ secondaryCta?: {
452
+ href: string;
453
+ label: string;
454
+ } | undefined;
455
+ tabLabel?: string | undefined;
456
+ tabMeta?: string | undefined;
457
+ metrics?: {
458
+ value: string;
459
+ label: string;
460
+ unit?: string | undefined;
461
+ source?: string | undefined;
462
+ imageSrc?: string | undefined;
463
+ imageAlt?: string | undefined;
464
+ }[] | undefined;
465
+ }[] | undefined;
466
+ autoplay?: boolean | undefined;
467
+ intervalMs?: number | undefined;
468
+ proofMetrics?: {
469
+ items: {
470
+ value: string;
471
+ label: string;
472
+ unit?: string | undefined;
473
+ source?: string | undefined;
474
+ imageSrc?: string | undefined;
475
+ imageAlt?: string | undefined;
476
+ }[];
477
+ position?: "overlay" | "inline" | undefined;
478
+ } | undefined;
479
+ scrim?: "none" | "strong" | "soft" | undefined;
480
+ };
481
+ theme?: Record<string, string> | undefined;
482
+ id?: string | undefined;
483
+ variant?: "image" | "split" | "minimal" | "carousel" | "overlay-panel" | undefined;
484
+ }>, {
485
+ type: "hero";
486
+ variant: "image" | "split" | "minimal" | "carousel" | "overlay-panel";
487
+ props: {
488
+ title: string;
489
+ description?: string | undefined;
490
+ imageSrc?: string | undefined;
491
+ imageAlt?: string | undefined;
492
+ eyebrow?: string | undefined;
493
+ subtitle?: string | undefined;
494
+ cta?: {
495
+ href: string;
496
+ label: string;
497
+ } | undefined;
498
+ slides?: {
499
+ image: string;
500
+ alt: string;
501
+ title?: string | undefined;
502
+ caption?: string | undefined;
503
+ description?: string | undefined;
504
+ eyebrow?: string | undefined;
505
+ subtitle?: string | undefined;
506
+ primaryCta?: {
507
+ href: string;
508
+ label: string;
509
+ } | undefined;
510
+ secondaryCta?: {
511
+ href: string;
512
+ label: string;
513
+ } | undefined;
514
+ tabLabel?: string | undefined;
515
+ tabMeta?: string | undefined;
516
+ metrics?: {
517
+ value: string;
518
+ label: string;
519
+ unit?: string | undefined;
520
+ source?: string | undefined;
521
+ imageSrc?: string | undefined;
522
+ imageAlt?: string | undefined;
523
+ }[] | undefined;
524
+ }[] | undefined;
525
+ autoplay?: boolean | undefined;
526
+ intervalMs?: number | undefined;
527
+ proofMetrics?: {
528
+ position: "overlay" | "inline";
529
+ items: {
530
+ value: string;
531
+ label: string;
532
+ unit?: string | undefined;
533
+ source?: string | undefined;
534
+ imageSrc?: string | undefined;
535
+ imageAlt?: string | undefined;
536
+ }[];
537
+ } | undefined;
538
+ scrim?: "none" | "strong" | "soft" | undefined;
539
+ };
540
+ theme?: Record<string, string> | undefined;
541
+ id?: string | undefined;
542
+ }, {
543
+ type: "hero";
544
+ props: {
545
+ title: string;
546
+ description?: string | undefined;
547
+ imageSrc?: string | undefined;
548
+ imageAlt?: string | undefined;
549
+ eyebrow?: string | undefined;
550
+ subtitle?: string | undefined;
551
+ cta?: {
552
+ href: string;
553
+ label: string;
554
+ } | undefined;
555
+ slides?: {
556
+ image: string;
557
+ alt: string;
558
+ title?: string | undefined;
559
+ caption?: string | undefined;
560
+ description?: string | undefined;
561
+ eyebrow?: string | undefined;
562
+ subtitle?: string | undefined;
563
+ primaryCta?: {
564
+ href: string;
565
+ label: string;
566
+ } | undefined;
567
+ secondaryCta?: {
568
+ href: string;
569
+ label: string;
570
+ } | undefined;
571
+ tabLabel?: string | undefined;
572
+ tabMeta?: string | undefined;
573
+ metrics?: {
574
+ value: string;
575
+ label: string;
576
+ unit?: string | undefined;
577
+ source?: string | undefined;
578
+ imageSrc?: string | undefined;
579
+ imageAlt?: string | undefined;
580
+ }[] | undefined;
581
+ }[] | undefined;
582
+ autoplay?: boolean | undefined;
583
+ intervalMs?: number | undefined;
584
+ proofMetrics?: {
585
+ items: {
586
+ value: string;
587
+ label: string;
588
+ unit?: string | undefined;
589
+ source?: string | undefined;
590
+ imageSrc?: string | undefined;
591
+ imageAlt?: string | undefined;
592
+ }[];
593
+ position?: "overlay" | "inline" | undefined;
594
+ } | undefined;
595
+ scrim?: "none" | "strong" | "soft" | undefined;
596
+ };
597
+ theme?: Record<string, string> | undefined;
598
+ id?: string | undefined;
599
+ variant?: "image" | "split" | "minimal" | "carousel" | "overlay-panel" | undefined;
600
+ }>;
601
+ declare const RichTextSectionSchema: z.ZodObject<{
602
+ id: z.ZodOptional<z.ZodString>;
603
+ variant: z.ZodOptional<z.ZodString>;
604
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
605
+ } & {
606
+ type: z.ZodLiteral<"rich-text">;
607
+ props: z.ZodObject<{
608
+ heading: z.ZodOptional<z.ZodString>;
609
+ /** `\n\n` 으로 문단 분리. */
610
+ body: z.ZodString;
611
+ }, "strip", z.ZodTypeAny, {
612
+ body: string;
613
+ heading?: string | undefined;
614
+ }, {
615
+ body: string;
616
+ heading?: string | undefined;
617
+ }>;
618
+ }, "strip", z.ZodTypeAny, {
619
+ type: "rich-text";
620
+ props: {
621
+ body: string;
622
+ heading?: string | undefined;
623
+ };
624
+ theme?: Record<string, string> | undefined;
625
+ id?: string | undefined;
626
+ variant?: string | undefined;
627
+ }, {
628
+ type: "rich-text";
629
+ props: {
630
+ body: string;
631
+ heading?: string | undefined;
632
+ };
633
+ theme?: Record<string, string> | undefined;
634
+ id?: string | undefined;
635
+ variant?: string | undefined;
636
+ }>;
637
+ declare const ServicesSectionSchema: z.ZodEffects<z.ZodObject<{
638
+ id: z.ZodOptional<z.ZodString>;
639
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
640
+ } & {
641
+ type: z.ZodLiteral<"services">;
642
+ variant: z.ZodDefault<z.ZodEnum<["grid", "list", "index-rows", "split-featured", "action-rail", "photo-cards"]>>;
643
+ props: z.ZodObject<{
644
+ heading: z.ZodOptional<z.ZodString>;
645
+ description: z.ZodOptional<z.ZodString>;
646
+ items: z.ZodArray<z.ZodObject<{
647
+ title: z.ZodString;
648
+ subtitle: z.ZodOptional<z.ZodString>;
649
+ description: z.ZodOptional<z.ZodString>;
650
+ href: z.ZodOptional<z.ZodString>;
651
+ iconSrc: z.ZodOptional<z.ZodString>;
652
+ iconAlt: z.ZodOptional<z.ZodString>;
653
+ imageSrc: z.ZodOptional<z.ZodString>;
654
+ imageAlt: z.ZodOptional<z.ZodString>;
655
+ kind: z.ZodOptional<z.ZodString>;
656
+ ctaLabel: z.ZodOptional<z.ZodString>;
657
+ chips: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
658
+ meta: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
659
+ }, "strip", z.ZodTypeAny, {
660
+ title: string;
661
+ href?: string | undefined;
662
+ meta?: string[] | undefined;
663
+ description?: string | undefined;
664
+ imageSrc?: string | undefined;
665
+ imageAlt?: string | undefined;
666
+ subtitle?: string | undefined;
667
+ iconSrc?: string | undefined;
668
+ iconAlt?: string | undefined;
669
+ kind?: string | undefined;
670
+ ctaLabel?: string | undefined;
671
+ chips?: string[] | undefined;
672
+ }, {
673
+ title: string;
674
+ href?: string | undefined;
675
+ meta?: string[] | undefined;
676
+ description?: string | undefined;
677
+ imageSrc?: string | undefined;
678
+ imageAlt?: string | undefined;
679
+ subtitle?: string | undefined;
680
+ iconSrc?: string | undefined;
681
+ iconAlt?: string | undefined;
682
+ kind?: string | undefined;
683
+ ctaLabel?: string | undefined;
684
+ chips?: string[] | undefined;
685
+ }>, "many">;
686
+ }, "strip", z.ZodTypeAny, {
687
+ items: {
688
+ title: string;
689
+ href?: string | undefined;
690
+ meta?: string[] | undefined;
691
+ description?: string | undefined;
692
+ imageSrc?: string | undefined;
693
+ imageAlt?: string | undefined;
694
+ subtitle?: string | undefined;
695
+ iconSrc?: string | undefined;
696
+ iconAlt?: string | undefined;
697
+ kind?: string | undefined;
698
+ ctaLabel?: string | undefined;
699
+ chips?: string[] | undefined;
700
+ }[];
701
+ heading?: string | undefined;
702
+ description?: string | undefined;
703
+ }, {
704
+ items: {
705
+ title: string;
706
+ href?: string | undefined;
707
+ meta?: string[] | undefined;
708
+ description?: string | undefined;
709
+ imageSrc?: string | undefined;
710
+ imageAlt?: string | undefined;
711
+ subtitle?: string | undefined;
712
+ iconSrc?: string | undefined;
713
+ iconAlt?: string | undefined;
714
+ kind?: string | undefined;
715
+ ctaLabel?: string | undefined;
716
+ chips?: string[] | undefined;
717
+ }[];
718
+ heading?: string | undefined;
719
+ description?: string | undefined;
720
+ }>;
721
+ }, "strip", z.ZodTypeAny, {
722
+ type: "services";
723
+ variant: "grid" | "list" | "index-rows" | "split-featured" | "action-rail" | "photo-cards";
724
+ props: {
725
+ items: {
726
+ title: string;
727
+ href?: string | undefined;
728
+ meta?: string[] | undefined;
729
+ description?: string | undefined;
730
+ imageSrc?: string | undefined;
731
+ imageAlt?: string | undefined;
732
+ subtitle?: string | undefined;
733
+ iconSrc?: string | undefined;
734
+ iconAlt?: string | undefined;
735
+ kind?: string | undefined;
736
+ ctaLabel?: string | undefined;
737
+ chips?: string[] | undefined;
738
+ }[];
739
+ heading?: string | undefined;
740
+ description?: string | undefined;
741
+ };
742
+ theme?: Record<string, string> | undefined;
743
+ id?: string | undefined;
744
+ }, {
745
+ type: "services";
746
+ props: {
747
+ items: {
748
+ title: string;
749
+ href?: string | undefined;
750
+ meta?: string[] | undefined;
751
+ description?: string | undefined;
752
+ imageSrc?: string | undefined;
753
+ imageAlt?: string | undefined;
754
+ subtitle?: string | undefined;
755
+ iconSrc?: string | undefined;
756
+ iconAlt?: string | undefined;
757
+ kind?: string | undefined;
758
+ ctaLabel?: string | undefined;
759
+ chips?: string[] | undefined;
760
+ }[];
761
+ heading?: string | undefined;
762
+ description?: string | undefined;
763
+ };
764
+ theme?: Record<string, string> | undefined;
765
+ id?: string | undefined;
766
+ variant?: "grid" | "list" | "index-rows" | "split-featured" | "action-rail" | "photo-cards" | undefined;
767
+ }>, {
768
+ type: "services";
769
+ variant: "grid" | "list" | "index-rows" | "split-featured" | "action-rail" | "photo-cards";
770
+ props: {
771
+ items: {
772
+ title: string;
773
+ href?: string | undefined;
774
+ meta?: string[] | undefined;
775
+ description?: string | undefined;
776
+ imageSrc?: string | undefined;
777
+ imageAlt?: string | undefined;
778
+ subtitle?: string | undefined;
779
+ iconSrc?: string | undefined;
780
+ iconAlt?: string | undefined;
781
+ kind?: string | undefined;
782
+ ctaLabel?: string | undefined;
783
+ chips?: string[] | undefined;
784
+ }[];
785
+ heading?: string | undefined;
786
+ description?: string | undefined;
787
+ };
788
+ theme?: Record<string, string> | undefined;
789
+ id?: string | undefined;
790
+ }, {
791
+ type: "services";
792
+ props: {
793
+ items: {
794
+ title: string;
795
+ href?: string | undefined;
796
+ meta?: string[] | undefined;
797
+ description?: string | undefined;
798
+ imageSrc?: string | undefined;
799
+ imageAlt?: string | undefined;
800
+ subtitle?: string | undefined;
801
+ iconSrc?: string | undefined;
802
+ iconAlt?: string | undefined;
803
+ kind?: string | undefined;
804
+ ctaLabel?: string | undefined;
805
+ chips?: string[] | undefined;
806
+ }[];
807
+ heading?: string | undefined;
808
+ description?: string | undefined;
809
+ };
810
+ theme?: Record<string, string> | undefined;
811
+ id?: string | undefined;
812
+ variant?: "grid" | "list" | "index-rows" | "split-featured" | "action-rail" | "photo-cards" | undefined;
813
+ }>;
814
+ declare const FooterSectionSchema: z.ZodEffects<z.ZodObject<{
815
+ id: z.ZodOptional<z.ZodString>;
816
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
817
+ } & {
818
+ type: z.ZodLiteral<"footer">;
819
+ variant: z.ZodDefault<z.ZodEnum<["columns", "minimal"]>>;
820
+ props: z.ZodObject<{
821
+ businessName: z.ZodString;
822
+ logo: z.ZodOptional<z.ZodObject<{
823
+ src: z.ZodString;
824
+ alt: z.ZodString;
825
+ }, "strip", z.ZodTypeAny, {
826
+ src: string;
827
+ alt: string;
828
+ }, {
829
+ src: string;
830
+ alt: string;
831
+ }>>;
832
+ description: z.ZodOptional<z.ZodString>;
833
+ columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
834
+ title: z.ZodString;
835
+ links: z.ZodArray<z.ZodObject<{
836
+ label: z.ZodString;
837
+ href: z.ZodString;
838
+ }, "strip", z.ZodTypeAny, {
839
+ href: string;
840
+ label: string;
841
+ }, {
842
+ href: string;
843
+ label: string;
844
+ }>, "many">;
845
+ }, "strip", z.ZodTypeAny, {
846
+ title: string;
847
+ links: {
848
+ href: string;
849
+ label: string;
850
+ }[];
851
+ }, {
852
+ title: string;
853
+ links: {
854
+ href: string;
855
+ label: string;
856
+ }[];
857
+ }>, "many">>;
858
+ contactInfo: z.ZodOptional<z.ZodObject<{
859
+ address: z.ZodOptional<z.ZodString>;
860
+ phone: z.ZodOptional<z.ZodString>;
861
+ email: z.ZodOptional<z.ZodString>;
862
+ }, "strip", z.ZodTypeAny, {
863
+ email?: string | undefined;
864
+ phone?: string | undefined;
865
+ address?: string | undefined;
866
+ }, {
867
+ email?: string | undefined;
868
+ phone?: string | undefined;
869
+ address?: string | undefined;
870
+ }>>;
871
+ legalInfo: z.ZodOptional<z.ZodString>;
872
+ privacyHref: z.ZodOptional<z.ZodString>;
873
+ termsHref: z.ZodOptional<z.ZodString>;
874
+ socialLinks: z.ZodOptional<z.ZodArray<z.ZodObject<{
875
+ kind: z.ZodString;
876
+ href: z.ZodString;
877
+ }, "strip", z.ZodTypeAny, {
878
+ href: string;
879
+ kind: string;
880
+ }, {
881
+ href: string;
882
+ kind: string;
883
+ }>, "many">>;
884
+ copyright: z.ZodOptional<z.ZodString>;
885
+ /** 'hidden' 은 화이트라벨 plan gate 통과 시만 유효 (미지정 = 'default' 렌더). tenant 커스터마이즈 대상 아님 — 에디터 폼에 노출하지 않는다. */
886
+ credit: z.ZodOptional<z.ZodEnum<["default", "hidden"]>>;
887
+ }, "strip", z.ZodTypeAny, {
888
+ businessName: string;
889
+ columns?: {
890
+ title: string;
891
+ links: {
892
+ href: string;
893
+ label: string;
894
+ }[];
895
+ }[] | undefined;
896
+ description?: string | undefined;
897
+ logo?: {
898
+ src: string;
899
+ alt: string;
900
+ } | undefined;
901
+ contactInfo?: {
902
+ email?: string | undefined;
903
+ phone?: string | undefined;
904
+ address?: string | undefined;
905
+ } | undefined;
906
+ legalInfo?: string | undefined;
907
+ privacyHref?: string | undefined;
908
+ termsHref?: string | undefined;
909
+ socialLinks?: {
910
+ href: string;
911
+ kind: string;
912
+ }[] | undefined;
913
+ copyright?: string | undefined;
914
+ credit?: "hidden" | "default" | undefined;
915
+ }, {
916
+ businessName: string;
917
+ columns?: {
918
+ title: string;
919
+ links: {
920
+ href: string;
921
+ label: string;
922
+ }[];
923
+ }[] | undefined;
924
+ description?: string | undefined;
925
+ logo?: {
926
+ src: string;
927
+ alt: string;
928
+ } | undefined;
929
+ contactInfo?: {
930
+ email?: string | undefined;
931
+ phone?: string | undefined;
932
+ address?: string | undefined;
933
+ } | undefined;
934
+ legalInfo?: string | undefined;
935
+ privacyHref?: string | undefined;
936
+ termsHref?: string | undefined;
937
+ socialLinks?: {
938
+ href: string;
939
+ kind: string;
940
+ }[] | undefined;
941
+ copyright?: string | undefined;
942
+ credit?: "hidden" | "default" | undefined;
943
+ }>;
944
+ }, "strip", z.ZodTypeAny, {
945
+ type: "footer";
946
+ variant: "columns" | "minimal";
947
+ props: {
948
+ businessName: string;
949
+ columns?: {
950
+ title: string;
951
+ links: {
952
+ href: string;
953
+ label: string;
954
+ }[];
955
+ }[] | undefined;
956
+ description?: string | undefined;
957
+ logo?: {
958
+ src: string;
959
+ alt: string;
960
+ } | undefined;
961
+ contactInfo?: {
962
+ email?: string | undefined;
963
+ phone?: string | undefined;
964
+ address?: string | undefined;
965
+ } | undefined;
966
+ legalInfo?: string | undefined;
967
+ privacyHref?: string | undefined;
968
+ termsHref?: string | undefined;
969
+ socialLinks?: {
970
+ href: string;
971
+ kind: string;
972
+ }[] | undefined;
973
+ copyright?: string | undefined;
974
+ credit?: "hidden" | "default" | undefined;
975
+ };
976
+ theme?: Record<string, string> | undefined;
977
+ id?: string | undefined;
978
+ }, {
979
+ type: "footer";
980
+ props: {
981
+ businessName: string;
982
+ columns?: {
983
+ title: string;
984
+ links: {
985
+ href: string;
986
+ label: string;
987
+ }[];
988
+ }[] | undefined;
989
+ description?: string | undefined;
990
+ logo?: {
991
+ src: string;
992
+ alt: string;
993
+ } | undefined;
994
+ contactInfo?: {
995
+ email?: string | undefined;
996
+ phone?: string | undefined;
997
+ address?: string | undefined;
998
+ } | undefined;
999
+ legalInfo?: string | undefined;
1000
+ privacyHref?: string | undefined;
1001
+ termsHref?: string | undefined;
1002
+ socialLinks?: {
1003
+ href: string;
1004
+ kind: string;
1005
+ }[] | undefined;
1006
+ copyright?: string | undefined;
1007
+ credit?: "hidden" | "default" | undefined;
1008
+ };
1009
+ theme?: Record<string, string> | undefined;
1010
+ id?: string | undefined;
1011
+ variant?: "columns" | "minimal" | undefined;
1012
+ }>, {
1013
+ type: "footer";
1014
+ variant: "columns" | "minimal";
1015
+ props: {
1016
+ businessName: string;
1017
+ columns?: {
1018
+ title: string;
1019
+ links: {
1020
+ href: string;
1021
+ label: string;
1022
+ }[];
1023
+ }[] | undefined;
1024
+ description?: string | undefined;
1025
+ logo?: {
1026
+ src: string;
1027
+ alt: string;
1028
+ } | undefined;
1029
+ contactInfo?: {
1030
+ email?: string | undefined;
1031
+ phone?: string | undefined;
1032
+ address?: string | undefined;
1033
+ } | undefined;
1034
+ legalInfo?: string | undefined;
1035
+ privacyHref?: string | undefined;
1036
+ termsHref?: string | undefined;
1037
+ socialLinks?: {
1038
+ href: string;
1039
+ kind: string;
1040
+ }[] | undefined;
1041
+ copyright?: string | undefined;
1042
+ credit?: "hidden" | "default" | undefined;
1043
+ };
1044
+ theme?: Record<string, string> | undefined;
1045
+ id?: string | undefined;
1046
+ }, {
1047
+ type: "footer";
1048
+ props: {
1049
+ businessName: string;
1050
+ columns?: {
1051
+ title: string;
1052
+ links: {
1053
+ href: string;
1054
+ label: string;
1055
+ }[];
1056
+ }[] | undefined;
1057
+ description?: string | undefined;
1058
+ logo?: {
1059
+ src: string;
1060
+ alt: string;
1061
+ } | undefined;
1062
+ contactInfo?: {
1063
+ email?: string | undefined;
1064
+ phone?: string | undefined;
1065
+ address?: string | undefined;
1066
+ } | undefined;
1067
+ legalInfo?: string | undefined;
1068
+ privacyHref?: string | undefined;
1069
+ termsHref?: string | undefined;
1070
+ socialLinks?: {
1071
+ href: string;
1072
+ kind: string;
1073
+ }[] | undefined;
1074
+ copyright?: string | undefined;
1075
+ credit?: "hidden" | "default" | undefined;
1076
+ };
1077
+ theme?: Record<string, string> | undefined;
1078
+ id?: string | undefined;
1079
+ variant?: "columns" | "minimal" | undefined;
1080
+ }>;
1081
+ declare const FaqSectionSchema: z.ZodEffects<z.ZodObject<{
1082
+ id: z.ZodOptional<z.ZodString>;
1083
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1084
+ } & {
1085
+ type: z.ZodLiteral<"faq">;
1086
+ variant: z.ZodDefault<z.ZodEnum<["default", "two-column", "with-contact", "content-accordion"]>>;
1087
+ props: z.ZodObject<{
1088
+ heading: z.ZodOptional<z.ZodString>;
1089
+ items: z.ZodOptional<z.ZodArray<z.ZodObject<{
1090
+ question: z.ZodString;
1091
+ answer: z.ZodString;
1092
+ }, "strip", z.ZodTypeAny, {
1093
+ question: string;
1094
+ answer: string;
1095
+ }, {
1096
+ question: string;
1097
+ answer: string;
1098
+ }>, "many">>;
1099
+ /** `two-column` 전용 — 그룹 헤더 + 항목. 없으면 기존 flat items 를 사용한다. */
1100
+ groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
1101
+ title: z.ZodString;
1102
+ items: z.ZodArray<z.ZodObject<{
1103
+ question: z.ZodString;
1104
+ answer: z.ZodString;
1105
+ }, "strip", z.ZodTypeAny, {
1106
+ question: string;
1107
+ answer: string;
1108
+ }, {
1109
+ question: string;
1110
+ answer: string;
1111
+ }>, "many">;
1112
+ }, "strip", z.ZodTypeAny, {
1113
+ title: string;
1114
+ items: {
1115
+ question: string;
1116
+ answer: string;
1117
+ }[];
1118
+ }, {
1119
+ title: string;
1120
+ items: {
1121
+ question: string;
1122
+ answer: string;
1123
+ }[];
1124
+ }>, "many">>;
1125
+ /** `with-contact` 전용 — 우측 sticky 상담 유도 카드. */
1126
+ contact: z.ZodOptional<z.ZodObject<{
1127
+ title: z.ZodString;
1128
+ description: z.ZodOptional<z.ZodString>;
1129
+ phone: z.ZodOptional<z.ZodString>;
1130
+ cta: z.ZodOptional<z.ZodObject<{
1131
+ label: z.ZodString;
1132
+ href: z.ZodString;
1133
+ }, "strip", z.ZodTypeAny, {
1134
+ href: string;
1135
+ label: string;
1136
+ }, {
1137
+ href: string;
1138
+ label: string;
1139
+ }>>;
1140
+ }, "strip", z.ZodTypeAny, {
1141
+ title: string;
1142
+ description?: string | undefined;
1143
+ phone?: string | undefined;
1144
+ cta?: {
1145
+ href: string;
1146
+ label: string;
1147
+ } | undefined;
1148
+ }, {
1149
+ title: string;
1150
+ description?: string | undefined;
1151
+ phone?: string | undefined;
1152
+ cta?: {
1153
+ href: string;
1154
+ label: string;
1155
+ } | undefined;
1156
+ }>>;
1157
+ /** `content-accordion` 전용 — FAQPage가 아닌 질환/서비스 설명 accordion. */
1158
+ contentGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
1159
+ title: z.ZodString;
1160
+ items: z.ZodArray<z.ZodObject<{
1161
+ title: z.ZodString;
1162
+ summary: z.ZodOptional<z.ZodString>;
1163
+ body: z.ZodString;
1164
+ signs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1165
+ href: z.ZodOptional<z.ZodString>;
1166
+ }, "strip", z.ZodTypeAny, {
1167
+ title: string;
1168
+ body: string;
1169
+ href?: string | undefined;
1170
+ summary?: string | undefined;
1171
+ signs?: string[] | undefined;
1172
+ }, {
1173
+ title: string;
1174
+ body: string;
1175
+ href?: string | undefined;
1176
+ summary?: string | undefined;
1177
+ signs?: string[] | undefined;
1178
+ }>, "many">;
1179
+ }, "strip", z.ZodTypeAny, {
1180
+ title: string;
1181
+ items: {
1182
+ title: string;
1183
+ body: string;
1184
+ href?: string | undefined;
1185
+ summary?: string | undefined;
1186
+ signs?: string[] | undefined;
1187
+ }[];
1188
+ }, {
1189
+ title: string;
1190
+ items: {
1191
+ title: string;
1192
+ body: string;
1193
+ href?: string | undefined;
1194
+ summary?: string | undefined;
1195
+ signs?: string[] | undefined;
1196
+ }[];
1197
+ }>, "many">>;
1198
+ /** FAQPage JSON-LD 주입 (기본 true — SEO 3 pillars). 페이지에 FAQ 섹션이 여럿이면 하나만 true 로. */
1199
+ jsonLd: z.ZodDefault<z.ZodBoolean>;
1200
+ }, "strip", z.ZodTypeAny, {
1201
+ jsonLd: boolean;
1202
+ heading?: string | undefined;
1203
+ items?: {
1204
+ question: string;
1205
+ answer: string;
1206
+ }[] | undefined;
1207
+ groups?: {
1208
+ title: string;
1209
+ items: {
1210
+ question: string;
1211
+ answer: string;
1212
+ }[];
1213
+ }[] | undefined;
1214
+ contact?: {
1215
+ title: string;
1216
+ description?: string | undefined;
1217
+ phone?: string | undefined;
1218
+ cta?: {
1219
+ href: string;
1220
+ label: string;
1221
+ } | undefined;
1222
+ } | undefined;
1223
+ contentGroups?: {
1224
+ title: string;
1225
+ items: {
1226
+ title: string;
1227
+ body: string;
1228
+ href?: string | undefined;
1229
+ summary?: string | undefined;
1230
+ signs?: string[] | undefined;
1231
+ }[];
1232
+ }[] | undefined;
1233
+ }, {
1234
+ heading?: string | undefined;
1235
+ items?: {
1236
+ question: string;
1237
+ answer: string;
1238
+ }[] | undefined;
1239
+ groups?: {
1240
+ title: string;
1241
+ items: {
1242
+ question: string;
1243
+ answer: string;
1244
+ }[];
1245
+ }[] | undefined;
1246
+ contact?: {
1247
+ title: string;
1248
+ description?: string | undefined;
1249
+ phone?: string | undefined;
1250
+ cta?: {
1251
+ href: string;
1252
+ label: string;
1253
+ } | undefined;
1254
+ } | undefined;
1255
+ contentGroups?: {
1256
+ title: string;
1257
+ items: {
1258
+ title: string;
1259
+ body: string;
1260
+ href?: string | undefined;
1261
+ summary?: string | undefined;
1262
+ signs?: string[] | undefined;
1263
+ }[];
1264
+ }[] | undefined;
1265
+ jsonLd?: boolean | undefined;
1266
+ }>;
1267
+ }, "strip", z.ZodTypeAny, {
1268
+ type: "faq";
1269
+ variant: "default" | "two-column" | "with-contact" | "content-accordion";
1270
+ props: {
1271
+ jsonLd: boolean;
1272
+ heading?: string | undefined;
1273
+ items?: {
1274
+ question: string;
1275
+ answer: string;
1276
+ }[] | undefined;
1277
+ groups?: {
1278
+ title: string;
1279
+ items: {
1280
+ question: string;
1281
+ answer: string;
1282
+ }[];
1283
+ }[] | undefined;
1284
+ contact?: {
1285
+ title: string;
1286
+ description?: string | undefined;
1287
+ phone?: string | undefined;
1288
+ cta?: {
1289
+ href: string;
1290
+ label: string;
1291
+ } | undefined;
1292
+ } | undefined;
1293
+ contentGroups?: {
1294
+ title: string;
1295
+ items: {
1296
+ title: string;
1297
+ body: string;
1298
+ href?: string | undefined;
1299
+ summary?: string | undefined;
1300
+ signs?: string[] | undefined;
1301
+ }[];
1302
+ }[] | undefined;
1303
+ };
1304
+ theme?: Record<string, string> | undefined;
1305
+ id?: string | undefined;
1306
+ }, {
1307
+ type: "faq";
1308
+ props: {
1309
+ heading?: string | undefined;
1310
+ items?: {
1311
+ question: string;
1312
+ answer: string;
1313
+ }[] | undefined;
1314
+ groups?: {
1315
+ title: string;
1316
+ items: {
1317
+ question: string;
1318
+ answer: string;
1319
+ }[];
1320
+ }[] | undefined;
1321
+ contact?: {
1322
+ title: string;
1323
+ description?: string | undefined;
1324
+ phone?: string | undefined;
1325
+ cta?: {
1326
+ href: string;
1327
+ label: string;
1328
+ } | undefined;
1329
+ } | undefined;
1330
+ contentGroups?: {
1331
+ title: string;
1332
+ items: {
1333
+ title: string;
1334
+ body: string;
1335
+ href?: string | undefined;
1336
+ summary?: string | undefined;
1337
+ signs?: string[] | undefined;
1338
+ }[];
1339
+ }[] | undefined;
1340
+ jsonLd?: boolean | undefined;
1341
+ };
1342
+ theme?: Record<string, string> | undefined;
1343
+ id?: string | undefined;
1344
+ variant?: "default" | "two-column" | "with-contact" | "content-accordion" | undefined;
1345
+ }>, {
1346
+ type: "faq";
1347
+ variant: "default" | "two-column" | "with-contact" | "content-accordion";
1348
+ props: {
1349
+ jsonLd: boolean;
1350
+ heading?: string | undefined;
1351
+ items?: {
1352
+ question: string;
1353
+ answer: string;
1354
+ }[] | undefined;
1355
+ groups?: {
1356
+ title: string;
1357
+ items: {
1358
+ question: string;
1359
+ answer: string;
1360
+ }[];
1361
+ }[] | undefined;
1362
+ contact?: {
1363
+ title: string;
1364
+ description?: string | undefined;
1365
+ phone?: string | undefined;
1366
+ cta?: {
1367
+ href: string;
1368
+ label: string;
1369
+ } | undefined;
1370
+ } | undefined;
1371
+ contentGroups?: {
1372
+ title: string;
1373
+ items: {
1374
+ title: string;
1375
+ body: string;
1376
+ href?: string | undefined;
1377
+ summary?: string | undefined;
1378
+ signs?: string[] | undefined;
1379
+ }[];
1380
+ }[] | undefined;
1381
+ };
1382
+ theme?: Record<string, string> | undefined;
1383
+ id?: string | undefined;
1384
+ }, {
1385
+ type: "faq";
1386
+ props: {
1387
+ heading?: string | undefined;
1388
+ items?: {
1389
+ question: string;
1390
+ answer: string;
1391
+ }[] | undefined;
1392
+ groups?: {
1393
+ title: string;
1394
+ items: {
1395
+ question: string;
1396
+ answer: string;
1397
+ }[];
1398
+ }[] | undefined;
1399
+ contact?: {
1400
+ title: string;
1401
+ description?: string | undefined;
1402
+ phone?: string | undefined;
1403
+ cta?: {
1404
+ href: string;
1405
+ label: string;
1406
+ } | undefined;
1407
+ } | undefined;
1408
+ contentGroups?: {
1409
+ title: string;
1410
+ items: {
1411
+ title: string;
1412
+ body: string;
1413
+ href?: string | undefined;
1414
+ summary?: string | undefined;
1415
+ signs?: string[] | undefined;
1416
+ }[];
1417
+ }[] | undefined;
1418
+ jsonLd?: boolean | undefined;
1419
+ };
1420
+ theme?: Record<string, string> | undefined;
1421
+ id?: string | undefined;
1422
+ variant?: "default" | "two-column" | "with-contact" | "content-accordion" | undefined;
1423
+ }>;
1424
+ declare const CtaBannerSectionSchema: z.ZodEffects<z.ZodObject<{
1425
+ id: z.ZodOptional<z.ZodString>;
1426
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1427
+ } & {
1428
+ type: z.ZodLiteral<"cta-banner">;
1429
+ variant: z.ZodDefault<z.ZodEnum<["default", "photo-overlay"]>>;
1430
+ props: z.ZodObject<{
1431
+ title: z.ZodString;
1432
+ description: z.ZodOptional<z.ZodString>;
1433
+ cta: z.ZodOptional<z.ZodObject<{
1434
+ label: z.ZodString;
1435
+ href: z.ZodString;
1436
+ }, "strip", z.ZodTypeAny, {
1437
+ href: string;
1438
+ label: string;
1439
+ }, {
1440
+ href: string;
1441
+ label: string;
1442
+ }>>;
1443
+ /** `photo-overlay` 전용 — 필수(사진 없으면 렌더 거부). */
1444
+ image: z.ZodOptional<z.ZodString>;
1445
+ imageAlt: z.ZodOptional<z.ZodString>;
1446
+ }, "strip", z.ZodTypeAny, {
1447
+ title: string;
1448
+ image?: string | undefined;
1449
+ description?: string | undefined;
1450
+ imageAlt?: string | undefined;
1451
+ cta?: {
1452
+ href: string;
1453
+ label: string;
1454
+ } | undefined;
1455
+ }, {
1456
+ title: string;
1457
+ image?: string | undefined;
1458
+ description?: string | undefined;
1459
+ imageAlt?: string | undefined;
1460
+ cta?: {
1461
+ href: string;
1462
+ label: string;
1463
+ } | undefined;
1464
+ }>;
1465
+ }, "strip", z.ZodTypeAny, {
1466
+ type: "cta-banner";
1467
+ variant: "default" | "photo-overlay";
1468
+ props: {
1469
+ title: string;
1470
+ image?: string | undefined;
1471
+ description?: string | undefined;
1472
+ imageAlt?: string | undefined;
1473
+ cta?: {
1474
+ href: string;
1475
+ label: string;
1476
+ } | undefined;
1477
+ };
1478
+ theme?: Record<string, string> | undefined;
1479
+ id?: string | undefined;
1480
+ }, {
1481
+ type: "cta-banner";
1482
+ props: {
1483
+ title: string;
1484
+ image?: string | undefined;
1485
+ description?: string | undefined;
1486
+ imageAlt?: string | undefined;
1487
+ cta?: {
1488
+ href: string;
1489
+ label: string;
1490
+ } | undefined;
1491
+ };
1492
+ theme?: Record<string, string> | undefined;
1493
+ id?: string | undefined;
1494
+ variant?: "default" | "photo-overlay" | undefined;
1495
+ }>, {
1496
+ type: "cta-banner";
1497
+ variant: "default" | "photo-overlay";
1498
+ props: {
1499
+ title: string;
1500
+ image?: string | undefined;
1501
+ description?: string | undefined;
1502
+ imageAlt?: string | undefined;
1503
+ cta?: {
1504
+ href: string;
1505
+ label: string;
1506
+ } | undefined;
1507
+ };
1508
+ theme?: Record<string, string> | undefined;
1509
+ id?: string | undefined;
1510
+ }, {
1511
+ type: "cta-banner";
1512
+ props: {
1513
+ title: string;
1514
+ image?: string | undefined;
1515
+ description?: string | undefined;
1516
+ imageAlt?: string | undefined;
1517
+ cta?: {
1518
+ href: string;
1519
+ label: string;
1520
+ } | undefined;
1521
+ };
1522
+ theme?: Record<string, string> | undefined;
1523
+ id?: string | undefined;
1524
+ variant?: "default" | "photo-overlay" | undefined;
1525
+ }>;
1526
+ /** → `RootTaleBlogList` 위임 (cms-bound). */
1527
+ declare const BlogListSectionSchema: z.ZodObject<{
1528
+ id: z.ZodOptional<z.ZodString>;
1529
+ variant: z.ZodOptional<z.ZodString>;
1530
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1531
+ } & {
1532
+ type: z.ZodLiteral<"blog-list">;
1533
+ props: z.ZodObject<{
1534
+ heading: z.ZodOptional<z.ZodString>;
1535
+ limit: z.ZodOptional<z.ZodNumber>;
1536
+ /** 포스트 링크 베이스. 기본 `/blog`. */
1537
+ blogBasePath: z.ZodOptional<z.ZodString>;
1538
+ emptyMessage: z.ZodOptional<z.ZodString>;
1539
+ }, "strip", z.ZodTypeAny, {
1540
+ limit?: number | undefined;
1541
+ emptyMessage?: string | undefined;
1542
+ heading?: string | undefined;
1543
+ blogBasePath?: string | undefined;
1544
+ }, {
1545
+ limit?: number | undefined;
1546
+ emptyMessage?: string | undefined;
1547
+ heading?: string | undefined;
1548
+ blogBasePath?: string | undefined;
1549
+ }>;
1550
+ }, "strip", z.ZodTypeAny, {
1551
+ type: "blog-list";
1552
+ props: {
1553
+ limit?: number | undefined;
1554
+ emptyMessage?: string | undefined;
1555
+ heading?: string | undefined;
1556
+ blogBasePath?: string | undefined;
1557
+ };
1558
+ theme?: Record<string, string> | undefined;
1559
+ id?: string | undefined;
1560
+ variant?: string | undefined;
1561
+ }, {
1562
+ type: "blog-list";
1563
+ props: {
1564
+ limit?: number | undefined;
1565
+ emptyMessage?: string | undefined;
1566
+ heading?: string | undefined;
1567
+ blogBasePath?: string | undefined;
1568
+ };
1569
+ theme?: Record<string, string> | undefined;
1570
+ id?: string | undefined;
1571
+ variant?: string | undefined;
1572
+ }>;
1573
+ /** → `RootTaleLeadForm` 위임 (cms-bound). */
1574
+ declare const LeadFormSectionSchema: z.ZodObject<{
1575
+ id: z.ZodOptional<z.ZodString>;
1576
+ variant: z.ZodOptional<z.ZodString>;
1577
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1578
+ } & {
1579
+ type: z.ZodLiteral<"lead-form">;
1580
+ props: z.ZodObject<{
1581
+ /** 사이트 자체 server 엔드포인트 (예: `/api/inquiry`). intake API 직접 지정 금지. */
1582
+ action: z.ZodString;
1583
+ vertical: z.ZodOptional<z.ZodEnum<["consulting", "medical", "tax", "legal"]>>;
1584
+ heading: z.ZodOptional<z.ZodString>;
1585
+ description: z.ZodOptional<z.ZodString>;
1586
+ submitLabel: z.ZodOptional<z.ZodString>;
1587
+ }, "strip", z.ZodTypeAny, {
1588
+ action: string;
1589
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
1590
+ heading?: string | undefined;
1591
+ description?: string | undefined;
1592
+ submitLabel?: string | undefined;
1593
+ }, {
1594
+ action: string;
1595
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
1596
+ heading?: string | undefined;
1597
+ description?: string | undefined;
1598
+ submitLabel?: string | undefined;
1599
+ }>;
1600
+ }, "strip", z.ZodTypeAny, {
1601
+ type: "lead-form";
1602
+ props: {
1603
+ action: string;
1604
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
1605
+ heading?: string | undefined;
1606
+ description?: string | undefined;
1607
+ submitLabel?: string | undefined;
1608
+ };
1609
+ theme?: Record<string, string> | undefined;
1610
+ id?: string | undefined;
1611
+ variant?: string | undefined;
1612
+ }, {
1613
+ type: "lead-form";
1614
+ props: {
1615
+ action: string;
1616
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
1617
+ heading?: string | undefined;
1618
+ description?: string | undefined;
1619
+ submitLabel?: string | undefined;
1620
+ };
1621
+ theme?: Record<string, string> | undefined;
1622
+ id?: string | undefined;
1623
+ variant?: string | undefined;
1624
+ }>;
1625
+ declare const TrustSectionSchema: z.ZodEffects<z.ZodObject<{
1626
+ id: z.ZodOptional<z.ZodString>;
1627
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
1628
+ } & {
1629
+ type: z.ZodLiteral<"trust">;
1630
+ variant: z.ZodDefault<z.ZodEnum<["stat-band", "logo-cloud", "feature-grid", "logo-marquee", "credential-list", "dashboard"]>>;
1631
+ props: z.ZodObject<{
1632
+ heading: z.ZodOptional<z.ZodString>;
1633
+ metrics: z.ZodOptional<z.ZodArray<z.ZodObject<{
1634
+ value: z.ZodString;
1635
+ unit: z.ZodOptional<z.ZodString>;
1636
+ label: z.ZodString;
1637
+ source: z.ZodOptional<z.ZodString>;
1638
+ imageSrc: z.ZodOptional<z.ZodString>;
1639
+ imageAlt: z.ZodOptional<z.ZodString>;
1640
+ }, "strip", z.ZodTypeAny, {
1641
+ value: string;
1642
+ label: string;
1643
+ unit?: string | undefined;
1644
+ source?: string | undefined;
1645
+ imageSrc?: string | undefined;
1646
+ imageAlt?: string | undefined;
1647
+ }, {
1648
+ value: string;
1649
+ label: string;
1650
+ unit?: string | undefined;
1651
+ source?: string | undefined;
1652
+ imageSrc?: string | undefined;
1653
+ imageAlt?: string | undefined;
1654
+ }>, "many">>;
1655
+ credentials: z.ZodOptional<z.ZodArray<z.ZodObject<{
1656
+ name: z.ZodString;
1657
+ issuer: z.ZodOptional<z.ZodString>;
1658
+ kind: z.ZodOptional<z.ZodEnum<["license", "education", "association"]>>;
1659
+ image: z.ZodOptional<z.ZodString>;
1660
+ /** `credential-list` 전용 — hairline 행의 tabular 연도. */
1661
+ year: z.ZodOptional<z.ZodString>;
1662
+ }, "strip", z.ZodTypeAny, {
1663
+ name: string;
1664
+ year?: string | undefined;
1665
+ image?: string | undefined;
1666
+ kind?: "license" | "education" | "association" | undefined;
1667
+ issuer?: string | undefined;
1668
+ }, {
1669
+ name: string;
1670
+ year?: string | undefined;
1671
+ image?: string | undefined;
1672
+ kind?: "license" | "education" | "association" | undefined;
1673
+ issuer?: string | undefined;
1674
+ }>, "many">>;
1675
+ logos: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodObject<{
1676
+ src: z.ZodString;
1677
+ alt: z.ZodString;
1678
+ href: z.ZodOptional<z.ZodString>;
1679
+ }, "strip", z.ZodTypeAny, {
1680
+ src: string;
1681
+ alt: string;
1682
+ href?: string | undefined;
1683
+ }, {
1684
+ src: string;
1685
+ alt: string;
1686
+ href?: string | undefined;
1687
+ }>, z.ZodEffects<z.ZodObject<{
1688
+ image: z.ZodString;
1689
+ alt: z.ZodString;
1690
+ href: z.ZodOptional<z.ZodString>;
1691
+ }, "strip", z.ZodTypeAny, {
1692
+ image: string;
1693
+ alt: string;
1694
+ href?: string | undefined;
1695
+ }, {
1696
+ image: string;
1697
+ alt: string;
1698
+ href?: string | undefined;
1699
+ }>, {
1700
+ href?: string | undefined;
1701
+ src: string;
1702
+ alt: string;
1703
+ }, {
1704
+ image: string;
1705
+ alt: string;
1706
+ href?: string | undefined;
1707
+ }>]>, "many">>;
1708
+ /** `logo-marquee` 전용 — logo-cloud 와 동일한 `{src, alt, href?}` 슬롯. 최소 3개. */
1709
+ marqueeLogos: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodObject<{
1710
+ src: z.ZodString;
1711
+ alt: z.ZodString;
1712
+ href: z.ZodOptional<z.ZodString>;
1713
+ }, "strip", z.ZodTypeAny, {
1714
+ src: string;
1715
+ alt: string;
1716
+ href?: string | undefined;
1717
+ }, {
1718
+ src: string;
1719
+ alt: string;
1720
+ href?: string | undefined;
1721
+ }>, z.ZodEffects<z.ZodObject<{
1722
+ image: z.ZodString;
1723
+ alt: z.ZodString;
1724
+ href: z.ZodOptional<z.ZodString>;
1725
+ }, "strip", z.ZodTypeAny, {
1726
+ image: string;
1727
+ alt: string;
1728
+ href?: string | undefined;
1729
+ }, {
1730
+ image: string;
1731
+ alt: string;
1732
+ href?: string | undefined;
1733
+ }>, {
1734
+ href?: string | undefined;
1735
+ src: string;
1736
+ alt: string;
1737
+ }, {
1738
+ image: string;
1739
+ alt: string;
1740
+ href?: string | undefined;
1741
+ }>]>, "many">>;
1742
+ chart: z.ZodOptional<z.ZodObject<{
1743
+ type: z.ZodDefault<z.ZodEnum<["bar", "line"]>>;
1744
+ title: z.ZodString;
1745
+ description: z.ZodOptional<z.ZodString>;
1746
+ points: z.ZodArray<z.ZodObject<{
1747
+ label: z.ZodString;
1748
+ value: z.ZodNumber;
1749
+ display: z.ZodOptional<z.ZodString>;
1750
+ }, "strip", z.ZodTypeAny, {
1751
+ value: number;
1752
+ label: string;
1753
+ display?: string | undefined;
1754
+ }, {
1755
+ value: number;
1756
+ label: string;
1757
+ display?: string | undefined;
1758
+ }>, "many">;
1759
+ }, "strip", z.ZodTypeAny, {
1760
+ type: "bar" | "line";
1761
+ title: string;
1762
+ points: {
1763
+ value: number;
1764
+ label: string;
1765
+ display?: string | undefined;
1766
+ }[];
1767
+ description?: string | undefined;
1768
+ }, {
1769
+ title: string;
1770
+ points: {
1771
+ value: number;
1772
+ label: string;
1773
+ display?: string | undefined;
1774
+ }[];
1775
+ type?: "bar" | "line" | undefined;
1776
+ description?: string | undefined;
1777
+ }>>;
1778
+ disclaimer: z.ZodOptional<z.ZodString>;
1779
+ }, "strip", z.ZodTypeAny, {
1780
+ heading?: string | undefined;
1781
+ metrics?: {
1782
+ value: string;
1783
+ label: string;
1784
+ unit?: string | undefined;
1785
+ source?: string | undefined;
1786
+ imageSrc?: string | undefined;
1787
+ imageAlt?: string | undefined;
1788
+ }[] | undefined;
1789
+ credentials?: {
1790
+ name: string;
1791
+ year?: string | undefined;
1792
+ image?: string | undefined;
1793
+ kind?: "license" | "education" | "association" | undefined;
1794
+ issuer?: string | undefined;
1795
+ }[] | undefined;
1796
+ logos?: ({
1797
+ src: string;
1798
+ alt: string;
1799
+ href?: string | undefined;
1800
+ } | {
1801
+ href?: string | undefined;
1802
+ src: string;
1803
+ alt: string;
1804
+ })[] | undefined;
1805
+ marqueeLogos?: ({
1806
+ src: string;
1807
+ alt: string;
1808
+ href?: string | undefined;
1809
+ } | {
1810
+ href?: string | undefined;
1811
+ src: string;
1812
+ alt: string;
1813
+ })[] | undefined;
1814
+ chart?: {
1815
+ type: "bar" | "line";
1816
+ title: string;
1817
+ points: {
1818
+ value: number;
1819
+ label: string;
1820
+ display?: string | undefined;
1821
+ }[];
1822
+ description?: string | undefined;
1823
+ } | undefined;
1824
+ disclaimer?: string | undefined;
1825
+ }, {
1826
+ heading?: string | undefined;
1827
+ metrics?: {
1828
+ value: string;
1829
+ label: string;
1830
+ unit?: string | undefined;
1831
+ source?: string | undefined;
1832
+ imageSrc?: string | undefined;
1833
+ imageAlt?: string | undefined;
1834
+ }[] | undefined;
1835
+ credentials?: {
1836
+ name: string;
1837
+ year?: string | undefined;
1838
+ image?: string | undefined;
1839
+ kind?: "license" | "education" | "association" | undefined;
1840
+ issuer?: string | undefined;
1841
+ }[] | undefined;
1842
+ logos?: ({
1843
+ src: string;
1844
+ alt: string;
1845
+ href?: string | undefined;
1846
+ } | {
1847
+ image: string;
1848
+ alt: string;
1849
+ href?: string | undefined;
1850
+ })[] | undefined;
1851
+ marqueeLogos?: ({
1852
+ src: string;
1853
+ alt: string;
1854
+ href?: string | undefined;
1855
+ } | {
1856
+ image: string;
1857
+ alt: string;
1858
+ href?: string | undefined;
1859
+ })[] | undefined;
1860
+ chart?: {
1861
+ title: string;
1862
+ points: {
1863
+ value: number;
1864
+ label: string;
1865
+ display?: string | undefined;
1866
+ }[];
1867
+ type?: "bar" | "line" | undefined;
1868
+ description?: string | undefined;
1869
+ } | undefined;
1870
+ disclaimer?: string | undefined;
1871
+ }>;
1872
+ }, "strip", z.ZodTypeAny, {
1873
+ type: "trust";
1874
+ variant: "stat-band" | "logo-cloud" | "feature-grid" | "logo-marquee" | "credential-list" | "dashboard";
1875
+ props: {
1876
+ heading?: string | undefined;
1877
+ metrics?: {
1878
+ value: string;
1879
+ label: string;
1880
+ unit?: string | undefined;
1881
+ source?: string | undefined;
1882
+ imageSrc?: string | undefined;
1883
+ imageAlt?: string | undefined;
1884
+ }[] | undefined;
1885
+ credentials?: {
1886
+ name: string;
1887
+ year?: string | undefined;
1888
+ image?: string | undefined;
1889
+ kind?: "license" | "education" | "association" | undefined;
1890
+ issuer?: string | undefined;
1891
+ }[] | undefined;
1892
+ logos?: ({
1893
+ src: string;
1894
+ alt: string;
1895
+ href?: string | undefined;
1896
+ } | {
1897
+ href?: string | undefined;
1898
+ src: string;
1899
+ alt: string;
1900
+ })[] | undefined;
1901
+ marqueeLogos?: ({
1902
+ src: string;
1903
+ alt: string;
1904
+ href?: string | undefined;
1905
+ } | {
1906
+ href?: string | undefined;
1907
+ src: string;
1908
+ alt: string;
1909
+ })[] | undefined;
1910
+ chart?: {
1911
+ type: "bar" | "line";
1912
+ title: string;
1913
+ points: {
1914
+ value: number;
1915
+ label: string;
1916
+ display?: string | undefined;
1917
+ }[];
1918
+ description?: string | undefined;
1919
+ } | undefined;
1920
+ disclaimer?: string | undefined;
1921
+ };
1922
+ theme?: Record<string, string> | undefined;
1923
+ id?: string | undefined;
1924
+ }, {
1925
+ type: "trust";
1926
+ props: {
1927
+ heading?: string | undefined;
1928
+ metrics?: {
1929
+ value: string;
1930
+ label: string;
1931
+ unit?: string | undefined;
1932
+ source?: string | undefined;
1933
+ imageSrc?: string | undefined;
1934
+ imageAlt?: string | undefined;
1935
+ }[] | undefined;
1936
+ credentials?: {
1937
+ name: string;
1938
+ year?: string | undefined;
1939
+ image?: string | undefined;
1940
+ kind?: "license" | "education" | "association" | undefined;
1941
+ issuer?: string | undefined;
1942
+ }[] | undefined;
1943
+ logos?: ({
1944
+ src: string;
1945
+ alt: string;
1946
+ href?: string | undefined;
1947
+ } | {
1948
+ image: string;
1949
+ alt: string;
1950
+ href?: string | undefined;
1951
+ })[] | undefined;
1952
+ marqueeLogos?: ({
1953
+ src: string;
1954
+ alt: string;
1955
+ href?: string | undefined;
1956
+ } | {
1957
+ image: string;
1958
+ alt: string;
1959
+ href?: string | undefined;
1960
+ })[] | undefined;
1961
+ chart?: {
1962
+ title: string;
1963
+ points: {
1964
+ value: number;
1965
+ label: string;
1966
+ display?: string | undefined;
1967
+ }[];
1968
+ type?: "bar" | "line" | undefined;
1969
+ description?: string | undefined;
1970
+ } | undefined;
1971
+ disclaimer?: string | undefined;
1972
+ };
1973
+ theme?: Record<string, string> | undefined;
1974
+ id?: string | undefined;
1975
+ variant?: "stat-band" | "logo-cloud" | "feature-grid" | "logo-marquee" | "credential-list" | "dashboard" | undefined;
1976
+ }>, {
1977
+ type: "trust";
1978
+ variant: "stat-band" | "logo-cloud" | "feature-grid" | "logo-marquee" | "credential-list" | "dashboard";
1979
+ props: {
1980
+ heading?: string | undefined;
1981
+ metrics?: {
1982
+ value: string;
1983
+ label: string;
1984
+ unit?: string | undefined;
1985
+ source?: string | undefined;
1986
+ imageSrc?: string | undefined;
1987
+ imageAlt?: string | undefined;
1988
+ }[] | undefined;
1989
+ credentials?: {
1990
+ name: string;
1991
+ year?: string | undefined;
1992
+ image?: string | undefined;
1993
+ kind?: "license" | "education" | "association" | undefined;
1994
+ issuer?: string | undefined;
1995
+ }[] | undefined;
1996
+ logos?: ({
1997
+ src: string;
1998
+ alt: string;
1999
+ href?: string | undefined;
2000
+ } | {
2001
+ href?: string | undefined;
2002
+ src: string;
2003
+ alt: string;
2004
+ })[] | undefined;
2005
+ marqueeLogos?: ({
2006
+ src: string;
2007
+ alt: string;
2008
+ href?: string | undefined;
2009
+ } | {
2010
+ href?: string | undefined;
2011
+ src: string;
2012
+ alt: string;
2013
+ })[] | undefined;
2014
+ chart?: {
2015
+ type: "bar" | "line";
2016
+ title: string;
2017
+ points: {
2018
+ value: number;
2019
+ label: string;
2020
+ display?: string | undefined;
2021
+ }[];
2022
+ description?: string | undefined;
2023
+ } | undefined;
2024
+ disclaimer?: string | undefined;
2025
+ };
2026
+ theme?: Record<string, string> | undefined;
2027
+ id?: string | undefined;
2028
+ }, {
2029
+ type: "trust";
2030
+ props: {
2031
+ heading?: string | undefined;
2032
+ metrics?: {
2033
+ value: string;
2034
+ label: string;
2035
+ unit?: string | undefined;
2036
+ source?: string | undefined;
2037
+ imageSrc?: string | undefined;
2038
+ imageAlt?: string | undefined;
2039
+ }[] | undefined;
2040
+ credentials?: {
2041
+ name: string;
2042
+ year?: string | undefined;
2043
+ image?: string | undefined;
2044
+ kind?: "license" | "education" | "association" | undefined;
2045
+ issuer?: string | undefined;
2046
+ }[] | undefined;
2047
+ logos?: ({
2048
+ src: string;
2049
+ alt: string;
2050
+ href?: string | undefined;
2051
+ } | {
2052
+ image: string;
2053
+ alt: string;
2054
+ href?: string | undefined;
2055
+ })[] | undefined;
2056
+ marqueeLogos?: ({
2057
+ src: string;
2058
+ alt: string;
2059
+ href?: string | undefined;
2060
+ } | {
2061
+ image: string;
2062
+ alt: string;
2063
+ href?: string | undefined;
2064
+ })[] | undefined;
2065
+ chart?: {
2066
+ title: string;
2067
+ points: {
2068
+ value: number;
2069
+ label: string;
2070
+ display?: string | undefined;
2071
+ }[];
2072
+ type?: "bar" | "line" | undefined;
2073
+ description?: string | undefined;
2074
+ } | undefined;
2075
+ disclaimer?: string | undefined;
2076
+ };
2077
+ theme?: Record<string, string> | undefined;
2078
+ id?: string | undefined;
2079
+ variant?: "stat-band" | "logo-cloud" | "feature-grid" | "logo-marquee" | "credential-list" | "dashboard" | undefined;
2080
+ }>;
2081
+ declare const ContactSectionSchema: z.ZodEffects<z.ZodObject<{
2082
+ id: z.ZodOptional<z.ZodString>;
2083
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2084
+ } & {
2085
+ type: z.ZodLiteral<"contact">;
2086
+ variant: z.ZodDefault<z.ZodEnum<["form-map-5050", "split", "channel-cards", "visit-band"]>>;
2087
+ props: z.ZodObject<{
2088
+ heading: z.ZodOptional<z.ZodString>;
2089
+ form: z.ZodObject<{
2090
+ enabled: z.ZodBoolean;
2091
+ vertical: z.ZodOptional<z.ZodEnum<["medical", "tax", "legal", "consulting"]>>;
2092
+ }, "strip", z.ZodTypeAny, {
2093
+ enabled: boolean;
2094
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2095
+ }, {
2096
+ enabled: boolean;
2097
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2098
+ }>;
2099
+ phone: z.ZodOptional<z.ZodString>;
2100
+ address: z.ZodOptional<z.ZodString>;
2101
+ hours: z.ZodOptional<z.ZodArray<z.ZodObject<{
2102
+ day: z.ZodString;
2103
+ open: z.ZodString;
2104
+ close: z.ZodString;
2105
+ note: z.ZodOptional<z.ZodString>;
2106
+ }, "strip", z.ZodTypeAny, {
2107
+ open: string;
2108
+ day: string;
2109
+ close: string;
2110
+ note?: string | undefined;
2111
+ }, {
2112
+ open: string;
2113
+ day: string;
2114
+ close: string;
2115
+ note?: string | undefined;
2116
+ }>, "many">>;
2117
+ mapEmbedUrl: z.ZodOptional<z.ZodString>;
2118
+ map: z.ZodOptional<z.ZodObject<{
2119
+ facadeImageSrc: z.ZodOptional<z.ZodString>;
2120
+ facadeImageAlt: z.ZodOptional<z.ZodString>;
2121
+ provider: z.ZodOptional<z.ZodString>;
2122
+ embedUrl: z.ZodOptional<z.ZodString>;
2123
+ externalUrl: z.ZodOptional<z.ZodString>;
2124
+ lat: z.ZodOptional<z.ZodNumber>;
2125
+ lng: z.ZodOptional<z.ZodNumber>;
2126
+ }, "strip", z.ZodTypeAny, {
2127
+ provider?: string | undefined;
2128
+ facadeImageSrc?: string | undefined;
2129
+ facadeImageAlt?: string | undefined;
2130
+ embedUrl?: string | undefined;
2131
+ externalUrl?: string | undefined;
2132
+ lat?: number | undefined;
2133
+ lng?: number | undefined;
2134
+ }, {
2135
+ provider?: string | undefined;
2136
+ facadeImageSrc?: string | undefined;
2137
+ facadeImageAlt?: string | undefined;
2138
+ embedUrl?: string | undefined;
2139
+ externalUrl?: string | undefined;
2140
+ lat?: number | undefined;
2141
+ lng?: number | undefined;
2142
+ }>>;
2143
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
2144
+ label: z.ZodString;
2145
+ href: z.ZodString;
2146
+ kind: z.ZodOptional<z.ZodString>;
2147
+ }, "strip", z.ZodTypeAny, {
2148
+ href: string;
2149
+ label: string;
2150
+ kind?: string | undefined;
2151
+ }, {
2152
+ href: string;
2153
+ label: string;
2154
+ kind?: string | undefined;
2155
+ }>, "many">>;
2156
+ /** `channel-cards` 전용 — 카드당 하나의 행동. */
2157
+ channels: z.ZodOptional<z.ZodArray<z.ZodObject<{
2158
+ label: z.ZodString;
2159
+ description: z.ZodOptional<z.ZodString>;
2160
+ value: z.ZodOptional<z.ZodString>;
2161
+ href: z.ZodOptional<z.ZodString>;
2162
+ actionLabel: z.ZodOptional<z.ZodString>;
2163
+ iconSrc: z.ZodOptional<z.ZodString>;
2164
+ iconAlt: z.ZodOptional<z.ZodString>;
2165
+ kind: z.ZodOptional<z.ZodString>;
2166
+ }, "strip", z.ZodTypeAny, {
2167
+ label: string;
2168
+ href?: string | undefined;
2169
+ value?: string | undefined;
2170
+ description?: string | undefined;
2171
+ iconSrc?: string | undefined;
2172
+ iconAlt?: string | undefined;
2173
+ kind?: string | undefined;
2174
+ actionLabel?: string | undefined;
2175
+ }, {
2176
+ label: string;
2177
+ href?: string | undefined;
2178
+ value?: string | undefined;
2179
+ description?: string | undefined;
2180
+ iconSrc?: string | undefined;
2181
+ iconAlt?: string | undefined;
2182
+ kind?: string | undefined;
2183
+ actionLabel?: string | undefined;
2184
+ }>, "many">>;
2185
+ }, "strip", z.ZodTypeAny, {
2186
+ form: {
2187
+ enabled: boolean;
2188
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2189
+ };
2190
+ map?: {
2191
+ provider?: string | undefined;
2192
+ facadeImageSrc?: string | undefined;
2193
+ facadeImageAlt?: string | undefined;
2194
+ embedUrl?: string | undefined;
2195
+ externalUrl?: string | undefined;
2196
+ lat?: number | undefined;
2197
+ lng?: number | undefined;
2198
+ } | undefined;
2199
+ heading?: string | undefined;
2200
+ phone?: string | undefined;
2201
+ address?: string | undefined;
2202
+ hours?: {
2203
+ open: string;
2204
+ day: string;
2205
+ close: string;
2206
+ note?: string | undefined;
2207
+ }[] | undefined;
2208
+ mapEmbedUrl?: string | undefined;
2209
+ actions?: {
2210
+ href: string;
2211
+ label: string;
2212
+ kind?: string | undefined;
2213
+ }[] | undefined;
2214
+ channels?: {
2215
+ label: string;
2216
+ href?: string | undefined;
2217
+ value?: string | undefined;
2218
+ description?: string | undefined;
2219
+ iconSrc?: string | undefined;
2220
+ iconAlt?: string | undefined;
2221
+ kind?: string | undefined;
2222
+ actionLabel?: string | undefined;
2223
+ }[] | undefined;
2224
+ }, {
2225
+ form: {
2226
+ enabled: boolean;
2227
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2228
+ };
2229
+ map?: {
2230
+ provider?: string | undefined;
2231
+ facadeImageSrc?: string | undefined;
2232
+ facadeImageAlt?: string | undefined;
2233
+ embedUrl?: string | undefined;
2234
+ externalUrl?: string | undefined;
2235
+ lat?: number | undefined;
2236
+ lng?: number | undefined;
2237
+ } | undefined;
2238
+ heading?: string | undefined;
2239
+ phone?: string | undefined;
2240
+ address?: string | undefined;
2241
+ hours?: {
2242
+ open: string;
2243
+ day: string;
2244
+ close: string;
2245
+ note?: string | undefined;
2246
+ }[] | undefined;
2247
+ mapEmbedUrl?: string | undefined;
2248
+ actions?: {
2249
+ href: string;
2250
+ label: string;
2251
+ kind?: string | undefined;
2252
+ }[] | undefined;
2253
+ channels?: {
2254
+ label: string;
2255
+ href?: string | undefined;
2256
+ value?: string | undefined;
2257
+ description?: string | undefined;
2258
+ iconSrc?: string | undefined;
2259
+ iconAlt?: string | undefined;
2260
+ kind?: string | undefined;
2261
+ actionLabel?: string | undefined;
2262
+ }[] | undefined;
2263
+ }>;
2264
+ }, "strip", z.ZodTypeAny, {
2265
+ type: "contact";
2266
+ variant: "split" | "form-map-5050" | "channel-cards" | "visit-band";
2267
+ props: {
2268
+ form: {
2269
+ enabled: boolean;
2270
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2271
+ };
2272
+ map?: {
2273
+ provider?: string | undefined;
2274
+ facadeImageSrc?: string | undefined;
2275
+ facadeImageAlt?: string | undefined;
2276
+ embedUrl?: string | undefined;
2277
+ externalUrl?: string | undefined;
2278
+ lat?: number | undefined;
2279
+ lng?: number | undefined;
2280
+ } | undefined;
2281
+ heading?: string | undefined;
2282
+ phone?: string | undefined;
2283
+ address?: string | undefined;
2284
+ hours?: {
2285
+ open: string;
2286
+ day: string;
2287
+ close: string;
2288
+ note?: string | undefined;
2289
+ }[] | undefined;
2290
+ mapEmbedUrl?: string | undefined;
2291
+ actions?: {
2292
+ href: string;
2293
+ label: string;
2294
+ kind?: string | undefined;
2295
+ }[] | undefined;
2296
+ channels?: {
2297
+ label: string;
2298
+ href?: string | undefined;
2299
+ value?: string | undefined;
2300
+ description?: string | undefined;
2301
+ iconSrc?: string | undefined;
2302
+ iconAlt?: string | undefined;
2303
+ kind?: string | undefined;
2304
+ actionLabel?: string | undefined;
2305
+ }[] | undefined;
2306
+ };
2307
+ theme?: Record<string, string> | undefined;
2308
+ id?: string | undefined;
2309
+ }, {
2310
+ type: "contact";
2311
+ props: {
2312
+ form: {
2313
+ enabled: boolean;
2314
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2315
+ };
2316
+ map?: {
2317
+ provider?: string | undefined;
2318
+ facadeImageSrc?: string | undefined;
2319
+ facadeImageAlt?: string | undefined;
2320
+ embedUrl?: string | undefined;
2321
+ externalUrl?: string | undefined;
2322
+ lat?: number | undefined;
2323
+ lng?: number | undefined;
2324
+ } | undefined;
2325
+ heading?: string | undefined;
2326
+ phone?: string | undefined;
2327
+ address?: string | undefined;
2328
+ hours?: {
2329
+ open: string;
2330
+ day: string;
2331
+ close: string;
2332
+ note?: string | undefined;
2333
+ }[] | undefined;
2334
+ mapEmbedUrl?: string | undefined;
2335
+ actions?: {
2336
+ href: string;
2337
+ label: string;
2338
+ kind?: string | undefined;
2339
+ }[] | undefined;
2340
+ channels?: {
2341
+ label: string;
2342
+ href?: string | undefined;
2343
+ value?: string | undefined;
2344
+ description?: string | undefined;
2345
+ iconSrc?: string | undefined;
2346
+ iconAlt?: string | undefined;
2347
+ kind?: string | undefined;
2348
+ actionLabel?: string | undefined;
2349
+ }[] | undefined;
2350
+ };
2351
+ theme?: Record<string, string> | undefined;
2352
+ id?: string | undefined;
2353
+ variant?: "split" | "form-map-5050" | "channel-cards" | "visit-band" | undefined;
2354
+ }>, {
2355
+ type: "contact";
2356
+ variant: "split" | "form-map-5050" | "channel-cards" | "visit-band";
2357
+ props: {
2358
+ form: {
2359
+ enabled: boolean;
2360
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2361
+ };
2362
+ map?: {
2363
+ provider?: string | undefined;
2364
+ facadeImageSrc?: string | undefined;
2365
+ facadeImageAlt?: string | undefined;
2366
+ embedUrl?: string | undefined;
2367
+ externalUrl?: string | undefined;
2368
+ lat?: number | undefined;
2369
+ lng?: number | undefined;
2370
+ } | undefined;
2371
+ heading?: string | undefined;
2372
+ phone?: string | undefined;
2373
+ address?: string | undefined;
2374
+ hours?: {
2375
+ open: string;
2376
+ day: string;
2377
+ close: string;
2378
+ note?: string | undefined;
2379
+ }[] | undefined;
2380
+ mapEmbedUrl?: string | undefined;
2381
+ actions?: {
2382
+ href: string;
2383
+ label: string;
2384
+ kind?: string | undefined;
2385
+ }[] | undefined;
2386
+ channels?: {
2387
+ label: string;
2388
+ href?: string | undefined;
2389
+ value?: string | undefined;
2390
+ description?: string | undefined;
2391
+ iconSrc?: string | undefined;
2392
+ iconAlt?: string | undefined;
2393
+ kind?: string | undefined;
2394
+ actionLabel?: string | undefined;
2395
+ }[] | undefined;
2396
+ };
2397
+ theme?: Record<string, string> | undefined;
2398
+ id?: string | undefined;
2399
+ }, {
2400
+ type: "contact";
2401
+ props: {
2402
+ form: {
2403
+ enabled: boolean;
2404
+ vertical?: "consulting" | "medical" | "tax" | "legal" | undefined;
2405
+ };
2406
+ map?: {
2407
+ provider?: string | undefined;
2408
+ facadeImageSrc?: string | undefined;
2409
+ facadeImageAlt?: string | undefined;
2410
+ embedUrl?: string | undefined;
2411
+ externalUrl?: string | undefined;
2412
+ lat?: number | undefined;
2413
+ lng?: number | undefined;
2414
+ } | undefined;
2415
+ heading?: string | undefined;
2416
+ phone?: string | undefined;
2417
+ address?: string | undefined;
2418
+ hours?: {
2419
+ open: string;
2420
+ day: string;
2421
+ close: string;
2422
+ note?: string | undefined;
2423
+ }[] | undefined;
2424
+ mapEmbedUrl?: string | undefined;
2425
+ actions?: {
2426
+ href: string;
2427
+ label: string;
2428
+ kind?: string | undefined;
2429
+ }[] | undefined;
2430
+ channels?: {
2431
+ label: string;
2432
+ href?: string | undefined;
2433
+ value?: string | undefined;
2434
+ description?: string | undefined;
2435
+ iconSrc?: string | undefined;
2436
+ iconAlt?: string | undefined;
2437
+ kind?: string | undefined;
2438
+ actionLabel?: string | undefined;
2439
+ }[] | undefined;
2440
+ };
2441
+ theme?: Record<string, string> | undefined;
2442
+ id?: string | undefined;
2443
+ variant?: "split" | "form-map-5050" | "channel-cards" | "visit-band" | undefined;
2444
+ }>;
2445
+ declare const HoursSectionSchema: z.ZodObject<{
2446
+ id: z.ZodOptional<z.ZodString>;
2447
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2448
+ } & {
2449
+ type: z.ZodLiteral<"hours">;
2450
+ variant: z.ZodDefault<z.ZodEnum<["table", "compact"]>>;
2451
+ props: z.ZodObject<{
2452
+ eyebrow: z.ZodOptional<z.ZodString>;
2453
+ heading: z.ZodOptional<z.ZodString>;
2454
+ description: z.ZodOptional<z.ZodString>;
2455
+ rows: z.ZodArray<z.ZodObject<{
2456
+ day: z.ZodEnum<["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]>;
2457
+ label: z.ZodString;
2458
+ hours: z.ZodString;
2459
+ lunchHours: z.ZodOptional<z.ZodString>;
2460
+ badges: z.ZodOptional<z.ZodObject<{
2461
+ lunch: z.ZodOptional<z.ZodString>;
2462
+ evening: z.ZodOptional<z.ZodString>;
2463
+ closed: z.ZodOptional<z.ZodString>;
2464
+ extra: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2465
+ }, "strip", z.ZodTypeAny, {
2466
+ lunch?: string | undefined;
2467
+ evening?: string | undefined;
2468
+ closed?: string | undefined;
2469
+ extra?: string[] | undefined;
2470
+ }, {
2471
+ lunch?: string | undefined;
2472
+ evening?: string | undefined;
2473
+ closed?: string | undefined;
2474
+ extra?: string[] | undefined;
2475
+ }>>;
2476
+ note: z.ZodOptional<z.ZodString>;
2477
+ }, "strip", z.ZodTypeAny, {
2478
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2479
+ label: string;
2480
+ hours: string;
2481
+ note?: string | undefined;
2482
+ lunchHours?: string | undefined;
2483
+ badges?: {
2484
+ lunch?: string | undefined;
2485
+ evening?: string | undefined;
2486
+ closed?: string | undefined;
2487
+ extra?: string[] | undefined;
2488
+ } | undefined;
2489
+ }, {
2490
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2491
+ label: string;
2492
+ hours: string;
2493
+ note?: string | undefined;
2494
+ lunchHours?: string | undefined;
2495
+ badges?: {
2496
+ lunch?: string | undefined;
2497
+ evening?: string | undefined;
2498
+ closed?: string | undefined;
2499
+ extra?: string[] | undefined;
2500
+ } | undefined;
2501
+ }>, "many">;
2502
+ note: z.ZodOptional<z.ZodString>;
2503
+ disclaimer: z.ZodOptional<z.ZodString>;
2504
+ }, "strip", z.ZodTypeAny, {
2505
+ rows: {
2506
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2507
+ label: string;
2508
+ hours: string;
2509
+ note?: string | undefined;
2510
+ lunchHours?: string | undefined;
2511
+ badges?: {
2512
+ lunch?: string | undefined;
2513
+ evening?: string | undefined;
2514
+ closed?: string | undefined;
2515
+ extra?: string[] | undefined;
2516
+ } | undefined;
2517
+ }[];
2518
+ heading?: string | undefined;
2519
+ description?: string | undefined;
2520
+ eyebrow?: string | undefined;
2521
+ disclaimer?: string | undefined;
2522
+ note?: string | undefined;
2523
+ }, {
2524
+ rows: {
2525
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2526
+ label: string;
2527
+ hours: string;
2528
+ note?: string | undefined;
2529
+ lunchHours?: string | undefined;
2530
+ badges?: {
2531
+ lunch?: string | undefined;
2532
+ evening?: string | undefined;
2533
+ closed?: string | undefined;
2534
+ extra?: string[] | undefined;
2535
+ } | undefined;
2536
+ }[];
2537
+ heading?: string | undefined;
2538
+ description?: string | undefined;
2539
+ eyebrow?: string | undefined;
2540
+ disclaimer?: string | undefined;
2541
+ note?: string | undefined;
2542
+ }>;
2543
+ }, "strip", z.ZodTypeAny, {
2544
+ type: "hours";
2545
+ variant: "table" | "compact";
2546
+ props: {
2547
+ rows: {
2548
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2549
+ label: string;
2550
+ hours: string;
2551
+ note?: string | undefined;
2552
+ lunchHours?: string | undefined;
2553
+ badges?: {
2554
+ lunch?: string | undefined;
2555
+ evening?: string | undefined;
2556
+ closed?: string | undefined;
2557
+ extra?: string[] | undefined;
2558
+ } | undefined;
2559
+ }[];
2560
+ heading?: string | undefined;
2561
+ description?: string | undefined;
2562
+ eyebrow?: string | undefined;
2563
+ disclaimer?: string | undefined;
2564
+ note?: string | undefined;
2565
+ };
2566
+ theme?: Record<string, string> | undefined;
2567
+ id?: string | undefined;
2568
+ }, {
2569
+ type: "hours";
2570
+ props: {
2571
+ rows: {
2572
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
2573
+ label: string;
2574
+ hours: string;
2575
+ note?: string | undefined;
2576
+ lunchHours?: string | undefined;
2577
+ badges?: {
2578
+ lunch?: string | undefined;
2579
+ evening?: string | undefined;
2580
+ closed?: string | undefined;
2581
+ extra?: string[] | undefined;
2582
+ } | undefined;
2583
+ }[];
2584
+ heading?: string | undefined;
2585
+ description?: string | undefined;
2586
+ eyebrow?: string | undefined;
2587
+ disclaimer?: string | undefined;
2588
+ note?: string | undefined;
2589
+ };
2590
+ theme?: Record<string, string> | undefined;
2591
+ id?: string | undefined;
2592
+ variant?: "table" | "compact" | undefined;
2593
+ }>;
2594
+ declare const PricingSectionSchema: z.ZodObject<{
2595
+ id: z.ZodOptional<z.ZodString>;
2596
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2597
+ } & {
2598
+ type: z.ZodLiteral<"pricing">;
2599
+ variant: z.ZodDefault<z.ZodEnum<["table", "cards"]>>;
2600
+ props: z.ZodObject<{
2601
+ eyebrow: z.ZodOptional<z.ZodString>;
2602
+ heading: z.ZodOptional<z.ZodString>;
2603
+ description: z.ZodOptional<z.ZodString>;
2604
+ groups: z.ZodArray<z.ZodObject<{
2605
+ label: z.ZodString;
2606
+ items: z.ZodArray<z.ZodObject<{
2607
+ name: z.ZodString;
2608
+ description: z.ZodOptional<z.ZodString>;
2609
+ price: z.ZodString;
2610
+ condition: z.ZodOptional<z.ZodString>;
2611
+ }, "strip", z.ZodTypeAny, {
2612
+ name: string;
2613
+ price: string;
2614
+ description?: string | undefined;
2615
+ condition?: string | undefined;
2616
+ }, {
2617
+ name: string;
2618
+ price: string;
2619
+ description?: string | undefined;
2620
+ condition?: string | undefined;
2621
+ }>, "many">;
2622
+ }, "strip", z.ZodTypeAny, {
2623
+ label: string;
2624
+ items: {
2625
+ name: string;
2626
+ price: string;
2627
+ description?: string | undefined;
2628
+ condition?: string | undefined;
2629
+ }[];
2630
+ }, {
2631
+ label: string;
2632
+ items: {
2633
+ name: string;
2634
+ price: string;
2635
+ description?: string | undefined;
2636
+ condition?: string | undefined;
2637
+ }[];
2638
+ }>, "many">;
2639
+ disclaimer: z.ZodString;
2640
+ }, "strip", z.ZodTypeAny, {
2641
+ groups: {
2642
+ label: string;
2643
+ items: {
2644
+ name: string;
2645
+ price: string;
2646
+ description?: string | undefined;
2647
+ condition?: string | undefined;
2648
+ }[];
2649
+ }[];
2650
+ disclaimer: string;
2651
+ heading?: string | undefined;
2652
+ description?: string | undefined;
2653
+ eyebrow?: string | undefined;
2654
+ }, {
2655
+ groups: {
2656
+ label: string;
2657
+ items: {
2658
+ name: string;
2659
+ price: string;
2660
+ description?: string | undefined;
2661
+ condition?: string | undefined;
2662
+ }[];
2663
+ }[];
2664
+ disclaimer: string;
2665
+ heading?: string | undefined;
2666
+ description?: string | undefined;
2667
+ eyebrow?: string | undefined;
2668
+ }>;
2669
+ }, "strip", z.ZodTypeAny, {
2670
+ type: "pricing";
2671
+ variant: "table" | "cards";
2672
+ props: {
2673
+ groups: {
2674
+ label: string;
2675
+ items: {
2676
+ name: string;
2677
+ price: string;
2678
+ description?: string | undefined;
2679
+ condition?: string | undefined;
2680
+ }[];
2681
+ }[];
2682
+ disclaimer: string;
2683
+ heading?: string | undefined;
2684
+ description?: string | undefined;
2685
+ eyebrow?: string | undefined;
2686
+ };
2687
+ theme?: Record<string, string> | undefined;
2688
+ id?: string | undefined;
2689
+ }, {
2690
+ type: "pricing";
2691
+ props: {
2692
+ groups: {
2693
+ label: string;
2694
+ items: {
2695
+ name: string;
2696
+ price: string;
2697
+ description?: string | undefined;
2698
+ condition?: string | undefined;
2699
+ }[];
2700
+ }[];
2701
+ disclaimer: string;
2702
+ heading?: string | undefined;
2703
+ description?: string | undefined;
2704
+ eyebrow?: string | undefined;
2705
+ };
2706
+ theme?: Record<string, string> | undefined;
2707
+ id?: string | undefined;
2708
+ variant?: "table" | "cards" | undefined;
2709
+ }>;
2710
+ declare const ProcessSectionSchema: z.ZodEffects<z.ZodObject<{
2711
+ id: z.ZodOptional<z.ZodString>;
2712
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2713
+ } & {
2714
+ type: z.ZodLiteral<"process">;
2715
+ variant: z.ZodDefault<z.ZodEnum<["horizontal", "vertical", "timeline-marked"]>>;
2716
+ props: z.ZodObject<{
2717
+ eyebrow: z.ZodOptional<z.ZodString>;
2718
+ heading: z.ZodOptional<z.ZodString>;
2719
+ description: z.ZodOptional<z.ZodString>;
2720
+ items: z.ZodArray<z.ZodObject<{
2721
+ eyebrow: z.ZodOptional<z.ZodString>;
2722
+ title: z.ZodString;
2723
+ description: z.ZodString;
2724
+ duration: z.ZodOptional<z.ZodString>;
2725
+ status: z.ZodOptional<z.ZodEnum<["complete", "current", "pending"]>>;
2726
+ statusLabel: z.ZodOptional<z.ZodString>;
2727
+ mark: z.ZodOptional<z.ZodEnum<["check", "dot", "none"]>>;
2728
+ imageSrc: z.ZodOptional<z.ZodString>;
2729
+ imageAlt: z.ZodOptional<z.ZodString>;
2730
+ }, "strip", z.ZodTypeAny, {
2731
+ title: string;
2732
+ description: string;
2733
+ status?: "complete" | "current" | "pending" | undefined;
2734
+ mark?: "none" | "dot" | "check" | undefined;
2735
+ imageSrc?: string | undefined;
2736
+ imageAlt?: string | undefined;
2737
+ eyebrow?: string | undefined;
2738
+ duration?: string | undefined;
2739
+ statusLabel?: string | undefined;
2740
+ }, {
2741
+ title: string;
2742
+ description: string;
2743
+ status?: "complete" | "current" | "pending" | undefined;
2744
+ mark?: "none" | "dot" | "check" | undefined;
2745
+ imageSrc?: string | undefined;
2746
+ imageAlt?: string | undefined;
2747
+ eyebrow?: string | undefined;
2748
+ duration?: string | undefined;
2749
+ statusLabel?: string | undefined;
2750
+ }>, "many">;
2751
+ connector: z.ZodOptional<z.ZodEnum<["line", "rail"]>>;
2752
+ disclaimer: z.ZodOptional<z.ZodString>;
2753
+ }, "strip", z.ZodTypeAny, {
2754
+ items: {
2755
+ title: string;
2756
+ description: string;
2757
+ status?: "complete" | "current" | "pending" | undefined;
2758
+ mark?: "none" | "dot" | "check" | undefined;
2759
+ imageSrc?: string | undefined;
2760
+ imageAlt?: string | undefined;
2761
+ eyebrow?: string | undefined;
2762
+ duration?: string | undefined;
2763
+ statusLabel?: string | undefined;
2764
+ }[];
2765
+ heading?: string | undefined;
2766
+ description?: string | undefined;
2767
+ eyebrow?: string | undefined;
2768
+ disclaimer?: string | undefined;
2769
+ connector?: "line" | "rail" | undefined;
2770
+ }, {
2771
+ items: {
2772
+ title: string;
2773
+ description: string;
2774
+ status?: "complete" | "current" | "pending" | undefined;
2775
+ mark?: "none" | "dot" | "check" | undefined;
2776
+ imageSrc?: string | undefined;
2777
+ imageAlt?: string | undefined;
2778
+ eyebrow?: string | undefined;
2779
+ duration?: string | undefined;
2780
+ statusLabel?: string | undefined;
2781
+ }[];
2782
+ heading?: string | undefined;
2783
+ description?: string | undefined;
2784
+ eyebrow?: string | undefined;
2785
+ disclaimer?: string | undefined;
2786
+ connector?: "line" | "rail" | undefined;
2787
+ }>;
2788
+ }, "strip", z.ZodTypeAny, {
2789
+ type: "process";
2790
+ variant: "horizontal" | "vertical" | "timeline-marked";
2791
+ props: {
2792
+ items: {
2793
+ title: string;
2794
+ description: string;
2795
+ status?: "complete" | "current" | "pending" | undefined;
2796
+ mark?: "none" | "dot" | "check" | undefined;
2797
+ imageSrc?: string | undefined;
2798
+ imageAlt?: string | undefined;
2799
+ eyebrow?: string | undefined;
2800
+ duration?: string | undefined;
2801
+ statusLabel?: string | undefined;
2802
+ }[];
2803
+ heading?: string | undefined;
2804
+ description?: string | undefined;
2805
+ eyebrow?: string | undefined;
2806
+ disclaimer?: string | undefined;
2807
+ connector?: "line" | "rail" | undefined;
2808
+ };
2809
+ theme?: Record<string, string> | undefined;
2810
+ id?: string | undefined;
2811
+ }, {
2812
+ type: "process";
2813
+ props: {
2814
+ items: {
2815
+ title: string;
2816
+ description: string;
2817
+ status?: "complete" | "current" | "pending" | undefined;
2818
+ mark?: "none" | "dot" | "check" | undefined;
2819
+ imageSrc?: string | undefined;
2820
+ imageAlt?: string | undefined;
2821
+ eyebrow?: string | undefined;
2822
+ duration?: string | undefined;
2823
+ statusLabel?: string | undefined;
2824
+ }[];
2825
+ heading?: string | undefined;
2826
+ description?: string | undefined;
2827
+ eyebrow?: string | undefined;
2828
+ disclaimer?: string | undefined;
2829
+ connector?: "line" | "rail" | undefined;
2830
+ };
2831
+ theme?: Record<string, string> | undefined;
2832
+ id?: string | undefined;
2833
+ variant?: "horizontal" | "vertical" | "timeline-marked" | undefined;
2834
+ }>, {
2835
+ type: "process";
2836
+ variant: "horizontal" | "vertical" | "timeline-marked";
2837
+ props: {
2838
+ items: {
2839
+ title: string;
2840
+ description: string;
2841
+ status?: "complete" | "current" | "pending" | undefined;
2842
+ mark?: "none" | "dot" | "check" | undefined;
2843
+ imageSrc?: string | undefined;
2844
+ imageAlt?: string | undefined;
2845
+ eyebrow?: string | undefined;
2846
+ duration?: string | undefined;
2847
+ statusLabel?: string | undefined;
2848
+ }[];
2849
+ heading?: string | undefined;
2850
+ description?: string | undefined;
2851
+ eyebrow?: string | undefined;
2852
+ disclaimer?: string | undefined;
2853
+ connector?: "line" | "rail" | undefined;
2854
+ };
2855
+ theme?: Record<string, string> | undefined;
2856
+ id?: string | undefined;
2857
+ }, {
2858
+ type: "process";
2859
+ props: {
2860
+ items: {
2861
+ title: string;
2862
+ description: string;
2863
+ status?: "complete" | "current" | "pending" | undefined;
2864
+ mark?: "none" | "dot" | "check" | undefined;
2865
+ imageSrc?: string | undefined;
2866
+ imageAlt?: string | undefined;
2867
+ eyebrow?: string | undefined;
2868
+ duration?: string | undefined;
2869
+ statusLabel?: string | undefined;
2870
+ }[];
2871
+ heading?: string | undefined;
2872
+ description?: string | undefined;
2873
+ eyebrow?: string | undefined;
2874
+ disclaimer?: string | undefined;
2875
+ connector?: "line" | "rail" | undefined;
2876
+ };
2877
+ theme?: Record<string, string> | undefined;
2878
+ id?: string | undefined;
2879
+ variant?: "horizontal" | "vertical" | "timeline-marked" | undefined;
2880
+ }>;
2881
+ declare const BeforeAfterSectionSchema: z.ZodObject<{
2882
+ id: z.ZodOptional<z.ZodString>;
2883
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2884
+ } & {
2885
+ type: z.ZodLiteral<"before-after">;
2886
+ variant: z.ZodDefault<z.ZodEnum<["slider", "side-by-side"]>>;
2887
+ props: z.ZodObject<{
2888
+ beforeImage: z.ZodObject<{
2889
+ src: z.ZodString;
2890
+ alt: z.ZodString;
2891
+ }, "strip", z.ZodTypeAny, {
2892
+ src: string;
2893
+ alt: string;
2894
+ }, {
2895
+ src: string;
2896
+ alt: string;
2897
+ }>;
2898
+ afterImage: z.ZodObject<{
2899
+ src: z.ZodString;
2900
+ alt: z.ZodString;
2901
+ }, "strip", z.ZodTypeAny, {
2902
+ src: string;
2903
+ alt: string;
2904
+ }, {
2905
+ src: string;
2906
+ alt: string;
2907
+ }>;
2908
+ beforeLabel: z.ZodDefault<z.ZodString>;
2909
+ afterLabel: z.ZodDefault<z.ZodString>;
2910
+ heading: z.ZodOptional<z.ZodString>;
2911
+ description: z.ZodOptional<z.ZodString>;
2912
+ disclaimer: z.ZodOptional<z.ZodString>;
2913
+ }, "strip", z.ZodTypeAny, {
2914
+ beforeImage: {
2915
+ src: string;
2916
+ alt: string;
2917
+ };
2918
+ afterImage: {
2919
+ src: string;
2920
+ alt: string;
2921
+ };
2922
+ beforeLabel: string;
2923
+ afterLabel: string;
2924
+ heading?: string | undefined;
2925
+ description?: string | undefined;
2926
+ disclaimer?: string | undefined;
2927
+ }, {
2928
+ beforeImage: {
2929
+ src: string;
2930
+ alt: string;
2931
+ };
2932
+ afterImage: {
2933
+ src: string;
2934
+ alt: string;
2935
+ };
2936
+ heading?: string | undefined;
2937
+ description?: string | undefined;
2938
+ disclaimer?: string | undefined;
2939
+ beforeLabel?: string | undefined;
2940
+ afterLabel?: string | undefined;
2941
+ }>;
2942
+ }, "strip", z.ZodTypeAny, {
2943
+ type: "before-after";
2944
+ variant: "slider" | "side-by-side";
2945
+ props: {
2946
+ beforeImage: {
2947
+ src: string;
2948
+ alt: string;
2949
+ };
2950
+ afterImage: {
2951
+ src: string;
2952
+ alt: string;
2953
+ };
2954
+ beforeLabel: string;
2955
+ afterLabel: string;
2956
+ heading?: string | undefined;
2957
+ description?: string | undefined;
2958
+ disclaimer?: string | undefined;
2959
+ };
2960
+ theme?: Record<string, string> | undefined;
2961
+ id?: string | undefined;
2962
+ }, {
2963
+ type: "before-after";
2964
+ props: {
2965
+ beforeImage: {
2966
+ src: string;
2967
+ alt: string;
2968
+ };
2969
+ afterImage: {
2970
+ src: string;
2971
+ alt: string;
2972
+ };
2973
+ heading?: string | undefined;
2974
+ description?: string | undefined;
2975
+ disclaimer?: string | undefined;
2976
+ beforeLabel?: string | undefined;
2977
+ afterLabel?: string | undefined;
2978
+ };
2979
+ theme?: Record<string, string> | undefined;
2980
+ id?: string | undefined;
2981
+ variant?: "slider" | "side-by-side" | undefined;
2982
+ }>;
2983
+ /**
2984
+ * C11 — 후기(testimonials) 섹션. 의료 vertical 치료경험담 광고는 규제 대상
2985
+ * (의료법 §56 ②4, `@roottale/audit-medical` MED-007) — `disclaimer` 슬롯은
2986
+ * 법정 고지문 전용, 스토리 fixture 카피는 심의-안전 톤으로 작성 의무
2987
+ * (roottale-docs `premium-component-backlog.md` C11).
2988
+ */
2989
+ declare const TestimonialsSectionSchema: z.ZodObject<{
2990
+ id: z.ZodOptional<z.ZodString>;
2991
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
2992
+ } & {
2993
+ type: z.ZodLiteral<"testimonials">;
2994
+ variant: z.ZodDefault<z.ZodEnum<["editorial-quote", "quote-rail"]>>;
2995
+ props: z.ZodObject<{
2996
+ heading: z.ZodString;
2997
+ description: z.ZodOptional<z.ZodString>;
2998
+ items: z.ZodArray<z.ZodObject<{
2999
+ quote: z.ZodString;
3000
+ author: z.ZodString;
3001
+ /** 케이스 라벨(예: "허리디스크 · 비수술 치료 3개월"). */
3002
+ context: z.ZodOptional<z.ZodString>;
3003
+ rating: z.ZodOptional<z.ZodNumber>;
3004
+ source: z.ZodOptional<z.ZodString>;
3005
+ visitedAt: z.ZodOptional<z.ZodString>;
3006
+ item: z.ZodOptional<z.ZodString>;
3007
+ reply: z.ZodOptional<z.ZodString>;
3008
+ }, "strip", z.ZodTypeAny, {
3009
+ author: string;
3010
+ quote: string;
3011
+ source?: string | undefined;
3012
+ context?: string | undefined;
3013
+ rating?: number | undefined;
3014
+ visitedAt?: string | undefined;
3015
+ item?: string | undefined;
3016
+ reply?: string | undefined;
3017
+ }, {
3018
+ author: string;
3019
+ quote: string;
3020
+ source?: string | undefined;
3021
+ context?: string | undefined;
3022
+ rating?: number | undefined;
3023
+ visitedAt?: string | undefined;
3024
+ item?: string | undefined;
3025
+ reply?: string | undefined;
3026
+ }>, "many">;
3027
+ marquee: z.ZodOptional<z.ZodBoolean>;
3028
+ /** 법정 고지 슬롯("개인 경험이며 효과는 다를 수 있습니다" 류). */
3029
+ disclaimer: z.ZodOptional<z.ZodString>;
3030
+ }, "strip", z.ZodTypeAny, {
3031
+ heading: string;
3032
+ items: {
3033
+ author: string;
3034
+ quote: string;
3035
+ source?: string | undefined;
3036
+ context?: string | undefined;
3037
+ rating?: number | undefined;
3038
+ visitedAt?: string | undefined;
3039
+ item?: string | undefined;
3040
+ reply?: string | undefined;
3041
+ }[];
3042
+ description?: string | undefined;
3043
+ disclaimer?: string | undefined;
3044
+ marquee?: boolean | undefined;
3045
+ }, {
3046
+ heading: string;
3047
+ items: {
3048
+ author: string;
3049
+ quote: string;
3050
+ source?: string | undefined;
3051
+ context?: string | undefined;
3052
+ rating?: number | undefined;
3053
+ visitedAt?: string | undefined;
3054
+ item?: string | undefined;
3055
+ reply?: string | undefined;
3056
+ }[];
3057
+ description?: string | undefined;
3058
+ disclaimer?: string | undefined;
3059
+ marquee?: boolean | undefined;
3060
+ }>;
3061
+ }, "strip", z.ZodTypeAny, {
3062
+ type: "testimonials";
3063
+ variant: "editorial-quote" | "quote-rail";
3064
+ props: {
3065
+ heading: string;
3066
+ items: {
3067
+ author: string;
3068
+ quote: string;
3069
+ source?: string | undefined;
3070
+ context?: string | undefined;
3071
+ rating?: number | undefined;
3072
+ visitedAt?: string | undefined;
3073
+ item?: string | undefined;
3074
+ reply?: string | undefined;
3075
+ }[];
3076
+ description?: string | undefined;
3077
+ disclaimer?: string | undefined;
3078
+ marquee?: boolean | undefined;
3079
+ };
3080
+ theme?: Record<string, string> | undefined;
3081
+ id?: string | undefined;
3082
+ }, {
3083
+ type: "testimonials";
3084
+ props: {
3085
+ heading: string;
3086
+ items: {
3087
+ author: string;
3088
+ quote: string;
3089
+ source?: string | undefined;
3090
+ context?: string | undefined;
3091
+ rating?: number | undefined;
3092
+ visitedAt?: string | undefined;
3093
+ item?: string | undefined;
3094
+ reply?: string | undefined;
3095
+ }[];
3096
+ description?: string | undefined;
3097
+ disclaimer?: string | undefined;
3098
+ marquee?: boolean | undefined;
3099
+ };
3100
+ theme?: Record<string, string> | undefined;
3101
+ id?: string | undefined;
3102
+ variant?: "editorial-quote" | "quote-rail" | undefined;
3103
+ }>;
3104
+ declare const TeamSectionSchema: z.ZodObject<{
3105
+ id: z.ZodOptional<z.ZodString>;
3106
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3107
+ } & {
3108
+ type: z.ZodLiteral<"team">;
3109
+ variant: z.ZodDefault<z.ZodEnum<["grid", "spotlight", "expanding-stage", "row"]>>;
3110
+ props: z.ZodObject<{
3111
+ heading: z.ZodOptional<z.ZodString>;
3112
+ description: z.ZodOptional<z.ZodString>;
3113
+ members: z.ZodArray<z.ZodEffects<z.ZodObject<{
3114
+ name: z.ZodString;
3115
+ title: z.ZodString;
3116
+ photoSrc: z.ZodOptional<z.ZodString>;
3117
+ photoAlt: z.ZodOptional<z.ZodString>;
3118
+ specialties: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3119
+ credentials: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3120
+ bio: z.ZodOptional<z.ZodString>;
3121
+ href: z.ZodOptional<z.ZodString>;
3122
+ ctaLabel: z.ZodOptional<z.ZodString>;
3123
+ }, "strip", z.ZodTypeAny, {
3124
+ title: string;
3125
+ name: string;
3126
+ href?: string | undefined;
3127
+ ctaLabel?: string | undefined;
3128
+ credentials?: string[] | undefined;
3129
+ photoSrc?: string | undefined;
3130
+ photoAlt?: string | undefined;
3131
+ specialties?: string[] | undefined;
3132
+ bio?: string | undefined;
3133
+ }, {
3134
+ title: string;
3135
+ name: string;
3136
+ href?: string | undefined;
3137
+ ctaLabel?: string | undefined;
3138
+ credentials?: string[] | undefined;
3139
+ photoSrc?: string | undefined;
3140
+ photoAlt?: string | undefined;
3141
+ specialties?: string[] | undefined;
3142
+ bio?: string | undefined;
3143
+ }>, {
3144
+ title: string;
3145
+ name: string;
3146
+ href?: string | undefined;
3147
+ ctaLabel?: string | undefined;
3148
+ credentials?: string[] | undefined;
3149
+ photoSrc?: string | undefined;
3150
+ photoAlt?: string | undefined;
3151
+ specialties?: string[] | undefined;
3152
+ bio?: string | undefined;
3153
+ }, {
3154
+ title: string;
3155
+ name: string;
3156
+ href?: string | undefined;
3157
+ ctaLabel?: string | undefined;
3158
+ credentials?: string[] | undefined;
3159
+ photoSrc?: string | undefined;
3160
+ photoAlt?: string | undefined;
3161
+ specialties?: string[] | undefined;
3162
+ bio?: string | undefined;
3163
+ }>, "many">;
3164
+ }, "strip", z.ZodTypeAny, {
3165
+ members: {
3166
+ title: string;
3167
+ name: string;
3168
+ href?: string | undefined;
3169
+ ctaLabel?: string | undefined;
3170
+ credentials?: string[] | undefined;
3171
+ photoSrc?: string | undefined;
3172
+ photoAlt?: string | undefined;
3173
+ specialties?: string[] | undefined;
3174
+ bio?: string | undefined;
3175
+ }[];
3176
+ heading?: string | undefined;
3177
+ description?: string | undefined;
3178
+ }, {
3179
+ members: {
3180
+ title: string;
3181
+ name: string;
3182
+ href?: string | undefined;
3183
+ ctaLabel?: string | undefined;
3184
+ credentials?: string[] | undefined;
3185
+ photoSrc?: string | undefined;
3186
+ photoAlt?: string | undefined;
3187
+ specialties?: string[] | undefined;
3188
+ bio?: string | undefined;
3189
+ }[];
3190
+ heading?: string | undefined;
3191
+ description?: string | undefined;
3192
+ }>;
3193
+ }, "strip", z.ZodTypeAny, {
3194
+ type: "team";
3195
+ variant: "grid" | "row" | "spotlight" | "expanding-stage";
3196
+ props: {
3197
+ members: {
3198
+ title: string;
3199
+ name: string;
3200
+ href?: string | undefined;
3201
+ ctaLabel?: string | undefined;
3202
+ credentials?: string[] | undefined;
3203
+ photoSrc?: string | undefined;
3204
+ photoAlt?: string | undefined;
3205
+ specialties?: string[] | undefined;
3206
+ bio?: string | undefined;
3207
+ }[];
3208
+ heading?: string | undefined;
3209
+ description?: string | undefined;
3210
+ };
3211
+ theme?: Record<string, string> | undefined;
3212
+ id?: string | undefined;
3213
+ }, {
3214
+ type: "team";
3215
+ props: {
3216
+ members: {
3217
+ title: string;
3218
+ name: string;
3219
+ href?: string | undefined;
3220
+ ctaLabel?: string | undefined;
3221
+ credentials?: string[] | undefined;
3222
+ photoSrc?: string | undefined;
3223
+ photoAlt?: string | undefined;
3224
+ specialties?: string[] | undefined;
3225
+ bio?: string | undefined;
3226
+ }[];
3227
+ heading?: string | undefined;
3228
+ description?: string | undefined;
3229
+ };
3230
+ theme?: Record<string, string> | undefined;
3231
+ id?: string | undefined;
3232
+ variant?: "grid" | "row" | "spotlight" | "expanding-stage" | undefined;
3233
+ }>;
3234
+ declare const ExpertiseSectionSchema: z.ZodObject<{
3235
+ id: z.ZodOptional<z.ZodString>;
3236
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3237
+ } & {
3238
+ type: z.ZodLiteral<"expertise">;
3239
+ variant: z.ZodDefault<z.ZodEnum<["tab-stage", "cards"]>>;
3240
+ props: z.ZodObject<{
3241
+ heading: z.ZodOptional<z.ZodString>;
3242
+ description: z.ZodOptional<z.ZodString>;
3243
+ items: z.ZodArray<z.ZodEffects<z.ZodObject<{
3244
+ id: z.ZodString;
3245
+ label: z.ZodString;
3246
+ kicker: z.ZodOptional<z.ZodString>;
3247
+ title: z.ZodString;
3248
+ body: z.ZodString;
3249
+ imageSrc: z.ZodOptional<z.ZodString>;
3250
+ imageAlt: z.ZodOptional<z.ZodString>;
3251
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3252
+ href: z.ZodOptional<z.ZodString>;
3253
+ ctaLabel: z.ZodOptional<z.ZodString>;
3254
+ }, "strip", z.ZodTypeAny, {
3255
+ id: string;
3256
+ title: string;
3257
+ body: string;
3258
+ label: string;
3259
+ href?: string | undefined;
3260
+ imageSrc?: string | undefined;
3261
+ imageAlt?: string | undefined;
3262
+ ctaLabel?: string | undefined;
3263
+ kicker?: string | undefined;
3264
+ tags?: string[] | undefined;
3265
+ }, {
3266
+ id: string;
3267
+ title: string;
3268
+ body: string;
3269
+ label: string;
3270
+ href?: string | undefined;
3271
+ imageSrc?: string | undefined;
3272
+ imageAlt?: string | undefined;
3273
+ ctaLabel?: string | undefined;
3274
+ kicker?: string | undefined;
3275
+ tags?: string[] | undefined;
3276
+ }>, {
3277
+ id: string;
3278
+ title: string;
3279
+ body: string;
3280
+ label: string;
3281
+ href?: string | undefined;
3282
+ imageSrc?: string | undefined;
3283
+ imageAlt?: string | undefined;
3284
+ ctaLabel?: string | undefined;
3285
+ kicker?: string | undefined;
3286
+ tags?: string[] | undefined;
3287
+ }, {
3288
+ id: string;
3289
+ title: string;
3290
+ body: string;
3291
+ label: string;
3292
+ href?: string | undefined;
3293
+ imageSrc?: string | undefined;
3294
+ imageAlt?: string | undefined;
3295
+ ctaLabel?: string | undefined;
3296
+ kicker?: string | undefined;
3297
+ tags?: string[] | undefined;
3298
+ }>, "many">;
3299
+ }, "strip", z.ZodTypeAny, {
3300
+ items: {
3301
+ id: string;
3302
+ title: string;
3303
+ body: string;
3304
+ label: string;
3305
+ href?: string | undefined;
3306
+ imageSrc?: string | undefined;
3307
+ imageAlt?: string | undefined;
3308
+ ctaLabel?: string | undefined;
3309
+ kicker?: string | undefined;
3310
+ tags?: string[] | undefined;
3311
+ }[];
3312
+ heading?: string | undefined;
3313
+ description?: string | undefined;
3314
+ }, {
3315
+ items: {
3316
+ id: string;
3317
+ title: string;
3318
+ body: string;
3319
+ label: string;
3320
+ href?: string | undefined;
3321
+ imageSrc?: string | undefined;
3322
+ imageAlt?: string | undefined;
3323
+ ctaLabel?: string | undefined;
3324
+ kicker?: string | undefined;
3325
+ tags?: string[] | undefined;
3326
+ }[];
3327
+ heading?: string | undefined;
3328
+ description?: string | undefined;
3329
+ }>;
3330
+ }, "strip", z.ZodTypeAny, {
3331
+ type: "expertise";
3332
+ variant: "cards" | "tab-stage";
3333
+ props: {
3334
+ items: {
3335
+ id: string;
3336
+ title: string;
3337
+ body: string;
3338
+ label: string;
3339
+ href?: string | undefined;
3340
+ imageSrc?: string | undefined;
3341
+ imageAlt?: string | undefined;
3342
+ ctaLabel?: string | undefined;
3343
+ kicker?: string | undefined;
3344
+ tags?: string[] | undefined;
3345
+ }[];
3346
+ heading?: string | undefined;
3347
+ description?: string | undefined;
3348
+ };
3349
+ theme?: Record<string, string> | undefined;
3350
+ id?: string | undefined;
3351
+ }, {
3352
+ type: "expertise";
3353
+ props: {
3354
+ items: {
3355
+ id: string;
3356
+ title: string;
3357
+ body: string;
3358
+ label: string;
3359
+ href?: string | undefined;
3360
+ imageSrc?: string | undefined;
3361
+ imageAlt?: string | undefined;
3362
+ ctaLabel?: string | undefined;
3363
+ kicker?: string | undefined;
3364
+ tags?: string[] | undefined;
3365
+ }[];
3366
+ heading?: string | undefined;
3367
+ description?: string | undefined;
3368
+ };
3369
+ theme?: Record<string, string> | undefined;
3370
+ id?: string | undefined;
3371
+ variant?: "cards" | "tab-stage" | undefined;
3372
+ }>;
3373
+ declare const SpacesSectionSchema: z.ZodObject<{
3374
+ id: z.ZodOptional<z.ZodString>;
3375
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3376
+ } & {
3377
+ type: z.ZodLiteral<"spaces">;
3378
+ variant: z.ZodDefault<z.ZodEnum<["stage", "mosaic"]>>;
3379
+ props: z.ZodObject<{
3380
+ heading: z.ZodOptional<z.ZodString>;
3381
+ description: z.ZodOptional<z.ZodString>;
3382
+ spaces: z.ZodArray<z.ZodObject<{
3383
+ id: z.ZodString;
3384
+ label: z.ZodString;
3385
+ kicker: z.ZodOptional<z.ZodString>;
3386
+ title: z.ZodOptional<z.ZodString>;
3387
+ description: z.ZodOptional<z.ZodString>;
3388
+ imageSrc: z.ZodString;
3389
+ imageAlt: z.ZodString;
3390
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3391
+ }, "strip", z.ZodTypeAny, {
3392
+ id: string;
3393
+ label: string;
3394
+ imageSrc: string;
3395
+ imageAlt: string;
3396
+ title?: string | undefined;
3397
+ description?: string | undefined;
3398
+ kicker?: string | undefined;
3399
+ tags?: string[] | undefined;
3400
+ }, {
3401
+ id: string;
3402
+ label: string;
3403
+ imageSrc: string;
3404
+ imageAlt: string;
3405
+ title?: string | undefined;
3406
+ description?: string | undefined;
3407
+ kicker?: string | undefined;
3408
+ tags?: string[] | undefined;
3409
+ }>, "many">;
3410
+ disclaimer: z.ZodOptional<z.ZodString>;
3411
+ }, "strip", z.ZodTypeAny, {
3412
+ spaces: {
3413
+ id: string;
3414
+ label: string;
3415
+ imageSrc: string;
3416
+ imageAlt: string;
3417
+ title?: string | undefined;
3418
+ description?: string | undefined;
3419
+ kicker?: string | undefined;
3420
+ tags?: string[] | undefined;
3421
+ }[];
3422
+ heading?: string | undefined;
3423
+ description?: string | undefined;
3424
+ disclaimer?: string | undefined;
3425
+ }, {
3426
+ spaces: {
3427
+ id: string;
3428
+ label: string;
3429
+ imageSrc: string;
3430
+ imageAlt: string;
3431
+ title?: string | undefined;
3432
+ description?: string | undefined;
3433
+ kicker?: string | undefined;
3434
+ tags?: string[] | undefined;
3435
+ }[];
3436
+ heading?: string | undefined;
3437
+ description?: string | undefined;
3438
+ disclaimer?: string | undefined;
3439
+ }>;
3440
+ }, "strip", z.ZodTypeAny, {
3441
+ type: "spaces";
3442
+ variant: "stage" | "mosaic";
3443
+ props: {
3444
+ spaces: {
3445
+ id: string;
3446
+ label: string;
3447
+ imageSrc: string;
3448
+ imageAlt: string;
3449
+ title?: string | undefined;
3450
+ description?: string | undefined;
3451
+ kicker?: string | undefined;
3452
+ tags?: string[] | undefined;
3453
+ }[];
3454
+ heading?: string | undefined;
3455
+ description?: string | undefined;
3456
+ disclaimer?: string | undefined;
3457
+ };
3458
+ theme?: Record<string, string> | undefined;
3459
+ id?: string | undefined;
3460
+ }, {
3461
+ type: "spaces";
3462
+ props: {
3463
+ spaces: {
3464
+ id: string;
3465
+ label: string;
3466
+ imageSrc: string;
3467
+ imageAlt: string;
3468
+ title?: string | undefined;
3469
+ description?: string | undefined;
3470
+ kicker?: string | undefined;
3471
+ tags?: string[] | undefined;
3472
+ }[];
3473
+ heading?: string | undefined;
3474
+ description?: string | undefined;
3475
+ disclaimer?: string | undefined;
3476
+ };
3477
+ theme?: Record<string, string> | undefined;
3478
+ id?: string | undefined;
3479
+ variant?: "stage" | "mosaic" | undefined;
3480
+ }>;
3481
+ declare const ConcernsSectionSchema: z.ZodEffects<z.ZodObject<{
3482
+ id: z.ZodOptional<z.ZodString>;
3483
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3484
+ } & {
3485
+ type: z.ZodLiteral<"concerns">;
3486
+ variant: z.ZodDefault<z.ZodEnum<["figure-map", "list"]>>;
3487
+ props: z.ZodObject<{
3488
+ heading: z.ZodOptional<z.ZodString>;
3489
+ description: z.ZodOptional<z.ZodString>;
3490
+ figureImage: z.ZodOptional<z.ZodString>;
3491
+ figureAlt: z.ZodOptional<z.ZodString>;
3492
+ regions: z.ZodArray<z.ZodObject<{
3493
+ id: z.ZodString;
3494
+ label: z.ZodString;
3495
+ x: z.ZodOptional<z.ZodNumber>;
3496
+ y: z.ZodOptional<z.ZodNumber>;
3497
+ title: z.ZodString;
3498
+ description: z.ZodString;
3499
+ items: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3500
+ href: z.ZodOptional<z.ZodString>;
3501
+ ctaLabel: z.ZodOptional<z.ZodString>;
3502
+ }, "strip", z.ZodTypeAny, {
3503
+ id: string;
3504
+ title: string;
3505
+ description: string;
3506
+ label: string;
3507
+ x?: number | undefined;
3508
+ y?: number | undefined;
3509
+ href?: string | undefined;
3510
+ items?: string[] | undefined;
3511
+ ctaLabel?: string | undefined;
3512
+ }, {
3513
+ id: string;
3514
+ title: string;
3515
+ description: string;
3516
+ label: string;
3517
+ x?: number | undefined;
3518
+ y?: number | undefined;
3519
+ href?: string | undefined;
3520
+ items?: string[] | undefined;
3521
+ ctaLabel?: string | undefined;
3522
+ }>, "many">;
3523
+ disclaimer: z.ZodString;
3524
+ }, "strip", z.ZodTypeAny, {
3525
+ disclaimer: string;
3526
+ regions: {
3527
+ id: string;
3528
+ title: string;
3529
+ description: string;
3530
+ label: string;
3531
+ x?: number | undefined;
3532
+ y?: number | undefined;
3533
+ href?: string | undefined;
3534
+ items?: string[] | undefined;
3535
+ ctaLabel?: string | undefined;
3536
+ }[];
3537
+ heading?: string | undefined;
3538
+ description?: string | undefined;
3539
+ figureImage?: string | undefined;
3540
+ figureAlt?: string | undefined;
3541
+ }, {
3542
+ disclaimer: string;
3543
+ regions: {
3544
+ id: string;
3545
+ title: string;
3546
+ description: string;
3547
+ label: string;
3548
+ x?: number | undefined;
3549
+ y?: number | undefined;
3550
+ href?: string | undefined;
3551
+ items?: string[] | undefined;
3552
+ ctaLabel?: string | undefined;
3553
+ }[];
3554
+ heading?: string | undefined;
3555
+ description?: string | undefined;
3556
+ figureImage?: string | undefined;
3557
+ figureAlt?: string | undefined;
3558
+ }>;
3559
+ }, "strip", z.ZodTypeAny, {
3560
+ type: "concerns";
3561
+ variant: "list" | "figure-map";
3562
+ props: {
3563
+ disclaimer: string;
3564
+ regions: {
3565
+ id: string;
3566
+ title: string;
3567
+ description: string;
3568
+ label: string;
3569
+ x?: number | undefined;
3570
+ y?: number | undefined;
3571
+ href?: string | undefined;
3572
+ items?: string[] | undefined;
3573
+ ctaLabel?: string | undefined;
3574
+ }[];
3575
+ heading?: string | undefined;
3576
+ description?: string | undefined;
3577
+ figureImage?: string | undefined;
3578
+ figureAlt?: string | undefined;
3579
+ };
3580
+ theme?: Record<string, string> | undefined;
3581
+ id?: string | undefined;
3582
+ }, {
3583
+ type: "concerns";
3584
+ props: {
3585
+ disclaimer: string;
3586
+ regions: {
3587
+ id: string;
3588
+ title: string;
3589
+ description: string;
3590
+ label: string;
3591
+ x?: number | undefined;
3592
+ y?: number | undefined;
3593
+ href?: string | undefined;
3594
+ items?: string[] | undefined;
3595
+ ctaLabel?: string | undefined;
3596
+ }[];
3597
+ heading?: string | undefined;
3598
+ description?: string | undefined;
3599
+ figureImage?: string | undefined;
3600
+ figureAlt?: string | undefined;
3601
+ };
3602
+ theme?: Record<string, string> | undefined;
3603
+ id?: string | undefined;
3604
+ variant?: "list" | "figure-map" | undefined;
3605
+ }>, {
3606
+ type: "concerns";
3607
+ variant: "list" | "figure-map";
3608
+ props: {
3609
+ disclaimer: string;
3610
+ regions: {
3611
+ id: string;
3612
+ title: string;
3613
+ description: string;
3614
+ label: string;
3615
+ x?: number | undefined;
3616
+ y?: number | undefined;
3617
+ href?: string | undefined;
3618
+ items?: string[] | undefined;
3619
+ ctaLabel?: string | undefined;
3620
+ }[];
3621
+ heading?: string | undefined;
3622
+ description?: string | undefined;
3623
+ figureImage?: string | undefined;
3624
+ figureAlt?: string | undefined;
3625
+ };
3626
+ theme?: Record<string, string> | undefined;
3627
+ id?: string | undefined;
3628
+ }, {
3629
+ type: "concerns";
3630
+ props: {
3631
+ disclaimer: string;
3632
+ regions: {
3633
+ id: string;
3634
+ title: string;
3635
+ description: string;
3636
+ label: string;
3637
+ x?: number | undefined;
3638
+ y?: number | undefined;
3639
+ href?: string | undefined;
3640
+ items?: string[] | undefined;
3641
+ ctaLabel?: string | undefined;
3642
+ }[];
3643
+ heading?: string | undefined;
3644
+ description?: string | undefined;
3645
+ figureImage?: string | undefined;
3646
+ figureAlt?: string | undefined;
3647
+ };
3648
+ theme?: Record<string, string> | undefined;
3649
+ id?: string | undefined;
3650
+ variant?: "list" | "figure-map" | undefined;
3651
+ }>;
3652
+ /** customSections 용 fallback — `type` 자유, props 는 직렬화만 강제. */
3653
+ declare const CustomSectionSchema: z.ZodObject<{
3654
+ /** 안정적 anchor·dedup·preview 매핑용. 페이지 내 유일. */
3655
+ id: z.ZodOptional<z.ZodString>;
3656
+ /** 빌트인 또는 customSections registry 키. kebab-case. */
3657
+ type: z.ZodString;
3658
+ /** 같은 type 의 비주얼 변형. 빌트인 type 은 enum 으로 좁힘. */
3659
+ variant: z.ZodOptional<z.ZodString>;
3660
+ /** 섹션 스코프 토큰 override (`--rt-*` CSS 변수 → 값). */
3661
+ theme: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3662
+ /** 섹션별 직렬화 props. */
3663
+ props: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodType<unknown, z.ZodTypeDef, unknown>>>;
3664
+ }, "strip", z.ZodTypeAny, {
3665
+ type: string;
3666
+ props: Record<string, unknown>;
3667
+ theme?: Record<string, string> | undefined;
3668
+ id?: string | undefined;
3669
+ variant?: string | undefined;
3670
+ }, {
3671
+ type: string;
3672
+ theme?: Record<string, string> | undefined;
3673
+ id?: string | undefined;
3674
+ variant?: string | undefined;
3675
+ props?: Record<string, unknown> | undefined;
3676
+ }>;
3677
+ declare const BUILTIN_SECTION_SCHEMAS: Record<string, z.ZodTypeAny>;
3678
+ /** 빌트인 type 목록 (renderer registry 와 1:1). */
3679
+ declare const BUILTIN_SECTION_TYPES: readonly string[];
3680
+ type HeroSection = z.output<typeof HeroSectionSchema>;
3681
+ type RichTextSection = z.output<typeof RichTextSectionSchema>;
3682
+ type ServicesSection = z.output<typeof ServicesSectionSchema>;
3683
+ type FaqSection = z.output<typeof FaqSectionSchema>;
3684
+ type CtaBannerSection = z.output<typeof CtaBannerSectionSchema>;
3685
+ type BlogListSection = z.output<typeof BlogListSectionSchema>;
3686
+ type LeadFormSection = z.output<typeof LeadFormSectionSchema>;
3687
+ type TrustSection = z.output<typeof TrustSectionSchema>;
3688
+ type ContactSection = z.output<typeof ContactSectionSchema>;
3689
+ type HoursSection = z.output<typeof HoursSectionSchema>;
3690
+ type PricingSection = z.output<typeof PricingSectionSchema>;
3691
+ type ProcessSection = z.output<typeof ProcessSectionSchema>;
3692
+ type BeforeAfterSection = z.output<typeof BeforeAfterSectionSchema>;
3693
+ type TestimonialsSection = z.output<typeof TestimonialsSectionSchema>;
3694
+ type TeamSection = z.output<typeof TeamSectionSchema>;
3695
+ type ExpertiseSection = z.output<typeof ExpertiseSectionSchema>;
3696
+ type SpacesSection = z.output<typeof SpacesSectionSchema>;
3697
+ type ConcernsSection = z.output<typeof ConcernsSectionSchema>;
3698
+ type FooterSection = z.output<typeof FooterSectionSchema>;
3699
+ type CustomSection = z.output<typeof CustomSectionSchema>;
3700
+ /** 파싱 결과 섹션 (defaults 적용 후). */
3701
+ type Section = HeroSection | RichTextSection | ServicesSection | FaqSection | CtaBannerSection | BlogListSection | LeadFormSection | TrustSection | ContactSection | HoursSection | PricingSection | ProcessSection | BeforeAfterSection | TestimonialsSection | TeamSection | ExpertiseSection | SpacesSection | ConcernsSection | FooterSection | CustomSection;
3702
+ /** config 작성용 섹션 (defaults 생략 가능). `site.config.ts` 에서 이 타입 사용. */
3703
+ type SectionInput = z.input<typeof HeroSectionSchema> | z.input<typeof RichTextSectionSchema> | z.input<typeof ServicesSectionSchema> | z.input<typeof FaqSectionSchema> | z.input<typeof CtaBannerSectionSchema> | z.input<typeof BlogListSectionSchema> | z.input<typeof LeadFormSectionSchema> | z.input<typeof TrustSectionSchema> | z.input<typeof ContactSectionSchema> | z.input<typeof HoursSectionSchema> | z.input<typeof PricingSectionSchema> | z.input<typeof ProcessSectionSchema> | z.input<typeof BeforeAfterSectionSchema> | z.input<typeof TestimonialsSectionSchema> | z.input<typeof TeamSectionSchema> | z.input<typeof ExpertiseSectionSchema> | z.input<typeof SpacesSectionSchema> | z.input<typeof ConcernsSectionSchema> | z.input<typeof FooterSectionSchema> | z.input<typeof CustomSectionSchema>;
3704
+ /**
3705
+ * 섹션 스키마 — 빌트인 type 이면 해당 스키마로 *강제* 검증 (union fallthrough 로
3706
+ * 빌트인 오타이핑이 CustomSection 으로 조용히 통과하는 것을 차단), 미지 type 은
3707
+ * CustomSection 으로 통과 (렌더러가 customSections registry 로 해석).
3708
+ */
3709
+ declare const SectionSchema: z.ZodType<Section, z.ZodTypeDef, SectionInput>;
3710
+ declare const SiteConfigSchema: z.ZodObject<{
3711
+ site: z.ZodObject<{
3712
+ /** canonical origin. 생략 시 소비측이 `SITE_URL` env 등으로 해석. */
3713
+ url: z.ZodOptional<z.ZodString>;
3714
+ title: z.ZodString;
3715
+ description: z.ZodOptional<z.ZodString>;
3716
+ locale: z.ZodDefault<z.ZodString>;
3717
+ og: z.ZodOptional<z.ZodObject<{
3718
+ image: z.ZodOptional<z.ZodString>;
3719
+ }, "strip", z.ZodTypeAny, {
3720
+ image?: string | undefined;
3721
+ }, {
3722
+ image?: string | undefined;
3723
+ }>>;
3724
+ }, "strip", z.ZodTypeAny, {
3725
+ locale: string;
3726
+ title: string;
3727
+ url?: string | undefined;
3728
+ description?: string | undefined;
3729
+ og?: {
3730
+ image?: string | undefined;
3731
+ } | undefined;
3732
+ }, {
3733
+ title: string;
3734
+ locale?: string | undefined;
3735
+ url?: string | undefined;
3736
+ description?: string | undefined;
3737
+ og?: {
3738
+ image?: string | undefined;
3739
+ } | undefined;
3740
+ }>;
3741
+ /**
3742
+ * 콘텐츠 스트림 분리 (ADR-0060). 비우면 단일 /blog(레거시 동작). 선언 순서 =
3743
+ * 라우팅 우선순위. `routes.ts` 팩토리에 `collections` 로 전달해 sitemap/feed/
3744
+ * 아카이브를 스트림별로 파생.
3745
+ */
3746
+ collections: z.ZodDefault<z.ZodArray<z.ZodObject<{
3747
+ /** 안정 식별자 (라우트/가드/파생 키). */
3748
+ key: z.ZodString;
3749
+ /** 작성자 카드·nav 라벨. */
3750
+ label: z.ZodString;
3751
+ /** 라우트 base path (예: "/notice" | "/blog"). 앞 슬래시 포함. */
3752
+ basePath: z.ZodString;
3753
+ /** 레이아웃 레지스트리 키 (board=게시판, grid=카드 그리드, …). 미지 키는 렌더러 fallback. */
3754
+ layout: z.ZodDefault<z.ZodString>;
3755
+ /** 이 스트림에 속하는 category slug 들. */
3756
+ categories: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
3757
+ /** RSS 피드 포함. */
3758
+ feed: z.ZodDefault<z.ZodBoolean>;
3759
+ /** `${basePath}/categories/{slug}` 아카이브 생성. */
3760
+ archives: z.ZodDefault<z.ZodBoolean>;
3761
+ /** 글별 동적 OG. */
3762
+ og: z.ZodDefault<z.ZodBoolean>;
3763
+ /** 작성 UX: 하위 카테고리 1개 필수(미선택 발행 차단). */
3764
+ requireSubcategory: z.ZodDefault<z.ZodBoolean>;
3765
+ /** 작성 UX: 상단고정 토글 노출. */
3766
+ pinning: z.ZodDefault<z.ZodBoolean>;
3767
+ /** nav/카드 아이콘 키 (선택). */
3768
+ icon: z.ZodOptional<z.ZodString>;
3769
+ }, "strip", z.ZodTypeAny, {
3770
+ layout: string;
3771
+ categories: string[];
3772
+ label: string;
3773
+ key: string;
3774
+ basePath: string;
3775
+ feed: boolean;
3776
+ archives: boolean;
3777
+ og: boolean;
3778
+ requireSubcategory: boolean;
3779
+ pinning: boolean;
3780
+ icon?: string | undefined;
3781
+ }, {
3782
+ label: string;
3783
+ key: string;
3784
+ basePath: string;
3785
+ layout?: string | undefined;
3786
+ icon?: string | undefined;
3787
+ categories?: string[] | undefined;
3788
+ feed?: boolean | undefined;
3789
+ archives?: boolean | undefined;
3790
+ og?: boolean | undefined;
3791
+ requireSubcategory?: boolean | undefined;
3792
+ pinning?: boolean | undefined;
3793
+ }>, "many">>;
3794
+ /** 사이트 전역 토큰 override (`--rt-*` CSS 변수 → 값). 비우면 admin /design SSoT. */
3795
+ theme: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
3796
+ nav: z.ZodDefault<z.ZodArray<z.ZodObject<{
3797
+ label: z.ZodString;
3798
+ href: z.ZodString;
3799
+ children: z.ZodOptional<z.ZodArray<z.ZodObject<{
3800
+ label: z.ZodString;
3801
+ href: z.ZodString;
3802
+ }, "strip", z.ZodTypeAny, {
3803
+ href: string;
3804
+ label: string;
3805
+ }, {
3806
+ href: string;
3807
+ label: string;
3808
+ }>, "many">>;
3809
+ }, "strip", z.ZodTypeAny, {
3810
+ href: string;
3811
+ label: string;
3812
+ children?: {
3813
+ href: string;
3814
+ label: string;
3815
+ }[] | undefined;
3816
+ }, {
3817
+ href: string;
3818
+ label: string;
3819
+ children?: {
3820
+ href: string;
3821
+ label: string;
3822
+ }[] | undefined;
3823
+ }>, "many">>;
3824
+ /** path("/", "/services", …) → 섹션 배열. */
3825
+ pages: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodType<Section, z.ZodTypeDef, SectionInput>, "many">>;
3826
+ }, "strip", z.ZodTypeAny, {
3827
+ collections: {
3828
+ layout: string;
3829
+ categories: string[];
3830
+ label: string;
3831
+ key: string;
3832
+ basePath: string;
3833
+ feed: boolean;
3834
+ archives: boolean;
3835
+ og: boolean;
3836
+ requireSubcategory: boolean;
3837
+ pinning: boolean;
3838
+ icon?: string | undefined;
3839
+ }[];
3840
+ theme: Record<string, string>;
3841
+ nav: {
3842
+ href: string;
3843
+ label: string;
3844
+ children?: {
3845
+ href: string;
3846
+ label: string;
3847
+ }[] | undefined;
3848
+ }[];
3849
+ site: {
3850
+ locale: string;
3851
+ title: string;
3852
+ url?: string | undefined;
3853
+ description?: string | undefined;
3854
+ og?: {
3855
+ image?: string | undefined;
3856
+ } | undefined;
3857
+ };
3858
+ pages: Record<string, Section[]>;
3859
+ }, {
3860
+ site: {
3861
+ title: string;
3862
+ locale?: string | undefined;
3863
+ url?: string | undefined;
3864
+ description?: string | undefined;
3865
+ og?: {
3866
+ image?: string | undefined;
3867
+ } | undefined;
3868
+ };
3869
+ pages: Record<string, SectionInput[]>;
3870
+ collections?: {
3871
+ label: string;
3872
+ key: string;
3873
+ basePath: string;
3874
+ layout?: string | undefined;
3875
+ icon?: string | undefined;
3876
+ categories?: string[] | undefined;
3877
+ feed?: boolean | undefined;
3878
+ archives?: boolean | undefined;
3879
+ og?: boolean | undefined;
3880
+ requireSubcategory?: boolean | undefined;
3881
+ pinning?: boolean | undefined;
3882
+ }[] | undefined;
3883
+ theme?: Record<string, string> | undefined;
3884
+ nav?: {
3885
+ href: string;
3886
+ label: string;
3887
+ children?: {
3888
+ href: string;
3889
+ label: string;
3890
+ }[] | undefined;
3891
+ }[] | undefined;
3892
+ }>;
3893
+ type SiteConfig = z.output<typeof SiteConfigSchema>;
3894
+ /** config 작성용 (defaults 생략 가능). */
3895
+ type SiteConfigInput = Omit<z.input<typeof SiteConfigSchema>, "pages"> & {
3896
+ pages: Record<string, SectionInput[]>;
3897
+ };
3898
+ /** config 검증 + defaults 적용. 실패 시 ZodError throw (빌드 타임 fail-fast 용). */
3899
+ declare function parseSiteConfig(input: unknown): SiteConfig;
3900
+ /**
3901
+ * `site.config.ts` 작성 헬퍼 — 타입 추론 + 즉시 검증.
3902
+ *
3903
+ * ```ts
3904
+ * import { defineSiteConfig } from "@roottale/cms-renderer-next/templates";
3905
+ * export default defineSiteConfig({ site: { title: "…" }, pages: { "/": [ … ] } });
3906
+ * ```
3907
+ */
3908
+ declare function defineSiteConfig(input: SiteConfigInput): SiteConfig;
3909
+
3910
+ export { parseSiteConfig as $, NavItemSchema as A, type BeforeAfterSection as B, type ConcernsSection as C, PricingSectionSchema as D, type ExpertiseSection as E, type FaqSection as F, ProcessSectionSchema as G, type HeroSection as H, RichTextSectionSchema as I, SECTION_VARIANTS as J, type Section as K, type LeadFormSection as L, type SectionCta as M, type NavItem as N, type SectionInput as O, type PricingSection as P, SectionSchema as Q, type RichTextSection as R, type SpacesSection as S, type TeamSection as T, ServicesSectionSchema as U, SiteConfigSchema as V, SpacesSectionSchema as W, TeamSectionSchema as X, TestimonialsSectionSchema as Y, TrustSectionSchema as Z, defineSiteConfig as _, type ContactSection as a, type CtaBannerSection as b, type FooterSection as c, type HoursSection as d, type ProcessSection as e, type ServicesSection as f, type TestimonialsSection as g, type TrustSection as h, type SiteConfig as i, type SiteConfigInput as j, BUILTIN_SECTION_SCHEMAS as k, BUILTIN_SECTION_TYPES as l, BeforeAfterSectionSchema as m, type BlogListSection as n, BlogListSectionSchema as o, ConcernsSectionSchema as p, ContactSectionSchema as q, CtaBannerSectionSchema as r, type CustomSection as s, CustomSectionSchema as t, ExpertiseSectionSchema as u, FaqSectionSchema as v, FooterSectionSchema as w, HeroSectionSchema as x, HoursSectionSchema as y, LeadFormSectionSchema as z };