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